diff --git a/.circleci/config.yml b/.circleci/config.yml index ec6fe9d45d..44e0c2d1c1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -115,8 +115,8 @@ commands: name: Download and install golang command: | sudo rm -rf /usr/local/go - wget https://dl.google.com/go/go1.16.linux-amd64.tar.gz - sudo tar -C /usr/local -xzf go1.16.linux-amd64.tar.gz + wget https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz + sudo tar -C /usr/local -xzf go1.16.3.linux-amd64.tar.gz # install_go_deps installs the go dependencies of the project. install_go_deps: @@ -147,7 +147,7 @@ commands: parameters: core-version: type: string - default: "" # latest version by default + default: "17.0.0-568.ea5878e.xenial~buildtests" steps: - run: name: Install Stellar Core <<#parameters.core-version>> (version <>)<> @@ -218,13 +218,6 @@ commands: name: Build release artifacts command: go run ./support/scripts/build_release_artifacts/main.go - # send_coverage_report sends coverage report to codecov.io - send_coverage_report: - steps: - - run: - name: Send report to codecov.io - command: bash <(curl -s https://codecov.io/bash) - #-----------------------------------------------------------------------------# # Jobs use the commands to accomplish a given task, and run through workflows # #-----------------------------------------------------------------------------# @@ -248,7 +241,7 @@ jobs: test_code_1_15: working_directory: /go/src/github.com/stellar/go docker: - - image: golang:1.15.10 + - image: golang:1.15.11 environment: GO111MODULE: "on" PGHOST: localhost @@ -268,7 +261,7 @@ jobs: test_code_1_15_postgres10: working_directory: /go/src/github.com/stellar/go docker: - - image: golang:1.15.10 + - image: golang:1.15.11 environment: GO111MODULE: "on" PGHOST: localhost @@ -284,13 +277,12 @@ jobs: steps: - install_go_deps - test_packages - - send_coverage_report # test_code_1_16 performs all package tests using Go 1.16. test_code_1_16: working_directory: /go/src/github.com/stellar/go docker: - - image: golang:1.16.2 + - image: golang:1.16.3 environment: GO111MODULE: "on" PGHOST: localhost @@ -310,7 +302,7 @@ jobs: test_code_1_16_postgres10: working_directory: /go/src/github.com/stellar/go docker: - - image: golang:1.16.2 + - image: golang:1.16.3 environment: GO111MODULE: "on" PGHOST: localhost @@ -326,7 +318,6 @@ jobs: steps: - install_go_deps - test_packages - - send_coverage_report # publish_artifacts builds and uploads artifacts to any tagged commit. # # NOTE: this commands relies on an env var called GITHUB_TOKEN which is a @@ -334,7 +325,7 @@ jobs: publish_artifacts: working_directory: /go/src/github.com/stellar/go docker: - - image: golang:1.16.2 + - image: golang:1.16.3 steps: - check_deprecations - install_go_deps @@ -383,6 +374,19 @@ jobs: docker build -f services/horizon/docker/Dockerfile.dev -t stellar/horizon:$VERSION . docker push stellar/horizon:$VERSION + test_verify_range_docker_image: + docker: + - image: docker:18.04-git + steps: + - checkout + - setup_remote_docker + - run: + name: Build and test Verify Range Docker image + command: | + docker build -f services/horizon/docker/verify-range/Dockerfile -t stellar/horizon-verify-range services/horizon/docker/verify-range/ + # Any range should do for basic testing, this range was chosen pretty early in history so that it only takes a few mins to run + docker run -ti -e BRANCH=${CIRCLE_SHA1} -e FROM=10000063 -e TO=10000127 stellar/horizon-verify-range + publish_latest_horizon_docker_image: docker: - image: docker:18.04-git @@ -417,10 +421,6 @@ jobs: enable-captive-core: type: boolean default: false - # TODO: remove once a stellar core version with cap-35 is released - enable-cap-35-tests: - type: boolean - default: false working_directory: ~/go/src/github.com/stellar/go machine: image: ubuntu-1604:202010-01 @@ -439,28 +439,12 @@ jobs: - when: condition: <> steps: - - unless: - condition: <> - steps: - # Install the default version of stellar core - - install_stellar_core - - when: - condition: <> - steps: - # Install a Stellar Core version with CAP35 support - - install_stellar_core: - core-version: 15.3.0-498.7a7f18c.xenial~SetTrustlineFlagsPR~buildtests + - install_stellar_core - run: name: Setting Captive Core env variables command: echo "export HORIZON_INTEGRATION_ENABLE_CAPTIVE_CORE=true" >> $BASH_ENV - - when: - condition: <> - steps: - - run: - name: Setting CAP35 env variables - command: echo "export HORIZON_INTEGRATION_ENABLE_CAP_35=true" >> $BASH_ENV - run: - name: Run Horizon integration tests <<#parameters.enable-captive-core>>(With captive core)<> <<#parameters.enable-cap-35-tests>>(With CAP35)<> + name: Run Horizon integration tests <<#parameters.enable-captive-core>>(With captive core)<> # Currently all integration tests are in a single directory. # Pulling the image helps with test running time command: | @@ -488,11 +472,7 @@ workflows: - test_horizon_integration: name: test_horizon_integration_with_captive_core enable-captive-core: true - # ... and cap35 with captive core - - test_horizon_integration: - name: test_horizon_integration_cap35_with_captive_core - enable-captive-core: true - enable-cap-35-tests: true + - test_verify_range_docker_image - publish_state_diff_docker_image: filters: branches: diff --git a/clients/horizonclient/CHANGELOG.md b/clients/horizonclient/CHANGELOG.md index 292f9aae93..d2b82373ab 100644 --- a/clients/horizonclient/CHANGELOG.md +++ b/clients/horizonclient/CHANGELOG.md @@ -3,6 +3,11 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## Unreleased + +* Added transaction and operation result codes to the horizonclient.Error string for easy glancing at string only errors for underlying cause. +* Fix bug in the transaction submission where requests with large transaction payloads fail with an HTTP 414 URI Too Long error ([#3643](https://github.com/stellar/go/pull/3643)). + ## [v7.0.0](https://github.com/stellar/go/releases/tag/horizonclient-v7.0.0) - 2021-05-15 None diff --git a/clients/horizonclient/account_request.go b/clients/horizonclient/account_request.go index a9ee2b71f0..91c85e024a 100644 --- a/clients/horizonclient/account_request.go +++ b/clients/horizonclient/account_request.go @@ -2,6 +2,7 @@ package horizonclient import ( "fmt" + "net/http" "net/url" "github.com/stellar/go/support/errors" @@ -46,3 +47,13 @@ func (ar AccountRequest) BuildURL() (endpoint string, err error) { return endpoint, err } + +// HTTPRequest returns the http request for the account endpoint +func (ar AccountRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := ar.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} diff --git a/clients/horizonclient/accounts_request.go b/clients/horizonclient/accounts_request.go index c42b9e2cd6..1d57a31232 100644 --- a/clients/horizonclient/accounts_request.go +++ b/clients/horizonclient/accounts_request.go @@ -2,6 +2,7 @@ package horizonclient import ( "fmt" + "net/http" "net/url" "github.com/stellar/go/support/errors" @@ -54,3 +55,13 @@ func (r AccountsRequest) BuildURL() (endpoint string, err error) { return endpoint, err } + +// HTTPRequest returns the http request for the accounts endpoint +func (r AccountsRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := r.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} diff --git a/clients/horizonclient/asset_request.go b/clients/horizonclient/asset_request.go index 65799b0e8e..f0a8f3c522 100644 --- a/clients/horizonclient/asset_request.go +++ b/clients/horizonclient/asset_request.go @@ -2,6 +2,7 @@ package horizonclient import ( "fmt" + "net/http" "net/url" "github.com/stellar/go/support/errors" @@ -27,3 +28,13 @@ func (ar AssetRequest) BuildURL() (endpoint string, err error) { return endpoint, err } + +// HTTPRequest returns the http request for the assets endpoint +func (ar AssetRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := ar.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} diff --git a/clients/horizonclient/claimable_balance_request.go b/clients/horizonclient/claimable_balance_request.go index 06631fff81..eb80c13249 100644 --- a/clients/horizonclient/claimable_balance_request.go +++ b/clients/horizonclient/claimable_balance_request.go @@ -2,6 +2,7 @@ package horizonclient import ( "fmt" + "net/http" "net/url" "github.com/stellar/go/support/errors" @@ -40,3 +41,13 @@ func (cbr ClaimableBalanceRequest) BuildURL() (endpoint string, err error) { return endpoint, err } + +// HTTPRequest returns the http request for the claimable balances endpoint +func (cbr ClaimableBalanceRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := cbr.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} diff --git a/clients/horizonclient/client.go b/clients/horizonclient/client.go index e996f27b09..7add6a02fd 100644 --- a/clients/horizonclient/client.go +++ b/clients/horizonclient/client.go @@ -26,18 +26,13 @@ import ( // sendRequest builds the URL for the given horizon request and sends the url to a horizon server func (c *Client) sendRequest(hr HorizonRequest, resp interface{}) (err error) { - endpoint, err := hr.BuildURL() - if err != nil { - return - } - c.HorizonURL = c.fixHorizonURL() - _, ok := hr.(submitRequest) - if ok { - return c.sendRequestURL(c.HorizonURL+endpoint, "post", resp) + req, err := hr.HTTPRequest(c.HorizonURL) + if err != nil { + return err } - return c.sendRequestURL(c.HorizonURL+endpoint, "get", resp) + return c.sendHTTPRequest(req, resp) } // checkMemoRequired implements a memo required check as defined in @@ -105,36 +100,31 @@ func (c *Client) checkMemoRequired(transaction *txnbuild.Transaction) error { return nil } -// sendRequestURL sends a url to a horizon server. +// sendGetRequest sends a HTTP GET request to a horizon server. // It can be used for requests that do not implement the HorizonRequest interface. -func (c *Client) sendRequestURL(requestURL string, method string, a interface{}) (err error) { - var req *http.Request - - if method == "post" || method == "POST" { - req, err = http.NewRequest("POST", requestURL, nil) - req.Header.Set("Content-Type", "application/x-www-form-urlencoded; param=value") - } else { - req, err = http.NewRequest("GET", requestURL, nil) - } - +func (c *Client) sendGetRequest(requestURL string, a interface{}) error { + req, err := http.NewRequest("GET", requestURL, nil) if err != nil { return errors.Wrap(err, "error creating HTTP request") } + return c.sendHTTPRequest(req, a) +} + +func (c *Client) sendHTTPRequest(req *http.Request, a interface{}) error { c.setClientAppHeaders(req) c.setDefaultClient() + if c.horizonTimeout == 0 { c.horizonTimeout = HorizonTimeout } ctx, cancel := context.WithTimeout(context.Background(), c.horizonTimeout) - resp, err := c.HTTP.Do(req.WithContext(ctx)) - if err != nil { - cancel() - return - } + defer cancel() - err = decodeResponse(resp, &a, c) - cancel() - return + if resp, err := c.HTTP.Do(req.WithContext(ctx)); err != nil { + return err + } else { + return decodeResponse(resp, &a, c) + } } // stream handles connections to endpoints that support streaming on a horizon server @@ -587,7 +577,7 @@ func (c *Client) Fund(addr string) (tx hProtocol.Transaction, err error) { return tx, errors.New("can't fund account from friendbot on production network") } friendbotURL := fmt.Sprintf("%sfriendbot?addr=%s", c.fixHorizonURL(), addr) - err = c.sendRequestURL(friendbotURL, "get", &tx) + err = c.sendGetRequest(friendbotURL, &tx) return } @@ -678,7 +668,7 @@ func (c *Client) FetchTimebounds(seconds int64) (txnbuild.Timebounds, error) { // Root loads the root endpoint of horizon func (c *Client) Root() (root hProtocol.Root, err error) { - err = c.sendRequestURL(c.fixHorizonURL(), "get", &root) + err = c.sendGetRequest(c.fixHorizonURL(), &root) return } @@ -689,67 +679,67 @@ func (c *Client) Version() string { // NextAccountsPage returns the next page of accounts. func (c *Client) NextAccountsPage(page hProtocol.AccountsPage) (accounts hProtocol.AccountsPage, err error) { - err = c.sendRequestURL(page.Links.Next.Href, "get", &accounts) + err = c.sendGetRequest(page.Links.Next.Href, &accounts) return } // NextAssetsPage returns the next page of assets. func (c *Client) NextAssetsPage(page hProtocol.AssetsPage) (assets hProtocol.AssetsPage, err error) { - err = c.sendRequestURL(page.Links.Next.Href, "get", &assets) + err = c.sendGetRequest(page.Links.Next.Href, &assets) return } // PrevAssetsPage returns the previous page of assets. func (c *Client) PrevAssetsPage(page hProtocol.AssetsPage) (assets hProtocol.AssetsPage, err error) { - err = c.sendRequestURL(page.Links.Prev.Href, "get", &assets) + err = c.sendGetRequest(page.Links.Prev.Href, &assets) return } // NextLedgersPage returns the next page of ledgers. func (c *Client) NextLedgersPage(page hProtocol.LedgersPage) (ledgers hProtocol.LedgersPage, err error) { - err = c.sendRequestURL(page.Links.Next.Href, "get", &ledgers) + err = c.sendGetRequest(page.Links.Next.Href, &ledgers) return } // PrevLedgersPage returns the previous page of ledgers. func (c *Client) PrevLedgersPage(page hProtocol.LedgersPage) (ledgers hProtocol.LedgersPage, err error) { - err = c.sendRequestURL(page.Links.Prev.Href, "get", &ledgers) + err = c.sendGetRequest(page.Links.Prev.Href, &ledgers) return } // NextEffectsPage returns the next page of effects. func (c *Client) NextEffectsPage(page effects.EffectsPage) (efp effects.EffectsPage, err error) { - err = c.sendRequestURL(page.Links.Next.Href, "get", &efp) + err = c.sendGetRequest(page.Links.Next.Href, &efp) return } // PrevEffectsPage returns the previous page of effects. func (c *Client) PrevEffectsPage(page effects.EffectsPage) (efp effects.EffectsPage, err error) { - err = c.sendRequestURL(page.Links.Prev.Href, "get", &efp) + err = c.sendGetRequest(page.Links.Prev.Href, &efp) return } // NextTransactionsPage returns the next page of transactions. func (c *Client) NextTransactionsPage(page hProtocol.TransactionsPage) (transactions hProtocol.TransactionsPage, err error) { - err = c.sendRequestURL(page.Links.Next.Href, "get", &transactions) + err = c.sendGetRequest(page.Links.Next.Href, &transactions) return } // PrevTransactionsPage returns the previous page of transactions. func (c *Client) PrevTransactionsPage(page hProtocol.TransactionsPage) (transactions hProtocol.TransactionsPage, err error) { - err = c.sendRequestURL(page.Links.Prev.Href, "get", &transactions) + err = c.sendGetRequest(page.Links.Prev.Href, &transactions) return } // NextOperationsPage returns the next page of operations. func (c *Client) NextOperationsPage(page operations.OperationsPage) (operations operations.OperationsPage, err error) { - err = c.sendRequestURL(page.Links.Next.Href, "get", &operations) + err = c.sendGetRequest(page.Links.Next.Href, &operations) return } // PrevOperationsPage returns the previous page of operations. func (c *Client) PrevOperationsPage(page operations.OperationsPage) (operations operations.OperationsPage, err error) { - err = c.sendRequestURL(page.Links.Prev.Href, "get", &operations) + err = c.sendGetRequest(page.Links.Prev.Href, &operations) return } @@ -765,25 +755,25 @@ func (c *Client) PrevPaymentsPage(page operations.OperationsPage) (operations.Op // NextOffersPage returns the next page of offers. func (c *Client) NextOffersPage(page hProtocol.OffersPage) (offers hProtocol.OffersPage, err error) { - err = c.sendRequestURL(page.Links.Next.Href, "get", &offers) + err = c.sendGetRequest(page.Links.Next.Href, &offers) return } // PrevOffersPage returns the previous page of offers. func (c *Client) PrevOffersPage(page hProtocol.OffersPage) (offers hProtocol.OffersPage, err error) { - err = c.sendRequestURL(page.Links.Prev.Href, "get", &offers) + err = c.sendGetRequest(page.Links.Prev.Href, &offers) return } // NextTradesPage returns the next page of trades. func (c *Client) NextTradesPage(page hProtocol.TradesPage) (trades hProtocol.TradesPage, err error) { - err = c.sendRequestURL(page.Links.Next.Href, "get", &trades) + err = c.sendGetRequest(page.Links.Next.Href, &trades) return } // PrevTradesPage returns the previous page of trades. func (c *Client) PrevTradesPage(page hProtocol.TradesPage) (trades hProtocol.TradesPage, err error) { - err = c.sendRequestURL(page.Links.Prev.Href, "get", &trades) + err = c.sendGetRequest(page.Links.Prev.Href, &trades) return } @@ -804,14 +794,14 @@ func (c *Client) HomeDomainForAccount(aid string) (string, error) { // NextTradeAggregationsPage returns the next page of trade aggregations from the current // trade aggregations response. func (c *Client) NextTradeAggregationsPage(page hProtocol.TradeAggregationsPage) (ta hProtocol.TradeAggregationsPage, err error) { - err = c.sendRequestURL(page.Links.Next.Href, "get", &ta) + err = c.sendGetRequest(page.Links.Next.Href, &ta) return } // PrevTradeAggregationsPage returns the previous page of trade aggregations from the current // trade aggregations response. func (c *Client) PrevTradeAggregationsPage(page hProtocol.TradeAggregationsPage) (ta hProtocol.TradeAggregationsPage, err error) { - err = c.sendRequestURL(page.Links.Prev.Href, "get", &ta) + err = c.sendGetRequest(page.Links.Prev.Href, &ta) return } diff --git a/clients/horizonclient/effect_request.go b/clients/horizonclient/effect_request.go index 232e3e059f..9597373a4d 100644 --- a/clients/horizonclient/effect_request.go +++ b/clients/horizonclient/effect_request.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" "github.com/stellar/go/protocols/horizon/effects" @@ -80,3 +81,13 @@ func (er EffectRequest) StreamEffects(ctx context.Context, client *Client, handl return nil }) } + +// HTTPRequest returns the http request for the effects endpoint +func (er EffectRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := er.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} diff --git a/clients/horizonclient/error.go b/clients/horizonclient/error.go index 09c87af0ea..75beb54786 100644 --- a/clients/horizonclient/error.go +++ b/clients/horizonclient/error.go @@ -2,6 +2,7 @@ package horizonclient import ( "encoding/json" + "strings" hProtocol "github.com/stellar/go/protocols/horizon" "github.com/stellar/go/support/errors" @@ -9,7 +10,18 @@ import ( ) func (herr Error) Error() string { - return `horizon error: "` + herr.Problem.Title + `" - check horizon.Error.Problem for more information` + s := strings.Builder{} + s.WriteString(`horizon error: "`) + s.WriteString(herr.Problem.Title) + s.WriteString(`" `) + if rc, err := herr.ResultCodes(); err == nil { + s.WriteString(`(`) + resultCodes := append([]string{rc.TransactionCode}, rc.OperationCodes...) + s.WriteString(strings.Join(resultCodes, `, `)) + s.WriteString(`) `) + } + s.WriteString(`- check horizon.Error.Problem for more information`) + return s.String() } // Envelope extracts the transaction envelope that triggered this error from the diff --git a/clients/horizonclient/error_test.go b/clients/horizonclient/error_test.go index a4bc0972cc..f7584bea16 100644 --- a/clients/horizonclient/error_test.go +++ b/clients/horizonclient/error_test.go @@ -3,9 +3,61 @@ package horizonclient import ( "testing" + "github.com/stellar/go/support/render/problem" "github.com/stretchr/testify/assert" ) +func TestError_Error(t *testing.T) { + var herr Error + + // transaction failed happy path: with the appropriate extra fields + herr = Error{ + Problem: problem.P{ + Title: "Transaction Failed", + Type: "transaction_failed", + Extras: map[string]interface{}{ + "result_codes": map[string]interface{}{ + "transaction": "tx_failed", + "operations": []string{"op_underfunded", "op_already_exists"}, + }, + }, + }, + } + assert.Equal(t, `horizon error: "Transaction Failed" (tx_failed, op_underfunded, op_already_exists) - check horizon.Error.Problem for more information`, herr.Error()) + + // transaction failed sad path: missing result_codes extra + herr = Error{ + Problem: problem.P{ + Title: "Transaction Failed", + Type: "transaction_failed", + Extras: map[string]interface{}{}, + }, + } + assert.Equal(t, `horizon error: "Transaction Failed" - check horizon.Error.Problem for more information`, herr.Error()) + + // transaction failed sad path: unparseable result_codes extra + herr = Error{ + Problem: problem.P{ + Title: "Transaction Failed", + Type: "transaction_failed", + Extras: map[string]interface{}{ + "result_codes": "kaboom", + }, + }, + } + assert.Equal(t, `horizon error: "Transaction Failed" - check horizon.Error.Problem for more information`, herr.Error()) + + // non-transaction errors + herr = Error{ + Problem: problem.P{ + Type: "https://stellar.org/horizon-errors/not_found", + Title: "Resource Missing", + Status: 404, + }, + } + assert.Equal(t, `horizon error: "Resource Missing" - check horizon.Error.Problem for more information`, herr.Error()) +} + func TestError_ResultCodes(t *testing.T) { var herr Error diff --git a/clients/horizonclient/fee_stats_request.go b/clients/horizonclient/fee_stats_request.go index a7e367be74..24c55a6483 100644 --- a/clients/horizonclient/fee_stats_request.go +++ b/clients/horizonclient/fee_stats_request.go @@ -1,6 +1,9 @@ package horizonclient -import "github.com/stellar/go/support/errors" +import ( + "github.com/stellar/go/support/errors" + "net/http" +) // BuildURL returns the url for getting fee stats about a running horizon instance func (fr feeStatsRequest) BuildURL() (endpoint string, err error) { @@ -11,3 +14,13 @@ func (fr feeStatsRequest) BuildURL() (endpoint string, err error) { return } + +// HTTPRequest returns the http request for the fee stats endpoint +func (fr feeStatsRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := fr.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} diff --git a/clients/horizonclient/ledger_request.go b/clients/horizonclient/ledger_request.go index 85b1388cff..cb9f85afb4 100644 --- a/clients/horizonclient/ledger_request.go +++ b/clients/horizonclient/ledger_request.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" hProtocol "github.com/stellar/go/protocols/horizon" @@ -40,6 +41,16 @@ func (lr LedgerRequest) BuildURL() (endpoint string, err error) { return endpoint, err } +// HTTPRequest returns the http request for the ledger endpoint +func (lr LedgerRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := lr.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} + // LedgerHandler is a function that is called when a new ledger is received type LedgerHandler func(hProtocol.Ledger) diff --git a/clients/horizonclient/main.go b/clients/horizonclient/main.go index 62b897cad7..aeb8b6dddb 100644 --- a/clients/horizonclient/main.go +++ b/clients/horizonclient/main.go @@ -225,8 +225,10 @@ var DefaultPublicNetClient = &Client{ } // HorizonRequest contains methods implemented by request structs for horizon endpoints. +// Action needed in release: horizonclient-v8.0.0: remove BuildURL() type HorizonRequest interface { BuildURL() (string, error) + HTTPRequest(horizonURL string) (*http.Request, error) } // AccountsRequest struct contains data for making requests to the accounts endpoint of a horizon server. diff --git a/clients/horizonclient/main_test.go b/clients/horizonclient/main_test.go index dc935305a2..ab1aaab498 100644 --- a/clients/horizonclient/main_test.go +++ b/clients/horizonclient/main_test.go @@ -2,8 +2,8 @@ package horizonclient import ( "fmt" + "github.com/jarcoal/httpmock" "net/http" - "net/url" "testing" "time" @@ -835,8 +835,12 @@ func TestSubmitTransactionXDRRequest(t *testing.T) { // successful tx hmock.On( "POST", - "https://localhost/transactions?tx=AAAAABB90WssODNIgi6BHveqzxTRmIpvAFRyVNM%2BHm2GVuCcAAAAZAAABD0AAuV%2FAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAyTBGxOgfSApppsTnb%2FYRr6gOR8WT0LZNrhLh4y3FCgoAAAAXSHboAAAAAAAAAAABhlbgnAAAAEAivKe977CQCxMOKTuj%2BcWTFqc2OOJU8qGr9afrgu2zDmQaX5Q0cNshc3PiBwe0qw%2F%2BD%2FqJk5QqM5dYeSUGeDQP", - ).ReturnString(200, txSuccess) + "https://localhost/transactions", + ).Return(func(request *http.Request) (*http.Response, error) { + val := request.FormValue("tx") + assert.Equal(t, val, txXdr) + return httpmock.NewStringResponse(http.StatusOK, txSuccess), nil + }) resp, err := client.SubmitTransactionXDR(txXdr) if assert.NoError(t, err) { @@ -844,7 +848,7 @@ func TestSubmitTransactionXDRRequest(t *testing.T) { assert.Equal(t, resp.Links.Transaction.Href, "https://horizon-testnet.stellar.org/transactions/bcc7a97264dca0a51a63f7ea971b5e7458e334489673078bb2a34eb0cce910ca") assert.Equal(t, resp.Hash, "bcc7a97264dca0a51a63f7ea971b5e7458e334489673078bb2a34eb0cce910ca") assert.Equal(t, resp.Ledger, int32(354811)) - assert.Equal(t, resp.EnvelopeXdr, `AAAAABB90WssODNIgi6BHveqzxTRmIpvAFRyVNM+Hm2GVuCcAAAAZAAABD0AAuV/AAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAyTBGxOgfSApppsTnb/YRr6gOR8WT0LZNrhLh4y3FCgoAAAAXSHboAAAAAAAAAAABhlbgnAAAAEAivKe977CQCxMOKTuj+cWTFqc2OOJU8qGr9afrgu2zDmQaX5Q0cNshc3PiBwe0qw/+D/qJk5QqM5dYeSUGeDQP`) + assert.Equal(t, resp.EnvelopeXdr, txXdr) assert.Equal(t, resp.ResultXdr, "AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=") assert.Equal(t, resp.ResultMetaXdr, `AAAAAQAAAAIAAAADAAVp+wAAAAAAAAAAEH3Rayw4M0iCLoEe96rPFNGYim8AVHJU0z4ebYZW4JwACBP/TuycHAAABD0AAuV+AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAVp+wAAAAAAAAAAEH3Rayw4M0iCLoEe96rPFNGYim8AVHJU0z4ebYZW4JwACBP/TuycHAAABD0AAuV/AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMABWn7AAAAAAAAAAAQfdFrLDgzSIIugR73qs8U0ZiKbwBUclTTPh5thlbgnAAIE/9O7JwcAAAEPQAC5X8AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEABWn7AAAAAAAAAAAQfdFrLDgzSIIugR73qs8U0ZiKbwBUclTTPh5thlbgnAAIE+gGdbQcAAAEPQAC5X8AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAABWn7AAAAAAAAAADJMEbE6B9ICmmmxOdv9hGvqA5HxZPQtk2uEuHjLcUKCgAAABdIdugAAAVp+wAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==`) } @@ -880,11 +884,16 @@ func TestSubmitTransactionRequest(t *testing.T) { tx, err = tx.Sign(network.TestNetworkPassphrase, kp) assert.NoError(t, err) + txXdr := "AAAAAgAAAAAFNPMlEPLB6oWPI/Zl1sBEXxwv93ChUnv7KQK9KxrTtgAAAGQAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAEAAAAAAAAAAQAAAAAFNPMlEPLB6oWPI/Zl1sBEXxwv93ChUnv7KQK9KxrTtgAAAAAAAAAABfXhAAAAAAAAAAABKxrTtgAAAECmVMsI0W6JmfJNeLzgH+PseZA2AgYGZl8zaHgkOvhZw65Hj9OaCdw6yssG55qu7X2sauJAwfxaoTL4gwbmH94H" // successful tx with config.memo_required not found hmock.On( "POST", - "https://localhost/transactions?tx=AAAAAgAAAAAFNPMlEPLB6oWPI%2FZl1sBEXxwv93ChUnv7KQK9KxrTtgAAAGQAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAEAAAAAAAAAAQAAAAAFNPMlEPLB6oWPI%2FZl1sBEXxwv93ChUnv7KQK9KxrTtgAAAAAAAAAABfXhAAAAAAAAAAABKxrTtgAAAECmVMsI0W6JmfJNeLzgH%2BPseZA2AgYGZl8zaHgkOvhZw65Hj9OaCdw6yssG55qu7X2sauJAwfxaoTL4gwbmH94H", - ).ReturnString(200, txSuccess) + "https://localhost/transactions", + ).Return(func(request *http.Request) (*http.Response, error) { + val := request.FormValue("tx") + assert.Equal(t, val, txXdr) + return httpmock.NewStringResponse(http.StatusOK, txSuccess), nil + }) hmock.On( "GET", @@ -944,11 +953,16 @@ func TestSubmitTransactionRequestMuxedAccounts(t *testing.T) { tx, err = tx.Sign(network.TestNetworkPassphrase, kp) assert.NoError(t, err) + txXdr := "AAAAAgAAAQAAAAAAyv66vgU08yUQ8sHqhY8j9mXWwERfHC/3cKFSe/spAr0rGtO2AAAAZAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAQAAAAAAAAABAAAAAAU08yUQ8sHqhY8j9mXWwERfHC/3cKFSe/spAr0rGtO2AAAAAAAAAAAF9eEAAAAAAAAAAAErGtO2AAAAQJvQkE9UVo/mfFBl/8ZPTzSUyVO4nvW0BYfnbowoBPEdRfLOLQz28v6sBKQc2b86NUfVHN5TQVo3+jH4nK9wVgk=" // successful tx with config.memo_required not found hmock.On( "POST", - "https://localhost/transactions?tx=AAAAAgAAAQAAAAAAyv66vgU08yUQ8sHqhY8j9mXWwERfHC%2F3cKFSe%2FspAr0rGtO2AAAAZAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAQAAAAAAAAABAAAAAAU08yUQ8sHqhY8j9mXWwERfHC%2F3cKFSe%2FspAr0rGtO2AAAAAAAAAAAF9eEAAAAAAAAAAAErGtO2AAAAQJvQkE9UVo%2FmfFBl%2F8ZPTzSUyVO4nvW0BYfnbowoBPEdRfLOLQz28v6sBKQc2b86NUfVHN5TQVo3%2BjH4nK9wVgk%3D", - ).ReturnString(200, txSuccess) + "https://localhost/transactions", + ).Return(func(request *http.Request) (*http.Response, error) { + val := request.FormValue("tx") + assert.Equal(t, val, txXdr) + return httpmock.NewStringResponse(http.StatusOK, txSuccess), nil + }) hmock.On( "GET", @@ -1012,8 +1026,12 @@ func TestSubmitFeeBumpTransaction(t *testing.T) { // successful tx with config.memo_required not found hmock.On( "POST", - "https://localhost/transactions?tx="+url.QueryEscape(feeBumpTxB64), - ).ReturnString(200, txSuccess) + "https://localhost/transactions", + ).Return(func(request *http.Request) (*http.Response, error) { + val := request.FormValue("tx") + assert.Equal(t, val, feeBumpTxB64) + return httpmock.NewStringResponse(http.StatusOK, txSuccess), nil + }) hmock.On( "GET", @@ -1089,11 +1107,16 @@ func TestSubmitTransactionWithOptionsRequest(t *testing.T) { assert.Equal(t, ok, false) } + txXdr := "AAAAAgAAAAAFNPMlEPLB6oWPI/Zl1sBEXxwv93ChUnv7KQK9KxrTtgAAAGQAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAEAAAAAAAAAAQAAAAAFNPMlEPLB6oWPI/Zl1sBEXxwv93ChUnv7KQK9KxrTtgAAAAAAAAAABfXhAAAAAAAAAAABKxrTtgAAAECmVMsI0W6JmfJNeLzgH+PseZA2AgYGZl8zaHgkOvhZw65Hj9OaCdw6yssG55qu7X2sauJAwfxaoTL4gwbmH94H" // successful tx hmock.On( "POST", - "https://localhost/transactions?tx=AAAAAgAAAAAFNPMlEPLB6oWPI%2FZl1sBEXxwv93ChUnv7KQK9KxrTtgAAAGQAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAEAAAAAAAAAAQAAAAAFNPMlEPLB6oWPI%2FZl1sBEXxwv93ChUnv7KQK9KxrTtgAAAAAAAAAABfXhAAAAAAAAAAABKxrTtgAAAECmVMsI0W6JmfJNeLzgH%2BPseZA2AgYGZl8zaHgkOvhZw65Hj9OaCdw6yssG55qu7X2sauJAwfxaoTL4gwbmH94H", - ).ReturnString(200, txSuccess) + "https://localhost/transactions", + ).Return(func(request *http.Request) (*http.Response, error) { + val := request.FormValue("tx") + assert.Equal(t, val, txXdr) + return httpmock.NewStringResponse(http.StatusOK, txSuccess), nil + }) _, err = client.SubmitTransactionWithOptions(tx, SubmitTxOpts{SkipMemoRequiredCheck: true}) assert.NoError(t, err) @@ -1101,8 +1124,12 @@ func TestSubmitTransactionWithOptionsRequest(t *testing.T) { // successful tx with config.memo_required not found hmock.On( "POST", - "https://localhost/transactions?tx=AAAAAgAAAAAFNPMlEPLB6oWPI%2FZl1sBEXxwv93ChUnv7KQK9KxrTtgAAAGQAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAEAAAAAAAAAAQAAAAAFNPMlEPLB6oWPI%2FZl1sBEXxwv93ChUnv7KQK9KxrTtgAAAAAAAAAABfXhAAAAAAAAAAABKxrTtgAAAECmVMsI0W6JmfJNeLzgH%2BPseZA2AgYGZl8zaHgkOvhZw65Hj9OaCdw6yssG55qu7X2sauJAwfxaoTL4gwbmH94H", - ).ReturnString(200, txSuccess) + "https://localhost/transactions", + ).Return(func(request *http.Request) (*http.Response, error) { + val := request.FormValue("tx") + assert.Equal(t, val, txXdr) + return httpmock.NewStringResponse(http.StatusOK, txSuccess), nil + }) hmock.On( "GET", @@ -1123,10 +1150,15 @@ func TestSubmitTransactionWithOptionsRequest(t *testing.T) { assert.Equal(t, ErrAccountRequiresMemo, errors.Cause(err)) // skips memo check if tx includes a memo + txXdr = "AAAAAgAAAAAFNPMlEPLB6oWPI/Zl1sBEXxwv93ChUnv7KQK9KxrTtgAAAGQAAAAAAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAKAAAAAQAAAApIZWxsb1dvcmxkAAAAAAABAAAAAAAAAAEAAAAABTTzJRDyweqFjyP2ZdbARF8cL/dwoVJ7+ykCvSsa07YAAAAAAAAAAAX14QAAAAAAAAAAASsa07YAAABA7rDHZ+HcBIQbWByMZL3aT231WuwjOhxvb0c1i3vPzArUCE+HdCIJXq6Mk/xdhJj6QEEJrg15uAxke3P3k2vWCw==" hmock.On( "POST", - "https://localhost/transactions?tx=AAAAAgAAAAAFNPMlEPLB6oWPI%2FZl1sBEXxwv93ChUnv7KQK9KxrTtgAAAGQAAAAAAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAKAAAAAQAAAApIZWxsb1dvcmxkAAAAAAABAAAAAAAAAAEAAAAABTTzJRDyweqFjyP2ZdbARF8cL%2FdwoVJ7%2BykCvSsa07YAAAAAAAAAAAX14QAAAAAAAAAAASsa07YAAABA7rDHZ%2BHcBIQbWByMZL3aT231WuwjOhxvb0c1i3vPzArUCE%2BHdCIJXq6Mk%2FxdhJj6QEEJrg15uAxke3P3k2vWCw%3D%3D", - ).ReturnString(200, txSuccess) + "https://localhost/transactions", + ).Return(func(request *http.Request) (*http.Response, error) { + val := request.FormValue("tx") + assert.Equal(t, val, txXdr) + return httpmock.NewStringResponse(http.StatusOK, txSuccess), nil + }) tx, err = txnbuild.NewTransaction( txnbuild.TransactionParams{ @@ -1215,8 +1247,12 @@ func TestSubmitFeeBumpTransactionWithOptions(t *testing.T) { // successful tx hmock.On( "POST", - "https://localhost/transactions?tx="+url.QueryEscape(feeBumpTxB64), - ).ReturnString(200, txSuccess) + "https://localhost/transactions", + ).Return(func(request *http.Request) (*http.Response, error) { + val := request.FormValue("tx") + assert.Equal(t, val, feeBumpTxB64) + return httpmock.NewStringResponse(http.StatusOK, txSuccess), nil + }) _, err = client.SubmitFeeBumpTransactionWithOptions(feeBumpTx, SubmitTxOpts{SkipMemoRequiredCheck: true}) assert.NoError(t, err) @@ -1224,8 +1260,12 @@ func TestSubmitFeeBumpTransactionWithOptions(t *testing.T) { // successful tx with config.memo_required not found hmock.On( "POST", - "https://localhost/transactions?tx="+url.QueryEscape(feeBumpTxB64), - ).ReturnString(200, txSuccess) + "https://localhost/transactions", + ).Return(func(request *http.Request) (*http.Response, error) { + val := request.FormValue("tx") + assert.Equal(t, val, feeBumpTxB64) + return httpmock.NewStringResponse(http.StatusOK, txSuccess), nil + }) hmock.On( "GET", @@ -1270,8 +1310,12 @@ func TestSubmitFeeBumpTransactionWithOptions(t *testing.T) { // skips memo check if tx includes a memo hmock.On( "POST", - "https://localhost/transactions?tx="+url.QueryEscape(feeBumpTxB64), - ).ReturnString(200, txSuccess) + "https://localhost/transactions", + ).Return(func(request *http.Request) (*http.Response, error) { + val := request.FormValue("tx") + assert.Equal(t, val, feeBumpTxB64) + return httpmock.NewStringResponse(http.StatusOK, txSuccess), nil + }) tx, err = tx.Sign(network.TestNetworkPassphrase, kp) assert.NoError(t, err) diff --git a/clients/horizonclient/offer_request.go b/clients/horizonclient/offer_request.go index 28cdb4dbe4..510576d0e8 100644 --- a/clients/horizonclient/offer_request.go +++ b/clients/horizonclient/offer_request.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" hProtocol "github.com/stellar/go/protocols/horizon" @@ -50,6 +51,16 @@ func (or OfferRequest) BuildURL() (endpoint string, err error) { return endpoint, err } +// HTTPRequest returns the http request for the offers endpoint +func (or OfferRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := or.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} + // OfferHandler is a function that is called when a new offer is received type OfferHandler func(hProtocol.Offer) diff --git a/clients/horizonclient/operation_request.go b/clients/horizonclient/operation_request.go index 1cc08c3732..d947169f2d 100644 --- a/clients/horizonclient/operation_request.go +++ b/clients/horizonclient/operation_request.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" "github.com/stellar/go/protocols/horizon/operations" @@ -54,6 +55,16 @@ func (op OperationRequest) BuildURL() (endpoint string, err error) { return endpoint, err } +// HTTPRequest returns the http request for the operations endpoint +func (op OperationRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := op.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} + // setEndpoint sets the endpoint for the OperationRequest func (op *OperationRequest) setEndpoint(endpoint string) *OperationRequest { if endpoint == "payments" { diff --git a/clients/horizonclient/order_book_request.go b/clients/horizonclient/order_book_request.go index 8e855a7d0a..fee5547397 100644 --- a/clients/horizonclient/order_book_request.go +++ b/clients/horizonclient/order_book_request.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" hProtocol "github.com/stellar/go/protocols/horizon" @@ -37,6 +38,16 @@ func (obr OrderBookRequest) BuildURL() (endpoint string, err error) { return endpoint, err } +// HTTPRequest returns the http request for the order book endpoint +func (obr OrderBookRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := obr.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} + // OrderBookHandler is a function that is called when a new order summary is received type OrderBookHandler func(hProtocol.OrderBookSummary) diff --git a/clients/horizonclient/paths_request.go b/clients/horizonclient/paths_request.go index 8f6c2bd309..ab603b59ea 100644 --- a/clients/horizonclient/paths_request.go +++ b/clients/horizonclient/paths_request.go @@ -2,6 +2,7 @@ package horizonclient import ( "fmt" + "net/http" "net/url" "github.com/stellar/go/support/errors" @@ -34,3 +35,13 @@ func (pr PathsRequest) BuildURL() (endpoint string, err error) { return endpoint, err } + +// HTTPRequest returns the http request for the path payment endpoint +func (pr PathsRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := pr.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} diff --git a/clients/horizonclient/strict_send_paths_request.go b/clients/horizonclient/strict_send_paths_request.go index a1caaa0e26..14a494b404 100644 --- a/clients/horizonclient/strict_send_paths_request.go +++ b/clients/horizonclient/strict_send_paths_request.go @@ -2,6 +2,7 @@ package horizonclient import ( "fmt" + "net/http" "net/url" "github.com/stellar/go/support/errors" @@ -33,3 +34,13 @@ func (pr StrictSendPathsRequest) BuildURL() (endpoint string, err error) { return endpoint, err } + +// HTTPRequest returns the http request for the strict send path payment endpoint +func (pr StrictSendPathsRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := pr.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} diff --git a/clients/horizonclient/submit_request.go b/clients/horizonclient/submit_request.go index 839f38b2de..673e48f29f 100644 --- a/clients/horizonclient/submit_request.go +++ b/clients/horizonclient/submit_request.go @@ -2,7 +2,9 @@ package horizonclient import ( "fmt" + "net/http" "net/url" + "strings" "github.com/stellar/go/support/errors" ) @@ -19,3 +21,15 @@ func (sr submitRequest) BuildURL() (endpoint string, err error) { endpoint = fmt.Sprintf("%s?%s", sr.endpoint, query.Encode()) return endpoint, err } + +// HTTPRequest returns the http request for submitting transactions to a running horizon instance +func (sr submitRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + form := url.Values{} + form.Set("tx", sr.transactionXdr) + request, err := http.NewRequest("POST", horizonURL+sr.endpoint, strings.NewReader(form.Encode())) + if err != nil { + return nil, err + } + request.Header.Add("Content-Type", "application/x-www-form-urlencoded") + return request, nil +} diff --git a/clients/horizonclient/trade_aggregation_request.go b/clients/horizonclient/trade_aggregation_request.go index 13e2784b49..acb13e9ffb 100644 --- a/clients/horizonclient/trade_aggregation_request.go +++ b/clients/horizonclient/trade_aggregation_request.go @@ -2,6 +2,7 @@ package horizonclient import ( "fmt" + "net/http" "net/url" "strconv" @@ -36,3 +37,13 @@ func (ta TradeAggregationRequest) BuildURL() (endpoint string, err error) { return endpoint, err } + +// HTTPRequest returns the http request for the trade aggregations endpoint +func (ta TradeAggregationRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := ta.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} diff --git a/clients/horizonclient/trade_request.go b/clients/horizonclient/trade_request.go index 21afb69aa7..d9e8b20a91 100644 --- a/clients/horizonclient/trade_request.go +++ b/clients/horizonclient/trade_request.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" hProtocol "github.com/stellar/go/protocols/horizon" @@ -62,6 +63,16 @@ func (tr TradeRequest) BuildURL() (endpoint string, err error) { return endpoint, err } +// HTTPRequest returns the http request for the trades endpoint +func (tr TradeRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := tr.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} + // TradeHandler is a function that is called when a new trade is received type TradeHandler func(hProtocol.Trade) diff --git a/clients/horizonclient/transaction_request.go b/clients/horizonclient/transaction_request.go index 89b715d1f2..edf002b5cb 100644 --- a/clients/horizonclient/transaction_request.go +++ b/clients/horizonclient/transaction_request.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" hProtocol "github.com/stellar/go/protocols/horizon" @@ -47,6 +48,16 @@ func (tr TransactionRequest) BuildURL() (endpoint string, err error) { return endpoint, err } +// HTTPRequest returns the http request for the transactions endpoint +func (tr TransactionRequest) HTTPRequest(horizonURL string) (*http.Request, error) { + endpoint, err := tr.BuildURL() + if err != nil { + return nil, err + } + + return http.NewRequest("GET", horizonURL+endpoint, nil) +} + // TransactionHandler is a function that is called when a new transaction is received type TransactionHandler func(hProtocol.Transaction) diff --git a/exp/services/captivecore/internal/api.go b/exp/services/captivecore/internal/api.go index 9e666e565c..b39f7c0854 100644 --- a/exp/services/captivecore/internal/api.go +++ b/exp/services/captivecore/internal/api.go @@ -63,14 +63,18 @@ func (c *CaptiveCoreAPI) Shutdown() { c.core.Close() } -func (c *CaptiveCoreAPI) startPrepareRange(ledgerRange ledgerbackend.Range) { +func (c *CaptiveCoreAPI) isShutdown() bool { + return c.ctx.Err() != nil +} + +func (c *CaptiveCoreAPI) startPrepareRange(ctx context.Context, ledgerRange ledgerbackend.Range) { defer c.wg.Done() - err := c.core.PrepareRange(ledgerRange) + err := c.core.PrepareRange(ctx, ledgerRange) c.activeRequest.Lock() defer c.activeRequest.Unlock() - if c.ctx.Err() != nil { + if c.isShutdown() { return } @@ -100,10 +104,10 @@ func (c *CaptiveCoreAPI) startPrepareRange(ledgerRange ledgerbackend.Range) { } // PrepareRange executes the PrepareRange operation on the captive core instance. -func (c *CaptiveCoreAPI) PrepareRange(ledgerRange ledgerbackend.Range) (ledgerbackend.PrepareRangeResponse, error) { +func (c *CaptiveCoreAPI) PrepareRange(ctx context.Context, ledgerRange ledgerbackend.Range) (ledgerbackend.PrepareRangeResponse, error) { c.activeRequest.Lock() defer c.activeRequest.Unlock() - if c.ctx.Err() != nil { + if c.isShutdown() { return ledgerbackend.PrepareRangeResponse{}, errors.New("Cannot prepare range when shut down") } @@ -121,7 +125,7 @@ func (c *CaptiveCoreAPI) PrepareRange(ledgerRange ledgerbackend.Range) (ledgerba c.activeRequest.valid = true c.wg.Add(1) - go c.startPrepareRange(ledgerRange) + go c.startPrepareRange(c.ctx, ledgerRange) return ledgerbackend.PrepareRangeResponse{ LedgerRange: ledgerRange, @@ -140,7 +144,7 @@ func (c *CaptiveCoreAPI) PrepareRange(ledgerRange ledgerbackend.Range) (ledgerba } // GetLatestLedgerSequence determines the latest ledger sequence available on the captive core instance. -func (c *CaptiveCoreAPI) GetLatestLedgerSequence() (ledgerbackend.LatestLedgerSequenceResponse, error) { +func (c *CaptiveCoreAPI) GetLatestLedgerSequence(ctx context.Context) (ledgerbackend.LatestLedgerSequenceResponse, error) { c.activeRequest.Lock() defer c.activeRequest.Unlock() @@ -151,7 +155,7 @@ func (c *CaptiveCoreAPI) GetLatestLedgerSequence() (ledgerbackend.LatestLedgerSe return ledgerbackend.LatestLedgerSequenceResponse{}, ErrPrepareRangeNotReady } - seq, err := c.core.GetLatestLedgerSequence() + seq, err := c.core.GetLatestLedgerSequence(ctx) if err != nil { c.activeRequest.valid = false } @@ -159,7 +163,7 @@ func (c *CaptiveCoreAPI) GetLatestLedgerSequence() (ledgerbackend.LatestLedgerSe } // GetLedger fetches the ledger with the given sequence number from the captive core instance. -func (c *CaptiveCoreAPI) GetLedger(sequence uint32) (ledgerbackend.LedgerResponse, error) { +func (c *CaptiveCoreAPI) GetLedger(ctx context.Context, sequence uint32) (ledgerbackend.LedgerResponse, error) { c.activeRequest.Lock() defer c.activeRequest.Unlock() @@ -170,12 +174,13 @@ func (c *CaptiveCoreAPI) GetLedger(sequence uint32) (ledgerbackend.LedgerRespons return ledgerbackend.LedgerResponse{}, ErrPrepareRangeNotReady } - present, ledger, err := c.core.GetLedger(sequence) + ledger, err := c.core.GetLedger(ctx, sequence) if err != nil { c.activeRequest.valid = false } + // TODO: We are always true here now, so this changes the semantics of this + // call a bit. We need to change the client to long-poll this endpoint. return ledgerbackend.LedgerResponse{ - Present: present, - Ledger: ledgerbackend.Base64Ledger(ledger), + Ledger: ledgerbackend.Base64Ledger(ledger), }, err } diff --git a/exp/services/captivecore/internal/api_test.go b/exp/services/captivecore/internal/api_test.go index 223f5e9bb4..b9c96bf8b4 100644 --- a/exp/services/captivecore/internal/api_test.go +++ b/exp/services/captivecore/internal/api_test.go @@ -1,10 +1,12 @@ package internal import ( + "context" "fmt" "testing" "time" + "github.com/stretchr/testify/mock" "github.com/stretchr/testify/suite" "github.com/stellar/go/ingest/ledgerbackend" @@ -18,11 +20,13 @@ func TestAPITestSuite(t *testing.T) { type APITestSuite struct { suite.Suite + ctx context.Context ledgerBackend *ledgerbackend.MockDatabaseBackend api CaptiveCoreAPI } func (s *APITestSuite) SetupTest() { + s.ctx = context.Background() s.ledgerBackend = &ledgerbackend.MockDatabaseBackend{} s.api = NewCaptiveCoreAPI(s.ledgerBackend, log.New()) } @@ -32,23 +36,23 @@ func (s *APITestSuite) TearDownTest() { } func (s *APITestSuite) TestLatestSeqActiveRequestInvalid() { - _, err := s.api.GetLatestLedgerSequence() + _, err := s.api.GetLatestLedgerSequence(s.ctx) s.Assert().Equal(err, ErrMissingPrepareRange) } func (s *APITestSuite) TestGetLedgerActiveRequestInvalid() { - _, err := s.api.GetLedger(64) + _, err := s.api.GetLedger(s.ctx, 64) s.Assert().Equal(err, ErrMissingPrepareRange) } func (s *APITestSuite) runBeforeReady(prepareRangeErr error, f func()) { waitChan := make(chan time.Time) ledgerRange := ledgerbackend.UnboundedRange(63) - s.ledgerBackend.On("PrepareRange", ledgerRange). + s.ledgerBackend.On("PrepareRange", mock.Anything, ledgerRange). WaitUntil(waitChan). Return(prepareRangeErr).Once() - response, err := s.api.PrepareRange(ledgerRange) + response, err := s.api.PrepareRange(s.ctx, ledgerRange) s.Assert().NoError(err) s.Assert().False(response.Ready) s.Assert().Equal(response.LedgerRange, ledgerRange) @@ -61,23 +65,23 @@ func (s *APITestSuite) runBeforeReady(prepareRangeErr error, f func()) { func (s *APITestSuite) TestLatestSeqActiveRequestNotReady() { s.runBeforeReady(nil, func() { - _, err := s.api.GetLatestLedgerSequence() + _, err := s.api.GetLatestLedgerSequence(s.ctx) s.Assert().Equal(err, ErrPrepareRangeNotReady) }) } func (s *APITestSuite) TestGetLedgerNotReady() { s.runBeforeReady(nil, func() { - _, err := s.api.GetLedger(64) + _, err := s.api.GetLedger(s.ctx, 64) s.Assert().Equal(err, ErrPrepareRangeNotReady) }) } func (s *APITestSuite) waitUntilReady(ledgerRange ledgerbackend.Range) { - s.ledgerBackend.On("PrepareRange", ledgerRange). + s.ledgerBackend.On("PrepareRange", mock.Anything, ledgerRange). Return(nil).Once() - response, err := s.api.PrepareRange(ledgerRange) + response, err := s.api.PrepareRange(s.ctx, ledgerRange) s.Assert().NoError(err) s.Assert().False(response.Ready) s.Assert().Equal(response.LedgerRange, ledgerRange) @@ -89,9 +93,9 @@ func (s *APITestSuite) TestLatestSeqError() { s.waitUntilReady(ledgerbackend.UnboundedRange(63)) expectedErr := fmt.Errorf("test error") - s.ledgerBackend.On("GetLatestLedgerSequence").Return(uint32(0), expectedErr).Once() + s.ledgerBackend.On("GetLatestLedgerSequence", s.ctx).Return(uint32(0), expectedErr).Once() - _, err := s.api.GetLatestLedgerSequence() + _, err := s.api.GetLatestLedgerSequence(s.ctx) s.Assert().Equal(err, expectedErr) } @@ -99,10 +103,10 @@ func (s *APITestSuite) TestGetLedgerError() { s.waitUntilReady(ledgerbackend.UnboundedRange(63)) expectedErr := fmt.Errorf("test error") - s.ledgerBackend.On("GetLedger", uint32(64)). - Return(false, xdr.LedgerCloseMeta{}, expectedErr).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(64)). + Return(xdr.LedgerCloseMeta{}, expectedErr).Once() - _, err := s.api.GetLedger(64) + _, err := s.api.GetLedger(s.ctx, 64) s.Assert().Equal(err, expectedErr) } @@ -110,8 +114,8 @@ func (s *APITestSuite) TestLatestSeqSucceeds() { s.waitUntilReady(ledgerbackend.UnboundedRange(63)) expectedSeq := uint32(100) - s.ledgerBackend.On("GetLatestLedgerSequence").Return(expectedSeq, nil).Once() - seq, err := s.api.GetLatestLedgerSequence() + s.ledgerBackend.On("GetLatestLedgerSequence", s.ctx).Return(expectedSeq, nil).Once() + seq, err := s.api.GetLatestLedgerSequence(s.ctx) s.Assert().NoError(err) s.Assert().Equal(seq, ledgerbackend.LatestLedgerSequenceResponse{Sequence: expectedSeq}) } @@ -128,21 +132,20 @@ func (s *APITestSuite) TestGetLedgerSucceeds() { }, }, } - s.ledgerBackend.On("GetLedger", uint32(64)). - Return(true, expectedLedger, nil).Once() - seq, err := s.api.GetLedger(64) + s.ledgerBackend.On("GetLedger", s.ctx, uint32(64)). + Return(expectedLedger, nil).Once() + seq, err := s.api.GetLedger(s.ctx, 64) s.Assert().NoError(err) s.Assert().Equal(seq, ledgerbackend.LedgerResponse{ - Present: true, - Ledger: ledgerbackend.Base64Ledger(expectedLedger), + Ledger: ledgerbackend.Base64Ledger(expectedLedger), }) } func (s *APITestSuite) TestShutDownBeforePrepareRange() { s.ledgerBackend.On("Close").Return(nil).Once() s.api.Shutdown() - _, err := s.api.PrepareRange(ledgerbackend.UnboundedRange(63)) + _, err := s.api.PrepareRange(s.ctx, ledgerbackend.UnboundedRange(63)) s.Assert().EqualError(err, "Cannot prepare range when shut down") } @@ -226,7 +229,7 @@ func (s *APITestSuite) TestRangeAlreadyPrepared() { ledgerbackend.UnboundedRange(100), ledgerbackend.BoundedRange(63, 70), } { - response, err := s.api.PrepareRange(ledgerRange) + response, err := s.api.PrepareRange(s.ctx, ledgerRange) s.Assert().NoError(err) s.Assert().True(response.Ready) s.Assert().Equal(superSetRange, response.LedgerRange) diff --git a/exp/services/captivecore/internal/server.go b/exp/services/captivecore/internal/server.go index b451a35c93..127444611f 100644 --- a/exp/services/captivecore/internal/server.go +++ b/exp/services/captivecore/internal/server.go @@ -1,8 +1,10 @@ package internal import ( + "context" "encoding/json" "net/http" + "time" "github.com/stellar/go/ingest/ledgerbackend" supporthttp "github.com/stellar/go/support/http" @@ -39,7 +41,7 @@ func Handler(api CaptiveCoreAPI) http.Handler { mux := supporthttp.NewMux(api.log) mux.Get("/latest-sequence", func(w http.ResponseWriter, r *http.Request) { - response, err := api.GetLatestLedgerSequence() + response, err := api.GetLatestLedgerSequence(r.Context()) serializeResponse(api.log, w, r, response, err) }) @@ -51,8 +53,24 @@ func Handler(api CaptiveCoreAPI) http.Handler { return } - response, err := api.GetLedger(req.Sequence) - serializeResponse(api.log, w, r, response, err) + // must be shorter than the RemoteCaptiveCore http client timeout. + ctx, cancel := context.WithTimeout(r.Context(), 5*time.Second) + defer cancel() // release timer + + var response ledgerbackend.LedgerResponse + var err error + done := make(chan struct{}) + go func() { + response, err = api.GetLedger(ctx, req.Sequence) + close(done) + }() + + select { + case <-ctx.Done(): + w.WriteHeader(http.StatusRequestTimeout) + case <-done: + serializeResponse(api.log, w, r, response, err) + } }) mux.Post("/prepare-range", func(w http.ResponseWriter, r *http.Request) { @@ -63,7 +81,7 @@ func Handler(api CaptiveCoreAPI) http.Handler { return } - response, err := api.PrepareRange(ledgerRange) + response, err := api.PrepareRange(r.Context(), ledgerRange) serializeResponse(api.log, w, r, response, err) }) diff --git a/exp/services/captivecore/internal/server_test.go b/exp/services/captivecore/internal/server_test.go index 1923767ee4..86ad989191 100644 --- a/exp/services/captivecore/internal/server_test.go +++ b/exp/services/captivecore/internal/server_test.go @@ -1,6 +1,7 @@ package internal import ( + "context" "fmt" "io/ioutil" "net/http" @@ -8,6 +9,7 @@ import ( "testing" "time" + "github.com/stretchr/testify/mock" "github.com/stretchr/testify/suite" "github.com/stellar/go/ingest/ledgerbackend" @@ -21,6 +23,7 @@ func TestServerTestSuite(t *testing.T) { type ServerTestSuite struct { suite.Suite + ctx context.Context ledgerBackend *ledgerbackend.MockDatabaseBackend api CaptiveCoreAPI handler http.Handler @@ -29,6 +32,7 @@ type ServerTestSuite struct { } func (s *ServerTestSuite) SetupTest() { + s.ctx = context.Background() s.ledgerBackend = &ledgerbackend.MockDatabaseBackend{} s.api = NewCaptiveCoreAPI(s.ledgerBackend, log.New()) s.handler = Handler(s.api) @@ -52,9 +56,9 @@ func (s *ServerTestSuite) TestLatestSequence() { s.api.activeRequest.ready = true expectedSeq := uint32(100) - s.ledgerBackend.On("GetLatestLedgerSequence").Return(expectedSeq, nil).Once() + s.ledgerBackend.On("GetLatestLedgerSequence", mock.Anything).Return(expectedSeq, nil).Once() - seq, err := s.client.GetLatestLedgerSequence() + seq, err := s.client.GetLatestLedgerSequence(s.ctx) s.Assert().NoError(err) s.Assert().Equal(expectedSeq, seq) } @@ -63,34 +67,34 @@ func (s *ServerTestSuite) TestLatestSequenceError() { s.api.activeRequest.valid = true s.api.activeRequest.ready = true - s.ledgerBackend.On("GetLatestLedgerSequence").Return(uint32(100), fmt.Errorf("test error")).Once() + s.ledgerBackend.On("GetLatestLedgerSequence", mock.Anything).Return(uint32(100), fmt.Errorf("test error")).Once() - _, err := s.client.GetLatestLedgerSequence() + _, err := s.client.GetLatestLedgerSequence(s.ctx) s.Assert().EqualError(err, "test error") } func (s *ServerTestSuite) TestPrepareBoundedRange() { ledgerRange := ledgerbackend.BoundedRange(10, 30) - s.ledgerBackend.On("PrepareRange", ledgerRange). + s.ledgerBackend.On("PrepareRange", mock.Anything, ledgerRange). Return(nil).Once() - s.Assert().NoError(s.client.PrepareRange(ledgerRange)) + s.Assert().NoError(s.client.PrepareRange(s.ctx, ledgerRange)) s.Assert().True(s.api.activeRequest.ready) - prepared, err := s.client.IsPrepared(ledgerRange) + prepared, err := s.client.IsPrepared(s.ctx, ledgerRange) s.Assert().NoError(err) s.Assert().True(prepared) } func (s *ServerTestSuite) TestPrepareUnboundedRange() { ledgerRange := ledgerbackend.UnboundedRange(100) - s.ledgerBackend.On("PrepareRange", ledgerRange). + s.ledgerBackend.On("PrepareRange", mock.Anything, ledgerRange). Return(nil).Once() - s.Assert().NoError(s.client.PrepareRange(ledgerRange)) + s.Assert().NoError(s.client.PrepareRange(s.ctx, ledgerRange)) s.Assert().True(s.api.activeRequest.ready) - prepared, err := s.client.IsPrepared(ledgerRange) + prepared, err := s.client.IsPrepared(s.ctx, ledgerRange) s.Assert().NoError(err) s.Assert().True(prepared) } @@ -100,13 +104,14 @@ func (s *ServerTestSuite) TestPrepareError() { s.api.Shutdown() s.Assert().EqualError( - s.client.PrepareRange(ledgerbackend.UnboundedRange(100)), + s.client.PrepareRange(s.ctx, ledgerbackend.UnboundedRange(100)), "Cannot prepare range when shut down", ) } func (s *ServerTestSuite) TestGetLedgerInvalidSequence() { req := httptest.NewRequest("GET", "/ledger/abcdef", nil) + req = req.WithContext(s.ctx) w := httptest.NewRecorder() s.handler.ServeHTTP(w, req) @@ -124,10 +129,10 @@ func (s *ServerTestSuite) TestGetLedgerError() { s.api.activeRequest.ready = true expectedErr := fmt.Errorf("test error") - s.ledgerBackend.On("GetLedger", uint32(64)). - Return(false, xdr.LedgerCloseMeta{}, expectedErr).Once() + s.ledgerBackend.On("GetLedger", mock.Anything, uint32(64)). + Return(xdr.LedgerCloseMeta{}, expectedErr).Once() - _, _, err := s.client.GetLedger(64) + _, err := s.client.GetLedger(s.ctx, 64) s.Assert().EqualError(err, "test error") } @@ -144,11 +149,34 @@ func (s *ServerTestSuite) TestGetLedgerSucceeds() { }, }, } - s.ledgerBackend.On("GetLedger", uint32(64)). - Return(true, expectedLedger, nil).Once() + s.ledgerBackend.On("GetLedger", mock.Anything, uint32(64)). + Return(expectedLedger, nil).Once() - present, ledger, err := s.client.GetLedger(64) + ledger, err := s.client.GetLedger(s.ctx, 64) + s.Assert().NoError(err) + s.Assert().Equal(expectedLedger, ledger) +} + +func (s *ServerTestSuite) TestGetLedgerTakesAWhile() { + s.api.activeRequest.valid = true + s.api.activeRequest.ready = true + + expectedLedger := xdr.LedgerCloseMeta{ + V0: &xdr.LedgerCloseMetaV0{ + LedgerHeader: xdr.LedgerHeaderHistoryEntry{ + Header: xdr.LedgerHeader{ + LedgerSeq: 64, + }, + }, + }, + } + s.ledgerBackend.On("GetLedger", mock.Anything, uint32(64)). + Run(func(mock.Arguments) { time.Sleep(6 * time.Second) }). + Return(xdr.LedgerCloseMeta{}, nil).Once() + s.ledgerBackend.On("GetLedger", mock.Anything, uint32(64)). + Return(expectedLedger, nil).Once() + + ledger, err := s.client.GetLedger(s.ctx, 64) s.Assert().NoError(err) - s.Assert().True(present) s.Assert().Equal(expectedLedger, ledger) } diff --git a/exp/services/captivecore/main.go b/exp/services/captivecore/main.go index f5ec78447d..264a40b2ea 100644 --- a/exp/services/captivecore/main.go +++ b/exp/services/captivecore/main.go @@ -20,9 +20,9 @@ import ( func main() { var port int - var networkPassphrase, binaryPath, configAppendPath, dbURL string + var networkPassphrase, binaryPath, configPath, dbURL string + var captiveCoreTomlParams ledgerbackend.CaptiveCoreTomlParams var historyArchiveURLs []string - var stellarCoreHTTPPort uint var checkpointFrequency uint32 var logLevel logrus.Level logger := supportlog.New() @@ -53,12 +53,12 @@ func main() { ConfigKey: &binaryPath, }, &config.ConfigOption{ - Name: "captive-core-config-append-path", + Name: "captive-core-config-path", OptType: types.String, FlagDefault: "", - Required: false, + Required: true, Usage: "path to additional configuration for the Stellar Core configuration file used by captive core. It must, at least, include enough details to define a quorum set", - ConfigKey: &configAppendPath, + ConfigKey: &configPath, }, &config.ConfigOption{ Name: "history-archive-urls", @@ -97,12 +97,13 @@ func main() { Usage: "horizon postgres database to connect with", }, &config.ConfigOption{ - Name: "stellar-captive-core-http-port", - ConfigKey: &stellarCoreHTTPPort, - OptType: types.Uint, - FlagDefault: uint(11626), - Required: false, - Usage: "HTTP port for captive core to listen on (0 disables the HTTP server)", + Name: "stellar-captive-core-http-port", + ConfigKey: &captiveCoreTomlParams.HTTPPort, + OptType: types.Uint, + CustomSetValue: config.SetOptionalUint, + Required: false, + FlagDefault: uint(11626), + Usage: "HTTP port for Captive Core to listen on (0 disables the HTTP server)", }, &config.ConfigOption{ Name: "checkpoint-frequency", @@ -121,19 +122,25 @@ func main() { configOpts.SetValues() logger.SetLevel(logLevel) + captiveCoreTomlParams.HistoryArchiveURLs = historyArchiveURLs + captiveCoreTomlParams.NetworkPassphrase = networkPassphrase + captiveCoreTomlParams.Strict = true + captiveCoreToml, err := ledgerbackend.NewCaptiveCoreTomlFromFile(configPath, captiveCoreTomlParams) + if err != nil { + logger.WithError(err).Fatal("Invalid captive core toml") + } + captiveConfig := ledgerbackend.CaptiveCoreConfig{ BinaryPath: binaryPath, - ConfigAppendPath: configAppendPath, NetworkPassphrase: networkPassphrase, HistoryArchiveURLs: historyArchiveURLs, CheckpointFrequency: checkpointFrequency, - HTTPPort: stellarCoreHTTPPort, Log: logger.WithField("subservice", "stellar-core"), + Toml: captiveCoreToml, } var dbConn *db.Session if len(dbURL) > 0 { - var err error dbConn, err = db.Open("postgres", dbURL) if err != nil { logger.WithError(err).Fatal("Could not create db connection instance") @@ -154,6 +161,8 @@ func main() { logger.Infof("Starting Captive Core server on %v", port) }, OnStopping: func() { + // TODO: Check this aborts in-progress requests instead of letting + // them finish, to preserve existing behaviour. api.Shutdown() if dbConn != nil { dbConn.Close() diff --git a/exp/services/recoverysigner/docker/Dockerfile b/exp/services/recoverysigner/docker/Dockerfile index 3f4ff4197f..681202f75e 100644 --- a/exp/services/recoverysigner/docker/Dockerfile +++ b/exp/services/recoverysigner/docker/Dockerfile @@ -1,11 +1,11 @@ -FROM golang:1.16.2 as build +FROM golang:1.16.3 as build ADD . /src/recoverysigner WORKDIR /src/recoverysigner RUN go build -o /bin/recoverysigner ./exp/services/recoverysigner -FROM ubuntu:18.04 +FROM ubuntu:20.04 RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates COPY --from=build /bin/recoverysigner /app/ diff --git a/exp/services/recoverysigner/internal/db/db_test.go b/exp/services/recoverysigner/internal/db/db_test.go index 3ef0bc34e1..91dba7d5b2 100644 --- a/exp/services/recoverysigner/internal/db/db_test.go +++ b/exp/services/recoverysigner/internal/db/db_test.go @@ -1,6 +1,9 @@ package db import ( + "fmt" + "net" + "regexp" "testing" "github.com/stellar/go/support/db/dbtest" @@ -20,10 +23,25 @@ func TestOpen_openAndPingSucceeds(t *testing.T) { } func TestOpen_openAndPingFails(t *testing.T) { - sqlxDB, err := Open("postgres://localhost:0") + // Find an empty port + listener, err := net.Listen("tcp", ":0") + require.NoError(t, err) + port := listener.Addr().(*net.TCPAddr).Port + require.NoError(t, listener.Close()) + // Slight race here with other stuff on the system, which could claim this port. + + sqlxDB, err := Open(fmt.Sprintf("postgres://localhost:%d", port)) require.NoError(t, err) assert.Equal(t, "postgres", sqlxDB.DriverName()) err = sqlxDB.Ping() - require.EqualError(t, err, "dial tcp 127.0.0.1:0: connect: connection refused") + require.Error(t, err) + require.Regexp( + t, + regexp.MustCompile( + // regex to support both ipv4 and ipv6, on the port we found. + fmt.Sprintf("dial tcp (127\\.0\\.0\\.1|\\[::1\\]):%d: connect: connection refused", port), + ), + err.Error(), + ) } diff --git a/exp/services/webauth/docker/Dockerfile b/exp/services/webauth/docker/Dockerfile index 4da32a5539..20b0591ac1 100644 --- a/exp/services/webauth/docker/Dockerfile +++ b/exp/services/webauth/docker/Dockerfile @@ -1,13 +1,13 @@ -FROM golang:1.16.2 as build +FROM golang:1.16.3 as build ADD . /src/webauth WORKDIR /src/webauth RUN go build -o /bin/webauth ./exp/services/webauth -FROM ubuntu:18.04 +FROM ubuntu:20.04 -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ca-certificates COPY --from=build /bin/webauth /app/ EXPOSE 8000 ENTRYPOINT ["/app/webauth"] diff --git a/exp/tools/captive-core-start-tester/main.go b/exp/tools/captive-core-start-tester/main.go index 18984818ed..7e44dea282 100644 --- a/exp/tools/captive-core-start-tester/main.go +++ b/exp/tools/captive-core-start-tester/main.go @@ -1,6 +1,7 @@ package main import ( + "context" "fmt" "github.com/stellar/go/ingest/ledgerbackend" @@ -26,7 +27,6 @@ func check(ledger uint32) bool { c, err := ledgerbackend.NewCaptive( ledgerbackend.CaptiveCoreConfig{ BinaryPath: "stellar-core", - ConfigAppendPath: "stellar-core-standalone2.cfg", NetworkPassphrase: "Standalone Network ; February 2017", HistoryArchiveURLs: []string{"http://localhost:1570"}, }, @@ -36,23 +36,19 @@ func check(ledger uint32) bool { } defer c.Close() - err = c.PrepareRange(ledgerbackend.UnboundedRange(ledger)) + ctx := context.Background() + err = c.PrepareRange(ctx, ledgerbackend.UnboundedRange(ledger)) if err != nil { fmt.Println(err) return false } - ok, meta, err := c.GetLedger(ledger) + meta, err := c.GetLedger(ctx, ledger) if err != nil { fmt.Println(err) return false } - if !ok { - fmt.Println("no ledger") - return false - } - if meta.LedgerSequence() != ledger { fmt.Println("wrong ledger", meta.LedgerSequence()) return false diff --git a/exp/tools/dump-ledger-state/Dockerfile b/exp/tools/dump-ledger-state/Dockerfile index 3a9fe4feb3..57c95dbf39 100644 --- a/exp/tools/dump-ledger-state/Dockerfile +++ b/exp/tools/dump-ledger-state/Dockerfile @@ -21,7 +21,7 @@ RUN echo "host all all all trust" > /etc/postgresql/9.6/main/pg_hba.conf # And add `listen_addresses` to `/etc/postgresql/9.6/main/postgresql.conf` RUN echo "listen_addresses='*'" >> /etc/postgresql/9.6/main/postgresql.conf -RUN curl -sL https://storage.googleapis.com/golang/go1.16.2.linux-amd64.tar.gz | tar -C /usr/local -xz +RUN curl -sL https://storage.googleapis.com/golang/go1.16.3.linux-amd64.tar.gz | tar -C /usr/local -xz RUN ln -s /usr/local/go/bin/go /usr/local/bin/go WORKDIR /go/src/github.com/stellar/go COPY go.mod go.sum ./ diff --git a/exp/tools/dump-ledger-state/main.go b/exp/tools/dump-ledger-state/main.go index 2fe9f35923..d3292ac1e1 100644 --- a/exp/tools/dump-ledger-state/main.go +++ b/exp/tools/dump-ledger-state/main.go @@ -78,7 +78,7 @@ func (processor csvProcessor) ProcessChange(change ingest.Change) error { if !ok { return nil } - if err := processor.changeStats.ProcessChange(change); err != nil { + if err := processor.changeStats.ProcessChange(context.Background(), change); err != nil { return err } diff --git a/go.list b/go.list index 12ef698517..771c5901b7 100644 --- a/go.list +++ b/go.list @@ -40,6 +40,7 @@ github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db github.com/google/go-cmp v0.2.0 github.com/google/go-querystring v0.0.0-20160401233042-9235644dd9e5 github.com/google/martian v2.1.0+incompatible +github.com/google/uuid v1.2.0 github.com/googleapis/gax-go v2.0.2+incompatible github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 github.com/gorilla/context v1.1.1 @@ -83,6 +84,7 @@ github.com/onsi/ginkgo v1.7.0 github.com/onsi/gomega v1.4.3 github.com/opentracing/opentracing-go v1.1.0 github.com/openzipkin/zipkin-go v0.1.6 +github.com/pelletier/go-toml v1.9.0 github.com/pierrec/lz4 v2.0.5+incompatible github.com/pkg/errors v0.8.1 github.com/pmezard/go-difflib v1.0.0 diff --git a/go.mod b/go.mod index ddf2df57fe..7d7792a88e 100644 --- a/go.mod +++ b/go.mod @@ -21,6 +21,7 @@ require ( github.com/gobuffalo/packr v1.12.1 // indirect github.com/google/go-querystring v0.0.0-20160401233042-9235644dd9e5 // indirect github.com/google/martian v2.1.0+incompatible // indirect + github.com/google/uuid v1.2.0 github.com/googleapis/gax-go v2.0.2+incompatible // indirect github.com/gorilla/schema v1.1.0 github.com/graph-gophers/graphql-go v0.0.0-20190225005345-3e8838d4614c @@ -48,6 +49,7 @@ require ( github.com/onsi/ginkgo v1.7.0 github.com/onsi/gomega v1.4.3 github.com/opentracing/opentracing-go v1.1.0 // indirect + github.com/pelletier/go-toml v1.9.0 github.com/pkg/errors v0.8.1 github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829 github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f diff --git a/go.sum b/go.sum index bd458e5351..7374f21d89 100644 --- a/go.sum +++ b/go.sum @@ -69,6 +69,8 @@ github.com/google/go-querystring v0.0.0-20160401233042-9235644dd9e5 h1:oERTZ1buO github.com/google/go-querystring v0.0.0-20160401233042-9235644dd9e5/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go v2.0.2+incompatible h1:silFMLAnr330+NRuag/VjIGF7TLp/LBrV2CJKFLWEww= github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= @@ -151,6 +153,8 @@ github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFSt github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/pelletier/go-toml v1.9.0 h1:NOd0BRdOKpPf0SxkL3HxSQOG7rNh+4kl6PHcBPFs7Q0= +github.com/pelletier/go-toml v1.9.0/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= diff --git a/handlers/federation/handler.go b/handlers/federation/handler.go index 97d1822d05..3a7bcfd11e 100644 --- a/handlers/federation/handler.go +++ b/handlers/federation/handler.go @@ -26,9 +26,9 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { switch typ { case "name": - h.lookupByName(w, q) + h.lookupByName(w, r, q) case "id": - h.lookupByID(w, q) + h.lookupByID(w, r, q) case "forward": h.lookupByForward(w, r.URL.Query()) case "txid": @@ -55,7 +55,7 @@ func (h *Handler) failNotImplemented(w http.ResponseWriter, msg string) { }, http.StatusNotImplemented) } -func (h *Handler) lookupByID(w http.ResponseWriter, q string) { +func (h *Handler) lookupByID(w http.ResponseWriter, r *http.Request, q string) { rd, ok := h.Driver.(ReverseDriver) if !ok { @@ -65,7 +65,7 @@ func (h *Handler) lookupByID(w http.ResponseWriter, q string) { // TODO: validate that `q` is a strkey encoded address - rec, err := rd.LookupReverseRecord(q) + rec, err := rd.LookupReverseRecord(r.Context(), q) if err != nil { h.writeError(w, errors.Wrap(err, "lookup record")) return @@ -81,7 +81,7 @@ func (h *Handler) lookupByID(w http.ResponseWriter, q string) { }, http.StatusOK) } -func (h *Handler) lookupByName(w http.ResponseWriter, q string) { +func (h *Handler) lookupByName(w http.ResponseWriter, r *http.Request, q string) { name, domain, err := address.Split(q) if err != nil { h.writeJSON(w, ErrorResponse{ @@ -91,7 +91,7 @@ func (h *Handler) lookupByName(w http.ResponseWriter, q string) { return } - rec, err := h.Driver.LookupRecord(name, domain) + rec, err := h.Driver.LookupRecord(r.Context(), name, domain) if err != nil { h.writeError(w, errors.Wrap(err, "lookupByName")) return diff --git a/handlers/federation/handler_test.go b/handlers/federation/handler_test.go index 114e4ec605..377831f75b 100644 --- a/handlers/federation/handler_test.go +++ b/handlers/federation/handler_test.go @@ -1,6 +1,7 @@ package federation import ( + "context" "net/http" "net/url" "testing" @@ -200,7 +201,7 @@ func (fd ForwardTestDriver) LookupForwardingRecord(query url.Values) (*Record, e } } -func (fd ForwardTestDriver) LookupRecord(name string, domain string) (*Record, error) { +func (fd ForwardTestDriver) LookupRecord(ctx context.Context, name string, domain string) (*Record, error) { return nil, nil } diff --git a/handlers/federation/main.go b/handlers/federation/main.go index ea120e65d6..00c192713a 100644 --- a/handlers/federation/main.go +++ b/handlers/federation/main.go @@ -11,6 +11,7 @@ package federation import ( + "context" "database/sql" "net/url" "sync" @@ -25,7 +26,7 @@ type Driver interface { // federation request to lookup a `Record` using the provided stellar address. // An implementation should return a nil `*Record` value if the lookup // successfully executed but no result was found. - LookupRecord(name string, domain string) (*Record, error) + LookupRecord(ctx context.Context, name, domain string) (*Record, error) } // ErrorResponse represents the JSON response sent to a client when the request @@ -65,7 +66,7 @@ type ReverseDriver interface { // federation request to lookup a `ReverseRecord` using the provided strkey // encoded accountID. An implementation should return a nil `*ReverseRecord` // value if the lookup successfully executed but no result was found. - LookupReverseRecord(accountID string) (*ReverseRecord, error) + LookupReverseRecord(ctx context.Context, accountID string) (*ReverseRecord, error) } // ForwardDriver represents a data source against which forward queries can diff --git a/handlers/federation/reverse_sql_driver.go b/handlers/federation/reverse_sql_driver.go index 6fdf09f4a4..62059d513f 100644 --- a/handlers/federation/reverse_sql_driver.go +++ b/handlers/federation/reverse_sql_driver.go @@ -1,16 +1,21 @@ package federation -import "github.com/stellar/go/support/errors" +import ( + "context" + + "github.com/stellar/go/support/errors" +) // LookupReverseRecord implements `ReverseDriver` by performing // `drv.LookupReverseRecordQuery` against `drv.DB` using the provided parameter func (drv *ReverseSQLDriver) LookupReverseRecord( + ctx context.Context, accountid string, ) (*ReverseRecord, error) { drv.initDB() var result ReverseRecord - err := drv.db.GetRaw(&result, drv.LookupReverseRecordQuery, accountid) + err := drv.db.GetRaw(ctx, &result, drv.LookupReverseRecordQuery, accountid) if drv.db.NoRows(err) { return nil, nil diff --git a/handlers/federation/sql_driver.go b/handlers/federation/sql_driver.go index 2ecd1ee22a..bab79bc62b 100644 --- a/handlers/federation/sql_driver.go +++ b/handlers/federation/sql_driver.go @@ -1,15 +1,19 @@ package federation -import "github.com/stellar/go/support/db" -import "github.com/stellar/go/support/errors" +import ( + "context" + + "github.com/stellar/go/support/db" + "github.com/stellar/go/support/errors" +) // LookupRecord implements `Driver` by performing `drv.LookupRecordQuery` // against `drv.DB` using the provided parameters -func (drv *SQLDriver) LookupRecord(name, domain string) (*Record, error) { +func (drv *SQLDriver) LookupRecord(ctx context.Context, name, domain string) (*Record, error) { drv.initDB() var result Record - err := drv.db.GetRaw(&result, drv.LookupRecordQuery, name, domain) + err := drv.db.GetRaw(ctx, &result, drv.LookupRecordQuery, name, domain) if drv.db.NoRows(err) { return nil, nil diff --git a/ingest/CHANGELOG.md b/ingest/CHANGELOG.md new file mode 100644 index 0000000000..e10a940801 --- /dev/null +++ b/ingest/CHANGELOG.md @@ -0,0 +1,30 @@ +# Changelog + +All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). + + +## Unreleased + + +## v2.0.0 + +This release is related to the release of [Horizon v2.3.0](https://github.com/stellar/go/releases/tag/horizon-v2.3.0) and introduces some breaking changes to the `ingest` package for those building their own tools. + +### Breaking Changes +- Many APIs now require a `context.Context` parameter, allowing you to interact with the backends and control calls in a more finely-controlled manner. This includes the readers (`ChangeReader` et al.) as well as the backends themselves (`CaptiveStellarCore` et al.). + +- **`GetLedger()` always blocks** now, even for an `UnboundedRange`. + +- The `CaptiveCoreBackend` now requires an all-inclusive `CaptiveCoreToml` object to configure Captive Core rather than an assortment of individual parameters. This object can be built from a TOML file (see `NewCaptiveCoreTomlFromFile`) or from parameters (see `NewCaptiveCoreToml`) as was done before. + +- `LedgerTransaction.Meta` has been renamed to `UnsafeMeta` to highlight that users should be careful when interacting with it. + +- Remote Captive Core no longer includes the `present` field in the ledger response JSON. + +### New Features +- `NewLedgerChangeReaderFromLedgerCloseMeta` and `NewLedgerTransactionReaderFromLedgerCloseMeta` are new ways to construct readers from a particular single ledger. + +### Other Changes +- The remote Captive Core client timeout has doubled. + +- Captive Core now creates a temporary directory (`captive-core-...`) in the specified storage path (current directory by default) that it cleans it up on shutdown rather than in the OS's temp directory. diff --git a/ingest/doc_test.go b/ingest/doc_test.go index efad710140..7ac0719df3 100644 --- a/ingest/doc_test.go +++ b/ingest/doc_test.go @@ -64,16 +64,25 @@ func Example_ledgerentrieshistoryarchive() { // for a specific ledger using captive stellar-core. Please note that transaction // meta IS available when using this backend. func Example_changes() { + ctx := context.Background() archiveURL := "http://history.stellar.org/prd/core-live/core_live_001" networkPassphrase := network.PublicNetworkPassphrase + captiveCoreToml, err := ledgerbackend.NewCaptiveCoreToml(ledgerbackend.CaptiveCoreTomlParams{ + NetworkPassphrase: networkPassphrase, + HistoryArchiveURLs: []string{archiveURL}, + }) + if err != nil { + panic(err) + } + // Requires Stellar-Core 13.2.0+ backend, err := ledgerbackend.NewCaptive( ledgerbackend.CaptiveCoreConfig{ BinaryPath: "/bin/stellar-core", - ConfigAppendPath: "/opt/stellar-core.cfg", NetworkPassphrase: networkPassphrase, HistoryArchiveURLs: []string{archiveURL}, + Toml: captiveCoreToml, }, ) if err != nil { @@ -82,12 +91,12 @@ func Example_changes() { sequence := uint32(3) - err = backend.PrepareRange(ledgerbackend.SingleLedgerRange(sequence)) + err = backend.PrepareRange(ctx, ledgerbackend.SingleLedgerRange(sequence)) if err != nil { panic(err) } - changeReader, err := NewLedgerChangeReader(backend, networkPassphrase, sequence) + changeReader, err := NewLedgerChangeReader(ctx, backend, networkPassphrase, sequence) if err != nil { panic(err) } diff --git a/ingest/ledger_change_reader.go b/ingest/ledger_change_reader.go index f693963070..e1aa3fb2ed 100644 --- a/ingest/ledger_change_reader.go +++ b/ingest/ledger_change_reader.go @@ -1,6 +1,7 @@ package ingest import ( + "context" "io" "github.com/stellar/go/ingest/ledgerbackend" @@ -46,8 +47,8 @@ var _ ChangeReader = (*LedgerChangeReader)(nil) // NewLedgerChangeReader constructs a new LedgerChangeReader instance bound to the given ledger. // Note that the returned LedgerChangeReader is not thread safe and should not be shared // by multiple goroutines. -func NewLedgerChangeReader(backend ledgerbackend.LedgerBackend, networkPassphrase string, sequence uint32) (*LedgerChangeReader, error) { - transactionReader, err := NewLedgerTransactionReader(backend, networkPassphrase, sequence) +func NewLedgerChangeReader(ctx context.Context, backend ledgerbackend.LedgerBackend, networkPassphrase string, sequence uint32) (*LedgerChangeReader, error) { + transactionReader, err := NewLedgerTransactionReader(ctx, backend, networkPassphrase, sequence) if err != nil { return nil, err } diff --git a/ingest/ledger_change_reader_test.go b/ingest/ledger_change_reader_test.go index b338ba935a..c461ef28c3 100644 --- a/ingest/ledger_change_reader_test.go +++ b/ingest/ledger_change_reader_test.go @@ -1,6 +1,7 @@ package ingest import ( + "context" "fmt" "io" "testing" @@ -19,14 +20,14 @@ const ( ) func TestNewLedgerChangeReaderFails(t *testing.T) { + ctx := context.Background() mock := &ledgerbackend.MockDatabaseBackend{} seq := uint32(123) - mock.On("GetLedger", seq).Return( - true, + mock.On("GetLedger", ctx, seq).Return( xdr.LedgerCloseMeta{}, fmt.Errorf("ledger error"), ).Once() - _, err := NewLedgerChangeReader(mock, network.TestNetworkPassphrase, seq) + _, err := NewLedgerChangeReader(ctx, mock, network.TestNetworkPassphrase, seq) assert.EqualError( t, err, @@ -34,23 +35,8 @@ func TestNewLedgerChangeReaderFails(t *testing.T) { ) } -func TestNewLedgerChangeReaderLedgerDoesNotExist(t *testing.T) { - mock := &ledgerbackend.MockDatabaseBackend{} - seq := uint32(123) - mock.On("GetLedger", seq).Return( - false, - xdr.LedgerCloseMeta{}, - nil, - ).Once() - _, err := NewLedgerChangeReader(mock, network.TestNetworkPassphrase, seq) - assert.Equal( - t, - err, - ErrNotFound, - ) -} - func TestNewLedgerChangeReaderSucceeds(t *testing.T) { + ctx := context.Background() mock := &ledgerbackend.MockDatabaseBackend{} seq := uint32(123) @@ -61,8 +47,7 @@ func TestNewLedgerChangeReaderSucceeds(t *testing.T) { }, } - mock.On("GetLedger", seq).Return( - true, + mock.On("GetLedger", ctx, seq).Return( xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{ LedgerHeader: header, @@ -71,7 +56,7 @@ func TestNewLedgerChangeReaderSucceeds(t *testing.T) { nil, ).Once() - reader, err := NewLedgerChangeReader(mock, network.TestNetworkPassphrase, seq) + reader, err := NewLedgerChangeReader(ctx, mock, network.TestNetworkPassphrase, seq) assert.NoError(t, err) assert.Equal(t, reader.GetHeader(), header) @@ -106,11 +91,12 @@ func parseChange(change Change) balanceEntry { func assertChangesEqual( t *testing.T, + ctx context.Context, sequence uint32, backend ledgerbackend.LedgerBackend, expected []balanceEntry, ) { - reader, err := NewLedgerChangeReader(backend, network.TestNetworkPassphrase, sequence) + reader, err := NewLedgerChangeReader(ctx, backend, network.TestNetworkPassphrase, sequence) assert.NoError(t, err) changes := []balanceEntry{} @@ -130,6 +116,7 @@ func assertChangesEqual( } func TestLedgerChangeReaderOrder(t *testing.T) { + ctx := context.Background() mock := &ledgerbackend.MockDatabaseBackend{} seq := uint32(123) @@ -235,9 +222,9 @@ func TestLedgerChangeReaderOrder(t *testing.T) { }, }, } - mock.On("GetLedger", seq).Return(true, ledger, nil).Once() + mock.On("GetLedger", ctx, seq).Return(ledger, nil).Once() - assertChangesEqual(t, seq, mock, []balanceEntry{ + assertChangesEqual(t, ctx, seq, mock, []balanceEntry{ {feeAddress, 100}, {feeAddress, 200}, {feeAddress, 300}, @@ -253,8 +240,8 @@ func TestLedgerChangeReaderOrder(t *testing.T) { mock.AssertExpectations(t) ledger.V0.LedgerHeader.Header.LedgerVersion = 8 - mock.On("GetLedger", seq).Return(true, ledger, nil).Once() - _, err = NewLedgerChangeReader(mock, network.TestNetworkPassphrase, seq) + mock.On("GetLedger", ctx, seq).Return(ledger, nil).Once() + _, err = NewLedgerChangeReader(ctx, mock, network.TestNetworkPassphrase, seq) assert.EqualError( t, err, @@ -266,9 +253,9 @@ func TestLedgerChangeReaderOrder(t *testing.T) { ledger.V0.LedgerHeader.Header.LedgerVersion = 9 ledger.V0.TxProcessing[0].FeeProcessing = xdr.LedgerEntryChanges{} ledger.V0.TxProcessing[1].FeeProcessing = xdr.LedgerEntryChanges{} - mock.On("GetLedger", seq).Return(true, ledger, nil).Once() + mock.On("GetLedger", ctx, seq).Return(ledger, nil).Once() - assertChangesEqual(t, seq, mock, []balanceEntry{ + assertChangesEqual(t, ctx, seq, mock, []balanceEntry{ {metaAddress, 300}, {metaAddress, 400}, {metaAddress, 600}, @@ -283,9 +270,9 @@ func TestLedgerChangeReaderOrder(t *testing.T) { ledger.V0.LedgerHeader.Header.LedgerVersion = 10 ledger.V0.TxProcessing[0].FeeProcessing = xdr.LedgerEntryChanges{} ledger.V0.TxProcessing[1].FeeProcessing = xdr.LedgerEntryChanges{} - mock.On("GetLedger", seq).Return(true, ledger, nil).Once() + mock.On("GetLedger", ctx, seq).Return(ledger, nil).Once() - assertChangesEqual(t, seq, mock, []balanceEntry{ + assertChangesEqual(t, ctx, seq, mock, []balanceEntry{ {metaAddress, 300}, {metaAddress, 400}, {metaAddress, 600}, @@ -305,9 +292,9 @@ func TestLedgerChangeReaderOrder(t *testing.T) { Changes: xdr.LedgerEntryChanges{}, }, } - mock.On("GetLedger", seq).Return(true, ledger, nil).Once() + mock.On("GetLedger", ctx, seq).Return(ledger, nil).Once() - assertChangesEqual(t, seq, mock, []balanceEntry{ + assertChangesEqual(t, ctx, seq, mock, []balanceEntry{ {metaAddress, 300}, {metaAddress, 400}, {metaAddress, 600}, @@ -329,8 +316,8 @@ func TestLedgerChangeReaderOrder(t *testing.T) { Operations: []xdr.OperationMeta{}, }, } - mock.On("GetLedger", seq).Return(true, ledger, nil).Once() + mock.On("GetLedger", ctx, seq).Return(ledger, nil).Once() - assertChangesEqual(t, seq, mock, []balanceEntry{}) + assertChangesEqual(t, ctx, seq, mock, []balanceEntry{}) mock.AssertExpectations(t) } diff --git a/ingest/ledger_transaction.go b/ingest/ledger_transaction.go index 1ff9040d5c..9410dcd0eb 100644 --- a/ingest/ledger_transaction.go +++ b/ingest/ledger_transaction.go @@ -10,11 +10,12 @@ type LedgerTransaction struct { Index uint32 Envelope xdr.TransactionEnvelope Result xdr.TransactionResultPair - // FeeChanges and Meta are low level values. + // FeeChanges and UnsafeMeta are low level values, do not use them directly unless + // you know what you are doing. // Use LedgerTransaction.GetChanges() for higher level access to ledger // entry changes. FeeChanges xdr.LedgerEntryChanges - Meta xdr.TransactionMeta + UnsafeMeta xdr.TransactionMeta } func (t *LedgerTransaction) txInternalError() bool { @@ -35,11 +36,11 @@ func (t *LedgerTransaction) GetChanges() ([]Change, error) { var changes []Change // Transaction meta - switch t.Meta.V { + switch t.UnsafeMeta.V { case 0: return changes, errors.New("TransactionMeta.V=0 not supported") case 1: - v1Meta := t.Meta.MustV1() + v1Meta := t.UnsafeMeta.MustV1() txChanges := GetChangesFromLedgerEntryChanges(v1Meta.TxChanges) changes = append(changes, txChanges...) @@ -56,7 +57,7 @@ func (t *LedgerTransaction) GetChanges() ([]Change, error) { } case 2: - v2Meta := t.Meta.MustV2() + v2Meta := t.UnsafeMeta.MustV2() txChangesBefore := GetChangesFromLedgerEntryChanges(v2Meta.TxChangesBefore) changes = append(changes, txChangesBefore...) @@ -88,7 +89,7 @@ func (t *LedgerTransaction) GetOperationChanges(operationIndex uint32) ([]Change changes := []Change{} // Transaction meta - switch t.Meta.V { + switch t.UnsafeMeta.V { case 0: return changes, errors.New("TransactionMeta.V=0 not supported") case 1: @@ -97,7 +98,7 @@ func (t *LedgerTransaction) GetOperationChanges(operationIndex uint32) ([]Change return changes, nil } - v1Meta := t.Meta.MustV1() + v1Meta := t.UnsafeMeta.MustV1() changes = operationChanges(v1Meta.Operations, operationIndex) case 2: // Ignore operations meta if txInternalError https://github.com/stellar/go/issues/2111 @@ -105,7 +106,7 @@ func (t *LedgerTransaction) GetOperationChanges(operationIndex uint32) ([]Change return changes, nil } - v2Meta := t.Meta.MustV2() + v2Meta := t.UnsafeMeta.MustV2() changes = operationChanges(v2Meta.Operations, operationIndex) default: return changes, errors.New("Unsupported TransactionMeta version") diff --git a/ingest/ledger_transaction_reader.go b/ingest/ledger_transaction_reader.go index c3bb969257..ef68e67aa0 100644 --- a/ingest/ledger_transaction_reader.go +++ b/ingest/ledger_transaction_reader.go @@ -1,6 +1,7 @@ package ingest import ( + "context" "encoding/hex" "io" @@ -20,16 +21,12 @@ type LedgerTransactionReader struct { // NewLedgerTransactionReader creates a new TransactionReader instance. // Note that TransactionReader is not thread safe and should not be shared by multiple goroutines. -func NewLedgerTransactionReader(backend ledgerbackend.LedgerBackend, networkPassphrase string, sequence uint32) (*LedgerTransactionReader, error) { - exists, ledgerCloseMeta, err := backend.GetLedger(sequence) +func NewLedgerTransactionReader(ctx context.Context, backend ledgerbackend.LedgerBackend, networkPassphrase string, sequence uint32) (*LedgerTransactionReader, error) { + ledgerCloseMeta, err := backend.GetLedger(ctx, sequence) if err != nil { return nil, errors.Wrap(err, "error getting ledger from the backend") } - if !exists { - return nil, ErrNotFound - } - return NewLedgerTransactionReaderFromLedgerCloseMeta(networkPassphrase, ledgerCloseMeta) } @@ -102,7 +99,7 @@ func (reader *LedgerTransactionReader) storeTransactions(lcm xdr.LedgerCloseMeta Index: uint32(i + 1), // Transactions start at '1' Envelope: envelope, Result: result, - Meta: lcm.V0.TxProcessing[i].TxApplyProcessing, + UnsafeMeta: lcm.V0.TxProcessing[i].TxApplyProcessing, FeeChanges: lcm.V0.TxProcessing[i].FeeProcessing, }) } diff --git a/ingest/ledger_transaction_test.go b/ingest/ledger_transaction_test.go index 96fe96961e..348b1d9688 100644 --- a/ingest/ledger_transaction_test.go +++ b/ingest/ledger_transaction_test.go @@ -45,7 +45,7 @@ func TestFeeMetaAndOperationsChangesSeparate(t *testing.T) { }, }, }, - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 1, V1: &xdr.TransactionMetaV1{ Operations: []xdr.OperationMeta{ @@ -146,11 +146,11 @@ func TestFailedTransactionOperationChangesMeta(t *testing.T) { }, }, }, - Meta: tc.meta, + UnsafeMeta: tc.meta, } operationChanges, err := tx.GetOperationChanges(0) - if tx.Meta.V == 0 { + if tx.UnsafeMeta.V == 0 { assert.Error(t, err) assert.EqualError(t, err, "TransactionMeta.V=0 not supported") } else { @@ -162,7 +162,7 @@ func TestFailedTransactionOperationChangesMeta(t *testing.T) { } func TestMetaV2Order(t *testing.T) { tx := LedgerTransaction{ - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ TxChangesBefore: xdr.LedgerEntryChanges{ @@ -333,7 +333,7 @@ func TestMetaV2Order(t *testing.T) { func TestMetaV0(t *testing.T) { tx := LedgerTransaction{ - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 0, }} @@ -449,7 +449,7 @@ func TestChangeAccountChangedExceptSignersSignerChange(t *testing.T) { Account: &xdr.AccountEntry{ AccountId: xdr.MustAddress("GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML"), Signers: []xdr.Signer{ - xdr.Signer{ + { Key: xdr.MustSigner("GCCCU34WDY2RATQTOOQKY6SZWU6J5DONY42SWGW2CIXGW4LICAGNRZKX"), Weight: 1, }, @@ -464,7 +464,7 @@ func TestChangeAccountChangedExceptSignersSignerChange(t *testing.T) { Account: &xdr.AccountEntry{ AccountId: xdr.MustAddress("GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML"), Signers: []xdr.Signer{ - xdr.Signer{ + { Key: xdr.MustSigner("GCCCU34WDY2RATQTOOQKY6SZWU6J5DONY42SWGW2CIXGW4LICAGNRZKX"), Weight: 2, }, @@ -497,7 +497,7 @@ func TestChangeAccountChangedExceptSignersNoChanges(t *testing.T) { HomeDomain: "stellar.org", Thresholds: [4]byte{1, 1, 1, 1}, Signers: []xdr.Signer{ - xdr.Signer{ + { Key: xdr.MustSigner("GCCCU34WDY2RATQTOOQKY6SZWU6J5DONY42SWGW2CIXGW4LICAGNRZKX"), Weight: 1, }, @@ -528,7 +528,7 @@ func TestChangeAccountChangedExceptSignersNoChanges(t *testing.T) { HomeDomain: "stellar.org", Thresholds: [4]byte{1, 1, 1, 1}, Signers: []xdr.Signer{ - xdr.Signer{ + { Key: xdr.MustSigner("GCCCU34WDY2RATQTOOQKY6SZWU6J5DONY42SWGW2CIXGW4LICAGNRZKX"), Weight: 1, }, @@ -708,7 +708,7 @@ func TestChangeAccountSignersChangedSignerAdded(t *testing.T) { Account: &xdr.AccountEntry{ AccountId: xdr.MustAddress("GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML"), Signers: []xdr.Signer{ - xdr.Signer{ + { Key: xdr.MustSigner("GCCCU34WDY2RATQTOOQKY6SZWU6J5DONY42SWGW2CIXGW4LICAGNRZKX"), Weight: 1, }, @@ -731,7 +731,7 @@ func TestChangeAccountSignersChangedSignerRemoved(t *testing.T) { Account: &xdr.AccountEntry{ AccountId: xdr.MustAddress("GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML"), Signers: []xdr.Signer{ - xdr.Signer{ + { Key: xdr.MustSigner("GCCCU34WDY2RATQTOOQKY6SZWU6J5DONY42SWGW2CIXGW4LICAGNRZKX"), Weight: 1, }, @@ -764,7 +764,7 @@ func TestChangeAccountSignersChangedSignerWeightChanged(t *testing.T) { Account: &xdr.AccountEntry{ AccountId: xdr.MustAddress("GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML"), Signers: []xdr.Signer{ - xdr.Signer{ + { Key: xdr.MustSigner("GCCCU34WDY2RATQTOOQKY6SZWU6J5DONY42SWGW2CIXGW4LICAGNRZKX"), Weight: 1, }, @@ -779,7 +779,7 @@ func TestChangeAccountSignersChangedSignerWeightChanged(t *testing.T) { Account: &xdr.AccountEntry{ AccountId: xdr.MustAddress("GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML"), Signers: []xdr.Signer{ - xdr.Signer{ + { Key: xdr.MustSigner("GCCCU34WDY2RATQTOOQKY6SZWU6J5DONY42SWGW2CIXGW4LICAGNRZKX"), Weight: 2, }, diff --git a/ingest/ledgerbackend/captive_core_backend.go b/ingest/ledgerbackend/captive_core_backend.go index a4f00c191b..a7127c3110 100644 --- a/ingest/ledgerbackend/captive_core_backend.go +++ b/ingest/ledgerbackend/captive_core_backend.go @@ -85,15 +85,6 @@ type CaptiveStellarCore struct { // For testing stellarCoreRunnerFactory func(mode stellarCoreRunnerMode) (stellarCoreRunnerInterface, error) - // Defines if the blocking mode (off by default) is on or off. In blocking mode, - // calling GetLedger blocks until the requested ledger is available. This is useful - // for scenarios when Horizon consumes ledgers faster than Stellar-Core produces them - // and using `time.Sleep` when ledger is not available can actually slow entire - // ingestion process. - // blockingLock locks access to blocking. - blockingLock sync.Mutex - blocking bool - // cachedMeta keeps that ledger data of the last fetched ledger. Updated in GetLedger(). cachedMeta *xdr.LedgerCloseMeta @@ -106,13 +97,11 @@ type CaptiveStellarCore struct { type CaptiveCoreConfig struct { // BinaryPath is the file path to the Stellar Core binary BinaryPath string - // ConfigAppendPath is the file path to additional configuration for the Stellar Core configuration file used - // by captive core. This field is only required when ingesting in online mode (e.g. UnboundedRange). - ConfigAppendPath string // NetworkPassphrase is the Stellar network passphrase used by captive core when connecting to the Stellar network NetworkPassphrase string // HistoryArchiveURLs are a list of history archive urls HistoryArchiveURLs []string + Toml *CaptiveCoreToml // Optional fields @@ -121,18 +110,9 @@ type CaptiveCoreConfig struct { CheckpointFrequency uint32 // LedgerHashStore is an optional store used to obtain hashes for ledger sequences from a trusted source LedgerHashStore TrustedLedgerHashStore - // HTTPPort is the TCP port to listen for requests (defaults to 0, which disables the HTTP server) - HTTPPort uint - // PeerPort is the TCP port to bind to for connecting to the Stellar network - // (defaults to 11625). It may be useful for example when there's >1 Stellar-Core - // instance running on a machine. - PeerPort uint // Log is an (optional) custom logger which will capture any output from the Stellar Core process. // If Log is omitted then all output will be printed to stdout. Log *log.Entry - // LogPath is the (optional) path in which to store Core logs, passed along - // to Stellar Core's LOG_FILE_PATH - LogPath string // Context is the (optional) context which controls the lifetime of a CaptiveStellarCore instance. Once the context is done // the CaptiveStellarCore instance will not be able to stream ledgers from Stellar Core or spawn new // instances of Stellar Core. If Context is omitted CaptiveStellarCore will default to using context.Background. @@ -235,13 +215,12 @@ func (c *CaptiveStellarCore) openOfflineReplaySubprocess(from, to uint32) error // the requested ledger c.nextLedger = c.roundDownToFirstReplayAfterCheckpointStart(from) c.lastLedger = &to - c.setBlocking(true) c.previousLedgerHash = nil return nil } -func (c *CaptiveStellarCore) openOnlineReplaySubprocess(from uint32) error { +func (c *CaptiveStellarCore) openOnlineReplaySubprocess(ctx context.Context, from uint32) error { latestCheckpointSequence, err := c.getLatestCheckpointSequence() if err != nil { return errors.Wrap(err, "error getting latest checkpoint sequence") @@ -269,7 +248,7 @@ func (c *CaptiveStellarCore) openOnlineReplaySubprocess(from uint32) error { c.stellarCoreRunner = runner } - runFrom, ledgerHash, nextLedger, err := c.runFromParams(from) + runFrom, ledgerHash, nextLedger, err := c.runFromParams(ctx, from) if err != nil { return errors.Wrap(err, "error calculating ledger and hash for stelar-core run") } @@ -285,7 +264,7 @@ func (c *CaptiveStellarCore) openOnlineReplaySubprocess(from uint32) error { if c.ledgerHashStore != nil { var exists bool - ledgerHash, exists, err = c.ledgerHashStore.GetLedgerHash(nextLedger - 1) + ledgerHash, exists, err = c.ledgerHashStore.GetLedgerHash(ctx, nextLedger-1) if err != nil { return errors.Wrapf(err, "error trying to read ledger hash %d", nextLedger-1) } @@ -294,13 +273,11 @@ func (c *CaptiveStellarCore) openOnlineReplaySubprocess(from uint32) error { } } - c.setBlocking(false) - return nil } // runFromParams receives a ledger sequence and calculates the required values to call stellar-core run with --start-ledger and --start-hash -func (c *CaptiveStellarCore) runFromParams(from uint32) (runFrom uint32, ledgerHash string, nextLedger uint32, err error) { +func (c *CaptiveStellarCore) runFromParams(ctx context.Context, from uint32) (runFrom uint32, ledgerHash string, nextLedger uint32, err error) { if from == 1 { // Trying to start-from 1 results in an error from Stellar-Core: // Target ledger 1 is not newer than last closed ledger 1 - nothing to do @@ -338,7 +315,7 @@ func (c *CaptiveStellarCore) runFromParams(from uint32) (runFrom uint32, ledgerH runFrom = from - 1 if c.ledgerHashStore != nil { var exists bool - ledgerHash, exists, err = c.ledgerHashStore.GetLedgerHash(runFrom) + ledgerHash, exists, err = c.ledgerHashStore.GetLedgerHash(ctx, runFrom) if err != nil { err = errors.Wrapf(err, "error trying to read ledger hash %d", runFrom) return @@ -357,7 +334,7 @@ func (c *CaptiveStellarCore) runFromParams(from uint32) (runFrom uint32, ledgerH return } -func (c *CaptiveStellarCore) startPreparingRange(ledgerRange Range) (bool, error) { +func (c *CaptiveStellarCore) startPreparingRange(ctx context.Context, ledgerRange Range) (bool, error) { c.stellarCoreLock.Lock() defer c.stellarCoreLock.Unlock() @@ -375,7 +352,7 @@ func (c *CaptiveStellarCore) startPreparingRange(ledgerRange Range) (bool, error if ledgerRange.bounded { err = c.openOfflineReplaySubprocess(ledgerRange.from, ledgerRange.to) } else { - err = c.openOnlineReplaySubprocess(ledgerRange.from) + err = c.openOnlineReplaySubprocess(ctx, ledgerRange.from) } if err != nil { return false, errors.Wrap(err, "opening subprocess") @@ -393,18 +370,14 @@ func (c *CaptiveStellarCore) startPreparingRange(ledgerRange Range) (bool, error // it normally (including connecting to the Stellar network). // Please note that using a BoundedRange, currently, requires a full-trust on // history archive. This issue is being fixed in Stellar-Core. -func (c *CaptiveStellarCore) PrepareRange(ledgerRange Range) error { - if alreadyPrepared, err := c.startPreparingRange(ledgerRange); err != nil { +func (c *CaptiveStellarCore) PrepareRange(ctx context.Context, ledgerRange Range) error { + if alreadyPrepared, err := c.startPreparingRange(ctx, ledgerRange); err != nil { return errors.Wrap(err, "error starting prepare range") } else if alreadyPrepared { return nil } - old := c.isBlocking() - c.setBlocking(true) - _, _, err := c.GetLedger(ledgerRange.from) - c.setBlocking(old) - + _, err := c.GetLedger(ctx, ledgerRange.from) if err != nil { return errors.Wrapf(err, "Error fast-forwarding to %d", ledgerRange.from) } @@ -413,7 +386,7 @@ func (c *CaptiveStellarCore) PrepareRange(ledgerRange Range) error { } // IsPrepared returns true if a given ledgerRange is prepared. -func (c *CaptiveStellarCore) IsPrepared(ledgerRange Range) (bool, error) { +func (c *CaptiveStellarCore) IsPrepared(ctx context.Context, ledgerRange Range) (bool, error) { c.stellarCoreLock.RLock() defer c.stellarCoreLock.RUnlock() @@ -454,51 +427,39 @@ func (c *CaptiveStellarCore) isPrepared(ledgerRange Range) bool { return false } -// GetLedgerBlocking works as GetLedger but will block until the ledger is -// available in the backend (even for UnboundedRange). -// Please note that requesting a ledger sequence far after current ledger will -// block the execution for a long time. -func (c *CaptiveStellarCore) GetLedgerBlocking(sequence uint32) (xdr.LedgerCloseMeta, error) { - old := c.isBlocking() - c.setBlocking(true) - _, meta, err := c.GetLedger(sequence) - c.setBlocking(old) - return meta, err -} - -// GetLedger returns true when ledger is found and it's LedgerCloseMeta. -// Call PrepareRange first to instruct the backend which ledgers to fetch. +// GetLedger will block until the ledger is available in the backend +// (even for UnboundedRange), then return it's LedgerCloseMeta. // +// Call PrepareRange first to instruct the backend which ledgers to fetch. // CaptiveStellarCore requires PrepareRange call first to initialize Stellar-Core. // Requesting a ledger on non-prepared backend will return an error. // -// Because data is streamed from Stellar-Core ledger after ledger user should +// Please note that requesting a ledger sequence far after current +// ledger will block the execution for a long time. +// +// Because ledger data is streamed from Stellar-Core sequentially, users should // request sequences in a non-decreasing order. If the requested sequence number // is less than the last requested sequence number, an error will be returned. // // This function behaves differently for bounded and unbounded ranges: -// * BoundedRange makes GetLedger blocking if the requested ledger is not yet -// available in the ledger. After getting the last ledger in a range this -// method will also Close() the backend. -// * UnboundedRange makes GetLedger non-blocking. The method will return with -// the first argument equal false. -// This is done to provide maximum performance when streaming old ledgers. -func (c *CaptiveStellarCore) GetLedger(sequence uint32) (bool, xdr.LedgerCloseMeta, error) { +// * BoundedRange: After getting the last ledger in a range this method will +// also Close() the backend. +func (c *CaptiveStellarCore) GetLedger(ctx context.Context, sequence uint32) (xdr.LedgerCloseMeta, error) { c.stellarCoreLock.RLock() defer c.stellarCoreLock.RUnlock() if c.cachedMeta != nil && sequence == c.cachedMeta.LedgerSequence() { // GetLedger can be called multiple times using the same sequence, ex. to create // change and transaction readers. If we have this ledger buffered, let's return it. - return true, *c.cachedMeta, nil + return *c.cachedMeta, nil } if c.isClosed() { - return false, xdr.LedgerCloseMeta{}, errors.New("session is closed, call PrepareRange first") + return xdr.LedgerCloseMeta{}, errors.New("session is closed, call PrepareRange first") } if sequence < c.nextLedger { - return false, xdr.LedgerCloseMeta{}, errors.Errorf( + return xdr.LedgerCloseMeta{}, errors.Errorf( "requested ledger %d is behind the captive core stream (expected=%d)", sequence, c.nextLedger, @@ -506,7 +467,7 @@ func (c *CaptiveStellarCore) GetLedger(sequence uint32) (bool, xdr.LedgerCloseMe } if c.lastLedger != nil && sequence > *c.lastLedger { - return false, xdr.LedgerCloseMeta{}, errors.Errorf( + return xdr.LedgerCloseMeta{}, errors.Errorf( "reading past bounded range (requested sequence=%d, last ledger in range=%d)", sequence, *c.lastLedger, @@ -514,63 +475,66 @@ func (c *CaptiveStellarCore) GetLedger(sequence uint32) (bool, xdr.LedgerCloseMe } // Now loop along the range until we find the ledger we want. - var errOut error for { - if !c.isBlocking() && len(c.stellarCoreRunner.getMetaPipe()) == 0 { - return false, xdr.LedgerCloseMeta{}, nil + select { + case <-ctx.Done(): + return xdr.LedgerCloseMeta{}, ctx.Err() + case result, ok := <-c.stellarCoreRunner.getMetaPipe(): + found, ledger, err := c.handleMetaPipeResult(sequence, result, ok) + if found || err != nil { + return ledger, err + } } + } +} - result, ok := <-c.stellarCoreRunner.getMetaPipe() - if errOut = c.checkMetaPipeResult(result, ok); errOut != nil { - break - } +func (c *CaptiveStellarCore) handleMetaPipeResult(sequence uint32, result metaResult, ok bool) (bool, xdr.LedgerCloseMeta, error) { + if err := c.checkMetaPipeResult(result, ok); err != nil { + c.stellarCoreRunner.close() + return false, xdr.LedgerCloseMeta{}, err + } - seq := result.LedgerCloseMeta.LedgerSequence() - if seq != c.nextLedger { - // We got something unexpected; close and reset - errOut = errors.Errorf( - "unexpected ledger sequence (expected=%d actual=%d)", - c.nextLedger, - seq, - ) - break - } + seq := result.LedgerCloseMeta.LedgerSequence() + if seq != c.nextLedger { + // We got something unexpected; close and reset + c.stellarCoreRunner.close() + return false, xdr.LedgerCloseMeta{}, errors.Errorf( + "unexpected ledger sequence (expected=%d actual=%d)", + c.nextLedger, + seq, + ) + } - newPreviousLedgerHash := result.LedgerCloseMeta.PreviousLedgerHash().HexString() - if c.previousLedgerHash != nil && *c.previousLedgerHash != newPreviousLedgerHash { - // We got something unexpected; close and reset - errOut = errors.Errorf( - "unexpected previous ledger hash for ledger %d (expected=%s actual=%s)", - seq, - *c.previousLedgerHash, - newPreviousLedgerHash, - ) - break - } + newPreviousLedgerHash := result.LedgerCloseMeta.PreviousLedgerHash().HexString() + if c.previousLedgerHash != nil && *c.previousLedgerHash != newPreviousLedgerHash { + // We got something unexpected; close and reset + c.stellarCoreRunner.close() + return false, xdr.LedgerCloseMeta{}, errors.Errorf( + "unexpected previous ledger hash for ledger %d (expected=%s actual=%s)", + seq, + *c.previousLedgerHash, + newPreviousLedgerHash, + ) + } - c.nextLedger++ - currentLedgerHash := result.LedgerCloseMeta.LedgerHash().HexString() - c.previousLedgerHash = ¤tLedgerHash + c.nextLedger++ + currentLedgerHash := result.LedgerCloseMeta.LedgerHash().HexString() + c.previousLedgerHash = ¤tLedgerHash - // Update cache with the latest value because we incremented nextLedger. - // TODO add test for this case! - c.cachedMeta = result.LedgerCloseMeta + // Update cache with the latest value because we incremented nextLedger. + c.cachedMeta = result.LedgerCloseMeta - if seq == sequence { - // If we got the _last_ ledger in a segment, close before returning. - if c.lastLedger != nil && *c.lastLedger == seq { - if err := c.stellarCoreRunner.close(); err != nil { - return false, xdr.LedgerCloseMeta{}, errors.Wrap(err, "error closing session") - } + if seq == sequence { + // If we got the _last_ ledger in a segment, close before returning. + if c.lastLedger != nil && *c.lastLedger == seq { + if err := c.stellarCoreRunner.close(); err != nil { + return false, xdr.LedgerCloseMeta{}, errors.Wrap(err, "error closing session") } - return true, *c.cachedMeta, nil } + return true, *c.cachedMeta, nil } - // All paths above that break out of the loop (instead of return) - // set errOut to non-nil: there was an error and we should close and - // reset state before retuning an error to our caller. - c.stellarCoreRunner.close() - return false, xdr.LedgerCloseMeta{}, errOut + + return false, xdr.LedgerCloseMeta{}, nil } func (c *CaptiveStellarCore) checkMetaPipeResult(result metaResult, ok bool) error { @@ -610,7 +574,7 @@ func (c *CaptiveStellarCore) checkMetaPipeResult(result metaResult, ok bool) err // Note that for UnboundedRange the returned sequence number is not necessarily // the latest sequence closed by the network. It's always the last value available // in the backend. -func (c *CaptiveStellarCore) GetLatestLedgerSequence() (uint32, error) { +func (c *CaptiveStellarCore) GetLatestLedgerSequence(ctx context.Context) (uint32, error) { c.stellarCoreLock.RLock() defer c.stellarCoreLock.RUnlock() @@ -628,18 +592,6 @@ func (c *CaptiveStellarCore) isClosed() bool { return c.nextLedger == 0 || c.stellarCoreRunner == nil || c.stellarCoreRunner.context().Err() != nil } -func (c *CaptiveStellarCore) isBlocking() bool { - c.blockingLock.Lock() - defer c.blockingLock.Unlock() - return c.blocking -} - -func (c *CaptiveStellarCore) setBlocking(val bool) { - c.blockingLock.Lock() - c.blocking = val - c.blockingLock.Unlock() -} - // Close closes existing Stellar-Core process, streaming sessions and removes all // temporary files. Note, once a CaptiveStellarCore instance is closed it can can no longer be used and // all subsequent calls to PrepareRange(), GetLedger(), etc will fail. @@ -651,8 +603,15 @@ func (c *CaptiveStellarCore) Close() error { // after the CaptiveStellarCore context is canceled all subsequent calls to PrepareRange() will fail c.cancel() + // TODO: Sucks to ignore the error here, but no worse than it was before, + // so... + if c.ledgerHashStore != nil { + c.ledgerHashStore.Close() + } + if c.stellarCoreRunner != nil { return c.stellarCoreRunner.close() } + return nil } diff --git a/ingest/ledgerbackend/captive_core_backend_test.go b/ingest/ledgerbackend/captive_core_backend_test.go index 3870199f61..02b36c6314 100644 --- a/ingest/ledgerbackend/captive_core_backend_test.go +++ b/ingest/ledgerbackend/captive_core_backend_test.go @@ -132,14 +132,12 @@ type testLedgerHeader struct { func TestCaptiveNew(t *testing.T) { executablePath := "/etc/stellar-core" - configPath := "/etc/stellar-core.cfg" networkPassphrase := network.PublicNetworkPassphrase historyURLs := []string{"http://history.stellar.org/prd/core-live/core_live_001"} captiveStellarCore, err := NewCaptive( CaptiveCoreConfig{ BinaryPath: executablePath, - ConfigAppendPath: configPath, NetworkPassphrase: networkPassphrase, HistoryArchiveURLs: historyURLs, }, @@ -162,10 +160,11 @@ func TestCaptivePrepareRange(t *testing.T) { } } + ctx := context.Background() mockRunner := &stellarCoreRunnerMock{} mockRunner.On("catchup", uint32(100), uint32(200)).Return(nil).Once() mockRunner.On("getMetaPipe").Return((<-chan metaResult)(metaChan)) - mockRunner.On("context").Return(context.Background()) + mockRunner.On("context").Return(ctx) mockArchive := &historyarchive.MockArchive{} mockArchive. @@ -186,7 +185,7 @@ func TestCaptivePrepareRange(t *testing.T) { }), } - err := captiveBackend.PrepareRange(BoundedRange(100, 200)) + err := captiveBackend.PrepareRange(ctx, BoundedRange(100, 200)) assert.NoError(t, err) mockRunner.On("close").Return(nil).Once() err = captiveBackend.Close() @@ -199,12 +198,13 @@ func TestCaptivePrepareRange(t *testing.T) { func TestCaptivePrepareRangeCrash(t *testing.T) { metaChan := make(chan metaResult) close(metaChan) + ctx := context.Background() mockRunner := &stellarCoreRunnerMock{} mockRunner.On("catchup", uint32(100), uint32(200)).Return(nil).Once() mockRunner.On("getProcessExitError").Return(true, errors.New("exit code -1")) mockRunner.On("getMetaPipe").Return((<-chan metaResult)(metaChan)) mockRunner.On("close").Return(nil).Once() - mockRunner.On("context").Return(context.Background()) + mockRunner.On("context").Return(ctx) mockArchive := &historyarchive.MockArchive{} mockArchive. @@ -221,7 +221,7 @@ func TestCaptivePrepareRangeCrash(t *testing.T) { checkpointManager: historyarchive.NewCheckpointManager(64), } - err := captiveBackend.PrepareRange(BoundedRange(100, 200)) + err := captiveBackend.PrepareRange(ctx, BoundedRange(100, 200)) assert.EqualError(t, err, "Error fast-forwarding to 100: stellar core exited unexpectedly: exit code -1") mockRunner.AssertExpectations(t) mockArchive.AssertExpectations(t) @@ -239,10 +239,11 @@ func TestCaptivePrepareRangeTerminated(t *testing.T) { } } close(metaChan) + ctx := context.Background() mockRunner := &stellarCoreRunnerMock{} mockRunner.On("catchup", uint32(100), uint32(200)).Return(nil).Once() mockRunner.On("getMetaPipe").Return((<-chan metaResult)(metaChan)) - mockRunner.On("context").Return(context.Background()) + mockRunner.On("context").Return(ctx) mockArchive := &historyarchive.MockArchive{} mockArchive. @@ -259,32 +260,34 @@ func TestCaptivePrepareRangeTerminated(t *testing.T) { checkpointManager: historyarchive.NewCheckpointManager(64), } - err := captiveBackend.PrepareRange(BoundedRange(100, 200)) + err := captiveBackend.PrepareRange(ctx, BoundedRange(100, 200)) assert.NoError(t, err) mockRunner.AssertExpectations(t) mockArchive.AssertExpectations(t) } func TestCaptivePrepareRange_ErrClosingSession(t *testing.T) { + ctx := context.Background() mockRunner := &stellarCoreRunnerMock{} mockRunner.On("close").Return(fmt.Errorf("transient error")) - mockRunner.On("context").Return(context.Background()) + mockRunner.On("context").Return(ctx) captiveBackend := CaptiveStellarCore{ nextLedger: 300, stellarCoreRunner: mockRunner, } - err := captiveBackend.PrepareRange(BoundedRange(100, 200)) + err := captiveBackend.PrepareRange(ctx, BoundedRange(100, 200)) assert.EqualError(t, err, "error starting prepare range: error closing existing session: transient error") - err = captiveBackend.PrepareRange(UnboundedRange(64)) + err = captiveBackend.PrepareRange(ctx, UnboundedRange(64)) assert.EqualError(t, err, "error starting prepare range: error closing existing session: transient error") mockRunner.AssertExpectations(t) } func TestCaptivePrepareRange_ErrGettingRootHAS(t *testing.T) { + ctx := context.Background() mockArchive := &historyarchive.MockArchive{} mockArchive. On("GetRootHAS"). @@ -294,16 +297,17 @@ func TestCaptivePrepareRange_ErrGettingRootHAS(t *testing.T) { archive: mockArchive, } - err := captiveBackend.PrepareRange(BoundedRange(100, 200)) + err := captiveBackend.PrepareRange(ctx, BoundedRange(100, 200)) assert.EqualError(t, err, "error starting prepare range: opening subprocess: error getting latest checkpoint sequence: error getting root HAS: transient error") - err = captiveBackend.PrepareRange(UnboundedRange(100)) + err = captiveBackend.PrepareRange(ctx, UnboundedRange(100)) assert.EqualError(t, err, "error starting prepare range: opening subprocess: error getting latest checkpoint sequence: error getting root HAS: transient error") mockArchive.AssertExpectations(t) } func TestCaptivePrepareRange_FromIsAheadOfRootHAS(t *testing.T) { + ctx := context.Background() mockArchive := &historyarchive.MockArchive{} mockArchive. On("GetRootHAS"). @@ -315,10 +319,10 @@ func TestCaptivePrepareRange_FromIsAheadOfRootHAS(t *testing.T) { archive: mockArchive, } - err := captiveBackend.PrepareRange(BoundedRange(100, 200)) + err := captiveBackend.PrepareRange(ctx, BoundedRange(100, 200)) assert.EqualError(t, err, "error starting prepare range: opening subprocess: sequence: 100 is greater than max available in history archives: 64") - err = captiveBackend.PrepareRange(UnboundedRange(100)) + err = captiveBackend.PrepareRange(ctx, UnboundedRange(100)) assert.EqualError(t, err, "error starting prepare range: opening subprocess: trying to start online mode too far (latest checkpoint=64), only two checkpoints in the future allowed") mockArchive.AssertExpectations(t) @@ -336,10 +340,11 @@ func TestCaptivePrepareRange_ToIsAheadOfRootHAS(t *testing.T) { } } + ctx := context.Background() mockRunner := &stellarCoreRunnerMock{} mockRunner.On("catchup", uint32(100), uint32(192)).Return(nil).Once() mockRunner.On("getMetaPipe").Return((<-chan metaResult)(metaChan)) - mockRunner.On("context").Return(context.Background()) + mockRunner.On("context").Return(ctx) mockArchive := &historyarchive.MockArchive{} mockArchive. @@ -356,7 +361,7 @@ func TestCaptivePrepareRange_ToIsAheadOfRootHAS(t *testing.T) { checkpointManager: historyarchive.NewCheckpointManager(64), } - err := captiveBackend.PrepareRange(BoundedRange(100, 200)) + err := captiveBackend.PrepareRange(ctx, BoundedRange(100, 200)) assert.NoError(t, err) mockArchive.AssertExpectations(t) @@ -375,6 +380,7 @@ func TestCaptivePrepareRange_ErrCatchup(t *testing.T) { CurrentLedger: uint32(192), }, nil) + ctx := context.Background() cancelCalled := false captiveBackend := CaptiveStellarCore{ archive: mockArchive, @@ -386,7 +392,7 @@ func TestCaptivePrepareRange_ErrCatchup(t *testing.T) { }), } - err := captiveBackend.PrepareRange(BoundedRange(100, 200)) + err := captiveBackend.PrepareRange(ctx, BoundedRange(100, 200)) assert.EqualError(t, err, "error starting prepare range: opening subprocess: error running stellar-core: transient error") // make sure we can Close without errors @@ -413,6 +419,7 @@ func TestCaptivePrepareRangeUnboundedRange_ErrRunFrom(t *testing.T) { On("GetLedgerHeader", uint32(127)). Return(xdr.LedgerHeaderHistoryEntry{}, nil) + ctx := context.Background() cancelCalled := false captiveBackend := CaptiveStellarCore{ archive: mockArchive, @@ -425,7 +432,7 @@ func TestCaptivePrepareRangeUnboundedRange_ErrRunFrom(t *testing.T) { }), } - err := captiveBackend.PrepareRange(UnboundedRange(128)) + err := captiveBackend.PrepareRange(ctx, UnboundedRange(128)) assert.EqualError(t, err, "error starting prepare range: opening subprocess: error running stellar-core: transient error") // make sure we can Close without errors @@ -448,10 +455,11 @@ func TestCaptivePrepareRangeUnboundedRange_ReuseSession(t *testing.T) { } } + ctx := context.Background() mockRunner := &stellarCoreRunnerMock{} mockRunner.On("runFrom", uint32(62), "0000000000000000000000000000000000000000000000000000000000000000").Return(nil).Once() mockRunner.On("getMetaPipe").Return((<-chan metaResult)(metaChan)) - mockRunner.On("context").Return(context.Background()) + mockRunner.On("context").Return(ctx) mockArchive := &historyarchive.MockArchive{} mockArchive. @@ -471,11 +479,11 @@ func TestCaptivePrepareRangeUnboundedRange_ReuseSession(t *testing.T) { checkpointManager: historyarchive.NewCheckpointManager(64), } - err := captiveBackend.PrepareRange(UnboundedRange(65)) + err := captiveBackend.PrepareRange(ctx, UnboundedRange(65)) assert.NoError(t, err) captiveBackend.nextLedger = 64 - err = captiveBackend.PrepareRange(UnboundedRange(65)) + err = captiveBackend.PrepareRange(ctx, UnboundedRange(65)) assert.NoError(t, err) mockArchive.AssertExpectations(t) @@ -494,10 +502,11 @@ func TestGetLatestLedgerSequence(t *testing.T) { } } + ctx := context.Background() mockRunner := &stellarCoreRunnerMock{} mockRunner.On("runFrom", uint32(62), "0000000000000000000000000000000000000000000000000000000000000000").Return(nil).Once() mockRunner.On("getMetaPipe").Return((<-chan metaResult)(metaChan)) - mockRunner.On("context").Return(context.Background()) + mockRunner.On("context").Return(ctx) mockArchive := &historyarchive.MockArchive{} mockArchive. @@ -518,10 +527,10 @@ func TestGetLatestLedgerSequence(t *testing.T) { checkpointManager: historyarchive.NewCheckpointManager(64), } - err := captiveBackend.PrepareRange(UnboundedRange(64)) + err := captiveBackend.PrepareRange(ctx, UnboundedRange(64)) assert.NoError(t, err) - latest, err := captiveBackend.GetLatestLedgerSequence() + latest, err := captiveBackend.GetLatestLedgerSequence(ctx) assert.NoError(t, err) assert.Equal(t, uint32(200), latest) @@ -540,7 +549,8 @@ func TestCaptiveGetLedger(t *testing.T) { } } - ctx, cancel := context.WithCancel(context.Background()) + ctx := context.Background() + ctx, cancel := context.WithCancel(ctx) mockRunner := &stellarCoreRunnerMock{} mockRunner.On("catchup", uint32(65), uint32(66)).Return(nil) mockRunner.On("getMetaPipe").Return((<-chan metaResult)(metaChan)) @@ -562,23 +572,22 @@ func TestCaptiveGetLedger(t *testing.T) { } // requires PrepareRange - _, _, err := captiveBackend.GetLedger(64) + _, err := captiveBackend.GetLedger(ctx, 64) tt.EqualError(err, "session is closed, call PrepareRange first") - err = captiveBackend.PrepareRange(BoundedRange(65, 66)) + err = captiveBackend.PrepareRange(ctx, BoundedRange(65, 66)) assert.NoError(t, err) - _, _, err = captiveBackend.GetLedger(64) + _, err = captiveBackend.GetLedger(ctx, 64) tt.Error(err, "requested ledger 64 is behind the captive core stream (expected=66)") // reads value from buffer - found, meta, err := captiveBackend.GetLedger(65) + meta, err := captiveBackend.GetLedger(ctx, 65) tt.NoError(err) - tt.True(found) tt.Equal(xdr.Uint32(65), meta.V0.LedgerHeader.Header.LedgerSeq) // reads value from cachedMeta - _, cachedMeta, err := captiveBackend.GetLedger(65) + cachedMeta, err := captiveBackend.GetLedger(ctx, 65) tt.NoError(err) tt.Equal(meta, cachedMeta) @@ -589,20 +598,87 @@ func TestCaptiveGetLedger(t *testing.T) { cancel() }).Once() - _, _, err = captiveBackend.GetLedger(66) + _, err = captiveBackend.GetLedger(ctx, 66) tt.NoError(err) // closes after last ledger is consumed tt.True(captiveBackend.isClosed()) // we should be able to call last ledger even after get ledger is closed - _, _, err = captiveBackend.GetLedger(66) + _, err = captiveBackend.GetLedger(ctx, 66) tt.NoError(err) mockArchive.AssertExpectations(t) mockRunner.AssertExpectations(t) } +// TestCaptiveGetLedgerCacheLatestLedger test the following case: +// 1. Prepare Unbounded range. +// 2. GetLedger that is still not in the buffer. +// 3. Get latest ledger in the buffer using GetLedger. +// +// Before 3d97762 this test failed because cachedMeta was only updated when +// the ledger with a requested sequence was reached while streaming meta. +// +// TODO: Not sure this test is really valid or worth it anymore, now that GetLedger is always blocking. +func TestCaptiveGetLedgerCacheLatestLedger(t *testing.T) { + tt := assert.New(t) + metaChan := make(chan metaResult, 300) + + for i := 2; i <= 67; i++ { + meta := buildLedgerCloseMeta(testLedgerHeader{sequence: uint32(i)}) + metaChan <- metaResult{ + LedgerCloseMeta: &meta, + } + } + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + mockRunner := &stellarCoreRunnerMock{} + mockRunner.On("runFrom", uint32(62), "0101010100000000000000000000000000000000000000000000000000000000").Return(nil).Once() + mockRunner.On("getMetaPipe").Return((<-chan metaResult)(metaChan)) + mockRunner.On("context").Return(ctx) + + mockArchive := &historyarchive.MockArchive{} + mockArchive. + On("GetRootHAS"). + Return(historyarchive.HistoryArchiveState{ + CurrentLedger: uint32(200), + }, nil) + + mockArchive. + On("GetLedgerHeader", uint32(63)). + Return(xdr.LedgerHeaderHistoryEntry{ + Header: xdr.LedgerHeader{ + PreviousLedgerHash: xdr.Hash{1, 1, 1, 1}, + }, + }, nil).Once() + + captiveBackend := CaptiveStellarCore{ + archive: mockArchive, + stellarCoreRunnerFactory: func(_ stellarCoreRunnerMode) (stellarCoreRunnerInterface, error) { + return mockRunner, nil + }, + checkpointManager: historyarchive.NewCheckpointManager(64), + } + + err := captiveBackend.PrepareRange(ctx, UnboundedRange(66)) + assert.NoError(t, err) + + // found, _, err := captiveBackend.GetLedger(ctx, 68) + // tt.NoError(err) + // tt.False(found) + // tt.Equal(uint32(67), captiveBackend.cachedMeta.LedgerSequence()) + // tt.Equal(uint32(68), captiveBackend.nextLedger) + + meta, err := captiveBackend.GetLedger(ctx, 67) + tt.NoError(err) + tt.Equal(uint32(67), meta.LedgerSequence()) + + mockArchive.AssertExpectations(t) + mockRunner.AssertExpectations(t) +} + func TestCaptiveGetLedger_NextLedgerIsDifferentToLedgerFromBuffer(t *testing.T) { metaChan := make(chan metaResult, 100) @@ -619,23 +695,53 @@ func TestCaptiveGetLedger_NextLedgerIsDifferentToLedgerFromBuffer(t *testing.T) } } + ctx := context.Background() mockRunner := &stellarCoreRunnerMock{} mockRunner.On("catchup", uint32(65), uint32(66)).Return(nil) mockRunner.On("getMetaPipe").Return((<-chan metaResult)(metaChan)) - mockRunner.On("context").Return(context.Background()) + mockRunner.On("context").Return(ctx) mockRunner.On("close").Return(nil) + + mockArchive := &historyarchive.MockArchive{} + mockArchive. + On("GetRootHAS"). + Return(historyarchive.HistoryArchiveState{ + CurrentLedger: uint32(200), + }, nil) + + captiveBackend := CaptiveStellarCore{ + archive: mockArchive, + stellarCoreRunnerFactory: func(_ stellarCoreRunnerMode) (stellarCoreRunnerInterface, error) { + return mockRunner, nil + }, + checkpointManager: historyarchive.NewCheckpointManager(64), + } + + err := captiveBackend.PrepareRange(ctx, BoundedRange(65, 66)) + assert.NoError(t, err) + + _, err = captiveBackend.GetLedger(ctx, 66) + assert.EqualError(t, err, "unexpected ledger sequence (expected=66 actual=68)") + + mockArchive.AssertExpectations(t) + mockRunner.AssertExpectations(t) } func TestCaptiveStellarCore_PrepareRangeAfterClose(t *testing.T) { + ctx := context.Background() executablePath := "/etc/stellar-core" networkPassphrase := network.PublicNetworkPassphrase historyURLs := []string{"http://localhost"} + captiveCoreToml, err := NewCaptiveCoreToml(CaptiveCoreTomlParams{}) + assert.NoError(t, err) + captiveStellarCore, err := NewCaptive( CaptiveCoreConfig{ BinaryPath: executablePath, NetworkPassphrase: networkPassphrase, HistoryArchiveURLs: historyURLs, + Toml: captiveCoreToml, }, ) assert.NoError(t, err) @@ -644,7 +750,7 @@ func TestCaptiveStellarCore_PrepareRangeAfterClose(t *testing.T) { assert.EqualError( t, - captiveStellarCore.PrepareRange(BoundedRange(65, 66)), + captiveStellarCore.PrepareRange(ctx, BoundedRange(65, 66)), "error starting prepare range: opening subprocess: error getting latest checkpoint sequence: "+ "error getting root HAS: Get \"http://localhost/.well-known/stellar-history.json\": context canceled", ) @@ -659,7 +765,7 @@ func TestCaptiveStellarCore_PrepareRangeAfterClose(t *testing.T) { captiveStellarCore.archive = mockArchive assert.EqualError( t, - captiveStellarCore.PrepareRange(BoundedRange(65, 66)), + captiveStellarCore.PrepareRange(ctx, BoundedRange(65, 66)), "error starting prepare range: opening subprocess: error running stellar-core: context canceled", ) mockArchive.AssertExpectations(t) @@ -679,10 +785,11 @@ func TestCaptiveGetLedger_ErrReadingMetaResult(t *testing.T) { err: fmt.Errorf("unmarshalling error"), } + ctx := context.Background() mockRunner := &stellarCoreRunnerMock{} mockRunner.On("catchup", uint32(65), uint32(66)).Return(nil) mockRunner.On("getMetaPipe").Return((<-chan metaResult)(metaChan)) - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(ctx) mockRunner.On("context").Return(ctx) mockRunner.On("getProcessExitError").Return(false, nil) mockRunner.On("close").Return(nil).Run(func(args mock.Arguments) { @@ -705,16 +812,15 @@ func TestCaptiveGetLedger_ErrReadingMetaResult(t *testing.T) { checkpointManager: historyarchive.NewCheckpointManager(64), } - err := captiveBackend.PrepareRange(BoundedRange(65, 66)) + err := captiveBackend.PrepareRange(ctx, BoundedRange(65, 66)) assert.NoError(t, err) - found, meta, err := captiveBackend.GetLedger(65) + meta, err := captiveBackend.GetLedger(ctx, 65) tt.NoError(err) - tt.True(found) tt.Equal(xdr.Uint32(65), meta.V0.LedgerHeader.Header.LedgerSeq) // try reading from an empty buffer - _, _, err = captiveBackend.GetLedger(66) + _, err = captiveBackend.GetLedger(ctx, 66) tt.EqualError(err, "unmarshalling error") // closes if there is an error getting ledger @@ -735,10 +841,11 @@ func TestCaptiveGetLedger_ErrClosingAfterLastLedger(t *testing.T) { } } + ctx := context.Background() mockRunner := &stellarCoreRunnerMock{} mockRunner.On("catchup", uint32(65), uint32(66)).Return(nil) mockRunner.On("getMetaPipe").Return((<-chan metaResult)(metaChan)) - mockRunner.On("context").Return(context.Background()) + mockRunner.On("context").Return(ctx) mockRunner.On("close").Return(fmt.Errorf("transient error")).Once() mockArchive := &historyarchive.MockArchive{} @@ -756,10 +863,10 @@ func TestCaptiveGetLedger_ErrClosingAfterLastLedger(t *testing.T) { checkpointManager: historyarchive.NewCheckpointManager(64), } - err := captiveBackend.PrepareRange(BoundedRange(65, 66)) + err := captiveBackend.PrepareRange(ctx, BoundedRange(65, 66)) assert.NoError(t, err) - _, _, err = captiveBackend.GetLedger(66) + _, err = captiveBackend.GetLedger(ctx, 66) tt.EqualError(err, "error closing session: transient error") mockArchive.AssertExpectations(t) @@ -800,20 +907,20 @@ func TestCaptiveAfterClose(t *testing.T) { } boundedRange := BoundedRange(65, 66) - err := captiveBackend.PrepareRange(boundedRange) + err := captiveBackend.PrepareRange(ctx, boundedRange) assert.NoError(t, err) assert.NoError(t, captiveBackend.Close()) - _, _, err = captiveBackend.GetLedger(boundedRange.to) + _, err = captiveBackend.GetLedger(ctx, boundedRange.to) assert.EqualError(t, err, "session is closed, call PrepareRange first") var prepared bool - prepared, err = captiveBackend.IsPrepared(boundedRange) + prepared, err = captiveBackend.IsPrepared(ctx, boundedRange) assert.False(t, prepared) assert.NoError(t, err) - _, err = captiveBackend.GetLatestLedgerSequence() + _, err = captiveBackend.GetLatestLedgerSequence(ctx) assert.EqualError(t, err, "stellar-core must be opened to return latest available sequence") mockArchive.AssertExpectations(t) @@ -830,10 +937,11 @@ func TestGetLedgerBoundsCheck(t *testing.T) { } } + ctx := context.Background() mockRunner := &stellarCoreRunnerMock{} mockRunner.On("catchup", uint32(128), uint32(130)).Return(nil).Once() mockRunner.On("getMetaPipe").Return((<-chan metaResult)(metaChan)) - mockRunner.On("context").Return(context.Background()) + mockRunner.On("context").Return(ctx) mockArchive := &historyarchive.MockArchive{} mockArchive. @@ -850,21 +958,19 @@ func TestGetLedgerBoundsCheck(t *testing.T) { checkpointManager: historyarchive.NewCheckpointManager(64), } - err := captiveBackend.PrepareRange(BoundedRange(128, 130)) + err := captiveBackend.PrepareRange(ctx, BoundedRange(128, 130)) assert.NoError(t, err) - exists, meta, err := captiveBackend.GetLedger(128) + meta, err := captiveBackend.GetLedger(ctx, 128) assert.NoError(t, err) - assert.True(t, exists) assert.Equal(t, uint32(128), meta.LedgerSequence()) prev := meta - exists, meta, err = captiveBackend.GetLedger(128) + meta, err = captiveBackend.GetLedger(ctx, 128) assert.NoError(t, err) - assert.True(t, exists) assert.Equal(t, prev, meta) - _, _, err = captiveBackend.GetLedger(64) + _, err = captiveBackend.GetLedger(ctx, 64) assert.EqualError(t, err, "requested ledger 64 is behind the captive core stream (expected=129)") mockArchive.AssertExpectations(t) @@ -931,10 +1037,11 @@ func TestCaptiveGetLedgerTerminatedUnexpectedly(t *testing.T) { } close(metaChan) + ctx := testCase.ctx mockRunner := &stellarCoreRunnerMock{} mockRunner.On("catchup", uint32(64), uint32(100)).Return(nil).Once() mockRunner.On("getMetaPipe").Return((<-chan metaResult)(metaChan)) - mockRunner.On("context").Return(context.Background()) + mockRunner.On("context").Return(ctx) mockRunner.On("getProcessExitError").Return(testCase.processExited, testCase.processExitedError) mockRunner.On("close").Return(nil).Once() @@ -953,15 +1060,14 @@ func TestCaptiveGetLedgerTerminatedUnexpectedly(t *testing.T) { checkpointManager: historyarchive.NewCheckpointManager(64), } - err := captiveBackend.PrepareRange(BoundedRange(64, 100)) + err := captiveBackend.PrepareRange(ctx, BoundedRange(64, 100)) assert.NoError(t, err) - exists, meta, err := captiveBackend.GetLedger(64) + meta, err := captiveBackend.GetLedger(ctx, 64) assert.NoError(t, err) - assert.True(t, exists) assert.Equal(t, uint32(64), meta.LedgerSequence()) - _, _, err = captiveBackend.GetLedger(65) + _, err = captiveBackend.GetLedger(ctx, 65) assert.EqualError(t, err, testCase.expectedError) mockArchive.AssertExpectations(t) @@ -971,6 +1077,7 @@ func TestCaptiveGetLedgerTerminatedUnexpectedly(t *testing.T) { } func TestCaptiveUseOfLedgerHashStore(t *testing.T) { + ctx := context.Background() mockArchive := &historyarchive.MockArchive{} mockArchive. On("GetLedgerHeader", uint32(255)). @@ -981,50 +1088,58 @@ func TestCaptiveUseOfLedgerHashStore(t *testing.T) { }, nil) mockLedgerHashStore := &MockLedgerHashStore{} - mockLedgerHashStore.On("GetLedgerHash", uint32(1022)). + mockLedgerHashStore.On("GetLedgerHash", ctx, uint32(1022)). Return("", false, fmt.Errorf("transient error")).Once() - mockLedgerHashStore.On("GetLedgerHash", uint32(254)). + mockLedgerHashStore.On("GetLedgerHash", ctx, uint32(254)). Return("", false, nil).Once() - mockLedgerHashStore.On("GetLedgerHash", uint32(62)). + mockLedgerHashStore.On("GetLedgerHash", ctx, uint32(62)). Return("cde", true, nil).Once() - mockLedgerHashStore.On("GetLedgerHash", uint32(126)). + mockLedgerHashStore.On("GetLedgerHash", ctx, uint32(126)). Return("ghi", true, nil).Once() - mockLedgerHashStore.On("GetLedgerHash", uint32(2)). + mockLedgerHashStore.On("GetLedgerHash", ctx, uint32(2)). Return("mnb", true, nil).Once() + cancelCalled := false captiveBackend := CaptiveStellarCore{ archive: mockArchive, ledgerHashStore: mockLedgerHashStore, checkpointManager: historyarchive.NewCheckpointManager(64), + cancel: context.CancelFunc(func() { + cancelCalled = true + }), } - runFrom, ledgerHash, nextLedger, err := captiveBackend.runFromParams(24) + runFrom, ledgerHash, nextLedger, err := captiveBackend.runFromParams(ctx, 24) assert.NoError(t, err) assert.Equal(t, uint32(2), runFrom) assert.Equal(t, "mnb", ledgerHash) assert.Equal(t, uint32(2), nextLedger) - runFrom, ledgerHash, nextLedger, err = captiveBackend.runFromParams(86) + runFrom, ledgerHash, nextLedger, err = captiveBackend.runFromParams(ctx, 86) assert.NoError(t, err) assert.Equal(t, uint32(62), runFrom) assert.Equal(t, "cde", ledgerHash) assert.Equal(t, uint32(2), nextLedger) - runFrom, ledgerHash, nextLedger, err = captiveBackend.runFromParams(128) + runFrom, ledgerHash, nextLedger, err = captiveBackend.runFromParams(ctx, 128) assert.NoError(t, err) assert.Equal(t, uint32(126), runFrom) assert.Equal(t, "ghi", ledgerHash) assert.Equal(t, uint32(64), nextLedger) - runFrom, ledgerHash, nextLedger, err = captiveBackend.runFromParams(1050) + runFrom, ledgerHash, nextLedger, err = captiveBackend.runFromParams(ctx, 1050) assert.EqualError(t, err, "error trying to read ledger hash 1022: transient error") - runFrom, ledgerHash, nextLedger, err = captiveBackend.runFromParams(300) + runFrom, ledgerHash, nextLedger, err = captiveBackend.runFromParams(ctx, 300) assert.NoError(t, err) assert.Equal(t, uint32(254), runFrom, "runFrom") assert.Equal(t, "0101010100000000000000000000000000000000000000000000000000000000", ledgerHash) assert.Equal(t, uint32(192), nextLedger, "nextLedger") + mockLedgerHashStore.On("Close").Return(nil).Once() + err = captiveBackend.Close() + assert.NoError(t, err) + assert.True(t, cancelCalled) mockLedgerHashStore.AssertExpectations(t) mockArchive.AssertExpectations(t) } @@ -1073,7 +1188,8 @@ func TestCaptiveRunFromParams(t *testing.T) { checkpointManager: historyarchive.NewCheckpointManager(64), } - runFrom, ledgerHash, nextLedger, err := captiveBackend.runFromParams(tc.from) + ctx := context.Background() + runFrom, ledgerHash, nextLedger, err := captiveBackend.runFromParams(ctx, tc.from) tt.NoError(err) tt.Equal(tc.runFrom, runFrom, "runFrom") tt.Equal("0101010100000000000000000000000000000000000000000000000000000000", ledgerHash) @@ -1159,10 +1275,11 @@ func TestCaptivePreviousLedgerCheck(t *testing.T) { } + ctx := context.Background() mockRunner := &stellarCoreRunnerMock{} mockRunner.On("runFrom", uint32(254), "0101010100000000000000000000000000000000000000000000000000000000").Return(nil).Once() mockRunner.On("getMetaPipe").Return((<-chan metaResult)(metaChan)) - mockRunner.On("context").Return(context.Background()) + mockRunner.On("context").Return(ctx) mockRunner.On("close").Return(nil).Once() mockArchive := &historyarchive.MockArchive{} @@ -1180,9 +1297,9 @@ func TestCaptivePreviousLedgerCheck(t *testing.T) { }, nil).Once() mockLedgerHashStore := &MockLedgerHashStore{} - mockLedgerHashStore.On("GetLedgerHash", uint32(254)). + mockLedgerHashStore.On("GetLedgerHash", ctx, uint32(254)). Return("", false, nil).Once() - mockLedgerHashStore.On("GetLedgerHash", uint32(191)). + mockLedgerHashStore.On("GetLedgerHash", ctx, uint32(191)). Return("0200000000000000000000000000000000000000000000000000000000000000", true, nil).Once() captiveBackend := CaptiveStellarCore{ @@ -1194,17 +1311,16 @@ func TestCaptivePreviousLedgerCheck(t *testing.T) { checkpointManager: historyarchive.NewCheckpointManager(64), } - err := captiveBackend.PrepareRange(UnboundedRange(300)) + err := captiveBackend.PrepareRange(ctx, UnboundedRange(300)) assert.NoError(t, err) - exists, meta, err := captiveBackend.GetLedger(300) + meta, err := captiveBackend.GetLedger(ctx, 300) assert.NoError(t, err) - assert.True(t, exists) assert.NotNil(t, captiveBackend.previousLedgerHash) assert.Equal(t, uint32(301), captiveBackend.nextLedger) assert.Equal(t, meta.LedgerHash().HexString(), *captiveBackend.previousLedgerHash) - _, _, err = captiveBackend.GetLedger(301) + _, err = captiveBackend.GetLedger(ctx, 301) assert.EqualError(t, err, "unexpected previous ledger hash for ledger 301 (expected=6f00000000000000000000000000000000000000000000000000000000000000 actual=0000000000000000000000000000000000000000000000000000000000000000)") mockRunner.AssertExpectations(t) diff --git a/ingest/ledgerbackend/database_backend.go b/ingest/ledgerbackend/database_backend.go index 25bbfc8a6b..189cfcaf75 100644 --- a/ingest/ledgerbackend/database_backend.go +++ b/ingest/ledgerbackend/database_backend.go @@ -1,6 +1,7 @@ package ledgerbackend import ( + "context" "database/sql" "sort" "time" @@ -36,46 +37,41 @@ func NewDatabaseBackend(dataSourceName, networkPassphrase string) (*DatabaseBack return nil, err } - return &DatabaseBackend{session: session, networkPassphrase: networkPassphrase}, nil + return NewDatabaseBackendFromSession(session, networkPassphrase) } -func NewDatabaseBackendFromSession(session *db.Session, networkPassphrase string) (*DatabaseBackend, error) { - return &DatabaseBackend{session: session, networkPassphrase: networkPassphrase}, nil +func NewDatabaseBackendFromSession(session db.SessionInterface, networkPassphrase string) (*DatabaseBackend, error) { + return &DatabaseBackend{ + session: session, + networkPassphrase: networkPassphrase, + }, nil } -func (dbb *DatabaseBackend) PrepareRange(ledgerRange Range) error { - fromExists, _, err := dbb.GetLedger(ledgerRange.from) +func (dbb *DatabaseBackend) PrepareRange(ctx context.Context, ledgerRange Range) error { + _, err := dbb.GetLedger(ctx, ledgerRange.from) if err != nil { return errors.Wrap(err, "error getting ledger") } - if !fromExists { - return errors.New("`from` ledger does not exist") - } - if ledgerRange.bounded { - toExists, _, err := dbb.GetLedger(ledgerRange.to) + _, err := dbb.GetLedger(ctx, ledgerRange.to) if err != nil { return errors.Wrap(err, "error getting ledger") } - - if !toExists { - return errors.New("`to` ledger does not exist") - } } return nil } // IsPrepared returns true if a given ledgerRange is prepared. -func (*DatabaseBackend) IsPrepared(ledgerRange Range) (bool, error) { +func (*DatabaseBackend) IsPrepared(ctx context.Context, ledgerRange Range) (bool, error) { return true, nil } // GetLatestLedgerSequence returns the most recent ledger sequence number present in the database. -func (dbb *DatabaseBackend) GetLatestLedgerSequence() (uint32, error) { +func (dbb *DatabaseBackend) GetLatestLedgerSequence(ctx context.Context) (uint32, error) { var ledger []ledgerHeader - err := dbb.session.SelectRaw(&ledger, latestLedgerSeqQuery) + err := dbb.session.SelectRaw(ctx, &ledger, latestLedgerSeqQuery) if err != nil { return 0, errors.Wrap(err, "couldn't select ledger sequence") } @@ -118,13 +114,13 @@ func sortByHash(transactions []xdr.TransactionEnvelope, passphrase string) error return nil } -// GetLedgerBlocking works as GetLedger but will block until the ledger is +// GetLedger will block until the ledger is // available in the backend (even for UnaboundedRange). // Please note that requesting a ledger sequence far after current ledger will // block the execution for a long time. -func (dbb *DatabaseBackend) GetLedgerBlocking(sequence uint32) (xdr.LedgerCloseMeta, error) { +func (dbb *DatabaseBackend) GetLedger(ctx context.Context, sequence uint32) (xdr.LedgerCloseMeta, error) { for { - exists, meta, err := dbb.GetLedger(sequence) + exists, meta, err := dbb.getLedgerQuery(ctx, sequence) if err != nil { return xdr.LedgerCloseMeta{}, err } @@ -137,9 +133,9 @@ func (dbb *DatabaseBackend) GetLedgerBlocking(sequence uint32) (xdr.LedgerCloseM } } -// GetLedger returns the LedgerCloseMeta for the given ledger sequence number. +// getLedgerQuery returns the LedgerCloseMeta for the given ledger sequence number. // The first returned value is false when the ledger does not exist in the database. -func (dbb *DatabaseBackend) GetLedger(sequence uint32) (bool, xdr.LedgerCloseMeta, error) { +func (dbb *DatabaseBackend) getLedgerQuery(ctx context.Context, sequence uint32) (bool, xdr.LedgerCloseMeta, error) { lcm := xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{}, } @@ -147,7 +143,7 @@ func (dbb *DatabaseBackend) GetLedger(sequence uint32) (bool, xdr.LedgerCloseMet // Query - ledgerheader var lRow ledgerHeaderHistory - err := dbb.session.GetRaw(&lRow, ledgerHeaderQuery, sequence) + err := dbb.session.GetRaw(ctx, &lRow, ledgerHeaderQuery, sequence) // Return errors... if err != nil { switch err { @@ -168,7 +164,7 @@ func (dbb *DatabaseBackend) GetLedger(sequence uint32) (bool, xdr.LedgerCloseMet // Query - txhistory var txhRows []txHistory - err = dbb.session.SelectRaw(&txhRows, txHistoryQuery+orderBy, sequence) + err = dbb.session.SelectRaw(ctx, &txhRows, txHistoryQuery+orderBy, sequence) // Return errors... if err != nil { return false, lcm, errors.Wrap(err, "Error getting txHistory") @@ -194,7 +190,7 @@ func (dbb *DatabaseBackend) GetLedger(sequence uint32) (bool, xdr.LedgerCloseMet // Query - txfeehistory var txfhRows []txFeeHistory - err = dbb.session.SelectRaw(&txfhRows, txFeeHistoryQuery+orderBy, sequence) + err = dbb.session.SelectRaw(ctx, &txfhRows, txFeeHistoryQuery+orderBy, sequence) // Return errors... if err != nil { return false, lcm, errors.Wrap(err, "Error getting txFeeHistory") @@ -211,7 +207,7 @@ func (dbb *DatabaseBackend) GetLedger(sequence uint32) (bool, xdr.LedgerCloseMet // Query - upgradehistory var upgradeHistoryRows []upgradeHistory - err = dbb.session.SelectRaw(&upgradeHistoryRows, upgradeHistoryQuery, sequence) + err = dbb.session.SelectRaw(ctx, &upgradeHistoryRows, upgradeHistoryQuery, sequence) // Return errors... if err != nil { return false, lcm, errors.Wrap(err, "Error getting upgradeHistoryRows") diff --git a/ingest/ledgerbackend/ledger_backend.go b/ingest/ledgerbackend/ledger_backend.go index 7a7c1eda81..572de2e183 100644 --- a/ingest/ledgerbackend/ledger_backend.go +++ b/ingest/ledgerbackend/ledger_backend.go @@ -1,6 +1,8 @@ package ledgerbackend import ( + "context" + "github.com/stellar/go/xdr" ) @@ -8,25 +10,23 @@ import ( type LedgerBackend interface { // GetLatestLedgerSequence returns the sequence of the latest ledger available // in the backend. - GetLatestLedgerSequence() (sequence uint32, err error) - // The first returned value is false when the ledger does not exist in a backend. - GetLedger(sequence uint32) (bool, xdr.LedgerCloseMeta, error) - // Works like GetLedger but will block until the ledger is available. - GetLedgerBlocking(sequence uint32) (xdr.LedgerCloseMeta, error) + GetLatestLedgerSequence(ctx context.Context) (sequence uint32, err error) + // GetLedger will block until the ledger is available. + GetLedger(ctx context.Context, sequence uint32) (xdr.LedgerCloseMeta, error) // PrepareRange prepares the given range (including from and to) to be loaded. // Some backends (like captive stellar-core) need to initalize data to be // able to stream ledgers. Blocks until the first ledger is available. - PrepareRange(ledgerRange Range) error + PrepareRange(ctx context.Context, ledgerRange Range) error // IsPrepared returns true if a given ledgerRange is prepared. - IsPrepared(ledgerRange Range) (bool, error) + IsPrepared(ctx context.Context, ledgerRange Range) (bool, error) Close() error } // session is the interface needed to access a persistent database session. // TODO can't use this until we add Close() to the existing db.Session object type session interface { - GetRaw(dest interface{}, query string, args ...interface{}) error - SelectRaw(dest interface{}, query string, args ...interface{}) error + GetRaw(ctx context.Context, dest interface{}, query string, args ...interface{}) error + SelectRaw(ctx context.Context, dest interface{}, query string, args ...interface{}) error Close() error } diff --git a/ingest/ledgerbackend/ledger_hash_store.go b/ingest/ledgerbackend/ledger_hash_store.go index 00fa4e224b..be9ebf1bfc 100644 --- a/ingest/ledgerbackend/ledger_hash_store.go +++ b/ingest/ledgerbackend/ledger_hash_store.go @@ -1,6 +1,8 @@ package ledgerbackend import ( + "context" + sq "github.com/Masterminds/squirrel" "github.com/stretchr/testify/mock" @@ -12,39 +14,49 @@ import ( // source like history archives. type TrustedLedgerHashStore interface { // GetLedgerHash returns the ledger hash for the given sequence number - GetLedgerHash(seq uint32) (string, bool, error) + GetLedgerHash(ctx context.Context, seq uint32) (string, bool, error) + Close() error } // HorizonDBLedgerHashStore is a TrustedLedgerHashStore which uses horizon's db to look up ledger hashes type HorizonDBLedgerHashStore struct { - session *db.Session + session db.SessionInterface } // NewHorizonDBLedgerHashStore constructs a new TrustedLedgerHashStore backed by the horizon db -func NewHorizonDBLedgerHashStore(session *db.Session) TrustedLedgerHashStore { +func NewHorizonDBLedgerHashStore(session db.SessionInterface) TrustedLedgerHashStore { return HorizonDBLedgerHashStore{session: session} } // GetLedgerHash returns the ledger hash for the given sequence number -func (h HorizonDBLedgerHashStore) GetLedgerHash(seq uint32) (string, bool, error) { +func (h HorizonDBLedgerHashStore) GetLedgerHash(ctx context.Context, seq uint32) (string, bool, error) { sql := sq.Select("hl.ledger_hash").From("history_ledgers hl"). Limit(1).Where("sequence = ?", seq) var hash string - err := h.session.Get(&hash, sql) + err := h.session.Get(ctx, &hash, sql) if h.session.NoRows(err) { return hash, false, nil } return hash, true, err } +func (h HorizonDBLedgerHashStore) Close() error { + return h.session.Close() +} + // MockLedgerHashStore is a mock implementation of TrustedLedgerHashStore type MockLedgerHashStore struct { mock.Mock } // GetLedgerHash returns the ledger hash for the given sequence number -func (m *MockLedgerHashStore) GetLedgerHash(seq uint32) (string, bool, error) { - args := m.Called(seq) +func (m *MockLedgerHashStore) GetLedgerHash(ctx context.Context, seq uint32) (string, bool, error) { + args := m.Called(ctx, seq) return args.Get(0).(string), args.Get(1).(bool), args.Error(2) } + +func (m *MockLedgerHashStore) Close() error { + args := m.Called() + return args.Error(0) +} diff --git a/ingest/ledgerbackend/mock_database_backend.go b/ingest/ledgerbackend/mock_database_backend.go index b60c93bd67..c5f85ecef7 100644 --- a/ingest/ledgerbackend/mock_database_backend.go +++ b/ingest/ledgerbackend/mock_database_backend.go @@ -1,8 +1,11 @@ package ledgerbackend import ( - "github.com/stellar/go/xdr" + "context" + "github.com/stretchr/testify/mock" + + "github.com/stellar/go/xdr" ) var _ LedgerBackend = (*MockDatabaseBackend)(nil) @@ -11,28 +14,23 @@ type MockDatabaseBackend struct { mock.Mock } -func (m *MockDatabaseBackend) GetLatestLedgerSequence() (uint32, error) { - args := m.Called() +func (m *MockDatabaseBackend) GetLatestLedgerSequence(ctx context.Context) (uint32, error) { + args := m.Called(ctx) return args.Get(0).(uint32), args.Error(1) } -func (m *MockDatabaseBackend) PrepareRange(ledgerRange Range) error { - args := m.Called(ledgerRange) +func (m *MockDatabaseBackend) PrepareRange(ctx context.Context, ledgerRange Range) error { + args := m.Called(ctx, ledgerRange) return args.Error(0) } -func (m *MockDatabaseBackend) IsPrepared(ledgerRange Range) (bool, error) { - args := m.Called(ledgerRange) +func (m *MockDatabaseBackend) IsPrepared(ctx context.Context, ledgerRange Range) (bool, error) { + args := m.Called(ctx, ledgerRange) return args.Bool(0), args.Error(1) } -func (m *MockDatabaseBackend) GetLedger(sequence uint32) (bool, xdr.LedgerCloseMeta, error) { - args := m.Called(sequence) - return args.Bool(0), args.Get(1).(xdr.LedgerCloseMeta), args.Error(2) -} - -func (m *MockDatabaseBackend) GetLedgerBlocking(sequence uint32) (xdr.LedgerCloseMeta, error) { - args := m.Called(sequence) +func (m *MockDatabaseBackend) GetLedger(ctx context.Context, sequence uint32) (xdr.LedgerCloseMeta, error) { + args := m.Called(ctx, sequence) return args.Get(0).(xdr.LedgerCloseMeta), args.Error(1) } diff --git a/ingest/ledgerbackend/remote_captive_core.go b/ingest/ledgerbackend/remote_captive_core.go index 49553ae92c..18946a8d3c 100644 --- a/ingest/ledgerbackend/remote_captive_core.go +++ b/ingest/ledgerbackend/remote_captive_core.go @@ -31,8 +31,7 @@ type LatestLedgerSequenceResponse struct { // LedgerResponse is the response for the GetLedger command. type LedgerResponse struct { - Present bool `json:"present"` - Ledger Base64Ledger `json:"ledger"` + Ledger Base64Ledger `json:"ledger"` } // Base64Ledger extends xdr.LedgerCloseMeta with JSON encoding and decoding @@ -66,7 +65,6 @@ type RemoteCaptiveStellarCore struct { url *url.URL client *http.Client lock *sync.Mutex - cancel context.CancelFunc prepareRangePollInterval time.Duration } @@ -93,7 +91,7 @@ func NewRemoteCaptive(captiveCoreURL string, options ...RemoteCaptiveOption) (Re client := RemoteCaptiveStellarCore{ prepareRangePollInterval: time.Second, url: u, - client: &http.Client{Timeout: 5 * time.Second}, + client: &http.Client{Timeout: 10 * time.Second}, lock: &sync.Mutex{}, } for _, option := range options { @@ -127,11 +125,17 @@ func decodeResponse(response *http.Response, payload interface{}) error { // Note that for UnboundedRange the returned sequence number is not necessarily // the latest sequence closed by the network. It's always the last value available // in the backend. -func (c RemoteCaptiveStellarCore) GetLatestLedgerSequence() (sequence uint32, err error) { +func (c RemoteCaptiveStellarCore) GetLatestLedgerSequence(ctx context.Context) (sequence uint32, err error) { + // TODO: Have a context on this request so we can cancel all outstanding + // requests, not just PrepareRange. u := *c.url u.Path = path.Join(u.Path, "latest-sequence") + request, err := http.NewRequestWithContext(ctx, "GET", u.String(), nil) + if err != nil { + return 0, errors.Wrap(err, "cannot construct http request") + } - response, err := c.client.Get(u.String()) + response, err := c.client.Do(request) if err != nil { return 0, errors.Wrap(err, "failed to execute request") } @@ -146,27 +150,9 @@ func (c RemoteCaptiveStellarCore) GetLatestLedgerSequence() (sequence uint32, er // Close cancels any pending PrepareRange requests. func (c RemoteCaptiveStellarCore) Close() error { - c.lock.Lock() - defer c.lock.Unlock() - if c.cancel != nil { - c.cancel() - } return nil } -func (c RemoteCaptiveStellarCore) createContext() context.Context { - c.lock.Lock() - defer c.lock.Unlock() - - if c.cancel != nil { - c.cancel() - } - - ctx, cancel := context.WithCancel(context.Background()) - c.cancel = cancel - return ctx -} - // PrepareRange prepares the given range (including from and to) to be loaded. // Captive stellar-core backend needs to initalize Stellar-Core state to be // able to stream ledgers. @@ -176,36 +162,20 @@ func (c RemoteCaptiveStellarCore) createContext() context.Context { // it normally (including connecting to the Stellar network). // Please note that using a BoundedRange, currently, requires a full-trust on // history archive. This issue is being fixed in Stellar-Core. -func (c RemoteCaptiveStellarCore) PrepareRange(ledgerRange Range) error { - ctx := c.createContext() - u := *c.url - u.Path = path.Join(u.Path, "prepare-range") - rangeBytes, err := json.Marshal(ledgerRange) - if err != nil { - return errors.Wrap(err, "cannot serialize range") - } +func (c RemoteCaptiveStellarCore) PrepareRange(ctx context.Context, ledgerRange Range) error { + // TODO: removing createContext call here means we could technically have + // multiple prepareRange requests happening at the same time. Do we still + // need to enforce that? timer := time.NewTimer(c.prepareRangePollInterval) defer timer.Stop() for { - req, err := http.NewRequestWithContext(ctx, http.MethodPost, u.String(), bytes.NewReader(rangeBytes)) - if err != nil { - return errors.Wrap(err, "cannot construct http request") - } - - var response *http.Response - response, err = c.client.Do(req) + ready, err := c.IsPrepared(ctx, ledgerRange) if err != nil { - return errors.Wrap(err, "failed to execute request") - } - - var parsed PrepareRangeResponse - if err = decodeResponse(response, &parsed); err != nil { return err } - - if parsed.Ready { + if ready { return nil } @@ -219,7 +189,9 @@ func (c RemoteCaptiveStellarCore) PrepareRange(ledgerRange Range) error { } // IsPrepared returns true if a given ledgerRange is prepared. -func (c RemoteCaptiveStellarCore) IsPrepared(ledgerRange Range) (bool, error) { +func (c RemoteCaptiveStellarCore) IsPrepared(ctx context.Context, ledgerRange Range) (bool, error) { + // TODO: Have some way to cancel all outstanding requests, not just + // PrepareRange. u := *c.url u.Path = path.Join(u.Path, "prepare-range") rangeBytes, err := json.Marshal(ledgerRange) @@ -227,9 +199,14 @@ func (c RemoteCaptiveStellarCore) IsPrepared(ledgerRange Range) (bool, error) { return false, errors.Wrap(err, "cannot serialize range") } body := bytes.NewReader(rangeBytes) + request, err := http.NewRequestWithContext(ctx, "POST", u.String(), body) + if err != nil { + return false, errors.Wrap(err, "cannot construct http request") + } + request.Header.Add("Content-Type", "application/json; charset=utf-8") var response *http.Response - response, err = c.client.Post(u.String(), "application/json; charset=utf-8", body) + response, err = c.client.Do(request) if err != nil { return false, errors.Wrap(err, "failed to execute request") } @@ -242,51 +219,43 @@ func (c RemoteCaptiveStellarCore) IsPrepared(ledgerRange Range) (bool, error) { return parsed.Ready, nil } -// GetLedger returns true when ledger is found and it's LedgerCloseMeta. +// GetLedger long-polls a remote stellar core backend, until the requested +// ledger is ready. + // Call PrepareRange first to instruct the backend which ledgers to fetch. // -// CaptiveStellarCore requires PrepareRange call first to initialize Stellar-Core. // Requesting a ledger on non-prepared backend will return an error. // // Because data is streamed from Stellar-Core ledger after ledger user should // request sequences in a non-decreasing order. If the requested sequence number // is less than the last requested sequence number, an error will be returned. -// -// This function behaves differently for bounded and unbounded ranges: -// * BoundedRange makes GetLedger blocking if the requested ledger is not yet -// available in the ledger. After getting the last ledger in a range this -// method will also Close() the backend. -// * UnboundedRange makes GetLedger non-blocking. The method will return with -// the first argument equal false. -// This is done to provide maximum performance when streaming old ledgers. -func (c RemoteCaptiveStellarCore) GetLedger(sequence uint32) (bool, xdr.LedgerCloseMeta, error) { - u := *c.url - u.Path = path.Join(u.Path, "ledger", strconv.FormatUint(uint64(sequence), 10)) - - response, err := c.client.Get(u.String()) - if err != nil { - return false, xdr.LedgerCloseMeta{}, errors.Wrap(err, "failed to execute request") - } +func (c RemoteCaptiveStellarCore) GetLedger(ctx context.Context, sequence uint32) (xdr.LedgerCloseMeta, error) { + for { + // TODO: Have some way to cancel all outstanding requests, not just + // PrepareRange. + u := *c.url + u.Path = path.Join(u.Path, "ledger", strconv.FormatUint(uint64(sequence), 10)) + request, err := http.NewRequestWithContext(ctx, "GET", u.String(), nil) + if err != nil { + return xdr.LedgerCloseMeta{}, errors.Wrap(err, "cannot construct http request") + } - var parsed LedgerResponse - if err = decodeResponse(response, &parsed); err != nil { - return false, xdr.LedgerCloseMeta{}, err - } + response, err := c.client.Do(request) + if err != nil { + return xdr.LedgerCloseMeta{}, errors.Wrap(err, "failed to execute request") + } - return parsed.Present, xdr.LedgerCloseMeta(parsed.Ledger), nil -} + if response.StatusCode == http.StatusRequestTimeout { + response.Body.Close() + // This request timed out. Retry. + continue + } -func (c RemoteCaptiveStellarCore) GetLedgerBlocking(sequence uint32) (xdr.LedgerCloseMeta, error) { - for { - exists, meta, err := c.GetLedger(sequence) - if err != nil { + var parsed LedgerResponse + if err = decodeResponse(response, &parsed); err != nil { return xdr.LedgerCloseMeta{}, err } - if exists { - return meta, nil - } else { - time.Sleep(time.Second) - } + return xdr.LedgerCloseMeta(parsed.Ledger), nil } } diff --git a/ingest/ledgerbackend/remote_captive_core_test.go b/ingest/ledgerbackend/remote_captive_core_test.go new file mode 100644 index 0000000000..3a4b4d28a7 --- /dev/null +++ b/ingest/ledgerbackend/remote_captive_core_test.go @@ -0,0 +1,74 @@ +package ledgerbackend + +import ( + "context" + "encoding/json" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/stellar/go/xdr" +) + +func TestGetLedgerSucceeds(t *testing.T) { + expectedLedger := xdr.LedgerCloseMeta{ + V0: &xdr.LedgerCloseMetaV0{ + LedgerHeader: xdr.LedgerHeaderHistoryEntry{ + Header: xdr.LedgerHeader{ + LedgerSeq: 64, + }, + }, + }, + } + called := 0 + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + called++ + json.NewEncoder(w).Encode(LedgerResponse{ + Ledger: Base64Ledger(expectedLedger), + }) + })) + defer server.Close() + + client, err := NewRemoteCaptive(server.URL) + require.NoError(t, err) + + ledger, err := client.GetLedger(context.Background(), 64) + require.NoError(t, err) + require.Equal(t, 1, called) + require.Equal(t, expectedLedger, ledger) +} + +func TestGetLedgerTakesAWhile(t *testing.T) { + expectedLedger := xdr.LedgerCloseMeta{ + V0: &xdr.LedgerCloseMetaV0{ + LedgerHeader: xdr.LedgerHeaderHistoryEntry{ + Header: xdr.LedgerHeader{ + LedgerSeq: 64, + }, + }, + }, + } + called := 0 + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + called++ + if called == 1 { + // TODO: Check this is what the server really does. + w.WriteHeader(http.StatusRequestTimeout) + return + } + json.NewEncoder(w).Encode(LedgerResponse{ + Ledger: Base64Ledger(expectedLedger), + }) + })) + defer server.Close() + + client, err := NewRemoteCaptive(server.URL) + require.NoError(t, err) + + ledger, err := client.GetLedger(context.Background(), 64) + require.NoError(t, err) + require.Equal(t, 2, called) + require.Equal(t, expectedLedger, ledger) +} diff --git a/ingest/ledgerbackend/stellar_core_runner.go b/ingest/ledgerbackend/stellar_core_runner.go index bbfd78d41a..1105ee743c 100644 --- a/ingest/ledgerbackend/stellar_core_runner.go +++ b/ingest/ledgerbackend/stellar_core_runner.go @@ -49,14 +49,7 @@ type pipe struct { } type stellarCoreRunner struct { - logPath string - executablePath string - configAppendPath string - networkPassphrase string - historyURLs []string - httpPort uint - peerPort uint - mode stellarCoreRunnerMode + executablePath string started bool wg sync.WaitGroup @@ -112,17 +105,10 @@ func newStellarCoreRunner(config CaptiveCoreConfig, mode stellarCoreRunnerMode) ctx, cancel := context.WithCancel(config.Context) runner := &stellarCoreRunner{ - logPath: config.LogPath, - executablePath: config.BinaryPath, - configAppendPath: config.ConfigAppendPath, - networkPassphrase: config.NetworkPassphrase, - historyURLs: config.HistoryArchiveURLs, - httpPort: config.HTTPPort, - peerPort: config.PeerPort, - mode: mode, - ctx: ctx, - cancel: cancel, - storagePath: fullStoragePath, + executablePath: config.BinaryPath, + ctx: ctx, + cancel: cancel, + storagePath: fullStoragePath, nonce: fmt.Sprintf( "captive-stellar-core-%x", rand.New(rand.NewSource(time.Now().UnixNano())).Uint64(), @@ -130,66 +116,42 @@ func newStellarCoreRunner(config CaptiveCoreConfig, mode stellarCoreRunnerMode) log: config.Log, } - if err := runner.writeConf(); err != nil { + if conf, err := writeConf(config.Toml, mode, runner.getConfFileName()); err != nil { return nil, errors.Wrap(err, "error writing configuration") + } else { + runner.log.Debugf("captive core config file contents:\n%s", conf) } return runner, nil } -func (r *stellarCoreRunner) generateConfig() (string, error) { - if r.mode == stellarCoreRunnerModeOnline && r.configAppendPath == "" { - return "", errors.New("stellar-core append config file path cannot be empty in online mode") - } - - lines := []string{ - "# Generated file -- do not edit", - "NODE_IS_VALIDATOR=false", - "DISABLE_XDR_FSYNC=true", - fmt.Sprintf(`NETWORK_PASSPHRASE="%s"`, r.networkPassphrase), - // Note: We don't pass BUCKET_DIR_PATH here because it's created - // *relative* to the storage path (i.e. where the config lives). - fmt.Sprintf(`HTTP_PORT=%d`, r.httpPort), - fmt.Sprintf(`LOG_FILE_PATH="%s"`, r.logPath), - } - - if r.peerPort > 0 { - lines = append(lines, fmt.Sprintf(`PEER_PORT=%d`, r.peerPort)) - } - - if r.mode == stellarCoreRunnerModeOffline { - // In offline mode, there is no need to connect to peers - lines = append(lines, "RUN_STANDALONE=true") - // We don't need consensus when catching up - lines = append(lines, "UNSAFE_QUORUM=true") +func writeConf(captiveCoreToml *CaptiveCoreToml, mode stellarCoreRunnerMode, location string) (string, error) { + text, err := generateConfig(captiveCoreToml, mode) + if err != nil { + return "", err } - if r.mode == stellarCoreRunnerModeOffline && r.configAppendPath == "" { - // Add a fictional quorum -- necessary to convince core to start up; - // but not used at all for our purposes. Pubkey here is just random. - lines = append(lines, - "[QUORUM_SET]", - "THRESHOLD_PERCENT=100", - `VALIDATORS=["GCZBOIAY4HLKAJVNJORXZOZRAY2BJDBZHKPBHZCRAIUR5IHC2UHBGCQR"]`) - } + return string(text), ioutil.WriteFile(location, text, 0644) +} - result := strings.ReplaceAll(strings.Join(lines, "\n"), `\`, `\\`) + "\n\n" - if r.configAppendPath != "" { - appendConfigContents, err := ioutil.ReadFile(r.configAppendPath) +func generateConfig(captiveCoreToml *CaptiveCoreToml, mode stellarCoreRunnerMode) ([]byte, error) { + if mode == stellarCoreRunnerModeOffline { + var err error + captiveCoreToml, err = captiveCoreToml.CatchupToml() if err != nil { - return "", errors.Wrap(err, "reading quorum config file") + return nil, errors.Wrap(err, "could not generate catch up config") } - result += string(appendConfigContents) + "\n\n" } - lines = []string{} - for i, val := range r.historyURLs { - lines = append(lines, fmt.Sprintf("[HISTORY.h%d]", i)) - lines = append(lines, fmt.Sprintf(`get="curl -sf %s/{0} -o {1}"`, val)) + if !captiveCoreToml.QuorumSetIsConfigured() { + return nil, errors.New("stellar-core append config file does not define any quorum set") } - result += strings.Join(lines, "\n") - return result, nil + text, err := captiveCoreToml.Marshal() + if err != nil { + return nil, errors.Wrap(err, "could not marshal captive core config") + } + return text, nil } func (r *stellarCoreRunner) getConfFileName() string { @@ -255,17 +217,6 @@ func (r *stellarCoreRunner) getLogLineWriter() io.Writer { return wr } -// Makes the temp directory and writes the config file to it; called by the -// platform-specific captiveStellarCore.Start() methods. -func (r *stellarCoreRunner) writeConf() error { - conf, err := r.generateConfig() - if err != nil { - return err - } - r.log.Debugf("captive core config file contents:\n%s", conf) - return ioutil.WriteFile(r.getConfFileName(), []byte(conf), 0644) -} - func (r *stellarCoreRunner) createCmd(params ...string) *exec.Cmd { allParams := append([]string{"--conf", r.getConfFileName()}, params...) cmd := exec.CommandContext(r.ctx, r.executablePath, allParams...) diff --git a/ingest/ledgerbackend/stellar_core_runner_test.go b/ingest/ledgerbackend/stellar_core_runner_test.go index 24d99e17b8..326c029ff1 100644 --- a/ingest/ledgerbackend/stellar_core_runner_test.go +++ b/ingest/ledgerbackend/stellar_core_runner_test.go @@ -2,9 +2,7 @@ package ledgerbackend import ( "context" - "io/ioutil" "os" - "path/filepath" "testing" "github.com/stretchr/testify/assert" @@ -12,63 +10,15 @@ import ( "github.com/stellar/go/support/log" ) -func TestGenerateConfig(t *testing.T) { - for _, testCase := range []struct { - name string - appendPath string - mode stellarCoreRunnerMode - expectedPath string - }{ - { - name: "offline config with no appendix", - mode: stellarCoreRunnerModeOffline, - appendPath: "", - expectedPath: filepath.Join("testdata", "expected-offline-core.cfg"), - }, - { - name: "online config with appendix", - mode: stellarCoreRunnerModeOnline, - appendPath: filepath.Join("testdata", "sample-appendix.cfg"), - expectedPath: filepath.Join("testdata", "expected-online-core.cfg"), - }, - { - name: "offline config with appendix", - mode: stellarCoreRunnerModeOffline, - appendPath: filepath.Join("testdata", "sample-appendix.cfg"), - expectedPath: filepath.Join("testdata", "expected-offline-with-appendix-core.cfg"), - }, - } { - t.Run(testCase.name, func(t *testing.T) { - stellarCoreRunner, err := newStellarCoreRunner(CaptiveCoreConfig{ - HTTPPort: 6789, - HistoryArchiveURLs: []string{"http://localhost:1170"}, - Log: log.New(), - ConfigAppendPath: testCase.appendPath, - StoragePath: "./test-temp-dir", - PeerPort: 12345, - Context: context.Background(), - NetworkPassphrase: "Public Global Stellar Network ; September 2015", - }, testCase.mode) - assert.NoError(t, err) - - config, err := stellarCoreRunner.generateConfig() - assert.NoError(t, err) - - expectedByte, err := ioutil.ReadFile(testCase.expectedPath) - assert.NoError(t, err) - - assert.Equal(t, config, string(expectedByte)) - - assert.NoError(t, stellarCoreRunner.close()) - }) - } -} - func TestCloseBeforeStart(t *testing.T) { + captiveCoreToml, err := NewCaptiveCoreToml(CaptiveCoreTomlParams{}) + assert.NoError(t, err) + runner, err := newStellarCoreRunner(CaptiveCoreConfig{ HistoryArchiveURLs: []string{"http://localhost"}, Log: log.New(), Context: context.Background(), + Toml: captiveCoreToml, }, stellarCoreRunnerModeOffline) assert.NoError(t, err) diff --git a/ingest/ledgerbackend/testdata/appendix-with-fields.cfg b/ingest/ledgerbackend/testdata/appendix-with-fields.cfg new file mode 100644 index 0000000000..c77833b1b2 --- /dev/null +++ b/ingest/ledgerbackend/testdata/appendix-with-fields.cfg @@ -0,0 +1,68 @@ +NETWORK_PASSPHRASE="Public Global Stellar Network ; September 2015" +FAILURE_SAFETY=2 +UNSAFE_QUORUM=false +PUBLIC_HTTP_PORT=true +RUN_STANDALONE=false +DISABLE_XDR_FSYNC=false +BUCKET_DIR_PATH="test-buckets" +HTTP_PORT = 6789 +PEER_PORT = 12345 +LOG_FILE_PATH = "" + +NODE_NAMES=[ + "GA22N4YGO7IJDRF2SISA5KHULGYYKDXBQGYIWUVNMSNHF5G2DNBKP3M5 eliza", + "GCDENOCHA6TQL6DFC4FS54HIH7RP7XR7VZCQZFANMGLT2WXJ7D7KGV2P hal9000", + "GDV46EIEF57TDL4W27UFDAUVPDDCKJNVBYB3WIV2WYUYUG753FCFU6EJ victor" +] + +[HISTORY] +get="curl http://mirror.history.stellar.org/{0} -o {1}" + +[HISTORY.stellar] +get="curl http://history.stellar.org/{0} -o {1}" +put="aws s3 cp {0} s3://history.stellar.org/{1}" + +[HISTORY.stellar---backup] +get="curl http://history.stellar.org/{0} -o {1}" +put="aws s3 cp [QUORUM_SET.1]" + + +#[QUORUM_SET--1] +#THRESHOLD_PERCENT=66 +#VALIDATORS=[ +# "GDQWITFJLZ5HT6JCOXYEVV5VFD6FTLAKJAUDKHAV3HKYGVJWA2DPYSQV A_from_above", +# "GANLKVE4WOTE75MJS6FQ73CL65TSPYYMFZKC4VDEZ45LGQRCATGAIGIA B_from_above", +# "GDV46EIEF57TDL4W27UFDAUVPDDCKJNVBYB3WIV2WYUYUG753FCFU6EJ C_from_above" +#] + +[QUORUM_SET] +THRESHOLD_PERCENT=66 +VALIDATORS=[ + "GDQWITFJLZ5HT6JCOXYEVV5VFD6FTLAKJAUDKHAV3HKYGVJWA2DPYSQV A_from_above", + "GANLKVE4WOTE75MJS6FQ73CL65TSPYYMFZKC4VDEZ45LGQRCATGAIGIA B_from_above", + "GDV46EIEF57TDL4W27UFDAUVPDDCKJNVBYB3WIV2WYUYUG753FCFU6EJ C_from_above" +] + +[QUORUM_SET.1] +THRESHOLD_PERCENT=67 +VALIDATORS=[ + "$self", + "GDXJAZZJ3H5MJGR6PDQX3JHRREAVYNCVM7FJYGLZJKEHQV2ZXEUO5SX2 E_from_above", + "GB6GK3WWTZYY2JXWM6C5LRKLQ2X7INQ7IYTSECCG3SMZFYOZNEZR4SO5 F_from_above" +] + +[QUORUM_SET.2] +THRESHOLD_PERCENT=100 +VALIDATORS=[ + "GCTAIXWDDBM3HBDHGSAOLY223QZHPS2EDROF7YUBB3GNYXLOCPV5PXUK G_from_above", + "GCJ6UBAOXNQFN3HGLCVQBWGEZO6IABSMNE2OCQC4FJAZXJA5AIE7WSPW H_from_above" +] + +[QUORUM_SET.2.1] +THRESHOLD_PERCENT=50 +VALIDATORS=[ + "GC4X65TQJVI3OWAS4DTA2EN2VNZ5ZRJD646H5WKEJHO5ZHURDRAX2OTH I_from_above", + "GAXSWUO4RBELRQT5WMDLIKTRIKC722GGXX2GIGEYQZDQDLOTINQ4DX6F J_from_above", + "GAWOEMG7DQDWHCFDTPJEBYWRKUUZTX2M2HLMNABM42G7C7IAPU54GL6X K_from_above", + "GDZAJNUUDJFKTZX3YWZSOAS4S4NGCJ5RQAY7JPYBG5CUFL3JZ5C3ECOH L_from_above" +] \ No newline at end of file diff --git a/ingest/ledgerbackend/testdata/duplicate-home-domain.cfg b/ingest/ledgerbackend/testdata/duplicate-home-domain.cfg new file mode 100644 index 0000000000..d3fd5a77dc --- /dev/null +++ b/ingest/ledgerbackend/testdata/duplicate-home-domain.cfg @@ -0,0 +1,13 @@ +[[HOME_DOMAINS]] +HOME_DOMAIN="testnet.stellar.org" +QUALITY="MEDIUM" + +[[HOME_DOMAINS]] +HOME_DOMAIN="testnet.stellar.org" +QUALITY="MEDIUM" + +[[VALIDATORS]] +NAME="sdf_testnet_1" +HOME_DOMAIN="testnet.stellar.org" +PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" +ADDRESS="localhost:123" diff --git a/ingest/ledgerbackend/testdata/duplicate-validator.cfg b/ingest/ledgerbackend/testdata/duplicate-validator.cfg new file mode 100644 index 0000000000..10b916cc2c --- /dev/null +++ b/ingest/ledgerbackend/testdata/duplicate-validator.cfg @@ -0,0 +1,16 @@ +[[HOME_DOMAINS]] +HOME_DOMAIN="testnet.stellar.org" +QUALITY="MEDIUM" + +[[VALIDATORS]] +NAME="sdf_testnet_1" +HOME_DOMAIN="testnet.stellar.org" +PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" +ADDRESS="localhost:123" + +[[VALIDATORS]] +NAME="sdf_testnet_1" +HOME_DOMAIN="pubnet.stellar.org" +PUBLIC_KEY="GDV46EIEF57TDL4W27UFDAUVPDDCKJNVBYB3WIV2WYUYUG753FCFU6EJ" +ADDRESS="localhost:9834" +QUALITY="HIGH" \ No newline at end of file diff --git a/ingest/ledgerbackend/testdata/empty-home-domain-quality.cfg b/ingest/ledgerbackend/testdata/empty-home-domain-quality.cfg new file mode 100644 index 0000000000..f4e259fdcf --- /dev/null +++ b/ingest/ledgerbackend/testdata/empty-home-domain-quality.cfg @@ -0,0 +1,8 @@ +[[HOME_DOMAINS]] +HOME_DOMAIN="testnet.stellar.org" + +[[VALIDATORS]] +NAME="sdf_testnet_1" +HOME_DOMAIN="testnet.stellar.org" +PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" +ADDRESS="localhost:123" diff --git a/ingest/ledgerbackend/testdata/empty-home-domain.cfg b/ingest/ledgerbackend/testdata/empty-home-domain.cfg new file mode 100644 index 0000000000..c4ae874593 --- /dev/null +++ b/ingest/ledgerbackend/testdata/empty-home-domain.cfg @@ -0,0 +1,12 @@ +[[HOME_DOMAINS]] +QUALITY="MEDIUM" + +[[HOME_DOMAINS]] +HOME_DOMAIN="testnet.stellar.org" +QUALITY="MEDIUM" + +[[VALIDATORS]] +NAME="sdf_testnet_1" +HOME_DOMAIN="testnet.stellar.org" +PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" +ADDRESS="localhost:123" diff --git a/ingest/ledgerbackend/testdata/expected-offline-core.cfg b/ingest/ledgerbackend/testdata/expected-offline-core.cfg index 40daca9422..6fc2616d8f 100644 --- a/ingest/ledgerbackend/testdata/expected-offline-core.cfg +++ b/ingest/ledgerbackend/testdata/expected-offline-core.cfg @@ -1,15 +1,16 @@ -# Generated file -- do not edit -NODE_IS_VALIDATOR=false -DISABLE_XDR_FSYNC=true -NETWORK_PASSPHRASE="Public Global Stellar Network ; September 2015" -HTTP_PORT=6789 -LOG_FILE_PATH="" -PEER_PORT=12345 -RUN_STANDALONE=true -UNSAFE_QUORUM=true -[QUORUM_SET] -THRESHOLD_PERCENT=100 -VALIDATORS=["GCZBOIAY4HLKAJVNJORXZOZRAY2BJDBZHKPBHZCRAIUR5IHC2UHBGCQR"] +# Generated file, do not edit +DISABLE_XDR_FSYNC = true +FAILURE_SAFETY = 0 +HTTP_PORT = 0 +LOG_FILE_PATH = "" +NETWORK_PASSPHRASE = "Public Global Stellar Network ; September 2015" +PEER_PORT = 12345 +RUN_STANDALONE = true +UNSAFE_QUORUM = true [HISTORY.h0] -get="curl -sf http://localhost:1170/{0} -o {1}" \ No newline at end of file + get = "curl -sf http://localhost:1170/{0} -o {1}" + +[QUORUM_SET] + THRESHOLD_PERCENT = 100 + VALIDATORS = ["GCZBOIAY4HLKAJVNJORXZOZRAY2BJDBZHKPBHZCRAIUR5IHC2UHBGCQR"] diff --git a/ingest/ledgerbackend/testdata/expected-offline-with-appendix-core.cfg b/ingest/ledgerbackend/testdata/expected-offline-with-appendix-core.cfg index 4e6011cdf0..d7edb3421b 100644 --- a/ingest/ledgerbackend/testdata/expected-offline-with-appendix-core.cfg +++ b/ingest/ledgerbackend/testdata/expected-offline-with-appendix-core.cfg @@ -1,23 +1,22 @@ -# Generated file -- do not edit -NODE_IS_VALIDATOR=false -DISABLE_XDR_FSYNC=true -NETWORK_PASSPHRASE="Public Global Stellar Network ; September 2015" -HTTP_PORT=6789 -LOG_FILE_PATH="" -PEER_PORT=12345 -RUN_STANDALONE=true -UNSAFE_QUORUM=true +# Generated file, do not edit +DISABLE_XDR_FSYNC = true +FAILURE_SAFETY = 0 +HTTP_PORT = 0 +LOG_FILE_PATH = "" +NETWORK_PASSPHRASE = "Public Global Stellar Network ; September 2015" +PEER_PORT = 12345 +RUN_STANDALONE = true +UNSAFE_QUORUM = true [[HOME_DOMAINS]] -HOME_DOMAIN="testnet.stellar.org" -QUALITY="MEDIUM" + HOME_DOMAIN = "testnet.stellar.org" + QUALITY = "MEDIUM" [[VALIDATORS]] -NAME="sdf_testnet_1" -HOME_DOMAIN="testnet.stellar.org" -PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" -ADDRESS="core-testnet1.stellar.org" - + ADDRESS = "localhost:123" + HOME_DOMAIN = "testnet.stellar.org" + NAME = "sdf_testnet_1" + PUBLIC_KEY = "GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" [HISTORY.h0] -get="curl -sf http://localhost:1170/{0} -o {1}" \ No newline at end of file + get = "curl -sf http://localhost:1170/{0} -o {1}" diff --git a/ingest/ledgerbackend/testdata/expected-offline-with-extra-fields.cfg b/ingest/ledgerbackend/testdata/expected-offline-with-extra-fields.cfg new file mode 100644 index 0000000000..5d2d74fb1a --- /dev/null +++ b/ingest/ledgerbackend/testdata/expected-offline-with-extra-fields.cfg @@ -0,0 +1,37 @@ +# Generated file, do not edit +BUCKET_DIR_PATH = "test-buckets" +FAILURE_SAFETY = 0 +HTTP_PORT = 0 +LOG_FILE_PATH = "" +NETWORK_PASSPHRASE = "Public Global Stellar Network ; September 2015" +NODE_NAMES = ["GA22N4YGO7IJDRF2SISA5KHULGYYKDXBQGYIWUVNMSNHF5G2DNBKP3M5 eliza", "GCDENOCHA6TQL6DFC4FS54HIH7RP7XR7VZCQZFANMGLT2WXJ7D7KGV2P hal9000", "GDV46EIEF57TDL4W27UFDAUVPDDCKJNVBYB3WIV2WYUYUG753FCFU6EJ victor"] +PEER_PORT = 12345 +RUN_STANDALONE = true +UNSAFE_QUORUM = true + +[HISTORY] + get = "curl http://mirror.history.stellar.org/{0} -o {1}" + +[HISTORY.stellar] + get = "curl http://history.stellar.org/{0} -o {1}" + put = "aws s3 cp {0} s3://history.stellar.org/{1}" + +[HISTORY.stellar---backup] + get = "curl http://history.stellar.org/{0} -o {1}" + put = "aws s3 cp [QUORUM_SET.1]" + +[QUORUM_SET] + THRESHOLD_PERCENT = 66 + VALIDATORS = ["GDQWITFJLZ5HT6JCOXYEVV5VFD6FTLAKJAUDKHAV3HKYGVJWA2DPYSQV A_from_above", "GANLKVE4WOTE75MJS6FQ73CL65TSPYYMFZKC4VDEZ45LGQRCATGAIGIA B_from_above", "GDV46EIEF57TDL4W27UFDAUVPDDCKJNVBYB3WIV2WYUYUG753FCFU6EJ C_from_above"] + +[QUORUM_SET.1] + THRESHOLD_PERCENT = 67 + VALIDATORS = ["$self", "GDXJAZZJ3H5MJGR6PDQX3JHRREAVYNCVM7FJYGLZJKEHQV2ZXEUO5SX2 E_from_above", "GB6GK3WWTZYY2JXWM6C5LRKLQ2X7INQ7IYTSECCG3SMZFYOZNEZR4SO5 F_from_above"] + +[QUORUM_SET.2] + THRESHOLD_PERCENT = 100 + VALIDATORS = ["GCTAIXWDDBM3HBDHGSAOLY223QZHPS2EDROF7YUBB3GNYXLOCPV5PXUK G_from_above", "GCJ6UBAOXNQFN3HGLCVQBWGEZO6IABSMNE2OCQC4FJAZXJA5AIE7WSPW H_from_above"] + +[QUORUM_SET.2.1] + THRESHOLD_PERCENT = 50 + VALIDATORS = ["GC4X65TQJVI3OWAS4DTA2EN2VNZ5ZRJD646H5WKEJHO5ZHURDRAX2OTH I_from_above", "GAXSWUO4RBELRQT5WMDLIKTRIKC722GGXX2GIGEYQZDQDLOTINQ4DX6F J_from_above", "GAWOEMG7DQDWHCFDTPJEBYWRKUUZTX2M2HLMNABM42G7C7IAPU54GL6X K_from_above", "GDZAJNUUDJFKTZX3YWZSOAS4S4NGCJ5RQAY7JPYBG5CUFL3JZ5C3ECOH L_from_above"] diff --git a/ingest/ledgerbackend/testdata/expected-offline-with-no-peer-port.cfg b/ingest/ledgerbackend/testdata/expected-offline-with-no-peer-port.cfg new file mode 100644 index 0000000000..7b358cc079 --- /dev/null +++ b/ingest/ledgerbackend/testdata/expected-offline-with-no-peer-port.cfg @@ -0,0 +1,15 @@ +# Generated file, do not edit +DISABLE_XDR_FSYNC = true +FAILURE_SAFETY = 0 +HTTP_PORT = 0 +LOG_FILE_PATH = "/var/stellar-core/test.log" +NETWORK_PASSPHRASE = "Public Global Stellar Network ; September 2015" +RUN_STANDALONE = true +UNSAFE_QUORUM = true + +[HISTORY.h0] + get = "curl -sf http://localhost:1170/{0} -o {1}" + +[QUORUM_SET] + THRESHOLD_PERCENT = 100 + VALIDATORS = ["GCZBOIAY4HLKAJVNJORXZOZRAY2BJDBZHKPBHZCRAIUR5IHC2UHBGCQR"] diff --git a/ingest/ledgerbackend/testdata/expected-online-core.cfg b/ingest/ledgerbackend/testdata/expected-online-core.cfg index 464554156e..e5944587ca 100644 --- a/ingest/ledgerbackend/testdata/expected-online-core.cfg +++ b/ingest/ledgerbackend/testdata/expected-online-core.cfg @@ -1,21 +1,20 @@ -# Generated file -- do not edit -NODE_IS_VALIDATOR=false -DISABLE_XDR_FSYNC=true -NETWORK_PASSPHRASE="Public Global Stellar Network ; September 2015" -HTTP_PORT=6789 -LOG_FILE_PATH="" -PEER_PORT=12345 +# Generated file, do not edit +DISABLE_XDR_FSYNC = true +FAILURE_SAFETY = -1 +HTTP_PORT = 6789 +LOG_FILE_PATH = "" +NETWORK_PASSPHRASE = "Public Global Stellar Network ; September 2015" +PEER_PORT = 12345 [[HOME_DOMAINS]] -HOME_DOMAIN="testnet.stellar.org" -QUALITY="MEDIUM" + HOME_DOMAIN = "testnet.stellar.org" + QUALITY = "MEDIUM" [[VALIDATORS]] -NAME="sdf_testnet_1" -HOME_DOMAIN="testnet.stellar.org" -PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" -ADDRESS="core-testnet1.stellar.org" - + ADDRESS = "localhost:123" + HOME_DOMAIN = "testnet.stellar.org" + NAME = "sdf_testnet_1" + PUBLIC_KEY = "GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" [HISTORY.h0] -get="curl -sf http://localhost:1170/{0} -o {1}" \ No newline at end of file + get = "curl -sf http://localhost:1170/{0} -o {1}" diff --git a/ingest/ledgerbackend/testdata/expected-online-with-no-http-port.cfg b/ingest/ledgerbackend/testdata/expected-online-with-no-http-port.cfg new file mode 100644 index 0000000000..249101f33c --- /dev/null +++ b/ingest/ledgerbackend/testdata/expected-online-with-no-http-port.cfg @@ -0,0 +1,20 @@ +# Generated file, do not edit +DISABLE_XDR_FSYNC = true +FAILURE_SAFETY = -1 +HTTP_PORT = 11626 +LOG_FILE_PATH = "" +NETWORK_PASSPHRASE = "Public Global Stellar Network ; September 2015" +PEER_PORT = 12345 + +[[HOME_DOMAINS]] + HOME_DOMAIN = "testnet.stellar.org" + QUALITY = "MEDIUM" + +[[VALIDATORS]] + ADDRESS = "localhost:123" + HOME_DOMAIN = "testnet.stellar.org" + NAME = "sdf_testnet_1" + PUBLIC_KEY = "GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" + +[HISTORY.h0] + get = "curl -sf http://localhost:1170/{0} -o {1}" diff --git a/ingest/ledgerbackend/testdata/expected-online-with-no-peer-port.cfg b/ingest/ledgerbackend/testdata/expected-online-with-no-peer-port.cfg new file mode 100644 index 0000000000..356fc6c736 --- /dev/null +++ b/ingest/ledgerbackend/testdata/expected-online-with-no-peer-port.cfg @@ -0,0 +1,19 @@ +# Generated file, do not edit +DISABLE_XDR_FSYNC = true +FAILURE_SAFETY = -1 +HTTP_PORT = 6789 +LOG_FILE_PATH = "/var/stellar-core/test.log" +NETWORK_PASSPHRASE = "Public Global Stellar Network ; September 2015" + +[[HOME_DOMAINS]] + HOME_DOMAIN = "testnet.stellar.org" + QUALITY = "MEDIUM" + +[[VALIDATORS]] + ADDRESS = "localhost:123" + HOME_DOMAIN = "testnet.stellar.org" + NAME = "sdf_testnet_1" + PUBLIC_KEY = "GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" + +[HISTORY.h0] + get = "curl -sf http://localhost:1170/{0} -o {1}" diff --git a/ingest/ledgerbackend/testdata/invalid-captive-core-field.cfg b/ingest/ledgerbackend/testdata/invalid-captive-core-field.cfg new file mode 100644 index 0000000000..11cb9d83cc --- /dev/null +++ b/ingest/ledgerbackend/testdata/invalid-captive-core-field.cfg @@ -0,0 +1,12 @@ +# CATCHUP_RECENT is not supported by captive core +CATCHUP_RECENT=100 + +[[HOME_DOMAINS]] +HOME_DOMAIN="testnet.stellar.org" +QUALITY="MEDIUM" + +[[VALIDATORS]] +NAME="sdf_testnet_1" +HOME_DOMAIN="testnet.stellar.org" +PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" +ADDRESS="localhost:123" diff --git a/ingest/ledgerbackend/testdata/invalid-home-domain-quality.cfg b/ingest/ledgerbackend/testdata/invalid-home-domain-quality.cfg new file mode 100644 index 0000000000..715e0286bc --- /dev/null +++ b/ingest/ledgerbackend/testdata/invalid-home-domain-quality.cfg @@ -0,0 +1,9 @@ +[[HOME_DOMAINS]] +HOME_DOMAIN="testnet.stellar.org" +QUALITY="DECENT" + +[[VALIDATORS]] +NAME="sdf_testnet_1" +HOME_DOMAIN="testnet.stellar.org" +PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" +ADDRESS="localhost:123" diff --git a/ingest/ledgerbackend/testdata/sample-appendix.cfg b/ingest/ledgerbackend/testdata/sample-appendix.cfg index bb547755a6..08791e06a2 100644 --- a/ingest/ledgerbackend/testdata/sample-appendix.cfg +++ b/ingest/ledgerbackend/testdata/sample-appendix.cfg @@ -6,4 +6,4 @@ QUALITY="MEDIUM" NAME="sdf_testnet_1" HOME_DOMAIN="testnet.stellar.org" PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" -ADDRESS="core-testnet1.stellar.org" +ADDRESS="localhost:123" diff --git a/ingest/ledgerbackend/testdata/validator-has-invalid-public-key.cfg b/ingest/ledgerbackend/testdata/validator-has-invalid-public-key.cfg new file mode 100644 index 0000000000..46fb13e6f9 --- /dev/null +++ b/ingest/ledgerbackend/testdata/validator-has-invalid-public-key.cfg @@ -0,0 +1,6 @@ +[[VALIDATORS]] +NAME="sdf_testnet_2" +HOME_DOMAIN="testnet2.stellar.org" +PUBLIC_KEY="invalid-key" +ADDRESS="localhost:9834" +QUALITY="HIGH" \ No newline at end of file diff --git a/ingest/ledgerbackend/testdata/validator-has-invalid-quality.cfg b/ingest/ledgerbackend/testdata/validator-has-invalid-quality.cfg new file mode 100644 index 0000000000..863eba5d23 --- /dev/null +++ b/ingest/ledgerbackend/testdata/validator-has-invalid-quality.cfg @@ -0,0 +1,6 @@ +[[VALIDATORS]] +NAME="sdf_testnet_2" +HOME_DOMAIN="testnet2.stellar.org" +PUBLIC_KEY="GDV46EIEF57TDL4W27UFDAUVPDDCKJNVBYB3WIV2WYUYUG753FCFU6EJ" +ADDRESS="localhost:9834" +QUALITY="DECENT" \ No newline at end of file diff --git a/ingest/ledgerbackend/testdata/validator-missing-home-domain.cfg b/ingest/ledgerbackend/testdata/validator-missing-home-domain.cfg new file mode 100644 index 0000000000..95d7d95de4 --- /dev/null +++ b/ingest/ledgerbackend/testdata/validator-missing-home-domain.cfg @@ -0,0 +1,9 @@ +[[HOME_DOMAINS]] +HOME_DOMAIN="testnet.stellar.org" +QUALITY="MEDIUM" + +[[VALIDATORS]] +NAME="sdf_testnet_1" +PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" +ADDRESS="localhost:123" +QUALITY="MEDIUM" \ No newline at end of file diff --git a/ingest/ledgerbackend/testdata/validator-missing-name.cfg b/ingest/ledgerbackend/testdata/validator-missing-name.cfg new file mode 100644 index 0000000000..d3ace191cb --- /dev/null +++ b/ingest/ledgerbackend/testdata/validator-missing-name.cfg @@ -0,0 +1,5 @@ +[[VALIDATORS]] +HOME_DOMAIN="testnet.stellar.org" +PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" +ADDRESS="localhost:123" +QUALITY="MEDIUM" \ No newline at end of file diff --git a/ingest/ledgerbackend/testdata/validator-missing-public-key.cfg b/ingest/ledgerbackend/testdata/validator-missing-public-key.cfg new file mode 100644 index 0000000000..61d11b0628 --- /dev/null +++ b/ingest/ledgerbackend/testdata/validator-missing-public-key.cfg @@ -0,0 +1,8 @@ +[[HOME_DOMAINS]] +HOME_DOMAIN="testnet.stellar.org" +QUALITY="MEDIUM" + +[[VALIDATORS]] +NAME="sdf_testnet_1" +HOME_DOMAIN="testnet.stellar.org" +ADDRESS="localhost:123" \ No newline at end of file diff --git a/ingest/ledgerbackend/testdata/validator-missing-quality.cfg b/ingest/ledgerbackend/testdata/validator-missing-quality.cfg new file mode 100644 index 0000000000..eab0af956a --- /dev/null +++ b/ingest/ledgerbackend/testdata/validator-missing-quality.cfg @@ -0,0 +1,15 @@ +[[HOME_DOMAINS]] +HOME_DOMAIN="testnet.stellar.org" +QUALITY="MEDIUM" + +[[VALIDATORS]] +NAME="sdf_testnet_1" +HOME_DOMAIN="testnet.stellar.org" +PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" +ADDRESS="localhost:123" + +[[VALIDATORS]] +NAME="sdf_testnet_2" +HOME_DOMAIN="testnet2.stellar.org" +PUBLIC_KEY="GDV46EIEF57TDL4W27UFDAUVPDDCKJNVBYB3WIV2WYUYUG753FCFU6EJ" +ADDRESS="localhost:9834" diff --git a/ingest/ledgerbackend/toml.go b/ingest/ledgerbackend/toml.go new file mode 100644 index 0000000000..5d642e9466 --- /dev/null +++ b/ingest/ledgerbackend/toml.go @@ -0,0 +1,530 @@ +package ledgerbackend + +import ( + "bytes" + "fmt" + "io/ioutil" + "regexp" + "strings" + + "github.com/stellar/go/support/errors" + "github.com/stellar/go/support/log" + "github.com/stellar/go/xdr" + + "github.com/pelletier/go-toml" +) + +const ( + defaultHTTPPort = 11626 + defaultFailureSafety = -1 + + // if LOG_FILE_PATH is omitted stellar core actually defaults to "stellar-core.log" + // however, we are overriding this default for captive core + defaultLogFilePath = "" // by default we disable logging to a file + + // if DISABLE_XDR_FSYNC is omitted stellar core actually defaults to false + // however, we are overriding this default for captive core + defaultDisableXDRFsync = true +) + +var validQuality = map[string]bool{ + "CRITICAL": true, + "HIGH": true, + "MEDIUM": true, + "LOW": true, +} + +// Validator represents a [[VALIDATORS]] entry in the captive core toml file. +type Validator struct { + Name string `toml:"NAME"` + Quality string `toml:"QUALITY,omitempty"` + HomeDomain string `toml:"HOME_DOMAIN"` + PublicKey string `toml:"PUBLIC_KEY"` + Address string `toml:"ADDRESS,omitempty"` + History string `toml:"HISTORY,omitempty"` +} + +// HomeDomain represents a [[HOME_DOMAINS]] entry in the captive core toml file. +type HomeDomain struct { + HomeDomain string `toml:"HOME_DOMAIN"` + Quality string `toml:"QUALITY"` +} + +// History represents a [HISTORY] table in the captive core toml file. +type History struct { + Get string `toml:"get"` + // should we allow put and mkdir for captive core? + Put string `toml:"put,omitempty"` + Mkdir string `toml:"mkdir,omitempty"` +} + +// QuorumSet represents a [QUORUM_SET] table in the captive core toml file. +type QuorumSet struct { + ThresholdPercent int `toml:"THRESHOLD_PERCENT"` + Validators []string `toml:"VALIDATORS"` +} + +type captiveCoreTomlValues struct { + // we cannot omitempty because the empty string is a valid configuration for LOG_FILE_PATH + // and the default is stellar-core.log + LogFilePath string `toml:"LOG_FILE_PATH"` + BucketDirPath string `toml:"BUCKET_DIR_PATH,omitempty"` + // we cannot omitempty because 0 is a valid configuration for HTTP_PORT + // and the default is 11626 + HTTPPort uint `toml:"HTTP_PORT"` + PublicHTTPPort bool `toml:"PUBLIC_HTTP_PORT,omitempty"` + NodeNames []string `toml:"NODE_NAMES,omitempty"` + NetworkPassphrase string `toml:"NETWORK_PASSPHRASE,omitempty"` + PeerPort uint `toml:"PEER_PORT,omitempty"` + // we cannot omitempty because 0 is a valid configuration for FAILURE_SAFETY + // and the default is -1 + FailureSafety int `toml:"FAILURE_SAFETY"` + UnsafeQuorum bool `toml:"UNSAFE_QUORUM,omitempty"` + RunStandalone bool `toml:"RUN_STANDALONE,omitempty"` + ArtificiallyAccelerateTimeForTesting bool `toml:"ARTIFICIALLY_ACCELERATE_TIME_FOR_TESTING,omitempty"` + DisableXDRFsync bool `toml:"DISABLE_XDR_FSYNC,omitempty"` + HomeDomains []HomeDomain `toml:"HOME_DOMAINS,omitempty"` + Validators []Validator `toml:"VALIDATORS,omitempty"` + HistoryEntries map[string]History `toml:"-"` + QuorumSetEntries map[string]QuorumSet `toml:"-"` +} + +// QuorumSetIsConfigured returns true if there is a quorum set defined in the configuration. +func (c *captiveCoreTomlValues) QuorumSetIsConfigured() bool { + return len(c.QuorumSetEntries) > 0 || len(c.Validators) > 0 +} + +// HistoryIsConfigured returns true if the history archive locations are configured. +func (c *captiveCoreTomlValues) HistoryIsConfigured() bool { + if len(c.HistoryEntries) > 0 { + return true + } + for _, v := range c.Validators { + if v.History != "" { + return true + } + } + return false +} + +type placeholders struct { + labels map[string]string + count int +} + +func (p *placeholders) newPlaceholder(key string) string { + if p.labels == nil { + p.labels = map[string]string{} + } + placeHolder := fmt.Sprintf("__placeholder_label_%d__", p.count) + p.count++ + p.labels[placeHolder] = key + return placeHolder +} + +func (p *placeholders) get(placeholder string) (string, bool) { + if p.labels == nil { + return "", false + } + val, ok := p.labels[placeholder] + return val, ok +} + +// CaptiveCoreToml represents a parsed captive core configuration. +type CaptiveCoreToml struct { + captiveCoreTomlValues + tree *toml.Tree + tablePlaceholders *placeholders +} + +// flattenTables will transform a given toml text by flattening all nested tables +// whose root can be found in `rootNames`. +// +// In the TOML spec dotted keys represents nesting. So we flatten the table key by replacing each table +// path with a placeholder. For example: +// +// text := `[QUORUM_SET.a.b.c] +// THRESHOLD_PERCENT=67 +// VALIDATORS=["a","b"]` +// flattenTables(text, []string{"QUORUM_SET"}) -> +// +// `[__placeholder_label_0__] +// THRESHOLD_PERCENT=67 +// VALIDATORS=["a","b"]` +func flattenTables(text string, rootNames []string) (string, *placeholders) { + orExpression := strings.Join(rootNames, "|") + re := regexp.MustCompile(`\[(` + orExpression + `)(\..+)?\]`) + + tablePlaceHolders := &placeholders{} + + flattened := re.ReplaceAllStringFunc(text, func(match string) string { + insideBrackets := match[1 : len(match)-1] + return "[" + tablePlaceHolders.newPlaceholder(insideBrackets) + "]" + }) + return flattened, tablePlaceHolders +} + +// unflattenTables is the inverse of flattenTables, it restores the +// text back to its original form by replacing all placeholders with their +// original values. +func unflattenTables(text string, tablePlaceHolders *placeholders) string { + re := regexp.MustCompile(`\[.*\]`) + + return re.ReplaceAllStringFunc(text, func(match string) string { + insideBrackets := match[1 : len(match)-1] + original, ok := tablePlaceHolders.get(insideBrackets) + if !ok { + return match + } + return "[" + original + "]" + }) +} + +// Marshal serializes the CaptiveCoreToml into a toml document. +func (c *CaptiveCoreToml) Marshal() ([]byte, error) { + var sb strings.Builder + sb.WriteString("# Generated file, do not edit\n") + encoder := toml.NewEncoder(&sb) + if err := encoder.Encode(c.captiveCoreTomlValues); err != nil { + return nil, errors.Wrap(err, "could not encode toml file") + } + + if len(c.HistoryEntries) > 0 { + if err := encoder.Encode(c.HistoryEntries); err != nil { + return nil, errors.Wrap(err, "could not encode history entries") + } + } + + if len(c.QuorumSetEntries) > 0 { + if err := encoder.Encode(c.QuorumSetEntries); err != nil { + return nil, errors.Wrap(err, "could not encode quorum set") + } + } + + return []byte(unflattenTables(sb.String(), c.tablePlaceholders)), nil +} + +func unmarshalTreeNode(t *toml.Tree, key string, dest interface{}) error { + tree, ok := t.Get(key).(*toml.Tree) + if !ok { + return fmt.Errorf("unexpected key %v", key) + } + return tree.Unmarshal(dest) +} + +func (c *CaptiveCoreToml) unmarshal(data []byte, strict bool) error { + quorumSetEntries := map[string]QuorumSet{} + historyEntries := map[string]History{} + // The toml library has trouble with nested tables so we need to flatten all nested + // QUORUM_SET and HISTORY tables as a workaround. + // In Marshal() we apply the inverse process to unflatten the nested tables. + flattened, tablePlaceholders := flattenTables(string(data), []string{"QUORUM_SET", "HISTORY"}) + + tree, err := toml.Load(flattened) + if err != nil { + return err + } + + for _, key := range tree.Keys() { + originalKey, ok := tablePlaceholders.get(key) + if !ok { + continue + } + + switch { + case strings.HasPrefix(originalKey, "QUORUM_SET"): + var qs QuorumSet + if err = unmarshalTreeNode(tree, key, &qs); err != nil { + return err + } + quorumSetEntries[key] = qs + case strings.HasPrefix(originalKey, "HISTORY"): + var h History + if err = unmarshalTreeNode(tree, key, &h); err != nil { + return err + } + historyEntries[key] = h + } + if err = tree.Delete(key); err != nil { + return err + } + } + + var body captiveCoreTomlValues + if withoutPlaceHolders, err := tree.Marshal(); err != nil { + return err + } else if err = toml.NewDecoder(bytes.NewReader(withoutPlaceHolders)).Strict(strict).Decode(&body); err != nil { + if message := err.Error(); strings.HasPrefix(message, "undecoded keys") { + return fmt.Errorf(strings.Replace( + message, + "undecoded keys", + "these fields are not supported by captive core", + 1, + )) + } + return err + } + + c.tree = tree + c.captiveCoreTomlValues = body + c.tablePlaceholders = tablePlaceholders + c.QuorumSetEntries = quorumSetEntries + c.HistoryEntries = historyEntries + return nil +} + +// CaptiveCoreTomlParams defines captive core configuration provided by Horizon flags. +type CaptiveCoreTomlParams struct { + // NetworkPassphrase is the Stellar network passphrase used by captive core when connecting to the Stellar network. + NetworkPassphrase string + // HistoryArchiveURLs are a list of history archive urls. + HistoryArchiveURLs []string + // HTTPPort is the TCP port to listen for requests (defaults to 0, which disables the HTTP server). + HTTPPort *uint + // PeerPort is the TCP port to bind to for connecting to the Stellar network + // (defaults to 11625). It may be useful for example when there's >1 Stellar-Core + // instance running on a machine. + PeerPort *uint + // LogPath is the (optional) path in which to store Core logs, passed along + // to Stellar Core's LOG_FILE_PATH. + LogPath *string + // Strict is a flag which, if enabled, rejects Stellar Core toml fields which are not supported by captive core. + Strict bool +} + +// NewCaptiveCoreTomlFromFile constructs a new CaptiveCoreToml instance by merging configuration +// from the toml file located at `configPath` and the configuration provided by `params`. +func NewCaptiveCoreTomlFromFile(configPath string, params CaptiveCoreTomlParams) (*CaptiveCoreToml, error) { + var captiveCoreToml CaptiveCoreToml + data, err := ioutil.ReadFile(configPath) + if err != nil { + return nil, errors.Wrap(err, "could not load toml path") + } + + if err = captiveCoreToml.unmarshal(data, params.Strict); err != nil { + return nil, errors.Wrap(err, "could not unmarshal captive core toml") + } + + if err = captiveCoreToml.validate(params); err != nil { + return nil, errors.Wrap(err, "invalid captive core toml") + } + + if len(captiveCoreToml.HistoryEntries) > 0 { + log.Warnf( + "Configuring captive core with history archive from %s instead of %v", + configPath, + params.HistoryArchiveURLs, + ) + } + + captiveCoreToml.setDefaults(params) + return &captiveCoreToml, nil +} + +// NewCaptiveCoreToml constructs a new CaptiveCoreToml instance based off +// the configuration in `params`. +func NewCaptiveCoreToml(params CaptiveCoreTomlParams) (*CaptiveCoreToml, error) { + var captiveCoreToml CaptiveCoreToml + var err error + + captiveCoreToml.tablePlaceholders = &placeholders{} + captiveCoreToml.tree, err = toml.TreeFromMap(map[string]interface{}{}) + if err != nil { + return nil, err + } + + captiveCoreToml.setDefaults(params) + return &captiveCoreToml, nil +} + +func (c *CaptiveCoreToml) clone() (*CaptiveCoreToml, error) { + data, err := c.Marshal() + if err != nil { + return nil, errors.Wrap(err, "could not marshal toml") + } + var cloned CaptiveCoreToml + if err = cloned.unmarshal(data, false); err != nil { + return nil, errors.Wrap(err, "could not unmarshal captive core toml") + } + return &cloned, nil +} + +// CatchupToml returns a new CaptiveCoreToml instance based off the existing +// instance with some modifications which are suitable for running +// the catchup command on captive core. +func (c *CaptiveCoreToml) CatchupToml() (*CaptiveCoreToml, error) { + offline, err := c.clone() + if err != nil { + return nil, errors.Wrap(err, "could not clone toml") + } + + offline.RunStandalone = true + offline.UnsafeQuorum = true + offline.PublicHTTPPort = false + offline.HTTPPort = 0 + offline.FailureSafety = 0 + + if !c.QuorumSetIsConfigured() { + // Add a fictional quorum -- necessary to convince core to start up; + // but not used at all for our purposes. Pubkey here is just random. + offline.QuorumSetEntries = map[string]QuorumSet{ + "QUORUM_SET": QuorumSet{ + ThresholdPercent: 100, + Validators: []string{"GCZBOIAY4HLKAJVNJORXZOZRAY2BJDBZHKPBHZCRAIUR5IHC2UHBGCQR"}, + }, + } + } + return offline, nil +} + +func (c *CaptiveCoreToml) setDefaults(params CaptiveCoreTomlParams) { + if !c.tree.Has("NETWORK_PASSPHRASE") { + c.NetworkPassphrase = params.NetworkPassphrase + } + + if def := c.tree.Has("HTTP_PORT"); !def && params.HTTPPort != nil { + c.HTTPPort = *params.HTTPPort + } else if !def && params.HTTPPort == nil { + c.HTTPPort = defaultHTTPPort + } + + if def := c.tree.Has("PEER_PORT"); !def && params.PeerPort != nil { + c.PeerPort = *params.PeerPort + } + + if def := c.tree.Has("LOG_FILE_PATH"); !def && params.LogPath != nil { + c.LogFilePath = *params.LogPath + } else if !def && params.LogPath == nil { + c.LogFilePath = defaultLogFilePath + } + + if !c.tree.Has("FAILURE_SAFETY") { + c.FailureSafety = defaultFailureSafety + } + if !c.tree.Has("DISABLE_XDR_FSYNC") { + c.DisableXDRFsync = defaultDisableXDRFsync + } + + if !c.HistoryIsConfigured() { + c.HistoryEntries = map[string]History{} + for i, val := range params.HistoryArchiveURLs { + name := fmt.Sprintf("HISTORY.h%d", i) + c.HistoryEntries[c.tablePlaceholders.newPlaceholder(name)] = History{ + Get: fmt.Sprintf("curl -sf %s/{0} -o {1}", val), + } + } + } +} + +func (c *CaptiveCoreToml) validate(params CaptiveCoreTomlParams) error { + if def := c.tree.Has("NETWORK_PASSPHRASE"); def && c.NetworkPassphrase != params.NetworkPassphrase { + return fmt.Errorf( + "NETWORK_PASSPHRASE in captive core config file: %s does not match Horizon network-passphrase flag: %s", + c.NetworkPassphrase, + params.NetworkPassphrase, + ) + } + + if def := c.tree.Has("HTTP_PORT"); def && params.HTTPPort != nil && c.HTTPPort != *params.HTTPPort { + return fmt.Errorf( + "HTTP_PORT in captive core config file: %d does not match Horizon captive-core-http-port flag: %d", + c.HTTPPort, + *params.HTTPPort, + ) + } + + if def := c.tree.Has("PEER_PORT"); def && params.PeerPort != nil && c.PeerPort != *params.PeerPort { + return fmt.Errorf( + "PEER_PORT in captive core config file: %d does not match Horizon captive-core-peer-port flag: %d", + c.PeerPort, + *params.PeerPort, + ) + } + + if def := c.tree.Has("LOG_FILE_PATH"); def && params.LogPath != nil && c.LogFilePath != *params.LogPath { + return fmt.Errorf( + "LOG_FILE_PATH in captive core config file: %s does not match Horizon captive-core-log-path flag: %s", + c.LogFilePath, + *params.LogPath, + ) + } + + homeDomainSet := map[string]HomeDomain{} + for _, hd := range c.HomeDomains { + if _, ok := homeDomainSet[hd.HomeDomain]; ok { + return fmt.Errorf( + "found duplicate home domain in captive core configuration: %s", + hd.HomeDomain, + ) + } + if hd.HomeDomain == "" { + return fmt.Errorf( + "found invalid home domain entry which is missing a HOME_DOMAIN value", + ) + } + if hd.Quality == "" { + return fmt.Errorf( + "found invalid home domain entry which is missing a QUALITY value: %s", + hd.HomeDomain, + ) + } + if !validQuality[hd.Quality] { + return fmt.Errorf( + "found invalid home domain entry which has an invalid QUALITY value: %s", + hd.HomeDomain, + ) + } + homeDomainSet[hd.HomeDomain] = hd + } + + names := map[string]bool{} + for _, v := range c.Validators { + if names[v.Name] { + return fmt.Errorf( + "found duplicate validator in captive core configuration: %s", + v.Name, + ) + } + if v.Name == "" { + return fmt.Errorf( + "found invalid validator entry which is missing a NAME value: %s", + v.Name, + ) + } + if v.HomeDomain == "" { + return fmt.Errorf( + "found invalid validator entry which is missing a HOME_DOMAIN value: %s", + v.Name, + ) + } + if v.PublicKey == "" { + return fmt.Errorf( + "found invalid validator entry which is missing a PUBLIC_KEY value: %s", + v.Name, + ) + } + if _, err := xdr.AddressToAccountId(v.PublicKey); err != nil { + return fmt.Errorf( + "found invalid validator entry which has an invalid PUBLIC_KEY : %s", + v.Name, + ) + } + if v.Quality == "" { + if _, ok := homeDomainSet[v.HomeDomain]; !ok { + return fmt.Errorf( + "found invalid validator entry which is missing a QUALITY value: %s", + v.Name, + ) + } + } else if !validQuality[v.Quality] { + return fmt.Errorf( + "found invalid validator entry which has an invalid QUALITY value: %s", + v.Name, + ) + } + + names[v.Name] = true + } + + return nil +} diff --git a/ingest/ledgerbackend/toml_test.go b/ingest/ledgerbackend/toml_test.go new file mode 100644 index 0000000000..6349665b0a --- /dev/null +++ b/ingest/ledgerbackend/toml_test.go @@ -0,0 +1,314 @@ +package ledgerbackend + +import ( + "github.com/stretchr/testify/assert" + "io/ioutil" + "path/filepath" + "testing" +) + +func newUint(v uint) *uint { + return &v +} + +func newString(s string) *string { + return &s +} + +func TestCaptiveCoreTomlValidation(t *testing.T) { + for _, testCase := range []struct { + name string + networkPassphrase string + appendPath string + httpPort *uint + peerPort *uint + logPath *string + expectedError string + }{ + { + name: "mismatching NETWORK_PASSPHRASE", + networkPassphrase: "bogus passphrase", + appendPath: filepath.Join("testdata", "appendix-with-fields.cfg"), + httpPort: newUint(6789), + peerPort: newUint(12345), + logPath: nil, + expectedError: "invalid captive core toml: NETWORK_PASSPHRASE in captive core config file: " + + "Public Global Stellar Network ; September 2015 does not match Horizon network-passphrase " + + "flag: bogus passphrase", + }, + { + name: "mismatching HTTP_PORT", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "appendix-with-fields.cfg"), + httpPort: newUint(1161), + peerPort: newUint(12345), + logPath: nil, + expectedError: "invalid captive core toml: HTTP_PORT in captive core config file: 6789 " + + "does not match Horizon captive-core-http-port flag: 1161", + }, + { + name: "mismatching PEER_PORT", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "appendix-with-fields.cfg"), + httpPort: newUint(6789), + peerPort: newUint(2346), + logPath: nil, + expectedError: "invalid captive core toml: PEER_PORT in captive core config file: 12345 " + + "does not match Horizon captive-core-peer-port flag: 2346", + }, + { + name: "mismatching LOG_FILE_PATH", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "appendix-with-fields.cfg"), + httpPort: newUint(6789), + peerPort: newUint(12345), + logPath: newString("/my/test/path"), + expectedError: "invalid captive core toml: LOG_FILE_PATH in captive core config file: " + + "does not match Horizon captive-core-log-path flag: /my/test/path", + }, + { + name: "duplicate HOME_DOMAIN entry", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "duplicate-home-domain.cfg"), + httpPort: nil, + peerPort: nil, + logPath: nil, + expectedError: "invalid captive core toml: found duplicate home domain in captive " + + "core configuration: testnet.stellar.org", + }, + { + name: "empty HOME_DOMAIN entry", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "empty-home-domain.cfg"), + httpPort: nil, + peerPort: nil, + logPath: nil, + expectedError: "invalid captive core toml: found invalid home domain entry which is " + + "missing a HOME_DOMAIN value", + }, + { + name: "HOME_DOMAIN with empty QUALITY", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "empty-home-domain-quality.cfg"), + httpPort: nil, + peerPort: nil, + logPath: nil, + expectedError: "invalid captive core toml: found invalid home domain entry which is " + + "missing a QUALITY value: testnet.stellar.org", + }, + { + name: "HOME_DOMAIN with invalid QUALITY", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "invalid-home-domain-quality.cfg"), + httpPort: nil, + peerPort: nil, + logPath: nil, + expectedError: "invalid captive core toml: found invalid home domain entry which has an " + + "invalid QUALITY value: testnet.stellar.org", + }, + { + name: "duplicate VALIDATOR entry", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "duplicate-validator.cfg"), + httpPort: nil, + peerPort: nil, + logPath: nil, + expectedError: "invalid captive core toml: found duplicate validator in captive core " + + "configuration: sdf_testnet_1", + }, + { + name: "VALIDATOR with invalid public key", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "validator-has-invalid-public-key.cfg"), + httpPort: nil, + peerPort: nil, + logPath: nil, + expectedError: "invalid captive core toml: found invalid validator entry which has an invalid " + + "PUBLIC_KEY : sdf_testnet_2", + }, + { + name: "VALIDATOR with invalid quality", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "validator-has-invalid-quality.cfg"), + httpPort: nil, + peerPort: nil, + logPath: nil, + expectedError: "invalid captive core toml: found invalid validator entry which has an invalid " + + "QUALITY value: sdf_testnet_2", + }, + { + name: "VALIDATOR without home domain", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "validator-missing-home-domain.cfg"), + httpPort: nil, + peerPort: nil, + logPath: nil, + expectedError: "invalid captive core toml: found invalid validator entry which is missing a " + + "HOME_DOMAIN value: sdf_testnet_1", + }, + { + name: "VALIDATOR without name", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "validator-missing-name.cfg"), + httpPort: nil, + peerPort: nil, + logPath: nil, + expectedError: "invalid captive core toml: found invalid validator entry which is missing " + + "a NAME value: ", + }, + { + name: "VALIDATOR without public key", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "validator-missing-public-key.cfg"), + httpPort: nil, + peerPort: nil, + logPath: nil, + expectedError: "invalid captive core toml: found invalid validator entry which is missing " + + "a PUBLIC_KEY value: sdf_testnet_1", + }, + { + name: "VALIDATOR without quality", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "validator-missing-quality.cfg"), + httpPort: nil, + peerPort: nil, + logPath: nil, + expectedError: "invalid captive core toml: found invalid validator entry which is missing " + + "a QUALITY value: sdf_testnet_2", + }, + { + name: "field not supported by captive core", + networkPassphrase: "Public Global Stellar Network ; September 2015", + appendPath: filepath.Join("testdata", "invalid-captive-core-field.cfg"), + httpPort: nil, + peerPort: nil, + logPath: nil, + expectedError: "could not unmarshal captive core toml: these fields are not supported by captive core: [\"CATCHUP_RECENT\"]", + }, + } { + t.Run(testCase.name, func(t *testing.T) { + params := CaptiveCoreTomlParams{ + NetworkPassphrase: testCase.networkPassphrase, + HistoryArchiveURLs: []string{"http://localhost:1170"}, + HTTPPort: testCase.httpPort, + PeerPort: testCase.peerPort, + LogPath: testCase.logPath, + Strict: true, + } + _, err := NewCaptiveCoreTomlFromFile(testCase.appendPath, params) + assert.EqualError(t, err, testCase.expectedError) + }) + } +} + +func TestGenerateConfig(t *testing.T) { + for _, testCase := range []struct { + name string + appendPath string + mode stellarCoreRunnerMode + expectedPath string + httpPort *uint + peerPort *uint + logPath *string + }{ + { + name: "offline config with no appendix", + mode: stellarCoreRunnerModeOffline, + appendPath: "", + expectedPath: filepath.Join("testdata", "expected-offline-core.cfg"), + httpPort: newUint(6789), + peerPort: newUint(12345), + logPath: nil, + }, + { + name: "offline config with no peer port", + mode: stellarCoreRunnerModeOffline, + appendPath: "", + expectedPath: filepath.Join("testdata", "expected-offline-with-no-peer-port.cfg"), + httpPort: newUint(6789), + peerPort: nil, + logPath: newString("/var/stellar-core/test.log"), + }, + { + name: "online config with appendix", + mode: stellarCoreRunnerModeOnline, + appendPath: filepath.Join("testdata", "sample-appendix.cfg"), + expectedPath: filepath.Join("testdata", "expected-online-core.cfg"), + httpPort: newUint(6789), + peerPort: newUint(12345), + logPath: nil, + }, + { + name: "online config with unsupported field in appendix", + mode: stellarCoreRunnerModeOnline, + appendPath: filepath.Join("testdata", "invalid-captive-core-field.cfg"), + expectedPath: filepath.Join("testdata", "expected-online-core.cfg"), + httpPort: newUint(6789), + peerPort: newUint(12345), + logPath: nil, + }, + { + name: "online config with no peer port", + mode: stellarCoreRunnerModeOnline, + appendPath: filepath.Join("testdata", "sample-appendix.cfg"), + expectedPath: filepath.Join("testdata", "expected-online-with-no-peer-port.cfg"), + httpPort: newUint(6789), + peerPort: nil, + logPath: newString("/var/stellar-core/test.log"), + }, + { + name: "online config with no http port", + mode: stellarCoreRunnerModeOnline, + appendPath: filepath.Join("testdata", "sample-appendix.cfg"), + expectedPath: filepath.Join("testdata", "expected-online-with-no-http-port.cfg"), + httpPort: nil, + peerPort: newUint(12345), + logPath: nil, + }, + { + name: "offline config with appendix", + mode: stellarCoreRunnerModeOffline, + appendPath: filepath.Join("testdata", "sample-appendix.cfg"), + expectedPath: filepath.Join("testdata", "expected-offline-with-appendix-core.cfg"), + httpPort: newUint(6789), + peerPort: newUint(12345), + logPath: nil, + }, + { + name: "offline config with extra fields in appendix", + mode: stellarCoreRunnerModeOffline, + appendPath: filepath.Join("testdata", "appendix-with-fields.cfg"), + expectedPath: filepath.Join("testdata", "expected-offline-with-extra-fields.cfg"), + httpPort: newUint(6789), + peerPort: newUint(12345), + logPath: nil, + }, + } { + t.Run(testCase.name, func(t *testing.T) { + var err error + var captiveCoreToml *CaptiveCoreToml + params := CaptiveCoreTomlParams{ + NetworkPassphrase: "Public Global Stellar Network ; September 2015", + HistoryArchiveURLs: []string{"http://localhost:1170"}, + HTTPPort: testCase.httpPort, + PeerPort: testCase.peerPort, + LogPath: testCase.logPath, + Strict: false, + } + if testCase.appendPath != "" { + captiveCoreToml, err = NewCaptiveCoreTomlFromFile(testCase.appendPath, params) + } else { + captiveCoreToml, err = NewCaptiveCoreToml(params) + } + assert.NoError(t, err) + + configBytes, err := generateConfig(captiveCoreToml, testCase.mode) + assert.NoError(t, err) + + expectedByte, err := ioutil.ReadFile(testCase.expectedPath) + assert.NoError(t, err) + + assert.Equal(t, string(configBytes), string(expectedByte)) + }) + } +} diff --git a/ingest/stats_change_processor.go b/ingest/stats_change_processor.go index 929922126d..4dd744a95a 100644 --- a/ingest/stats_change_processor.go +++ b/ingest/stats_change_processor.go @@ -1,6 +1,7 @@ package ingest import ( + "context" "github.com/stellar/go/xdr" ) @@ -33,7 +34,7 @@ type StatsChangeProcessorResults struct { TrustLinesRemoved int64 } -func (p *StatsChangeProcessor) ProcessChange(change Change) error { +func (p *StatsChangeProcessor) ProcessChange(ctx context.Context, change Change) error { switch change.Type { case xdr.LedgerEntryTypeAccount: switch change.LedgerEntryChangeType() { diff --git a/ingest/stats_change_processor_test.go b/ingest/stats_change_processor_test.go index a17a74de62..d39ac092e0 100644 --- a/ingest/stats_change_processor_test.go +++ b/ingest/stats_change_processor_test.go @@ -1,6 +1,7 @@ package ingest import ( + "context" "testing" "github.com/stellar/go/xdr" @@ -8,96 +9,97 @@ import ( ) func TestStatsChangeProcessor(t *testing.T) { + ctx := context.Background() processor := &StatsChangeProcessor{} // Created - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeAccount, Pre: nil, Post: &xdr.LedgerEntry{}, })) - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: nil, Post: &xdr.LedgerEntry{}, })) - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeData, Pre: nil, Post: &xdr.LedgerEntry{}, })) - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeOffer, Pre: nil, Post: &xdr.LedgerEntry{}, })) - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: nil, Post: &xdr.LedgerEntry{}, })) // Updated - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{}, Post: &xdr.LedgerEntry{}, })) - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: &xdr.LedgerEntry{}, Post: &xdr.LedgerEntry{}, })) - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeData, Pre: &xdr.LedgerEntry{}, Post: &xdr.LedgerEntry{}, })) - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeOffer, Pre: &xdr.LedgerEntry{}, Post: &xdr.LedgerEntry{}, })) - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{}, Post: &xdr.LedgerEntry{}, })) // Removed - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{}, Post: nil, })) - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: &xdr.LedgerEntry{}, Post: nil, })) - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeData, Pre: &xdr.LedgerEntry{}, Post: nil, })) - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeOffer, Pre: &xdr.LedgerEntry{}, Post: nil, })) - assert.NoError(t, processor.ProcessChange(Change{ + assert.NoError(t, processor.ProcessChange(ctx, Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{}, Post: nil, diff --git a/ingest/tutorial/example_common.go b/ingest/tutorial/example_common.go index b10829352b..133ac02de6 100644 --- a/ingest/tutorial/example_common.go +++ b/ingest/tutorial/example_common.go @@ -7,18 +7,30 @@ import ( ) var ( - config = ledgerbackend.CaptiveCoreConfig{ + config = captiveCoreConfig() +) + +func captiveCoreConfig() ledgerbackend.CaptiveCoreConfig { + archiveURLs := []string{ + "https://history.stellar.org/prd/core-testnet/core_testnet_001", + "https://history.stellar.org/prd/core-testnet/core_testnet_002", + "https://history.stellar.org/prd/core-testnet/core_testnet_003", + } + networkPassphrase := "Test SDF Network ; September 2015" + captiveCoreToml, err := ledgerbackend.NewCaptiveCoreToml(ledgerbackend.CaptiveCoreTomlParams{ + NetworkPassphrase: networkPassphrase, + HistoryArchiveURLs: archiveURLs, + }) + panicIf(err) + + return ledgerbackend.CaptiveCoreConfig{ // Change these based on your environment: - BinaryPath: "/usr/local/bin/stellar-core", - ConfigAppendPath: "stellar-core-stub.toml", - NetworkPassphrase: "Test SDF Network ; September 2015", - HistoryArchiveURLs: []string{ - "https://history.stellar.org/prd/core-testnet/core_testnet_001", - "https://history.stellar.org/prd/core-testnet/core_testnet_002", - "https://history.stellar.org/prd/core-testnet/core_testnet_003", - }, + BinaryPath: "/usr/local/bin/stellar-core", + NetworkPassphrase: networkPassphrase, + HistoryArchiveURLs: archiveURLs, + Toml: captiveCoreToml, } -) +} func panicIf(err error) { if err != nil { diff --git a/ingest/tutorial/example_hello.go b/ingest/tutorial/example_hello.go index 229ffeacad..44c9f409b2 100644 --- a/ingest/tutorial/example_hello.go +++ b/ingest/tutorial/example_hello.go @@ -1,26 +1,24 @@ package main import ( + "context" "fmt" backends "github.com/stellar/go/ingest/ledgerbackend" ) func helloworld() { + ctx := context.Background() backend, err := backends.NewCaptive(config) panicIf(err) defer backend.Close() // Prepare a single ledger to be ingested, - err = backend.PrepareRange(backends.BoundedRange(123456, 123456)) + err = backend.PrepareRange(ctx, backends.BoundedRange(123456, 123456)) panicIf(err) // then retrieve it: - ok, ledger, err := backend.GetLedger(123456) - if !ok { - err = fmt.Errorf("The ledger doesn't exist on the backend.") - } - + ledger, err := backend.GetLedger(ctx, 123456) panicIf(err) // Now `ledger` is a raw `xdr.LedgerCloseMeta` object containing the diff --git a/ingest/tutorial/example_statistics.go b/ingest/tutorial/example_statistics.go index 4a5fe18d6d..f6174fb1b0 100644 --- a/ingest/tutorial/example_statistics.go +++ b/ingest/tutorial/example_statistics.go @@ -1,6 +1,7 @@ package main import ( + "context" "fmt" "io" @@ -11,6 +12,7 @@ import ( ) func statistics() { + ctx := context.Background() // Only log errors from the backend to keep output cleaner. lg := log.New() lg.SetLevel(logrus.ErrorLevel) @@ -26,7 +28,7 @@ func statistics() { fmt.Printf("Preparing range (%d ledgers)...\n", ledgersToRead) ledgerRange := backends.BoundedRange(startingSeq, startingSeq+ledgersToRead) - err = backend.PrepareRange(ledgerRange) + err = backend.PrepareRange(ctx, ledgerRange) panicIf(err) // These are the statistics that we're tracking. @@ -37,7 +39,8 @@ func statistics() { fmt.Printf("Processed ledger %d...\r", seq) txReader, err := ingest.NewLedgerTransactionReader( - backend, config.NetworkPassphrase, seq) + ctx, backend, config.NetworkPassphrase, seq, + ) panicIf(err) defer txReader.Close() diff --git a/ingest/tutorial/getting-started.md b/ingest/tutorial/getting-started.md index 6bec707d03..0091880c1d 100644 --- a/ingest/tutorial/getting-started.md +++ b/ingest/tutorial/getting-started.md @@ -49,6 +49,7 @@ With that in mind, here's a minimalist example of the ingestion library: package main import ( + "context" "fmt" "github.com/stellar/go/ingest/ledgerbackend" @@ -64,11 +65,8 @@ func main() { panicIf(err) // then retrieve it: - ok, ledger, err := ledgerbackend.GetLedger(123456) - if !ok { - err = fmt.Errorf("The ledger doesn't exist on the backend.") - } - + ctx := context.Background() + ledger, err := ledgerbackend.GetLedger(ctx, 123456) panicIf(err) // Now `ledger` is a raw `xdr.LedgerCloseMeta` object containing the diff --git a/keypair/main.go b/keypair/main.go index 267a0fb5c3..fc8c7a9713 100644 --- a/keypair/main.go +++ b/keypair/main.go @@ -61,7 +61,13 @@ func Random() (*Full, error) { } // Master returns the master keypair for a given network passphrase +// Deprecated: Use keypair.Root instead. func Master(networkPassphrase string) KP { + return Root(networkPassphrase) +} + +// Root returns the root account keypair for a given network passphrase. +func Root(networkPassphrase string) *Full { kp, err := FromRawSeed(network.ID(networkPassphrase)) if err != nil { diff --git a/keypair/main_test.go b/keypair/main_test.go index 6a4c6ead2e..76ff28f213 100644 --- a/keypair/main_test.go +++ b/keypair/main_test.go @@ -328,3 +328,12 @@ var _ = Describe("keypair.MustRandom()", func() { }) }) }) + +var _ = Describe("keypair.Root()", func() { + It("returns the root key pair for the passphrase", func() { + networkPassphrase := "Standalone Network ; February 2017" + kp := Root(networkPassphrase) + seed := kp.Seed() + Expect(seed).To(Equal("SC5O7VZUXDJ6JBDSZ74DSERXL7W3Y5LTOAMRF7RQRL3TAGAPS7LUVG3L")) + }) +}) diff --git a/protocols/horizon/effects/main.go b/protocols/horizon/effects/main.go index 28006e4fe7..7a83e6e5a8 100644 --- a/protocols/horizon/effects/main.go +++ b/protocols/horizon/effects/main.go @@ -2,11 +2,11 @@ package effects import ( "encoding/json" - "github.com/stellar/go/xdr" "time" "github.com/stellar/go/protocols/horizon/base" "github.com/stellar/go/support/render/hal" + "github.com/stellar/go/xdr" ) // Peter 30-04-2019: this is copied from the history package "github.com/stellar/go/services/horizon/internal/db2/history" @@ -43,6 +43,7 @@ const ( // account flags, either clearing or setting. EffectAccountFlagsUpdated EffectType = 6 // from set_options + // unused // EffectAccountInflationDestinationUpdated effects occur when an account changes its // inflation destination. EffectAccountInflationDestinationUpdated EffectType = 7 // from set_options @@ -92,14 +93,13 @@ const ( // trading effects + // unused // EffectOfferCreated occurs when an account offers to trade an asset - EffectOfferCreated EffectType = 30 // from manage_offer, creat_passive_offer - + // EffectOfferCreated EffectType = 30 // from manage_offer, creat_passive_offer // EffectOfferRemoved occurs when an account removes an offer - EffectOfferRemoved EffectType = 31 // from manage_offer, creat_passive_offer, path_payment - + // EffectOfferRemoved EffectType = 31 // from manage_offer, creat_passive_offer, path_payment // EffectOfferUpdated occurs when an offer is updated by the offering account. - EffectOfferUpdated EffectType = 32 // from manage_offer, creat_passive_offer, path_payment + // EffectOfferUpdated EffectType = 32 // from manage_offer, creat_passive_offer, path_payment // EffectTrade occurs when a trade is initiated because of a path payment or // offer operation. @@ -208,33 +208,34 @@ var EffectTypeNames = map[EffectType]string{ EffectTrustlineAuthorizedToMaintainLiabilities: "trustline_authorized_to_maintain_liabilities", EffectTrustlineDeauthorized: "trustline_deauthorized", EffectTrustlineFlagsUpdated: "trustline_flags_updated", - EffectOfferCreated: "offer_created", - EffectOfferRemoved: "offer_removed", - EffectOfferUpdated: "offer_updated", - EffectTrade: "trade", - EffectDataCreated: "data_created", - EffectDataRemoved: "data_removed", - EffectDataUpdated: "data_updated", - EffectSequenceBumped: "sequence_bumped", - EffectClaimableBalanceCreated: "claimable_balance_created", - EffectClaimableBalanceClaimed: "claimable_balance_claimed", - EffectClaimableBalanceClaimantCreated: "claimable_balance_claimant_created", - EffectAccountSponsorshipCreated: "account_sponsorship_created", - EffectAccountSponsorshipUpdated: "account_sponsorship_updated", - EffectAccountSponsorshipRemoved: "account_sponsorship_removed", - EffectTrustlineSponsorshipCreated: "trustline_sponsorship_created", - EffectTrustlineSponsorshipUpdated: "trustline_sponsorship_updated", - EffectTrustlineSponsorshipRemoved: "trustline_sponsorship_removed", - EffectDataSponsorshipCreated: "data_sponsorship_created", - EffectDataSponsorshipUpdated: "data_sponsorship_updated", - EffectDataSponsorshipRemoved: "data_sponsorship_removed", - EffectClaimableBalanceSponsorshipCreated: "claimable_balance_sponsorship_created", - EffectClaimableBalanceSponsorshipUpdated: "claimable_balance_sponsorship_updated", - EffectClaimableBalanceSponsorshipRemoved: "claimable_balance_sponsorship_removed", - EffectSignerSponsorshipCreated: "signer_sponsorship_created", - EffectSignerSponsorshipUpdated: "signer_sponsorship_updated", - EffectSignerSponsorshipRemoved: "signer_sponsorship_removed", - EffectClaimableBalanceClawedBack: "claimable_balance_clawed_back", + // unused + // EffectOfferCreated: "offer_created", + // EffectOfferRemoved: "offer_removed", + // EffectOfferUpdated: "offer_updated", + EffectTrade: "trade", + EffectDataCreated: "data_created", + EffectDataRemoved: "data_removed", + EffectDataUpdated: "data_updated", + EffectSequenceBumped: "sequence_bumped", + EffectClaimableBalanceCreated: "claimable_balance_created", + EffectClaimableBalanceClaimed: "claimable_balance_claimed", + EffectClaimableBalanceClaimantCreated: "claimable_balance_claimant_created", + EffectAccountSponsorshipCreated: "account_sponsorship_created", + EffectAccountSponsorshipUpdated: "account_sponsorship_updated", + EffectAccountSponsorshipRemoved: "account_sponsorship_removed", + EffectTrustlineSponsorshipCreated: "trustline_sponsorship_created", + EffectTrustlineSponsorshipUpdated: "trustline_sponsorship_updated", + EffectTrustlineSponsorshipRemoved: "trustline_sponsorship_removed", + EffectDataSponsorshipCreated: "data_sponsorship_created", + EffectDataSponsorshipUpdated: "data_sponsorship_updated", + EffectDataSponsorshipRemoved: "data_sponsorship_removed", + EffectClaimableBalanceSponsorshipCreated: "claimable_balance_sponsorship_created", + EffectClaimableBalanceSponsorshipUpdated: "claimable_balance_sponsorship_updated", + EffectClaimableBalanceSponsorshipRemoved: "claimable_balance_sponsorship_removed", + EffectSignerSponsorshipCreated: "signer_sponsorship_created", + EffectSignerSponsorshipUpdated: "signer_sponsorship_updated", + EffectSignerSponsorshipRemoved: "signer_sponsorship_removed", + EffectClaimableBalanceClawedBack: "claimable_balance_clawed_back", } // Base provides the common structure for any effect resource effect. @@ -248,6 +249,8 @@ type Base struct { ID string `json:"id"` PT string `json:"paging_token"` Account string `json:"account"` + AccountMuxed string `json:"account_muxed,omitempty"` + AccountMuxedID uint64 `json:"account_muxed_id,omitempty"` Type string `json:"type"` TypeI int32 `json:"type_i"` LedgerCloseTime time.Time `json:"created_at"` @@ -381,6 +384,8 @@ type TrustlineDeauthorized struct { type Trade struct { Base Seller string `json:"seller"` + SellerMuxed string `json:"seller_muxed,omitempty"` + SellerMuxedID uint64 `json:"seller_muxed_id,omitempty"` OfferID int64 `json:"offer_id,string"` SoldAmount string `json:"sold_amount"` SoldAssetType string `json:"sold_asset_type"` diff --git a/protocols/horizon/main.go b/protocols/horizon/main.go index 12d96d74b1..97cee69ed7 100644 --- a/protocols/horizon/main.go +++ b/protocols/horizon/main.go @@ -454,8 +454,12 @@ type Transaction struct { Ledger int32 `json:"ledger"` LedgerCloseTime time.Time `json:"created_at"` Account string `json:"source_account"` + AccountMuxed string `json:"account_muxed,omitempty"` + AccountMuxedID uint64 `json:"account_muxed_id,omitempty"` AccountSequence string `json:"source_account_sequence"` FeeAccount string `json:"fee_account"` + FeeAccountMuxed string `json:"fee_account_muxed,omitempty"` + FeeAccountMuxedID uint64 `json:"fee_account_muxed_id,omitempty"` FeeCharged int64 `json:"fee_charged,string"` MaxFee int64 `json:"max_fee,string"` OperationCount int32 `json:"operation_count"` diff --git a/protocols/horizon/operations/main.go b/protocols/horizon/operations/main.go index 9eb7bfad5c..7ce81f49a9 100644 --- a/protocols/horizon/operations/main.go +++ b/protocols/horizon/operations/main.go @@ -54,6 +54,8 @@ type Base struct { // successful transaction. TransactionSuccessful bool `json:"transaction_successful"` SourceAccount string `json:"source_account"` + SourceAccountMuxed string `json:"source_account_muxed,omitempty"` + SourceAccountMuxedID uint64 `json:"source_account_muxed_id,omitempty"` Type string `json:"type"` TypeI int32 `json:"type_i"` LedgerCloseTime time.Time `json:"created_at"` @@ -85,6 +87,8 @@ type CreateAccount struct { Base StartingBalance string `json:"starting_balance"` Funder string `json:"funder"` + FunderMuxed string `json:"funder_muxed,omitempty"` + FunderMuxedID uint64 `json:"funder_muxed_id,omitempty"` Account string `json:"account"` } @@ -93,9 +97,13 @@ type CreateAccount struct { type Payment struct { Base base.Asset - From string `json:"from"` - To string `json:"to"` - Amount string `json:"amount"` + From string `json:"from"` + FromMuxed string `json:"from_muxed,omitempty"` + FromMuxedID uint64 `json:"from_muxed_id,omitempty"` + To string `json:"to"` + ToMuxed string `json:"to_muxed,omitempty"` + ToMuxedID uint64 `json:"to_muxed_id,omitempty"` + Amount string `json:"amount"` } // PathPayment is the json resource representing a single operation whose type @@ -190,9 +198,11 @@ type SetOptions struct { type ChangeTrust struct { Base base.Asset - Limit string `json:"limit"` - Trustee string `json:"trustee"` - Trustor string `json:"trustor"` + Limit string `json:"limit"` + Trustee string `json:"trustee"` + Trustor string `json:"trustor"` + TrustorMuxed string `json:"trustor_muxed,omitempty"` + TrustorMuxedID uint64 `json:"trustor_muxed_id,omitempty"` } // Deprecated: use TrustlineFlagsUpdated instead. @@ -202,6 +212,8 @@ type AllowTrust struct { Base base.Asset Trustee string `json:"trustee"` + TrusteeMuxed string `json:"trustee_muxed,omitempty"` + TrusteeMuxedID uint64 `json:"trustee_muxed_id,omitempty"` Trustor string `json:"trustor"` Authorize bool `json:"authorize"` AuthorizeToMaintainLiabilities bool `json:"authorize_to_maintain_liabilities"` @@ -211,8 +223,12 @@ type AllowTrust struct { // is AccountMerge. type AccountMerge struct { Base - Account string `json:"account"` - Into string `json:"into"` + Account string `json:"account"` + AccountMuxed string `json:"account_muxed,omitempty"` + AccountMuxedID uint64 `json:"account_muxed_id,omitempty"` + Into string `json:"into"` + IntoMuxed string `json:"into_muxed,omitempty"` + IntoMuxedID uint64 `json:"into_muxed_id,omitempty"` } // Inflation is the json resource representing a single operation whose type is @@ -234,8 +250,10 @@ type CreateClaimableBalance struct { // ClaimClaimableBalance. type ClaimClaimableBalance struct { Base - BalanceID string `json:"balance_id"` - Claimant string `json:"claimant"` + BalanceID string `json:"balance_id"` + Claimant string `json:"claimant"` + ClaimantMuxed string `json:"claimant_muxed,omitempty"` + ClaimantMuxedID uint64 `json:"claimant_muxed_id,omitempty"` } // BeginSponsoringFutureReserves is the json resource representing a single operation whose type is @@ -249,7 +267,9 @@ type BeginSponsoringFutureReserves struct { // EndSponsoringFutureReserves. type EndSponsoringFutureReserves struct { Base - BeginSponsor string `json:"begin_sponsor,omitempty"` + BeginSponsor string `json:"begin_sponsor,omitempty"` + BeginSponsorMuxed string `json:"begin_sponsor_muxed,omitempty"` + BeginSponsorMuxedID uint64 `json:"begin_sponsor_muxed_id,omitempty"` } // RevokeSponsorship is the json resource representing a single operation whose type is @@ -272,15 +292,17 @@ type RevokeSponsorship struct { type Clawback struct { Base base.Asset - From string `json:"from"` - Amount string `json:"amount"` + From string `json:"from"` + FromMuxed string `json:"from_muxed,omitempty"` + FromMuxedID uint64 `json:"from_muxed_id,omitempty"` + Amount string `json:"amount"` } // ClawbackClaimableBalance is the json resource representing a single operation whose type is // ClawbackClaimableBalance. type ClawbackClaimableBalance struct { Base - ClaimableBalanceID *string `json:"balance_id,omitempty"` + BalanceID string `json:"balance_id"` } // SetTrustLineFlags is the json resource representing a single operation whose type is diff --git a/protocols/horizon/operations/main_test.go b/protocols/horizon/operations/main_test.go new file mode 100644 index 0000000000..b08a0d5f25 --- /dev/null +++ b/protocols/horizon/operations/main_test.go @@ -0,0 +1,32 @@ +package operations + +import ( + "errors" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/stellar/go/xdr" +) + +func TestTypeNamesAllCovered(t *testing.T) { + for typ, s := range xdr.OperationTypeToStringMap { + _, ok := TypeNames[xdr.OperationType(typ)] + assert.True(t, ok, s) + } +} + +func TestUnmarshalOperationAllCovered(t *testing.T) { + mistmatchErr := errors.New("Invalid operation format, unable to unmarshal json response") + for typ, s := range xdr.OperationTypeToStringMap { + _, err := UnmarshalOperation(typ, []byte{}) + assert.Error(t, err, s) + // it should be a parsing error, not the default branch + assert.NotEqual(t, mistmatchErr, err, s) + } + + // make sure the check works for an unknown operation type + _, err := UnmarshalOperation(200000, []byte{}) + assert.Error(t, err) + assert.Equal(t, mistmatchErr, err) +} diff --git a/services/friendbot/docker/Dockerfile b/services/friendbot/docker/Dockerfile index da9fdbe2bd..e02b0f4fbd 100644 --- a/services/friendbot/docker/Dockerfile +++ b/services/friendbot/docker/Dockerfile @@ -1,12 +1,12 @@ -FROM golang:1.16.2 as build +FROM golang:1.16.3 as build ADD . /src/friendbot WORKDIR /src/friendbot RUN go build -o /bin/friendbot ./services/friendbot -FROM ubuntu:18.04 +FROM ubuntu:20.04 -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ca-certificates COPY --from=build /bin/friendbot /app/ EXPOSE 8004 ENTRYPOINT ["/app/friendbot"] diff --git a/services/horizon/CHANGELOG.md b/services/horizon/CHANGELOG.md index c5c14c9d67..729b2c004e 100644 --- a/services/horizon/CHANGELOG.md +++ b/services/horizon/CHANGELOG.md @@ -5,7 +5,46 @@ file. This project adheres to [Semantic Versioning](http://semver.org/). ## Unreleased -* Add `claimable_balances` to asset stat summaries at `/assets` ([3502](https://github.com/stellar/go/pull/3502)). +### DB Schema change + +* This release comes with a small DB schema change (new multiplexed-account-related columns are incororated). It should not take more than five minutes to run due to new columns being NULL-able. + +### New features + +* Refactor `ingest/ledgerbackend/LedgerBackend.GetLedger` method to always block, removing `ingest/ledgerbackend/LedgerBackend.GetLedgerBlocking`. Adds a first `context.Context` param to most `LedgerBackend` methods. + +* Add more in-depth Prometheus metrics (count & duration) for db queries. + +* Fix bug in `horizon db reingest range` command which required the `--ingest` flag to be set ([3625](https://github.com/stellar/go/pull/3625)). + +* Deprecate `--captive-core-config-append-path` in favor of `--captive-core-config-path`. The difference between the two flags is that `--captive-core-config-path` will validate the configuration file to reject any fields which are not supported by captive core ([3629](https://github.com/stellar/go/pull/3629)). + +* Add Multiplexed Account details to API responses (additional `_muxed` and `_muxed_id` optional fields following what's described in [SEP 23](https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0023.md#horizon-api-changes)): + * Transactions: `account_muxed`, `account_muxed_id`, `fee_account` and `fee_account_muxed`. + * Operations: `source_account_muxed`, `source_account_muxed_id` and additional fields depending on the operation (e.g. `from_muxed`, `from_muxed_id`, `to_muxed` and `to_muxed_id` for Payment operations) + * Effects: `account_muxed`, `account_muxed_id` and additional fields depending on the effect (e.g. `seller_muxed` and `seller_muxed_id` for the Trade effect). + +## v2.3.0 + +**Upgrading to this version from <= v2.1.1 will trigger a state rebuild. During this process (which can take up to 20 minutes), Horizon will not ingest new ledgers.** + +### New features +* Introduces a flag (`--ro-database-url` / `RO_DATABASE_URL`) which allows setting a connection to a read-replica database. This flag makes Horizon take into account data propagation lag to the replica instance, adding retries if the data is out of sync ([3574](https://github.com/stellar/go/pull/3574)). + +### Code changes +* Improved test suite coverage and stability ([3560](https://github.com/stellar/go/pull/3560), [3562](https://github.com/stellar/go/pull/3562), [3551](https://github.com/stellar/go/pull/3551), and [3547](https://github.com/stellar/go/pull/3547)). + +* Improved session handling and timeouts ([3576](https://github.com/stellar/go/pull/3576), [3545](https://github.com/stellar/go/pull/3545), and [3567](https://github.com/stellar/go/pull/3567)). + +* Improved stability of Captive Core's configuration options. Specifically, it will now prefer either the command-line parameter (e.g. `--captive-core-peer-port` or its env-var equivalent) or the user-supplied append file (`--captive-core-append-path`) over Horizon's internal defaults. However, if a value is set in *both* the append file and at the command-line, an error will be thrown unless both values are equal ([3558](https://github.com/stellar/go/pull/3558)). + + +## v2.2.0 + +**Upgrading to this version will trigger state rebuild. During this process (which can take up to 20 minutes) it will not ingest new ledgers.** + +* Add `num_claimable_balances` and `claimable_balances_amount` fields to asset stat summaries at `/assets` ([3502](https://github.com/stellar/go/pull/3502)). +* Improve ingestion reliability when running multiple Horizon ingestion instances ([3518](https://github.com/stellar/go/pull/3518)). ## v2.1.1 @@ -19,6 +58,13 @@ file. This project adheres to [Semantic Versioning](http://semver.org/). **The migration will be performed by the ingestion system (through a state rebuild) and, thus, if some of your Horizon nodes are not ingestors (i.e. no `--ingestion` flag enabled) you may experience 500s in the `GET /claimable_balances/` requests until an ingestion node is upgraded. Also, it's worth noting that the rebuild process will take several minutes and no new ledgers will be ingested until the rebuild is finished.** +### Breaking changes + +* Add a flag `--captive-core-storage-path/CAPTIVE_CORE_STORAGE_PATH` that allows users to control the storage location for Captive Core bucket data ([3479](https://github.com/stellar/go/pull/3479)). + - Previously, Horizon created a directory in `/tmp` to store Captive Core bucket data. Now, if the captive core storage path flag is not set, Horizon will default to using the current working directory. +* Add a flag `--captive-core-log-path`/`CAPTIVE_CORE_LOG_PATH` that allows users to control the location of the logs emitted by Captive Core ([3472](https://github.com/stellar/go/pull/3472)). If you have a `LOG_FILE_PATH` entry in your Captive Core toml file remove that entry and use the horizon flag instead. +* `--stellar-core-db-url` / `STELLAR_CORE_DATABASE_URL` should only be configured if Horizon ingestion is enabled otherwise Horizon will not start ([3477](https://github.com/stellar/go/pull/3477)). + ### New features * Add an endpoint which determines if Horizon is healthy enough to receive traffic ([3435](https://github.com/stellar/go/pull/3435)). @@ -26,7 +72,6 @@ file. This project adheres to [Semantic Versioning](http://semver.org/). * Add asset stat summaries per trust-line flag category ([3454](https://github.com/stellar/go/pull/3454)). - The `amount`, and `num_accounts` fields in `/assets` endpoint are deprecated. Fields will be removed in Horizon 3.0. You can find the same data under `balances.authorized`, and `accounts.authorized`, respectively. * Add a flag `--captive-core-peer-port`/`CAPTIVE_CORE_PEER_PORT` that allows users to control which port the Captive Core subprocess will bind to for connecting to the Stellar swarm. ([3483](https://github.com/stellar/go/pull/3484)). -* Add a flag `--captive-core-storage-path/CAPTIVE_CORE_STORAGE_PATH` that allows users to control the storage location for Captive Core bucket data ([3479](https://github.com/stellar/go/pull/3479)). * Add 2 new HTTP endpoints `GET claimable_balances/{id}/transactions` and `GET claimable_balances/{id}/operations`, which respectively return the transactions and operations related to a provided Claimable Balance Identifier `{id}`. * Add Stellar Protocol 16 support. This release comes with support for Protocol 16 ([CAP 35](https://github.com/stellar/stellar-protocol/blob/master/core/cap-0035.md): asset clawback). See [the downstream SDK issue template](https://gist.github.com/2opremio/89c4775104635382d51b6f5e41cbf6d5) for details on what changed on Horizon's side. For full details, please read [CAP 35](https://github.com/stellar/stellar-protocol/blob/master/core/cap-0035.md). diff --git a/services/horizon/cmd/db.go b/services/horizon/cmd/db.go index 640a94e742..7cc5b3d1c9 100644 --- a/services/horizon/cmd/db.go +++ b/services/horizon/cmd/db.go @@ -1,6 +1,7 @@ package cmd import ( + "context" "database/sql" "fmt" "go/types" @@ -113,8 +114,9 @@ var dbReapCmd = &cobra.Command{ Long: "reap removes any historical data that is earlier than the configured retention cutoff", Run: func(cmd *cobra.Command, args []string) { app := horizon.NewAppFromFlags(config, flags) - app.UpdateLedgerState() - err := app.DeleteUnretainedHistory() + ctx := context.Background() + app.UpdateLedgerState(ctx) + err := app.DeleteUnretainedHistory(ctx) if err != nil { log.Fatal(err) } @@ -200,16 +202,18 @@ var dbReingestRangeCmd = &cobra.Command{ argsUInt32 := make([]uint32, 2) for i, arg := range args { - seq, err := strconv.Atoi(arg) - if err != nil { + if seq, err := strconv.Atoi(arg); err != nil { cmd.Usage() log.Fatalf(`Invalid sequence number "%s"`, arg) + } else if seq < 0 { + log.Fatalf("sequence number %s cannot be negative", arg) + } else { + argsUInt32[i] = uint32(seq) } - argsUInt32[i] = uint32(seq) } - horizon.ApplyFlags(config, flags) - err := RunDBReingestRange(argsUInt32[0], argsUInt32[1], reingestForce, parallelWorkers, *config) + horizon.ApplyFlags(config, flags, horizon.ApplyOptions{RequireCaptiveCoreConfig: false, AlwaysIngest: true}) + err := runDBReingestRange(argsUInt32[0], argsUInt32[1], reingestForce, parallelWorkers, *config) if err != nil { if errors.Cause(err) == ingest.ErrReingestRangeConflict { message := ` @@ -230,7 +234,7 @@ var dbReingestRangeCmd = &cobra.Command{ }, } -func RunDBReingestRange(from, to uint32, reingestForce bool, parallelWorkers uint, config horizon.Config) error { +func runDBReingestRange(from, to uint32, reingestForce bool, parallelWorkers uint, config horizon.Config) error { if reingestForce && parallelWorkers > 1 { return errors.New("--force is incompatible with --parallel-workers > 1") } @@ -249,7 +253,10 @@ func RunDBReingestRange(from, to uint32, reingestForce bool, parallelWorkers uin EnableCaptiveCore: config.EnableCaptiveCoreIngestion, CaptiveCoreBinaryPath: config.CaptiveCoreBinaryPath, RemoteCaptiveCoreURL: config.RemoteCaptiveCoreURL, - CaptiveCoreConfigAppendPath: config.CaptiveCoreConfigAppendPath, + CaptiveCoreToml: config.CaptiveCoreToml, + CaptiveCoreStoragePath: config.CaptiveCoreStoragePath, + StellarCoreCursor: config.CursorName, + StellarCoreURL: config.StellarCoreURL, } if !ingestConfig.EnableCaptiveCore { @@ -298,7 +305,7 @@ func init() { viper.BindPFlags(dbReingestRangeCmd.PersistentFlags()) - rootCmd.AddCommand(dbCmd) + RootCmd.AddCommand(dbCmd) dbCmd.AddCommand( dbInitCmd, dbMigrateCmd, diff --git a/services/horizon/cmd/ingest.go b/services/horizon/cmd/ingest.go index 1063941463..fab195fac2 100644 --- a/services/horizon/cmd/ingest.go +++ b/services/horizon/cmd/ingest.go @@ -1,6 +1,7 @@ package cmd import ( + "context" "fmt" "go/types" "net/http" @@ -70,7 +71,7 @@ var ingestVerifyRangeCmd = &cobra.Command{ co.SetValue() } - horizon.ApplyFlags(config, flags) + horizon.ApplyFlags(config, flags, horizon.ApplyOptions{RequireCaptiveCoreConfig: false, AlwaysIngest: true}) if ingestVerifyDebugServerPort != 0 { go func() { @@ -169,7 +170,7 @@ var ingestStressTestCmd = &cobra.Command{ co.SetValue() } - horizon.ApplyFlags(config, flags) + horizon.ApplyFlags(config, flags, horizon.ApplyOptions{RequireCaptiveCoreConfig: false, AlwaysIngest: true}) horizonSession, err := db.Open("postgres", config.DatabaseURL) if err != nil { @@ -227,7 +228,8 @@ var ingestTriggerStateRebuildCmd = &cobra.Command{ Use: "trigger-state-rebuild", Short: "updates a database to trigger state rebuild, state will be rebuilt by a running Horizon instance, DO NOT RUN production DB, some endpoints will be unavailable until state is rebuilt", Run: func(cmd *cobra.Command, args []string) { - horizon.ApplyFlags(config, flags) + ctx := context.Background() + horizon.ApplyFlags(config, flags, horizon.ApplyOptions{RequireCaptiveCoreConfig: false, AlwaysIngest: true}) horizonSession, err := db.Open("postgres", config.DatabaseURL) if err != nil { @@ -235,7 +237,7 @@ var ingestTriggerStateRebuildCmd = &cobra.Command{ } historyQ := &history.Q{horizonSession} - err = historyQ.UpdateIngestVersion(0) + err = historyQ.UpdateIngestVersion(ctx, 0) if err != nil { log.Fatalf("cannot trigger state rebuild: %v", err) } @@ -248,7 +250,8 @@ var ingestInitGenesisStateCmd = &cobra.Command{ Use: "init-genesis-state", Short: "ingests genesis state (ledger 1)", Run: func(cmd *cobra.Command, args []string) { - horizon.ApplyFlags(config, flags) + ctx := context.Background() + horizon.ApplyFlags(config, flags, horizon.ApplyOptions{RequireCaptiveCoreConfig: false, AlwaysIngest: true}) horizonSession, err := db.Open("postgres", config.DatabaseURL) if err != nil { @@ -257,7 +260,7 @@ var ingestInitGenesisStateCmd = &cobra.Command{ historyQ := &history.Q{horizonSession} - lastIngestedLedger, err := historyQ.GetLastLedgerIngestNonBlocking() + lastIngestedLedger, err := historyQ.GetLastLedgerIngestNonBlocking(ctx) if err != nil { log.Fatalf("cannot get last ledger value: %v", err) } @@ -319,7 +322,7 @@ func init() { viper.BindPFlags(ingestVerifyRangeCmd.PersistentFlags()) - rootCmd.AddCommand(ingestCmd) + RootCmd.AddCommand(ingestCmd) ingestCmd.AddCommand( ingestVerifyRangeCmd, ingestStressTestCmd, diff --git a/services/horizon/cmd/root.go b/services/horizon/cmd/root.go index 5f6a88f862..92f5980256 100644 --- a/services/horizon/cmd/root.go +++ b/services/horizon/cmd/root.go @@ -12,7 +12,7 @@ import ( var ( config, flags = horizon.Flags() - rootCmd = &cobra.Command{ + RootCmd = &cobra.Command{ Use: "horizon", Short: "client-facing api server for the Stellar network", Long: "Client-facing API server for the Stellar network. It acts as the interface between Stellar Core and applications that want to access the Stellar network. It allows you to submit transactions to the network, check the status of accounts, subscribe to event streams and more.", @@ -23,14 +23,14 @@ var ( ) func init() { - err := flags.Init(rootCmd) + err := flags.Init(RootCmd) if err != nil { stdLog.Fatal(err.Error()) } } func Execute() { - if err := rootCmd.Execute(); err != nil { + if err := RootCmd.Execute(); err != nil { fmt.Println(err) os.Exit(1) } diff --git a/services/horizon/cmd/serve.go b/services/horizon/cmd/serve.go index 812f07f4c3..f88e2d6e8e 100644 --- a/services/horizon/cmd/serve.go +++ b/services/horizon/cmd/serve.go @@ -15,5 +15,5 @@ var serveCmd = &cobra.Command{ } func init() { - rootCmd.AddCommand(serveCmd) + RootCmd.AddCommand(serveCmd) } diff --git a/services/horizon/cmd/version.go b/services/horizon/cmd/version.go index 3187c73daa..cbfedb0a66 100644 --- a/services/horizon/cmd/version.go +++ b/services/horizon/cmd/version.go @@ -19,5 +19,5 @@ var versionCmd = &cobra.Command{ } func init() { - rootCmd.AddCommand(versionCmd) + RootCmd.AddCommand(versionCmd) } diff --git a/services/horizon/docker/Dockerfile.dev b/services/horizon/docker/Dockerfile.dev index ba4ed08075..ee58351666 100644 --- a/services/horizon/docker/Dockerfile.dev +++ b/services/horizon/docker/Dockerfile.dev @@ -1,4 +1,4 @@ -FROM golang:1.16.2 AS builder +FROM golang:1.16.3 AS builder WORKDIR /go/src/github.com/stellar/go COPY go.mod go.sum ./ @@ -7,17 +7,17 @@ COPY . ./ RUN go install github.com/stellar/go/services/horizon RUN go install github.com/stellar/go/exp/services/captivecore -FROM ubuntu:18.04 +FROM ubuntu:20.04 -ENV STELLAR_CORE_VERSION 15.0.0-40 +ENV STELLAR_CORE_VERSION 17.0.0-568.ea5878e.focal ENV STELLAR_CORE_BINARY_PATH /usr/bin/stellar-core ENV DEBIAN_FRONTEND=noninteractive # ca-certificates are required to make tls connections RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl wget gnupg apt-utils RUN wget -qO - https://apt.stellar.org/SDF.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=true apt-key add - -RUN echo "deb https://apt.stellar.org xenial stable" >/etc/apt/sources.list.d/SDF.list -RUN echo "deb https://apt.stellar.org xenial unstable" >/etc/apt/sources.list.d/SDF-unstable.list +RUN echo "deb https://apt.stellar.org focal stable" >/etc/apt/sources.list.d/SDF.list +RUN echo "deb https://apt.stellar.org focal unstable" >/etc/apt/sources.list.d/SDF-unstable.list RUN apt-get update && apt-get install -y stellar-core=${STELLAR_CORE_VERSION} RUN apt-get clean @@ -25,3 +25,4 @@ COPY --from=builder /go/bin/horizon ./ COPY --from=builder /go/bin/captivecore ./ ENTRYPOINT ["./horizon"] + diff --git a/services/horizon/docker/core-start.sh b/services/horizon/docker/core-start.sh index 89e90fba91..aea5db249f 100755 --- a/services/horizon/docker/core-start.sh +++ b/services/horizon/docker/core-start.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash set -e +set -x source /etc/profile @@ -23,4 +24,4 @@ if [ "$1" = "standalone" ]; then popd fi -exec /init -- stellar-core run \ No newline at end of file +exec stellar-core run diff --git a/services/horizon/docker/docker-compose.integration-tests.yml b/services/horizon/docker/docker-compose.integration-tests.yml index 0be467e074..0618bc90b4 100644 --- a/services/horizon/docker/docker-compose.integration-tests.yml +++ b/services/horizon/docker/docker-compose.integration-tests.yml @@ -10,7 +10,7 @@ services: - "5641:5641" command: ["-p", "5641"] core: - image: ${CORE_IMAGE:-stellar/stellar-core} + image: ${CORE_IMAGE:-stellar/stellar-core:v17.0.0} depends_on: - core-postgres restart: on-failure diff --git a/services/horizon/docker/verify-range/Dockerfile b/services/horizon/docker/verify-range/Dockerfile index dbbb123e42..13a4a3207a 100644 --- a/services/horizon/docker/verify-range/Dockerfile +++ b/services/horizon/docker/verify-range/Dockerfile @@ -1,8 +1,8 @@ -FROM ubuntu:18.04 +FROM ubuntu:20.04 MAINTAINER Bartek Nowotarski -ENV STELLAR_CORE_VERSION 15.0.0-40 +ENV STELLAR_CORE_VERSION 16.0.0-529.0e35ac6.focal # to remove tzdata interactive flow ENV DEBIAN_FRONTEND=noninteractive diff --git a/services/horizon/docker/verify-range/dependencies b/services/horizon/docker/verify-range/dependencies index af62303c8e..958d2c58ed 100644 --- a/services/horizon/docker/verify-range/dependencies +++ b/services/horizon/docker/verify-range/dependencies @@ -10,8 +10,8 @@ echo "deb https://apt.stellar.org/public stable/" | tee -a /etc/apt/sources.list apt-get update apt-get install -y stellar-core -wget https://dl.google.com/go/go1.16.2.linux-amd64.tar.gz -tar -C /usr/local -xzf go1.16.2.linux-amd64.tar.gz +wget https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz +tar -C /usr/local -xzf go1.16.3.linux-amd64.tar.gz # configure postgres service postgresql start @@ -22,4 +22,8 @@ sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';" git clone https://github.com/stellar/go.git stellar-go cd stellar-go +# By default "git fetch" only fetches refs/ +# Below ensures we also fetch PR refs +git config --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pull/*" +git fetch --force --quiet origin /usr/local/go/bin/go build -v ./services/horizon diff --git a/services/horizon/internal/action_offers_test.go b/services/horizon/internal/action_offers_test.go index b354e71ad1..737afe2fac 100644 --- a/services/horizon/internal/action_offers_test.go +++ b/services/horizon/internal/action_offers_test.go @@ -1,6 +1,7 @@ package horizon import ( + "context" "encoding/json" "testing" "time" @@ -15,14 +16,15 @@ func TestOfferActions_Show(t *testing.T) { ht := StartHTTPTestWithoutScenario(t) defer ht.Finish() q := &history.Q{ht.HorizonSession()} + ctx := context.Background() - err := q.UpdateLastLedgerIngest(100) + err := q.UpdateLastLedgerIngest(ctx, 100) ht.Assert.NoError(err) - err = q.UpdateIngestVersion(ingest.CurrentVersion) + err = q.UpdateIngestVersion(ctx, ingest.CurrentVersion) ht.Assert.NoError(err) ledgerCloseTime := time.Now().Unix() - _, err = q.InsertLedger(xdr.LedgerHeaderHistoryEntry{ + _, err = q.InsertLedger(ctx, xdr.LedgerHeaderHistoryEntry{ Header: xdr.LedgerHeader{ LedgerSeq: 100, ScpValue: xdr.StellarValue{ @@ -67,11 +69,11 @@ func TestOfferActions_Show(t *testing.T) { } batch := q.NewOffersBatchInsertBuilder(3) - err = batch.Add(eurOffer) + err = batch.Add(ctx, eurOffer) ht.Assert.NoError(err) - err = batch.Add(usdOffer) + err = batch.Add(ctx, usdOffer) ht.Assert.NoError(err) - ht.Assert.NoError(batch.Exec()) + ht.Assert.NoError(batch.Exec(ctx)) w := ht.Get("/offers") if ht.Assert.Equal(200, w.Code) { diff --git a/services/horizon/internal/actions/account.go b/services/horizon/internal/actions/account.go index 3555c6619a..a6d4278fc6 100644 --- a/services/horizon/internal/actions/account.go +++ b/services/horizon/internal/actions/account.go @@ -26,27 +26,27 @@ func AccountInfo(ctx context.Context, hq *history.Q, addr string) (*protocol.Acc resouce protocol.Account ) - record, err := hq.GetAccountByID(addr) + record, err := hq.GetAccountByID(ctx, addr) if err != nil { return nil, errors.Wrap(err, "getting history account record") } - data, err = hq.GetAccountDataByAccountID(addr) + data, err = hq.GetAccountDataByAccountID(ctx, addr) if err != nil { return nil, errors.Wrap(err, "getting history account data") } - signers, err = hq.GetAccountSignersByAccountID(addr) + signers, err = hq.GetAccountSignersByAccountID(ctx, addr) if err != nil { return nil, errors.Wrap(err, "getting history signers") } - trustlines, err = hq.GetSortedTrustLinesByAccountID(addr) + trustlines, err = hq.GetSortedTrustLinesByAccountID(ctx, addr) if err != nil { return nil, errors.Wrap(err, "getting history trustlines") } - ledger, err := getLedgerBySequence(hq, int32(record.LastModifiedLedger)) + ledger, err := getLedgerBySequence(ctx, hq, int32(record.LastModifiedLedger)) if err != nil { return nil, err } @@ -149,17 +149,17 @@ func (handler GetAccountsHandler) GetResourcePage( var records []history.AccountEntry if len(qp.Sponsor) > 0 { - records, err = historyQ.AccountsForSponsor(qp.Sponsor, pq) + records, err = historyQ.AccountsForSponsor(ctx, qp.Sponsor, pq) if err != nil { return nil, errors.Wrap(err, "loading account records") } } else if len(qp.Signer) > 0 { - records, err = historyQ.AccountEntriesForSigner(qp.Signer, pq) + records, err = historyQ.AccountEntriesForSigner(ctx, qp.Signer, pq) if err != nil { return nil, errors.Wrap(err, "loading account records") } } else { - records, err = historyQ.AccountsForAsset(*qp.Asset(), pq) + records, err = historyQ.AccountsForAsset(ctx, *qp.Asset(), pq) if err != nil { return nil, errors.Wrap(err, "loading account records") } @@ -177,17 +177,17 @@ func (handler GetAccountsHandler) GetResourcePage( accountIDs = append(accountIDs, record.AccountID) } - signers, err := handler.loadSigners(historyQ, accountIDs) + signers, err := handler.loadSigners(ctx, historyQ, accountIDs) if err != nil { return nil, err } - trustlines, err := handler.loadTrustlines(historyQ, accountIDs) + trustlines, err := handler.loadTrustlines(ctx, historyQ, accountIDs) if err != nil { return nil, err } - data, err := handler.loadData(historyQ, accountIDs) + data, err := handler.loadData(ctx, historyQ, accountIDs) if err != nil { return nil, err } @@ -197,7 +197,7 @@ func (handler GetAccountsHandler) GetResourcePage( ledgerCache.Queue(int32(record.LastModifiedLedger)) } - if err := ledgerCache.Load(historyQ); err != nil { + if err := ledgerCache.Load(ctx, historyQ); err != nil { return nil, errors.Wrap(err, "failed to load ledger batch") } @@ -218,10 +218,10 @@ func (handler GetAccountsHandler) GetResourcePage( return accounts, nil } -func (handler GetAccountsHandler) loadData(historyQ *history.Q, accounts []string) (map[string][]history.Data, error) { +func (handler GetAccountsHandler) loadData(ctx context.Context, historyQ *history.Q, accounts []string) (map[string][]history.Data, error) { data := make(map[string][]history.Data) - records, err := historyQ.GetAccountDataByAccountsID(accounts) + records, err := historyQ.GetAccountDataByAccountsID(ctx, accounts) if err != nil { return data, errors.Wrap(err, "loading account data records by accounts id") } @@ -233,10 +233,10 @@ func (handler GetAccountsHandler) loadData(historyQ *history.Q, accounts []strin return data, nil } -func (handler GetAccountsHandler) loadTrustlines(historyQ *history.Q, accounts []string) (map[string][]history.TrustLine, error) { +func (handler GetAccountsHandler) loadTrustlines(ctx context.Context, historyQ *history.Q, accounts []string) (map[string][]history.TrustLine, error) { trustLines := make(map[string][]history.TrustLine) - records, err := historyQ.GetSortedTrustLinesByAccountIDs(accounts) + records, err := historyQ.GetSortedTrustLinesByAccountIDs(ctx, accounts) if err != nil { return trustLines, errors.Wrap(err, "loading trustline records by accounts") } @@ -248,10 +248,10 @@ func (handler GetAccountsHandler) loadTrustlines(historyQ *history.Q, accounts [ return trustLines, nil } -func (handler GetAccountsHandler) loadSigners(historyQ *history.Q, accounts []string) (map[string][]history.AccountSigner, error) { +func (handler GetAccountsHandler) loadSigners(ctx context.Context, historyQ *history.Q, accounts []string) (map[string][]history.AccountSigner, error) { signers := make(map[string][]history.AccountSigner) - records, err := historyQ.SignersForAccounts(accounts) + records, err := historyQ.SignersForAccounts(ctx, accounts) if err != nil { return signers, errors.Wrap(err, "loading account signers by account") } @@ -263,9 +263,9 @@ func (handler GetAccountsHandler) loadSigners(historyQ *history.Q, accounts []st return signers, nil } -func getLedgerBySequence(hq *history.Q, sequence int32) (*history.Ledger, error) { +func getLedgerBySequence(ctx context.Context, hq *history.Q, sequence int32) (*history.Ledger, error) { ledger := &history.Ledger{} - err := hq.LedgerBySequence(ledger, sequence) + err := hq.LedgerBySequence(ctx, ledger, sequence) switch { case hq.NoRows(err): return nil, nil diff --git a/services/horizon/internal/actions/account_data.go b/services/horizon/internal/actions/account_data.go index f0a3224e35..9b3e7e499c 100644 --- a/services/horizon/internal/actions/account_data.go +++ b/services/horizon/internal/actions/account_data.go @@ -60,7 +60,7 @@ func loadAccountData(r *http.Request) (history.Data, error) { if err != nil { return history.Data{}, err } - data, err := historyQ.GetAccountDataByName(qp.AccountID, qp.Key) + data, err := historyQ.GetAccountDataByName(r.Context(), qp.AccountID, qp.Key) if err != nil { return history.Data{}, err } diff --git a/services/horizon/internal/actions/account_test.go b/services/horizon/internal/actions/account_test.go index a192d8ce0f..404160b07b 100644 --- a/services/horizon/internal/actions/account_test.go +++ b/services/horizon/internal/actions/account_test.go @@ -240,13 +240,13 @@ func TestAccountInfo(t *testing.T) { }, } batch := q.NewAccountsBatchInsertBuilder(0) - err := batch.Add(accountEntry) + err := batch.Add(tt.Ctx, accountEntry) assert.NoError(t, err) - assert.NoError(t, batch.Exec()) + assert.NoError(t, batch.Exec(tt.Ctx)) tt.Assert.NoError(err) - _, err = q.InsertTrustLine(xdr.LedgerEntry{ + _, err = q.InsertTrustLine(tt.Ctx, xdr.LedgerEntry{ LastModifiedLedgerSeq: 6, Data: xdr.LedgerEntryData{ Type: xdr.LedgerEntryTypeTrustline, @@ -264,7 +264,7 @@ func TestAccountInfo(t *testing.T) { }) assert.NoError(t, err) - _, err = q.InsertTrustLine(xdr.LedgerEntry{ + _, err = q.InsertTrustLine(tt.Ctx, xdr.LedgerEntry{ LastModifiedLedgerSeq: 1234, Data: xdr.LedgerEntryData{ Type: xdr.LedgerEntryTypeTrustline, @@ -283,7 +283,7 @@ func TestAccountInfo(t *testing.T) { assert.NoError(t, err) ledgerFourCloseTime := time.Now().Unix() - _, err = q.InsertLedger(xdr.LedgerHeaderHistoryEntry{ + _, err = q.InsertLedger(tt.Ctx, xdr.LedgerHeaderHistoryEntry{ Header: xdr.LedgerHeader{ LedgerSeq: 4, ScpValue: xdr.StellarValue{ @@ -339,7 +339,7 @@ func TestGetAccountsHandlerPageNoResults(t *testing.T) { "signer": signer, }, map[string]string{}, - q.Session, + q, ), ) tt.Assert.NoError(err) @@ -355,16 +355,16 @@ func TestGetAccountsHandlerPageResultsBySigner(t *testing.T) { handler := &GetAccountsHandler{} batch := q.NewAccountsBatchInsertBuilder(0) - err := batch.Add(account1) + err := batch.Add(tt.Ctx, account1) assert.NoError(t, err) - err = batch.Add(account2) + err = batch.Add(tt.Ctx, account2) assert.NoError(t, err) - err = batch.Add(account3) + err = batch.Add(tt.Ctx, account3) assert.NoError(t, err) - assert.NoError(t, batch.Exec()) + assert.NoError(t, batch.Exec(tt.Ctx)) for _, row := range accountSigners { - q.CreateAccountSigner(row.Account, row.Signer, row.Weight, nil) + q.CreateAccountSigner(tt.Ctx, row.Account, row.Signer, row.Weight, nil) } records, err := handler.GetResourcePage( @@ -375,7 +375,7 @@ func TestGetAccountsHandlerPageResultsBySigner(t *testing.T) { "signer": signer, }, map[string]string{}, - q.Session, + q, ), ) @@ -405,7 +405,7 @@ func TestGetAccountsHandlerPageResultsBySigner(t *testing.T) { "cursor": accountOne, }, map[string]string{}, - q.Session, + q, ), ) @@ -435,16 +435,16 @@ func TestGetAccountsHandlerPageResultsBySponsor(t *testing.T) { handler := &GetAccountsHandler{} batch := q.NewAccountsBatchInsertBuilder(0) - err := batch.Add(account1) + err := batch.Add(tt.Ctx, account1) assert.NoError(t, err) - err = batch.Add(account2) + err = batch.Add(tt.Ctx, account2) assert.NoError(t, err) - err = batch.Add(account3) + err = batch.Add(tt.Ctx, account3) assert.NoError(t, err) - assert.NoError(t, batch.Exec()) + assert.NoError(t, batch.Exec(tt.Ctx)) for _, row := range accountSigners { - q.CreateAccountSigner(row.Account, row.Signer, row.Weight, nil) + q.CreateAccountSigner(tt.Ctx, row.Account, row.Signer, row.Weight, nil) } records, err := handler.GetResourcePage( @@ -455,7 +455,7 @@ func TestGetAccountsHandlerPageResultsBySponsor(t *testing.T) { "sponsor": sponsor.Address(), }, map[string]string{}, - q.Session, + q, ), ) @@ -473,13 +473,13 @@ func TestGetAccountsHandlerPageResultsByAsset(t *testing.T) { handler := &GetAccountsHandler{} batch := q.NewAccountsBatchInsertBuilder(0) - err := batch.Add(account1) + err := batch.Add(tt.Ctx, account1) assert.NoError(t, err) - err = batch.Add(account2) + err = batch.Add(tt.Ctx, account2) assert.NoError(t, err) - assert.NoError(t, batch.Exec()) + assert.NoError(t, batch.Exec(tt.Ctx)) ledgerCloseTime := time.Now().Unix() - _, err = q.InsertLedger(xdr.LedgerHeaderHistoryEntry{ + _, err = q.InsertLedger(tt.Ctx, xdr.LedgerHeaderHistoryEntry{ Header: xdr.LedgerHeader{ LedgerSeq: 1234, ScpValue: xdr.StellarValue{ @@ -490,13 +490,13 @@ func TestGetAccountsHandlerPageResultsByAsset(t *testing.T) { assert.NoError(t, err) for _, row := range accountSigners { - _, err = q.CreateAccountSigner(row.Account, row.Signer, row.Weight, nil) + _, err = q.CreateAccountSigner(tt.Ctx, row.Account, row.Signer, row.Weight, nil) tt.Assert.NoError(err) } - _, err = q.InsertAccountData(data1) + _, err = q.InsertAccountData(tt.Ctx, data1) assert.NoError(t, err) - _, err = q.InsertAccountData(data2) + _, err = q.InsertAccountData(tt.Ctx, data2) assert.NoError(t, err) var assetType, code, issuer string @@ -511,16 +511,16 @@ func TestGetAccountsHandlerPageResultsByAsset(t *testing.T) { t, params, map[string]string{}, - q.Session, + q, ), ) tt.Assert.NoError(err) tt.Assert.Equal(0, len(records)) - _, err = q.InsertTrustLine(eurTrustLine) + _, err = q.InsertTrustLine(tt.Ctx, eurTrustLine) assert.NoError(t, err) - _, err = q.InsertTrustLine(usdTrustLine) + _, err = q.InsertTrustLine(tt.Ctx, usdTrustLine) assert.NoError(t, err) records, err = handler.GetResourcePage( @@ -529,7 +529,7 @@ func TestGetAccountsHandlerPageResultsByAsset(t *testing.T) { t, params, map[string]string{}, - q.Session, + q, ), ) @@ -613,7 +613,7 @@ func TestGetAccountsHandlerInvalidParams(t *testing.T) { t, tc.params, map[string]string{}, - q.Session, + q, ), ) tt.Assert.Error(err) diff --git a/services/horizon/internal/actions/asset.go b/services/horizon/internal/actions/asset.go index 8b014dc1d1..86dee222e3 100644 --- a/services/horizon/internal/actions/asset.go +++ b/services/horizon/internal/actions/asset.go @@ -1,12 +1,13 @@ package actions import ( + "context" "fmt" "net/http" "strings" "github.com/stellar/go/protocols/horizon" - "github.com/stellar/go/services/horizon/internal/context" + horizonContext "github.com/stellar/go/services/horizon/internal/context" "github.com/stellar/go/services/horizon/internal/db2" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/services/horizon/internal/ledger" @@ -78,6 +79,7 @@ func (handler AssetStatsHandler) validateAssetParams(code, issuer string, pq db2 } func (handler AssetStatsHandler) findIssuersForAssets( + ctx context.Context, historyQ *history.Q, assetStats []history.ExpAssetStat, ) (map[string]history.AccountEntry, error) { @@ -92,7 +94,7 @@ func (handler AssetStatsHandler) findIssuersForAssets( } accountsByID := map[string]history.AccountEntry{} - accounts, err := historyQ.GetAccountsByIDs(issuers) + accounts, err := historyQ.GetAccountsByIDs(ctx, issuers) if err != nil { return nil, err } @@ -134,17 +136,17 @@ func (handler AssetStatsHandler) GetResourcePage( return nil, err } - historyQ, err := context.HistoryQFromRequest(r) + historyQ, err := horizonContext.HistoryQFromRequest(r) if err != nil { return nil, err } - assetStats, err := historyQ.GetAssetStats(code, issuer, pq) + assetStats, err := historyQ.GetAssetStats(ctx, code, issuer, pq) if err != nil { return nil, err } - issuerAccounts, err := handler.findIssuersForAssets(historyQ, assetStats) + issuerAccounts, err := handler.findIssuersForAssets(ctx, historyQ, assetStats) if err != nil { return nil, err } diff --git a/services/horizon/internal/actions/asset_test.go b/services/horizon/internal/actions/asset_test.go index c8416a5292..e0233fedc7 100644 --- a/services/horizon/internal/actions/asset_test.go +++ b/services/horizon/internal/actions/asset_test.go @@ -303,7 +303,7 @@ func TestAssetStats(t *testing.T) { otherUSDAssetStat, usdAssetStat, } { - numChanged, err := q.InsertAssetStat(assetStat) + numChanged, err := q.InsertAssetStat(tt.Ctx, assetStat) tt.Assert.NoError(err) tt.Assert.Equal(numChanged, int64(1)) } @@ -326,9 +326,9 @@ func TestAssetStats(t *testing.T) { t.Fatalf("unexpected error %v", err) } batch := q.NewAccountsBatchInsertBuilder(0) - err := batch.Add(accountEntry) + err := batch.Add(tt.Ctx, accountEntry) tt.Assert.NoError(err) - tt.Assert.NoError(batch.Exec()) + tt.Assert.NoError(batch.Exec(tt.Ctx)) } for _, testCase := range []struct { @@ -407,7 +407,7 @@ func TestAssetStats(t *testing.T) { }, } { t.Run(testCase.name, func(t *testing.T) { - r := makeRequest(t, testCase.queryParams, map[string]string{}, q.Session) + r := makeRequest(t, testCase.queryParams, map[string]string{}, q) results, err := handler.GetResourcePage(httptest.NewRecorder(), r) assert.NoError(t, err) @@ -446,11 +446,11 @@ func TestAssetStatsIssuerDoesNotExist(t *testing.T) { Amount: "1", NumAccounts: 2, } - numChanged, err := q.InsertAssetStat(usdAssetStat) + numChanged, err := q.InsertAssetStat(tt.Ctx, usdAssetStat) tt.Assert.NoError(err) tt.Assert.Equal(numChanged, int64(1)) - r := makeRequest(t, map[string]string{}, map[string]string{}, q.Session) + r := makeRequest(t, map[string]string{}, map[string]string{}, q) results, err := handler.GetResourcePage(httptest.NewRecorder(), r) tt.Assert.NoError(err) diff --git a/services/horizon/internal/actions/claimable_balance.go b/services/horizon/internal/actions/claimable_balance.go index 9e6bbea6e2..c5953d13a9 100644 --- a/services/horizon/internal/actions/claimable_balance.go +++ b/services/horizon/internal/actions/claimable_balance.go @@ -64,12 +64,12 @@ func (handler GetClaimableBalanceByIDHandler) GetResource(w HeaderWriter, r *htt if err != nil { return nil, err } - cb, err := historyQ.FindClaimableBalanceByID(balanceID) + cb, err := historyQ.FindClaimableBalanceByID(ctx, balanceID) if err != nil { return nil, err } ledger := &history.Ledger{} - err = historyQ.LedgerBySequence( + err = historyQ.LedgerBySequence(ctx, ledger, int32(cb.LastModifiedLedger), ) @@ -179,7 +179,7 @@ func (handler GetClaimableBalancesHandler) GetResourcePage( } func getClaimableBalancesPage(ctx context.Context, historyQ *history.Q, query history.ClaimableBalancesQuery) ([]hal.Pageable, error) { - records, err := historyQ.GetClaimableBalances(query) + records, err := historyQ.GetClaimableBalances(ctx, query) if err != nil { return nil, err } @@ -188,7 +188,7 @@ func getClaimableBalancesPage(ctx context.Context, historyQ *history.Q, query hi for _, record := range records { ledgerCache.Queue(int32(record.LastModifiedLedger)) } - if err := ledgerCache.Load(historyQ); err != nil { + if err := ledgerCache.Load(ctx, historyQ); err != nil { return nil, errors.Wrap(err, "failed to load ledger batch") } diff --git a/services/horizon/internal/actions/claimable_balance_test.go b/services/horizon/internal/actions/claimable_balance_test.go index d50f27ac53..540aa0fa4e 100644 --- a/services/horizon/internal/actions/claimable_balance_test.go +++ b/services/horizon/internal/actions/claimable_balance_test.go @@ -52,10 +52,10 @@ func TestGetClaimableBalanceByID(t *testing.T) { builder := q.NewClaimableBalancesBatchInsertBuilder(2) - err := builder.Add(&entry) + err := builder.Add(tt.Ctx, &entry) tt.Assert.NoError(err) - err = builder.Exec() + err = builder.Exec(tt.Ctx) tt.Assert.NoError(err) tt.Assert.NoError(err) @@ -67,7 +67,7 @@ func TestGetClaimableBalanceByID(t *testing.T) { t, map[string]string{}, map[string]string{"id": id}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -85,7 +85,7 @@ func TestGetClaimableBalanceByID(t *testing.T) { t, map[string]string{}, map[string]string{"id": id}, - q.Session, + q, )) tt.Assert.Error(err) tt.Assert.True(q.NoRows(errors.Cause(err))) @@ -95,7 +95,7 @@ func TestGetClaimableBalanceByID(t *testing.T) { t, map[string]string{}, map[string]string{"id": "0000001112122"}, - q.Session, + q, )) tt.Assert.Error(err) p := err.(*problem.P) @@ -108,7 +108,7 @@ func TestGetClaimableBalanceByID(t *testing.T) { t, map[string]string{}, map[string]string{"id": ""}, - q.Session, + q, )) tt.Assert.Error(err) p = err.(*problem.P) @@ -200,11 +200,11 @@ func TestGetClaimableBalances(t *testing.T) { for _, e := range entriesMeta { entry := buildClaimableBalance(e.id, e.accountID, e.ledger, e.asset) entries = append(entries, entry) - err := builder.Add(&entry) + err := builder.Add(tt.Ctx, &entry) tt.Assert.NoError(err) } - err := builder.Exec() + err := builder.Exec(tt.Ctx) tt.Assert.NoError(err) handler := GetClaimableBalancesHandler{} @@ -212,7 +212,7 @@ func TestGetClaimableBalances(t *testing.T) { t, map[string]string{}, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) tt.Assert.Len(response, 4) @@ -230,7 +230,7 @@ func TestGetClaimableBalances(t *testing.T) { "cursor": response[3].(protocol.ClaimableBalance).PagingToken(), }, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) tt.Assert.Len(response, 0) @@ -240,7 +240,7 @@ func TestGetClaimableBalances(t *testing.T) { t, map[string]string{"limit": "2"}, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) tt.Assert.Len(response, 2) @@ -259,7 +259,7 @@ func TestGetClaimableBalances(t *testing.T) { "cursor": response[1].(protocol.ClaimableBalance).PagingToken(), }, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -281,7 +281,7 @@ func TestGetClaimableBalances(t *testing.T) { "cursor": lastIngestedCursor, }, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -293,7 +293,7 @@ func TestGetClaimableBalances(t *testing.T) { SponsoringId: xdr.MustAddressPtr("GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML"), } entryToBeUpdated.LastModifiedLedgerSeq = xdr.Uint32(1238) - q.UpdateClaimableBalance(entryToBeUpdated) + q.UpdateClaimableBalance(tt.Ctx, entryToBeUpdated) entriesMeta = []struct { id xdr.Hash @@ -319,17 +319,17 @@ func TestGetClaimableBalances(t *testing.T) { for _, e := range entriesMeta { entry := buildClaimableBalance(e.id, e.accountID, e.ledger, e.asset) entries = append(entries, entry) - tt.Assert.NoError(builder.Add(&entry)) + tt.Assert.NoError(builder.Add(tt.Ctx, &entry)) } - err = builder.Exec() + err = builder.Exec(tt.Ctx) tt.Assert.NoError(err) response, err = handler.GetResourcePage(httptest.NewRecorder(), makeRequest( t, map[string]string{}, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -342,7 +342,7 @@ func TestGetClaimableBalances(t *testing.T) { "cursor": lastIngestedCursor, }, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -361,7 +361,7 @@ func TestGetClaimableBalances(t *testing.T) { "cursor": response[1].(protocol.ClaimableBalance).PagingToken(), }, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -378,7 +378,7 @@ func TestGetClaimableBalances(t *testing.T) { "cursor": response[0].(protocol.ClaimableBalance).PagingToken(), }, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -392,7 +392,7 @@ func TestGetClaimableBalances(t *testing.T) { "order": "desc", }, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -414,7 +414,7 @@ func TestGetClaimableBalances(t *testing.T) { "cursor": response[1].(protocol.ClaimableBalance).PagingToken(), }, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -431,7 +431,7 @@ func TestGetClaimableBalances(t *testing.T) { "asset": native.StringCanonical(), }, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -450,7 +450,7 @@ func TestGetClaimableBalances(t *testing.T) { "asset": usd.StringCanonical(), }, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -469,7 +469,7 @@ func TestGetClaimableBalances(t *testing.T) { "asset": euro.StringCanonical(), }, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -488,7 +488,7 @@ func TestGetClaimableBalances(t *testing.T) { "sponsor": "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", }, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -507,7 +507,7 @@ func TestGetClaimableBalances(t *testing.T) { "claimant": "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", }, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -519,7 +519,7 @@ func TestGetClaimableBalances(t *testing.T) { "claimant": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", }, map[string]string{}, - q.Session, + q, )) tt.Assert.NoError(err) @@ -539,7 +539,7 @@ func TestCursorAndOrderValidation(t *testing.T) { "cursor": "-1-00000043d380c38a2f2cac46ab63674064c56fdce6b977fdef1a278ad50e1a7e6a5e18", }, map[string]string{}, - q.Session, + q, )) p := err.(*problem.P) tt.Assert.Equal("bad_request", p.Type) @@ -552,7 +552,7 @@ func TestCursorAndOrderValidation(t *testing.T) { "cursor": "1003529-00000043d380c38a2f2cac46ab63674064c56fdce6b977fdef1a278ad50e1a7e6a5e18", }, map[string]string{}, - q.Session, + q, )) p = err.(*problem.P) tt.Assert.Equal("bad_request", p.Type) @@ -566,7 +566,7 @@ func TestCursorAndOrderValidation(t *testing.T) { "cursor": "1003529-00000043d380c38a2f2cac46ab63674064c56fdce6b977fdef1a278ad50e1a7e6a5e18", }, map[string]string{}, - q.Session, + q, )) p = err.(*problem.P) tt.Assert.Equal("bad_request", p.Type) diff --git a/services/horizon/internal/actions/effects.go b/services/horizon/internal/actions/effects.go index aaa0d502f3..4625583f64 100644 --- a/services/horizon/internal/actions/effects.go +++ b/services/horizon/internal/actions/effects.go @@ -1,9 +1,10 @@ package actions import ( + "context" "net/http" - "github.com/stellar/go/services/horizon/internal/context" + horizonContext "github.com/stellar/go/services/horizon/internal/context" "github.com/stellar/go/services/horizon/internal/db2" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/services/horizon/internal/ledger" @@ -64,17 +65,17 @@ func (handler GetEffectsHandler) GetResourcePage(w HeaderWriter, r *http.Request return nil, err } - historyQ, err := context.HistoryQFromRequest(r) + historyQ, err := horizonContext.HistoryQFromRequest(r) if err != nil { return nil, err } - records, err := loadEffectRecords(historyQ, qp.AccountID, int64(qp.OperationID), qp.TxHash, qp.LedgerID, pq) + records, err := loadEffectRecords(r.Context(), historyQ, qp.AccountID, int64(qp.OperationID), qp.TxHash, qp.LedgerID, pq) if err != nil { return nil, errors.Wrap(err, "loading transaction records") } - ledgers, err := loadEffectLedgers(historyQ, records) + ledgers, err := loadEffectLedgers(r.Context(), historyQ, records) if err != nil { return nil, errors.Wrap(err, "loading ledgers") } @@ -91,35 +92,35 @@ func (handler GetEffectsHandler) GetResourcePage(w HeaderWriter, r *http.Request return result, nil } -func loadEffectRecords(hq *history.Q, accountID string, operationID int64, transactionHash string, ledgerID uint32, +func loadEffectRecords(ctx context.Context, hq *history.Q, accountID string, operationID int64, transactionHash string, ledgerID uint32, pq db2.PageQuery) ([]history.Effect, error) { effects := hq.Effects() switch { case accountID != "": - effects.ForAccount(accountID) + effects.ForAccount(ctx, accountID) case ledgerID > 0: - effects.ForLedger(int32(ledgerID)) + effects.ForLedger(ctx, int32(ledgerID)) case operationID > 0: effects.ForOperation(operationID) case transactionHash != "": - effects.ForTransaction(transactionHash) + effects.ForTransaction(ctx, transactionHash) } var result []history.Effect - err := effects.Page(pq).Select(&result) + err := effects.Page(pq).Select(ctx, &result) return result, err } -func loadEffectLedgers(hq *history.Q, effects []history.Effect) (map[int32]history.Ledger, error) { +func loadEffectLedgers(ctx context.Context, hq *history.Q, effects []history.Effect) (map[int32]history.Ledger, error) { ledgers := &history.LedgerCache{} for _, e := range effects { ledgers.Queue(e.LedgerSequence()) } - if err := ledgers.Load(hq); err != nil { + if err := ledgers.Load(ctx, hq); err != nil { return nil, err } return ledgers.Records, nil diff --git a/services/horizon/internal/actions/helpers_test.go b/services/horizon/internal/actions/helpers_test.go index d64c738225..eb17e709af 100644 --- a/services/horizon/internal/actions/helpers_test.go +++ b/services/horizon/internal/actions/helpers_test.go @@ -508,7 +508,7 @@ func makeRequest( t *testing.T, queryParams map[string]string, routeParams map[string]string, - session *db.Session, + session db.SessionInterface, ) *http.Request { request, err := http.NewRequest("GET", "/", nil) if err != nil { diff --git a/services/horizon/internal/actions/ledger.go b/services/horizon/internal/actions/ledger.go index db1ead097d..37fddb5bd9 100644 --- a/services/horizon/internal/actions/ledger.go +++ b/services/horizon/internal/actions/ledger.go @@ -33,7 +33,7 @@ func (handler GetLedgersHandler) GetResourcePage(w HeaderWriter, r *http.Request } var records []history.Ledger - if err = historyQ.Ledgers().Page(pq).Select(&records); err != nil { + if err = historyQ.Ledgers().Page(pq).Select(r.Context(), &records); err != nil { return nil, err } @@ -73,7 +73,7 @@ func (handler GetLedgerByIDHandler) GetResource(w HeaderWriter, r *http.Request) return nil, err } var ledger history.Ledger - err = historyQ.LedgerBySequence(&ledger, int32(qp.LedgerID)) + err = historyQ.LedgerBySequence(r.Context(), &ledger, int32(qp.LedgerID)) if err != nil { return nil, err } diff --git a/services/horizon/internal/actions/offer.go b/services/horizon/internal/actions/offer.go index a8456dda2e..c5de593c4b 100644 --- a/services/horizon/internal/actions/offer.go +++ b/services/horizon/internal/actions/offer.go @@ -35,13 +35,14 @@ func (handler GetOfferByID) GetResource(w HeaderWriter, r *http.Request) (interf return nil, err } - record, err := historyQ.GetOfferByID(int64(qp.OfferID)) + record, err := historyQ.GetOfferByID(r.Context(), int64(qp.OfferID)) if err != nil { return nil, err } ledger := &history.Ledger{} err = historyQ.LedgerBySequence( + r.Context(), ledger, int32(record.LastModifiedLedger), ) @@ -181,7 +182,7 @@ func (handler GetAccountOffersHandler) GetResourcePage( } func getOffersPage(ctx context.Context, historyQ *history.Q, query history.OffersQuery) ([]hal.Pageable, error) { - records, err := historyQ.GetOffers(query) + records, err := historyQ.GetOffers(ctx, query) if err != nil { return nil, err } @@ -191,7 +192,7 @@ func getOffersPage(ctx context.Context, historyQ *history.Q, query history.Offer ledgerCache.Queue(int32(record.LastModifiedLedger)) } - if err := ledgerCache.Load(historyQ); err != nil { + if err := ledgerCache.Load(ctx, historyQ); err != nil { return nil, errors.Wrap(err, "failed to load ledger batch") } diff --git a/services/horizon/internal/actions/offer_test.go b/services/horizon/internal/actions/offer_test.go index 19bff5c350..781265aaf0 100644 --- a/services/horizon/internal/actions/offer_test.go +++ b/services/horizon/internal/actions/offer_test.go @@ -79,7 +79,7 @@ func TestGetOfferByIDHandler(t *testing.T) { handler := GetOfferByID{} ledgerCloseTime := time.Now().Unix() - _, err := q.InsertLedger(xdr.LedgerHeaderHistoryEntry{ + _, err := q.InsertLedger(tt.Ctx, xdr.LedgerHeaderHistoryEntry{ Header: xdr.LedgerHeader{ LedgerSeq: 3, ScpValue: xdr.StellarValue{ @@ -90,11 +90,11 @@ func TestGetOfferByIDHandler(t *testing.T) { tt.Assert.NoError(err) batch := q.NewOffersBatchInsertBuilder(0) - err = batch.Add(eurOffer) + err = batch.Add(tt.Ctx, eurOffer) tt.Assert.NoError(err) - err = batch.Add(usdOffer) + err = batch.Add(tt.Ctx, usdOffer) tt.Assert.NoError(err) - tt.Assert.NoError(batch.Exec()) + tt.Assert.NoError(batch.Exec(tt.Ctx)) for _, testCase := range []struct { name string @@ -105,7 +105,7 @@ func TestGetOfferByIDHandler(t *testing.T) { { "offer id is invalid", makeRequest( - t, map[string]string{}, map[string]string{"offer_id": "invalid"}, q.Session, + t, map[string]string{}, map[string]string{"offer_id": "invalid"}, q, ), func(err error) { tt.Assert.Error(err) @@ -121,7 +121,7 @@ func TestGetOfferByIDHandler(t *testing.T) { { "offer does not exist", makeRequest( - t, map[string]string{}, map[string]string{"offer_id": "1234567"}, q.Session, + t, map[string]string{}, map[string]string{"offer_id": "1234567"}, q, ), func(err error) { tt.Assert.Equal(err, sql.ErrNoRows) @@ -133,7 +133,7 @@ func TestGetOfferByIDHandler(t *testing.T) { { "offer with ledger close time", makeRequest( - t, map[string]string{}, map[string]string{"offer_id": "4"}, q.Session, + t, map[string]string{}, map[string]string{"offer_id": "4"}, q, ), func(err error) { tt.Assert.NoError(err) @@ -153,7 +153,7 @@ func TestGetOfferByIDHandler(t *testing.T) { { "offer without ledger close time", makeRequest( - t, map[string]string{}, map[string]string{"offer_id": "6"}, q.Session, + t, map[string]string{}, map[string]string{"offer_id": "6"}, q, ), func(err error) { tt.Assert.NoError(err) @@ -190,7 +190,7 @@ func TestGetOffersHandler(t *testing.T) { handler := GetOffersHandler{} ledgerCloseTime := time.Now().Unix() - _, err := q.InsertLedger(xdr.LedgerHeaderHistoryEntry{ + _, err := q.InsertLedger(tt.Ctx, xdr.LedgerHeaderHistoryEntry{ Header: xdr.LedgerHeader{ LedgerSeq: 3, ScpValue: xdr.StellarValue{ @@ -201,19 +201,19 @@ func TestGetOffersHandler(t *testing.T) { tt.Assert.NoError(err) batch := q.NewOffersBatchInsertBuilder(0) - err = batch.Add(eurOffer) + err = batch.Add(tt.Ctx, eurOffer) tt.Assert.NoError(err) - err = batch.Add(twoEurOffer) + err = batch.Add(tt.Ctx, twoEurOffer) tt.Assert.NoError(err) - err = batch.Add(usdOffer) + err = batch.Add(tt.Ctx, usdOffer) tt.Assert.NoError(err) - tt.Assert.NoError(batch.Exec()) + tt.Assert.NoError(batch.Exec(tt.Ctx)) t.Run("No filter", func(t *testing.T) { records, err := handler.GetResourcePage( httptest.NewRecorder(), makeRequest( - t, map[string]string{}, map[string]string{}, q.Session, + t, map[string]string{}, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -239,7 +239,7 @@ func TestGetOffersHandler(t *testing.T) { "seller": issuer.Address(), }, map[string]string{}, - q.Session, + q, ), ) tt.Assert.NoError(err) @@ -258,7 +258,7 @@ func TestGetOffersHandler(t *testing.T) { "seller": "GCXEWJ6U4KPGTNTBY5HX4WQ2EEVPWV2QKXEYIQ32IDYIX", }, map[string]string{}, - q.Session, + q, ), ) tt.Assert.Error(err) @@ -281,7 +281,7 @@ func TestGetOffersHandler(t *testing.T) { "sponsor": sponsor.Address(), }, map[string]string{}, - q.Session, + q, ), ) tt.Assert.NoError(err) @@ -298,7 +298,7 @@ func TestGetOffersHandler(t *testing.T) { "sponsor": "GCXEWJ6U4KPGTNTBY5HX4WQ2EEVPWV2QKXEYIQ32IDYIX", }, map[string]string{}, - q.Session, + q, ), ) tt.Assert.Error(err) @@ -323,7 +323,7 @@ func TestGetOffersHandler(t *testing.T) { "selling_asset_type": asset.Type, }, map[string]string{}, - q.Session, + q, ), ) tt.Assert.NoError(err) @@ -347,7 +347,7 @@ func TestGetOffersHandler(t *testing.T) { "selling_asset_issuer": asset.Issuer, }, map[string]string{}, - q.Session, + q, ), ) tt.Assert.NoError(err) @@ -364,7 +364,7 @@ func TestGetOffersHandler(t *testing.T) { "selling": asset.Code + ":" + asset.Issuer, }, map[string]string{}, - q.Session, + q, ), ) tt.Assert.NoError(err) @@ -388,7 +388,7 @@ func TestGetOffersHandler(t *testing.T) { "buying_asset_issuer": asset.Issuer, }, map[string]string{}, - q.Session, + q, ), ) tt.Assert.NoError(err) @@ -412,7 +412,7 @@ func TestGetOffersHandler(t *testing.T) { "buying_asset_issuer": asset.Issuer, }, map[string]string{}, - q.Session, + q, ), ) tt.Assert.NoError(err) @@ -431,7 +431,7 @@ func TestGetOffersHandler(t *testing.T) { "buying": asset.Code + ":" + asset.Issuer, }, map[string]string{}, - q.Session, + q, ), ) tt.Assert.NoError(err) @@ -455,7 +455,7 @@ func TestGetOffersHandler(t *testing.T) { "buying": `native\\u0026cursor=\\u0026limit=10\\u0026order=asc\\u0026selling=BTC:GAEDZ7BHMDYEMU6IJT3CTTGDUSLZWS5CQWZHGP4XUOIDG5ISH3AFAEK2`, }, map[string]string{}, - q.Session, + q, ), ) tt.Assert.Error(err) @@ -478,12 +478,12 @@ func TestGetAccountOffersHandler(t *testing.T) { handler := GetAccountOffersHandler{} batch := q.NewOffersBatchInsertBuilder(0) - err := batch.Add(eurOffer) - err = batch.Add(twoEurOffer) + err := batch.Add(tt.Ctx, eurOffer) + err = batch.Add(tt.Ctx, twoEurOffer) tt.Assert.NoError(err) - err = batch.Add(usdOffer) + err = batch.Add(tt.Ctx, usdOffer) tt.Assert.NoError(err) - tt.Assert.NoError(batch.Exec()) + tt.Assert.NoError(batch.Exec(tt.Ctx)) records, err := handler.GetResourcePage( httptest.NewRecorder(), @@ -491,7 +491,7 @@ func TestGetAccountOffersHandler(t *testing.T) { t, map[string]string{}, map[string]string{"account_id": issuer.Address()}, - q.Session, + q, ), ) tt.Assert.NoError(err) @@ -509,7 +509,7 @@ func TestGetAccountOffersHandler(t *testing.T) { t, map[string]string{}, map[string]string{}, - q.Session, + q, ), ) tt.Assert.Error(err) diff --git a/services/horizon/internal/actions/operation.go b/services/horizon/internal/actions/operation.go index 8bc16dc5de..505ebd08d8 100644 --- a/services/horizon/internal/actions/operation.go +++ b/services/horizon/internal/actions/operation.go @@ -94,17 +94,17 @@ func (handler GetOperationsHandler) GetResourcePage(w HeaderWriter, r *http.Requ switch { case qp.AccountID != "": - query.ForAccount(qp.AccountID) + query.ForAccount(ctx, qp.AccountID) case qp.ClaimableBalanceID != "": cbID, parseErr := balanceIDHex2XDR(qp.ClaimableBalanceID, "claimable_balance_id") if parseErr != nil { return nil, parseErr } - query.ForClaimableBalance(cbID) + query.ForClaimableBalance(ctx, cbID) case qp.LedgerID > 0: - query.ForLedger(int32(qp.LedgerID)) + query.ForLedger(ctx, int32(qp.LedgerID)) case qp.TransactionHash != "": - query.ForTransaction(qp.TransactionHash) + query.ForTransaction(ctx, qp.TransactionHash) } // When querying operations for transaction return both successful // and failed operations. We assume that because the user is querying @@ -121,7 +121,7 @@ func (handler GetOperationsHandler) GetResourcePage(w HeaderWriter, r *http.Requ query.OnlyPayments() } - ops, txs, err := query.Page(pq).Fetch() + ops, txs, err := query.Page(pq).Fetch(ctx) if err != nil { return nil, err } @@ -165,13 +165,13 @@ func (handler GetOperationByIDHandler) GetResource(w HeaderWriter, r *http.Reque if err != nil { return nil, err } - op, tx, err := historyQ.OperationByID(qp.IncludeTransactions(), int64(qp.ID)) + op, tx, err := historyQ.OperationByID(ctx, qp.IncludeTransactions(), int64(qp.ID)) if err != nil { return nil, err } var ledger history.Ledger - err = historyQ.LedgerBySequence(&ledger, op.LedgerSequence()) + err = historyQ.LedgerBySequence(ctx, &ledger, op.LedgerSequence()) if err != nil { return nil, err } @@ -191,7 +191,7 @@ func buildOperationsPage(ctx context.Context, historyQ *history.Q, operations [] ledgerCache.Queue(record.LedgerSequence()) } - if err := ledgerCache.Load(historyQ); err != nil { + if err := ledgerCache.Load(ctx, historyQ); err != nil { return nil, errors.Wrap(err, "failed to load ledger batch") } diff --git a/services/horizon/internal/actions/operation_test.go b/services/horizon/internal/actions/operation_test.go index 555236a475..ac18e3e877 100644 --- a/services/horizon/internal/actions/operation_test.go +++ b/services/horizon/internal/actions/operation_test.go @@ -27,7 +27,7 @@ func TestGetOperationsWithoutFilter(t *testing.T) { records, err := handler.GetResourcePage( httptest.NewRecorder(), makeRequest( - t, map[string]string{}, map[string]string{}, q.Session, + t, map[string]string{}, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -73,7 +73,7 @@ func TestGetOperationsExclusiveFilters(t *testing.T) { _, err := handler.GetResourcePage( httptest.NewRecorder(), makeRequest( - t, tc.query, map[string]string{}, q.Session, + t, tc.query, map[string]string{}, q, ), ) tt.Assert.IsType(&supportProblem.P{}, err) @@ -121,7 +121,7 @@ func TestGetOperationsFilterByAccountID(t *testing.T) { makeRequest( t, map[string]string{ "account_id": tc.accountID, - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -179,7 +179,7 @@ func TestGetOperationsFilterByTxID(t *testing.T) { makeRequest( t, map[string]string{ "tx_id": tc.transactionID, - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) @@ -217,7 +217,7 @@ func TestGetOperationsIncludeFailed(t *testing.T) { makeRequest( t, map[string]string{ "limit": "200", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -243,7 +243,7 @@ func TestGetOperationsIncludeFailed(t *testing.T) { t, map[string]string{ "include_failed": "true", "limit": "200", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -268,7 +268,7 @@ func TestGetOperationsIncludeFailed(t *testing.T) { makeRequest( t, map[string]string{ "tx_id": "aa168f12124b7c196c0adaee7c73a64d37f99428cacb59a91ff389626845e7cf", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -283,7 +283,7 @@ func TestGetOperationsIncludeFailed(t *testing.T) { makeRequest( t, map[string]string{ "tx_id": "56e3216045d579bea40f2d35a09406de3a894ecb5be70dbda5ec9c0427a0d5a1", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -294,7 +294,7 @@ func TestGetOperationsIncludeFailed(t *testing.T) { } // NULL value - _, err = tt.HorizonSession().ExecRaw( + _, err = tt.HorizonSession().ExecRaw(tt.Ctx, `UPDATE history_transactions SET successful = NULL WHERE transaction_hash = ?`, "56e3216045d579bea40f2d35a09406de3a894ecb5be70dbda5ec9c0427a0d5a1", ) @@ -305,7 +305,7 @@ func TestGetOperationsIncludeFailed(t *testing.T) { makeRequest( t, map[string]string{ "tx_id": "56e3216045d579bea40f2d35a09406de3a894ecb5be70dbda5ec9c0427a0d5a1", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -320,7 +320,7 @@ func TestGetOperationsIncludeFailed(t *testing.T) { makeRequest( t, map[string]string{ "include_failed": "foo", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.Error(err) @@ -381,7 +381,7 @@ func TestGetOperationsFilterByLedgerID(t *testing.T) { makeRequest( t, map[string]string{ "ledger_id": tc.ledgerID, - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) if tc.expectedErr == "" { @@ -418,7 +418,7 @@ func TestGetOperationsOnlyPayments(t *testing.T) { records, err := handler.GetResourcePage( httptest.NewRecorder(), makeRequest( - t, map[string]string{}, map[string]string{}, q.Session, + t, map[string]string{}, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -429,7 +429,7 @@ func TestGetOperationsOnlyPayments(t *testing.T) { makeRequest( t, map[string]string{ "ledger_id": "1", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -440,7 +440,7 @@ func TestGetOperationsOnlyPayments(t *testing.T) { makeRequest( t, map[string]string{ "ledger_id": "3", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -451,7 +451,7 @@ func TestGetOperationsOnlyPayments(t *testing.T) { makeRequest( t, map[string]string{ "account_id": "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -464,7 +464,7 @@ func TestGetOperationsOnlyPayments(t *testing.T) { makeRequest( t, map[string]string{ "tx_id": "b52f16ffb98c047e33b9c2ec30880330cde71f85b3443dae2c5cb86c7d4d8452", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -475,7 +475,7 @@ func TestGetOperationsOnlyPayments(t *testing.T) { makeRequest( t, map[string]string{ "tx_id": "1d2a4be72470658f68db50eef29ea0af3f985ce18b5c218f03461d40c47dc292", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -498,13 +498,13 @@ func TestOperation_CreatedAt(t *testing.T) { makeRequest( t, map[string]string{ "ledger_id": "3", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) l := history.Ledger{} - tt.Assert.NoError(q.LedgerBySequence(&l, 3)) + tt.Assert.NoError(q.LedgerBySequence(tt.Ctx, &l, 3)) record := records[0].(operations.Payment) @@ -526,7 +526,7 @@ func TestGetOperationsPagination(t *testing.T) { t, map[string]string{ "order": "asc", "limit": "1", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -538,7 +538,7 @@ func TestGetOperationsPagination(t *testing.T) { t, map[string]string{ "limit": "1", "order": "desc", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -550,7 +550,7 @@ func TestGetOperationsPagination(t *testing.T) { t, map[string]string{ "order": "desc", "cursor": "12884905985", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -562,7 +562,7 @@ func TestGetOperationsPagination(t *testing.T) { t, map[string]string{ "order": "desc", "cursor": "0", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.Error(err) @@ -582,7 +582,7 @@ func TestGetOperations_IncludeTransactions(t *testing.T) { makeRequest( t, map[string]string{ "join": "accounts", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.Error(err) @@ -601,7 +601,7 @@ func TestGetOperations_IncludeTransactions(t *testing.T) { t, map[string]string{ "join": "transactions", "limit": "1", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -615,7 +615,7 @@ func TestGetOperations_IncludeTransactions(t *testing.T) { makeRequest( t, map[string]string{ "limit": "1", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) diff --git a/services/horizon/internal/actions/orderbook.go b/services/horizon/internal/actions/orderbook.go index aca7a8ed68..c00d5ceae4 100644 --- a/services/horizon/internal/actions/orderbook.go +++ b/services/horizon/internal/actions/orderbook.go @@ -100,7 +100,7 @@ func (handler GetOrderbookHandler) GetResource(w HeaderWriter, r *http.Request) return nil, err } - summary, err := historyQ.GetOrderBookSummary(selling, buying, int(limit)) + summary, err := historyQ.GetOrderBookSummary(r.Context(), selling, buying, int(limit)) if err != nil { return nil, err } diff --git a/services/horizon/internal/actions/orderbook_test.go b/services/horizon/internal/actions/orderbook_test.go index 3c1c25f28d..6413360778 100644 --- a/services/horizon/internal/actions/orderbook_test.go +++ b/services/horizon/internal/actions/orderbook_test.go @@ -574,19 +574,19 @@ func TestOrderbookGetResource(t *testing.T) { otherSellEurOffer, } - assert.NoError(t, q.TruncateTables([]string{"offers"})) + assert.NoError(t, q.TruncateTables(tt.Ctx, []string{"offers"})) batch := q.NewOffersBatchInsertBuilder(0) for _, offer := range offers { - assert.NoError(t, batch.Add(offer)) + assert.NoError(t, batch.Add(tt.Ctx, offer)) } - assert.NoError(t, batch.Exec()) + assert.NoError(t, batch.Exec(tt.Ctx)) - assert.NoError(t, q.BeginTx(&sql.TxOptions{ + assert.NoError(t, q.BeginTx(tt.Ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, })) - defer q.Rollback() + defer q.Rollback(tt.Ctx) fullResponse := empty fullResponse.Asks = []protocol.PriceLevel{ @@ -659,7 +659,7 @@ func TestOrderbookGetResource(t *testing.T) { "limit": strconv.Itoa(testCase.limit), }, map[string]string{}, - q.Session, + q, ) w := httptest.NewRecorder() response, err := handler.GetResource(w, r) diff --git a/services/horizon/internal/actions/path.go b/services/horizon/internal/actions/path.go index 680b99332d..6ea093cba6 100644 --- a/services/horizon/internal/actions/path.go +++ b/services/horizon/internal/actions/path.go @@ -334,5 +334,5 @@ func assetsForAddress(r *http.Request, addy string) ([]xdr.Asset, []xdr.Int64, e if err != nil { return nil, nil, err } - return historyQ.AssetsForAddress(addy) + return historyQ.AssetsForAddress(r.Context(), addy) } diff --git a/services/horizon/internal/actions/trade.go b/services/horizon/internal/actions/trade.go index 5cce1cd2a3..2d639afb11 100644 --- a/services/horizon/internal/actions/trade.go +++ b/services/horizon/internal/actions/trade.go @@ -1,13 +1,14 @@ package actions import ( + "context" "fmt" "net/http" "strconv" gTime "time" "github.com/stellar/go/protocols/horizon" - "github.com/stellar/go/services/horizon/internal/context" + horizonContext "github.com/stellar/go/services/horizon/internal/context" "github.com/stellar/go/services/horizon/internal/db2" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/services/horizon/internal/ledger" @@ -125,7 +126,7 @@ func (handler GetTradesHandler) GetResourcePage(w HeaderWriter, r *http.Request) return nil, err } - historyQ, err := context.HistoryQFromRequest(r) + historyQ, err := horizonContext.HistoryQFromRequest(r) if err != nil { return nil, err } @@ -133,7 +134,7 @@ func (handler GetTradesHandler) GetResourcePage(w HeaderWriter, r *http.Request) trades := historyQ.Trades() if qp.AccountID != "" { - trades.ForAccount(qp.AccountID) + trades.ForAccount(ctx, qp.AccountID) } baseAsset, err := qp.Base() @@ -142,7 +143,7 @@ func (handler GetTradesHandler) GetResourcePage(w HeaderWriter, r *http.Request) } if baseAsset != nil { - baseAssetID, err2 := historyQ.GetAssetID(*baseAsset) + baseAssetID, err2 := historyQ.GetAssetID(ctx, *baseAsset) if err2 != nil { return nil, err2 } @@ -152,7 +153,7 @@ func (handler GetTradesHandler) GetResourcePage(w HeaderWriter, r *http.Request) return nil, err2 } - counterAssetID, err2 := historyQ.GetAssetID(*counterAsset) + counterAssetID, err2 := historyQ.GetAssetID(ctx, *counterAsset) if err2 != nil { return nil, err2 } @@ -164,7 +165,7 @@ func (handler GetTradesHandler) GetResourcePage(w HeaderWriter, r *http.Request) } var records []history.Trade - if err = trades.Page(pq).Select(&records); err != nil { + if err = trades.Page(ctx, pq).Select(ctx, &records); err != nil { return nil, err } var response []hal.Pageable @@ -256,12 +257,12 @@ func (handler GetTradeAggregationsHandler) GetResource(w HeaderWriter, r *http.R return nil, err } - historyQ, err := context.HistoryQFromRequest(r) + historyQ, err := horizonContext.HistoryQFromRequest(r) if err != nil { return nil, err } - records, err := handler.fetchRecords(historyQ, qp, pq) + records, err := handler.fetchRecords(ctx, historyQ, qp, pq) if err != nil { return nil, err } @@ -279,13 +280,13 @@ func (handler GetTradeAggregationsHandler) GetResource(w HeaderWriter, r *http.R return handler.buildPage(r, aggregations) } -func (handler GetTradeAggregationsHandler) fetchRecords(historyQ *history.Q, qp TradeAggregationsQuery, pq db2.PageQuery) ([]history.TradeAggregation, error) { +func (handler GetTradeAggregationsHandler) fetchRecords(ctx context.Context, historyQ *history.Q, qp TradeAggregationsQuery, pq db2.PageQuery) ([]history.TradeAggregation, error) { baseAsset, err := qp.Base() if err != nil { return nil, err } - baseAssetID, err := historyQ.GetAssetID(*baseAsset) + baseAssetID, err := historyQ.GetAssetID(ctx, *baseAsset) if err != nil { p := problem.BadRequest if historyQ.NoRows(err) { @@ -304,7 +305,7 @@ func (handler GetTradeAggregationsHandler) fetchRecords(historyQ *history.Q, qp return nil, err } - counterAssetID, err := historyQ.GetAssetID(*counterAsset) + counterAssetID, err := historyQ.GetAssetID(ctx, *counterAsset) if err != nil { p := problem.BadRequest if historyQ.NoRows(err) { @@ -358,7 +359,7 @@ func (handler GetTradeAggregationsHandler) fetchRecords(historyQ *history.Q, qp } var records []history.TradeAggregation - err = historyQ.Select(&records, tradeAggregationsQ.GetSql()) + err = historyQ.Select(ctx, &records, tradeAggregationsQ.GetSql()) if err != nil { return nil, err } diff --git a/services/horizon/internal/actions/transaction.go b/services/horizon/internal/actions/transaction.go index 392ab69f1d..1491878e38 100644 --- a/services/horizon/internal/actions/transaction.go +++ b/services/horizon/internal/actions/transaction.go @@ -1,10 +1,11 @@ package actions import ( + "context" "net/http" "github.com/stellar/go/protocols/horizon" - "github.com/stellar/go/services/horizon/internal/context" + horizonContext "github.com/stellar/go/services/horizon/internal/context" "github.com/stellar/go/services/horizon/internal/db2" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/services/horizon/internal/ledger" @@ -33,7 +34,7 @@ func (handler GetTransactionByHashHandler) GetResource(w HeaderWriter, r *http.R return nil, err } - historyQ, err := context.HistoryQFromRequest(r) + historyQ, err := horizonContext.HistoryQFromRequest(r) if err != nil { return nil, err } @@ -43,7 +44,7 @@ func (handler GetTransactionByHashHandler) GetResource(w HeaderWriter, r *http.R resource horizon.Transaction ) - err = historyQ.TransactionByHash(&record, qp.TransactionHash) + err = historyQ.TransactionByHash(ctx, &record, qp.TransactionHash) if err != nil { return resource, errors.Wrap(err, "loading transaction record") } @@ -109,7 +110,7 @@ func (handler GetTransactionsHandler) GetResourcePage(w HeaderWriter, r *http.Re return nil, err } - historyQ, err := context.HistoryQFromRequest(r) + historyQ, err := horizonContext.HistoryQFromRequest(r) if err != nil { return nil, err } @@ -123,7 +124,7 @@ func (handler GetTransactionsHandler) GetResourcePage(w HeaderWriter, r *http.Re } cbID = &cb } - records, err := loadTransactionRecords(historyQ, qp.AccountID, cbID, int32(qp.LedgerID), qp.IncludeFailedTransactions, pq) + records, err := loadTransactionRecords(ctx, historyQ, qp.AccountID, cbID, int32(qp.LedgerID), qp.IncludeFailedTransactions, pq) if err != nil { return nil, errors.Wrap(err, "loading transaction records") } @@ -145,7 +146,7 @@ func (handler GetTransactionsHandler) GetResourcePage(w HeaderWriter, r *http.Re // loadTransactionRecords returns a slice of transaction records of an // account/ledger identified by accountID/ledgerID based on pq and // includeFailedTx. -func loadTransactionRecords(hq *history.Q, accountID string, cbID *xdr.ClaimableBalanceId, ledgerID int32, includeFailedTx bool, pq db2.PageQuery) ([]history.Transaction, error) { +func loadTransactionRecords(ctx context.Context, hq *history.Q, accountID string, cbID *xdr.ClaimableBalanceId, ledgerID int32, includeFailedTx bool, pq db2.PageQuery) ([]history.Transaction, error) { if accountID != "" && ledgerID != 0 { return nil, errors.New("conflicting exclusive fields are present: account_id and ledger_id") } @@ -155,18 +156,18 @@ func loadTransactionRecords(hq *history.Q, accountID string, cbID *xdr.Claimable txs := hq.Transactions() switch { case accountID != "": - txs.ForAccount(accountID) + txs.ForAccount(ctx, accountID) case cbID != nil: - txs.ForClaimableBalance(*cbID) + txs.ForClaimableBalance(ctx, *cbID) case ledgerID > 0: - txs.ForLedger(ledgerID) + txs.ForLedger(ctx, ledgerID) } if includeFailedTx { txs.IncludeFailed() } - err := txs.Page(pq).Select(&records) + err := txs.Page(pq).Select(ctx, &records) if err != nil { return nil, errors.Wrap(err, "executing transaction records query") } diff --git a/services/horizon/internal/actions/transaction_test.go b/services/horizon/internal/actions/transaction_test.go index 1588776aa5..e029edef3a 100644 --- a/services/horizon/internal/actions/transaction_test.go +++ b/services/horizon/internal/actions/transaction_test.go @@ -25,7 +25,7 @@ func TestGetTransactionsHandler(t *testing.T) { t, map[string]string{ "account_id": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "include_failed": "true", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -37,7 +37,7 @@ func TestGetTransactionsHandler(t *testing.T) { t, map[string]string{ "account_id": "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2", "include_failed": "true", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -49,7 +49,7 @@ func TestGetTransactionsHandler(t *testing.T) { t, map[string]string{ "account_id": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "include_failed": "true", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -62,7 +62,7 @@ func TestGetTransactionsHandler(t *testing.T) { t, map[string]string{ "ledger_id": "1", "include_failed": "true", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -74,7 +74,7 @@ func TestGetTransactionsHandler(t *testing.T) { t, map[string]string{ "ledger_id": "2", "include_failed": "true", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -86,7 +86,7 @@ func TestGetTransactionsHandler(t *testing.T) { t, map[string]string{ "ledger_id": "3", "include_failed": "true", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -99,7 +99,7 @@ func TestGetTransactionsHandler(t *testing.T) { "account_id": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "ledger_id": "3", "include_failed": "true", - }, map[string]string{}, q.Session, + }, map[string]string{}, q, ), ) tt.Assert.IsType(&supportProblem.P{}, err) @@ -159,7 +159,7 @@ func TestFeeBumpTransactionPage(t *testing.T) { records, err := handler.GetResourcePage( httptest.NewRecorder(), makeRequest( - t, map[string]string{}, map[string]string{}, q.Session, + t, map[string]string{}, map[string]string{}, q, ), ) tt.Assert.NoError(err) @@ -185,7 +185,7 @@ func TestFeeBumpTransactionResource(t *testing.T) { makeRequest( t, map[string]string{}, map[string]string{ "tx_id": fixture.OuterHash, - }, q.Session, + }, q, ), ) tt.Assert.NoError(err) @@ -197,7 +197,7 @@ func TestFeeBumpTransactionResource(t *testing.T) { makeRequest( t, map[string]string{}, map[string]string{ "tx_id": fixture.InnerHash, - }, q.Session, + }, q, ), ) tt.Assert.NoError(err) diff --git a/services/horizon/internal/actions_account_test.go b/services/horizon/internal/actions_account_test.go index c83b27bec3..541300c3a6 100644 --- a/services/horizon/internal/actions_account_test.go +++ b/services/horizon/internal/actions_account_test.go @@ -14,11 +14,11 @@ func TestAccountActions_InvalidID(t *testing.T) { // Makes StateMiddleware happy q := history.Q{ht.HorizonSession()} - err := q.UpdateLastLedgerIngest(100) + err := q.UpdateLastLedgerIngest(ht.Ctx, 100) ht.Assert.NoError(err) - err = q.UpdateIngestVersion(ingest.CurrentVersion) + err = q.UpdateIngestVersion(ht.Ctx, ingest.CurrentVersion) ht.Assert.NoError(err) - _, err = q.InsertLedger(xdr.LedgerHeaderHistoryEntry{ + _, err = q.InsertLedger(ht.Ctx, xdr.LedgerHeaderHistoryEntry{ Header: xdr.LedgerHeader{ LedgerSeq: 100, }, diff --git a/services/horizon/internal/actions_data_test.go b/services/horizon/internal/actions_data_test.go index 2c2590af29..137087aedf 100644 --- a/services/horizon/internal/actions_data_test.go +++ b/services/horizon/internal/actions_data_test.go @@ -53,22 +53,22 @@ func TestDataActions_Show(t *testing.T) { q := &history.Q{ht.HorizonSession()} // Makes StateMiddleware happy - err := q.UpdateLastLedgerIngest(100) + err := q.UpdateLastLedgerIngest(ht.Ctx, 100) ht.Assert.NoError(err) - err = q.UpdateIngestVersion(ingest.CurrentVersion) + err = q.UpdateIngestVersion(ht.Ctx, ingest.CurrentVersion) ht.Assert.NoError(err) - _, err = q.InsertLedger(xdr.LedgerHeaderHistoryEntry{ + _, err = q.InsertLedger(ht.Ctx, xdr.LedgerHeaderHistoryEntry{ Header: xdr.LedgerHeader{ LedgerSeq: 100, }, }, 0, 0, 0, 0, 0) ht.Assert.NoError(err) - rows, err := q.InsertAccountData(data1) + rows, err := q.InsertAccountData(ht.Ctx, data1) assert.NoError(t, err) ht.Assert.Equal(int64(1), rows) - rows, err = q.InsertAccountData(data2) + rows, err = q.InsertAccountData(ht.Ctx, data2) assert.NoError(t, err) ht.Assert.Equal(int64(1), rows) diff --git a/services/horizon/internal/actions_effects_test.go b/services/horizon/internal/actions_effects_test.go index 1a82df7092..176368b1d4 100644 --- a/services/horizon/internal/actions_effects_test.go +++ b/services/horizon/internal/actions_effects_test.go @@ -43,9 +43,9 @@ func TestEffectActions_Index(t *testing.T) { // Makes StateMiddleware happy q := history.Q{ht.HorizonSession()} - err := q.UpdateLastLedgerIngest(3) + err := q.UpdateLastLedgerIngest(ht.Ctx, 3) ht.Assert.NoError(err) - err = q.UpdateIngestVersion(ingest.CurrentVersion) + err = q.UpdateIngestVersion(ht.Ctx, ingest.CurrentVersion) ht.Assert.NoError(err) // checks if empty param returns 404 instead of all payments diff --git a/services/horizon/internal/actions_operation_fee_stats_test.go b/services/horizon/internal/actions_operation_fee_stats_test.go index a4b451200f..c1556dee71 100644 --- a/services/horizon/internal/actions_operation_fee_stats_test.go +++ b/services/horizon/internal/actions_operation_fee_stats_test.go @@ -151,10 +151,10 @@ func TestOperationFeeTestsActions_Show(t *testing.T) { defer ht.Finish() // Update max_tx_set_size on ledgers - _, err := ht.HorizonSession().ExecRaw("UPDATE history_ledgers SET max_tx_set_size = 50") + _, err := ht.HorizonSession().ExecRaw(ht.Ctx, "UPDATE history_ledgers SET max_tx_set_size = 50") ht.Require.NoError(err) - ht.App.UpdateFeeStatsState() + ht.App.UpdateFeeStatsState(ht.Ctx) w := ht.Get("/fee_stats") @@ -205,14 +205,14 @@ func TestOperationFeeTestsActions_ShowMultiOp(t *testing.T) { defer ht.Finish() // Update max_tx_set_size on ledgers - _, err := ht.HorizonSession().ExecRaw("UPDATE history_ledgers SET max_tx_set_size = 50") + _, err := ht.HorizonSession().ExecRaw(ht.Ctx, "UPDATE history_ledgers SET max_tx_set_size = 50") ht.Require.NoError(err) // Update number of ops on each transaction - _, err = ht.HorizonSession().ExecRaw("UPDATE history_transactions SET operation_count = operation_count * 2") + _, err = ht.HorizonSession().ExecRaw(ht.Ctx, "UPDATE history_transactions SET operation_count = operation_count * 2") ht.Require.NoError(err) - ht.App.UpdateFeeStatsState() + ht.App.UpdateFeeStatsState(ht.Ctx) w := ht.Get("/fee_stats") @@ -271,14 +271,14 @@ func TestOperationFeeTestsActions_NotInterpolating(t *testing.T) { defer ht.Finish() // Update max_tx_set_size on ledgers - _, err := ht.HorizonSession().ExecRaw("UPDATE history_ledgers SET max_tx_set_size = 50") + _, err := ht.HorizonSession().ExecRaw(ht.Ctx, "UPDATE history_ledgers SET max_tx_set_size = 50") ht.Require.NoError(err) // Update one tx to a huge fee - _, err = ht.HorizonSession().ExecRaw("UPDATE history_transactions SET max_fee = 256000, operation_count = 16 WHERE transaction_hash = '6a349e7331e93a251367287e274fb1699abaf723bde37aebe96248c76fd3071a'") + _, err = ht.HorizonSession().ExecRaw(ht.Ctx, "UPDATE history_transactions SET max_fee = 256000, operation_count = 16 WHERE transaction_hash = '6a349e7331e93a251367287e274fb1699abaf723bde37aebe96248c76fd3071a'") ht.Require.NoError(err) - ht.App.UpdateFeeStatsState() + ht.App.UpdateFeeStatsState(ht.Ctx) w := ht.Get("/fee_stats") @@ -326,13 +326,13 @@ func TestOperationFeeTestsActions_FeeBump(t *testing.T) { defer ht.Finish() // Update one tx to be a fee bump - result, err := ht.HorizonSession().ExecRaw("UPDATE history_transactions SET max_fee = 10, new_max_fee = 1000, fee_charged = 200 WHERE transaction_hash = '6a349e7331e93a251367287e274fb1699abaf723bde37aebe96248c76fd3071a'") + result, err := ht.HorizonSession().ExecRaw(ht.Ctx, "UPDATE history_transactions SET max_fee = 10, new_max_fee = 1000, fee_charged = 200 WHERE transaction_hash = '6a349e7331e93a251367287e274fb1699abaf723bde37aebe96248c76fd3071a'") ht.Require.NoError(err) rowsAffected, err := result.RowsAffected() ht.Require.NoError(err) ht.Require.Equal(int64(1), rowsAffected) - ht.App.UpdateFeeStatsState() + ht.App.UpdateFeeStatsState(ht.Ctx) w := ht.Get("/fee_stats") diff --git a/services/horizon/internal/actions_operation_test.go b/services/horizon/internal/actions_operation_test.go index de3a37c2f9..bce94f4722 100644 --- a/services/horizon/internal/actions_operation_test.go +++ b/services/horizon/internal/actions_operation_test.go @@ -169,7 +169,7 @@ func TestOperationActions_Show_Failed(t *testing.T) { } // NULL value - _, err := ht.HorizonSession().ExecRaw( + _, err := ht.HorizonSession().ExecRaw(ht.Ctx, `UPDATE history_transactions SET successful = NULL WHERE transaction_hash = ?`, "56e3216045d579bea40f2d35a09406de3a894ecb5be70dbda5ec9c0427a0d5a1", ) @@ -279,8 +279,8 @@ func TestOperation_CreatedAt(t *testing.T) { ht.UnmarshalPage(w.Body, &records) l := history.Ledger{} - hq := history.Q{Session: ht.HorizonSession()} - ht.Require.NoError(hq.LedgerBySequence(&l, 3)) + hq := history.Q{SessionInterface: ht.HorizonSession()} + ht.Require.NoError(hq.LedgerBySequence(ht.Ctx, &l, 3)) ht.Assert.WithinDuration(l.ClosedAt, records[0].LedgerCloseTime, 1*time.Second) } diff --git a/services/horizon/internal/actions_path_test.go b/services/horizon/internal/actions_path_test.go index cab47284f4..07794d05ce 100644 --- a/services/horizon/internal/actions_path_test.go +++ b/services/horizon/internal/actions_path_test.go @@ -50,11 +50,11 @@ func mockPathFindingClient( router.Use(func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { s := session.Clone() - s.BeginTx(&sql.TxOptions{ + s.BeginTx(tt.Ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }) - defer s.Rollback() + defer s.Rollback(tt.Ctx) ctx := context.WithValue( r.Context(), @@ -168,9 +168,9 @@ func TestPathActionsStrictReceive(t *testing.T) { } batch := q.NewAccountsBatchInsertBuilder(0) - err := batch.Add(account) + err := batch.Add(tt.Ctx, account) assert.NoError(t, err) - err = batch.Exec() + err = batch.Exec(tt.Ctx) assert.NoError(t, err) assetsByKeys := map[string]xdr.Asset{} @@ -204,7 +204,7 @@ func TestPathActionsStrictReceive(t *testing.T) { }, } - rows, err1 := q.InsertTrustLine(trustline) + rows, err1 := q.InsertTrustLine(tt.Ctx, trustline) assert.NoError(t, err1) assert.Equal(t, int64(1), rows) } @@ -526,9 +526,9 @@ func TestPathActionsStrictSend(t *testing.T) { } batch := historyQ.NewAccountsBatchInsertBuilder(0) - err := batch.Add(account) + err := batch.Add(tt.Ctx, account) assert.NoError(t, err) - err = batch.Exec() + err = batch.Exec(tt.Ctx) assert.NoError(t, err) assetsByKeys := map[string]xdr.Asset{} @@ -562,7 +562,7 @@ func TestPathActionsStrictSend(t *testing.T) { }, } - rows, err := historyQ.InsertTrustLine(trustline) + rows, err := historyQ.InsertTrustLine(tt.Ctx, trustline) assert.NoError(t, err) assert.Equal(t, int64(1), rows) } diff --git a/services/horizon/internal/actions_payment_test.go b/services/horizon/internal/actions_payment_test.go index f96aea04f4..446fc02d67 100644 --- a/services/horizon/internal/actions_payment_test.go +++ b/services/horizon/internal/actions_payment_test.go @@ -35,9 +35,9 @@ func TestPaymentActions(t *testing.T) { // Makes StateMiddleware happy initializeStateMiddleware := func() { q := history.Q{ht.HorizonSession()} - err := q.UpdateLastLedgerIngest(3) + err := q.UpdateLastLedgerIngest(ht.Ctx, 3) ht.Assert.NoError(err) - err = q.UpdateIngestVersion(ingest.CurrentVersion) + err = q.UpdateIngestVersion(ht.Ctx, ingest.CurrentVersion) ht.Assert.NoError(err) } initializeStateMiddleware() @@ -212,7 +212,7 @@ func TestPaymentActions_Show_Failed(t *testing.T) { } // NULL value - _, err := ht.HorizonSession().ExecRaw( + _, err := ht.HorizonSession().ExecRaw(ht.Ctx, `UPDATE history_transactions SET successful = NULL WHERE transaction_hash = ?`, "56e3216045d579bea40f2d35a09406de3a894ecb5be70dbda5ec9c0427a0d5a1", ) @@ -240,8 +240,8 @@ func TestPayment_CreatedAt(t *testing.T) { ht.UnmarshalPage(w.Body, &records) l := history.Ledger{} - hq := history.Q{Session: ht.HorizonSession()} - ht.Require.NoError(hq.LedgerBySequence(&l, 3)) + hq := history.Q{SessionInterface: ht.HorizonSession()} + ht.Require.NoError(hq.LedgerBySequence(ht.Ctx, &l, 3)) ht.Assert.WithinDuration(l.ClosedAt, records[0].LedgerCloseTime, 1*time.Second) } diff --git a/services/horizon/internal/actions_root_test.go b/services/horizon/internal/actions_root_test.go index 8a7897037f..8066beaa6d 100644 --- a/services/horizon/internal/actions_root_test.go +++ b/services/horizon/internal/actions_root_test.go @@ -28,8 +28,8 @@ func TestRootAction(t *testing.T) { ht.App.config.StellarCoreURL = server.URL ht.App.config.NetworkPassphrase = "test" - ht.App.UpdateStellarCoreInfo() - ht.App.UpdateLedgerState() + ht.App.UpdateStellarCoreInfo(ht.Ctx) + ht.App.UpdateLedgerState(ht.Ctx) w := ht.Get("/") @@ -94,7 +94,7 @@ func TestRootCoreClientInfoErrored(t *testing.T) { defer server.Close() ht.App.config.StellarCoreURL = server.URL - ht.App.UpdateLedgerState() + ht.App.UpdateLedgerState(ht.Ctx) w := ht.Get("/") diff --git a/services/horizon/internal/actions_trade_test.go b/services/horizon/internal/actions_trade_test.go index d86f813ad4..91cd4b087e 100644 --- a/services/horizon/internal/actions_trade_test.go +++ b/services/horizon/internal/actions_trade_test.go @@ -35,8 +35,8 @@ func TestTradeActions_Index(t *testing.T) { // ensure created_at is populated correctly l := history.Ledger{} - hq := history.Q{Session: ht.HorizonSession()} - ht.Require.NoError(hq.LedgerBySequence(&l, 9)) + hq := history.Q{SessionInterface: ht.HorizonSession()} + ht.Require.NoError(hq.LedgerBySequence(ht.Ctx, &l, 9)) ht.Assert.WithinDuration(l.ClosedAt, records[0].LedgerCloseTime, 1*time.Second) } diff --git a/services/horizon/internal/actions_transaction_test.go b/services/horizon/internal/actions_transaction_test.go index d2f3c9a89c..caefe2846c 100644 --- a/services/horizon/internal/actions_transaction_test.go +++ b/services/horizon/internal/actions_transaction_test.go @@ -145,7 +145,7 @@ func TestTransactionActions_Show_Failed(t *testing.T) { } // NULL value - _, err := ht.HorizonSession().ExecRaw( + _, err := ht.HorizonSession().ExecRaw(ht.Ctx, `UPDATE history_transactions SET successful = NULL WHERE transaction_hash = ?`, "56e3216045d579bea40f2d35a09406de3a894ecb5be70dbda5ec9c0427a0d5a1", ) @@ -193,9 +193,9 @@ func TestTransactionActions_Index(t *testing.T) { // Makes StateMiddleware happy q := history.Q{ht.HorizonSession()} - err := q.UpdateLastLedgerIngest(100) + err := q.UpdateLastLedgerIngest(ht.Ctx, 100) ht.Assert.NoError(err) - err = q.UpdateIngestVersion(ingest.CurrentVersion) + err = q.UpdateIngestVersion(ht.Ctx, ingest.CurrentVersion) ht.Assert.NoError(err) // checks if empty param returns 404 instead of all payments diff --git a/services/horizon/internal/app.go b/services/horizon/internal/app.go index 10bca22743..617107ee3f 100644 --- a/services/horizon/internal/app.go +++ b/services/horizon/internal/app.go @@ -56,6 +56,7 @@ type App struct { config Config webServer *httpx.Server historyQ *history.Q + primaryHistoryQ *history.Q ctx context.Context cancel func() horizonVersion string @@ -75,11 +76,6 @@ type App struct { historyLatestLedgerCounter prometheus.CounterFunc historyLatestLedgerClosedAgoGauge prometheus.GaugeFunc historyElderLedgerCounter prometheus.CounterFunc - dbMaxOpenConnectionsGauge prometheus.GaugeFunc - dbOpenConnectionsGauge prometheus.GaugeFunc - dbInUseConnectionsGauge prometheus.GaugeFunc - dbWaitCountCounter prometheus.CounterFunc - dbWaitDurationCounter prometheus.CounterFunc coreLatestLedgerCounter prometheus.CounterFunc coreSynced prometheus.GaugeFunc } @@ -88,13 +84,16 @@ func (a *App) GetCoreSettings() actions.CoreSettings { return a.coreSettings.get() } +const tickerMaxFrequency = 1 * time.Second +const tickerMaxDuration = 10 * time.Second + // NewApp constructs an new App instance from the provided config. func NewApp(config Config) (*App, error) { a := &App{ config: config, ledgerState: &ledger.State{}, horizonVersion: app.Version(), - ticks: time.NewTicker(1 * time.Second), + ticks: time.NewTicker(tickerMaxFrequency), done: make(chan struct{}), } @@ -179,7 +178,7 @@ func (a *App) waitForDone() { // sure all requests are first properly finished to avoid "sql: database is // closed" errors. func (a *App) CloseDB() { - a.historyQ.Session.DB.Close() + a.historyQ.SessionInterface.Close() } // HistoryQ returns a helper object for performing sql queries against the @@ -194,14 +193,14 @@ func (a *App) Ingestion() ingest.System { } // HorizonSession returns a new session that loads data from the horizon -// database. The returned session is bound to `ctx`. -func (a *App) HorizonSession(ctx context.Context) *db.Session { - return &db.Session{DB: a.historyQ.Session.DB, Ctx: ctx} +// database. +func (a *App) HorizonSession() db.SessionInterface { + return a.historyQ.SessionInterface.Clone() } // UpdateLedgerState triggers a refresh of several metrics gauges, such as open // db connections and ledger state -func (a *App) UpdateLedgerState() { +func (a *App) UpdateLedgerState(ctx context.Context) { var next ledger.Status logErr := func(err error, msg string) { @@ -221,19 +220,19 @@ func (a *App) UpdateLedgerState() { next.CoreLatest = int32(coreInfo.Info.Ledger.Num) next.HistoryLatest, next.HistoryLatestClosedAt, err = - a.HistoryQ().LatestLedgerSequenceClosedAt() + a.HistoryQ().LatestLedgerSequenceClosedAt(ctx) if err != nil { logErr(err, "failed to load the latest known ledger state from history DB") return } - err = a.HistoryQ().ElderLedger(&next.HistoryElder) + err = a.HistoryQ().ElderLedger(ctx, &next.HistoryElder) if err != nil { logErr(err, "failed to load the oldest known ledger state from history DB") return } - next.ExpHistoryLatest, err = a.HistoryQ().GetLastLedgerIngestNonBlocking() + next.ExpHistoryLatest, err = a.HistoryQ().GetLastLedgerIngestNonBlocking(ctx) if err != nil { logErr(err, "failed to load the oldest known exp ledger state from history DB") return @@ -243,7 +242,7 @@ func (a *App) UpdateLedgerState() { } // UpdateFeeStatsState triggers a refresh of several operation fee metrics. -func (a *App) UpdateFeeStatsState() { +func (a *App) UpdateFeeStatsState(ctx context.Context) { var ( next operationfeestats.State latest history.LatestLedger @@ -262,7 +261,7 @@ func (a *App) UpdateFeeStatsState() { cur, ok := operationfeestats.CurrentState() - err := a.HistoryQ().LatestLedgerBaseFeeAndSequence(&latest) + err := a.HistoryQ().LatestLedgerBaseFeeAndSequence(ctx, &latest) if err != nil { logErr(err, "failed to load the latest known ledger's base fee and sequence number") return @@ -276,13 +275,13 @@ func (a *App) UpdateFeeStatsState() { next.LastBaseFee = int64(latest.BaseFee) next.LastLedger = uint32(latest.Sequence) - err = a.HistoryQ().FeeStats(latest.Sequence, &feeStats) + err = a.HistoryQ().FeeStats(ctx, latest.Sequence, &feeStats) if err != nil { logErr(err, "failed to load operation fee stats") return } - err = a.HistoryQ().LedgerCapacityUsageStats(latest.Sequence, &capacityStats) + err = a.HistoryQ().LedgerCapacityUsageStats(ctx, latest.Sequence, &capacityStats) if err != nil { logErr(err, "failed to load ledger capacity usage stats") return @@ -365,7 +364,7 @@ func (a *App) UpdateFeeStatsState() { // UpdateStellarCoreInfo updates the value of CoreVersion, // CurrentProtocolVersion, and CoreSupportedProtocolVersion from the Stellar // core API. -func (a *App) UpdateStellarCoreInfo() { +func (a *App) UpdateStellarCoreInfo(ctx context.Context) { if a.config.StellarCoreURL == "" { return } @@ -374,7 +373,7 @@ func (a *App) UpdateStellarCoreInfo() { URL: a.config.StellarCoreURL, } - resp, err := core.Info(context.Background()) + resp, err := core.Info(ctx) if err != nil { log.Warnf("could not load stellar-core info: %s", err) return @@ -396,28 +395,30 @@ func (a *App) UpdateStellarCoreInfo() { // DeleteUnretainedHistory forwards to the app's reaper. See // `reap.DeleteUnretainedHistory` for details -func (a *App) DeleteUnretainedHistory() error { - return a.reaper.DeleteUnretainedHistory() +func (a *App) DeleteUnretainedHistory(ctx context.Context) error { + return a.reaper.DeleteUnretainedHistory(ctx) } // Tick triggers horizon to update all of it's background processes such as // transaction submission, metrics, ingestion and reaping. -func (a *App) Tick() { +func (a *App) Tick(ctx context.Context) error { var wg sync.WaitGroup log.Debug("ticking app") + // update ledger state, operation fee state, and stellar-core info in parallel wg.Add(3) - go func() { a.UpdateLedgerState(); wg.Done() }() - go func() { a.UpdateFeeStatsState(); wg.Done() }() - go func() { a.UpdateStellarCoreInfo(); wg.Done() }() + go func() { a.UpdateLedgerState(ctx); wg.Done() }() + go func() { a.UpdateFeeStatsState(ctx); wg.Done() }() + go func() { a.UpdateStellarCoreInfo(ctx); wg.Done() }() wg.Wait() wg.Add(2) - go func() { a.reaper.Tick(); wg.Done() }() - go func() { a.submitter.Tick(a.ctx); wg.Done() }() + go func() { a.reaper.Tick(ctx); wg.Done() }() + go func() { a.submitter.Tick(ctx); wg.Done() }() wg.Wait() log.Debug("finished ticking app") + return ctx.Err() } // Init initializes app, using the config to populate db connections and @@ -436,8 +437,14 @@ func (a *App) init() error { // loggly initLogglyLog(a) + // metrics and log.metrics + a.prometheusRegistry = prometheus.NewRegistry() + for _, meter := range *logmetrics.DefaultMetrics { + a.prometheusRegistry.MustRegister(meter) + } + // stellarCoreInfo - a.UpdateStellarCoreInfo() + a.UpdateStellarCoreInfo(a.ctx) // horizon-db and core-db mustInitHorizonDB(a) @@ -452,13 +459,7 @@ func (a *App) init() error { initSubmissionSystem(a) // reaper - a.reaper = reap.New(a.config.HistoryRetentionCount, a.HorizonSession(context.Background()), a.ledgerState) - - // metrics and log.metrics - a.prometheusRegistry = prometheus.NewRegistry() - for _, meter := range *logmetrics.DefaultMetrics { - a.prometheusRegistry.MustRegister(meter) - } + a.reaper = reap.New(a.config.HistoryRetentionCount, a.HorizonSession(), a.ledgerState) // go metrics initGoMetrics(a) @@ -476,7 +477,7 @@ func (a *App) init() error { initTxSubMetrics(a) routerConfig := httpx.RouterConfig{ - DBSession: a.historyQ.Session, + DBSession: a.historyQ.SessionInterface, TxSubmitter: a.submitter, RateQuota: a.config.RateQuota, BehindCloudflare: a.config.BehindCloudflare, @@ -492,7 +493,7 @@ func (a *App) init() error { HorizonVersion: a.horizonVersion, FriendbotURL: a.config.FriendbotURL, HealthCheck: healthCheck{ - session: a.historyQ.Session, + session: a.historyQ.SessionInterface, ctx: a.ctx, core: &stellarcore.Client{ HTTP: &http.Client{Timeout: infoRequestTimeout}, @@ -502,6 +503,10 @@ func (a *App) init() error { }, } + if a.primaryHistoryQ != nil { + routerConfig.PrimaryDBSession = a.primaryHistoryQ.SessionInterface + } + var err error config := httpx.ServerConfig{ Port: uint16(a.config.Port), @@ -530,7 +535,12 @@ func (a *App) run() { for { select { case <-a.ticks.C: - a.Tick() + ctx, cancel := context.WithTimeout(a.ctx, tickerMaxDuration) + err := a.Tick(ctx) + if err != nil { + log.Warnf("error ticking app: %s", err) + } + cancel() // Release timer case <-a.ctx.Done(): log.Info("finished background ticker") return diff --git a/services/horizon/internal/app_test.go b/services/horizon/internal/app_test.go index cd4bb83768..866b22cb39 100644 --- a/services/horizon/internal/app_test.go +++ b/services/horizon/internal/app_test.go @@ -1,6 +1,7 @@ package horizon import ( + "context" "net/http" "testing" @@ -36,6 +37,7 @@ func TestGenericHTTPFeatures(t *testing.T) { w = ht.Get("/ledgers/") ht.Assert.Equal(200, w.Code) } + func TestMetrics(t *testing.T) { ht := StartHTTPTest(t, "base") defer ht.Finish() @@ -55,6 +57,17 @@ func TestMetrics(t *testing.T) { ht.Require.EqualValues(64, getMetricValue(cl).GetCounter().GetValue()) } +func TestTick(t *testing.T) { + ht := StartHTTPTest(t, "base") + defer ht.Finish() + + // Just sanity-check that we return the context error... + ctx, cancel := context.WithCancel(context.Background()) + cancel() + err := ht.App.Tick(ctx) + ht.Assert.EqualError(err, context.Canceled.Error()) +} + func getMetricValue(metric prometheus.Metric) *dto.Metric { value := &dto.Metric{} err := metric.Write(value) diff --git a/services/horizon/internal/codes/main_test.go b/services/horizon/internal/codes/main_test.go index 152832c803..1dae4d3280 100644 --- a/services/horizon/internal/codes/main_test.go +++ b/services/horizon/internal/codes/main_test.go @@ -7,6 +7,34 @@ import ( "github.com/stretchr/testify/assert" ) +func TestForOperationResultCoversForAllOpTypes(t *testing.T) { + for typ, s := range xdr.OperationTypeToStringMap { + result := xdr.OperationResult{ + Code: xdr.OperationResultCodeOpInner, + Tr: &xdr.OperationResultTr{ + Type: xdr.OperationType(typ), + }, + } + f := func() { + ForOperationResult(result) + } + // it must panic because the operation result is not set + assert.Panics(t, f, s) + } + // make sure the check works for an unknown operation type + result := xdr.OperationResult{ + Code: xdr.OperationResultCodeOpInner, + Tr: &xdr.OperationResultTr{ + Type: xdr.OperationType(200000), + }, + } + f := func() { + ForOperationResult(result) + } + // it doesn't panic because it doesn't branch out into the operation type + assert.NotPanics(t, f) +} + func TestString(t *testing.T) { tests := []struct { Input interface{} diff --git a/services/horizon/internal/config.go b/services/horizon/internal/config.go index 2bca813e91..3fcdad27fd 100644 --- a/services/horizon/internal/config.go +++ b/services/horizon/internal/config.go @@ -1,6 +1,7 @@ package horizon import ( + "github.com/stellar/go/ingest/ledgerbackend" "net/url" "time" @@ -12,18 +13,18 @@ import ( // app's main function and is provided to NewApp. type Config struct { DatabaseURL string + RoDatabaseURL string HistoryArchiveURLs []string Port uint AdminPort uint - EnableCaptiveCoreIngestion bool - CaptiveCoreBinaryPath string - CaptiveCoreConfigAppendPath string - RemoteCaptiveCoreURL string - CaptiveCoreHTTPPort uint - CaptiveCorePeerPort uint - CaptiveCoreLogPath string - CaptiveCoreStoragePath string + EnableCaptiveCoreIngestion bool + CaptiveCoreBinaryPath string + RemoteCaptiveCoreURL string + CaptiveCoreConfigPath string + CaptiveCoreTomlParams ledgerbackend.CaptiveCoreTomlParams + CaptiveCoreToml *ledgerbackend.CaptiveCoreToml + CaptiveCoreStoragePath string StellarCoreDatabaseURL string StellarCoreURL string diff --git a/services/horizon/internal/context/context.go b/services/horizon/internal/context/context.go index 35ed2d7254..eefac63a76 100644 --- a/services/horizon/internal/context/context.go +++ b/services/horizon/internal/context/context.go @@ -55,7 +55,7 @@ func BaseURL(ctx context.Context) *url.URL { func HistoryQFromRequest(request *http.Request) (*history.Q, error) { ctx := request.Context() - session, ok := ctx.Value(&SessionContextKey).(*db.Session) + session, ok := ctx.Value(&SessionContextKey).(db.SessionInterface) if !ok { return nil, errors.New("missing session in request context") } diff --git a/services/horizon/internal/db2/assets/asset_stat_test.go b/services/horizon/internal/db2/assets/asset_stat_test.go index 9408d10b60..c87edc19cb 100644 --- a/services/horizon/internal/db2/assets/asset_stat_test.go +++ b/services/horizon/internal/db2/assets/asset_stat_test.go @@ -1,6 +1,7 @@ package assets import ( + "context" "strconv" "testing" @@ -91,7 +92,7 @@ func TestAssetsStatsQExec(t *testing.T) { tt.Require.NoError(err) var results []AssetStatsR - err = history.Q{Session: tt.HorizonSession()}.Select(&results, sql) + err = history.Q{SessionInterface: tt.HorizonSession()}.Select(context.Background(), &results, sql) tt.Require.NoError(err) if !tt.Assert.Equal(3, len(results)) { return diff --git a/services/horizon/internal/db2/history/account.go b/services/horizon/internal/db2/history/account.go index 6bd10e3487..6f5c921ea8 100644 --- a/services/horizon/internal/db2/history/account.go +++ b/services/horizon/internal/db2/history/account.go @@ -1,6 +1,7 @@ package history import ( + "context" "sort" sq "github.com/Masterminds/squirrel" @@ -10,22 +11,22 @@ import ( ) // AccountByAddress loads a row from `history_accounts`, by address -func (q *Q) AccountByAddress(dest interface{}, addy string) error { +func (q *Q) AccountByAddress(ctx context.Context, dest interface{}, addy string) error { sql := selectAccount.Limit(1).Where("ha.address = ?", addy) - return q.Get(dest, sql) + return q.Get(ctx, dest, sql) } // AccountsByAddresses loads a rows from `history_accounts`, by addresses -func (q *Q) AccountsByAddresses(dest interface{}, addresses []string) error { +func (q *Q) AccountsByAddresses(ctx context.Context, dest interface{}, addresses []string) error { sql := selectAccount.Where(map[string]interface{}{ "ha.address": addresses, // ha.address IN (...) }) - return q.Select(dest, sql) + return q.Select(ctx, dest, sql) } // CreateAccounts creates rows in the history_accounts table for a given list of addresses. // CreateAccounts returns a mapping of account address to its corresponding id in the history_accounts table -func (q *Q) CreateAccounts(addresses []string, batchSize int) (map[string]int64, error) { +func (q *Q) CreateAccounts(ctx context.Context, addresses []string, batchSize int) (map[string]int64, error) { builder := &db.BatchInsertBuilder{ Table: q.GetTable("history_accounts"), MaxBatchSize: batchSize, @@ -36,7 +37,7 @@ func (q *Q) CreateAccounts(addresses []string, batchSize int) (map[string]int64, // https://github.com/stellar/go/issues/2370 sort.Strings(addresses) for _, address := range addresses { - err := builder.Row(map[string]interface{}{ + err := builder.Row(ctx, map[string]interface{}{ "address": address, }) if err != nil { @@ -44,7 +45,7 @@ func (q *Q) CreateAccounts(addresses []string, batchSize int) (map[string]int64, } } - err := builder.Exec() + err := builder.Exec(ctx) if err != nil { return nil, errors.Wrap(err, "could not exec asset insert builder") } @@ -60,7 +61,7 @@ func (q *Q) CreateAccounts(addresses []string, batchSize int) (map[string]int64, } subset := addresses[i:end] - if err := q.AccountsByAddresses(&accounts, subset); err != nil { + if err := q.AccountsByAddresses(ctx, &accounts, subset); err != nil { return nil, errors.Wrap(err, "could not select accounts") } diff --git a/services/horizon/internal/db2/history/account_data.go b/services/horizon/internal/db2/history/account_data.go index 827e2be72c..290d686156 100644 --- a/services/horizon/internal/db2/history/account_data.go +++ b/services/horizon/internal/db2/history/account_data.go @@ -1,6 +1,7 @@ package history import ( + "context" "encoding/base64" sq "github.com/Masterminds/squirrel" @@ -8,11 +9,11 @@ import ( "github.com/stellar/go/xdr" ) -func (q *Q) CountAccountsData() (int, error) { +func (q *Q) CountAccountsData(ctx context.Context) (int, error) { sql := sq.Select("count(*)").From("accounts_data") var count int - if err := q.Get(&count, sql); err != nil { + if err := q.Get(ctx, &count, sql); err != nil { return 0, errors.Wrap(err, "could not run select query") } @@ -20,26 +21,26 @@ func (q *Q) CountAccountsData() (int, error) { } // GetAccountDataByName loads account data for a given account ID and data name -func (q *Q) GetAccountDataByName(id, name string) (Data, error) { +func (q *Q) GetAccountDataByName(ctx context.Context, id, name string) (Data, error) { var data Data sql := selectAccountData.Where(sq.Eq{ "account_id": id, "name": name, }).Limit(1) - err := q.Get(&data, sql) + err := q.Get(ctx, &data, sql) return data, err } // GetAccountDataByAccountID loads account data for a given account ID -func (q *Q) GetAccountDataByAccountID(id string) ([]Data, error) { +func (q *Q) GetAccountDataByAccountID(ctx context.Context, id string) ([]Data, error) { var data []Data sql := selectAccountData.Where(sq.Eq{"account_id": id}) - err := q.Select(&data, sql) + err := q.Select(ctx, &data, sql) return data, err } // GetAccountDataByKeys loads a row from the `accounts_data` table, selected by multiple keys. -func (q *Q) GetAccountDataByKeys(keys []xdr.LedgerKeyData) ([]Data, error) { +func (q *Q) GetAccountDataByKeys(ctx context.Context, keys []xdr.LedgerKeyData) ([]Data, error) { var data []Data lkeys := make([]string, 0, len(keys)) for _, key := range keys { @@ -50,7 +51,7 @@ func (q *Q) GetAccountDataByKeys(keys []xdr.LedgerKeyData) ([]Data, error) { lkeys = append(lkeys, lkey) } sql := selectAccountData.Where(map[string]interface{}{"accounts_data.ledger_key": lkeys}) - err := q.Select(&data, sql) + err := q.Select(ctx, &data, sql) return data, err } @@ -80,7 +81,7 @@ func dataEntryToLedgerKeyString(entry xdr.LedgerEntry) (string, error) { // InsertAccountData creates a row in the accounts_data table. // Returns number of rows affected and error. -func (q *Q) InsertAccountData(entry xdr.LedgerEntry) (int64, error) { +func (q *Q) InsertAccountData(ctx context.Context, entry xdr.LedgerEntry) (int64, error) { data := entry.Data.MustData() // Add lkey only when inserting rows @@ -100,7 +101,7 @@ func (q *Q) InsertAccountData(entry xdr.LedgerEntry) (int64, error) { ledgerEntrySponsorToNullString(entry), ) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } @@ -110,7 +111,7 @@ func (q *Q) InsertAccountData(entry xdr.LedgerEntry) (int64, error) { // UpdateAccountData updates a row in the accounts_data table. // Returns number of rows affected and error. -func (q *Q) UpdateAccountData(entry xdr.LedgerEntry) (int64, error) { +func (q *Q) UpdateAccountData(ctx context.Context, entry xdr.LedgerEntry) (int64, error) { data := entry.Data.MustData() key, err := dataEntryToLedgerKeyString(entry) @@ -124,7 +125,7 @@ func (q *Q) UpdateAccountData(entry xdr.LedgerEntry) (int64, error) { "sponsor": ledgerEntrySponsorToNullString(entry), }). Where(sq.Eq{"ledger_key": key}) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } @@ -134,7 +135,7 @@ func (q *Q) UpdateAccountData(entry xdr.LedgerEntry) (int64, error) { // RemoveAccountData deletes a row in the accounts_data table. // Returns number of rows affected and error. -func (q *Q) RemoveAccountData(key xdr.LedgerKeyData) (int64, error) { +func (q *Q) RemoveAccountData(ctx context.Context, key xdr.LedgerKeyData) (int64, error) { lkey, err := ledgerKeyDataToString(key) if err != nil { return 0, errors.Wrap(err, "Error running ledgerKeyDataToString") @@ -142,7 +143,7 @@ func (q *Q) RemoveAccountData(key xdr.LedgerKeyData) (int64, error) { sql := sq.Delete("accounts_data"). Where(sq.Eq{"ledger_key": lkey}) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } @@ -151,10 +152,10 @@ func (q *Q) RemoveAccountData(key xdr.LedgerKeyData) (int64, error) { } // GetAccountDataByAccountsID loads account data for a list of account ID -func (q *Q) GetAccountDataByAccountsID(id []string) ([]Data, error) { +func (q *Q) GetAccountDataByAccountsID(ctx context.Context, id []string) ([]Data, error) { var data []Data sql := selectAccountData.Where(sq.Eq{"account_id": id}) - err := q.Select(&data, sql) + err := q.Select(ctx, &data, sql) return data, err } diff --git a/services/horizon/internal/db2/history/account_data_batch_insert_builder.go b/services/horizon/internal/db2/history/account_data_batch_insert_builder.go index e1a1e6f38b..be3ac4c24e 100644 --- a/services/horizon/internal/db2/history/account_data_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/account_data_batch_insert_builder.go @@ -1,11 +1,13 @@ package history import ( + "context" + "github.com/stellar/go/support/errors" "github.com/stellar/go/xdr" ) -func (i *accountDataBatchInsertBuilder) Add(entry xdr.LedgerEntry) error { +func (i *accountDataBatchInsertBuilder) Add(ctx context.Context, entry xdr.LedgerEntry) error { data := entry.Data.MustData() // Add ledger_key only when inserting rows key, err := dataEntryToLedgerKeyString(entry) @@ -13,7 +15,7 @@ func (i *accountDataBatchInsertBuilder) Add(entry xdr.LedgerEntry) error { return errors.Wrap(err, "Error running dataEntryToLedgerKeyString") } - return i.builder.Row(map[string]interface{}{ + return i.builder.Row(ctx, map[string]interface{}{ "ledger_key": key, "account_id": data.AccountId.Address(), "name": data.DataName, @@ -23,6 +25,6 @@ func (i *accountDataBatchInsertBuilder) Add(entry xdr.LedgerEntry) error { }) } -func (i *accountDataBatchInsertBuilder) Exec() error { - return i.builder.Exec() +func (i *accountDataBatchInsertBuilder) Exec(ctx context.Context) error { + return i.builder.Exec(ctx) } diff --git a/services/horizon/internal/db2/history/account_data_batch_insert_builder_test.go b/services/horizon/internal/db2/history/account_data_batch_insert_builder_test.go index 4920532819..6198281398 100644 --- a/services/horizon/internal/db2/history/account_data_batch_insert_builder_test.go +++ b/services/horizon/internal/db2/history/account_data_batch_insert_builder_test.go @@ -35,13 +35,13 @@ func TestDataBatchInsertBuilderAdd(t *testing.T) { builder := q.NewAccountDataBatchInsertBuilder(2) - err := builder.Add(entry) + err := builder.Add(tt.Ctx, entry) tt.Assert.NoError(err) - err = builder.Exec() + err = builder.Exec(tt.Ctx) tt.Assert.NoError(err) - record, err := q.GetAccountDataByName(accountID.Address(), "foo") + record, err := q.GetAccountDataByName(tt.Ctx, accountID.Address(), "foo") tt.Assert.NoError(err) tt.Assert.Equal(data.DataName, xdr.String64(record.Name)) diff --git a/services/horizon/internal/db2/history/account_data_test.go b/services/horizon/internal/db2/history/account_data_test.go index a8482da55f..9300f024b7 100644 --- a/services/horizon/internal/db2/history/account_data_test.go +++ b/services/horizon/internal/db2/history/account_data_test.go @@ -47,11 +47,11 @@ func TestInsertAccountData(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - rows, err := q.InsertAccountData(data1) + rows, err := q.InsertAccountData(tt.Ctx, data1) assert.NoError(t, err) tt.Assert.Equal(int64(1), rows) - rows, err = q.InsertAccountData(data2) + rows, err = q.InsertAccountData(tt.Ctx, data2) assert.NoError(t, err) tt.Assert.Equal(int64(1), rows) @@ -60,7 +60,7 @@ func TestInsertAccountData(t *testing.T) { {AccountId: data2.Data.Data.AccountId, DataName: data2.Data.Data.DataName}, } - datas, err := q.GetAccountDataByKeys(keys) + datas, err := q.GetAccountDataByKeys(tt.Ctx, keys) assert.NoError(t, err) assert.Len(t, datas, 2) @@ -79,21 +79,21 @@ func TestUpdateAccountData(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - rows, err := q.InsertAccountData(data1) + rows, err := q.InsertAccountData(tt.Ctx, data1) assert.NoError(t, err) tt.Assert.Equal(int64(1), rows) modifiedData := data1 modifiedData.Data.Data.DataValue[0] = 1 - rows, err = q.UpdateAccountData(modifiedData) + rows, err = q.UpdateAccountData(tt.Ctx, modifiedData) assert.NoError(t, err) tt.Assert.Equal(int64(1), rows) keys := []xdr.LedgerKeyData{ {AccountId: data1.Data.Data.AccountId, DataName: data1.Data.Data.DataName}, } - datas, err := q.GetAccountDataByKeys(keys) + datas, err := q.GetAccountDataByKeys(tt.Ctx, keys) assert.NoError(t, err) assert.Len(t, datas, 1) @@ -108,21 +108,21 @@ func TestRemoveAccountData(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - rows, err := q.InsertAccountData(data1) + rows, err := q.InsertAccountData(tt.Ctx, data1) assert.NoError(t, err) tt.Assert.Equal(int64(1), rows) key := xdr.LedgerKeyData{AccountId: data1.Data.Data.AccountId, DataName: data1.Data.Data.DataName} - rows, err = q.RemoveAccountData(key) + rows, err = q.RemoveAccountData(tt.Ctx, key) assert.NoError(t, err) tt.Assert.Equal(int64(1), rows) - datas, err := q.GetAccountDataByKeys([]xdr.LedgerKeyData{key}) + datas, err := q.GetAccountDataByKeys(tt.Ctx, []xdr.LedgerKeyData{key}) assert.NoError(t, err) assert.Len(t, datas, 0) // Doesn't exist anymore - rows, err = q.RemoveAccountData(key) + rows, err = q.RemoveAccountData(tt.Ctx, key) assert.NoError(t, err) tt.Assert.Equal(int64(0), rows) } @@ -133,16 +133,16 @@ func TestGetAccountDataByAccountsID(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - _, err := q.InsertAccountData(data1) + _, err := q.InsertAccountData(tt.Ctx, data1) assert.NoError(t, err) - _, err = q.InsertAccountData(data2) + _, err = q.InsertAccountData(tt.Ctx, data2) assert.NoError(t, err) ids := []string{ data1.Data.Data.AccountId.Address(), data2.Data.Data.AccountId.Address(), } - datas, err := q.GetAccountDataByAccountsID(ids) + datas, err := q.GetAccountDataByAccountsID(tt.Ctx, ids) assert.NoError(t, err) assert.Len(t, datas, 2) @@ -159,12 +159,12 @@ func TestGetAccountDataByAccountID(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - _, err := q.InsertAccountData(data1) + _, err := q.InsertAccountData(tt.Ctx, data1) assert.NoError(t, err) - _, err = q.InsertAccountData(data2) + _, err = q.InsertAccountData(tt.Ctx, data2) assert.NoError(t, err) - records, err := q.GetAccountDataByAccountID(data1.Data.Data.AccountId.Address()) + records, err := q.GetAccountDataByAccountID(tt.Ctx, data1.Data.Data.AccountId.Address()) assert.NoError(t, err) assert.Len(t, records, 2) @@ -181,17 +181,17 @@ func TestGetAccountDataByName(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - _, err := q.InsertAccountData(data1) + _, err := q.InsertAccountData(tt.Ctx, data1) assert.NoError(t, err) - _, err = q.InsertAccountData(data2) + _, err = q.InsertAccountData(tt.Ctx, data2) assert.NoError(t, err) - record, err := q.GetAccountDataByName(data1.Data.Data.AccountId.Address(), string(data1.Data.Data.DataName)) + record, err := q.GetAccountDataByName(tt.Ctx, data1.Data.Data.AccountId.Address(), string(data1.Data.Data.DataName)) assert.NoError(t, err) tt.Assert.Equal(data1.Data.Data.DataName, xdr.String64(record.Name)) tt.Assert.Equal([]byte(data1.Data.Data.DataValue), []byte(record.Value)) - record, err = q.GetAccountDataByName(data1.Data.Data.AccountId.Address(), string(data2.Data.Data.DataName)) + record, err = q.GetAccountDataByName(tt.Ctx, data1.Data.Data.AccountId.Address(), string(data2.Data.Data.DataName)) assert.NoError(t, err) tt.Assert.Equal(data2.Data.Data.DataName, xdr.String64(record.Name)) tt.Assert.Equal([]byte(data2.Data.Data.DataValue), []byte(record.Value)) diff --git a/services/horizon/internal/db2/history/account_signers.go b/services/horizon/internal/db2/history/account_signers.go index bcc6b00cf1..32c6cdc583 100644 --- a/services/horizon/internal/db2/history/account_signers.go +++ b/services/horizon/internal/db2/history/account_signers.go @@ -1,31 +1,33 @@ package history import ( + "context" + sq "github.com/Masterminds/squirrel" "github.com/stellar/go/services/horizon/internal/db2" "github.com/stellar/go/support/errors" ) -func (q *Q) GetAccountSignersByAccountID(id string) ([]AccountSigner, error) { +func (q *Q) GetAccountSignersByAccountID(ctx context.Context, id string) ([]AccountSigner, error) { sql := selectAccountSigners. Where(sq.Eq{"accounts_signers.account_id": id}). OrderBy("accounts_signers.signer asc") var results []AccountSigner - if err := q.Select(&results, sql); err != nil { + if err := q.Select(ctx, &results, sql); err != nil { return nil, errors.Wrap(err, "could not run select query") } return results, nil } -func (q *Q) SignersForAccounts(accounts []string) ([]AccountSigner, error) { +func (q *Q) SignersForAccounts(ctx context.Context, accounts []string) ([]AccountSigner, error) { sql := selectAccountSigners. Where(map[string]interface{}{"accounts_signers.account_id": accounts}) var results []AccountSigner - if err := q.Select(&results, sql); err != nil { + if err := q.Select(ctx, &results, sql); err != nil { return nil, errors.Wrap(err, "could not run select query") } @@ -33,7 +35,7 @@ func (q *Q) SignersForAccounts(accounts []string) ([]AccountSigner, error) { } // AccountsForSigner returns a list of `AccountSigner` rows for a given signer -func (q *Q) AccountsForSigner(signer string, page db2.PageQuery) ([]AccountSigner, error) { +func (q *Q) AccountsForSigner(ctx context.Context, signer string, page db2.PageQuery) ([]AccountSigner, error) { sql := selectAccountSigners.Where("accounts_signers.signer = ?", signer) sql, err := page.ApplyToUsingCursor(sql, "accounts_signers.account_id", page.Cursor) if err != nil { @@ -41,7 +43,7 @@ func (q *Q) AccountsForSigner(signer string, page db2.PageQuery) ([]AccountSigne } var results []AccountSigner - if err := q.Select(&results, sql); err != nil { + if err := q.Select(ctx, &results, sql); err != nil { return nil, errors.Wrap(err, "could not run select query") } @@ -50,12 +52,12 @@ func (q *Q) AccountsForSigner(signer string, page db2.PageQuery) ([]AccountSigne // CreateAccountSigner creates a row in the accounts_signers table. // Returns number of rows affected and error. -func (q *Q) CreateAccountSigner(account, signer string, weight int32, sponsor *string) (int64, error) { +func (q *Q) CreateAccountSigner(ctx context.Context, account, signer string, weight int32, sponsor *string) (int64, error) { sql := sq.Insert("accounts_signers"). Columns("account_id", "signer", "weight", "sponsor"). Values(account, signer, weight, sponsor) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } @@ -65,13 +67,13 @@ func (q *Q) CreateAccountSigner(account, signer string, weight int32, sponsor *s // RemoveAccountSigner deletes a row in the accounts_signers table. // Returns number of rows affected and error. -func (q *Q) RemoveAccountSigner(account, signer string) (int64, error) { +func (q *Q) RemoveAccountSigner(ctx context.Context, account, signer string) (int64, error) { sql := sq.Delete("accounts_signers").Where(sq.Eq{ "account_id": account, "signer": signer, }) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } diff --git a/services/horizon/internal/db2/history/account_signers_batch_insert_builder.go b/services/horizon/internal/db2/history/account_signers_batch_insert_builder.go index 203b84288b..fd1cab291c 100644 --- a/services/horizon/internal/db2/history/account_signers_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/account_signers_batch_insert_builder.go @@ -1,7 +1,11 @@ package history -func (i *accountSignersBatchInsertBuilder) Add(signer AccountSigner) error { - return i.builder.Row(map[string]interface{}{ +import ( + "context" +) + +func (i *accountSignersBatchInsertBuilder) Add(ctx context.Context, signer AccountSigner) error { + return i.builder.Row(ctx, map[string]interface{}{ "account_id": signer.Account, "signer": signer.Signer, "weight": signer.Weight, @@ -9,6 +13,6 @@ func (i *accountSignersBatchInsertBuilder) Add(signer AccountSigner) error { }) } -func (i *accountSignersBatchInsertBuilder) Exec() error { - return i.builder.Exec() +func (i *accountSignersBatchInsertBuilder) Exec(ctx context.Context) error { + return i.builder.Exec(ctx) } diff --git a/services/horizon/internal/db2/history/account_signers_test.go b/services/horizon/internal/db2/history/account_signers_test.go index 31d2ea87c5..bf4183396b 100644 --- a/services/horizon/internal/db2/history/account_signers_test.go +++ b/services/horizon/internal/db2/history/account_signers_test.go @@ -15,7 +15,7 @@ func TestQueryEmptyAccountSigners(t *testing.T) { q := &Q{tt.HorizonSession()} signer := "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO0" - results, err := q.AccountsForSigner(signer, db2.PageQuery{Order: "asc", Limit: 10}) + results, err := q.AccountsForSigner(tt.Ctx, signer, db2.PageQuery{Order: "asc", Limit: 10}) tt.Assert.NoError(err) tt.Assert.Len(results, 0) } @@ -29,7 +29,7 @@ func TestInsertAccountSigner(t *testing.T) { account := "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2" signer := "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4" weight := int32(123) - rowsAffected, err := q.CreateAccountSigner(account, signer, weight, nil) + rowsAffected, err := q.CreateAccountSigner(tt.Ctx, account, signer, weight, nil) tt.Assert.NoError(err) tt.Assert.Equal(int64(1), rowsAffected) @@ -38,13 +38,13 @@ func TestInsertAccountSigner(t *testing.T) { Signer: signer, Weight: weight, } - results, err := q.AccountsForSigner(signer, db2.PageQuery{Order: "asc", Limit: 10}) + results, err := q.AccountsForSigner(tt.Ctx, signer, db2.PageQuery{Order: "asc", Limit: 10}) tt.Assert.NoError(err) tt.Assert.Len(results, 1) tt.Assert.Equal(expected, results[0]) weight = 321 - _, err = q.CreateAccountSigner(account, signer, weight, nil) + _, err = q.CreateAccountSigner(tt.Ctx, account, signer, weight, nil) tt.Assert.Error(err) tt.Assert.EqualError(err, `exec failed: pq: duplicate key value violates unique constraint "accounts_signers_pkey"`) } @@ -59,7 +59,7 @@ func TestInsertAccountSignerSponsor(t *testing.T) { signer := "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4" weight := int32(123) sponsor := "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H" - rowsAffected, err := q.CreateAccountSigner(account, signer, weight, &sponsor) + rowsAffected, err := q.CreateAccountSigner(tt.Ctx, account, signer, weight, &sponsor) tt.Assert.NoError(err) tt.Assert.Equal(int64(1), rowsAffected) @@ -69,7 +69,7 @@ func TestInsertAccountSignerSponsor(t *testing.T) { Weight: weight, Sponsor: null.StringFrom(sponsor), } - results, err := q.AccountsForSigner(signer, db2.PageQuery{Order: "asc", Limit: 10}) + results, err := q.AccountsForSigner(tt.Ctx, signer, db2.PageQuery{Order: "asc", Limit: 10}) tt.Assert.NoError(err) tt.Assert.Len(results, 1) tt.Assert.Equal(expected, results[0]) @@ -84,13 +84,13 @@ func TestMultipleAccountsForSigner(t *testing.T) { account := "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH1" signer := "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO2" weight := int32(123) - rowsAffected, err := q.CreateAccountSigner(account, signer, weight, nil) + rowsAffected, err := q.CreateAccountSigner(tt.Ctx, account, signer, weight, nil) tt.Assert.NoError(err) tt.Assert.Equal(int64(1), rowsAffected) anotherAccount := "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H" anotherWeight := int32(321) - rowsAffected, err = q.CreateAccountSigner(anotherAccount, signer, anotherWeight, nil) + rowsAffected, err = q.CreateAccountSigner(tt.Ctx, anotherAccount, signer, anotherWeight, nil) tt.Assert.NoError(err) tt.Assert.Equal(int64(1), rowsAffected) @@ -106,7 +106,7 @@ func TestMultipleAccountsForSigner(t *testing.T) { Weight: anotherWeight, }, } - results, err := q.AccountsForSigner(signer, db2.PageQuery{Order: "asc", Limit: 10}) + results, err := q.AccountsForSigner(tt.Ctx, signer, db2.PageQuery{Order: "asc", Limit: 10}) tt.Assert.NoError(err) tt.Assert.Len(results, 2) tt.Assert.Equal(expected, results) @@ -120,7 +120,7 @@ func TestRemoveNonExistantAccountSigner(t *testing.T) { account := "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH3" signer := "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO5" - rowsAffected, err := q.RemoveAccountSigner(account, signer) + rowsAffected, err := q.RemoveAccountSigner(tt.Ctx, account, signer) tt.Assert.NoError(err) tt.Assert.Equal(int64(0), rowsAffected) } @@ -134,7 +134,7 @@ func TestRemoveAccountSigner(t *testing.T) { account := "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH6" signer := "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO7" weight := int32(123) - _, err := q.CreateAccountSigner(account, signer, weight, nil) + _, err := q.CreateAccountSigner(tt.Ctx, account, signer, weight, nil) tt.Assert.NoError(err) expected := AccountSigner{ @@ -142,16 +142,16 @@ func TestRemoveAccountSigner(t *testing.T) { Signer: signer, Weight: weight, } - results, err := q.AccountsForSigner(signer, db2.PageQuery{Order: "asc", Limit: 10}) + results, err := q.AccountsForSigner(tt.Ctx, signer, db2.PageQuery{Order: "asc", Limit: 10}) tt.Assert.NoError(err) tt.Assert.Len(results, 1) tt.Assert.Equal(expected, results[0]) - rowsAffected, err := q.RemoveAccountSigner(account, signer) + rowsAffected, err := q.RemoveAccountSigner(tt.Ctx, account, signer) tt.Assert.NoError(err) tt.Assert.Equal(int64(1), rowsAffected) - results, err = q.AccountsForSigner(signer, db2.PageQuery{Order: "asc", Limit: 10}) + results, err = q.AccountsForSigner(tt.Ctx, signer, db2.PageQuery{Order: "asc", Limit: 10}) tt.Assert.NoError(err) tt.Assert.Len(results, 0) } @@ -165,13 +165,13 @@ func TestGetAccountSignersByAccountID(t *testing.T) { account := "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH6" signer := "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO7" weight := int32(123) - _, err := q.CreateAccountSigner(account, signer, weight, nil) + _, err := q.CreateAccountSigner(tt.Ctx, account, signer, weight, nil) tt.Assert.NoError(err) signer2 := "GC2WJF6YWMAEHGGAK2UOMZCIOMH4RU7KY2CQEWZQJV2ZQJVXJ335ZSXG" weight2 := int32(100) sponsor := "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H" - _, err = q.CreateAccountSigner(account, signer2, weight2, &sponsor) + _, err = q.CreateAccountSigner(tt.Ctx, account, signer2, weight2, &sponsor) tt.Assert.NoError(err) expected := []AccountSigner{ @@ -187,7 +187,7 @@ func TestGetAccountSignersByAccountID(t *testing.T) { Sponsor: null.StringFrom(sponsor), }, } - results, err := q.GetAccountSignersByAccountID(account) + results, err := q.GetAccountSignersByAccountID(tt.Ctx, account) tt.Assert.NoError(err) tt.Assert.Len(results, 2) tt.Assert.Equal(expected, results) diff --git a/services/horizon/internal/db2/history/account_test.go b/services/horizon/internal/db2/history/account_test.go index 1e69aea215..c74571c4b6 100644 --- a/services/horizon/internal/db2/history/account_test.go +++ b/services/horizon/internal/db2/history/account_test.go @@ -60,7 +60,7 @@ func TestCreateAccountsSortedOrder(t *testing.T) { "GBYSBDAJZMHL5AMD7QXQ3JEP3Q4GLKADWIJURAAHQALNAWD6Z5XF2RAC", "GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB", } - accounts, err := q.CreateAccounts(addresses, 1) + accounts, err := q.CreateAccounts(tt.Ctx, addresses, 1) tt.Assert.NoError(err) idToAddress := map[int64]string{} @@ -93,12 +93,12 @@ func TestCreateAccounts(t *testing.T) { "GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB", "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", } - accounts, err := q.CreateAccounts(addresses, 1) + accounts, err := q.CreateAccounts(tt.Ctx, addresses, 1) tt.Assert.NoError(err) tt.Assert.Len(accounts, 2) assertAccountsContainAddresses(tt, accounts, addresses) - dupAccounts, err := q.CreateAccounts([]string{ + dupAccounts, err := q.CreateAccounts(tt.Ctx, []string{ "GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB", "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", }, 2) @@ -111,7 +111,7 @@ func TestCreateAccounts(t *testing.T) { "GCYVFGI3SEQJGBNQQG7YCMFWEYOHK3XPVOVPA6C566PXWN4SN7LILZSM", "GBYSBDAJZMHL5AMD7QXQ3JEP3Q4GLKADWIJURAAHQALNAWD6Z5XF2RAC", } - accounts, err = q.CreateAccounts(addresses, 1) + accounts, err = q.CreateAccounts(tt.Ctx, addresses, 1) tt.Assert.NoError(err) assertAccountsContainAddresses(tt, accounts, addresses) for address, accountID := range dupAccounts { diff --git a/services/horizon/internal/db2/history/accounts.go b/services/horizon/internal/db2/history/accounts.go index 250139dcce..a4b60fd382 100644 --- a/services/horizon/internal/db2/history/accounts.go +++ b/services/horizon/internal/db2/history/accounts.go @@ -1,11 +1,14 @@ package history import ( + "context" + sq "github.com/Masterminds/squirrel" "github.com/guregu/null" "github.com/lib/pq" "github.com/stellar/go/services/horizon/internal/db2" + "github.com/stellar/go/support/db" "github.com/stellar/go/support/errors" "github.com/stellar/go/xdr" ) @@ -34,28 +37,28 @@ func (account AccountEntry) IsAuthClawbackEnabled() bool { return xdr.AccountFlags(account.Flags).IsAuthClawbackEnabled() } -func (q *Q) CountAccounts() (int, error) { +func (q *Q) CountAccounts(ctx context.Context) (int, error) { sql := sq.Select("count(*)").From("accounts") var count int - if err := q.Get(&count, sql); err != nil { + if err := q.Get(ctx, &count, sql); err != nil { return 0, errors.Wrap(err, "could not run select query") } return count, nil } -func (q *Q) GetAccountByID(id string) (AccountEntry, error) { +func (q *Q) GetAccountByID(ctx context.Context, id string) (AccountEntry, error) { var account AccountEntry sql := selectAccounts.Where(sq.Eq{"account_id": id}) - err := q.Get(&account, sql) + err := q.Get(ctx, &account, sql) return account, err } -func (q *Q) GetAccountsByIDs(ids []string) ([]AccountEntry, error) { +func (q *Q) GetAccountsByIDs(ctx context.Context, ids []string) ([]AccountEntry, error) { var accounts []AccountEntry sql := selectAccounts.Where(map[string]interface{}{"accounts.account_id": ids}) - err := q.Select(&accounts, sql) + err := q.Select(ctx, &accounts, sql) return accounts, err } @@ -93,7 +96,7 @@ func accountToMap(entry xdr.LedgerEntry) map[string]interface{} { // There's currently no limit of the number of accounts this method can // accept other than 2GB limit of the query string length what should be enough // for each ledger with the current limits. -func (q *Q) UpsertAccounts(accounts []xdr.LedgerEntry) error { +func (q *Q) UpsertAccounts(ctx context.Context, accounts []xdr.LedgerEntry) error { var accountID, inflationDestination []string var homeDomain []xdr.String32 var balance, buyingLiabilities, sellingLiabilities []xdr.Int64 @@ -187,7 +190,9 @@ func (q *Q) UpsertAccounts(accounts []xdr.LedgerEntry) error { num_sponsored = excluded.num_sponsored, num_sponsoring = excluded.num_sponsoring` - _, err := q.ExecRaw(sql, + _, err := q.ExecRaw( + context.WithValue(ctx, &db.QueryTypeContextKey, db.UpsertQueryType), + sql, pq.Array(accountID), pq.Array(balance), pq.Array(buyingLiabilities), @@ -211,9 +216,9 @@ func (q *Q) UpsertAccounts(accounts []xdr.LedgerEntry) error { // RemoveAccount deletes a row in the accounts table. // Returns number of rows affected and error. -func (q *Q) RemoveAccount(accountID string) (int64, error) { +func (q *Q) RemoveAccount(ctx context.Context, accountID string) (int64, error) { sql := sq.Delete("accounts").Where(sq.Eq{"account_id": accountID}) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } @@ -223,7 +228,7 @@ func (q *Q) RemoveAccount(accountID string) (int64, error) { // AccountsForAsset returns a list of `AccountEntry` rows who are trustee to an // asset -func (q *Q) AccountsForAsset(asset xdr.Asset, page db2.PageQuery) ([]AccountEntry, error) { +func (q *Q) AccountsForAsset(ctx context.Context, asset xdr.Asset, page db2.PageQuery) ([]AccountEntry, error) { var assetType, code, issuer string asset.MustExtract(&assetType, &code, &issuer) @@ -243,7 +248,7 @@ func (q *Q) AccountsForAsset(asset xdr.Asset, page db2.PageQuery) ([]AccountEntr } var results []AccountEntry - if err := q.Select(&results, sql); err != nil { + if err := q.Select(ctx, &results, sql); err != nil { return nil, errors.Wrap(err, "could not run select query") } @@ -296,7 +301,7 @@ func selectUnionBySponsor(tables []string, sponsor string, page db2.PageQuery) ( // AccountsForSponsor return all the accounts where `sponsor`` is sponsoring the account entry or // any of its subentries (trust lines, signers, data, or account entry) -func (q *Q) AccountsForSponsor(sponsor string, page db2.PageQuery) ([]AccountEntry, error) { +func (q *Q) AccountsForSponsor(ctx context.Context, sponsor string, page db2.PageQuery) ([]AccountEntry, error) { sql, err := selectUnionBySponsor( []string{"accounts", "accounts_data", "accounts_signers", "trust_lines"}, sponsor, @@ -307,7 +312,7 @@ func (q *Q) AccountsForSponsor(sponsor string, page db2.PageQuery) ([]AccountEnt } var results []AccountEntry - if err := q.Select(&results, sql); err != nil { + if err := q.Select(ctx, &results, sql); err != nil { return nil, errors.Wrap(err, "could not run select query") } @@ -315,7 +320,7 @@ func (q *Q) AccountsForSponsor(sponsor string, page db2.PageQuery) ([]AccountEnt } // AccountEntriesForSigner returns a list of `AccountEntry` rows for a given signer -func (q *Q) AccountEntriesForSigner(signer string, page db2.PageQuery) ([]AccountEntry, error) { +func (q *Q) AccountEntriesForSigner(ctx context.Context, signer string, page db2.PageQuery) ([]AccountEntry, error) { sql := sq. Select("accounts.*"). From("accounts"). @@ -330,7 +335,7 @@ func (q *Q) AccountEntriesForSigner(signer string, page db2.PageQuery) ([]Accoun } var results []AccountEntry - if err := q.Select(&results, sql); err != nil { + if err := q.Select(ctx, &results, sql); err != nil { return nil, errors.Wrap(err, "could not run select query") } diff --git a/services/horizon/internal/db2/history/accounts_batch_insert_builder.go b/services/horizon/internal/db2/history/accounts_batch_insert_builder.go index b3ed471674..7c4e0abddc 100644 --- a/services/horizon/internal/db2/history/accounts_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/accounts_batch_insert_builder.go @@ -1,6 +1,8 @@ package history import ( + "context" + "github.com/stellar/go/support/db" "github.com/stellar/go/xdr" ) @@ -10,10 +12,10 @@ type accountsBatchInsertBuilder struct { builder db.BatchInsertBuilder } -func (i *accountsBatchInsertBuilder) Add(entry xdr.LedgerEntry) error { - return i.builder.Row(accountToMap(entry)) +func (i *accountsBatchInsertBuilder) Add(ctx context.Context, entry xdr.LedgerEntry) error { + return i.builder.Row(ctx, accountToMap(entry)) } -func (i *accountsBatchInsertBuilder) Exec() error { - return i.builder.Exec() +func (i *accountsBatchInsertBuilder) Exec(ctx context.Context) error { + return i.builder.Exec(ctx) } diff --git a/services/horizon/internal/db2/history/accounts_test.go b/services/horizon/internal/db2/history/accounts_test.go index b2eca16453..c8a6f0b2da 100644 --- a/services/horizon/internal/db2/history/accounts_test.go +++ b/services/horizon/internal/db2/history/accounts_test.go @@ -111,13 +111,13 @@ func TestInsertAccount(t *testing.T) { q := &Q{tt.HorizonSession()} batch := q.NewAccountsBatchInsertBuilder(0) - err := batch.Add(account1) + err := batch.Add(tt.Ctx, account1) assert.NoError(t, err) - err = batch.Add(account2) + err = batch.Add(tt.Ctx, account2) assert.NoError(t, err) - assert.NoError(t, batch.Exec()) + assert.NoError(t, batch.Exec(tt.Ctx)) - accounts, err := q.GetAccountsByIDs([]string{ + accounts, err := q.GetAccountsByIDs(tt.Ctx, []string{ "GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB", "GCT2NQM5KJJEF55NPMY444C6M6CA7T33HRNCMA6ZFBIIXKNCRO6J25K7", }) @@ -153,7 +153,7 @@ func TestUpsertAccount(t *testing.T) { q := &Q{tt.HorizonSession()} ledgerEntries := []xdr.LedgerEntry{account1, account2} - err := q.UpsertAccounts(ledgerEntries) + err := q.UpsertAccounts(tt.Ctx, ledgerEntries) assert.NoError(t, err) modifiedAccount := xdr.LedgerEntry{ @@ -182,14 +182,14 @@ func TestUpsertAccount(t *testing.T) { }, } - err = q.UpsertAccounts([]xdr.LedgerEntry{modifiedAccount}) + err = q.UpsertAccounts(tt.Ctx, []xdr.LedgerEntry{modifiedAccount}) assert.NoError(t, err) keys := []string{ account1.Data.Account.AccountId.Address(), account2.Data.Account.AccountId.Address(), } - accounts, err := q.GetAccountsByIDs(keys) + accounts, err := q.GetAccountsByIDs(tt.Ctx, keys) assert.NoError(t, err) assert.Len(t, accounts, 2) @@ -201,7 +201,7 @@ func TestUpsertAccount(t *testing.T) { assert.Equal(t, uint32(0), accounts[1].NumSponsoring) assert.Equal(t, null.String{}, accounts[1].Sponsor) - accounts, err = q.GetAccountsByIDs([]string{account1.Data.Account.AccountId.Address()}) + accounts, err = q.GetAccountsByIDs(tt.Ctx, []string{account1.Data.Account.AccountId.Address()}) assert.NoError(t, err) assert.Len(t, accounts, 1) @@ -238,7 +238,7 @@ func TestUpsertAccount(t *testing.T) { assert.Equal(t, expectedBinary, actualBinary) assert.Equal(t, uint32(1234), accounts[0].LastModifiedLedger) - accounts, err = q.GetAccountsByIDs([]string{account2.Data.Account.AccountId.Address()}) + accounts, err = q.GetAccountsByIDs(tt.Ctx, []string{account2.Data.Account.AccountId.Address()}) assert.NoError(t, err) assert.Len(t, accounts, 1) @@ -283,21 +283,21 @@ func TestRemoveAccount(t *testing.T) { q := &Q{tt.HorizonSession()} batch := q.NewAccountsBatchInsertBuilder(0) - err := batch.Add(account1) + err := batch.Add(tt.Ctx, account1) assert.NoError(t, err) - assert.NoError(t, batch.Exec()) + assert.NoError(t, batch.Exec(tt.Ctx)) var rows int64 - rows, err = q.RemoveAccount("GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB") + rows, err = q.RemoveAccount(tt.Ctx, "GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB") assert.NoError(t, err) assert.Equal(t, int64(1), rows) - accounts, err := q.GetAccountsByIDs([]string{"GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB"}) + accounts, err := q.GetAccountsByIDs(tt.Ctx, []string{"GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB"}) assert.NoError(t, err) assert.Len(t, accounts, 0) // Doesn't exist anymore - rows, err = q.RemoveAccount("GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB") + rows, err = q.RemoveAccount(tt.Ctx, "GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB") assert.NoError(t, err) assert.Equal(t, int64(0), rows) } @@ -312,15 +312,15 @@ func TestAccountsForAsset(t *testing.T) { usdTrustLine.Data.TrustLine.AccountId = account2.Data.Account.AccountId batch := q.NewAccountsBatchInsertBuilder(0) - err := batch.Add(account1) + err := batch.Add(tt.Ctx, account1) assert.NoError(t, err) - err = batch.Add(account2) + err = batch.Add(tt.Ctx, account2) assert.NoError(t, err) - assert.NoError(t, batch.Exec()) + assert.NoError(t, batch.Exec(tt.Ctx)) - _, err = q.InsertTrustLine(eurTrustLine) + _, err = q.InsertTrustLine(tt.Ctx, eurTrustLine) tt.Assert.NoError(err) - _, err = q.InsertTrustLine(usdTrustLine) + _, err = q.InsertTrustLine(tt.Ctx, usdTrustLine) tt.Assert.NoError(err) pq := db2.PageQuery{ @@ -329,18 +329,18 @@ func TestAccountsForAsset(t *testing.T) { Cursor: "", } - accounts, err := q.AccountsForAsset(eurTrustLine.Data.TrustLine.Asset, pq) + accounts, err := q.AccountsForAsset(tt.Ctx, eurTrustLine.Data.TrustLine.Asset, pq) assert.NoError(t, err) tt.Assert.Len(accounts, 1) tt.Assert.Equal(account1.Data.Account.AccountId.Address(), accounts[0].AccountID) - accounts, err = q.AccountsForAsset(usdTrustLine.Data.TrustLine.Asset, pq) + accounts, err = q.AccountsForAsset(tt.Ctx, usdTrustLine.Data.TrustLine.Asset, pq) assert.NoError(t, err) tt.Assert.Len(accounts, 1) tt.Assert.Equal(account2.Data.Account.AccountId.Address(), accounts[0].AccountID) pq.Cursor = account2.Data.Account.AccountId.Address() - accounts, err = q.AccountsForAsset(usdTrustLine.Data.TrustLine.Asset, pq) + accounts, err = q.AccountsForAsset(tt.Ctx, usdTrustLine.Data.TrustLine.Asset, pq) assert.NoError(t, err) tt.Assert.Len(accounts, 0) @@ -350,7 +350,7 @@ func TestAccountsForAsset(t *testing.T) { Cursor: "", } - accounts, err = q.AccountsForAsset(eurTrustLine.Data.TrustLine.Asset, pq) + accounts, err = q.AccountsForAsset(tt.Ctx, eurTrustLine.Data.TrustLine.Asset, pq) assert.NoError(t, err) tt.Assert.Len(accounts, 1) } @@ -365,28 +365,28 @@ func TestAccountsForSponsor(t *testing.T) { usdTrustLine.Data.TrustLine.AccountId = account2.Data.Account.AccountId batch := q.NewAccountsBatchInsertBuilder(0) - err := batch.Add(account1) + err := batch.Add(tt.Ctx, account1) assert.NoError(t, err) - err = batch.Add(account2) + err = batch.Add(tt.Ctx, account2) assert.NoError(t, err) - err = batch.Add(account3) + err = batch.Add(tt.Ctx, account3) assert.NoError(t, err) - assert.NoError(t, batch.Exec()) + assert.NoError(t, batch.Exec(tt.Ctx)) - _, err = q.InsertTrustLine(eurTrustLine) + _, err = q.InsertTrustLine(tt.Ctx, eurTrustLine) tt.Assert.NoError(err) - _, err = q.InsertTrustLine(usdTrustLine) + _, err = q.InsertTrustLine(tt.Ctx, usdTrustLine) tt.Assert.NoError(err) - _, err = q.CreateAccountSigner(account1.Data.Account.AccountId.Address(), account1.Data.Account.AccountId.Address(), 1, nil) + _, err = q.CreateAccountSigner(tt.Ctx, account1.Data.Account.AccountId.Address(), account1.Data.Account.AccountId.Address(), 1, nil) tt.Assert.NoError(err) - _, err = q.CreateAccountSigner(account2.Data.Account.AccountId.Address(), account2.Data.Account.AccountId.Address(), 1, nil) + _, err = q.CreateAccountSigner(tt.Ctx, account2.Data.Account.AccountId.Address(), account2.Data.Account.AccountId.Address(), 1, nil) tt.Assert.NoError(err) - _, err = q.CreateAccountSigner(account3.Data.Account.AccountId.Address(), account3.Data.Account.AccountId.Address(), 1, nil) + _, err = q.CreateAccountSigner(tt.Ctx, account3.Data.Account.AccountId.Address(), account3.Data.Account.AccountId.Address(), 1, nil) tt.Assert.NoError(err) - _, err = q.CreateAccountSigner(account1.Data.Account.AccountId.Address(), account3.Data.Account.AccountId.Address(), 1, nil) + _, err = q.CreateAccountSigner(tt.Ctx, account1.Data.Account.AccountId.Address(), account3.Data.Account.AccountId.Address(), 1, nil) tt.Assert.NoError(err) - _, err = q.CreateAccountSigner(account2.Data.Account.AccountId.Address(), account3.Data.Account.AccountId.Address(), 1, nil) + _, err = q.CreateAccountSigner(tt.Ctx, account2.Data.Account.AccountId.Address(), account3.Data.Account.AccountId.Address(), 1, nil) tt.Assert.NoError(err) pq := db2.PageQuery{ @@ -395,7 +395,7 @@ func TestAccountsForSponsor(t *testing.T) { Cursor: "", } - accounts, err := q.AccountsForSponsor(sponsor.Address(), pq) + accounts, err := q.AccountsForSponsor(tt.Ctx, sponsor.Address(), pq) assert.NoError(t, err) tt.Assert.Len(accounts, 2) tt.Assert.Equal(account1.Data.Account.AccountId.Address(), accounts[0].AccountID) @@ -412,28 +412,28 @@ func TestAccountEntriesForSigner(t *testing.T) { usdTrustLine.Data.TrustLine.AccountId = account2.Data.Account.AccountId batch := q.NewAccountsBatchInsertBuilder(0) - err := batch.Add(account1) + err := batch.Add(tt.Ctx, account1) assert.NoError(t, err) - err = batch.Add(account2) + err = batch.Add(tt.Ctx, account2) assert.NoError(t, err) - err = batch.Add(account3) + err = batch.Add(tt.Ctx, account3) assert.NoError(t, err) - assert.NoError(t, batch.Exec()) + assert.NoError(t, batch.Exec(tt.Ctx)) - _, err = q.InsertTrustLine(eurTrustLine) + _, err = q.InsertTrustLine(tt.Ctx, eurTrustLine) tt.Assert.NoError(err) - _, err = q.InsertTrustLine(usdTrustLine) + _, err = q.InsertTrustLine(tt.Ctx, usdTrustLine) tt.Assert.NoError(err) - _, err = q.CreateAccountSigner(account1.Data.Account.AccountId.Address(), account1.Data.Account.AccountId.Address(), 1, nil) + _, err = q.CreateAccountSigner(tt.Ctx, account1.Data.Account.AccountId.Address(), account1.Data.Account.AccountId.Address(), 1, nil) tt.Assert.NoError(err) - _, err = q.CreateAccountSigner(account2.Data.Account.AccountId.Address(), account2.Data.Account.AccountId.Address(), 1, nil) + _, err = q.CreateAccountSigner(tt.Ctx, account2.Data.Account.AccountId.Address(), account2.Data.Account.AccountId.Address(), 1, nil) tt.Assert.NoError(err) - _, err = q.CreateAccountSigner(account3.Data.Account.AccountId.Address(), account3.Data.Account.AccountId.Address(), 1, nil) + _, err = q.CreateAccountSigner(tt.Ctx, account3.Data.Account.AccountId.Address(), account3.Data.Account.AccountId.Address(), 1, nil) tt.Assert.NoError(err) - _, err = q.CreateAccountSigner(account1.Data.Account.AccountId.Address(), account3.Data.Account.AccountId.Address(), 1, nil) + _, err = q.CreateAccountSigner(tt.Ctx, account1.Data.Account.AccountId.Address(), account3.Data.Account.AccountId.Address(), 1, nil) tt.Assert.NoError(err) - _, err = q.CreateAccountSigner(account2.Data.Account.AccountId.Address(), account3.Data.Account.AccountId.Address(), 1, nil) + _, err = q.CreateAccountSigner(tt.Ctx, account2.Data.Account.AccountId.Address(), account3.Data.Account.AccountId.Address(), 1, nil) tt.Assert.NoError(err) pq := db2.PageQuery{ @@ -442,12 +442,12 @@ func TestAccountEntriesForSigner(t *testing.T) { Cursor: "", } - accounts, err := q.AccountEntriesForSigner(account1.Data.Account.AccountId.Address(), pq) + accounts, err := q.AccountEntriesForSigner(tt.Ctx, account1.Data.Account.AccountId.Address(), pq) assert.NoError(t, err) tt.Assert.Len(accounts, 1) tt.Assert.Equal(account1.Data.Account.AccountId.Address(), accounts[0].AccountID) - accounts, err = q.AccountEntriesForSigner(account2.Data.Account.AccountId.Address(), pq) + accounts, err = q.AccountEntriesForSigner(tt.Ctx, account2.Data.Account.AccountId.Address(), pq) assert.NoError(t, err) tt.Assert.Len(accounts, 1) tt.Assert.Equal(account2.Data.Account.AccountId.Address(), accounts[0].AccountID) @@ -458,7 +458,7 @@ func TestAccountEntriesForSigner(t *testing.T) { account3.Data.Account.AccountId.Address(): true, } - accounts, err = q.AccountEntriesForSigner(account3.Data.Account.AccountId.Address(), pq) + accounts, err = q.AccountEntriesForSigner(tt.Ctx, account3.Data.Account.AccountId.Address(), pq) assert.NoError(t, err) tt.Assert.Len(accounts, 3) @@ -470,12 +470,12 @@ func TestAccountEntriesForSigner(t *testing.T) { tt.Assert.Len(want, 0) pq.Cursor = accounts[len(accounts)-1].AccountID - accounts, err = q.AccountEntriesForSigner(account3.Data.Account.AccountId.Address(), pq) + accounts, err = q.AccountEntriesForSigner(tt.Ctx, account3.Data.Account.AccountId.Address(), pq) assert.NoError(t, err) tt.Assert.Len(accounts, 0) pq.Order = "desc" - accounts, err = q.AccountEntriesForSigner(account3.Data.Account.AccountId.Address(), pq) + accounts, err = q.AccountEntriesForSigner(tt.Ctx, account3.Data.Account.AccountId.Address(), pq) assert.NoError(t, err) tt.Assert.Len(accounts, 2) @@ -485,7 +485,7 @@ func TestAccountEntriesForSigner(t *testing.T) { Cursor: "", } - accounts, err = q.AccountEntriesForSigner(account1.Data.Account.AccountId.Address(), pq) + accounts, err = q.AccountEntriesForSigner(tt.Ctx, account1.Data.Account.AccountId.Address(), pq) assert.NoError(t, err) tt.Assert.Len(accounts, 1) } @@ -497,11 +497,11 @@ func TestGetAccountByID(t *testing.T) { q := &Q{tt.HorizonSession()} batch := q.NewAccountsBatchInsertBuilder(0) - err := batch.Add(account1) + err := batch.Add(tt.Ctx, account1) assert.NoError(t, err) - assert.NoError(t, batch.Exec()) + assert.NoError(t, batch.Exec(tt.Ctx)) - resultAccount, err := q.GetAccountByID(account1.Data.Account.AccountId.Address()) + resultAccount, err := q.GetAccountByID(tt.Ctx, account1.Data.Account.AccountId.Address()) assert.NoError(t, err) assert.Equal(t, "GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB", resultAccount.AccountID) diff --git a/services/horizon/internal/db2/history/asset.go b/services/horizon/internal/db2/history/asset.go index 09bd34da50..f6a73b819e 100644 --- a/services/horizon/internal/db2/history/asset.go +++ b/services/horizon/internal/db2/history/asset.go @@ -1,6 +1,7 @@ package history import ( + "context" "sort" sq "github.com/Masterminds/squirrel" @@ -10,7 +11,7 @@ import ( ) // GetAssetID fetches the id for an Asset -func (q *Q) GetAssetID(asset xdr.Asset) (id int64, err error) { +func (q *Q) GetAssetID(ctx context.Context, asset xdr.Asset) (id int64, err error) { var ( assetType string assetCode string @@ -27,12 +28,12 @@ func (q *Q) GetAssetID(asset xdr.Asset) (id int64, err error) { "asset_code": assetCode, "asset_issuer": assetIssuer}) - err = q.Get(&id, sql) + err = q.Get(ctx, &id, sql) return } // CreateAssets creates rows in the history_assets table for a given list of assets. -func (q *Q) CreateAssets(assets []xdr.Asset, batchSize int) (map[string]Asset, error) { +func (q *Q) CreateAssets(ctx context.Context, assets []xdr.Asset, batchSize int) (map[string]Asset, error) { searchStrings := make([]string, 0, len(assets)) assetToKey := map[[3]string]string{} @@ -54,7 +55,7 @@ func (q *Q) CreateAssets(assets []xdr.Asset, batchSize int) (map[string]Asset, e return nil, errors.Wrap(err, "could not extract asset details") } - err = builder.Row(map[string]interface{}{ + err = builder.Row(ctx, map[string]interface{}{ "asset_type": assetType, "asset_code": assetCode, "asset_issuer": assetIssuer, @@ -74,7 +75,7 @@ func (q *Q) CreateAssets(assets []xdr.Asset, batchSize int) (map[string]Asset, e } } - err := builder.Exec() + err := builder.Exec(ctx) if err != nil { return nil, errors.Wrap(err, "could not exec asset insert builder") } @@ -89,7 +90,7 @@ func (q *Q) CreateAssets(assets []xdr.Asset, batchSize int) (map[string]Asset, e } subset := searchStrings[i:end] - err = q.Select(&rows, sq.Select("*").From("history_assets").Where(sq.Eq{ + err = q.Select(ctx, &rows, sq.Select("*").From("history_assets").Where(sq.Eq{ "concat(asset_type, '/', asset_code, '/', asset_issuer)": subset, })) if err != nil { diff --git a/services/horizon/internal/db2/history/asset_stats.go b/services/horizon/internal/db2/history/asset_stats.go index 81174b676a..e24f3fe887 100644 --- a/services/horizon/internal/db2/history/asset_stats.go +++ b/services/horizon/internal/db2/history/asset_stats.go @@ -1,6 +1,7 @@ package history import ( + "context" "fmt" "strings" @@ -32,19 +33,19 @@ func assetStatToPrimaryKeyMap(assetStat ExpAssetStat) map[string]interface{} { } // InsertAssetStats a set of asset stats into the exp_asset_stats -func (q *Q) InsertAssetStats(assetStats []ExpAssetStat, batchSize int) error { +func (q *Q) InsertAssetStats(ctx context.Context, assetStats []ExpAssetStat, batchSize int) error { builder := &db.BatchInsertBuilder{ Table: q.GetTable("exp_asset_stats"), MaxBatchSize: batchSize, } for _, assetStat := range assetStats { - if err := builder.Row(assetStatToMap(assetStat)); err != nil { + if err := builder.Row(ctx, assetStatToMap(assetStat)); err != nil { return errors.Wrap(err, "could not insert asset assetStat row") } } - if err := builder.Exec(); err != nil { + if err := builder.Exec(ctx); err != nil { return errors.Wrap(err, "could not exec asset assetStats insert builder") } @@ -53,9 +54,9 @@ func (q *Q) InsertAssetStats(assetStats []ExpAssetStat, batchSize int) error { // InsertAssetStat a single asset assetStat row into the exp_asset_stats // Returns number of rows affected and error. -func (q *Q) InsertAssetStat(assetStat ExpAssetStat) (int64, error) { +func (q *Q) InsertAssetStat(ctx context.Context, assetStat ExpAssetStat) (int64, error) { sql := sq.Insert("exp_asset_stats").SetMap(assetStatToMap(assetStat)) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } @@ -65,11 +66,11 @@ func (q *Q) InsertAssetStat(assetStat ExpAssetStat) (int64, error) { // UpdateAssetStat updates a row in the exp_asset_stats table. // Returns number of rows affected and error. -func (q *Q) UpdateAssetStat(assetStat ExpAssetStat) (int64, error) { +func (q *Q) UpdateAssetStat(ctx context.Context, assetStat ExpAssetStat) (int64, error) { sql := sq.Update("exp_asset_stats"). SetMap(assetStatToMap(assetStat)). Where(assetStatToPrimaryKeyMap(assetStat)) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } @@ -78,14 +79,14 @@ func (q *Q) UpdateAssetStat(assetStat ExpAssetStat) (int64, error) { } // RemoveAssetStat removes a row in the exp_asset_stats table. -func (q *Q) RemoveAssetStat(assetType xdr.AssetType, assetCode, assetIssuer string) (int64, error) { +func (q *Q) RemoveAssetStat(ctx context.Context, assetType xdr.AssetType, assetCode, assetIssuer string) (int64, error) { sql := sq.Delete("exp_asset_stats"). Where(map[string]interface{}{ "asset_type": assetType, "asset_code": assetCode, "asset_issuer": assetIssuer, }) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } @@ -94,14 +95,14 @@ func (q *Q) RemoveAssetStat(assetType xdr.AssetType, assetCode, assetIssuer stri } // GetAssetStat returns a row in the exp_asset_stats table. -func (q *Q) GetAssetStat(assetType xdr.AssetType, assetCode, assetIssuer string) (ExpAssetStat, error) { +func (q *Q) GetAssetStat(ctx context.Context, assetType xdr.AssetType, assetCode, assetIssuer string) (ExpAssetStat, error) { sql := selectAssetStats.Where(map[string]interface{}{ "asset_type": assetType, "asset_code": assetCode, "asset_issuer": assetIssuer, }) var assetStat ExpAssetStat - err := q.Get(&assetStat, sql) + err := q.Get(ctx, &assetStat, sql) return assetStat, err } @@ -137,7 +138,7 @@ func parseAssetStatsCursor(cursor string) (string, string, error) { } // GetAssetStats returns a page of exp_asset_stats rows. -func (q *Q) GetAssetStats(assetCode, assetIssuer string, page db2.PageQuery) ([]ExpAssetStat, error) { +func (q *Q) GetAssetStats(ctx context.Context, assetCode, assetIssuer string, page db2.PageQuery) ([]ExpAssetStat, error) { sql := selectAssetStats filters := map[string]interface{}{} if assetCode != "" { @@ -173,7 +174,7 @@ func (q *Q) GetAssetStats(assetCode, assetIssuer string, page db2.PageQuery) ([] sql = sql.OrderBy("(asset_code, asset_issuer) " + orderBy).Limit(page.Limit) var results []ExpAssetStat - if err := q.Select(&results, sql); err != nil { + if err := q.Select(ctx, &results, sql); err != nil { return nil, errors.Wrap(err, "could not run select query") } diff --git a/services/horizon/internal/db2/history/asset_stats_test.go b/services/horizon/internal/db2/history/asset_stats_test.go index 63d478a583..9a813e4b4c 100644 --- a/services/horizon/internal/db2/history/asset_stats_test.go +++ b/services/horizon/internal/db2/history/asset_stats_test.go @@ -14,7 +14,7 @@ func TestInsertAssetStats(t *testing.T) { defer tt.Finish() test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - tt.Assert.NoError(q.InsertAssetStats([]ExpAssetStat{}, 1)) + tt.Assert.NoError(q.InsertAssetStats(tt.Ctx, []ExpAssetStat{}, 1)) assetStats := []ExpAssetStat{ { @@ -52,10 +52,10 @@ func TestInsertAssetStats(t *testing.T) { NumAccounts: 1, }, } - tt.Assert.NoError(q.InsertAssetStats(assetStats, 1)) + tt.Assert.NoError(q.InsertAssetStats(tt.Ctx, assetStats, 1)) for _, assetStat := range assetStats { - got, err := q.GetAssetStat(assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) + got, err := q.GetAssetStat(tt.Ctx, assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) tt.Assert.NoError(err) tt.Assert.Equal(got, assetStat) } @@ -105,11 +105,11 @@ func TestInsertAssetStat(t *testing.T) { } for _, assetStat := range assetStats { - numChanged, err := q.InsertAssetStat(assetStat) + numChanged, err := q.InsertAssetStat(tt.Ctx, assetStat) tt.Assert.NoError(err) tt.Assert.Equal(numChanged, int64(1)) - got, err := q.GetAssetStat(assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) + got, err := q.GetAssetStat(tt.Ctx, assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) tt.Assert.NoError(err) tt.Assert.Equal(got, assetStat) } @@ -139,23 +139,23 @@ func TestInsertAssetStatAlreadyExistsError(t *testing.T) { NumAccounts: 2, } - numChanged, err := q.InsertAssetStat(assetStat) + numChanged, err := q.InsertAssetStat(tt.Ctx, assetStat) tt.Assert.NoError(err) tt.Assert.Equal(numChanged, int64(1)) - numChanged, err = q.InsertAssetStat(assetStat) + numChanged, err = q.InsertAssetStat(tt.Ctx, assetStat) tt.Assert.Error(err) tt.Assert.Equal(numChanged, int64(0)) assetStat.NumAccounts = 4 assetStat.Amount = "3" - numChanged, err = q.InsertAssetStat(assetStat) + numChanged, err = q.InsertAssetStat(tt.Ctx, assetStat) tt.Assert.Error(err) tt.Assert.Equal(numChanged, int64(0)) assetStat.NumAccounts = 2 assetStat.Amount = "1" - got, err := q.GetAssetStat(assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) + got, err := q.GetAssetStat(tt.Ctx, assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) tt.Assert.NoError(err) tt.Assert.Equal(got, assetStat) } @@ -184,11 +184,11 @@ func TestUpdateAssetStatDoesNotExistsError(t *testing.T) { NumAccounts: 2, } - numChanged, err := q.UpdateAssetStat(assetStat) + numChanged, err := q.UpdateAssetStat(tt.Ctx, assetStat) tt.Assert.Nil(err) tt.Assert.Equal(numChanged, int64(0)) - _, err = q.GetAssetStat(assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) + _, err = q.GetAssetStat(tt.Ctx, assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) tt.Assert.Equal(err, sql.ErrNoRows) } @@ -217,22 +217,22 @@ func TestUpdateStat(t *testing.T) { NumAccounts: 2, } - numChanged, err := q.InsertAssetStat(assetStat) + numChanged, err := q.InsertAssetStat(tt.Ctx, assetStat) tt.Assert.NoError(err) tt.Assert.Equal(numChanged, int64(1)) - got, err := q.GetAssetStat(assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) + got, err := q.GetAssetStat(tt.Ctx, assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) tt.Assert.NoError(err) tt.Assert.Equal(got, assetStat) assetStat.NumAccounts = 50 assetStat.Amount = "23" - numChanged, err = q.UpdateAssetStat(assetStat) + numChanged, err = q.UpdateAssetStat(tt.Ctx, assetStat) tt.Assert.Nil(err) tt.Assert.Equal(numChanged, int64(1)) - got, err = q.GetAssetStat(assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) + got, err = q.GetAssetStat(tt.Ctx, assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) tt.Assert.NoError(err) tt.Assert.Equal(got, assetStat) } @@ -261,7 +261,7 @@ func TestGetAssetStatDoesNotExist(t *testing.T) { NumAccounts: 2, } - _, err := q.GetAssetStat(assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) + _, err := q.GetAssetStat(tt.Ctx, assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) tt.Assert.Equal(err, sql.ErrNoRows) } @@ -290,7 +290,7 @@ func TestRemoveAssetStat(t *testing.T) { NumAccounts: 2, } - numChanged, err := q.RemoveAssetStat( + numChanged, err := q.RemoveAssetStat(tt.Ctx, assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer, @@ -298,15 +298,15 @@ func TestRemoveAssetStat(t *testing.T) { tt.Assert.Nil(err) tt.Assert.Equal(numChanged, int64(0)) - numChanged, err = q.InsertAssetStat(assetStat) + numChanged, err = q.InsertAssetStat(tt.Ctx, assetStat) tt.Assert.NoError(err) tt.Assert.Equal(numChanged, int64(1)) - got, err := q.GetAssetStat(assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) + got, err := q.GetAssetStat(tt.Ctx, assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) tt.Assert.NoError(err) tt.Assert.Equal(got, assetStat) - numChanged, err = q.RemoveAssetStat( + numChanged, err = q.RemoveAssetStat(tt.Ctx, assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer, @@ -314,7 +314,7 @@ func TestRemoveAssetStat(t *testing.T) { tt.Assert.Nil(err) tt.Assert.Equal(numChanged, int64(1)) - _, err = q.GetAssetStat(assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) + _, err = q.GetAssetStat(tt.Ctx, assetStat.AssetType, assetStat.AssetCode, assetStat.AssetIssuer) tt.Assert.Equal(err, sql.ErrNoRows) } @@ -367,7 +367,7 @@ func TestGetAssetStatsCursorValidation(t *testing.T) { Order: "asc", Limit: 5, } - results, err := q.GetAssetStats("", "", page) + results, err := q.GetAssetStats(tt.Ctx, "", "", page) tt.Assert.Empty(results) tt.Assert.NotNil(err) tt.Assert.Contains(err.Error(), testCase.expectedError) @@ -386,7 +386,7 @@ func TestGetAssetStatsOrderValidation(t *testing.T) { Order: "invalid", Limit: 5, } - results, err := q.GetAssetStats("", "", page) + results, err := q.GetAssetStats(tt.Ctx, "", "", page) tt.Assert.Empty(results) tt.Assert.NotNil(err) tt.Assert.Contains(err.Error(), "invalid page order") @@ -481,7 +481,7 @@ func TestGetAssetStatsFiltersAndCursor(t *testing.T) { usdAssetStat, } for _, assetStat := range assetStats { - numChanged, err := q.InsertAssetStat(assetStat) + numChanged, err := q.InsertAssetStat(tt.Ctx, assetStat) tt.Assert.NoError(err) tt.Assert.Equal(numChanged, int64(1)) } @@ -721,12 +721,12 @@ func TestGetAssetStatsFiltersAndCursor(t *testing.T) { Cursor: testCase.cursor, Limit: 5, } - results, err := q.GetAssetStats(testCase.assetCode, testCase.assetIssuer, page) + results, err := q.GetAssetStats(tt.Ctx, testCase.assetCode, testCase.assetIssuer, page) tt.Assert.NoError(err) tt.Assert.Equal(testCase.expected, results) page.Limit = 1 - results, err = q.GetAssetStats(testCase.assetCode, testCase.assetIssuer, page) + results, err = q.GetAssetStats(tt.Ctx, testCase.assetCode, testCase.assetIssuer, page) tt.Assert.NoError(err) if len(testCase.expected) == 0 { tt.Assert.Equal(testCase.expected, results) @@ -738,7 +738,7 @@ func TestGetAssetStatsFiltersAndCursor(t *testing.T) { page = page.Invert() page.Limit = 5 - results, err = q.GetAssetStats(testCase.assetCode, testCase.assetIssuer, page) + results, err = q.GetAssetStats(tt.Ctx, testCase.assetCode, testCase.assetIssuer, page) tt.Assert.NoError(err) reverseAssetStats(results) tt.Assert.Equal(testCase.expected, results) diff --git a/services/horizon/internal/db2/history/asset_test.go b/services/horizon/internal/db2/history/asset_test.go index c345c43805..9289f44622 100644 --- a/services/horizon/internal/db2/history/asset_test.go +++ b/services/horizon/internal/db2/history/asset_test.go @@ -18,7 +18,7 @@ func TestCreateAssetsSortedOrder(t *testing.T) { usdAsset, nativeAsset, eurAsset, xdr.MustNewCreditAsset("CNY", issuer.Address()), } - assetMap, err := q.CreateAssets( + assetMap, err := q.CreateAssets(tt.Ctx, assets, 2, ) @@ -61,7 +61,7 @@ func TestCreateAssets(t *testing.T) { assets := []xdr.Asset{ nativeAsset, eurAsset, } - assetMap, err := q.CreateAssets(assets, 1) + assetMap, err := q.CreateAssets(tt.Ctx, assets, 1) tt.Assert.NoError(err) tt.Assert.Len(assetMap, len(assets)) @@ -81,7 +81,7 @@ func TestCreateAssets(t *testing.T) { } // CreateAssets handles duplicates - assetMap, err = q.CreateAssets( + assetMap, err = q.CreateAssets(tt.Ctx, []xdr.Asset{ nativeAsset, nativeAsset, eurAsset, eurAsset, nativeAsset, nativeAsset, eurAsset, eurAsset, @@ -106,7 +106,7 @@ func TestCreateAssets(t *testing.T) { // CreateAssets handles duplicates and new rows assets = append(assets, usdAsset) - assetMap, err = q.CreateAssets(assets, 2) + assetMap, err = q.CreateAssets(tt.Ctx, assets, 2) tt.Assert.NoError(err) tt.Assert.Len(assetMap, len(assets)) diff --git a/services/horizon/internal/db2/history/claimable_balances.go b/services/horizon/internal/db2/history/claimable_balances.go index 8b020a3140..75757b5393 100644 --- a/services/horizon/internal/db2/history/claimable_balances.go +++ b/services/horizon/internal/db2/history/claimable_balances.go @@ -1,6 +1,7 @@ package history import ( + "context" "database/sql/driver" "encoding/json" "strconv" @@ -116,17 +117,17 @@ type Claimant struct { } type ClaimableBalancesBatchInsertBuilder interface { - Add(entry *xdr.LedgerEntry) error - Exec() error + Add(ctx context.Context, entry *xdr.LedgerEntry) error + Exec(ctx context.Context) error } // QClaimableBalances defines account related queries. type QClaimableBalances interface { NewClaimableBalancesBatchInsertBuilder(maxBatchSize int) ClaimableBalancesBatchInsertBuilder - UpdateClaimableBalance(entry xdr.LedgerEntry) (int64, error) - RemoveClaimableBalance(cBalance xdr.ClaimableBalanceEntry) (int64, error) - GetClaimableBalancesByID(ids []xdr.ClaimableBalanceId) ([]ClaimableBalance, error) - CountClaimableBalances() (int, error) + UpdateClaimableBalance(ctx context.Context, entry xdr.LedgerEntry) (int64, error) + RemoveClaimableBalance(ctx context.Context, cBalance xdr.ClaimableBalanceEntry) (int64, error) + GetClaimableBalancesByID(ctx context.Context, ids []xdr.ClaimableBalanceId) ([]ClaimableBalance, error) + CountClaimableBalances(ctx context.Context) (int, error) } // NewClaimableBalancesBatchInsertBuilder constructs a new ClaimableBalancesBatchInsertBuilder instance @@ -140,11 +141,11 @@ func (q *Q) NewClaimableBalancesBatchInsertBuilder(maxBatchSize int) ClaimableBa } // CountClaimableBalances returns the total number of claimable balances in the DB -func (q *Q) CountClaimableBalances() (int, error) { +func (q *Q) CountClaimableBalances(ctx context.Context) (int, error) { sql := sq.Select("count(*)").From("claimable_balances") var count int - if err := q.Get(&count, sql); err != nil { + if err := q.Get(ctx, &count, sql); err != nil { return 0, errors.Wrap(err, "could not run select query") } @@ -152,17 +153,17 @@ func (q *Q) CountClaimableBalances() (int, error) { } // GetClaimableBalancesByID finds all claimable balances by ClaimableBalanceId -func (q *Q) GetClaimableBalancesByID(ids []xdr.ClaimableBalanceId) ([]ClaimableBalance, error) { +func (q *Q) GetClaimableBalancesByID(ctx context.Context, ids []xdr.ClaimableBalanceId) ([]ClaimableBalance, error) { var cBalances []ClaimableBalance sql := selectClaimableBalances.Where(map[string]interface{}{"cb.id": ids}) - err := q.Select(&cBalances, sql) + err := q.Select(ctx, &cBalances, sql) return cBalances, err } // UpdateClaimableBalance updates a row in the claimable_balances table. // The only updatable value on claimable_balances is sponsor // Returns number of rows affected and error. -func (q *Q) UpdateClaimableBalance(entry xdr.LedgerEntry) (int64, error) { +func (q *Q) UpdateClaimableBalance(ctx context.Context, entry xdr.LedgerEntry) (int64, error) { cBalance := entry.Data.MustClaimableBalance() cBalanceMap := map[string]interface{}{ "last_modified_ledger": entry.LastModifiedLedgerSeq, @@ -170,7 +171,7 @@ func (q *Q) UpdateClaimableBalance(entry xdr.LedgerEntry) (int64, error) { } sql := sq.Update("claimable_balances").SetMap(cBalanceMap).Where("id = ?", cBalance.BalanceId) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } @@ -180,10 +181,10 @@ func (q *Q) UpdateClaimableBalance(entry xdr.LedgerEntry) (int64, error) { // RemoveClaimableBalance deletes a row in the claimable_balances table. // Returns number of rows affected and error. -func (q *Q) RemoveClaimableBalance(cBalance xdr.ClaimableBalanceEntry) (int64, error) { +func (q *Q) RemoveClaimableBalance(ctx context.Context, cBalance xdr.ClaimableBalanceEntry) (int64, error) { sql := sq.Delete("claimable_balances"). Where(sq.Eq{"id": cBalance.BalanceId}) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } @@ -192,15 +193,15 @@ func (q *Q) RemoveClaimableBalance(cBalance xdr.ClaimableBalanceEntry) (int64, e } // FindClaimableBalanceByID returns a claimable balance. -func (q *Q) FindClaimableBalanceByID(balanceID xdr.ClaimableBalanceId) (ClaimableBalance, error) { +func (q *Q) FindClaimableBalanceByID(ctx context.Context, balanceID xdr.ClaimableBalanceId) (ClaimableBalance, error) { var claimableBalance ClaimableBalance sql := selectClaimableBalances.Limit(1).Where("cb.id = ?", balanceID) - err := q.Get(&claimableBalance, sql) + err := q.Get(ctx, &claimableBalance, sql) return claimableBalance, err } // GetClaimableBalances finds all claimable balances where accountID is one of the claimants -func (q *Q) GetClaimableBalances(query ClaimableBalancesQuery) ([]ClaimableBalance, error) { +func (q *Q) GetClaimableBalances(ctx context.Context, query ClaimableBalancesQuery) ([]ClaimableBalance, error) { sql, err := query.ApplyCursor(selectClaimableBalances) if err != nil { return nil, errors.Wrap(err, "could not apply query to page") @@ -230,7 +231,7 @@ func (q *Q) GetClaimableBalances(query ClaimableBalancesQuery) ([]ClaimableBalan ) var results []ClaimableBalance - if err := q.Select(&results, sql); err != nil { + if err := q.Select(ctx, &results, sql); err != nil { return nil, errors.Wrap(err, "could not run select query") } @@ -254,7 +255,7 @@ func buildClaimants(claimants []xdr.Claimant) Claimants { return hClaimants } -func (i *claimableBalancesBatchInsertBuilder) Add(entry *xdr.LedgerEntry) error { +func (i *claimableBalancesBatchInsertBuilder) Add(ctx context.Context, entry *xdr.LedgerEntry) error { cBalance := entry.Data.MustClaimableBalance() row := ClaimableBalance{ BalanceID: cBalance.BalanceId, @@ -265,11 +266,11 @@ func (i *claimableBalancesBatchInsertBuilder) Add(entry *xdr.LedgerEntry) error LastModifiedLedger: uint32(entry.LastModifiedLedgerSeq), Flags: uint32(cBalance.Flags()), } - return i.builder.RowStruct(row) + return i.builder.RowStruct(ctx, row) } -func (i *claimableBalancesBatchInsertBuilder) Exec() error { - return i.builder.Exec() +func (i *claimableBalancesBatchInsertBuilder) Exec(ctx context.Context) error { + return i.builder.Exec(ctx) } var claimableBalancesSelectStatement = "cb.id, " + diff --git a/services/horizon/internal/db2/history/claimable_balances_batch_insert_builder_test.go b/services/horizon/internal/db2/history/claimable_balances_batch_insert_builder_test.go index 2ae97c9a38..c360fb1f61 100644 --- a/services/horizon/internal/db2/history/claimable_balances_batch_insert_builder_test.go +++ b/services/horizon/internal/db2/history/claimable_balances_batch_insert_builder_test.go @@ -59,14 +59,14 @@ func TestAddClaimableBalance(t *testing.T) { builder := q.NewClaimableBalancesBatchInsertBuilder(2) - err := builder.Add(&entry) + err := builder.Add(tt.Ctx, &entry) tt.Assert.NoError(err) - err = builder.Exec() + err = builder.Exec(tt.Ctx) tt.Assert.NoError(err) cbs := []ClaimableBalance{} - err = q.Select(&cbs, selectClaimableBalances) + err = q.Select(tt.Ctx, &cbs, selectClaimableBalances) if tt.Assert.NoError(err) { tt.Assert.Len(cbs, 1) diff --git a/services/horizon/internal/db2/history/claimable_balances_test.go b/services/horizon/internal/db2/history/claimable_balances_test.go index 19fa573332..c95320757a 100644 --- a/services/horizon/internal/db2/history/claimable_balances_test.go +++ b/services/horizon/internal/db2/history/claimable_balances_test.go @@ -47,22 +47,22 @@ func TestRemoveClaimableBalance(t *testing.T) { builder := q.NewClaimableBalancesBatchInsertBuilder(2) - err := builder.Add(&entry) + err := builder.Add(tt.Ctx, &entry) tt.Assert.NoError(err) - err = builder.Exec() + err = builder.Exec(tt.Ctx) tt.Assert.NoError(err) - r, err := q.FindClaimableBalanceByID(cBalance.BalanceId) + r, err := q.FindClaimableBalanceByID(tt.Ctx, cBalance.BalanceId) tt.Assert.NoError(err) tt.Assert.NotNil(r) - removed, err := q.RemoveClaimableBalance(cBalance) + removed, err := q.RemoveClaimableBalance(tt.Ctx, cBalance) tt.Assert.NoError(err) tt.Assert.Equal(int64(1), removed) cbs := []ClaimableBalance{} - err = q.Select(&cbs, selectClaimableBalances) + err = q.Select(tt.Ctx, &cbs, selectClaimableBalances) if tt.Assert.NoError(err) { tt.Assert.Len(cbs, 0) @@ -110,7 +110,7 @@ func TestFindClaimableBalancesByDestination(t *testing.T) { builder := q.NewClaimableBalancesBatchInsertBuilder(2) - err := builder.Add(&entry) + err := builder.Add(tt.Ctx, &entry) tt.Assert.NoError(err) balanceID = xdr.ClaimableBalanceId{ @@ -150,10 +150,10 @@ func TestFindClaimableBalancesByDestination(t *testing.T) { LastModifiedLedgerSeq: lastModifiedLedgerSeq, } - err = builder.Add(&entry) + err = builder.Add(tt.Ctx, &entry) tt.Assert.NoError(err) - err = builder.Exec() + err = builder.Exec(tt.Ctx) tt.Assert.NoError(err) query := ClaimableBalancesQuery{ @@ -161,7 +161,7 @@ func TestFindClaimableBalancesByDestination(t *testing.T) { Claimant: xdr.MustAddressPtr(dest1), } - cbs, err := q.GetClaimableBalances(query) + cbs, err := q.GetClaimableBalances(tt.Ctx, query) tt.Assert.NoError(err) tt.Assert.Len(cbs, 2) @@ -170,7 +170,7 @@ func TestFindClaimableBalancesByDestination(t *testing.T) { } query.Claimant = xdr.MustAddressPtr(dest2) - cbs, err = q.GetClaimableBalances(query) + cbs, err = q.GetClaimableBalances(tt.Ctx, query) tt.Assert.NoError(err) tt.Assert.Len(cbs, 1) tt.Assert.Equal(dest2, cbs[0].Claimants[1].Destination) @@ -215,10 +215,10 @@ func TestUpdateClaimableBalance(t *testing.T) { builder := q.NewClaimableBalancesBatchInsertBuilder(1) - err := builder.Add(&entry) + err := builder.Add(tt.Ctx, &entry) tt.Assert.NoError(err) - err = builder.Exec() + err = builder.Exec(tt.Ctx) tt.Assert.NoError(err) entry = xdr.LedgerEntry{ @@ -235,12 +235,12 @@ func TestUpdateClaimableBalance(t *testing.T) { }, } - updated, err := q.UpdateClaimableBalance(entry) + updated, err := q.UpdateClaimableBalance(tt.Ctx, entry) tt.Assert.NoError(err) tt.Assert.Equal(int64(1), updated) cbs := []ClaimableBalance{} - err = q.Select(&cbs, selectClaimableBalances) + err = q.Select(tt.Ctx, &cbs, selectClaimableBalances) tt.Assert.NoError(err) tt.Assert.Equal("GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", cbs[0].Sponsor.String) tt.Assert.Equal(uint32(lastModifiedLedgerSeq+1), cbs[0].LastModifiedLedger) @@ -285,13 +285,13 @@ func TestFindClaimableBalance(t *testing.T) { builder := q.NewClaimableBalancesBatchInsertBuilder(2) - err := builder.Add(&entry) + err := builder.Add(tt.Ctx, &entry) tt.Assert.NoError(err) - err = builder.Exec() + err = builder.Exec(tt.Ctx) tt.Assert.NoError(err) - cb, err := q.FindClaimableBalanceByID(cBalance.BalanceId) + cb, err := q.FindClaimableBalanceByID(tt.Ctx, cBalance.BalanceId) tt.Assert.NoError(err) tt.Assert.Equal(cBalance.BalanceId, cb.BalanceID) @@ -344,21 +344,21 @@ func TestGetClaimableBalancesByID(t *testing.T) { builder := q.NewClaimableBalancesBatchInsertBuilder(2) - err := builder.Add(&entry) + err := builder.Add(tt.Ctx, &entry) tt.Assert.NoError(err) - err = builder.Exec() + err = builder.Exec(tt.Ctx) tt.Assert.NoError(err) - r, err := q.GetClaimableBalancesByID([]xdr.ClaimableBalanceId{cBalance.BalanceId}) + r, err := q.GetClaimableBalancesByID(tt.Ctx, []xdr.ClaimableBalanceId{cBalance.BalanceId}) tt.Assert.NoError(err) tt.Assert.Len(r, 1) - removed, err := q.RemoveClaimableBalance(cBalance) + removed, err := q.RemoveClaimableBalance(tt.Ctx, cBalance) tt.Assert.NoError(err) tt.Assert.Equal(int64(1), removed) - r, err = q.GetClaimableBalancesByID([]xdr.ClaimableBalanceId{cBalance.BalanceId}) + r, err = q.GetClaimableBalancesByID(tt.Ctx, []xdr.ClaimableBalanceId{cBalance.BalanceId}) tt.Assert.NoError(err) tt.Assert.Len(r, 0) } diff --git a/services/horizon/internal/db2/history/effect.go b/services/horizon/internal/db2/history/effect.go index 1a400a9250..efc24425da 100644 --- a/services/horizon/internal/db2/history/effect.go +++ b/services/horizon/internal/db2/history/effect.go @@ -1,6 +1,7 @@ package history import ( + "context" "encoding/json" "fmt" "math" @@ -48,9 +49,9 @@ func (q *Q) Effects() *EffectsQ { } // ForAccount filters the operations collection to a specific account -func (q *EffectsQ) ForAccount(aid string) *EffectsQ { +func (q *EffectsQ) ForAccount(ctx context.Context, aid string) *EffectsQ { var account Account - q.Err = q.parent.AccountByAddress(&account, aid) + q.Err = q.parent.AccountByAddress(ctx, &account, aid) if q.Err != nil { return q } @@ -62,9 +63,9 @@ func (q *EffectsQ) ForAccount(aid string) *EffectsQ { // ForLedger filters the query to only effects in a specific ledger, // specified by its sequence. -func (q *EffectsQ) ForLedger(seq int32) *EffectsQ { +func (q *EffectsQ) ForLedger(ctx context.Context, seq int32) *EffectsQ { var ledger Ledger - q.Err = q.parent.LedgerBySequence(&ledger, seq) + q.Err = q.parent.LedgerBySequence(ctx, &ledger, seq) if q.Err != nil { return q } @@ -97,9 +98,9 @@ func (q *EffectsQ) ForOperation(id int64) *EffectsQ { // ForTransaction filters the query to only effects in a specific // transaction, specified by the transactions's hex-encoded hash. -func (q *EffectsQ) ForTransaction(hash string) *EffectsQ { +func (q *EffectsQ) ForTransaction(ctx context.Context, hash string) *EffectsQ { var tx Transaction - q.Err = q.parent.TransactionByHash(&tx, hash) + q.Err = q.parent.TransactionByHash(ctx, &tx, hash) if q.Err != nil { return q } @@ -162,12 +163,12 @@ func (q *EffectsQ) Page(page db2.PageQuery) *EffectsQ { } // Select loads the results of the query specified by `q` into `dest`. -func (q *EffectsQ) Select(dest interface{}) error { +func (q *EffectsQ) Select(ctx context.Context, dest interface{}) error { if q.Err != nil { return q.Err } - q.Err = q.parent.Select(dest, q.sql) + q.Err = q.parent.Select(ctx, dest, q.sql) return q.Err } diff --git a/services/horizon/internal/db2/history/effect_batch_insert_builder.go b/services/horizon/internal/db2/history/effect_batch_insert_builder.go index 90c463a1e3..8b2522cf9e 100644 --- a/services/horizon/internal/db2/history/effect_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/effect_batch_insert_builder.go @@ -1,6 +1,9 @@ package history import ( + "context" + + "github.com/guregu/null" "github.com/stellar/go/support/db" ) @@ -8,13 +11,15 @@ import ( // history_effects table type EffectBatchInsertBuilder interface { Add( + ctx context.Context, accountID int64, + muxedAccount null.String, operationID int64, order uint32, effectType EffectType, details []byte, ) error - Exec() error + Exec(ctx context.Context) error } // effectBatchInsertBuilder is a simple wrapper around db.BatchInsertBuilder @@ -34,14 +39,17 @@ func (q *Q) NewEffectBatchInsertBuilder(maxBatchSize int) EffectBatchInsertBuild // Add adds a effect to the batch func (i *effectBatchInsertBuilder) Add( + ctx context.Context, accountID int64, + muxedAccount null.String, operationID int64, order uint32, effectType EffectType, details []byte, ) error { - return i.builder.Row(map[string]interface{}{ + return i.builder.Row(ctx, map[string]interface{}{ "history_account_id": accountID, + "address_muxed": muxedAccount, "history_operation_id": operationID, "\"order\"": order, "type": effectType, @@ -49,6 +57,6 @@ func (i *effectBatchInsertBuilder) Add( }) } -func (i *effectBatchInsertBuilder) Exec() error { - return i.builder.Exec() +func (i *effectBatchInsertBuilder) Exec(ctx context.Context) error { + return i.builder.Exec(ctx) } diff --git a/services/horizon/internal/db2/history/effect_batch_insert_builder_test.go b/services/horizon/internal/db2/history/effect_batch_insert_builder_test.go index 213dd2399f..fd9a01fa87 100644 --- a/services/horizon/internal/db2/history/effect_batch_insert_builder_test.go +++ b/services/horizon/internal/db2/history/effect_batch_insert_builder_test.go @@ -4,6 +4,7 @@ import ( "encoding/json" "testing" + "github.com/guregu/null" "github.com/stellar/go/services/horizon/internal/test" "github.com/stellar/go/services/horizon/internal/toid" ) @@ -14,8 +15,9 @@ func TestAddEffect(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - address := "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON" - accounIDs, err := q.CreateAccounts([]string{address}, 1) + address := "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY" + muxedAddres := "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26" + accounIDs, err := q.CreateAccounts(tt.Ctx, []string{address}, 1) tt.Assert.NoError(err) builder := q.NewEffectBatchInsertBuilder(2) @@ -25,8 +27,9 @@ func TestAddEffect(t *testing.T) { "asset_type": "native", }) - err = builder.Add( + err = builder.Add(tt.Ctx, accounIDs[address], + null.StringFrom(muxedAddres), toid.New(sequence, 1, 1).ToInt64(), 1, 3, @@ -34,15 +37,16 @@ func TestAddEffect(t *testing.T) { ) tt.Assert.NoError(err) - err = builder.Exec() + err = builder.Exec(tt.Ctx) tt.Assert.NoError(err) effects := []Effect{} - tt.Assert.NoError(q.Effects().Select(&effects)) + tt.Assert.NoError(q.Effects().Select(tt.Ctx, &effects)) tt.Assert.Len(effects, 1) effect := effects[0] tt.Assert.Equal(address, effect.Account) + tt.Assert.Equal(muxedAddres, effect.AccountMuxed.String) tt.Assert.Equal(int64(240518172673), effect.HistoryOperationID) tt.Assert.Equal(int32(1), effect.Order) tt.Assert.Equal(EffectType(3), effect.Type) diff --git a/services/horizon/internal/db2/history/fee_bump_scenario.go b/services/horizon/internal/db2/history/fee_bump_scenario.go index fe2c843fff..fc2532028f 100644 --- a/services/horizon/internal/db2/history/fee_bump_scenario.go +++ b/services/horizon/internal/db2/history/fee_bump_scenario.go @@ -1,6 +1,7 @@ package history import ( + "context" "encoding/hex" "encoding/json" "testing" @@ -56,7 +57,7 @@ func buildLedgerTransaction(t *testing.T, tx testTransaction) ingest.LedgerTrans Envelope: xdr.TransactionEnvelope{}, Result: xdr.TransactionResultPair{}, FeeChanges: xdr.LedgerEntryChanges{}, - Meta: xdr.TransactionMeta{}, + UnsafeMeta: xdr.TransactionMeta{}, } tt := assert.New(t) @@ -65,7 +66,7 @@ func buildLedgerTransaction(t *testing.T, tx testTransaction) ingest.LedgerTrans tt.NoError(err) err = xdr.SafeUnmarshalBase64(tx.resultXDR, &transaction.Result.Result) tt.NoError(err) - err = xdr.SafeUnmarshalBase64(tx.metaXDR, &transaction.Meta) + err = xdr.SafeUnmarshalBase64(tx.metaXDR, &transaction.UnsafeMeta) tt.NoError(err) err = xdr.SafeUnmarshalBase64(tx.feeChangesXDR, &transaction.FeeChanges) tt.NoError(err) @@ -113,7 +114,7 @@ func FeeBumpScenario(tt *test.T, q *Q, successful bool) FeeBumpFixture { } *fixture.Ledger.SuccessfulTransactionCount = 1 *fixture.Ledger.FailedTransactionCount = 0 - _, err := q.Exec(sq.Insert("history_ledgers").SetMap(ledgerToMap(fixture.Ledger))) + _, err := q.Exec(context.Background(), sq.Insert("history_ledgers").SetMap(ledgerToMap(fixture.Ledger))) tt.Assert.NoError(err) fixture.Envelope = xdr.TransactionEnvelope{ @@ -242,12 +243,13 @@ func FeeBumpScenario(tt *test.T, q *Q, successful bool) FeeBumpFixture { metaXDR: "AAAAAQAAAAAAAAAA", hash: "edba3051b2f2d9b713e8a08709d631eccb72c59864ff3c564c68792271bb24a7", }) + ctx := context.Background() insertBuilder := q.NewTransactionBatchInsertBuilder(2) // include both fee bump and normal transaction in the same batch // to make sure both kinds of transactions can be inserted using a single exec statement - tt.Assert.NoError(insertBuilder.Add(feeBumpTransaction, sequence)) - tt.Assert.NoError(insertBuilder.Add(normalTransaction, sequence)) - tt.Assert.NoError(insertBuilder.Exec()) + tt.Assert.NoError(insertBuilder.Add(ctx, feeBumpTransaction, sequence)) + tt.Assert.NoError(insertBuilder.Add(ctx, normalTransaction, sequence)) + tt.Assert.NoError(insertBuilder.Exec(ctx)) account := fixture.Envelope.SourceAccount().ToAccountId() feeBumpAccount := fixture.Envelope.FeeBumpAccount().ToAccountId() @@ -259,31 +261,35 @@ func FeeBumpScenario(tt *test.T, q *Q, successful bool) FeeBumpFixture { tt.Assert.NoError(err) tt.Assert.NoError(opBuilder.Add( + ctx, toid.New(fixture.Ledger.Sequence, 1, 1).ToInt64(), toid.New(fixture.Ledger.Sequence, 1, 0).ToInt64(), 1, xdr.OperationTypeBumpSequence, details, account.Address(), + null.String{}, )) - tt.Assert.NoError(opBuilder.Exec()) + tt.Assert.NoError(opBuilder.Exec(ctx)) effectBuilder := q.NewEffectBatchInsertBuilder(2) details, err = json.Marshal(map[string]interface{}{"new_seq": 98}) tt.Assert.NoError(err) - accounIDs, err := q.CreateAccounts([]string{account.Address()}, 1) + accounIDs, err := q.CreateAccounts(ctx, []string{account.Address()}, 1) tt.Assert.NoError(err) err = effectBuilder.Add( + ctx, accounIDs[account.Address()], + null.String{}, toid.New(fixture.Ledger.Sequence, 1, 1).ToInt64(), 1, EffectSequenceBumped, details, ) tt.Assert.NoError(err) - tt.Assert.NoError(effectBuilder.Exec()) + tt.Assert.NoError(effectBuilder.Exec(ctx)) fixture.Transaction = Transaction{ TransactionWithoutLedger: TransactionWithoutLedger{ @@ -333,7 +339,7 @@ func FeeBumpScenario(tt *test.T, q *Q, successful bool) FeeBumpFixture { }, } - results, err := q.TransactionsByIDs(fixture.Transaction.ID, fixture.NormalTransaction.ID) + results, err := q.TransactionsByIDs(ctx, fixture.Transaction.ID, fixture.NormalTransaction.ID) tt.Assert.NoError(err) fixture.Transaction.CreatedAt = results[fixture.Transaction.ID].CreatedAt diff --git a/services/horizon/internal/db2/history/history_claimable_balances.go b/services/horizon/internal/db2/history/history_claimable_balances.go index c8d5527366..371323c5f9 100644 --- a/services/horizon/internal/db2/history/history_claimable_balances.go +++ b/services/horizon/internal/db2/history/history_claimable_balances.go @@ -2,6 +2,7 @@ package history import ( "bytes" + "context" "sort" sq "github.com/Masterminds/squirrel" @@ -13,14 +14,14 @@ import ( // QHistoryClaimableBalances defines account related queries. type QHistoryClaimableBalances interface { - CreateHistoryClaimableBalances(ids []xdr.ClaimableBalanceId, batchSize int) (map[string]int64, error) + CreateHistoryClaimableBalances(ctx context.Context, ids []xdr.ClaimableBalanceId, batchSize int) (map[string]int64, error) NewOperationClaimableBalanceBatchInsertBuilder(maxBatchSize int) OperationClaimableBalanceBatchInsertBuilder NewTransactionClaimableBalanceBatchInsertBuilder(maxBatchSize int) TransactionClaimableBalanceBatchInsertBuilder } // CreateHistoryClaimableBalances creates rows in the history_claimable_balances table for a given list of ids. // CreateHistoryClaimableBalances returns a mapping of id to its corresponding internal id in the history_claimable_balances table -func (q *Q) CreateHistoryClaimableBalances(ids []xdr.ClaimableBalanceId, batchSize int) (map[string]int64, error) { +func (q *Q) CreateHistoryClaimableBalances(ctx context.Context, ids []xdr.ClaimableBalanceId, batchSize int) (map[string]int64, error) { builder := &db.BatchInsertBuilder{ Table: q.GetTable("history_claimable_balances"), MaxBatchSize: batchSize, @@ -33,7 +34,7 @@ func (q *Q) CreateHistoryClaimableBalances(ids []xdr.ClaimableBalanceId, batchSi return bytes.Compare(ids[i].V0[:], ids[j].V0[:]) < 0 }) for _, id := range ids { - err := builder.Row(map[string]interface{}{ + err := builder.Row(ctx, map[string]interface{}{ "claimable_balance_id": id, }) if err != nil { @@ -41,7 +42,7 @@ func (q *Q) CreateHistoryClaimableBalances(ids []xdr.ClaimableBalanceId, batchSi } } - err := builder.Exec() + err := builder.Exec(ctx) if err != nil { return nil, errors.Wrap(err, "could not exec claimable balance insert builder") } @@ -57,7 +58,7 @@ func (q *Q) CreateHistoryClaimableBalances(ids []xdr.ClaimableBalanceId, batchSi } subset := ids[i:end] - cbs, err = q.ClaimableBalancesByIDs(subset) + cbs, err = q.ClaimableBalancesByIDs(ctx, subset) if err != nil { return nil, errors.Wrap(err, "could not select claimable balances") } @@ -83,24 +84,24 @@ type HistoryClaimableBalance struct { var selectHistoryClaimableBalance = sq.Select("hcb.*").From("history_claimable_balances hcb") // ClaimableBalancesByIDs loads rows from `history_claimable_balances`, by claimable_balance_id -func (q *Q) ClaimableBalancesByIDs(ids []xdr.ClaimableBalanceId) (dest []HistoryClaimableBalance, err error) { +func (q *Q) ClaimableBalancesByIDs(ctx context.Context, ids []xdr.ClaimableBalanceId) (dest []HistoryClaimableBalance, err error) { sql := selectHistoryClaimableBalance.Where(map[string]interface{}{ "hcb.claimable_balance_id": ids, // hcb.claimable_balance_id IN (...) }) - err = q.Select(&dest, sql) + err = q.Select(ctx, &dest, sql) return dest, err } // ClaimableBalanceByID loads a row from `history_claimable_balances`, by claimable_balance_id -func (q *Q) ClaimableBalanceByID(id xdr.ClaimableBalanceId) (dest HistoryClaimableBalance, err error) { +func (q *Q) ClaimableBalanceByID(ctx context.Context, id xdr.ClaimableBalanceId) (dest HistoryClaimableBalance, err error) { sql := selectHistoryClaimableBalance.Limit(1).Where("hcb.claimable_balance_id = ?", id) - err = q.Get(&dest, sql) + err = q.Get(ctx, &dest, sql) return dest, err } type OperationClaimableBalanceBatchInsertBuilder interface { - Add(operationID, internalID int64) error - Exec() error + Add(ctx context.Context, operationID, internalID int64) error + Exec(ctx context.Context) error } type operationClaimableBalanceBatchInsertBuilder struct { @@ -117,21 +118,21 @@ func (q *Q) NewOperationClaimableBalanceBatchInsertBuilder(maxBatchSize int) Ope } // Add adds a new operation claimable balance to the batch -func (i *operationClaimableBalanceBatchInsertBuilder) Add(operationID, internalID int64) error { - return i.builder.Row(map[string]interface{}{ +func (i *operationClaimableBalanceBatchInsertBuilder) Add(ctx context.Context, operationID, internalID int64) error { + return i.builder.Row(ctx, map[string]interface{}{ "history_operation_id": operationID, "history_claimable_balance_id": internalID, }) } // Exec flushes all pending operation claimable balances to the db -func (i *operationClaimableBalanceBatchInsertBuilder) Exec() error { - return i.builder.Exec() +func (i *operationClaimableBalanceBatchInsertBuilder) Exec(ctx context.Context) error { + return i.builder.Exec(ctx) } type TransactionClaimableBalanceBatchInsertBuilder interface { - Add(transactionID, internalID int64) error - Exec() error + Add(ctx context.Context, transactionID, internalID int64) error + Exec(ctx context.Context) error } type transactionClaimableBalanceBatchInsertBuilder struct { @@ -148,14 +149,14 @@ func (q *Q) NewTransactionClaimableBalanceBatchInsertBuilder(maxBatchSize int) T } // Add adds a new transaction claimable balance to the batch -func (i *transactionClaimableBalanceBatchInsertBuilder) Add(transactionID, internalID int64) error { - return i.builder.Row(map[string]interface{}{ +func (i *transactionClaimableBalanceBatchInsertBuilder) Add(ctx context.Context, transactionID, internalID int64) error { + return i.builder.Row(ctx, map[string]interface{}{ "history_transaction_id": transactionID, "history_claimable_balance_id": internalID, }) } // Exec flushes all pending transaction claimable balances to the db -func (i *transactionClaimableBalanceBatchInsertBuilder) Exec() error { - return i.builder.Exec() +func (i *transactionClaimableBalanceBatchInsertBuilder) Exec(ctx context.Context) error { + return i.builder.Exec(ctx) } diff --git a/services/horizon/internal/db2/history/ingestion.go b/services/horizon/internal/db2/history/ingestion.go index 686d7926b5..d88001e96f 100644 --- a/services/horizon/internal/db2/history/ingestion.go +++ b/services/horizon/internal/db2/history/ingestion.go @@ -1,12 +1,16 @@ package history +import ( + "context" +) + // TruncateIngestStateTables clears out ingestion state tables. // Ingestion state tables are horizon database tables populated by // the ingestion system using history archive snapshots. // Any horizon database tables which cannot be populated using // history archive snapshots will not be truncated. -func (q *Q) TruncateIngestStateTables() error { - return q.TruncateTables([]string{ +func (q *Q) TruncateIngestStateTables(ctx context.Context) error { + return q.TruncateTables(ctx, []string{ "accounts", "accounts_data", "accounts_signers", diff --git a/services/horizon/internal/db2/history/key_value.go b/services/horizon/internal/db2/history/key_value.go index 9214599b46..5a54ca73ea 100644 --- a/services/horizon/internal/db2/history/key_value.go +++ b/services/horizon/internal/db2/history/key_value.go @@ -1,6 +1,7 @@ package history import ( + "context" "database/sql" "strconv" @@ -22,8 +23,8 @@ const ( // it does not block the value and does not return error if the value // has not been previously set. // This is used in status reporting (ex. in root resource of Horizon). -func (q *Q) GetLastLedgerIngestNonBlocking() (uint32, error) { - lastIngestedLedger, err := q.getValueFromStore(lastLedgerKey, false) +func (q *Q) GetLastLedgerIngestNonBlocking(ctx context.Context) (uint32, error) { + lastIngestedLedger, err := q.getValueFromStore(ctx, lastLedgerKey, false) if err != nil { return 0, err } @@ -46,8 +47,8 @@ func (q *Q) GetLastLedgerIngestNonBlocking() (uint32, error) { // transactions.This behaviour is critical in distributed ingestion so do not change // it unless you know what you are doing. // The value can be set using UpdateLastLedgerIngest. -func (q *Q) GetLastLedgerIngest() (uint32, error) { - lastIngestedLedger, err := q.getValueFromStore(lastLedgerKey, true) +func (q *Q) GetLastLedgerIngest(ctx context.Context) (uint32, error) { + lastIngestedLedger, err := q.getValueFromStore(ctx, lastLedgerKey, true) if err != nil { return 0, err } @@ -68,8 +69,9 @@ func (q *Q) GetLastLedgerIngest() (uint32, error) { // UpdateLastLedgerIngest updates the last ledger ingested by ingest system. // Can be read using GetLastLedgerExpIngest. -func (q *Q) UpdateLastLedgerIngest(ledgerSequence uint32) error { +func (q *Q) UpdateLastLedgerIngest(ctx context.Context, ledgerSequence uint32) error { return q.updateValueInStore( + ctx, lastLedgerKey, strconv.FormatUint(uint64(ledgerSequence), 10), ) @@ -77,8 +79,8 @@ func (q *Q) UpdateLastLedgerIngest(ledgerSequence uint32) error { // GetIngestVersion returns the ingestion version. Returns zero // if there is no value. -func (q *Q) GetIngestVersion() (int, error) { - expVersion, err := q.getValueFromStore(ingestVersion, false) +func (q *Q) GetIngestVersion(ctx context.Context) (int, error) { + expVersion, err := q.getValueFromStore(ctx, ingestVersion, false) if err != nil { return 0, err } @@ -96,8 +98,9 @@ func (q *Q) GetIngestVersion() (int, error) { } // UpdateIngestVersion updates the ingestion version. -func (q *Q) UpdateIngestVersion(version int) error { +func (q *Q) UpdateIngestVersion(ctx context.Context, version int) error { return q.updateValueInStore( + ctx, ingestVersion, strconv.FormatUint(uint64(version), 10), ) @@ -105,8 +108,8 @@ func (q *Q) UpdateIngestVersion(version int) error { // GetExpStateInvalid returns true if the state was found to be invalid. // Returns false otherwise. -func (q *Q) GetExpStateInvalid() (bool, error) { - invalid, err := q.getValueFromStore(stateInvalid, false) +func (q *Q) GetExpStateInvalid(ctx context.Context) (bool, error) { + invalid, err := q.getValueFromStore(ctx, stateInvalid, false) if err != nil { return false, err } @@ -124,8 +127,9 @@ func (q *Q) GetExpStateInvalid() (bool, error) { } // UpdateExpStateInvalid updates the state invalid value. -func (q *Q) UpdateExpStateInvalid(val bool) error { +func (q *Q) UpdateExpStateInvalid(ctx context.Context, val bool) error { return q.updateValueInStore( + ctx, stateInvalid, strconv.FormatBool(val), ) @@ -133,8 +137,8 @@ func (q *Q) UpdateExpStateInvalid(val bool) error { // GetOfferCompactionSequence returns the sequence number corresponding to the // last time the offers table was compacted. -func (q *Q) GetOfferCompactionSequence() (uint32, error) { - sequence, err := q.getValueFromStore(offerCompactionSequence, false) +func (q *Q) GetOfferCompactionSequence(ctx context.Context) (uint32, error) { + sequence, err := q.getValueFromStore(ctx, offerCompactionSequence, false) if err != nil { return 0, err } @@ -152,8 +156,9 @@ func (q *Q) GetOfferCompactionSequence() (uint32, error) { // UpdateOfferCompactionSequence sets the sequence number corresponding to the // last time the offers table was compacted. -func (q *Q) UpdateOfferCompactionSequence(sequence uint32) error { +func (q *Q) UpdateOfferCompactionSequence(ctx context.Context, sequence uint32) error { return q.updateValueInStore( + ctx, offerCompactionSequence, strconv.FormatUint(uint64(sequence), 10), ) @@ -161,7 +166,7 @@ func (q *Q) UpdateOfferCompactionSequence(sequence uint32) error { // getValueFromStore returns a value for a given key from KV store. If value // is not present in the key value store "" will be returned. -func (q *Q) getValueFromStore(key string, forUpdate bool) (string, error) { +func (q *Q) getValueFromStore(ctx context.Context, key string, forUpdate bool) (string, error) { query := sq.Select("key_value_store.value"). From("key_value_store"). Where("key_value_store.key = ?", key) @@ -171,7 +176,7 @@ func (q *Q) getValueFromStore(key string, forUpdate bool) (string, error) { } var value string - if err := q.Get(&value, query); err != nil { + if err := q.Get(ctx, &value, query); err != nil { if errors.Cause(err) == sql.ErrNoRows { return "", nil } @@ -182,12 +187,12 @@ func (q *Q) getValueFromStore(key string, forUpdate bool) (string, error) { } // updateValueInStore updates a value for a given key in KV store -func (q *Q) updateValueInStore(key, value string) error { +func (q *Q) updateValueInStore(ctx context.Context, key, value string) error { query := sq.Insert("key_value_store"). Columns("key", "value"). Values(key, value). Suffix("ON CONFLICT (key) DO UPDATE SET value=EXCLUDED.value") - _, err := q.Exec(query) + _, err := q.Exec(ctx, query) return err } diff --git a/services/horizon/internal/db2/history/ledger.go b/services/horizon/internal/db2/history/ledger.go index ceb083e902..927295bd0d 100644 --- a/services/horizon/internal/db2/history/ledger.go +++ b/services/horizon/internal/db2/history/ledger.go @@ -1,6 +1,7 @@ package history import ( + "context" "encoding/hex" "fmt" "time" @@ -14,12 +15,12 @@ import ( ) // LedgerBySequence loads the single ledger at `seq` into `dest` -func (q *Q) LedgerBySequence(dest interface{}, seq int32) error { +func (q *Q) LedgerBySequence(ctx context.Context, dest interface{}, seq int32) error { sql := selectLedger. Limit(1). Where("sequence = ?", seq) - return q.Get(dest, sql) + return q.Get(ctx, dest, sql) } // Ledgers provides a helper to filter rows from the `history_ledgers` table @@ -33,7 +34,7 @@ func (q *Q) Ledgers() *LedgersQ { // LedgersBySequence loads the a set of ledgers identified by the sequences // `seqs` into `dest`. -func (q *Q) LedgersBySequence(dest interface{}, seqs ...int32) error { +func (q *Q) LedgersBySequence(ctx context.Context, dest interface{}, seqs ...int32) error { if len(seqs) == 0 { return errors.New("no sequence arguments provided") } @@ -46,15 +47,15 @@ func (q *Q) LedgersBySequence(dest interface{}, seqs ...int32) error { sql := selectLedger.Where(in, whereArgs...) - return q.Select(dest, sql) + return q.Select(ctx, dest, sql) } // LedgerCapacityUsageStats returns ledger capacity stats for the last 5 ledgers. // Currently, we hard code the query to return the last 5 ledgers. // TODO: make the number of ledgers configurable. -func (q *Q) LedgerCapacityUsageStats(currentSeq int32, dest *LedgerCapacityUsageStats) error { +func (q *Q) LedgerCapacityUsageStats(ctx context.Context, currentSeq int32, dest *LedgerCapacityUsageStats) error { const ledgers int32 = 5 - return q.GetRaw(dest, ` + return q.GetRaw(ctx, dest, ` SELECT ROUND(SUM(CAST(operation_count as decimal))/SUM(max_tx_set_size), 2) as ledger_capacity_usage FROM (SELECT hl.sequence, COALESCE(SUM(ht.operation_count), 0) as operation_count, hl.max_tx_set_size @@ -76,18 +77,19 @@ func (q *LedgersQ) Page(page db2.PageQuery) *LedgersQ { } // Select loads the results of the query specified by `q` into `dest`. -func (q *LedgersQ) Select(dest interface{}) error { +func (q *LedgersQ) Select(ctx context.Context, dest interface{}) error { if q.Err != nil { return q.Err } - q.Err = q.parent.Select(dest, q.sql) + q.Err = q.parent.Select(ctx, dest, q.sql) return q.Err } // QLedgers defines ingestion ledger related queries. type QLedgers interface { InsertLedger( + ctx context.Context, ledger xdr.LedgerHeaderHistoryEntry, successTxsCount int, failedTxsCount int, @@ -99,7 +101,7 @@ type QLedgers interface { // InsertLedger creates a row in the history_ledgers table. // Returns number of rows affected and error. -func (q *Q) InsertLedger( +func (q *Q) InsertLedger(ctx context.Context, ledger xdr.LedgerHeaderHistoryEntry, successTxsCount int, failedTxsCount int, @@ -120,7 +122,7 @@ func (q *Q) InsertLedger( } sql := sq.Insert("history_ledgers").SetMap(m) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } diff --git a/services/horizon/internal/db2/history/ledger_cache.go b/services/horizon/internal/db2/history/ledger_cache.go index f966ab706a..3318048ef7 100644 --- a/services/horizon/internal/db2/history/ledger_cache.go +++ b/services/horizon/internal/db2/history/ledger_cache.go @@ -1,6 +1,8 @@ package history import ( + "context" + "github.com/stellar/go/support/errors" ) @@ -18,7 +20,7 @@ func (lc *LedgerCache) Queue(seq int32) { // Load loads a batch of ledgers identified by `sequences`, using `q`, // and populates the cache with the results -func (lc *LedgerCache) Load(q *Q) error { +func (lc *LedgerCache) Load(ctx context.Context, q *Q) error { lc.lock.Lock() defer lc.lock.Unlock() @@ -32,7 +34,7 @@ func (lc *LedgerCache) Load(q *Q) error { } var ledgers []Ledger - err := q.LedgersBySequence(&ledgers, sequences...) + err := q.LedgersBySequence(ctx, &ledgers, sequences...) if err != nil { return errors.Wrap(err, "failed to load ledger batch") } diff --git a/services/horizon/internal/db2/history/ledger_cache_test.go b/services/horizon/internal/db2/history/ledger_cache_test.go index ca758624ad..17720a72fe 100644 --- a/services/horizon/internal/db2/history/ledger_cache_test.go +++ b/services/horizon/internal/db2/history/ledger_cache_test.go @@ -16,7 +16,7 @@ func TestLedgerCache(t *testing.T) { lc.Queue(2) lc.Queue(3) - err := lc.Load(q) + err := lc.Load(tt.Ctx, q) if tt.Assert.NoError(err) { tt.Assert.Contains(lc.Records, int32(2)) diff --git a/services/horizon/internal/db2/history/ledger_test.go b/services/horizon/internal/db2/history/ledger_test.go index 8f639fd624..6101b99bd5 100644 --- a/services/horizon/internal/db2/history/ledger_test.go +++ b/services/horizon/internal/db2/history/ledger_test.go @@ -21,22 +21,22 @@ func TestLedgerQueries(t *testing.T) { // Test LedgerBySequence var l Ledger - err := q.LedgerBySequence(&l, 3) + err := q.LedgerBySequence(tt.Ctx, &l, 3) tt.Assert.NoError(err) - err = q.LedgerBySequence(&l, 100000) + err = q.LedgerBySequence(tt.Ctx, &l, 100000) tt.Assert.Equal(err, sql.ErrNoRows) // Test Ledgers() ls := []Ledger{} - err = q.Ledgers().Select(&ls) + err = q.Ledgers().Select(tt.Ctx, &ls) if tt.Assert.NoError(err) { tt.Assert.Len(ls, 3) } // LedgersBySequence - err = q.LedgersBySequence(&ls, 1, 2, 3) + err = q.LedgersBySequence(tt.Ctx, &ls, 1, 2, 3) if tt.Assert.NoError(err) { tt.Assert.Len(ls, 3) @@ -59,7 +59,7 @@ func TestInsertLedger(t *testing.T) { q := &Q{tt.HorizonSession()} ledgerHashStore := ledgerbackend.NewHorizonDBLedgerHashStore(tt.HorizonSession()) - _, exists, err := ledgerHashStore.GetLedgerHash(100) + _, exists, err := ledgerHashStore.GetLedgerHash(tt.Ctx, 100) tt.Assert.NoError(err) tt.Assert.False(exists) @@ -116,7 +116,7 @@ func TestInsertLedger(t *testing.T) { tt.Assert.NoError(err) expectedLedger.LedgerHeaderXDR = null.NewString(ledgerHeaderBase64, true) - rowsAffected, err := q.InsertLedger( + rowsAffected, err := q.InsertLedger(tt.Ctx, ledgerEntry, 12, 3, @@ -128,7 +128,7 @@ func TestInsertLedger(t *testing.T) { tt.Assert.Equal(rowsAffected, int64(1)) var ledgerFromDB Ledger - err = q.LedgerBySequence(&ledgerFromDB, 69859) + err = q.LedgerBySequence(tt.Ctx, &ledgerFromDB, 69859) tt.Assert.NoError(err) expectedLedger.CreatedAt = ledgerFromDB.CreatedAt @@ -143,7 +143,7 @@ func TestInsertLedger(t *testing.T) { tt.Assert.Equal(expectedLedger, ledgerFromDB) - hash, exists, err := ledgerHashStore.GetLedgerHash(uint32(expectedLedger.Sequence)) + hash, exists, err := ledgerHashStore.GetLedgerHash(tt.Ctx, uint32(expectedLedger.Sequence)) tt.Assert.NoError(err) tt.Assert.True(exists) tt.Assert.Equal(expectedLedger.LedgerHash, hash) diff --git a/services/horizon/internal/db2/history/main.go b/services/horizon/internal/db2/history/main.go index 0c9f0fb3ed..a23abe8133 100644 --- a/services/horizon/internal/db2/history/main.go +++ b/services/horizon/internal/db2/history/main.go @@ -3,6 +3,7 @@ package history import ( + "context" "database/sql" "database/sql/driver" "encoding/json" @@ -96,14 +97,13 @@ const ( // trading effects + // unused // EffectOfferCreated occurs when an account offers to trade an asset - EffectOfferCreated EffectType = 30 // from manage_offer, creat_passive_offer - + // EffectOfferCreated EffectType = 30 // from manage_offer, creat_passive_offer // EffectOfferRemoved occurs when an account removes an offer - EffectOfferRemoved EffectType = 31 // from manage_offer, create_passive_offer, path_payment - + // EffectOfferRemoved EffectType = 31 // from manage_offer, create_passive_offer, path_payment // EffectOfferUpdated occurs when an offer is updated by the offering account. - EffectOfferUpdated EffectType = 32 // from manage_offer, creat_passive_offer, path_payment + // EffectOfferUpdated EffectType = 32 // from manage_offer, creat_passive_offer, path_payment // EffectTrade occurs when a trade is initiated because of a path payment or // offer operation. @@ -215,8 +215,8 @@ type AccountEntry struct { } type AccountsBatchInsertBuilder interface { - Add(entry xdr.LedgerEntry) error - Exec() error + Add(ctx context.Context, entry xdr.LedgerEntry) error + Exec(ctx context.Context) error } type IngestionQ interface { @@ -237,32 +237,32 @@ type IngestionQ interface { QSigners //QTrades NewTradeBatchInsertBuilder(maxBatchSize int) TradeBatchInsertBuilder - CreateAssets(assets []xdr.Asset, batchSize int) (map[string]Asset, error) + CreateAssets(ctx context.Context, assets []xdr.Asset, batchSize int) (map[string]Asset, error) QTransactions QTrustLines - Begin() error - BeginTx(*sql.TxOptions) error - Commit() error + Begin(context.Context) error + BeginTx(context.Context, *sql.TxOptions) error + Commit(context.Context) error CloneIngestionQ() IngestionQ - Rollback() error + Rollback(context.Context) error GetTx() *sqlx.Tx - GetIngestVersion() (int, error) - UpdateExpStateInvalid(bool) error - UpdateIngestVersion(int) error - GetExpStateInvalid() (bool, error) - GetLatestHistoryLedger() (uint32, error) - GetOfferCompactionSequence() (uint32, error) - TruncateIngestStateTables() error - DeleteRangeAll(start, end int64) error + GetIngestVersion(context.Context) (int, error) + UpdateExpStateInvalid(context.Context, bool) error + UpdateIngestVersion(context.Context, int) error + GetExpStateInvalid(context.Context) (bool, error) + GetLatestHistoryLedger(context.Context) (uint32, error) + GetOfferCompactionSequence(context.Context) (uint32, error) + TruncateIngestStateTables(context.Context) error + DeleteRangeAll(ctx context.Context, start, end int64) error } // QAccounts defines account related queries. type QAccounts interface { NewAccountsBatchInsertBuilder(maxBatchSize int) AccountsBatchInsertBuilder - GetAccountsByIDs(ids []string) ([]AccountEntry, error) - UpsertAccounts(accounts []xdr.LedgerEntry) error - RemoveAccount(accountID string) (int64, error) + GetAccountsByIDs(ctx context.Context, ids []string) ([]AccountEntry, error) + UpsertAccounts(ctx context.Context, accounts []xdr.LedgerEntry) error + RemoveAccount(ctx context.Context, accountID string) (int64, error) } // AccountSigner is a row of data from the `accounts_signers` table @@ -274,8 +274,8 @@ type AccountSigner struct { } type AccountSignersBatchInsertBuilder interface { - Add(signer AccountSigner) error - Exec() error + Add(ctx context.Context, signer AccountSigner) error + Exec(ctx context.Context) error } // accountSignersBatchInsertBuilder is a simple wrapper around db.BatchInsertBuilder @@ -295,8 +295,8 @@ type Data struct { type AccountDataValue []byte type AccountDataBatchInsertBuilder interface { - Add(entry xdr.LedgerEntry) error - Exec() error + Add(ctx context.Context, entry xdr.LedgerEntry) error + Exec(ctx context.Context) error } // accountDataBatchInsertBuilder is a simple wrapper around db.BatchInsertBuilder @@ -307,11 +307,11 @@ type accountDataBatchInsertBuilder struct { // QData defines account data related queries. type QData interface { NewAccountDataBatchInsertBuilder(maxBatchSize int) AccountDataBatchInsertBuilder - CountAccountsData() (int, error) - GetAccountDataByKeys(keys []xdr.LedgerKeyData) ([]Data, error) - InsertAccountData(entry xdr.LedgerEntry) (int64, error) - UpdateAccountData(entry xdr.LedgerEntry) (int64, error) - RemoveAccountData(key xdr.LedgerKeyData) (int64, error) + CountAccountsData(ctx context.Context) (int, error) + GetAccountDataByKeys(ctx context.Context, keys []xdr.LedgerKeyData) ([]Data, error) + InsertAccountData(ctx context.Context, entry xdr.LedgerEntry) (int64, error) + UpdateAccountData(ctx context.Context, entry xdr.LedgerEntry) (int64, error) + RemoveAccountData(ctx context.Context, key xdr.LedgerKeyData) (int64, error) } // Asset is a row of data from the `history_assets` table @@ -400,23 +400,24 @@ func (e *ExpAssetStatBalances) Scan(src interface{}) error { // QAssetStats defines exp_asset_stats related queries. type QAssetStats interface { - InsertAssetStats(stats []ExpAssetStat, batchSize int) error - InsertAssetStat(stat ExpAssetStat) (int64, error) - UpdateAssetStat(stat ExpAssetStat) (int64, error) - GetAssetStat(assetType xdr.AssetType, assetCode, assetIssuer string) (ExpAssetStat, error) - RemoveAssetStat(assetType xdr.AssetType, assetCode, assetIssuer string) (int64, error) - GetAssetStats(assetCode, assetIssuer string, page db2.PageQuery) ([]ExpAssetStat, error) - CountTrustLines() (int, error) + InsertAssetStats(ctx context.Context, stats []ExpAssetStat, batchSize int) error + InsertAssetStat(ctx context.Context, stat ExpAssetStat) (int64, error) + UpdateAssetStat(ctx context.Context, stat ExpAssetStat) (int64, error) + GetAssetStat(ctx context.Context, assetType xdr.AssetType, assetCode, assetIssuer string) (ExpAssetStat, error) + RemoveAssetStat(ctx context.Context, assetType xdr.AssetType, assetCode, assetIssuer string) (int64, error) + GetAssetStats(ctx context.Context, assetCode, assetIssuer string, page db2.PageQuery) ([]ExpAssetStat, error) + CountTrustLines(ctx context.Context) (int, error) } type QCreateAccountsHistory interface { - CreateAccounts(addresses []string, maxBatchSize int) (map[string]int64, error) + CreateAccounts(ctx context.Context, addresses []string, maxBatchSize int) (map[string]int64, error) } // Effect is a row of data from the `history_effects` table type Effect struct { HistoryAccountID int64 `db:"history_account_id"` Account string `db:"address"` + AccountMuxed null.String `db:"address_muxed"` HistoryOperationID int64 `db:"history_operation_id"` Order int32 `db:"order"` Type EffectType `db:"type"` @@ -427,6 +428,8 @@ type Effect struct { // when the effect type is trade type TradeEffectDetails struct { Seller string `json:"seller"` + SellerMuxed string `json:"seller_muxed,omitempty"` + SellerMuxedID uint64 `json:"seller_muxed_id,omitempty"` OfferID int64 `json:"offer_id"` SoldAmount string `json:"sold_amount"` SoldAssetType string `json:"sold_asset_type"` @@ -552,6 +555,7 @@ type Operation struct { Type xdr.OperationType `db:"type"` DetailsString null.String `db:"details"` SourceAccount string `db:"source_account"` + SourceAccountMuxed null.String `db:"source_account_muxed"` TransactionSuccessful bool `db:"transaction_successful"` } @@ -580,8 +584,8 @@ type Offer struct { } type OffersBatchInsertBuilder interface { - Add(offer Offer) error - Exec() error + Add(ctx context.Context, offer Offer) error + Exec(ctx context.Context) error } // offersBatchInsertBuilder is a simple wrapper around db.BatchInsertBuilder @@ -603,20 +607,20 @@ type OperationsQ struct { // Q is a helper struct on which to hang common_trades queries against a history // portion of the horizon database. type Q struct { - *db.Session + db.SessionInterface } // QSigners defines signer related queries. type QSigners interface { - GetLastLedgerIngestNonBlocking() (uint32, error) - GetLastLedgerIngest() (uint32, error) - UpdateLastLedgerIngest(ledgerSequence uint32) error - AccountsForSigner(signer string, page db2.PageQuery) ([]AccountSigner, error) + GetLastLedgerIngestNonBlocking(ctx context.Context) (uint32, error) + GetLastLedgerIngest(ctx context.Context) (uint32, error) + UpdateLastLedgerIngest(ctx context.Context, ledgerSequence uint32) error + AccountsForSigner(ctx context.Context, signer string, page db2.PageQuery) ([]AccountSigner, error) NewAccountSignersBatchInsertBuilder(maxBatchSize int) AccountSignersBatchInsertBuilder - CreateAccountSigner(account, signer string, weight int32, sponsor *string) (int64, error) - RemoveAccountSigner(account, signer string) (int64, error) - SignersForAccounts(accounts []string) ([]AccountSigner, error) - CountAccounts() (int, error) + CreateAccountSigner(ctx context.Context, account, signer string, weight int32, sponsor *string) (int64, error) + RemoveAccountSigner(ctx context.Context, account, signer string) (int64, error) + SignersForAccounts(ctx context.Context, accounts []string) ([]AccountSigner, error) + CountAccounts(ctx context.Context) (int, error) } // OffersQuery is a helper struct to configure queries to offers @@ -709,16 +713,16 @@ type TrustLine struct { // QTrustLines defines trust lines related queries. type QTrustLines interface { NewTrustLinesBatchInsertBuilder(maxBatchSize int) TrustLinesBatchInsertBuilder - GetTrustLinesByKeys(keys []xdr.LedgerKeyTrustLine) ([]TrustLine, error) - InsertTrustLine(entry xdr.LedgerEntry) (int64, error) - UpdateTrustLine(entry xdr.LedgerEntry) (int64, error) - UpsertTrustLines(entries []xdr.LedgerEntry) error - RemoveTrustLine(key xdr.LedgerKeyTrustLine) (int64, error) + GetTrustLinesByKeys(ctx context.Context, keys []xdr.LedgerKeyTrustLine) ([]TrustLine, error) + InsertTrustLine(ctx context.Context, entry xdr.LedgerEntry) (int64, error) + UpdateTrustLine(ctx context.Context, entry xdr.LedgerEntry) (int64, error) + UpsertTrustLines(ctx context.Context, entries []xdr.LedgerEntry) error + RemoveTrustLine(ctx context.Context, key xdr.LedgerKeyTrustLine) (int64, error) } type TrustLinesBatchInsertBuilder interface { - Add(entry xdr.LedgerEntry) error - Exec() error + Add(ctx context.Context, entry xdr.LedgerEntry) error + Exec(ctx context.Context) error } // trustLinesBatchInsertBuilder is a simple wrapper around db.BatchInsertBuilder @@ -772,31 +776,31 @@ func (q *Q) NewTrustLinesBatchInsertBuilder(maxBatchSize int) TrustLinesBatchIns } // ElderLedger loads the oldest ledger known to the history database -func (q *Q) ElderLedger(dest interface{}) error { - return q.GetRaw(dest, `SELECT COALESCE(MIN(sequence), 0) FROM history_ledgers`) +func (q *Q) ElderLedger(ctx context.Context, dest interface{}) error { + return q.GetRaw(ctx, dest, `SELECT COALESCE(MIN(sequence), 0) FROM history_ledgers`) } // GetLatestHistoryLedger loads the latest known ledger. Returns 0 if no ledgers in // `history_ledgers` table. -func (q *Q) GetLatestHistoryLedger() (uint32, error) { +func (q *Q) GetLatestHistoryLedger(ctx context.Context) (uint32, error) { var value uint32 - err := q.LatestLedger(&value) + err := q.LatestLedger(ctx, &value) return value, err } // LatestLedger loads the latest known ledger -func (q *Q) LatestLedger(dest interface{}) error { - return q.GetRaw(dest, `SELECT COALESCE(MAX(sequence), 0) FROM history_ledgers`) +func (q *Q) LatestLedger(ctx context.Context, dest interface{}) error { + return q.GetRaw(ctx, dest, `SELECT COALESCE(MAX(sequence), 0) FROM history_ledgers`) } // LatestLedgerSequenceClosedAt loads the latest known ledger sequence and close time, // returns empty values if no ledgers in a DB. -func (q *Q) LatestLedgerSequenceClosedAt() (int32, time.Time, error) { +func (q *Q) LatestLedgerSequenceClosedAt(ctx context.Context) (int32, time.Time, error) { ledger := struct { Sequence int32 `db:"sequence"` ClosedAt time.Time `db:"closed_at"` }{} - err := q.GetRaw(&ledger, `SELECT sequence, closed_at FROM history_ledgers ORDER BY sequence DESC LIMIT 1`) + err := q.GetRaw(ctx, &ledger, `SELECT sequence, closed_at FROM history_ledgers ORDER BY sequence DESC LIMIT 1`) if err == sql.ErrNoRows { // Will return empty values return ledger.Sequence, ledger.ClosedAt, nil @@ -806,8 +810,8 @@ func (q *Q) LatestLedgerSequenceClosedAt() (int32, time.Time, error) { // LatestLedgerBaseFeeAndSequence loads the latest known ledger's base fee and // sequence number. -func (q *Q) LatestLedgerBaseFeeAndSequence(dest interface{}) error { - return q.GetRaw(dest, ` +func (q *Q) LatestLedgerBaseFeeAndSequence(ctx context.Context, dest interface{}) error { + return q.GetRaw(ctx, dest, ` SELECT base_fee, sequence FROM history_ledgers WHERE sequence = (SELECT COALESCE(MAX(sequence), 0) FROM history_ledgers) @@ -821,32 +825,32 @@ func (q *Q) CloneIngestionQ() IngestionQ { // DeleteRangeAll deletes a range of rows from all history tables between // `start` and `end` (exclusive). -func (q *Q) DeleteRangeAll(start, end int64) error { - err := q.DeleteRange(start, end, "history_effects", "history_operation_id") +func (q *Q) DeleteRangeAll(ctx context.Context, start, end int64) error { + err := q.DeleteRange(ctx, start, end, "history_effects", "history_operation_id") if err != nil { return errors.Wrap(err, "Error clearing history_effects") } - err = q.DeleteRange(start, end, "history_operation_participants", "history_operation_id") + err = q.DeleteRange(ctx, start, end, "history_operation_participants", "history_operation_id") if err != nil { return errors.Wrap(err, "Error clearing history_operation_participants") } - err = q.DeleteRange(start, end, "history_operations", "id") + err = q.DeleteRange(ctx, start, end, "history_operations", "id") if err != nil { return errors.Wrap(err, "Error clearing history_operations") } - err = q.DeleteRange(start, end, "history_transaction_participants", "history_transaction_id") + err = q.DeleteRange(ctx, start, end, "history_transaction_participants", "history_transaction_id") if err != nil { return errors.Wrap(err, "Error clearing history_transaction_participants") } - err = q.DeleteRange(start, end, "history_transactions", "id") + err = q.DeleteRange(ctx, start, end, "history_transactions", "id") if err != nil { return errors.Wrap(err, "Error clearing history_transactions") } - err = q.DeleteRange(start, end, "history_ledgers", "id") + err = q.DeleteRange(ctx, start, end, "history_ledgers", "id") if err != nil { return errors.Wrap(err, "Error clearing history_ledgers") } - err = q.DeleteRange(start, end, "history_trades", "history_operation_id") + err = q.DeleteRange(ctx, start, end, "history_trades", "history_operation_id") if err != nil { return errors.Wrap(err, "Error clearing history_trades") } diff --git a/services/horizon/internal/db2/history/main_test.go b/services/horizon/internal/db2/history/main_test.go index d2b966f7c9..c94154b463 100644 --- a/services/horizon/internal/db2/history/main_test.go +++ b/services/horizon/internal/db2/history/main_test.go @@ -14,7 +14,7 @@ func TestLatestLedger(t *testing.T) { q := &Q{tt.HorizonSession()} var seq int - err := q.LatestLedger(&seq) + err := q.LatestLedger(tt.Ctx, &seq) if tt.Assert.NoError(err) { tt.Assert.Equal(3, seq) @@ -27,7 +27,7 @@ func TestLatestLedgerSequenceClosedAt(t *testing.T) { defer tt.Finish() q := &Q{tt.HorizonSession()} - sequence, closedAt, err := q.LatestLedgerSequenceClosedAt() + sequence, closedAt, err := q.LatestLedgerSequenceClosedAt(tt.Ctx) if tt.Assert.NoError(err) { tt.Assert.Equal(int32(3), sequence) tt.Assert.Equal("2019-10-31T13:19:46Z", closedAt.Format(time.RFC3339)) @@ -35,7 +35,7 @@ func TestLatestLedgerSequenceClosedAt(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) - sequence, closedAt, err = q.LatestLedgerSequenceClosedAt() + sequence, closedAt, err = q.LatestLedgerSequenceClosedAt(tt.Ctx) if tt.Assert.NoError(err) { tt.Assert.Equal(int32(0), sequence) tt.Assert.Equal("0001-01-01T00:00:00Z", closedAt.Format(time.RFC3339)) @@ -48,7 +48,7 @@ func TestGetLatestHistoryLedgerEmptyDB(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - value, err := q.GetLatestHistoryLedger() + value, err := q.GetLatestHistoryLedger(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Equal(uint32(0), value) } @@ -60,7 +60,7 @@ func TestElderLedger(t *testing.T) { q := &Q{tt.HorizonSession()} var seq int - err := q.ElderLedger(&seq) + err := q.ElderLedger(tt.Ctx, &seq) if tt.Assert.NoError(err) { tt.Assert.Equal(1, seq) diff --git a/services/horizon/internal/db2/history/mock_account_data_batch_insert_builder.go b/services/horizon/internal/db2/history/mock_account_data_batch_insert_builder.go index 27dc38b3af..7f2d2173c9 100644 --- a/services/horizon/internal/db2/history/mock_account_data_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/mock_account_data_batch_insert_builder.go @@ -1,6 +1,7 @@ package history import ( + "context" "github.com/stellar/go/xdr" "github.com/stretchr/testify/mock" ) @@ -9,12 +10,12 @@ type MockAccountDataBatchInsertBuilder struct { mock.Mock } -func (m *MockAccountDataBatchInsertBuilder) Add(entry xdr.LedgerEntry) error { - a := m.Called(entry) +func (m *MockAccountDataBatchInsertBuilder) Add(ctx context.Context, entry xdr.LedgerEntry) error { + a := m.Called(ctx, entry) return a.Error(0) } -func (m *MockAccountDataBatchInsertBuilder) Exec() error { - a := m.Called() +func (m *MockAccountDataBatchInsertBuilder) Exec(ctx context.Context) error { + a := m.Called(ctx) return a.Error(0) } diff --git a/services/horizon/internal/db2/history/mock_account_signers_batch_insert_builder.go b/services/horizon/internal/db2/history/mock_account_signers_batch_insert_builder.go index d40a737a9a..3f786f65ac 100644 --- a/services/horizon/internal/db2/history/mock_account_signers_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/mock_account_signers_batch_insert_builder.go @@ -1,6 +1,7 @@ package history import ( + "context" "github.com/stretchr/testify/mock" ) @@ -8,12 +9,12 @@ type MockAccountSignersBatchInsertBuilder struct { mock.Mock } -func (m *MockAccountSignersBatchInsertBuilder) Add(signer AccountSigner) error { - a := m.Called(signer) +func (m *MockAccountSignersBatchInsertBuilder) Add(ctx context.Context, signer AccountSigner) error { + a := m.Called(ctx, signer) return a.Error(0) } -func (m *MockAccountSignersBatchInsertBuilder) Exec() error { - a := m.Called() +func (m *MockAccountSignersBatchInsertBuilder) Exec(ctx context.Context) error { + a := m.Called(ctx) return a.Error(0) } diff --git a/services/horizon/internal/db2/history/mock_effect_batch_insert_builder.go b/services/horizon/internal/db2/history/mock_effect_batch_insert_builder.go index b5ceecde50..48ee96e306 100644 --- a/services/horizon/internal/db2/history/mock_effect_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/mock_effect_batch_insert_builder.go @@ -1,6 +1,9 @@ package history import ( + "context" + + "github.com/guregu/null" "github.com/stretchr/testify/mock" ) @@ -10,15 +13,17 @@ type MockEffectBatchInsertBuilder struct { } // Add mock -func (m *MockEffectBatchInsertBuilder) Add( +func (m *MockEffectBatchInsertBuilder) Add(ctx context.Context, accountID int64, + muxedAccount null.String, operationID int64, order uint32, effectType EffectType, details []byte, ) error { - a := m.Called( + a := m.Called(ctx, accountID, + muxedAccount, operationID, order, effectType, @@ -28,7 +33,7 @@ func (m *MockEffectBatchInsertBuilder) Add( } // Exec mock -func (m *MockEffectBatchInsertBuilder) Exec() error { - a := m.Called() +func (m *MockEffectBatchInsertBuilder) Exec(ctx context.Context) error { + a := m.Called(ctx) return a.Error(0) } diff --git a/services/horizon/internal/db2/history/mock_offers_batch_insert_builder.go b/services/horizon/internal/db2/history/mock_offers_batch_insert_builder.go index bc6a358291..75e88f3263 100644 --- a/services/horizon/internal/db2/history/mock_offers_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/mock_offers_batch_insert_builder.go @@ -1,6 +1,7 @@ package history import ( + "context" "github.com/stretchr/testify/mock" ) @@ -8,12 +9,12 @@ type MockOffersBatchInsertBuilder struct { mock.Mock } -func (m *MockOffersBatchInsertBuilder) Add(row Offer) error { - a := m.Called(row) +func (m *MockOffersBatchInsertBuilder) Add(ctx context.Context, row Offer) error { + a := m.Called(ctx, row) return a.Error(0) } -func (m *MockOffersBatchInsertBuilder) Exec() error { - a := m.Called() +func (m *MockOffersBatchInsertBuilder) Exec(ctx context.Context) error { + a := m.Called(ctx) return a.Error(0) } diff --git a/services/horizon/internal/db2/history/mock_operation_participant_batch_insert_builder.go b/services/horizon/internal/db2/history/mock_operation_participant_batch_insert_builder.go index b6cbcb91f1..014763f989 100644 --- a/services/horizon/internal/db2/history/mock_operation_participant_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/mock_operation_participant_batch_insert_builder.go @@ -1,6 +1,7 @@ package history import ( + "context" "github.com/stretchr/testify/mock" ) @@ -10,13 +11,13 @@ type MockOperationParticipantBatchInsertBuilder struct { } // Add mock -func (m *MockOperationParticipantBatchInsertBuilder) Add(operationID int64, accountID int64) error { - a := m.Called(operationID, accountID) +func (m *MockOperationParticipantBatchInsertBuilder) Add(ctx context.Context, operationID int64, accountID int64) error { + a := m.Called(ctx, operationID, accountID) return a.Error(0) } // Exec mock -func (m *MockOperationParticipantBatchInsertBuilder) Exec() error { - a := m.Called() +func (m *MockOperationParticipantBatchInsertBuilder) Exec(ctx context.Context) error { + a := m.Called(ctx) return a.Error(0) } diff --git a/services/horizon/internal/db2/history/mock_operations_batch_insert_builder.go b/services/horizon/internal/db2/history/mock_operations_batch_insert_builder.go index 6b9f2e068c..e57eb93db9 100644 --- a/services/horizon/internal/db2/history/mock_operations_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/mock_operations_batch_insert_builder.go @@ -1,6 +1,9 @@ package history import ( + "context" + + "github.com/guregu/null" "github.com/stellar/go/xdr" "github.com/stretchr/testify/mock" ) @@ -11,27 +14,29 @@ type MockOperationsBatchInsertBuilder struct { } // Add mock -func (m *MockOperationsBatchInsertBuilder) Add( +func (m *MockOperationsBatchInsertBuilder) Add(ctx context.Context, id int64, transactionID int64, applicationOrder uint32, operationType xdr.OperationType, details []byte, sourceAccount string, + sourceAccountMuxed null.String, ) error { - a := m.Called( + a := m.Called(ctx, id, transactionID, applicationOrder, operationType, details, sourceAccount, + sourceAccountMuxed, ) return a.Error(0) } // Exec mock -func (m *MockOperationsBatchInsertBuilder) Exec() error { - a := m.Called() +func (m *MockOperationsBatchInsertBuilder) Exec(ctx context.Context) error { + a := m.Called(ctx) return a.Error(0) } diff --git a/services/horizon/internal/db2/history/mock_q_accounts.go b/services/horizon/internal/db2/history/mock_q_accounts.go index 0e17d4db26..3db8f7c91d 100644 --- a/services/horizon/internal/db2/history/mock_q_accounts.go +++ b/services/horizon/internal/db2/history/mock_q_accounts.go @@ -1,6 +1,7 @@ package history import ( + "context" "github.com/stretchr/testify/mock" "github.com/stellar/go/xdr" @@ -11,8 +12,8 @@ type MockQAccounts struct { mock.Mock } -func (m *MockQAccounts) GetAccountsByIDs(ids []string) ([]AccountEntry, error) { - a := m.Called(ids) +func (m *MockQAccounts) GetAccountsByIDs(ctx context.Context, ids []string) ([]AccountEntry, error) { + a := m.Called(ctx, ids) return a.Get(0).([]AccountEntry), a.Error(1) } @@ -21,12 +22,12 @@ func (m *MockQAccounts) NewAccountsBatchInsertBuilder(maxBatchSize int) Accounts return a.Get(0).(AccountsBatchInsertBuilder) } -func (m *MockQAccounts) UpsertAccounts(accounts []xdr.LedgerEntry) error { - a := m.Called(accounts) +func (m *MockQAccounts) UpsertAccounts(ctx context.Context, accounts []xdr.LedgerEntry) error { + a := m.Called(ctx, accounts) return a.Error(0) } -func (m *MockQAccounts) RemoveAccount(accountID string) (int64, error) { - a := m.Called(accountID) +func (m *MockQAccounts) RemoveAccount(ctx context.Context, accountID string) (int64, error) { + a := m.Called(ctx, accountID) return a.Get(0).(int64), a.Error(1) } diff --git a/services/horizon/internal/db2/history/mock_q_asset_stats.go b/services/horizon/internal/db2/history/mock_q_asset_stats.go index f172792b1b..17334039e8 100644 --- a/services/horizon/internal/db2/history/mock_q_asset_stats.go +++ b/services/horizon/internal/db2/history/mock_q_asset_stats.go @@ -1,9 +1,12 @@ package history import ( + "context" + + "github.com/stretchr/testify/mock" + "github.com/stellar/go/services/horizon/internal/db2" "github.com/stellar/go/xdr" - "github.com/stretchr/testify/mock" ) // MockQAssetStats is a mock implementation of the QAssetStats interface @@ -11,37 +14,37 @@ type MockQAssetStats struct { mock.Mock } -func (m *MockQAssetStats) InsertAssetStats(assetStats []ExpAssetStat, batchSize int) error { - a := m.Called(assetStats, batchSize) +func (m *MockQAssetStats) InsertAssetStats(ctx context.Context, assetStats []ExpAssetStat, batchSize int) error { + a := m.Called(ctx, assetStats, batchSize) return a.Error(0) } -func (m *MockQAssetStats) InsertAssetStat(assetStat ExpAssetStat) (int64, error) { - a := m.Called(assetStat) +func (m *MockQAssetStats) InsertAssetStat(ctx context.Context, assetStat ExpAssetStat) (int64, error) { + a := m.Called(ctx, assetStat) return a.Get(0).(int64), a.Error(1) } -func (m *MockQAssetStats) UpdateAssetStat(assetStat ExpAssetStat) (int64, error) { - a := m.Called(assetStat) +func (m *MockQAssetStats) UpdateAssetStat(ctx context.Context, assetStat ExpAssetStat) (int64, error) { + a := m.Called(ctx, assetStat) return a.Get(0).(int64), a.Error(1) } -func (m *MockQAssetStats) GetAssetStat(assetType xdr.AssetType, assetCode, assetIssuer string) (ExpAssetStat, error) { - a := m.Called(assetType, assetCode, assetIssuer) +func (m *MockQAssetStats) GetAssetStat(ctx context.Context, assetType xdr.AssetType, assetCode, assetIssuer string) (ExpAssetStat, error) { + a := m.Called(ctx, assetType, assetCode, assetIssuer) return a.Get(0).(ExpAssetStat), a.Error(1) } -func (m *MockQAssetStats) RemoveAssetStat(assetType xdr.AssetType, assetCode, assetIssuer string) (int64, error) { - a := m.Called(assetType, assetCode, assetIssuer) +func (m *MockQAssetStats) RemoveAssetStat(ctx context.Context, assetType xdr.AssetType, assetCode, assetIssuer string) (int64, error) { + a := m.Called(ctx, assetType, assetCode, assetIssuer) return a.Get(0).(int64), a.Error(1) } -func (m *MockQAssetStats) GetAssetStats(assetCode, assetIssuer string, page db2.PageQuery) ([]ExpAssetStat, error) { - a := m.Called(assetCode, assetIssuer, page) +func (m *MockQAssetStats) GetAssetStats(ctx context.Context, assetCode, assetIssuer string, page db2.PageQuery) ([]ExpAssetStat, error) { + a := m.Called(ctx, assetCode, assetIssuer, page) return a.Get(0).([]ExpAssetStat), a.Error(1) } -func (m *MockQAssetStats) CountTrustLines() (int, error) { - a := m.Called() +func (m *MockQAssetStats) CountTrustLines(ctx context.Context) (int, error) { + a := m.Called(ctx) return a.Get(0).(int), a.Error(1) } diff --git a/services/horizon/internal/db2/history/mock_q_claimable_balances.go b/services/horizon/internal/db2/history/mock_q_claimable_balances.go index 0354afa944..c50e81603e 100644 --- a/services/horizon/internal/db2/history/mock_q_claimable_balances.go +++ b/services/horizon/internal/db2/history/mock_q_claimable_balances.go @@ -1,8 +1,11 @@ package history import ( - "github.com/stellar/go/xdr" + "context" + "github.com/stretchr/testify/mock" + + "github.com/stellar/go/xdr" ) // MockQClaimableBalances is a mock implementation of the QAccounts interface @@ -15,23 +18,23 @@ func (m *MockQClaimableBalances) NewClaimableBalancesBatchInsertBuilder(maxBatch return a.Get(0).(ClaimableBalancesBatchInsertBuilder) } -func (m *MockQClaimableBalances) CountClaimableBalances() (int, error) { - a := m.Called() +func (m *MockQClaimableBalances) CountClaimableBalances(ctx context.Context) (int, error) { + a := m.Called(ctx) return a.Get(0).(int), a.Error(1) } -func (m *MockQClaimableBalances) GetClaimableBalancesByID(ids []xdr.ClaimableBalanceId) ([]ClaimableBalance, error) { - a := m.Called(ids) +func (m *MockQClaimableBalances) GetClaimableBalancesByID(ctx context.Context, ids []xdr.ClaimableBalanceId) ([]ClaimableBalance, error) { + a := m.Called(ctx, ids) return a.Get(0).([]ClaimableBalance), a.Error(1) } -func (m *MockQClaimableBalances) UpdateClaimableBalance(entry xdr.LedgerEntry) (int64, error) { - a := m.Called(entry) +func (m *MockQClaimableBalances) UpdateClaimableBalance(ctx context.Context, entry xdr.LedgerEntry) (int64, error) { + a := m.Called(ctx, entry) return a.Get(0).(int64), a.Error(1) } -func (m *MockQClaimableBalances) RemoveClaimableBalance(cBalance xdr.ClaimableBalanceEntry) (int64, error) { - a := m.Called(cBalance) +func (m *MockQClaimableBalances) RemoveClaimableBalance(ctx context.Context, cBalance xdr.ClaimableBalanceEntry) (int64, error) { + a := m.Called(ctx, cBalance) return a.Get(0).(int64), a.Error(1) } @@ -39,12 +42,12 @@ type MockClaimableBalancesBatchInsertBuilder struct { mock.Mock } -func (m *MockClaimableBalancesBatchInsertBuilder) Add(entry *xdr.LedgerEntry) error { - a := m.Called(entry) +func (m *MockClaimableBalancesBatchInsertBuilder) Add(ctx context.Context, entry *xdr.LedgerEntry) error { + a := m.Called(ctx, entry) return a.Error(0) } -func (m *MockClaimableBalancesBatchInsertBuilder) Exec() error { - a := m.Called() +func (m *MockClaimableBalancesBatchInsertBuilder) Exec(ctx context.Context) error { + a := m.Called(ctx) return a.Error(0) } diff --git a/services/horizon/internal/db2/history/mock_q_data.go b/services/horizon/internal/db2/history/mock_q_data.go index 93986fc717..653ca56f6f 100644 --- a/services/horizon/internal/db2/history/mock_q_data.go +++ b/services/horizon/internal/db2/history/mock_q_data.go @@ -1,6 +1,8 @@ package history import ( + "context" + "github.com/stretchr/testify/mock" "github.com/stellar/go/xdr" @@ -11,13 +13,13 @@ type MockQData struct { mock.Mock } -func (m *MockQData) GetAccountDataByKeys(keys []xdr.LedgerKeyData) ([]Data, error) { - a := m.Called() +func (m *MockQData) GetAccountDataByKeys(ctx context.Context, keys []xdr.LedgerKeyData) ([]Data, error) { + a := m.Called(ctx) return a.Get(0).([]Data), a.Error(1) } -func (m *MockQData) CountAccountsData() (int, error) { - a := m.Called() +func (m *MockQData) CountAccountsData(ctx context.Context) (int, error) { + a := m.Called(ctx) return a.Get(0).(int), a.Error(1) } @@ -26,17 +28,17 @@ func (m *MockQData) NewAccountDataBatchInsertBuilder(maxBatchSize int) AccountDa return a.Get(0).(AccountDataBatchInsertBuilder) } -func (m *MockQData) InsertAccountData(entry xdr.LedgerEntry) (int64, error) { - a := m.Called(entry) +func (m *MockQData) InsertAccountData(ctx context.Context, entry xdr.LedgerEntry) (int64, error) { + a := m.Called(ctx, entry) return a.Get(0).(int64), a.Error(1) } -func (m *MockQData) UpdateAccountData(entry xdr.LedgerEntry) (int64, error) { - a := m.Called(entry) +func (m *MockQData) UpdateAccountData(ctx context.Context, entry xdr.LedgerEntry) (int64, error) { + a := m.Called(ctx, entry) return a.Get(0).(int64), a.Error(1) } -func (m *MockQData) RemoveAccountData(key xdr.LedgerKeyData) (int64, error) { - a := m.Called(key) +func (m *MockQData) RemoveAccountData(ctx context.Context, key xdr.LedgerKeyData) (int64, error) { + a := m.Called(ctx, key) return a.Get(0).(int64), a.Error(1) } diff --git a/services/horizon/internal/db2/history/mock_q_effects.go b/services/horizon/internal/db2/history/mock_q_effects.go index a9b1452f6d..d8bdd97765 100644 --- a/services/horizon/internal/db2/history/mock_q_effects.go +++ b/services/horizon/internal/db2/history/mock_q_effects.go @@ -1,6 +1,7 @@ package history import ( + "context" "github.com/stretchr/testify/mock" ) @@ -14,7 +15,7 @@ func (m *MockQEffects) NewEffectBatchInsertBuilder(maxBatchSize int) EffectBatch return a.Get(0).(EffectBatchInsertBuilder) } -func (m *MockQEffects) CreateAccounts(addresses []string, maxBatchSize int) (map[string]int64, error) { - a := m.Called(addresses, maxBatchSize) +func (m *MockQEffects) CreateAccounts(ctx context.Context, addresses []string, maxBatchSize int) (map[string]int64, error) { + a := m.Called(ctx, addresses, maxBatchSize) return a.Get(0).(map[string]int64), a.Error(1) } diff --git a/services/horizon/internal/db2/history/mock_q_history_claimable_balances.go b/services/horizon/internal/db2/history/mock_q_history_claimable_balances.go index 5f09371cbd..ee5bbb38c3 100644 --- a/services/horizon/internal/db2/history/mock_q_history_claimable_balances.go +++ b/services/horizon/internal/db2/history/mock_q_history_claimable_balances.go @@ -1,6 +1,7 @@ package history import ( + "context" "github.com/stellar/go/xdr" "github.com/stretchr/testify/mock" @@ -11,8 +12,8 @@ type MockQHistoryClaimableBalances struct { mock.Mock } -func (m *MockQHistoryClaimableBalances) CreateHistoryClaimableBalances(ids []xdr.ClaimableBalanceId, maxBatchSize int) (map[string]int64, error) { - a := m.Called(ids, maxBatchSize) +func (m *MockQHistoryClaimableBalances) CreateHistoryClaimableBalances(ctx context.Context, ids []xdr.ClaimableBalanceId, maxBatchSize int) (map[string]int64, error) { + a := m.Called(ctx, ids, maxBatchSize) return a.Get(0).(map[string]int64), a.Error(1) } @@ -27,13 +28,13 @@ type MockTransactionClaimableBalanceBatchInsertBuilder struct { mock.Mock } -func (m *MockTransactionClaimableBalanceBatchInsertBuilder) Add(transactionID, accountID int64) error { - a := m.Called(transactionID, accountID) +func (m *MockTransactionClaimableBalanceBatchInsertBuilder) Add(ctx context.Context, transactionID, accountID int64) error { + a := m.Called(ctx, transactionID, accountID) return a.Error(0) } -func (m *MockTransactionClaimableBalanceBatchInsertBuilder) Exec() error { - a := m.Called() +func (m *MockTransactionClaimableBalanceBatchInsertBuilder) Exec(ctx context.Context) error { + a := m.Called(ctx) return a.Error(0) } @@ -49,12 +50,12 @@ type MockOperationClaimableBalanceBatchInsertBuilder struct { mock.Mock } -func (m *MockOperationClaimableBalanceBatchInsertBuilder) Add(transactionID, accountID int64) error { - a := m.Called(transactionID, accountID) +func (m *MockOperationClaimableBalanceBatchInsertBuilder) Add(ctx context.Context, transactionID, accountID int64) error { + a := m.Called(ctx, transactionID, accountID) return a.Error(0) } -func (m *MockOperationClaimableBalanceBatchInsertBuilder) Exec() error { - a := m.Called() +func (m *MockOperationClaimableBalanceBatchInsertBuilder) Exec(ctx context.Context) error { + a := m.Called(ctx) return a.Error(0) } diff --git a/services/horizon/internal/db2/history/mock_q_ledgers.go b/services/horizon/internal/db2/history/mock_q_ledgers.go index b024c907bc..16d3ef5524 100644 --- a/services/horizon/internal/db2/history/mock_q_ledgers.go +++ b/services/horizon/internal/db2/history/mock_q_ledgers.go @@ -1,15 +1,18 @@ package history import ( - "github.com/stellar/go/xdr" + "context" + "github.com/stretchr/testify/mock" + + "github.com/stellar/go/xdr" ) type MockQLedgers struct { mock.Mock } -func (m *MockQLedgers) InsertLedger( +func (m *MockQLedgers) InsertLedger(ctx context.Context, ledger xdr.LedgerHeaderHistoryEntry, successTxsCount int, failedTxsCount int, @@ -17,6 +20,6 @@ func (m *MockQLedgers) InsertLedger( txSetOpCount int, ingestVersion int, ) (int64, error) { - a := m.Called(ledger, successTxsCount, failedTxsCount, opCount, txSetOpCount, ingestVersion) + a := m.Called(ctx, ledger, successTxsCount, failedTxsCount, opCount, txSetOpCount, ingestVersion) return a.Get(0).(int64), a.Error(1) } diff --git a/services/horizon/internal/db2/history/mock_q_offers.go b/services/horizon/internal/db2/history/mock_q_offers.go index 84150e49e9..0b23720b7f 100644 --- a/services/horizon/internal/db2/history/mock_q_offers.go +++ b/services/horizon/internal/db2/history/mock_q_offers.go @@ -1,6 +1,7 @@ package history import ( + "context" "github.com/stretchr/testify/mock" ) @@ -9,23 +10,23 @@ type MockQOffers struct { mock.Mock } -func (m *MockQOffers) GetAllOffers() ([]Offer, error) { - a := m.Called() +func (m *MockQOffers) GetAllOffers(ctx context.Context) ([]Offer, error) { + a := m.Called(ctx) return a.Get(0).([]Offer), a.Error(1) } -func (m *MockQOffers) GetOffersByIDs(ids []int64) ([]Offer, error) { - a := m.Called(ids) +func (m *MockQOffers) GetOffersByIDs(ctx context.Context, ids []int64) ([]Offer, error) { + a := m.Called(ctx, ids) return a.Get(0).([]Offer), a.Error(1) } -func (m *MockQOffers) GetUpdatedOffers(newerThanSequence uint32) ([]Offer, error) { - a := m.Called(newerThanSequence) +func (m *MockQOffers) GetUpdatedOffers(ctx context.Context, newerThanSequence uint32) ([]Offer, error) { + a := m.Called(ctx, newerThanSequence) return a.Get(0).([]Offer), a.Error(1) } -func (m *MockQOffers) CountOffers() (int, error) { - a := m.Called() +func (m *MockQOffers) CountOffers(ctx context.Context) (int, error) { + a := m.Called(ctx) return a.Get(0).(int), a.Error(1) } @@ -34,17 +35,17 @@ func (m *MockQOffers) NewOffersBatchInsertBuilder(maxBatchSize int) OffersBatchI return a.Get(0).(OffersBatchInsertBuilder) } -func (m *MockQOffers) UpdateOffer(row Offer) (int64, error) { - a := m.Called(row) +func (m *MockQOffers) UpdateOffer(ctx context.Context, row Offer) (int64, error) { + a := m.Called(ctx, row) return a.Get(0).(int64), a.Error(1) } -func (m *MockQOffers) RemoveOffers(offerIDs []int64, lastModifiedLedger uint32) (int64, error) { - a := m.Called(offerIDs, lastModifiedLedger) +func (m *MockQOffers) RemoveOffers(ctx context.Context, offerIDs []int64, lastModifiedLedger uint32) (int64, error) { + a := m.Called(ctx, offerIDs, lastModifiedLedger) return a.Get(0).(int64), a.Error(1) } -func (m *MockQOffers) CompactOffers(cutOffSequence uint32) (int64, error) { - a := m.Called(cutOffSequence) +func (m *MockQOffers) CompactOffers(ctx context.Context, cutOffSequence uint32) (int64, error) { + a := m.Called(ctx, cutOffSequence) return a.Get(0).(int64), a.Error(1) } diff --git a/services/horizon/internal/db2/history/mock_q_participants.go b/services/horizon/internal/db2/history/mock_q_participants.go index 04758e43de..9365e06db3 100644 --- a/services/horizon/internal/db2/history/mock_q_participants.go +++ b/services/horizon/internal/db2/history/mock_q_participants.go @@ -1,6 +1,7 @@ package history import ( + "context" "github.com/stretchr/testify/mock" ) @@ -9,8 +10,8 @@ type MockQParticipants struct { mock.Mock } -func (m *MockQParticipants) CreateAccounts(addresses []string, maxBatchSize int) (map[string]int64, error) { - a := m.Called(addresses, maxBatchSize) +func (m *MockQParticipants) CreateAccounts(ctx context.Context, addresses []string, maxBatchSize int) (map[string]int64, error) { + a := m.Called(ctx, addresses, maxBatchSize) return a.Get(0).(map[string]int64), a.Error(1) } @@ -25,13 +26,13 @@ type MockTransactionParticipantsBatchInsertBuilder struct { mock.Mock } -func (m *MockTransactionParticipantsBatchInsertBuilder) Add(transactionID, accountID int64) error { - a := m.Called(transactionID, accountID) +func (m *MockTransactionParticipantsBatchInsertBuilder) Add(ctx context.Context, transactionID, accountID int64) error { + a := m.Called(ctx, transactionID, accountID) return a.Error(0) } -func (m *MockTransactionParticipantsBatchInsertBuilder) Exec() error { - a := m.Called() +func (m *MockTransactionParticipantsBatchInsertBuilder) Exec(ctx context.Context) error { + a := m.Called(ctx) return a.Error(0) } diff --git a/services/horizon/internal/db2/history/mock_q_signers.go b/services/horizon/internal/db2/history/mock_q_signers.go index da5e8a6c48..81f56d9fd1 100644 --- a/services/horizon/internal/db2/history/mock_q_signers.go +++ b/services/horizon/internal/db2/history/mock_q_signers.go @@ -1,31 +1,34 @@ package history import ( - "github.com/stellar/go/services/horizon/internal/db2" + "context" + "github.com/stretchr/testify/mock" + + "github.com/stellar/go/services/horizon/internal/db2" ) type MockQSigners struct { mock.Mock } -func (m *MockQSigners) GetLastLedgerIngestNonBlocking() (uint32, error) { - a := m.Called() +func (m *MockQSigners) GetLastLedgerIngestNonBlocking(ctx context.Context) (uint32, error) { + a := m.Called(ctx) return a.Get(0).(uint32), a.Error(1) } -func (m *MockQSigners) GetLastLedgerIngest() (uint32, error) { - a := m.Called() +func (m *MockQSigners) GetLastLedgerIngest(ctx context.Context) (uint32, error) { + a := m.Called(ctx) return a.Get(0).(uint32), a.Error(1) } -func (m *MockQSigners) UpdateLastLedgerIngest(ledgerSequence uint32) error { - a := m.Called(ledgerSequence) +func (m *MockQSigners) UpdateLastLedgerIngest(ctx context.Context, ledgerSequence uint32) error { + a := m.Called(ctx, ledgerSequence) return a.Error(0) } -func (m *MockQSigners) AccountsForSigner(signer string, page db2.PageQuery) ([]AccountSigner, error) { - a := m.Called(signer, page) +func (m *MockQSigners) AccountsForSigner(ctx context.Context, signer string, page db2.PageQuery) ([]AccountSigner, error) { + a := m.Called(ctx, signer, page) return a.Get(0).([]AccountSigner), a.Error(1) } @@ -34,22 +37,22 @@ func (m *MockQSigners) NewAccountSignersBatchInsertBuilder(maxBatchSize int) Acc return a.Get(0).(AccountSignersBatchInsertBuilder) } -func (m *MockQSigners) CreateAccountSigner(account, signer string, weight int32, sponsor *string) (int64, error) { - a := m.Called(account, signer, weight, sponsor) +func (m *MockQSigners) CreateAccountSigner(ctx context.Context, account, signer string, weight int32, sponsor *string) (int64, error) { + a := m.Called(ctx, account, signer, weight, sponsor) return a.Get(0).(int64), a.Error(1) } -func (m *MockQSigners) RemoveAccountSigner(account, signer string) (int64, error) { - a := m.Called(account, signer) +func (m *MockQSigners) RemoveAccountSigner(ctx context.Context, account, signer string) (int64, error) { + a := m.Called(ctx, account, signer) return a.Get(0).(int64), a.Error(1) } -func (m *MockQSigners) SignersForAccounts(accounts []string) ([]AccountSigner, error) { - a := m.Called(accounts) +func (m *MockQSigners) SignersForAccounts(ctx context.Context, accounts []string) ([]AccountSigner, error) { + a := m.Called(ctx, accounts) return a.Get(0).([]AccountSigner), a.Error(1) } -func (m *MockQSigners) CountAccounts() (int, error) { - a := m.Called() +func (m *MockQSigners) CountAccounts(ctx context.Context) (int, error) { + a := m.Called(ctx) return a.Get(0).(int), a.Error(1) } diff --git a/services/horizon/internal/db2/history/mock_q_trades.go b/services/horizon/internal/db2/history/mock_q_trades.go index e64afcb24c..e204c5d443 100644 --- a/services/horizon/internal/db2/history/mock_q_trades.go +++ b/services/horizon/internal/db2/history/mock_q_trades.go @@ -1,7 +1,10 @@ package history import ( + "context" + "github.com/stellar/go/xdr" + "github.com/stretchr/testify/mock" ) @@ -9,13 +12,13 @@ type MockQTrades struct { mock.Mock } -func (m *MockQTrades) CreateAccounts(addresses []string, maxBatchSize int) (map[string]int64, error) { - a := m.Called(addresses, maxBatchSize) +func (m *MockQTrades) CreateAccounts(ctx context.Context, addresses []string, maxBatchSize int) (map[string]int64, error) { + a := m.Called(ctx, addresses, maxBatchSize) return a.Get(0).(map[string]int64), a.Error(1) } -func (m *MockQTrades) CreateAssets(assets []xdr.Asset, maxBatchSize int) (map[string]Asset, error) { - a := m.Called(assets, maxBatchSize) +func (m *MockQTrades) CreateAssets(ctx context.Context, assets []xdr.Asset, maxBatchSize int) (map[string]Asset, error) { + a := m.Called(ctx, assets, maxBatchSize) return a.Get(0).(map[string]Asset), a.Error(1) } @@ -28,12 +31,12 @@ type MockTradeBatchInsertBuilder struct { mock.Mock } -func (m *MockTradeBatchInsertBuilder) Add(entries ...InsertTrade) error { - a := m.Called(entries) +func (m *MockTradeBatchInsertBuilder) Add(ctx context.Context, entries ...InsertTrade) error { + a := m.Called(ctx, entries) return a.Error(0) } -func (m *MockTradeBatchInsertBuilder) Exec() error { - a := m.Called() +func (m *MockTradeBatchInsertBuilder) Exec(ctx context.Context) error { + a := m.Called(ctx) return a.Error(0) } diff --git a/services/horizon/internal/db2/history/mock_q_trust_lines.go b/services/horizon/internal/db2/history/mock_q_trust_lines.go index fd9eeb33c9..ab9a903913 100644 --- a/services/horizon/internal/db2/history/mock_q_trust_lines.go +++ b/services/horizon/internal/db2/history/mock_q_trust_lines.go @@ -1,6 +1,8 @@ package history import ( + "context" + "github.com/stretchr/testify/mock" "github.com/stellar/go/xdr" @@ -16,27 +18,27 @@ func (m *MockQTrustLines) NewTrustLinesBatchInsertBuilder(maxBatchSize int) Trus return a.Get(0).(TrustLinesBatchInsertBuilder) } -func (m *MockQTrustLines) GetTrustLinesByKeys(keys []xdr.LedgerKeyTrustLine) ([]TrustLine, error) { - a := m.Called(keys) +func (m *MockQTrustLines) GetTrustLinesByKeys(ctx context.Context, keys []xdr.LedgerKeyTrustLine) ([]TrustLine, error) { + a := m.Called(ctx, keys) return a.Get(0).([]TrustLine), a.Error(1) } -func (m *MockQTrustLines) InsertTrustLine(entry xdr.LedgerEntry) (int64, error) { - a := m.Called(entry) +func (m *MockQTrustLines) InsertTrustLine(ctx context.Context, entry xdr.LedgerEntry) (int64, error) { + a := m.Called(ctx, entry) return a.Get(0).(int64), a.Error(1) } -func (m *MockQTrustLines) UpdateTrustLine(entry xdr.LedgerEntry) (int64, error) { - a := m.Called(entry) +func (m *MockQTrustLines) UpdateTrustLine(ctx context.Context, entry xdr.LedgerEntry) (int64, error) { + a := m.Called(ctx, entry) return a.Get(0).(int64), a.Error(1) } -func (m *MockQTrustLines) UpsertTrustLines(trustLines []xdr.LedgerEntry) error { - a := m.Called(trustLines) +func (m *MockQTrustLines) UpsertTrustLines(ctx context.Context, trustLines []xdr.LedgerEntry) error { + a := m.Called(ctx, trustLines) return a.Error(0) } -func (m *MockQTrustLines) RemoveTrustLine(key xdr.LedgerKeyTrustLine) (int64, error) { - a := m.Called(key) +func (m *MockQTrustLines) RemoveTrustLine(ctx context.Context, key xdr.LedgerKeyTrustLine) (int64, error) { + a := m.Called(ctx, key) return a.Get(0).(int64), a.Error(1) } diff --git a/services/horizon/internal/db2/history/mock_transactions_batch_insert_builder.go b/services/horizon/internal/db2/history/mock_transactions_batch_insert_builder.go index c9997ed088..8e2608d553 100644 --- a/services/horizon/internal/db2/history/mock_transactions_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/mock_transactions_batch_insert_builder.go @@ -1,6 +1,8 @@ package history import ( + "context" + "github.com/stretchr/testify/mock" "github.com/stellar/go/ingest" @@ -10,12 +12,12 @@ type MockTransactionsBatchInsertBuilder struct { mock.Mock } -func (m *MockTransactionsBatchInsertBuilder) Add(transaction ingest.LedgerTransaction, sequence uint32) error { - a := m.Called(transaction, sequence) +func (m *MockTransactionsBatchInsertBuilder) Add(ctx context.Context, transaction ingest.LedgerTransaction, sequence uint32) error { + a := m.Called(ctx, transaction, sequence) return a.Error(0) } -func (m *MockTransactionsBatchInsertBuilder) Exec() error { - a := m.Called() +func (m *MockTransactionsBatchInsertBuilder) Exec(ctx context.Context) error { + a := m.Called(ctx) return a.Error(0) } diff --git a/services/horizon/internal/db2/history/offers.go b/services/horizon/internal/db2/history/offers.go index 515cf3928b..fe37ba91c9 100644 --- a/services/horizon/internal/db2/history/offers.go +++ b/services/horizon/internal/db2/history/offers.go @@ -1,27 +1,30 @@ package history import ( + "context" + sq "github.com/Masterminds/squirrel" + "github.com/stellar/go/support/errors" ) // QOffers defines offer related queries. type QOffers interface { - GetAllOffers() ([]Offer, error) - GetOffersByIDs(ids []int64) ([]Offer, error) - CountOffers() (int, error) - GetUpdatedOffers(newerThanSequence uint32) ([]Offer, error) + GetAllOffers(ctx context.Context) ([]Offer, error) + GetOffersByIDs(ctx context.Context, ids []int64) ([]Offer, error) + CountOffers(ctx context.Context) (int, error) + GetUpdatedOffers(ctx context.Context, newerThanSequence uint32) ([]Offer, error) NewOffersBatchInsertBuilder(maxBatchSize int) OffersBatchInsertBuilder - UpdateOffer(offer Offer) (int64, error) - RemoveOffers(offerIDs []int64, lastModifiedLedger uint32) (int64, error) - CompactOffers(cutOffSequence uint32) (int64, error) + UpdateOffer(ctx context.Context, offer Offer) (int64, error) + RemoveOffers(ctx context.Context, offerIDs []int64, lastModifiedLedger uint32) (int64, error) + CompactOffers(ctx context.Context, cutOffSequence uint32) (int64, error) } -func (q *Q) CountOffers() (int, error) { +func (q *Q) CountOffers(ctx context.Context) (int, error) { sql := sq.Select("count(*)").Where("deleted = ?", false).From("offers") var count int - if err := q.Get(&count, sql); err != nil { + if err := q.Get(ctx, &count, sql); err != nil { return 0, errors.Wrap(err, "could not run select query") } @@ -29,25 +32,25 @@ func (q *Q) CountOffers() (int, error) { } // GetOfferByID loads a row from the `offers` table, selected by offerid. -func (q *Q) GetOfferByID(id int64) (Offer, error) { +func (q *Q) GetOfferByID(ctx context.Context, id int64) (Offer, error) { var offer Offer sql := selectOffers.Where("deleted = ?", false). Where("offers.offer_id = ?", id) - err := q.Get(&offer, sql) + err := q.Get(ctx, &offer, sql) return offer, err } // GetOffersByIDs loads a row from the `offers` table, selected by multiple offerid. -func (q *Q) GetOffersByIDs(ids []int64) ([]Offer, error) { +func (q *Q) GetOffersByIDs(ctx context.Context, ids []int64) ([]Offer, error) { var offers []Offer sql := selectOffers.Where("deleted = ?", false). Where(map[string]interface{}{"offers.offer_id": ids}) - err := q.Select(&offers, sql) + err := q.Select(ctx, &offers, sql) return offers, err } // GetOffers loads rows from `offers` by paging query. -func (q *Q) GetOffers(query OffersQuery) ([]Offer, error) { +func (q *Q) GetOffers(ctx context.Context, query OffersQuery) ([]Offer, error) { sql := selectOffers.Where("deleted = ?", false) sql, err := query.PageQuery.ApplyTo(sql, "offers.offer_id") @@ -72,7 +75,7 @@ func (q *Q) GetOffers(query OffersQuery) ([]Offer, error) { } var offers []Offer - if err := q.Select(&offers, sql); err != nil { + if err := q.Select(ctx, &offers, sql); err != nil { return nil, errors.Wrap(err, "could not run select query") } @@ -80,24 +83,24 @@ func (q *Q) GetOffers(query OffersQuery) ([]Offer, error) { } // GetAllOffers loads all non deleted offers -func (q *Q) GetAllOffers() ([]Offer, error) { +func (q *Q) GetAllOffers(ctx context.Context) ([]Offer, error) { var offers []Offer - err := q.Select(&offers, selectOffers.Where("deleted = ?", false)) + err := q.Select(ctx, &offers, selectOffers.Where("deleted = ?", false)) return offers, err } // GetUpdatedOffers returns all offers created, updated, or deleted after the given ledger sequence. -func (q *Q) GetUpdatedOffers(newerThanSequence uint32) ([]Offer, error) { +func (q *Q) GetUpdatedOffers(ctx context.Context, newerThanSequence uint32) ([]Offer, error) { var offers []Offer - err := q.Select(&offers, selectOffers.Where("offers.last_modified_ledger > ?", newerThanSequence)) + err := q.Select(ctx, &offers, selectOffers.Where("offers.last_modified_ledger > ?", newerThanSequence)) return offers, err } // UpdateOffer updates a row in the offers table. // Returns number of rows affected and error. -func (q *Q) UpdateOffer(offer Offer) (int64, error) { +func (q *Q) UpdateOffer(ctx context.Context, offer Offer) (int64, error) { updateBuilder := q.GetTable("offers").Update() - result, err := updateBuilder.SetStruct(offer, []string{}).Where("offer_id = ?", offer.OfferID).Exec() + result, err := updateBuilder.SetStruct(offer, []string{}).Where("offer_id = ?", offer.OfferID).Exec(ctx) if err != nil { return 0, err } @@ -106,13 +109,13 @@ func (q *Q) UpdateOffer(offer Offer) (int64, error) { // RemoveOffers marks rows in the offers table as deleted. // Returns number of rows affected and error. -func (q *Q) RemoveOffers(offerIDs []int64, lastModifiedLedger uint32) (int64, error) { +func (q *Q) RemoveOffers(ctx context.Context, offerIDs []int64, lastModifiedLedger uint32) (int64, error) { sql := sq.Update("offers"). Set("deleted", true). Set("last_modified_ledger", lastModifiedLedger). Where(map[string]interface{}{"offer_id": offerIDs}) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } @@ -121,17 +124,17 @@ func (q *Q) RemoveOffers(offerIDs []int64, lastModifiedLedger uint32) (int64, er } // CompactOffers removes rows from the offers table which are marked for deletion. -func (q *Q) CompactOffers(cutOffSequence uint32) (int64, error) { +func (q *Q) CompactOffers(ctx context.Context, cutOffSequence uint32) (int64, error) { sql := sq.Delete("offers"). Where("deleted = ?", true). Where("last_modified_ledger <= ?", cutOffSequence) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, errors.Wrap(err, "cannot delete offer rows") } - if err = q.UpdateOfferCompactionSequence(cutOffSequence); err != nil { + if err = q.UpdateOfferCompactionSequence(ctx, cutOffSequence); err != nil { return 0, errors.Wrap(err, "cannot update offer compaction sequence") } diff --git a/services/horizon/internal/db2/history/offers_batch_insert_builder.go b/services/horizon/internal/db2/history/offers_batch_insert_builder.go index 4278223bde..c1d3b628a9 100644 --- a/services/horizon/internal/db2/history/offers_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/offers_batch_insert_builder.go @@ -1,10 +1,14 @@ package history +import ( + "context" +) + // Add adds a new offer entry to the batch. -func (i *offersBatchInsertBuilder) Add(offer Offer) error { - return i.builder.RowStruct(offer) +func (i *offersBatchInsertBuilder) Add(ctx context.Context, offer Offer) error { + return i.builder.RowStruct(ctx, offer) } -func (i *offersBatchInsertBuilder) Exec() error { - return i.builder.Exec() +func (i *offersBatchInsertBuilder) Exec(ctx context.Context) error { + return i.builder.Exec(ctx) } diff --git a/services/horizon/internal/db2/history/offers_test.go b/services/horizon/internal/db2/history/offers_test.go index 79ee19c0eb..2218ffc71a 100644 --- a/services/horizon/internal/db2/history/offers_test.go +++ b/services/horizon/internal/db2/history/offers_test.go @@ -63,13 +63,13 @@ var ( } ) -func insertOffer(q *Q, offer Offer) error { +func insertOffer(tt *test.T, q *Q, offer Offer) error { batch := q.NewOffersBatchInsertBuilder(0) - err := batch.Add(offer) + err := batch.Add(tt.Ctx, offer) if err != nil { return err } - return batch.Exec() + return batch.Exec(tt.Ctx) } func TestGetOfferByID(t *testing.T) { @@ -78,9 +78,9 @@ func TestGetOfferByID(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - err := insertOffer(q, eurOffer) + err := insertOffer(tt, q, eurOffer) tt.Assert.NoError(err) - offer, err := q.GetOfferByID(eurOffer.OfferID) + offer, err := q.GetOfferByID(tt.Ctx, eurOffer.OfferID) tt.Assert.NoError(err) tt.Assert.Equal(offer, eurOffer) } @@ -91,7 +91,7 @@ func TestGetNonExistentOfferByID(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - _, err := q.GetOfferByID(12345) + _, err := q.GetOfferByID(tt.Ctx, 12345) tt.Assert.True(q.NoRows(err)) } @@ -101,22 +101,22 @@ func TestQueryEmptyOffers(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - offers, err := q.GetAllOffers() + offers, err := q.GetAllOffers(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Len(offers, 0) - updated, err := q.GetUpdatedOffers(0) + updated, err := q.GetUpdatedOffers(tt.Ctx, 0) tt.Assert.NoError(err) tt.Assert.Len(updated, 0) - count, err := q.CountOffers() + count, err := q.CountOffers(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Equal(0, count) - numRemoved, err := q.CompactOffers(100) + numRemoved, err := q.CompactOffers(tt.Ctx, 100) tt.Assert.NoError(err) tt.Assert.Equal(int64(0), numRemoved) - seq, err := q.GetOfferCompactionSequence() + seq, err := q.GetOfferCompactionSequence(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Equal(uint32(100), seq) } @@ -127,12 +127,12 @@ func TestInsertOffers(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - err := insertOffer(q, eurOffer) + err := insertOffer(tt, q, eurOffer) tt.Assert.NoError(err) - err = insertOffer(q, twoEurOffer) + err = insertOffer(tt, q, twoEurOffer) tt.Assert.NoError(err) - offers, err := q.GetAllOffers() + offers, err := q.GetAllOffers(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Len(offers, 2) @@ -144,22 +144,22 @@ func TestInsertOffers(t *testing.T) { tt.Assert.Equal(offersByID[eurOffer.OfferID], eurOffer) tt.Assert.Equal(offersByID[twoEurOffer.OfferID], twoEurOffer) - count, err := q.CountOffers() + count, err := q.CountOffers(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Equal(2, count) - numRemoved, err := q.CompactOffers(12350) + numRemoved, err := q.CompactOffers(tt.Ctx, 12350) tt.Assert.NoError(err) tt.Assert.Equal(int64(0), numRemoved) - seq, err := q.GetOfferCompactionSequence() + seq, err := q.GetOfferCompactionSequence(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Equal(uint32(12350), seq) - afterCompactionCount, err := q.CountOffers() + afterCompactionCount, err := q.CountOffers(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Equal(2, afterCompactionCount) - afterCompactionOffers, err := q.GetAllOffers() + afterCompactionOffers, err := q.GetAllOffers(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Len(afterCompactionOffers, 2) } @@ -170,22 +170,22 @@ func TestUpdateOffer(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - err := insertOffer(q, eurOffer) + err := insertOffer(tt, q, eurOffer) tt.Assert.NoError(err) - offers, err := q.GetAllOffers() + offers, err := q.GetAllOffers(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Len(offers, 1) - updatedOffers, err := q.GetUpdatedOffers(1233) + updatedOffers, err := q.GetUpdatedOffers(tt.Ctx, 1233) tt.Assert.NoError(err) tt.Assert.Equal(offers, updatedOffers) - updatedOffers, err = q.GetUpdatedOffers(100) + updatedOffers, err = q.GetUpdatedOffers(tt.Ctx, 100) tt.Assert.NoError(err) tt.Assert.Equal(offers, updatedOffers) - updatedOffers, err = q.GetUpdatedOffers(1234) + updatedOffers, err = q.GetUpdatedOffers(tt.Ctx, 1234) tt.Assert.NoError(err) tt.Assert.Len(updatedOffers, 0) @@ -194,19 +194,19 @@ func TestUpdateOffer(t *testing.T) { modifiedEurOffer := eurOffer modifiedEurOffer.Amount -= 10 - rowsAffected, err := q.UpdateOffer(modifiedEurOffer) + rowsAffected, err := q.UpdateOffer(tt.Ctx, modifiedEurOffer) tt.Assert.NoError(err) tt.Assert.Equal(int64(1), rowsAffected) - offers, err = q.GetAllOffers() + offers, err = q.GetAllOffers(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Len(offers, 1) - updatedOffers, err = q.GetUpdatedOffers(1233) + updatedOffers, err = q.GetUpdatedOffers(tt.Ctx, 1233) tt.Assert.NoError(err) tt.Assert.Equal(offers, updatedOffers) - updatedOffers, err = q.GetUpdatedOffers(1235) + updatedOffers, err = q.GetUpdatedOffers(tt.Ctx, 1235) tt.Assert.NoError(err) tt.Assert.Len(updatedOffers, 0) @@ -219,7 +219,7 @@ func TestRemoveNonExistantOffer(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - numAffected, err := q.RemoveOffers([]int64{12345}, 1236) + numAffected, err := q.RemoveOffers(tt.Ctx, []int64{12345}, 1236) tt.Assert.NoError(err) tt.Assert.Equal(int64(0), numAffected) } @@ -230,51 +230,51 @@ func TestRemoveOffer(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - err := insertOffer(q, eurOffer) + err := insertOffer(tt, q, eurOffer) tt.Assert.NoError(err) - offers, err := q.GetAllOffers() + offers, err := q.GetAllOffers(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Len(offers, 1) tt.Assert.Equal(offers[0], eurOffer) expectedUpdates := offers - rowsAffected, err := q.RemoveOffers([]int64{eurOffer.OfferID}, 1236) + rowsAffected, err := q.RemoveOffers(tt.Ctx, []int64{eurOffer.OfferID}, 1236) tt.Assert.Equal(int64(1), rowsAffected) tt.Assert.NoError(err) expectedUpdates[0].LastModifiedLedger = 1236 expectedUpdates[0].Deleted = true - offers, err = q.GetAllOffers() + offers, err = q.GetAllOffers(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Len(offers, 0) - offers, err = q.GetOffersByIDs([]int64{int64(expectedUpdates[0].OfferID)}) + offers, err = q.GetOffersByIDs(tt.Ctx, []int64{int64(expectedUpdates[0].OfferID)}) tt.Assert.NoError(err) tt.Assert.Len(offers, 0) - _, err = q.GetOfferByID(int64(expectedUpdates[0].OfferID)) + _, err = q.GetOfferByID(tt.Ctx, int64(expectedUpdates[0].OfferID)) tt.Assert.True(q.NoRows(err)) - updated, err := q.GetUpdatedOffers(1234) + updated, err := q.GetUpdatedOffers(tt.Ctx, 1234) tt.Assert.NoError(err) tt.Assert.Equal(expectedUpdates, updated) - count, err := q.CompactOffers(1235) + count, err := q.CompactOffers(tt.Ctx, 1235) tt.Assert.NoError(err) tt.Assert.Equal(int64(0), count) - updated, err = q.GetUpdatedOffers(1234) + updated, err = q.GetUpdatedOffers(tt.Ctx, 1234) tt.Assert.NoError(err) tt.Assert.Equal(expectedUpdates, updated) - count, err = q.CompactOffers(1236) + count, err = q.CompactOffers(tt.Ctx, 1236) tt.Assert.NoError(err) tt.Assert.Equal(int64(1), count) - seq, err := q.GetOfferCompactionSequence() + seq, err := q.GetOfferCompactionSequence(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Equal(uint32(1236), seq) - updated, err = q.GetUpdatedOffers(1234) + updated, err = q.GetUpdatedOffers(tt.Ctx, 1234) tt.Assert.NoError(err) tt.Assert.Len(updated, 0) } @@ -285,15 +285,15 @@ func TestGetOffers(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - err := insertOffer(q, eurOffer) + err := insertOffer(tt, q, eurOffer) tt.Assert.NoError(err) - err = insertOffer(q, twoEurOffer) + err = insertOffer(tt, q, twoEurOffer) tt.Assert.NoError(err) // check removed offers aren't included in GetOffer queries - err = insertOffer(q, threeEurOffer) + err = insertOffer(tt, q, threeEurOffer) tt.Assert.NoError(err) - count, err := q.RemoveOffers([]int64{threeEurOffer.OfferID}, 1235) + count, err := q.RemoveOffers(tt.Ctx, []int64{threeEurOffer.OfferID}, 1235) tt.Assert.NoError(err) tt.Assert.Equal(int64(1), count) @@ -306,7 +306,7 @@ func TestGetOffers(t *testing.T) { Selling: &usdAsset, } - offers, err := q.GetOffers(query) + offers, err := q.GetOffers(tt.Ctx, query) tt.Assert.NoError(err) tt.Assert.Len(offers, 0) @@ -315,7 +315,7 @@ func TestGetOffers(t *testing.T) { Selling: &nativeAsset, } - offers, err = q.GetOffers(query) + offers, err = q.GetOffers(tt.Ctx, query) tt.Assert.NoError(err) tt.Assert.Len(offers, 2) @@ -330,7 +330,7 @@ func TestGetOffers(t *testing.T) { Buying: &eurAsset, } - offers, err := q.GetOffers(query) + offers, err := q.GetOffers(tt.Ctx, query) tt.Assert.NoError(err) tt.Assert.Len(offers, 2) @@ -343,7 +343,7 @@ func TestGetOffers(t *testing.T) { Buying: &usdAsset, } - offers, err = q.GetOffers(query) + offers, err = q.GetOffers(tt.Ctx, query) tt.Assert.NoError(err) tt.Assert.Len(offers, 0) }) @@ -355,7 +355,7 @@ func TestGetOffers(t *testing.T) { SellerID: sellerID, } - offers, err := q.GetOffers(query) + offers, err := q.GetOffers(tt.Ctx, query) tt.Assert.NoError(err) tt.Assert.Len(offers, 1) @@ -368,7 +368,7 @@ func TestGetOffers(t *testing.T) { Sponsor: sponsor.Address(), } - offers, err := q.GetOffers(query) + offers, err := q.GetOffers(tt.Ctx, query) tt.Assert.NoError(err) tt.Assert.Len(offers, 1) @@ -383,7 +383,7 @@ func TestGetOffers(t *testing.T) { PageQuery: pageQuery, } - offers, err := q.GetOffers(query) + offers, err := q.GetOffers(tt.Ctx, query) tt.Assert.NoError(err) tt.Assert.Len(offers, 2) @@ -401,7 +401,7 @@ func TestGetOffers(t *testing.T) { PageQuery: pageQuery, } - offers, err = q.GetOffers(query) + offers, err = q.GetOffers(tt.Ctx, query) tt.Assert.NoError(err) tt.Assert.Len(offers, 1) @@ -413,7 +413,7 @@ func TestGetOffers(t *testing.T) { PageQuery: pageQuery, } - offers, err = q.GetOffers(query) + offers, err = q.GetOffers(tt.Ctx, query) tt.Assert.NoError(err) tt.Assert.Len(offers, 1) @@ -430,7 +430,7 @@ func TestGetOffers(t *testing.T) { PageQuery: pageQuery, } - offers, err = q.GetOffers(query) + offers, err = q.GetOffers(tt.Ctx, query) tt.Assert.NoError(err) tt.Assert.Len(offers, 1) diff --git a/services/horizon/internal/db2/history/operation.go b/services/horizon/internal/db2/history/operation.go index 6a5a1551dd..a70eaf47d5 100644 --- a/services/horizon/internal/db2/history/operation.go +++ b/services/horizon/internal/db2/history/operation.go @@ -2,6 +2,7 @@ package history import ( "bytes" + "context" "encoding/json" "text/template" @@ -54,7 +55,7 @@ WHERE ledger_sequence > $1 AND ledger_sequence <= $2`)) // FeeStats returns operation fee stats for the last 5 ledgers. // Currently, we hard code the query to return the last 5 ledgers worth of transactions. // TODO: make the number of ledgers configurable. -func (q *Q) FeeStats(currentSeq int32, dest *FeeStats) error { +func (q *Q) FeeStats(ctx context.Context, currentSeq int32, dest *FeeStats) error { percentiles := []int{10, 20, 30, 40, 50, 60, 70, 80, 90, 95, 99} var buf bytes.Buffer @@ -63,7 +64,7 @@ func (q *Q) FeeStats(currentSeq int32, dest *FeeStats) error { return errors.Wrap(err, "error executing the query template") } - return q.GetRaw(dest, buf.String(), currentSeq-5, currentSeq) + return q.GetRaw(ctx, dest, buf.String(), currentSeq-5, currentSeq) } // Operations provides a helper to filter the operations table with pre-defined @@ -81,20 +82,20 @@ func (q *Q) Operations() *OperationsQ { } // OperationByID returns an Operation and optionally a Transaction given an operation id -func (q *Q) OperationByID(includeTransactions bool, id int64) (Operation, *Transaction, error) { +func (q *Q) OperationByID(ctx context.Context, includeTransactions bool, id int64) (Operation, *Transaction, error) { sql := selectOperation. Limit(1). Where("hop.id = ?", id) var operation Operation - err := q.Get(&operation, sql) + err := q.Get(ctx, &operation, sql) if err != nil { return operation, nil, err } if includeTransactions { var transaction Transaction - if err = q.TransactionByHash(&transaction, operation.TransactionHash); err != nil { + if err = q.TransactionByHash(ctx, &transaction, operation.TransactionHash); err != nil { return operation, nil, err } @@ -109,9 +110,9 @@ func (q *Q) OperationByID(includeTransactions bool, id int64) (Operation, *Trans } // ForAccount filters the operations collection to a specific account -func (q *OperationsQ) ForAccount(aid string) *OperationsQ { +func (q *OperationsQ) ForAccount(ctx context.Context, aid string) *OperationsQ { var account Account - q.Err = q.parent.AccountByAddress(&account, aid) + q.Err = q.parent.AccountByAddress(ctx, &account, aid) if q.Err != nil { return q } @@ -129,9 +130,9 @@ func (q *OperationsQ) ForAccount(aid string) *OperationsQ { // ForClaimableBalance filters the query to only operations pertaining to a // claimable balance, specified by the claimable balance's hex-encoded id. -func (q *OperationsQ) ForClaimableBalance(cbID xdr.ClaimableBalanceId) *OperationsQ { +func (q *OperationsQ) ForClaimableBalance(ctx context.Context, cbID xdr.ClaimableBalanceId) *OperationsQ { var hCB HistoryClaimableBalance - hCB, q.Err = q.parent.ClaimableBalanceByID(cbID) + hCB, q.Err = q.parent.ClaimableBalanceByID(ctx, cbID) if q.Err != nil { return q } @@ -149,9 +150,9 @@ func (q *OperationsQ) ForClaimableBalance(cbID xdr.ClaimableBalanceId) *Operatio // ForLedger filters the query to a only operations in a specific ledger, // specified by its sequence. -func (q *OperationsQ) ForLedger(seq int32) *OperationsQ { +func (q *OperationsQ) ForLedger(ctx context.Context, seq int32) *OperationsQ { var ledger Ledger - q.Err = q.parent.LedgerBySequence(&ledger, seq) + q.Err = q.parent.LedgerBySequence(ctx, &ledger, seq) if q.Err != nil { return q } @@ -169,9 +170,9 @@ func (q *OperationsQ) ForLedger(seq int32) *OperationsQ { // ForTransaction filters the query to only operations in a specific // transaction, specified by the transactions's hex-encoded hash. -func (q *OperationsQ) ForTransaction(hash string) *OperationsQ { +func (q *OperationsQ) ForTransaction(ctx context.Context, hash string) *OperationsQ { var tx Transaction - q.Err = q.parent.TransactionByHash(&tx, hash) + q.Err = q.parent.TransactionByHash(ctx, &tx, hash) if q.Err != nil { return q } @@ -225,7 +226,7 @@ func (q *OperationsQ) Page(page db2.PageQuery) *OperationsQ { } // Fetch returns results specified by a filtered operations query -func (q *OperationsQ) Fetch() ([]Operation, []Transaction, error) { +func (q *OperationsQ) Fetch(ctx context.Context) ([]Operation, []Transaction, error) { if q.Err != nil { return nil, nil, q.Err } @@ -237,7 +238,7 @@ func (q *OperationsQ) Fetch() ([]Operation, []Transaction, error) { var operations []Operation var transactions []Transaction - q.Err = q.parent.Select(&operations, q.sql) + q.Err = q.parent.Select(ctx, &operations, q.sql) if q.Err != nil { return nil, nil, q.Err } @@ -277,7 +278,7 @@ func (q *OperationsQ) Fetch() ([]Operation, []Transaction, error) { } if q.includeTransactions && len(transactionIDs) > 0 { - transactionsByID, err := q.parent.TransactionsByIDs(transactionIDs...) + transactionsByID, err := q.parent.TransactionsByIDs(ctx, transactionIDs...) if err != nil { return nil, nil, err } @@ -343,6 +344,7 @@ var selectOperation = sq.Select( "hop.type, " + "hop.details, " + "hop.source_account, " + + "hop.source_account_muxed, " + "ht.transaction_hash, " + "ht.tx_result, " + "COALESCE(ht.successful, true) as transaction_successful"). diff --git a/services/horizon/internal/db2/history/operation_batch_insert_builder.go b/services/horizon/internal/db2/history/operation_batch_insert_builder.go index 78b0116b39..a3baee8863 100644 --- a/services/horizon/internal/db2/history/operation_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/operation_batch_insert_builder.go @@ -1,6 +1,9 @@ package history import ( + "context" + + "github.com/guregu/null" "github.com/stellar/go/support/db" "github.com/stellar/go/xdr" ) @@ -9,14 +12,16 @@ import ( // history_operations table type OperationBatchInsertBuilder interface { Add( + ctx context.Context, id int64, transactionID int64, applicationOrder uint32, operationType xdr.OperationType, details []byte, sourceAccount string, + sourceAcccountMuxed null.String, ) error - Exec() error + Exec(ctx context.Context) error } // operationBatchInsertBuilder is a simple wrapper around db.BatchInsertBuilder @@ -36,24 +41,27 @@ func (q *Q) NewOperationBatchInsertBuilder(maxBatchSize int) OperationBatchInser // Add adds a transaction's operations to the batch func (i *operationBatchInsertBuilder) Add( + ctx context.Context, id int64, transactionID int64, applicationOrder uint32, operationType xdr.OperationType, details []byte, sourceAccount string, + sourceAccountMuxed null.String, ) error { - return i.builder.Row(map[string]interface{}{ - "id": id, - "transaction_id": transactionID, - "application_order": applicationOrder, - "type": operationType, - "details": details, - "source_account": sourceAccount, + return i.builder.Row(ctx, map[string]interface{}{ + "id": id, + "transaction_id": transactionID, + "application_order": applicationOrder, + "type": operationType, + "details": details, + "source_account": sourceAccount, + "source_account_muxed": sourceAccountMuxed, }) } -func (i *operationBatchInsertBuilder) Exec() error { - return i.builder.Exec() +func (i *operationBatchInsertBuilder) Exec(ctx context.Context) error { + return i.builder.Exec(ctx) } diff --git a/services/horizon/internal/db2/history/operation_batch_insert_builder_test.go b/services/horizon/internal/db2/history/operation_batch_insert_builder_test.go index 72e012f118..e5f2206f64 100644 --- a/services/horizon/internal/db2/history/operation_batch_insert_builder_test.go +++ b/services/horizon/internal/db2/history/operation_batch_insert_builder_test.go @@ -4,6 +4,7 @@ import ( "encoding/json" "testing" + "github.com/guregu/null" "github.com/stellar/go/services/horizon/internal/test" "github.com/stellar/go/services/horizon/internal/toid" "github.com/stellar/go/xdr" @@ -34,32 +35,35 @@ func TestAddOperation(t *testing.T) { ) sequence := int32(56) - tt.Assert.NoError(txBatch.Add(transaction, uint32(sequence))) - tt.Assert.NoError(txBatch.Exec()) + tt.Assert.NoError(txBatch.Add(tt.Ctx, transaction, uint32(sequence))) + tt.Assert.NoError(txBatch.Exec(tt.Ctx)) details, err := json.Marshal(map[string]string{ "to": "GANFZDRBCNTUXIODCJEYMACPMCSZEVE4WZGZ3CZDZ3P2SXK4KH75IK6Y", - "from": "GANFZDRBCNTUXIODCJEYMACPMCSZEVE4WZGZ3CZDZ3P2SXK4KH75IK6Y", + "from": "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", "amount": "10.0000000", "asset_type": "native", }) tt.Assert.NoError(err) - err = builder.Add( + sourceAccount := "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY" + sourceAccountMuxed := "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26" + err = builder.Add(tt.Ctx, toid.New(sequence, 1, 1).ToInt64(), toid.New(sequence, 1, 0).ToInt64(), 1, xdr.OperationTypePayment, details, - "GANFZDRBCNTUXIODCJEYMACPMCSZEVE4WZGZ3CZDZ3P2SXK4KH75IK6Y", + sourceAccount, + null.StringFrom(sourceAccountMuxed), ) tt.Assert.NoError(err) - err = builder.Exec() + err = builder.Exec(tt.Ctx) tt.Assert.NoError(err) ops := []Operation{} - err = q.Select(&ops, selectOperation) + err = q.Select(tt.Ctx, &ops, selectOperation) if tt.Assert.NoError(err) { tt.Assert.Len(ops, 1) @@ -72,10 +76,11 @@ func TestAddOperation(t *testing.T) { tt.Assert.Equal(int32(1), op.ApplicationOrder) tt.Assert.Equal(xdr.OperationTypePayment, op.Type) tt.Assert.Equal( - "{\"to\": \"GANFZDRBCNTUXIODCJEYMACPMCSZEVE4WZGZ3CZDZ3P2SXK4KH75IK6Y\", \"from\": \"GANFZDRBCNTUXIODCJEYMACPMCSZEVE4WZGZ3CZDZ3P2SXK4KH75IK6Y\", \"amount\": \"10.0000000\", \"asset_type\": \"native\"}", + "{\"to\": \"GANFZDRBCNTUXIODCJEYMACPMCSZEVE4WZGZ3CZDZ3P2SXK4KH75IK6Y\", \"from\": \"GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY\", \"amount\": \"10.0000000\", \"asset_type\": \"native\"}", op.DetailsString.String, ) - tt.Assert.Equal("GANFZDRBCNTUXIODCJEYMACPMCSZEVE4WZGZ3CZDZ3P2SXK4KH75IK6Y", op.SourceAccount) + tt.Assert.Equal(sourceAccount, op.SourceAccount) + tt.Assert.Equal(sourceAccountMuxed, op.SourceAccountMuxed.String) tt.Assert.Equal(true, op.TransactionSuccessful) } } diff --git a/services/horizon/internal/db2/history/operation_participant_batch_insert_builder.go b/services/horizon/internal/db2/history/operation_participant_batch_insert_builder.go index c0aa2da3c2..6b2b3afb56 100644 --- a/services/horizon/internal/db2/history/operation_participant_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/operation_participant_batch_insert_builder.go @@ -1,6 +1,8 @@ package history import ( + "context" + "github.com/stellar/go/support/db" ) @@ -8,10 +10,11 @@ import ( // history_operations table type OperationParticipantBatchInsertBuilder interface { Add( + ctx context.Context, operationID int64, accountID int64, ) error - Exec() error + Exec(ctx context.Context) error } // operationParticipantBatchInsertBuilder is a simple wrapper around db.BatchInsertBuilder @@ -31,15 +34,16 @@ func (q *Q) NewOperationParticipantBatchInsertBuilder(maxBatchSize int) Operatio // Add adds an operation participant to the batch func (i *operationParticipantBatchInsertBuilder) Add( + ctx context.Context, operationID int64, accountID int64, ) error { - return i.builder.Row(map[string]interface{}{ + return i.builder.Row(ctx, map[string]interface{}{ "history_operation_id": operationID, "history_account_id": accountID, }) } -func (i *operationParticipantBatchInsertBuilder) Exec() error { - return i.builder.Exec() +func (i *operationParticipantBatchInsertBuilder) Exec(ctx context.Context) error { + return i.builder.Exec(ctx) } diff --git a/services/horizon/internal/db2/history/operation_participant_batch_insert_builder_test.go b/services/horizon/internal/db2/history/operation_participant_batch_insert_builder_test.go index 612acba3bd..51a0c4800d 100644 --- a/services/horizon/internal/db2/history/operation_participant_batch_insert_builder_test.go +++ b/services/horizon/internal/db2/history/operation_participant_batch_insert_builder_test.go @@ -14,10 +14,10 @@ func TestAddOperationParticipants(t *testing.T) { q := &Q{tt.HorizonSession()} builder := q.NewOperationParticipantBatchInsertBuilder(1) - err := builder.Add(240518172673, 1) + err := builder.Add(tt.Ctx, 240518172673, 1) tt.Assert.NoError(err) - err = builder.Exec() + err = builder.Exec(tt.Ctx) tt.Assert.NoError(err) type hop struct { @@ -26,7 +26,7 @@ func TestAddOperationParticipants(t *testing.T) { } ops := []hop{} - err = q.Select(&ops, sq.Select( + err = q.Select(tt.Ctx, &ops, sq.Select( "hopp.history_operation_id, "+ "hopp.history_account_id"). From("history_operation_participants hopp"), diff --git a/services/horizon/internal/db2/history/operation_test.go b/services/horizon/internal/db2/history/operation_test.go index 8d1287d62f..dbbf1db64a 100644 --- a/services/horizon/internal/db2/history/operation_test.go +++ b/services/horizon/internal/db2/history/operation_test.go @@ -15,7 +15,7 @@ func TestOperationQueries(t *testing.T) { q := &Q{tt.HorizonSession()} // Test OperationByID - op, transaction, err := q.OperationByID(false, 8589938689) + op, transaction, err := q.OperationByID(tt.Ctx, false, 8589938689) if tt.Assert.NoError(err) { tt.Assert.Equal(int64(8589938689), op.ID) } @@ -23,15 +23,15 @@ func TestOperationQueries(t *testing.T) { // Test Operations() ops, transactions, err := q.Operations(). - ForAccount("GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON"). - Fetch() + ForAccount(tt.Ctx, "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON"). + Fetch(tt.Ctx) if tt.Assert.NoError(err) { tt.Assert.Len(ops, 2) } tt.Assert.Len(transactions, 0) // ledger filter works - ops, transactions, err = q.Operations().ForLedger(2).Fetch() + ops, transactions, err = q.Operations().ForLedger(tt.Ctx, 2).Fetch(tt.Ctx) if tt.Assert.NoError(err) { tt.Assert.Len(ops, 3) } @@ -39,7 +39,7 @@ func TestOperationQueries(t *testing.T) { // tx filter works hash := "2374e99349b9ef7dba9a5db3339b78fda8f34777b1af33ba468ad5c0df946d4d" - ops, transactions, err = q.Operations().ForTransaction(hash).Fetch() + ops, transactions, err = q.Operations().ForTransaction(tt.Ctx, hash).Fetch(tt.Ctx) if tt.Assert.NoError(err) { tt.Assert.Len(ops, 1) } @@ -47,7 +47,7 @@ func TestOperationQueries(t *testing.T) { // payment filter works tt.Scenario("pathed_payment") - ops, transactions, err = q.Operations().OnlyPayments().Fetch() + ops, transactions, err = q.Operations().OnlyPayments().Fetch(tt.Ctx) if tt.Assert.NoError(err) { tt.Assert.Len(ops, 10) } @@ -55,7 +55,7 @@ func TestOperationQueries(t *testing.T) { // payment filter includes account merges tt.Scenario("account_merge") - ops, transactions, err = q.Operations().OnlyPayments().Fetch() + ops, transactions, err = q.Operations().OnlyPayments().Fetch(tt.Ctx) if tt.Assert.NoError(err) { tt.Assert.Len(ops, 3) } @@ -68,22 +68,22 @@ func TestOperationQueryBuilder(t *testing.T) { defer tt.Finish() q := &Q{tt.HorizonSession()} - opsQ := q.Operations().ForAccount("GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON").Page(db2.PageQuery{Cursor: "8589938689", Order: "asc", Limit: 10}) + opsQ := q.Operations().ForAccount(tt.Ctx, "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON").Page(db2.PageQuery{Cursor: "8589938689", Order: "asc", Limit: 10}) tt.Assert.NoError(opsQ.Err) got, _, err := opsQ.sql.ToSql() tt.Assert.NoError(err) // Operations for account queries will use hopp.history_operation_id in their predicates. - want := "SELECT hop.id, hop.transaction_id, hop.application_order, hop.type, hop.details, hop.source_account, ht.transaction_hash, ht.tx_result, COALESCE(ht.successful, true) as transaction_successful FROM history_operations hop LEFT JOIN history_transactions ht ON ht.id = hop.transaction_id JOIN history_operation_participants hopp ON hopp.history_operation_id = hop.id WHERE hopp.history_account_id = ? AND hopp.history_operation_id > ? ORDER BY hopp.history_operation_id asc LIMIT 10" + want := "SELECT hop.id, hop.transaction_id, hop.application_order, hop.type, hop.details, hop.source_account, hop.source_account_muxed, ht.transaction_hash, ht.tx_result, COALESCE(ht.successful, true) as transaction_successful FROM history_operations hop LEFT JOIN history_transactions ht ON ht.id = hop.transaction_id JOIN history_operation_participants hopp ON hopp.history_operation_id = hop.id WHERE hopp.history_account_id = ? AND hopp.history_operation_id > ? ORDER BY hopp.history_operation_id asc LIMIT 10" tt.Assert.EqualValues(want, got) - opsQ = q.Operations().ForLedger(2).Page(db2.PageQuery{Cursor: "8589938689", Order: "asc", Limit: 10}) + opsQ = q.Operations().ForLedger(tt.Ctx, 2).Page(db2.PageQuery{Cursor: "8589938689", Order: "asc", Limit: 10}) tt.Assert.NoError(opsQ.Err) got, _, err = opsQ.sql.ToSql() tt.Assert.NoError(err) // Other operation queries will use hop.id in their predicates. - want = "SELECT hop.id, hop.transaction_id, hop.application_order, hop.type, hop.details, hop.source_account, ht.transaction_hash, ht.tx_result, COALESCE(ht.successful, true) as transaction_successful FROM history_operations hop LEFT JOIN history_transactions ht ON ht.id = hop.transaction_id WHERE hop.id >= ? AND hop.id < ? AND hop.id > ? ORDER BY hop.id asc LIMIT 10" + want = "SELECT hop.id, hop.transaction_id, hop.application_order, hop.type, hop.details, hop.source_account, hop.source_account_muxed, ht.transaction_hash, ht.tx_result, COALESCE(ht.successful, true) as transaction_successful FROM history_operations hop LEFT JOIN history_transactions ht ON ht.id = hop.transaction_id WHERE hop.id >= ? AND hop.id < ? AND hop.id > ? ORDER BY hop.id asc LIMIT 10" tt.Assert.EqualValues(want, got) } @@ -98,9 +98,9 @@ func TestOperationSuccessfulOnly(t *testing.T) { q := &Q{tt.HorizonSession()} query := q.Operations(). - ForAccount("GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2") + ForAccount(tt.Ctx, "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2") - operations, transactions, err := query.Fetch() + operations, transactions, err := query.Fetch(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Len(transactions, 0) @@ -124,10 +124,10 @@ func TestOperationIncludeFailed(t *testing.T) { q := &Q{tt.HorizonSession()} query := q.Operations(). - ForAccount("GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"). + ForAccount(tt.Ctx, "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"). IncludeFailed() - operations, transactions, err := query.Fetch() + operations, transactions, err := query.Fetch(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Len(transactions, 0) @@ -145,7 +145,7 @@ func TestOperationIncludeFailed(t *testing.T) { sql, _, err := query.sql.ToSql() tt.Assert.NoError(err) - tt.Assert.Equal("SELECT hop.id, hop.transaction_id, hop.application_order, hop.type, hop.details, hop.source_account, ht.transaction_hash, ht.tx_result, COALESCE(ht.successful, true) as transaction_successful FROM history_operations hop LEFT JOIN history_transactions ht ON ht.id = hop.transaction_id JOIN history_operation_participants hopp ON hopp.history_operation_id = hop.id WHERE hopp.history_account_id = ?", sql) + tt.Assert.Equal("SELECT hop.id, hop.transaction_id, hop.application_order, hop.type, hop.details, hop.source_account, hop.source_account_muxed, ht.transaction_hash, ht.tx_result, COALESCE(ht.successful, true) as transaction_successful FROM history_operations hop LEFT JOIN history_transactions ht ON ht.id = hop.transaction_id JOIN history_operation_participants hopp ON hopp.history_operation_id = hop.id WHERE hopp.history_account_id = ?", sql) } // TestPaymentsSuccessfulOnly tests if default query returns payments in @@ -160,9 +160,9 @@ func TestPaymentsSuccessfulOnly(t *testing.T) { q := &Q{tt.HorizonSession()} query := q.Operations(). OnlyPayments(). - ForAccount("GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON") + ForAccount(tt.Ctx, "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON") - operations, transactions, err := query.Fetch() + operations, transactions, err := query.Fetch(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Len(transactions, 0) @@ -187,10 +187,10 @@ func TestPaymentsIncludeFailed(t *testing.T) { q := &Q{tt.HorizonSession()} query := q.Operations(). OnlyPayments(). - ForAccount("GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON"). + ForAccount(tt.Ctx, "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON"). IncludeFailed() - operations, transactions, err := query.Fetch() + operations, transactions, err := query.Fetch(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Len(transactions, 0) @@ -208,7 +208,7 @@ func TestPaymentsIncludeFailed(t *testing.T) { sql, _, err := query.sql.ToSql() tt.Assert.NoError(err) - tt.Assert.Equal("SELECT hop.id, hop.transaction_id, hop.application_order, hop.type, hop.details, hop.source_account, ht.transaction_hash, ht.tx_result, COALESCE(ht.successful, true) as transaction_successful FROM history_operations hop LEFT JOIN history_transactions ht ON ht.id = hop.transaction_id JOIN history_operation_participants hopp ON hopp.history_operation_id = hop.id WHERE hop.type IN (?,?,?,?,?) AND hopp.history_account_id = ?", sql) + tt.Assert.Equal("SELECT hop.id, hop.transaction_id, hop.application_order, hop.type, hop.details, hop.source_account, hop.source_account_muxed, ht.transaction_hash, ht.tx_result, COALESCE(ht.successful, true) as transaction_successful FROM history_operations hop LEFT JOIN history_transactions ht ON ht.id = hop.transaction_id JOIN history_operation_participants hopp ON hopp.history_operation_id = hop.id WHERE hop.type IN (?,?,?,?,?) AND hopp.history_account_id = ?", sql) } func TestExtraChecksOperationsTransactionSuccessfulTrueResultFalse(t *testing.T) { @@ -224,10 +224,10 @@ func TestExtraChecksOperationsTransactionSuccessfulTrueResultFalse(t *testing.T) q := &Q{tt.HorizonSession()} query := q.Operations(). - ForAccount("GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"). + ForAccount(tt.Ctx, "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"). IncludeFailed() - _, _, err = query.Fetch() + _, _, err = query.Fetch(tt.Ctx) tt.Assert.Error(err) tt.Assert.Contains(err.Error(), "Corrupted data! `successful=true` but returned transaction is not success") } @@ -245,10 +245,10 @@ func TestExtraChecksOperationsTransactionSuccessfulFalseResultTrue(t *testing.T) q := &Q{tt.HorizonSession()} query := q.Operations(). - ForAccount("GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON"). + ForAccount(tt.Ctx, "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON"). IncludeFailed() - _, _, err = query.Fetch() + _, _, err = query.Fetch(tt.Ctx) tt.Assert.Error(err) tt.Assert.Contains(err.Error(), "Corrupted data! `successful=false` but returned transaction is success") } @@ -271,9 +271,9 @@ func TestOperationIncludeTransactions(t *testing.T) { q := &Q{tt.HorizonSession()} query := q.Operations(). IncludeTransactions(). - ForAccount(accountID) + ForAccount(tt.Ctx, accountID) - operations, transactions, err := query.Fetch() + operations, transactions, err := query.Fetch(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Len(transactions, 3) tt.Assert.Len(transactions, len(operations)) @@ -285,27 +285,27 @@ func TestOperationIncludeTransactions(t *testing.T) { } withoutTransactionsQuery := (&Q{tt.HorizonSession()}).Operations(). - ForAccount(accountID) + ForAccount(tt.Ctx, accountID) var expectedTransactions []Transaction - err = (&Q{tt.HorizonSession()}).Transactions().ForAccount(accountID).Select(&expectedTransactions) + err = (&Q{tt.HorizonSession()}).Transactions().ForAccount(tt.Ctx, accountID).Select(tt.Ctx, &expectedTransactions) tt.Assert.NoError(err) - expectedOperations, _, err := withoutTransactionsQuery.Fetch() + expectedOperations, _, err := withoutTransactionsQuery.Fetch(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Equal(operations, expectedOperations) tt.Assert.Equal(transactions, expectedTransactions) - op, transaction, err := q.OperationByID(true, expectedOperations[0].ID) + op, transaction, err := q.OperationByID(tt.Ctx, true, expectedOperations[0].ID) tt.Assert.NoError(err) tt.Assert.Equal(op, expectedOperations[0]) tt.Assert.Equal(*transaction, expectedTransactions[0]) assertOperationMatchesTransaction(tt, op, *transaction) - _, err = q.Exec(sq.Delete("history_transactions")) + _, err = q.Exec(tt.Ctx, sq.Delete("history_transactions")) tt.Assert.NoError(err) - _, _, err = q.OperationByID(true, 17179877377) + _, _, err = q.OperationByID(tt.Ctx, true, 17179877377) tt.Assert.Error(err) } @@ -329,13 +329,13 @@ func TestValidateTransactionForOperation(t *testing.T) { q := &Q{tt.HorizonSession()} query := q.Operations(). IncludeTransactions(). - ForAccount(accountID) + ForAccount(tt.Ctx, accountID) - _, _, err := query.Fetch() + _, _, err := query.Fetch(tt.Ctx) tt.Assert.Error(err) tt.Assert.EqualError(err, "transaction with id 17179877376 could not be found") - _, _, err = q.OperationByID(true, 17179877377) + _, _, err = q.OperationByID(tt.Ctx, true, 17179877377) tt.Assert.Error(err) tt.Assert.EqualError(err, "transaction id 0 does not match transaction id in operation 17179877376") @@ -346,13 +346,13 @@ func TestValidateTransactionForOperation(t *testing.T) { From("history_transactions ht") query = q.Operations(). IncludeTransactions(). - ForAccount(accountID) + ForAccount(tt.Ctx, accountID) - _, _, err = query.Fetch() + _, _, err = query.Fetch(tt.Ctx) tt.Assert.Error(err) tt.Assert.EqualError(err, "transaction result does not match transaction result in operation AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=") - _, _, err = q.OperationByID(true, 17179877377) + _, _, err = q.OperationByID(tt.Ctx, true, 17179877377) tt.Assert.Error(err) tt.Assert.EqualError(err, "transaction result does not match transaction result in operation AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=") @@ -363,13 +363,13 @@ func TestValidateTransactionForOperation(t *testing.T) { From("history_transactions ht") query = q.Operations(). IncludeTransactions(). - ForAccount(accountID) + ForAccount(tt.Ctx, accountID) - _, _, err = query.Fetch() + _, _, err = query.Fetch(tt.Ctx) tt.Assert.Error(err) tt.Assert.EqualError(err, "transaction hash does not match transaction hash in operation 1c454630267aa8767ec8c8e30450cea6ba660145e9c924abb75d7a6669b6c28a") - _, _, err = q.OperationByID(true, 17179877377) + _, _, err = q.OperationByID(tt.Ctx, true, 17179877377) tt.Assert.Error(err) tt.Assert.EqualError(err, "transaction hash does not match transaction hash in operation 1c454630267aa8767ec8c8e30450cea6ba660145e9c924abb75d7a6669b6c28a") @@ -380,13 +380,13 @@ func TestValidateTransactionForOperation(t *testing.T) { From("history_transactions ht") query = q.Operations(). IncludeTransactions(). - ForAccount(accountID) + ForAccount(tt.Ctx, accountID) - _, _, err = query.Fetch() + _, _, err = query.Fetch(tt.Ctx) tt.Assert.Error(err) tt.Assert.EqualError(err, "transaction successful flag false does not match transaction successful flag in operation true") - _, _, err = q.OperationByID(true, 17179877377) + _, _, err = q.OperationByID(tt.Ctx, true, 17179877377) tt.Assert.Error(err) tt.Assert.EqualError(err, "transaction successful flag false does not match transaction successful flag in operation true") } diff --git a/services/horizon/internal/db2/history/orderbook.go b/services/horizon/internal/db2/history/orderbook.go index cfa96c418e..3de321a4ac 100644 --- a/services/horizon/internal/db2/history/orderbook.go +++ b/services/horizon/internal/db2/history/orderbook.go @@ -1,10 +1,12 @@ package history import ( + "context" "database/sql" - "github.com/stellar/go/amount" "math/big" + "github.com/stellar/go/amount" + "github.com/stellar/go/support/db" "github.com/stellar/go/support/errors" "github.com/stellar/go/xdr" ) @@ -40,7 +42,7 @@ type OrderBookSummary struct { // GetOrderBookSummary returns an OrderBookSummary for a given trading pair. // GetOrderBookSummary should only be called in a repeatable read transaction. -func (q *Q) GetOrderBookSummary(sellingAsset, buyingAsset xdr.Asset, maxPriceLevels int) (OrderBookSummary, error) { +func (q *Q) GetOrderBookSummary(ctx context.Context, sellingAsset, buyingAsset xdr.Asset, maxPriceLevels int) (OrderBookSummary, error) { var result OrderBookSummary if tx := q.GetTx(); tx == nil { @@ -100,12 +102,14 @@ func (q *Q) GetOrderBookSummary(sellingAsset, buyingAsset xdr.Asset, maxPriceLev LIMIT $3 ) ` - err = q.SelectRaw(&levels, selectPriceLevels, selling, buying, maxPriceLevels) + // Add explicit query type for prometheus metrics, since we use raw sql. + ctx = context.WithValue(ctx, &db.QueryTypeContextKey, db.SelectQueryType) + err = q.SelectRaw(ctx, &levels, selectPriceLevels, selling, buying, maxPriceLevels) if err != nil { return result, errors.Wrap(err, "cannot select price levels") } - err = q.SelectRaw(&offers, selectOfferSummaries, selling, buying, maxPriceLevels) + err = q.SelectRaw(ctx, &offers, selectOfferSummaries, selling, buying, maxPriceLevels) if err != nil { return result, errors.Wrap(err, "cannot select offer summaries") } diff --git a/services/horizon/internal/db2/history/orderbook_test.go b/services/horizon/internal/db2/history/orderbook_test.go index 004e4d6a27..4d4d35e6da 100644 --- a/services/horizon/internal/db2/history/orderbook_test.go +++ b/services/horizon/internal/db2/history/orderbook_test.go @@ -15,13 +15,13 @@ func TestGetOrderBookSummaryRequiresTransaction(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - _, err := q.GetOrderBookSummary(nativeAsset, eurAsset, 10) + _, err := q.GetOrderBookSummary(tt.Ctx, nativeAsset, eurAsset, 10) assert.EqualError(t, err, "cannot be called outside of a transaction") - assert.NoError(t, q.Begin()) - defer q.Rollback() + assert.NoError(t, q.Begin(tt.Ctx)) + defer q.Rollback(tt.Ctx) - _, err = q.GetOrderBookSummary(nativeAsset, eurAsset, 10) + _, err = q.GetOrderBookSummary(tt.Ctx, nativeAsset, eurAsset, 10) assert.EqualError(t, err, "should only be called in a repeatable read transaction") } @@ -212,21 +212,21 @@ func TestGetOrderBookSummary(t *testing.T) { }, } { t.Run(testCase.name, func(t *testing.T) { - assert.NoError(t, q.TruncateTables([]string{"offers"})) + assert.NoError(t, q.TruncateTables(tt.Ctx, []string{"offers"})) batch := q.NewOffersBatchInsertBuilder(0) for _, offer := range testCase.offers { - assert.NoError(t, batch.Add(offer)) + assert.NoError(t, batch.Add(tt.Ctx, offer)) } - assert.NoError(t, batch.Exec()) + assert.NoError(t, batch.Exec(tt.Ctx)) - assert.NoError(t, q.BeginTx(&sql.TxOptions{ + assert.NoError(t, q.BeginTx(tt.Ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, })) - defer q.Rollback() + defer q.Rollback(tt.Ctx) - result, err := q.GetOrderBookSummary(nativeAsset, eurAsset, testCase.limit) + result, err := q.GetOrderBookSummary(tt.Ctx, nativeAsset, eurAsset, testCase.limit) assert.NoError(t, err) assert.Equal(t, testCase.expected, result) }) @@ -262,54 +262,54 @@ func TestGetOrderBookSummaryExcludesRemovedOffers(t *testing.T) { batch := q.NewOffersBatchInsertBuilder(0) for _, offer := range offers { - assert.NoError(t, batch.Add(offer)) + assert.NoError(t, batch.Add(tt.Ctx, offer)) } - assert.NoError(t, batch.Exec()) + assert.NoError(t, batch.Exec(tt.Ctx)) - assert.NoError(t, q.BeginTx(&sql.TxOptions{ + assert.NoError(t, q.BeginTx(tt.Ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, })) - result, err := q.GetOrderBookSummary(nativeAsset, eurAsset, 100) + result, err := q.GetOrderBookSummary(tt.Ctx, nativeAsset, eurAsset, 100) assert.NoError(t, err) assert.Len(t, result.Asks, 2) assert.Len(t, result.Bids, 1) - assert.NoError(t, q.Rollback()) + assert.NoError(t, q.Rollback(tt.Ctx)) for i, offer := range offers { var count int64 - count, err = q.RemoveOffers([]int64{offer.OfferID}, uint32(i+2)) + count, err = q.RemoveOffers(tt.Ctx, []int64{offer.OfferID}, uint32(i+2)) assert.NoError(t, err) assert.Equal(t, int64(1), count) } - assert.NoError(t, q.BeginTx(&sql.TxOptions{ + assert.NoError(t, q.BeginTx(tt.Ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, })) - result, err = q.GetOrderBookSummary(nativeAsset, eurAsset, 100) + result, err = q.GetOrderBookSummary(tt.Ctx, nativeAsset, eurAsset, 100) assert.NoError(t, err) assert.Len(t, result.Asks, 0) assert.Len(t, result.Bids, 0) - assert.NoError(t, q.Rollback()) + assert.NoError(t, q.Rollback(tt.Ctx)) - count, err := q.CompactOffers(1000) + count, err := q.CompactOffers(tt.Ctx, 1000) assert.NoError(t, err) assert.Equal(t, int64(len(offers)), count) - assert.NoError(t, q.BeginTx(&sql.TxOptions{ + assert.NoError(t, q.BeginTx(tt.Ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, })) - result, err = q.GetOrderBookSummary(nativeAsset, eurAsset, 100) + result, err = q.GetOrderBookSummary(tt.Ctx, nativeAsset, eurAsset, 100) assert.NoError(t, err) assert.Len(t, result.Asks, 0) assert.Len(t, result.Bids, 0) - assert.NoError(t, q.Rollback()) + assert.NoError(t, q.Rollback(tt.Ctx)) } diff --git a/services/horizon/internal/db2/history/participants.go b/services/horizon/internal/db2/history/participants.go index 462ffda2da..658e877f78 100644 --- a/services/horizon/internal/db2/history/participants.go +++ b/services/horizon/internal/db2/history/participants.go @@ -1,6 +1,8 @@ package history import ( + "context" + "github.com/stellar/go/support/db" ) @@ -14,8 +16,8 @@ type QParticipants interface { // TransactionParticipantsBatchInsertBuilder is used to insert transaction participants into the // history_transaction_participants table type TransactionParticipantsBatchInsertBuilder interface { - Add(transactionID, accountID int64) error - Exec() error + Add(ctx context.Context, transactionID, accountID int64) error + Exec(ctx context.Context) error } type transactionParticipantsBatchInsertBuilder struct { @@ -33,14 +35,14 @@ func (q *Q) NewTransactionParticipantsBatchInsertBuilder(maxBatchSize int) Trans } // Add adds a new transaction participant to the batch -func (i *transactionParticipantsBatchInsertBuilder) Add(transactionID, accountID int64) error { - return i.builder.Row(map[string]interface{}{ +func (i *transactionParticipantsBatchInsertBuilder) Add(ctx context.Context, transactionID, accountID int64) error { + return i.builder.Row(ctx, map[string]interface{}{ "history_transaction_id": transactionID, "history_account_id": accountID, }) } // Exec flushes all pending transaction participants to the db -func (i *transactionParticipantsBatchInsertBuilder) Exec() error { - return i.builder.Exec() +func (i *transactionParticipantsBatchInsertBuilder) Exec(ctx context.Context) error { + return i.builder.Exec(ctx) } diff --git a/services/horizon/internal/db2/history/participants_test.go b/services/horizon/internal/db2/history/participants_test.go index 1c656ef883..ee37f2b833 100644 --- a/services/horizon/internal/db2/history/participants_test.go +++ b/services/horizon/internal/db2/history/participants_test.go @@ -18,7 +18,7 @@ func getTransactionParticipants(tt *test.T, q *Q) []transactionParticipant { From("history_transaction_participants"). OrderBy("(history_transaction_id, history_account_id) asc") - err := q.Select(&participants, sql) + err := q.Select(tt.Ctx, &participants, sql) if err != nil { tt.T.Fatal(err) } @@ -39,11 +39,11 @@ func TestTransactionParticipantsBatch(t *testing.T) { accountID := int64(100) for i := int64(0); i < 3; i++ { - tt.Assert.NoError(batch.Add(transactionID, accountID+i)) + tt.Assert.NoError(batch.Add(tt.Ctx, transactionID, accountID+i)) } - tt.Assert.NoError(batch.Add(otherTransactionID, accountID)) - tt.Assert.NoError(batch.Exec()) + tt.Assert.NoError(batch.Add(tt.Ctx, otherTransactionID, accountID)) + tt.Assert.NoError(batch.Exec(tt.Ctx)) participants := getTransactionParticipants(tt, q) tt.Assert.Equal( diff --git a/services/horizon/internal/db2/history/sequence_provider.go b/services/horizon/internal/db2/history/sequence_provider.go index ac26053480..97f53e9253 100644 --- a/services/horizon/internal/db2/history/sequence_provider.go +++ b/services/horizon/internal/db2/history/sequence_provider.go @@ -1,16 +1,18 @@ package history import ( + "context" + sq "github.com/Masterminds/squirrel" "github.com/stellar/go/support/errors" ) -func (q *Q) GetSequenceNumbers(addresses []string) (map[string]uint64, error) { +func (q *Q) GetSequenceNumbers(ctx context.Context, addresses []string) (map[string]uint64, error) { var accounts []AccountEntry sql := sq.Select("account_id, sequence_number").From("accounts"). Where(map[string]interface{}{"accounts.account_id": addresses}) - if err := q.Select(&accounts, sql); err != nil { + if err := q.Select(ctx, &accounts, sql); err != nil { return nil, errors.Wrap(err, "could not query accounts") } diff --git a/services/horizon/internal/db2/history/sequence_provider_test.go b/services/horizon/internal/db2/history/sequence_provider_test.go index f56054cae1..5ed67d7731 100644 --- a/services/horizon/internal/db2/history/sequence_provider_test.go +++ b/services/horizon/internal/db2/history/sequence_provider_test.go @@ -17,7 +17,7 @@ func TestSequenceProviderEmptyDB(t *testing.T) { "GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB", "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", } - results, err := q.GetSequenceNumbers(addresses) + results, err := q.GetSequenceNumbers(tt.Ctx, addresses) assert.NoError(t, err) assert.Len(t, results, 0) } @@ -29,13 +29,13 @@ func TestSequenceProviderGet(t *testing.T) { q := &Q{tt.HorizonSession()} batch := q.NewAccountsBatchInsertBuilder(0) - err := batch.Add(account1) + err := batch.Add(tt.Ctx, account1) assert.NoError(t, err) - err = batch.Add(account2) + err = batch.Add(tt.Ctx, account2) assert.NoError(t, err) - assert.NoError(t, batch.Exec()) + assert.NoError(t, batch.Exec(tt.Ctx)) - results, err := q.GetSequenceNumbers([]string{ + results, err := q.GetSequenceNumbers(tt.Ctx, []string{ "GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB", "GCT2NQM5KJJEF55NPMY444C6M6CA7T33HRNCMA6ZFBIIXKNCRO6J25K7", "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", diff --git a/services/horizon/internal/db2/history/trade.go b/services/horizon/internal/db2/history/trade.go index d034072087..2cf66cd312 100644 --- a/services/horizon/internal/db2/history/trade.go +++ b/services/horizon/internal/db2/history/trade.go @@ -1,12 +1,14 @@ package history import ( + "context" "fmt" "math" sq "github.com/Masterminds/squirrel" "github.com/stellar/go/services/horizon/internal/db2" + "github.com/stellar/go/support/db" "github.com/stellar/go/support/errors" "github.com/stellar/go/xdr" ) @@ -77,9 +79,9 @@ func (q *TradesQ) forAssetPair(baseAssetId int64, counterAssetId int64) *TradesQ } // ForAccount filter Trades by account id -func (q *TradesQ) ForAccount(aid string) *TradesQ { +func (q *TradesQ) ForAccount(ctx context.Context, aid string) *TradesQ { var account Account - q.Err = q.parent.AccountByAddress(&account, aid) + q.Err = q.parent.AccountByAddress(ctx, &account, aid) if q.Err != nil { return q } @@ -89,7 +91,7 @@ func (q *TradesQ) ForAccount(aid string) *TradesQ { } // Page specifies the paging constraints for the query being built by `q`. -func (q *TradesQ) Page(page db2.PageQuery) *TradesQ { +func (q *TradesQ) Page(ctx context.Context, page db2.PageQuery) *TradesQ { if q.Err != nil { return q } @@ -119,8 +121,8 @@ func (q *TradesQ) Page(page db2.PageQuery) *TradesQ { secondSelect = q.sql.Where("htrd.counter_offer_id = ?", q.forOfferID) } - firstSelect = q.appendOrdering(firstSelect, op, idx, page.Order) - secondSelect = q.appendOrdering(secondSelect, op, idx, page.Order) + firstSelect = q.appendOrdering(ctx, firstSelect, op, idx, page.Order) + secondSelect = q.appendOrdering(ctx, secondSelect, op, idx, page.Order) firstSQL, firstArgs, err := firstSelect.ToSql() if err != nil { @@ -149,13 +151,13 @@ func (q *TradesQ) Page(page db2.PageQuery) *TradesQ { // Reset sql so it's not used accidentally q.sql = sq.SelectBuilder{} } else { - q.sql = q.appendOrdering(q.sql, op, idx, page.Order) + q.sql = q.appendOrdering(ctx, q.sql, op, idx, page.Order) q.sql = q.sql.Limit(page.Limit) } return q } -func (q *TradesQ) appendOrdering(sel sq.SelectBuilder, op, idx int64, order string) sq.SelectBuilder { +func (q *TradesQ) appendOrdering(ctx context.Context, sel sq.SelectBuilder, op, idx int64, order string) sq.SelectBuilder { // NOTE: Remember to test the queries below with EXPLAIN / EXPLAIN ANALYZE // before changing them. // This condition is using multicolumn index and it's easy to write it in a way that @@ -185,7 +187,7 @@ func (q *TradesQ) appendOrdering(sel sq.SelectBuilder, op, idx int64, order stri } // Select loads the results of the query specified by `q` into `dest`. -func (q *TradesQ) Select(dest interface{}) error { +func (q *TradesQ) Select(ctx context.Context, dest interface{}) error { if q.Err != nil { return q.Err } @@ -194,10 +196,12 @@ func (q *TradesQ) Select(dest interface{}) error { return errors.New("TradesQ.Page call is required before calling Select") } + // Add explicit query type for prometheus metrics, since we use raw sql. + ctx = context.WithValue(ctx, &db.QueryTypeContextKey, db.SelectQueryType) if q.rawSQL != "" { - q.Err = q.parent.SelectRaw(dest, q.rawSQL, q.rawArgs...) + q.Err = q.parent.SelectRaw(ctx, dest, q.rawSQL, q.rawArgs...) } else { - q.Err = q.parent.Select(dest, q.sql) + q.Err = q.parent.Select(ctx, dest, q.sql) } return q.Err } @@ -269,5 +273,5 @@ func getCanonicalAssetOrder(assetId1 int64, assetId2 int64) (orderPreserved bool type QTrades interface { QCreateAccountsHistory NewTradeBatchInsertBuilder(maxBatchSize int) TradeBatchInsertBuilder - CreateAssets(assets []xdr.Asset, maxBatchSize int) (map[string]Asset, error) + CreateAssets(ctx context.Context, assets []xdr.Asset, maxBatchSize int) (map[string]Asset, error) } diff --git a/services/horizon/internal/db2/history/trade_batch_insert_builder.go b/services/horizon/internal/db2/history/trade_batch_insert_builder.go index f017ab7874..5c47082e8d 100644 --- a/services/horizon/internal/db2/history/trade_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/trade_batch_insert_builder.go @@ -1,6 +1,7 @@ package history import ( + "context" "time" "github.com/stellar/go/support/db" @@ -27,8 +28,8 @@ type InsertTrade struct { // TradeBatchInsertBuilder is used to insert trades into the // history_trades table type TradeBatchInsertBuilder interface { - Add(entries ...InsertTrade) error - Exec() error + Add(ctx context.Context, entries ...InsertTrade) error + Exec(ctx context.Context) error } // tradeBatchInsertBuilder is a simple wrapper around db.BatchInsertBuilder @@ -47,12 +48,12 @@ func (q *Q) NewTradeBatchInsertBuilder(maxBatchSize int) TradeBatchInsertBuilder } // Exec flushes all outstanding trades to the database -func (i *tradeBatchInsertBuilder) Exec() error { - return i.builder.Exec() +func (i *tradeBatchInsertBuilder) Exec(ctx context.Context) error { + return i.builder.Exec(ctx) } // Add adds a new trade to the batch -func (i *tradeBatchInsertBuilder) Add(entries ...InsertTrade) error { +func (i *tradeBatchInsertBuilder) Add(ctx context.Context, entries ...InsertTrade) error { for _, entry := range entries { sellOfferID := EncodeOfferId(uint64(entry.Trade.OfferId), CoreOfferIDType) @@ -90,7 +91,7 @@ func (i *tradeBatchInsertBuilder) Add(entries ...InsertTrade) error { entry.SellPrice.Invert() } - err := i.builder.Row(map[string]interface{}{ + err := i.builder.Row(ctx, map[string]interface{}{ "history_operation_id": entry.HistoryOperationID, "\"order\"": entry.Order, "ledger_closed_at": entry.LedgerCloseTime, diff --git a/services/horizon/internal/db2/history/trade_test.go b/services/horizon/internal/db2/history/trade_test.go index 591fbe2e3f..8d1cefb354 100644 --- a/services/horizon/internal/db2/history/trade_test.go +++ b/services/horizon/internal/db2/history/trade_test.go @@ -20,7 +20,7 @@ func TestTradeQueries(t *testing.T) { var trades []Trade // All trades - err := q.Trades().Page(db2.MustPageQuery("", false, "asc", 100)).Select(&trades) + err := q.Trades().Page(tt.Ctx, db2.MustPageQuery("", false, "asc", 100)).Select(tt.Ctx, &trades) if tt.Assert.NoError(err) { tt.Assert.Len(trades, 4) } @@ -29,7 +29,7 @@ func TestTradeQueries(t *testing.T) { pq := db2.MustPageQuery(trades[0].PagingToken(), false, "asc", 1) var pt []Trade - err = q.Trades().Page(pq).Select(&pt) + err = q.Trades().Page(tt.Ctx, pq).Select(tt.Ctx, &pt) if tt.Assert.NoError(err) { if tt.Assert.Len(pt, 1) { tt.Assert.Equal(trades[1], pt[0]) @@ -38,25 +38,25 @@ func TestTradeQueries(t *testing.T) { // Cursor bounds checking pq = db2.MustPageQuery("", false, "desc", 1) - err = q.Trades().Page(pq).Select(&pt) + err = q.Trades().Page(tt.Ctx, pq).Select(tt.Ctx, &pt) tt.Require.NoError(err) // test for asset pairs - lumen, err := q.GetAssetID(xdr.MustNewNativeAsset()) + lumen, err := q.GetAssetID(tt.Ctx, xdr.MustNewNativeAsset()) tt.Require.NoError(err) - assetUSD, err := q.GetAssetID(xdr.MustNewCreditAsset("USD", "GB2QIYT2IAUFMRXKLSLLPRECC6OCOGJMADSPTRK7TGNT2SFR2YGWDARD")) + assetUSD, err := q.GetAssetID(tt.Ctx, xdr.MustNewCreditAsset("USD", "GB2QIYT2IAUFMRXKLSLLPRECC6OCOGJMADSPTRK7TGNT2SFR2YGWDARD")) tt.Require.NoError(err) - assetEUR, err := q.GetAssetID(xdr.MustNewCreditAsset("EUR", "GAXMF43TGZHW3QN3REOUA2U5PW5BTARXGGYJ3JIFHW3YT6QRKRL3CPPU")) + assetEUR, err := q.GetAssetID(tt.Ctx, xdr.MustNewCreditAsset("EUR", "GAXMF43TGZHW3QN3REOUA2U5PW5BTARXGGYJ3JIFHW3YT6QRKRL3CPPU")) tt.Require.NoError(err) - err = q.TradesForAssetPair(assetUSD, assetEUR).Page(db2.MustPageQuery("", false, "asc", 100)).Select(&trades) + err = q.TradesForAssetPair(assetUSD, assetEUR).Page(tt.Ctx, db2.MustPageQuery("", false, "asc", 100)).Select(tt.Ctx, &trades) tt.Require.NoError(err) tt.Assert.Len(trades, 0) - assetUSD, err = q.GetAssetID(xdr.MustNewCreditAsset("USD", "GAXMF43TGZHW3QN3REOUA2U5PW5BTARXGGYJ3JIFHW3YT6QRKRL3CPPU")) + assetUSD, err = q.GetAssetID(tt.Ctx, xdr.MustNewCreditAsset("USD", "GAXMF43TGZHW3QN3REOUA2U5PW5BTARXGGYJ3JIFHW3YT6QRKRL3CPPU")) tt.Require.NoError(err) - err = q.TradesForAssetPair(lumen, assetUSD).Page(db2.MustPageQuery("", false, "asc", 100)).Select(&trades) + err = q.TradesForAssetPair(lumen, assetUSD).Page(tt.Ctx, db2.MustPageQuery("", false, "asc", 100)).Select(tt.Ctx, &trades) tt.Require.NoError(err) tt.Assert.Len(trades, 1) @@ -65,7 +65,7 @@ func TestTradeQueries(t *testing.T) { tt.Assert.Equal(true, trades[0].BaseIsSeller) // reverse assets - err = q.TradesForAssetPair(assetUSD, lumen).Page(db2.MustPageQuery("", false, "asc", 100)).Select(&trades) + err = q.TradesForAssetPair(assetUSD, lumen).Page(tt.Ctx, db2.MustPageQuery("", false, "asc", 100)).Select(tt.Ctx, &trades) tt.Require.NoError(err) tt.Assert.Len(trades, 1) @@ -130,7 +130,7 @@ func createInsertTrades( func createAccountsAndAssets( tt *test.T, q *Q, accounts []string, assets []xdr.Asset, ) ([]int64, []int64) { - addressToAccounts, err := q.CreateAccounts(accounts, 2) + addressToAccounts, err := q.CreateAccounts(tt.Ctx, accounts, 2) tt.Assert.NoError(err) accountIDs := []int64{} @@ -138,7 +138,7 @@ func createAccountsAndAssets( accountIDs = append(accountIDs, addressToAccounts[account]) } - assetMap, err := q.CreateAssets(assets, 2) + assetMap, err := q.CreateAssets(tt.Ctx, assets, 2) tt.Assert.NoError(err) assetIDs := []int64{} @@ -195,12 +195,12 @@ func TestBatchInsertTrade(t *testing.T) { builder := q.NewTradeBatchInsertBuilder(1) tt.Assert.NoError( - builder.Add(first, second, third), + builder.Add(tt.Ctx, first, second, third), ) - tt.Assert.NoError(builder.Exec()) + tt.Assert.NoError(builder.Exec(tt.Ctx)) var rows []Trade - tt.Assert.NoError(q.Trades().Page(db2.MustPageQuery("", false, "asc", 100)).Select(&rows)) + tt.Assert.NoError(q.Trades().Page(tt.Ctx, db2.MustPageQuery("", false, "asc", 100)).Select(tt.Ctx, &rows)) idToAccount := buildIDtoAccountMapping(addresses, accountIDs) idToAsset := buildIDtoAssetMapping(assets, assetIDs) @@ -324,11 +324,11 @@ func TestTradesQueryForAccount(t *testing.T) { var trades []Trade account := "GAXMF43TGZHW3QN3REOUA2U5PW5BTARXGGYJ3JIFHW3YT6QRKRL3CPPU" - tradesQ.ForAccount(account) + tradesQ.ForAccount(tt.Ctx, account) tt.Assert.Equal(int64(15), tradesQ.forAccountID) tt.Assert.Equal(int64(0), tradesQ.forOfferID) - tradesQ.Page(db2.MustPageQuery("", false, "desc", 100)) + tradesQ.Page(tt.Ctx, db2.MustPageQuery("", false, "desc", 100)) _, _, err := tradesQ.sql.ToSql() // q.sql was reset in Page so should return error tt.Assert.EqualError(err, "select statements must have at least one result column") @@ -346,7 +346,7 @@ func TestTradesQueryForAccount(t *testing.T) { )) ORDER BY htrd.history_operation_id desc, htrd.order desc) ORDER BY history_operation_id desc, "order" desc LIMIT 100` tt.Assert.Equal(expectedRawSQL, tradesQ.rawSQL) - err = tradesQ.Select(&trades) + err = tradesQ.Select(tt.Ctx, &trades) tt.Assert.NoError(err) tt.Assert.Len(trades, 3) @@ -376,7 +376,7 @@ func TestTradesQueryForOffer(t *testing.T) { tt.Assert.Equal(int64(0), tradesQ.forAccountID) tt.Assert.Equal(int64(2), tradesQ.forOfferID) - tradesQ.Page(db2.MustPageQuery("", false, "asc", 100)) + tradesQ.Page(tt.Ctx, db2.MustPageQuery("", false, "asc", 100)) _, _, err := tradesQ.sql.ToSql() // q.sql was reset in Page so should return error tt.Assert.EqualError(err, "select statements must have at least one result column") @@ -394,7 +394,7 @@ func TestTradesQueryForOffer(t *testing.T) { )) ORDER BY htrd.history_operation_id asc, htrd.order asc) ORDER BY history_operation_id asc, "order" asc LIMIT 100` tt.Assert.Equal(expectedRawSQL, tradesQ.rawSQL) - err = tradesQ.Select(&trades) + err = tradesQ.Select(tt.Ctx, &trades) tt.Assert.NoError(err) tt.Assert.Len(trades, 2) diff --git a/services/horizon/internal/db2/history/transaction.go b/services/horizon/internal/db2/history/transaction.go index 63075488c7..d538ad20ab 100644 --- a/services/horizon/internal/db2/history/transaction.go +++ b/services/horizon/internal/db2/history/transaction.go @@ -1,7 +1,10 @@ package history import ( + "context" + sq "github.com/Masterminds/squirrel" + "github.com/stellar/go/services/horizon/internal/db2" "github.com/stellar/go/services/horizon/internal/toid" "github.com/stellar/go/support/errors" @@ -10,7 +13,7 @@ import ( // TransactionByHash is a query that loads a single row from the // `history_transactions` table based upon the provided hash. -func (q *Q) TransactionByHash(dest interface{}, hash string) error { +func (q *Q) TransactionByHash(ctx context.Context, dest interface{}, hash string) error { byHash := selectTransaction. Where("ht.transaction_hash = ?", hash) byInnerHash := selectTransaction. @@ -22,12 +25,12 @@ func (q *Q) TransactionByHash(dest interface{}, hash string) error { } union := byHash.Suffix("UNION ALL "+byInnerHashString, args...) - return q.Get(dest, union) + return q.Get(ctx, dest, union) } // TransactionsByIDs fetches transactions from the `history_transactions` table // which match the given ids -func (q *Q) TransactionsByIDs(ids ...int64) (map[int64]Transaction, error) { +func (q *Q) TransactionsByIDs(ctx context.Context, ids ...int64) (map[int64]Transaction, error) { if len(ids) == 0 { return nil, errors.New("no id arguments provided") } @@ -37,7 +40,7 @@ func (q *Q) TransactionsByIDs(ids ...int64) (map[int64]Transaction, error) { }) var transactions []Transaction - if err := q.Select(&transactions, sql); err != nil { + if err := q.Select(ctx, &transactions, sql); err != nil { return nil, err } @@ -61,9 +64,9 @@ func (q *Q) Transactions() *TransactionsQ { } // ForAccount filters the transactions collection to a specific account -func (q *TransactionsQ) ForAccount(aid string) *TransactionsQ { +func (q *TransactionsQ) ForAccount(ctx context.Context, aid string) *TransactionsQ { var account Account - q.Err = q.parent.AccountByAddress(&account, aid) + q.Err = q.parent.AccountByAddress(ctx, &account, aid) if q.Err != nil { return q } @@ -76,10 +79,10 @@ func (q *TransactionsQ) ForAccount(aid string) *TransactionsQ { } // ForClaimableBalance filters the transactions collection to a specific claimable balance -func (q *TransactionsQ) ForClaimableBalance(cbID xdr.ClaimableBalanceId) *TransactionsQ { +func (q *TransactionsQ) ForClaimableBalance(ctx context.Context, cbID xdr.ClaimableBalanceId) *TransactionsQ { var hCB HistoryClaimableBalance - hCB, q.Err = q.parent.ClaimableBalanceByID(cbID) + hCB, q.Err = q.parent.ClaimableBalanceByID(ctx, cbID) if q.Err != nil { return q } @@ -93,9 +96,9 @@ func (q *TransactionsQ) ForClaimableBalance(cbID xdr.ClaimableBalanceId) *Transa // ForLedger filters the query to a only transactions in a specific ledger, // specified by its sequence. -func (q *TransactionsQ) ForLedger(seq int32) *TransactionsQ { +func (q *TransactionsQ) ForLedger(ctx context.Context, seq int32) *TransactionsQ { var ledger Ledger - q.Err = q.parent.LedgerBySequence(&ledger, seq) + q.Err = q.parent.LedgerBySequence(ctx, &ledger, seq) if q.Err != nil { return q } @@ -128,7 +131,7 @@ func (q *TransactionsQ) Page(page db2.PageQuery) *TransactionsQ { } // Select loads the results of the query specified by `q` into `dest`. -func (q *TransactionsQ) Select(dest interface{}) error { +func (q *TransactionsQ) Select(ctx context.Context, dest interface{}) error { if q.Err != nil { return q.Err } @@ -138,7 +141,7 @@ func (q *TransactionsQ) Select(dest interface{}) error { Where("(ht.successful = true OR ht.successful IS NULL)") } - q.Err = q.parent.Select(dest, q.sql) + q.Err = q.parent.Select(ctx, dest, q.sql) if q.Err != nil { return q.Err } @@ -189,6 +192,7 @@ var selectTransaction = sq.Select( "ht.ledger_sequence, " + "ht.application_order, " + "ht.account, " + + "ht.account_muxed, " + "ht.account_sequence, " + "ht.max_fee, " + // `fee_charged` is NULL by default, DB needs to be reingested @@ -209,6 +213,7 @@ var selectTransaction = sq.Select( "hl.closed_at AS ledger_close_time, " + "ht.inner_transaction_hash, " + "ht.fee_account, " + + "ht.fee_account_muxed, " + "ht.new_max_fee, " + "ht.inner_signatures"). From("history_transactions ht"). diff --git a/services/horizon/internal/db2/history/transaction_batch_insert_builder.go b/services/horizon/internal/db2/history/transaction_batch_insert_builder.go index 256f4a59fa..2e2f736df8 100644 --- a/services/horizon/internal/db2/history/transaction_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/transaction_batch_insert_builder.go @@ -1,6 +1,7 @@ package history import ( + "context" "database/sql/driver" "encoding/base64" "encoding/hex" @@ -24,8 +25,8 @@ import ( // TransactionBatchInsertBuilder is used to insert transactions into the // history_transactions table type TransactionBatchInsertBuilder interface { - Add(transaction ingest.LedgerTransaction, sequence uint32) error - Exec() error + Add(ctx context.Context, transaction ingest.LedgerTransaction, sequence uint32) error + Exec(ctx context.Context) error } // transactionBatchInsertBuilder is a simple wrapper around db.BatchInsertBuilder @@ -44,17 +45,17 @@ func (q *Q) NewTransactionBatchInsertBuilder(maxBatchSize int) TransactionBatchI } // Add adds a new transaction to the batch -func (i *transactionBatchInsertBuilder) Add(transaction ingest.LedgerTransaction, sequence uint32) error { +func (i *transactionBatchInsertBuilder) Add(ctx context.Context, transaction ingest.LedgerTransaction, sequence uint32) error { row, err := transactionToRow(transaction, sequence) if err != nil { return err } - return i.builder.RowStruct(row) + return i.builder.RowStruct(ctx, row) } -func (i *transactionBatchInsertBuilder) Exec() error { - return i.builder.Exec() +func (i *transactionBatchInsertBuilder) Exec(ctx context.Context) error { + return i.builder.Exec(ctx) } // TimeBounds represents the time bounds of a Stellar transaction @@ -205,6 +206,7 @@ type TransactionWithoutLedger struct { LedgerSequence int32 `db:"ledger_sequence"` ApplicationOrder int32 `db:"application_order"` Account string `db:"account"` + AccountMuxed null.String `db:"account_muxed"` AccountSequence string `db:"account_sequence"` MaxFee int64 `db:"max_fee"` FeeCharged int64 `db:"fee_charged"` @@ -221,6 +223,7 @@ type TransactionWithoutLedger struct { UpdatedAt time.Time `db:"updated_at"` Successful bool `db:"successful"` FeeAccount null.String `db:"fee_account"` + FeeAccountMuxed null.String `db:"fee_account_muxed"` InnerTransactionHash null.String `db:"inner_transaction_hash"` NewMaxFee null.Int `db:"new_max_fee"` InnerSignatures pq.StringArray `db:"inner_signatures"` @@ -235,7 +238,7 @@ func transactionToRow(transaction ingest.LedgerTransaction, sequence uint32) (Tr if err != nil { return TransactionWithoutLedger{}, err } - metaBase64, err := xdr.MarshalBase64(transaction.Meta) + metaBase64, err := xdr.MarshalBase64(transaction.UnsafeMeta) if err != nil { return TransactionWithoutLedger{}, err } @@ -244,12 +247,18 @@ func transactionToRow(transaction ingest.LedgerTransaction, sequence uint32) (Tr return TransactionWithoutLedger{}, err } - sourceAccount := transaction.Envelope.SourceAccount().ToAccountId() + source := transaction.Envelope.SourceAccount() + account := source.ToAccountId() + var accountMuxed null.String + if source.Type == xdr.CryptoKeyTypeKeyTypeMuxedEd25519 { + accountMuxed = null.StringFrom(source.Address()) + } t := TransactionWithoutLedger{ TransactionHash: hex.EncodeToString(transaction.Result.TransactionHash[:]), LedgerSequence: int32(sequence), ApplicationOrder: int32(transaction.Index), - Account: sourceAccount.Address(), + Account: account.Address(), + AccountMuxed: accountMuxed, AccountSequence: strconv.FormatInt(transaction.Envelope.SeqNum(), 10), MaxFee: int64(transaction.Envelope.Fee()), FeeCharged: int64(transaction.Result.Result.FeeCharged), @@ -270,14 +279,21 @@ func transactionToRow(transaction ingest.LedgerTransaction, sequence uint32) (Tr if transaction.Envelope.IsFeeBump() { innerHash := transaction.Result.InnerHash() t.InnerTransactionHash = null.StringFrom(hex.EncodeToString(innerHash[:])) - feeAccount := transaction.Envelope.FeeBumpAccount().ToAccountId() + feeBumpAccount := transaction.Envelope.FeeBumpAccount() + feeAccount := feeBumpAccount.ToAccountId() + var feeAccountMuxed null.String + if source.Type == xdr.CryptoKeyTypeKeyTypeMuxedEd25519 { + feeAccountMuxed = null.StringFrom(source.Address()) + } t.FeeAccount = null.StringFrom(feeAccount.Address()) + t.FeeAccountMuxed = feeAccountMuxed t.NewMaxFee = null.IntFrom(transaction.Envelope.FeeBumpFee()) t.InnerSignatures = signatures(transaction.Envelope.Signatures()) t.Signatures = signatures(transaction.Envelope.FeeBumpSignatures()) } else { t.InnerTransactionHash = null.StringFromPtr(nil) t.FeeAccount = null.StringFromPtr(nil) + t.FeeAccountMuxed = null.StringFromPtr(nil) t.NewMaxFee = null.IntFromPtr(nil) t.InnerSignatures = nil t.Signatures = signatures(transaction.Envelope.Signatures()) diff --git a/services/horizon/internal/db2/history/transaction_batch_insert_builder_test.go b/services/horizon/internal/db2/history/transaction_batch_insert_builder_test.go index b3125a7a7b..8043edb76c 100644 --- a/services/horizon/internal/db2/history/transaction_batch_insert_builder_test.go +++ b/services/horizon/internal/db2/history/transaction_batch_insert_builder_test.go @@ -75,7 +75,7 @@ func TestTransactionToMap_muxed(t *testing.T) { }, }, }, - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 1, Operations: &[]xdr.OperationMeta{}, V1: &xdr.TransactionMetaV1{ diff --git a/services/horizon/internal/db2/history/transaction_test.go b/services/horizon/internal/db2/history/transaction_test.go index 1ff437ad41..d887c33bfe 100644 --- a/services/horizon/internal/db2/history/transaction_test.go +++ b/services/horizon/internal/db2/history/transaction_test.go @@ -22,11 +22,11 @@ func TestTransactionQueries(t *testing.T) { // Test TransactionByHash var tx Transaction real := "2374e99349b9ef7dba9a5db3339b78fda8f34777b1af33ba468ad5c0df946d4d" - err := q.TransactionByHash(&tx, real) + err := q.TransactionByHash(tt.Ctx, &tx, real) tt.Assert.NoError(err) fake := "not_real" - err = q.TransactionByHash(&tx, fake) + err = q.TransactionByHash(tt.Ctx, &tx, fake) tt.Assert.Equal(err, sql.ErrNoRows) } @@ -43,9 +43,9 @@ func TestTransactionSuccessfulOnly(t *testing.T) { q := &Q{tt.HorizonSession()} query := q.Transactions(). - ForAccount("GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2") + ForAccount(tt.Ctx, "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2") - err := query.Select(&transactions) + err := query.Select(tt.Ctx, &transactions) tt.Assert.NoError(err) tt.Assert.Equal(3, len(transactions)) @@ -70,10 +70,10 @@ func TestTransactionIncludeFailed(t *testing.T) { q := &Q{tt.HorizonSession()} query := q.Transactions(). - ForAccount("GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"). + ForAccount(tt.Ctx, "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"). IncludeFailed() - err := query.Select(&transactions) + err := query.Select(tt.Ctx, &transactions) tt.Assert.NoError(err) var failed, successful int @@ -90,7 +90,7 @@ func TestTransactionIncludeFailed(t *testing.T) { sql, _, err := query.sql.ToSql() tt.Assert.NoError(err) - tt.Assert.Equal("SELECT ht.id, ht.transaction_hash, ht.ledger_sequence, ht.application_order, ht.account, ht.account_sequence, ht.max_fee, COALESCE(ht.fee_charged, ht.max_fee) as fee_charged, ht.operation_count, ht.tx_envelope, ht.tx_result, ht.tx_meta, ht.tx_fee_meta, ht.created_at, ht.updated_at, COALESCE(ht.successful, true) as successful, ht.signatures, ht.memo_type, ht.memo, time_bounds, hl.closed_at AS ledger_close_time, ht.inner_transaction_hash, ht.fee_account, ht.new_max_fee, ht.inner_signatures FROM history_transactions ht LEFT JOIN history_ledgers hl ON ht.ledger_sequence = hl.sequence JOIN history_transaction_participants htp ON htp.history_transaction_id = ht.id WHERE htp.history_account_id = ?", sql) + tt.Assert.Equal("SELECT ht.id, ht.transaction_hash, ht.ledger_sequence, ht.application_order, ht.account, ht.account_muxed, ht.account_sequence, ht.max_fee, COALESCE(ht.fee_charged, ht.max_fee) as fee_charged, ht.operation_count, ht.tx_envelope, ht.tx_result, ht.tx_meta, ht.tx_fee_meta, ht.created_at, ht.updated_at, COALESCE(ht.successful, true) as successful, ht.signatures, ht.memo_type, ht.memo, time_bounds, hl.closed_at AS ledger_close_time, ht.inner_transaction_hash, ht.fee_account, ht.fee_account_muxed, ht.new_max_fee, ht.inner_signatures FROM history_transactions ht LEFT JOIN history_ledgers hl ON ht.ledger_sequence = hl.sequence JOIN history_transaction_participants htp ON htp.history_transaction_id = ht.id WHERE htp.history_account_id = ?", sql) } func TestExtraChecksTransactionSuccessfulTrueResultFalse(t *testing.T) { @@ -108,10 +108,10 @@ func TestExtraChecksTransactionSuccessfulTrueResultFalse(t *testing.T) { q := &Q{tt.HorizonSession()} query := q.Transactions(). - ForAccount("GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"). + ForAccount(tt.Ctx, "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"). IncludeFailed() - err = query.Select(&transactions) + err = query.Select(tt.Ctx, &transactions) tt.Assert.Error(err) tt.Assert.Contains(err.Error(), "Corrupted data! `successful=true` but returned transaction is not success") } @@ -131,10 +131,10 @@ func TestExtraChecksTransactionSuccessfulFalseResultTrue(t *testing.T) { q := &Q{tt.HorizonSession()} query := q.Transactions(). - ForAccount("GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON"). + ForAccount(tt.Ctx, "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON"). IncludeFailed() - err = query.Select(&transactions) + err = query.Select(tt.Ctx, &transactions) tt.Assert.Error(err) tt.Assert.Contains(err.Error(), "Corrupted data! `successful=false` but returned transaction is success") } @@ -165,12 +165,12 @@ func TestInsertTransactionDoesNotAllowDuplicateIndex(t *testing.T) { hash: "7e2def20d5a21a56be2a457b648f702ee1af889d3df65790e92a05081e9fabf1", }) - tt.Assert.NoError(insertBuilder.Add(firstTransaction, sequence)) - tt.Assert.NoError(insertBuilder.Exec()) + tt.Assert.NoError(insertBuilder.Add(tt.Ctx, firstTransaction, sequence)) + tt.Assert.NoError(insertBuilder.Exec(tt.Ctx)) - tt.Assert.NoError(insertBuilder.Add(secondTransaction, sequence)) + tt.Assert.NoError(insertBuilder.Add(tt.Ctx, secondTransaction, sequence)) tt.Assert.EqualError( - insertBuilder.Exec(), + insertBuilder.Exec(tt.Ctx), "error adding values while inserting to history_transactions: "+ "exec failed: pq: duplicate key value violates unique constraint "+ "\"hs_transaction_by_id\"", @@ -197,11 +197,11 @@ func TestInsertTransactionDoesNotAllowDuplicateIndex(t *testing.T) { } *ledger.SuccessfulTransactionCount = 12 *ledger.FailedTransactionCount = 3 - _, err := q.Exec(sq.Insert("history_ledgers").SetMap(ledgerToMap(ledger))) + _, err := q.Exec(tt.Ctx, sq.Insert("history_ledgers").SetMap(ledgerToMap(ledger))) tt.Assert.NoError(err) var transactions []Transaction - tt.Assert.NoError(q.Transactions().Select(&transactions)) + tt.Assert.NoError(q.Transactions().Select(tt.Ctx, &transactions)) tt.Assert.Len(transactions, 1) tt.Assert.Equal( "19aaa18db88605aedec04659fb45e06f240b022eb2d429e05133e4d53cd945ba", @@ -237,7 +237,7 @@ func TestInsertTransaction(t *testing.T) { } *ledger.SuccessfulTransactionCount = 12 *ledger.FailedTransactionCount = 3 - _, err := q.Exec(sq.Insert("history_ledgers").SetMap(ledgerToMap(ledger))) + _, err := q.Exec(tt.Ctx, sq.Insert("history_ledgers").SetMap(ledgerToMap(ledger))) tt.Assert.NoError(err) insertBuilder := q.NewTransactionBatchInsertBuilder(0) @@ -692,11 +692,11 @@ func TestInsertTransaction(t *testing.T) { }, } { t.Run(testCase.name, func(t *testing.T) { - tt.Assert.NoError(insertBuilder.Add(testCase.toInsert, sequence)) - tt.Assert.NoError(insertBuilder.Exec()) + tt.Assert.NoError(insertBuilder.Add(tt.Ctx, testCase.toInsert, sequence)) + tt.Assert.NoError(insertBuilder.Exec(tt.Ctx)) var transactions []Transaction - tt.Assert.NoError(q.Transactions().IncludeFailed().Select(&transactions)) + tt.Assert.NoError(q.Transactions().IncludeFailed().Select(tt.Ctx, &transactions)) tt.Assert.Len(transactions, 1) transaction := transactions[0] @@ -712,7 +712,7 @@ func TestInsertTransaction(t *testing.T) { tt.Assert.True(closedAt.Equal(testCase.expected.LedgerCloseTime)) tt.Assert.Equal(transaction, testCase.expected) - _, err = q.Exec(sq.Delete("history_transactions")) + _, err = q.Exec(tt.Ctx, sq.Delete("history_transactions")) tt.Assert.NoError(err) }) } @@ -727,20 +727,20 @@ func TestFetchFeeBumpTransaction(t *testing.T) { fixture := FeeBumpScenario(tt, q, true) var byOuterhash, byInnerHash Transaction - tt.Assert.NoError(q.TransactionByHash(&byOuterhash, fixture.OuterHash)) - tt.Assert.NoError(q.TransactionByHash(&byInnerHash, fixture.InnerHash)) + tt.Assert.NoError(q.TransactionByHash(tt.Ctx, &byOuterhash, fixture.OuterHash)) + tt.Assert.NoError(q.TransactionByHash(tt.Ctx, &byInnerHash, fixture.InnerHash)) tt.Assert.Equal(byOuterhash, byInnerHash) tt.Assert.Equal(byOuterhash, fixture.Transaction) outerOps, outerTransactions, err := q.Operations().IncludeTransactions(). - ForTransaction(fixture.OuterHash).Fetch() + ForTransaction(tt.Ctx, fixture.OuterHash).Fetch(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Len(outerTransactions, 1) tt.Assert.Len(outerOps, 1) innerOps, innerTransactions, err := q.Operations().IncludeTransactions(). - ForTransaction(fixture.InnerHash).Fetch() + ForTransaction(tt.Ctx, fixture.InnerHash).Fetch(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Len(innerTransactions, 1) tt.Assert.Equal(innerOps, outerOps) @@ -754,11 +754,11 @@ func TestFetchFeeBumpTransaction(t *testing.T) { } var outerEffects, innerEffects []Effect - err = q.Effects().ForTransaction(fixture.OuterHash).Select(&outerEffects) + err = q.Effects().ForTransaction(tt.Ctx, fixture.OuterHash).Select(tt.Ctx, &outerEffects) tt.Assert.NoError(err) tt.Assert.Len(outerEffects, 1) - err = q.Effects().ForTransaction(fixture.InnerHash).Select(&innerEffects) + err = q.Effects().ForTransaction(tt.Ctx, fixture.InnerHash).Select(tt.Ctx, &innerEffects) tt.Assert.NoError(err) tt.Assert.Equal(outerEffects, innerEffects) } diff --git a/services/horizon/internal/db2/history/trust_lines.go b/services/horizon/internal/db2/history/trust_lines.go index 27c3705643..3dfe50b80d 100644 --- a/services/horizon/internal/db2/history/trust_lines.go +++ b/services/horizon/internal/db2/history/trust_lines.go @@ -1,12 +1,14 @@ package history import ( + "context" "database/sql" "encoding/base64" sq "github.com/Masterminds/squirrel" "github.com/guregu/null" "github.com/lib/pq" + "github.com/stellar/go/support/db" "github.com/stellar/go/support/errors" "github.com/stellar/go/xdr" ) @@ -31,7 +33,7 @@ func (trustLine TrustLine) IsClawbackEnabled() bool { // AssetsForAddress returns a list of assets and balances for those assets held by // a given address. -func (q *Q) AssetsForAddress(addy string) ([]xdr.Asset, []xdr.Int64, error) { +func (q *Q) AssetsForAddress(ctx context.Context, addy string) ([]xdr.Asset, []xdr.Int64, error) { if tx := q.GetTx(); tx == nil { return nil, nil, errors.New("cannot be called outside of a transaction") } @@ -39,7 +41,7 @@ func (q *Q) AssetsForAddress(addy string) ([]xdr.Asset, []xdr.Int64, error) { return nil, nil, errors.New("should only be called in a repeatable read transaction") } - account, err := q.GetAccountByID(addy) + account, err := q.GetAccountByID(ctx, addy) if q.NoRows(err) { // if there is no account for the given address then @@ -50,7 +52,7 @@ func (q *Q) AssetsForAddress(addy string) ([]xdr.Asset, []xdr.Int64, error) { } var tls []TrustLine - err = q.Select(&tls, selectTrustLines.Where(sq.Eq{"account_id": addy})) + err = q.Select(ctx, &tls, selectTrustLines.Where(sq.Eq{"account_id": addy})) if err != nil { return nil, nil, err } @@ -68,23 +70,23 @@ func (q *Q) AssetsForAddress(addy string) ([]xdr.Asset, []xdr.Int64, error) { return assets, balances, err } -func (q *Q) CountTrustLines() (int, error) { +func (q *Q) CountTrustLines(ctx context.Context) (int, error) { sql := sq.Select("count(*)").From("trust_lines") var count int - if err := q.Get(&count, sql); err != nil { + if err := q.Get(ctx, &count, sql); err != nil { return 0, errors.Wrap(err, "could not run select query") } return count, nil } -func (q *Q) GetSortedTrustLinesByAccountID(id string) ([]TrustLine, error) { - return q.GetSortedTrustLinesByAccountIDs([]string{id}) +func (q *Q) GetSortedTrustLinesByAccountID(ctx context.Context, id string) ([]TrustLine, error) { + return q.GetSortedTrustLinesByAccountIDs(ctx, []string{id}) } // GetTrustLinesByKeys loads a row from the `trust_lines` table, selected by multiple keys. -func (q *Q) GetTrustLinesByKeys(keys []xdr.LedgerKeyTrustLine) ([]TrustLine, error) { +func (q *Q) GetTrustLinesByKeys(ctx context.Context, keys []xdr.LedgerKeyTrustLine) ([]TrustLine, error) { var trustLines []TrustLine lkeys := make([]string, 0, len(keys)) for _, key := range keys { @@ -95,13 +97,13 @@ func (q *Q) GetTrustLinesByKeys(keys []xdr.LedgerKeyTrustLine) ([]TrustLine, err lkeys = append(lkeys, lkey) } sql := selectTrustLines.Where(map[string]interface{}{"trust_lines.ledger_key": lkeys}) - err := q.Select(&trustLines, sql) + err := q.Select(ctx, &trustLines, sql) return trustLines, err } // InsertTrustLine creates a row in the trust lines table. // Returns number of rows affected and error. -func (q *Q) InsertTrustLine(entry xdr.LedgerEntry) (int64, error) { +func (q *Q) InsertTrustLine(ctx context.Context, entry xdr.LedgerEntry) (int64, error) { m := trustLineToMap(entry) // Add lkey only when inserting rows @@ -112,7 +114,7 @@ func (q *Q) InsertTrustLine(entry xdr.LedgerEntry) (int64, error) { m["ledger_key"] = key sql := sq.Insert("trust_lines").SetMap(m) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } @@ -122,7 +124,7 @@ func (q *Q) InsertTrustLine(entry xdr.LedgerEntry) (int64, error) { // UpdateTrustLine updates a row in the trust lines table. // Returns number of rows affected and error. -func (q *Q) UpdateTrustLine(entry xdr.LedgerEntry) (int64, error) { +func (q *Q) UpdateTrustLine(ctx context.Context, entry xdr.LedgerEntry) (int64, error) { key, err := trustLineEntryToLedgerKeyString(entry) if err != nil { return 0, errors.Wrap(err, "Error running trustLineEntryToLedgerKeyString") @@ -131,7 +133,7 @@ func (q *Q) UpdateTrustLine(entry xdr.LedgerEntry) (int64, error) { sql := sq.Update("trust_lines"). SetMap(trustLineToMap(entry)). Where(map[string]interface{}{"ledger_key": key}) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } @@ -143,7 +145,7 @@ func (q *Q) UpdateTrustLine(entry xdr.LedgerEntry) (int64, error) { // There's currently no limit of the number of trust lines this method can // accept other than 2GB limit of the query string length what should be enough // for each ledger with the current limits. -func (q *Q) UpsertTrustLines(trustLines []xdr.LedgerEntry) error { +func (q *Q) UpsertTrustLines(ctx context.Context, trustLines []xdr.LedgerEntry) error { var ledgerKey, accountID, assetIssuer, assetCode []string var balance, limit, buyingLiabilities, sellingLiabilities []xdr.Int64 var flags, lastModifiedLedger []xdr.Uint32 @@ -220,7 +222,9 @@ func (q *Q) UpsertTrustLines(trustLines []xdr.LedgerEntry) error { last_modified_ledger = excluded.last_modified_ledger, sponsor = excluded.sponsor` - _, err := q.ExecRaw(sql, + _, err := q.ExecRaw( + context.WithValue(ctx, &db.QueryTypeContextKey, db.UpsertQueryType), + sql, pq.Array(ledgerKey), pq.Array(accountID), pq.Array(assetType), @@ -238,7 +242,7 @@ func (q *Q) UpsertTrustLines(trustLines []xdr.LedgerEntry) error { // RemoveTrustLine deletes a row in the trust lines table. // Returns number of rows affected and error. -func (q *Q) RemoveTrustLine(ledgerKey xdr.LedgerKeyTrustLine) (int64, error) { +func (q *Q) RemoveTrustLine(ctx context.Context, ledgerKey xdr.LedgerKeyTrustLine) (int64, error) { key, err := ledgerKeyTrustLineToString(ledgerKey) if err != nil { return 0, errors.Wrap(err, "Error ledgerKeyTrustLineToString MarshalBinaryCompress") @@ -246,7 +250,7 @@ func (q *Q) RemoveTrustLine(ledgerKey xdr.LedgerKeyTrustLine) (int64, error) { sql := sq.Delete("trust_lines"). Where(map[string]interface{}{"ledger_key": key}) - result, err := q.Exec(sql) + result, err := q.Exec(ctx, sql) if err != nil { return 0, err } @@ -255,10 +259,10 @@ func (q *Q) RemoveTrustLine(ledgerKey xdr.LedgerKeyTrustLine) (int64, error) { } // GetSortedTrustLinesByAccountIDs loads trust lines for a list of accounts ID, ordered by asset and issuer -func (q *Q) GetSortedTrustLinesByAccountIDs(id []string) ([]TrustLine, error) { +func (q *Q) GetSortedTrustLinesByAccountIDs(ctx context.Context, id []string) ([]TrustLine, error) { var data []TrustLine sql := selectTrustLines.Where(sq.Eq{"account_id": id}).OrderBy("asset_code", "asset_issuer") - err := q.Select(&data, sql) + err := q.Select(ctx, &data, sql) return data, err } diff --git a/services/horizon/internal/db2/history/trust_lines_batch_insert_builder.go b/services/horizon/internal/db2/history/trust_lines_batch_insert_builder.go index aa6b32dc5b..cb710b5c4b 100644 --- a/services/horizon/internal/db2/history/trust_lines_batch_insert_builder.go +++ b/services/horizon/internal/db2/history/trust_lines_batch_insert_builder.go @@ -1,13 +1,15 @@ package history import ( + "context" + "github.com/stellar/go/support/errors" "github.com/stellar/go/xdr" ) // Add adds a new trust line entry to the batch. `lastModifiedLedger` is another // parameter because `xdr.TrustLineEntry` does not have a field to hold this value. -func (i *trustLinesBatchInsertBuilder) Add(entry xdr.LedgerEntry) error { +func (i *trustLinesBatchInsertBuilder) Add(ctx context.Context, entry xdr.LedgerEntry) error { m := trustLineToMap(entry) // Add lkey only when inserting rows @@ -17,9 +19,9 @@ func (i *trustLinesBatchInsertBuilder) Add(entry xdr.LedgerEntry) error { } m["ledger_key"] = key - return i.builder.Row(m) + return i.builder.Row(ctx, m) } -func (i *trustLinesBatchInsertBuilder) Exec() error { - return i.builder.Exec() +func (i *trustLinesBatchInsertBuilder) Exec(ctx context.Context) error { + return i.builder.Exec(ctx) } diff --git a/services/horizon/internal/db2/history/trust_lines_test.go b/services/horizon/internal/db2/history/trust_lines_test.go index 49aca2fa53..204567d241 100644 --- a/services/horizon/internal/db2/history/trust_lines_test.go +++ b/services/horizon/internal/db2/history/trust_lines_test.go @@ -108,11 +108,11 @@ func TestInsertTrustLine(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - rows, err := q.InsertTrustLine(eurTrustLine) + rows, err := q.InsertTrustLine(tt.Ctx, eurTrustLine) assert.NoError(t, err) assert.Equal(t, int64(1), rows) - rows, err = q.InsertTrustLine(usdTrustLine) + rows, err = q.InsertTrustLine(tt.Ctx, usdTrustLine) assert.NoError(t, err) assert.Equal(t, int64(1), rows) @@ -121,7 +121,7 @@ func TestInsertTrustLine(t *testing.T) { {Asset: usdTrustLine.Data.TrustLine.Asset, AccountId: usdTrustLine.Data.TrustLine.AccountId}, } - lines, err := q.GetTrustLinesByKeys(keys) + lines, err := q.GetTrustLinesByKeys(tt.Ctx, keys) assert.NoError(t, err) assert.Len(t, lines, 2) @@ -134,7 +134,7 @@ func TestUpdateTrustLine(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - rows, err := q.InsertTrustLine(eurTrustLine) + rows, err := q.InsertTrustLine(tt.Ctx, eurTrustLine) assert.NoError(t, err) assert.Equal(t, int64(1), rows) @@ -145,14 +145,14 @@ func TestUpdateTrustLine(t *testing.T) { modifiedTrustLine.Ext.V1 = &v1Copy modifiedTrustLine.Data.TrustLine.Balance = 30000 - rows, err = q.UpdateTrustLine(modifiedTrustLine) + rows, err = q.UpdateTrustLine(tt.Ctx, modifiedTrustLine) assert.NoError(t, err) assert.Equal(t, int64(1), rows) keys := []xdr.LedgerKeyTrustLine{ {Asset: eurTrustLine.Data.TrustLine.Asset, AccountId: eurTrustLine.Data.TrustLine.AccountId}, } - lines, err := q.GetTrustLinesByKeys(keys) + lines, err := q.GetTrustLinesByKeys(tt.Ctx, keys) assert.NoError(t, err) assert.Len(t, lines, 1) @@ -189,25 +189,25 @@ func TestUpsertTrustLines(t *testing.T) { q := &Q{tt.HorizonSession()} // Upserting nothing is no op - err := q.UpsertTrustLines([]xdr.LedgerEntry{}) + err := q.UpsertTrustLines(tt.Ctx, []xdr.LedgerEntry{}) assert.NoError(t, err) ledgerEntries := []xdr.LedgerEntry{eurTrustLine, usdTrustLine} - err = q.UpsertTrustLines(ledgerEntries) + err = q.UpsertTrustLines(tt.Ctx, ledgerEntries) assert.NoError(t, err) keys := []xdr.LedgerKeyTrustLine{ {Asset: eurTrustLine.Data.TrustLine.Asset, AccountId: eurTrustLine.Data.TrustLine.AccountId}, } - lines, err := q.GetTrustLinesByKeys(keys) + lines, err := q.GetTrustLinesByKeys(tt.Ctx, keys) assert.NoError(t, err) assert.Len(t, lines, 1) keys = []xdr.LedgerKeyTrustLine{ {Asset: usdTrustLine.Data.TrustLine.Asset, AccountId: usdTrustLine.Data.TrustLine.AccountId}, } - lines, err = q.GetTrustLinesByKeys(keys) + lines, err = q.GetTrustLinesByKeys(tt.Ctx, keys) assert.NoError(t, err) assert.Len(t, lines, 1) @@ -216,13 +216,13 @@ func TestUpsertTrustLines(t *testing.T) { ledgerEntries = []xdr.LedgerEntry{modifiedTrustLine} - err = q.UpsertTrustLines(ledgerEntries) + err = q.UpsertTrustLines(tt.Ctx, ledgerEntries) assert.NoError(t, err) keys = []xdr.LedgerKeyTrustLine{ {Asset: eurTrustLine.Data.TrustLine.Asset, AccountId: eurTrustLine.Data.TrustLine.AccountId}, } - lines, err = q.GetTrustLinesByKeys(keys) + lines, err = q.GetTrustLinesByKeys(tt.Ctx, keys) assert.NoError(t, err) assert.Len(t, lines, 1) @@ -267,7 +267,7 @@ func TestUpsertTrustLines(t *testing.T) { keys = []xdr.LedgerKeyTrustLine{ {Asset: usdTrustLine.Data.TrustLine.Asset, AccountId: usdTrustLine.Data.TrustLine.AccountId}, } - lines, err = q.GetTrustLinesByKeys(keys) + lines, err = q.GetTrustLinesByKeys(tt.Ctx, keys) assert.NoError(t, err) assert.Len(t, lines, 1) @@ -309,21 +309,21 @@ func TestRemoveTrustLine(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - rows, err := q.InsertTrustLine(eurTrustLine) + rows, err := q.InsertTrustLine(tt.Ctx, eurTrustLine) assert.NoError(t, err) assert.Equal(t, int64(1), rows) key := xdr.LedgerKeyTrustLine{Asset: eurTrustLine.Data.TrustLine.Asset, AccountId: eurTrustLine.Data.TrustLine.AccountId} - rows, err = q.RemoveTrustLine(key) + rows, err = q.RemoveTrustLine(tt.Ctx, key) assert.NoError(t, err) assert.Equal(t, int64(1), rows) - lines, err := q.GetTrustLinesByKeys([]xdr.LedgerKeyTrustLine{key}) + lines, err := q.GetTrustLinesByKeys(tt.Ctx, []xdr.LedgerKeyTrustLine{key}) assert.NoError(t, err) assert.Len(t, lines, 0) // Doesn't exist anymore - rows, err = q.RemoveTrustLine(key) + rows, err = q.RemoveTrustLine(tt.Ctx, key) assert.NoError(t, err) assert.Equal(t, int64(0), rows) } @@ -333,11 +333,11 @@ func TestGetSortedTrustLinesByAccountsID(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - _, err := q.InsertTrustLine(eurTrustLine) + _, err := q.InsertTrustLine(tt.Ctx, eurTrustLine) tt.Assert.NoError(err) - _, err = q.InsertTrustLine(usdTrustLine) + _, err = q.InsertTrustLine(tt.Ctx, usdTrustLine) tt.Assert.NoError(err) - _, err = q.InsertTrustLine(usdTrustLine2) + _, err = q.InsertTrustLine(tt.Ctx, usdTrustLine2) tt.Assert.NoError(err) ids := []string{ @@ -345,7 +345,7 @@ func TestGetSortedTrustLinesByAccountsID(t *testing.T) { usdTrustLine.Data.TrustLine.AccountId.Address(), } - records, err := q.GetSortedTrustLinesByAccountIDs(ids) + records, err := q.GetSortedTrustLinesByAccountIDs(tt.Ctx, ids) tt.Assert.NoError(err) tt.Assert.Len(records, 2) @@ -378,10 +378,10 @@ func TestGetTrustLinesByAccountID(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - _, err := q.InsertTrustLine(eurTrustLine) + _, err := q.InsertTrustLine(tt.Ctx, eurTrustLine) tt.Assert.NoError(err) - record, err := q.GetSortedTrustLinesByAccountID(eurTrustLine.Data.TrustLine.AccountId.Address()) + record, err := q.GetSortedTrustLinesByAccountID(tt.Ctx, eurTrustLine.Data.TrustLine.AccountId.Address()) tt.Assert.NoError(err) asset := xdr.MustNewCreditAsset(record[0].AssetCode, record[0].AssetIssuer) @@ -401,13 +401,13 @@ func TestAssetsForAddressRequiresTransaction(t *testing.T) { test.ResetHorizonDB(t, tt.HorizonDB) q := &Q{tt.HorizonSession()} - _, _, err := q.AssetsForAddress(eurTrustLine.Data.TrustLine.AccountId.Address()) + _, _, err := q.AssetsForAddress(tt.Ctx, eurTrustLine.Data.TrustLine.AccountId.Address()) assert.EqualError(t, err, "cannot be called outside of a transaction") - assert.NoError(t, q.Begin()) - defer q.Rollback() + assert.NoError(t, q.Begin(tt.Ctx)) + defer q.Rollback(tt.Ctx) - _, _, err = q.AssetsForAddress(eurTrustLine.Data.TrustLine.AccountId.Address()) + _, _, err = q.AssetsForAddress(tt.Ctx, eurTrustLine.Data.TrustLine.AccountId.Address()) assert.EqualError(t, err, "should only be called in a repeatable read transaction") } @@ -419,10 +419,10 @@ func TestAssetsForAddress(t *testing.T) { ledgerEntries := []xdr.LedgerEntry{account1} - err := q.UpsertAccounts(ledgerEntries) + err := q.UpsertAccounts(tt.Ctx, ledgerEntries) assert.NoError(t, err) - _, err = q.InsertTrustLine(eurTrustLine) + _, err = q.InsertTrustLine(tt.Ctx, eurTrustLine) tt.Assert.NoError(err) brlTrustLine := xdr.LedgerEntry{ @@ -448,22 +448,22 @@ func TestAssetsForAddress(t *testing.T) { }, } - _, err = q.InsertTrustLine(brlTrustLine) + _, err = q.InsertTrustLine(tt.Ctx, brlTrustLine) tt.Assert.NoError(err) - err = q.BeginTx(&sql.TxOptions{ + err = q.BeginTx(tt.Ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }) assert.NoError(t, err) - defer q.Rollback() + defer q.Rollback(tt.Ctx) - assets, balances, err := q.AssetsForAddress(usdTrustLine.Data.TrustLine.AccountId.Address()) + assets, balances, err := q.AssetsForAddress(tt.Ctx, usdTrustLine.Data.TrustLine.AccountId.Address()) tt.Assert.NoError(err) tt.Assert.Empty(assets) tt.Assert.Empty(balances) - assets, balances, err = q.AssetsForAddress(account1.Data.Account.AccountId.Address()) + assets, balances, err = q.AssetsForAddress(tt.Ctx, account1.Data.Account.AccountId.Address()) tt.Assert.NoError(err) assetsToBalance := map[string]xdr.Int64{} diff --git a/services/horizon/internal/db2/schema/bindata.go b/services/horizon/internal/db2/schema/bindata.go index 2fb4924565..d38a342815 100644 --- a/services/horizon/internal/db2/schema/bindata.go +++ b/services/horizon/internal/db2/schema/bindata.go @@ -40,6 +40,7 @@ // migrations/43_add_claimable_balances_flags.sql (145B) // migrations/44_asset_stat_accounts_and_balances.sql (439B) // migrations/45_add_claimable_balances_history.sql (2.163kB) +// migrations/46_add_muxed_accounts.sql (465B) // migrations/4_add_protocol_version.sql (188B) // migrations/5_create_trades_table.sql (1.1kB) // migrations/6_create_assets_table.sql (366B) @@ -915,6 +916,26 @@ func migrations45_add_claimable_balances_historySql() (*asset, error) { return a, nil } +var _migrations46_add_muxed_accountsSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x90\xbf\xce\x82\x40\x10\xc4\xfb\x7b\x8a\x2d\xbf\x2f\x42\x6b\x62\xa8\x30\x47\x77\x51\x43\xa0\x26\x9b\x63\x11\x0a\xee\xc8\xde\xe1\x9f\xb7\x37\x01\x13\x31\x22\x1a\xdb\xcd\xcc\xce\xfc\x26\x0c\x61\xd5\x36\x47\x46\x4f\x90\x77\x42\xc4\x2a\x4b\x52\xc8\xe2\xad\x4a\xa0\x6e\x9c\xb7\x7c\x2d\x3c\xa3\x71\xa8\x7d\x63\x8d\x83\x58\x4a\x40\xad\x6d\x6f\x7c\xd1\xf6\x17\x2a\xe1\x84\xac\x6b\xe4\xbf\xf5\xe6\x1f\x76\xb9\x52\xc1\xa0\xa9\x88\x8a\x65\x5d\x34\x1b\x66\x3b\x62\x7c\x44\x39\xdb\xb3\xfe\xed\x13\x55\x15\x69\x7f\x6f\x5c\x96\x4c\xce\xbd\xf5\x8b\xe9\x0e\xd2\x9e\xcd\x17\x4b\xc8\x74\x7f\x78\x9e\x22\x18\x6f\x2f\xe8\x1f\x49\x07\xdb\x1c\xea\x32\xd9\xd8\x60\x8a\x16\x89\x5b\x00\x00\x00\xff\xff\x1e\x83\x01\x2a\xd1\x01\x00\x00") + +func migrations46_add_muxed_accountsSqlBytes() ([]byte, error) { + return bindataRead( + _migrations46_add_muxed_accountsSql, + "migrations/46_add_muxed_accounts.sql", + ) +} + +func migrations46_add_muxed_accountsSql() (*asset, error) { + bytes, err := migrations46_add_muxed_accountsSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "migrations/46_add_muxed_accounts.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf2, 0x2e, 0xec, 0xdc, 0x13, 0x2a, 0x94, 0xfa, 0xba, 0x5c, 0xe7, 0x2d, 0x10, 0x39, 0x2b, 0xf3, 0x28, 0xd, 0x46, 0x7f, 0xf, 0xc3, 0x4c, 0xd1, 0x43, 0xff, 0x81, 0xe1, 0x68, 0xa, 0xef, 0xd1}} + return a, nil +} + var _migrations4_add_protocol_versionSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\xcd\xb1\x0a\xc2\x30\x10\x06\xe0\x3d\x4f\xf1\xef\x52\x70\xef\x14\x4d\x9d\xce\x44\x4a\x32\x38\x15\xd1\xa3\x06\x6a\xae\x5c\x82\xe2\xdb\xbb\xba\x88\x4f\xf0\x75\x1d\x36\x8f\x3c\xeb\xa5\x31\xd2\x6a\x2c\xc5\x61\x44\xb4\x3b\x1a\x10\x3c\x9d\x71\xcf\xb5\x89\xbe\xa7\x85\x6f\x33\x6b\x85\x01\xac\x73\xd8\x07\x4a\x47\x8f\x55\xa5\xc9\x55\x96\xe9\xc9\x5a\xb3\x14\xe4\xd2\x78\x66\x85\x1b\x0e\x36\x51\xc4\x16\x3e\x44\xf8\x44\xd4\x1b\xf3\x6d\x39\x79\x95\xff\x9a\x1b\xc3\xe9\x97\xd5\x9b\x4f\x00\x00\x00\xff\xff\x83\xbb\x30\x2e\xbc\x00\x00\x00") func migrations4_add_protocol_versionSqlBytes() ([]byte, error) { @@ -1186,6 +1207,7 @@ var _bindata = map[string]func() (*asset, error){ "migrations/43_add_claimable_balances_flags.sql": migrations43_add_claimable_balances_flagsSql, "migrations/44_asset_stat_accounts_and_balances.sql": migrations44_asset_stat_accounts_and_balancesSql, "migrations/45_add_claimable_balances_history.sql": migrations45_add_claimable_balances_historySql, + "migrations/46_add_muxed_accounts.sql": migrations46_add_muxed_accountsSql, "migrations/4_add_protocol_version.sql": migrations4_add_protocol_versionSql, "migrations/5_create_trades_table.sql": migrations5_create_trades_tableSql, "migrations/6_create_assets_table.sql": migrations6_create_assets_tableSql, @@ -1277,6 +1299,7 @@ var _bintree = &bintree{nil, map[string]*bintree{ "43_add_claimable_balances_flags.sql": &bintree{migrations43_add_claimable_balances_flagsSql, map[string]*bintree{}}, "44_asset_stat_accounts_and_balances.sql": &bintree{migrations44_asset_stat_accounts_and_balancesSql, map[string]*bintree{}}, "45_add_claimable_balances_history.sql": &bintree{migrations45_add_claimable_balances_historySql, map[string]*bintree{}}, + "46_add_muxed_accounts.sql": &bintree{migrations46_add_muxed_accountsSql, map[string]*bintree{}}, "4_add_protocol_version.sql": &bintree{migrations4_add_protocol_versionSql, map[string]*bintree{}}, "5_create_trades_table.sql": &bintree{migrations5_create_trades_tableSql, map[string]*bintree{}}, "6_create_assets_table.sql": &bintree{migrations6_create_assets_tableSql, map[string]*bintree{}}, diff --git a/services/horizon/internal/db2/schema/migrations/46_add_muxed_accounts.sql b/services/horizon/internal/db2/schema/migrations/46_add_muxed_accounts.sql new file mode 100644 index 0000000000..3cc03750c7 --- /dev/null +++ b/services/horizon/internal/db2/schema/migrations/46_add_muxed_accounts.sql @@ -0,0 +1,11 @@ +-- +migrate Up + +ALTER TABLE history_transactions ADD account_muxed varchar(69) NULL, ADD fee_account_muxed varchar(69) NULL; +ALTER TABLE history_operations ADD source_account_muxed varchar(69) NULL; +ALTER TABLE history_effects ADD address_muxed varchar(69) NULL; + +-- +migrate Down + +ALTER TABLE history_transactions DROP account_muxed, DROP fee_account_muxed; +ALTER TABLE history_operations DROP source_account_muxed; +ALTER TABLE history_effects DROP address_muxed; diff --git a/services/horizon/internal/docs/admin.md b/services/horizon/internal/docs/admin.md index a36ac2c2b9..ec300b7250 100644 --- a/services/horizon/internal/docs/admin.md +++ b/services/horizon/internal/docs/admin.md @@ -77,6 +77,13 @@ To prepare a database for Horizon's use, first you must ensure the database is b It is recommended to set `random_page_cost=1` in Postgres configuration if you are using SSD storage. With this setting Query Planner will make a better use of indexes, especially for `JOIN` queries. We have noticed a huge speed improvement for some queries. +To improve availability of both ingestion and frontend servers it's recommended to set the following values: +* `tcp_keepalives_idle`: 10 seconds, +* `tcp_keepalives_interval`: 1 second, +* `tcp_keepalives_count`: 5. + +With the config above, if there are no queries from a given client for 10 seconds, Postgres should start sending TCP keepalive packets. It will retry 5 times every second. If there is no response from the client after that time it will drop the connection. + ## Running Once your Horizon database is configured, you're ready to run Horizon. To run Horizon you simply run `horizon` or `horizon serve`, both of which start the HTTP server and start logging to standard out. When run, you should see some output that similar to: diff --git a/services/horizon/internal/flags.go b/services/horizon/internal/flags.go index 491be01803..4a96734841 100644 --- a/services/horizon/internal/flags.go +++ b/services/horizon/internal/flags.go @@ -2,6 +2,7 @@ package horizon import ( "fmt" + "github.com/stellar/go/ingest/ledgerbackend" "go/types" stdLog "log" "os" @@ -23,12 +24,15 @@ const ( DatabaseURLFlagName = "db-url" // StellarCoreDBURLFlagName is the command line flag for configuring the postgres Stellar Core URL StellarCoreDBURLFlagName = "stellar-core-db-url" - // StellarCoreDBURLFlagName is the command line flag for configuring the URL fore Stellar Core HTTP endpoint + // StellarCoreURLFlagName is the command line flag for configuring the URL fore Stellar Core HTTP endpoint StellarCoreURLFlagName = "stellar-core-url" // StellarCoreBinaryPathName is the command line flag for configuring the path to the stellar core binary StellarCoreBinaryPathName = "stellar-core-binary-path" - // CaptiveCoreConfigAppendPathName is the command line flag for configuring the path to the captive core additional configuration - CaptiveCoreConfigAppendPathName = "captive-core-config-append-path" + // captiveCoreConfigAppendPathName is the command line flag for configuring the path to the captive core additional configuration + // Note captiveCoreConfigAppendPathName is deprecated in favor of CaptiveCoreConfigPathName + captiveCoreConfigAppendPathName = "captive-core-config-append-path" + // CaptiveCoreConfigPathName is the command line flag for configuring the path to the captive core configuration file + CaptiveCoreConfigPathName = "captive-core-config-path" captiveCoreMigrationHint = "If you are migrating from Horizon 1.x.y read the Migration Guide here: https://github.com/stellar/go/blob/master/services/horizon/internal/docs/captive_core.md" ) @@ -93,6 +97,13 @@ func Flags() (*Config, support.ConfigOptions) { Required: true, Usage: "horizon postgres database to connect with", }, + &support.ConfigOption{ + Name: "ro-database-url", + ConfigKey: &config.RoDatabaseURL, + OptType: types.String, + Required: false, + Usage: "horizon postgres read-replica to connect with, when set it will return stale history error when replica is behind primary", + }, &support.ConfigOption{ Name: StellarCoreBinaryPathName, OptType: types.String, @@ -110,12 +121,39 @@ func Flags() (*Config, support.ConfigOptions) { ConfigKey: &config.RemoteCaptiveCoreURL, }, &support.ConfigOption{ - Name: CaptiveCoreConfigAppendPathName, + Name: captiveCoreConfigAppendPathName, + OptType: types.String, + FlagDefault: "", + Required: false, + Usage: "DEPRECATED in favor of " + CaptiveCoreConfigPathName, + CustomSetValue: func(opt *support.ConfigOption) { + if val := viper.GetString(opt.Name); val != "" { + if viper.GetString(CaptiveCoreConfigPathName) != "" { + stdLog.Printf( + "both --%s and --%s are set. %s is deprecated so %s will be used instead", + captiveCoreConfigAppendPathName, + CaptiveCoreConfigPathName, + captiveCoreConfigAppendPathName, + CaptiveCoreConfigPathName, + ) + } else { + config.CaptiveCoreConfigPath = val + } + } + }, + }, + &support.ConfigOption{ + Name: CaptiveCoreConfigPathName, OptType: types.String, FlagDefault: "", Required: false, - Usage: "path to additional configuration for the Stellar Core configuration file used by captive core. It must, at least, include enough details to define a quorum set", - ConfigKey: &config.CaptiveCoreConfigAppendPath, + Usage: "path to the configuration file used by captive core. It must, at least, include enough details to define a quorum set. Any fields in the configuration file which are not supported by captive core will be rejected.", + CustomSetValue: func(opt *support.ConfigOption) { + if val := viper.GetString(opt.Name); val != "" { + config.CaptiveCoreConfigPath = val + config.CaptiveCoreTomlParams.Strict = true + } + }, }, &support.ConfigOption{ Name: "enable-captive-core-ingestion", @@ -126,17 +164,17 @@ func Flags() (*Config, support.ConfigOptions) { ConfigKey: &config.EnableCaptiveCoreIngestion, }, &support.ConfigOption{ - Name: "captive-core-http-port", - OptType: types.Uint, - FlagDefault: uint(11626), - Required: false, - Usage: "HTTP port for Captive Core to listen on (0 disables the HTTP server)", - ConfigKey: &config.CaptiveCoreHTTPPort, + Name: "captive-core-http-port", + OptType: types.Uint, + CustomSetValue: support.SetOptionalUint, + Required: false, + FlagDefault: uint(0), + Usage: "HTTP port for Captive Core to listen on (0 disables the HTTP server)", + ConfigKey: &config.CaptiveCoreTomlParams.HTTPPort, }, &support.ConfigOption{ - Name: "captive-core-storage-path", - OptType: types.String, - FlagDefault: "", + Name: "captive-core-storage-path", + OptType: types.String, CustomSetValue: func(opt *support.ConfigOption) { existingValue := viper.GetString(opt.Name) if existingValue == "" || existingValue == "." { @@ -153,12 +191,13 @@ func Flags() (*Config, support.ConfigOptions) { ConfigKey: &config.CaptiveCoreStoragePath, }, &support.ConfigOption{ - Name: "captive-core-peer-port", - OptType: types.Uint, - FlagDefault: uint(0), - Required: false, - Usage: "port for Captive Core to bind to for connecting to the Stellar swarm (0 uses Stellar Core's default)", - ConfigKey: &config.CaptiveCorePeerPort, + Name: "captive-core-peer-port", + OptType: types.Uint, + FlagDefault: uint(0), + CustomSetValue: support.SetOptionalUint, + Required: false, + Usage: "port for Captive Core to bind to for connecting to the Stellar swarm (0 uses Stellar Core's default)", + ConfigKey: &config.CaptiveCoreTomlParams.PeerPort, }, &support.ConfigOption{ Name: StellarCoreDBURLFlagName, @@ -285,10 +324,12 @@ func Flags() (*Config, support.ConfigOptions) { Usage: "name of the file where logs will be saved (leave empty to send logs to stdout)", }, &support.ConfigOption{ - Name: "captive-core-log-path", - ConfigKey: &config.CaptiveCoreLogPath, - OptType: types.String, - Usage: "name of the path for Core logs (leave empty to log w/ Horizon only)", + Name: "captive-core-log-path", + ConfigKey: &config.CaptiveCoreTomlParams.LogPath, + OptType: types.String, + CustomSetValue: support.SetOptionalString, + Required: false, + Usage: "name of the path for Core logs (leave empty to log w/ Horizon only)", }, &support.ConfigOption{ Name: "max-path-length", @@ -417,7 +458,7 @@ func Flags() (*Config, support.ConfigOptions) { // NewAppFromFlags constructs a new Horizon App from the given command line flags func NewAppFromFlags(config *Config, flags support.ConfigOptions) *App { - ApplyFlags(config, flags) + ApplyFlags(config, flags, ApplyOptions{RequireCaptiveCoreConfig: true, AlwaysIngest: false}) // Validate app-specific arguments if config.StellarCoreURL == "" { log.Fatalf("flag --%s cannot be empty", StellarCoreURLFlagName) @@ -432,23 +473,32 @@ func NewAppFromFlags(config *Config, flags support.ConfigOptions) *App { return app } +type ApplyOptions struct { + AlwaysIngest bool + RequireCaptiveCoreConfig bool +} + // ApplyFlags applies the command line flags on the given Config instance -func ApplyFlags(config *Config, flags support.ConfigOptions) { +func ApplyFlags(config *Config, flags support.ConfigOptions, options ApplyOptions) { // Verify required options and load the config struct flags.Require() flags.SetValues() - if config.ApplyMigrations { - applyMigrations(*config) - } - - // Migrations should be checked as early as possible - checkMigrations(*config) - // Validate options that should be provided together validateBothOrNeither("tls-cert", "tls-key") + if options.AlwaysIngest { + config.Ingest = true + } + if config.Ingest { + // Migrations should be checked as early as possible. Apply and check + // only on ingesting instances which are required to have write-access + // to the DB. + if config.ApplyMigrations { + applyMigrations(*config) + } + checkMigrations(*config) // config.HistoryArchiveURLs contains a single empty value when empty so using // viper.GetString is easier. @@ -469,9 +519,6 @@ func ApplyFlags(config *Config, flags support.ConfigOptions) { } } - // When running live ingestion a config file is required too - validateBothOrNeither(StellarCoreBinaryPathName, CaptiveCoreConfigAppendPathName) - // NOTE: If both of these are set (regardless of user- or PATH-supplied // defaults for the binary path), the Remote Captive Core URL // takes precedence. @@ -480,22 +527,44 @@ func ApplyFlags(config *Config, flags support.ConfigOptions) { StellarCoreBinaryPathName, captiveCoreMigrationHint) } - if binaryPath == "" || config.CaptiveCoreConfigAppendPath == "" { - stdLog.Fatalf("Invalid config: captive core requires that both --%s and --%s are set. %s", - StellarCoreBinaryPathName, CaptiveCoreConfigAppendPathName, captiveCoreMigrationHint) + if config.RemoteCaptiveCoreURL == "" && (binaryPath == "" || config.CaptiveCoreConfigPath == "") { + if options.RequireCaptiveCoreConfig { + stdLog.Fatalf("Invalid config: captive core requires that both --%s and --%s are set. %s", + StellarCoreBinaryPathName, CaptiveCoreConfigPathName, captiveCoreMigrationHint) + } else { + var err error + config.CaptiveCoreTomlParams.HistoryArchiveURLs = config.HistoryArchiveURLs + config.CaptiveCoreTomlParams.NetworkPassphrase = config.NetworkPassphrase + config.CaptiveCoreToml, err = ledgerbackend.NewCaptiveCoreToml(config.CaptiveCoreTomlParams) + if err != nil { + stdLog.Fatalf("Invalid captive core toml file %v", err) + } + } + } else if config.RemoteCaptiveCoreURL == "" { + var err error + config.CaptiveCoreTomlParams.HistoryArchiveURLs = config.HistoryArchiveURLs + config.CaptiveCoreTomlParams.NetworkPassphrase = config.NetworkPassphrase + config.CaptiveCoreToml, err = ledgerbackend.NewCaptiveCoreTomlFromFile(config.CaptiveCoreConfigPath, config.CaptiveCoreTomlParams) + if err != nil { + stdLog.Fatalf("Invalid captive core toml file %v", err) + } } // If we don't supply an explicit core URL and we are running a local // captive core process with the http port enabled, point to it. - if config.StellarCoreURL == "" && config.RemoteCaptiveCoreURL == "" && config.CaptiveCoreHTTPPort != 0 { - config.StellarCoreURL = fmt.Sprintf("http://localhost:%d", config.CaptiveCoreHTTPPort) + if config.StellarCoreURL == "" && config.RemoteCaptiveCoreURL == "" && config.CaptiveCoreToml.HTTPPort != 0 { + config.StellarCoreURL = fmt.Sprintf("http://localhost:%d", config.CaptiveCoreToml.HTTPPort) viper.Set(StellarCoreURLFlagName, config.StellarCoreURL) } } } else { - if config.EnableCaptiveCoreIngestion && (config.CaptiveCoreBinaryPath != "" || config.CaptiveCoreConfigAppendPath != "") { + if config.EnableCaptiveCoreIngestion && (config.CaptiveCoreBinaryPath != "" || config.CaptiveCoreConfigPath != "") { + captiveCoreConfigFlag := captiveCoreConfigAppendPathName + if viper.GetString(CaptiveCoreConfigPathName) != "" { + captiveCoreConfigFlag = CaptiveCoreConfigPathName + } stdLog.Fatalf("Invalid config: one or more captive core params passed (--%s or --%s) but --ingest not set. "+captiveCoreMigrationHint, - StellarCoreBinaryPathName, CaptiveCoreConfigAppendPathName) + StellarCoreBinaryPathName, captiveCoreConfigFlag) } if config.StellarCoreDatabaseURL != "" { stdLog.Fatalf("Invalid config: --%s passed but --ingest not set. ", StellarCoreDBURLFlagName) diff --git a/services/horizon/internal/health.go b/services/horizon/internal/health.go index b15214fc03..c41e4c8007 100644 --- a/services/horizon/internal/health.go +++ b/services/horizon/internal/health.go @@ -68,7 +68,7 @@ func (h healthCheck) runCheck() healthResponse { CoreUp: true, CoreSynced: true, } - if err := h.session.Ping(dbPingTimeout); err != nil { + if err := h.session.Ping(h.ctx, dbPingTimeout); err != nil { healthLogger.Warnf("could not ping db: %s", err) response.DatabaseConnected = false } diff --git a/services/horizon/internal/health_test.go b/services/horizon/internal/health_test.go index 7e1fc4d9c5..c235f6c8ce 100644 --- a/services/horizon/internal/health_test.go +++ b/services/horizon/internal/health_test.go @@ -118,9 +118,9 @@ func TestHealthCheck(t *testing.T) { }, } { t.Run(tc.name, func(t *testing.T) { - session := &db.MockSession{} - session.On("Ping", dbPingTimeout).Return(tc.pingErr).Once() ctx := context.Background() + session := &db.MockSession{} + session.On("Ping", ctx, dbPingTimeout).Return(tc.pingErr).Once() core := &mockStellarCore{} core.On("Info", ctx).Return(tc.coreResponse, tc.coreErr).Once() @@ -180,8 +180,9 @@ func TestHealthCheckCache(t *testing.T) { assert.True(t, h.cache.lastUpdate.Equal(time.Unix(0, 0))) } + ctx := context.Background() session := &db.MockSession{} - session.On("Ping", dbPingTimeout).Return(nil).Once() + session.On("Ping", ctx, dbPingTimeout).Return(nil).Once() core := &mockStellarCore{} core.On("Info", h.ctx).Return(&stellarcore.InfoResponse{}, fmt.Errorf("core err")).Once() h.session = session diff --git a/services/horizon/internal/httpt_test.go b/services/horizon/internal/httpt_test.go index 11628fb319..1799822d5d 100644 --- a/services/horizon/internal/httpt_test.go +++ b/services/horizon/internal/httpt_test.go @@ -1,6 +1,7 @@ package horizon import ( + "context" "net/http" "net/http/httptest" "net/url" @@ -41,7 +42,7 @@ func startHTTPTest(t *testing.T, scenario string) *HTTPT { }`) ret.App.config.StellarCoreURL = ret.coreServer.URL - ret.App.UpdateLedgerState() + ret.App.UpdateLedgerState(context.Background()) return ret } @@ -98,7 +99,7 @@ func (ht *HTTPT) Post( // setting the retention count to the provided number. func (ht *HTTPT) ReapHistory(retention uint) { ht.App.reaper.RetentionCount = retention - err := ht.App.DeleteUnretainedHistory() + err := ht.App.DeleteUnretainedHistory(context.Background()) ht.Require.NoError(err) - ht.App.UpdateLedgerState() + ht.App.UpdateLedgerState(context.Background()) } diff --git a/services/horizon/internal/httpx/handler.go b/services/horizon/internal/httpx/handler.go index 39fd3c15f5..24ea92c338 100644 --- a/services/horizon/internal/httpx/handler.go +++ b/services/horizon/internal/httpx/handler.go @@ -104,14 +104,14 @@ func repeatableReadStream( return func() ([]sse.Event, error) { if session != nil { - err := session.BeginTx(&sql.TxOptions{ + err := session.BeginTx(r.Context(), &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }) if err != nil { return nil, errors.Wrap(err, "Error starting repeatable read transaction") } - defer session.Rollback() + defer session.Rollback(r.Context()) } return generateEvents() diff --git a/services/horizon/internal/httpx/middleware.go b/services/horizon/internal/httpx/middleware.go index b4d77faf81..0ce50f7a38 100644 --- a/services/horizon/internal/httpx/middleware.go +++ b/services/horizon/internal/httpx/middleware.go @@ -141,18 +141,21 @@ func sanitizeMetricRoute(routePattern string) string { route = strings.ReplaceAll(route, "\\", "\\\\") route = strings.ReplaceAll(route, "\"", "\\\"") route = strings.ReplaceAll(route, "\n", "\\n") + if route == "" { + // Can be empty when request did not reach the final route (ex. blocked by + // a middleware). More info: https://github.com/go-chi/chi/issues/270 + return "undefined" + } return route } func logEndOfRequest(ctx context.Context, r *http.Request, requestDurationSummary *prometheus.SummaryVec, duration time.Duration, mw middleware.WrapResponseWriter, streaming bool) { route := sanitizeMetricRoute(chi.RouteContext(r.Context()).RoutePattern()) - // Can be empty when request did not reached the final route (ex. blocked by - // a middleware). More info: https://github.com/go-chi/chi/issues/270 - if route == "" { - route = "undefined" - } referer := r.Referer() + if referer == "" { + referer = r.Header.Get("Origin") + } if referer == "" { referer = "undefined" } @@ -205,10 +208,15 @@ func recoverMiddleware(h http.Handler) http.Handler { // NewHistoryMiddleware adds session to the request context and ensures Horizon // is not in a stale state, which is when the difference between latest core // ledger and latest history ledger is higher than the given threshold -func NewHistoryMiddleware(ledgerState *ledger.State, staleThreshold int32, session *db.Session) func(http.Handler) http.Handler { +func NewHistoryMiddleware(ledgerState *ledger.State, staleThreshold int32, session db.SessionInterface) func(http.Handler) http.Handler { return func(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + chiRoute := chi.RouteContext(ctx) + if chiRoute != nil { + ctx = context.WithValue(ctx, &db.RouteContextKey, sanitizeMetricRoute(chiRoute.RoutePattern())) + } if staleThreshold > 0 { ls := ledgerState.CurrentStatus() isStale := (ls.CoreLatest - ls.HistoryLatest) > int32(staleThreshold) @@ -218,16 +226,15 @@ func NewHistoryMiddleware(ledgerState *ledger.State, staleThreshold int32, sessi "history_latest_ledger": ls.HistoryLatest, "core_latest_ledger": ls.CoreLatest, } - problem.Render(r.Context(), w, err) + problem.Render(ctx, w, err) return } } requestSession := session.Clone() - requestSession.Ctx = r.Context() h.ServeHTTP(w, r.WithContext( context.WithValue( - r.Context(), + ctx, &horizonContext.SessionContextKey, requestSession, ), @@ -242,19 +249,19 @@ func NewHistoryMiddleware(ledgerState *ledger.State, staleThreshold int32, sessi // has been verified and is correct (Otherwise returns `500 Internal Server Error` to prevent // returning invalid data to the user) type StateMiddleware struct { - HorizonSession *db.Session + HorizonSession db.SessionInterface NoStateVerification bool } -func ingestionStatus(q *history.Q) (uint32, bool, error) { - version, err := q.GetIngestVersion() +func ingestionStatus(ctx context.Context, q *history.Q) (uint32, bool, error) { + version, err := q.GetIngestVersion(ctx) if err != nil { return 0, false, supportErrors.Wrap( err, "Error running GetIngestVersion", ) } - lastIngestedLedger, err := q.GetLastLedgerIngestNonBlocking() + lastIngestedLedger, err := q.GetLastLedgerIngestNonBlocking(ctx) if err != nil { return 0, false, supportErrors.Wrap( err, "Error running GetLastLedgerIngestNonBlocking", @@ -262,7 +269,7 @@ func ingestionStatus(q *history.Q) (uint32, bool, error) { } var lastHistoryLedger uint32 - err = q.LatestLedger(&lastHistoryLedger) + err = q.LatestLedger(ctx, &lastHistoryLedger) if err != nil { return 0, false, supportErrors.Wrap(err, "Error running LatestLedger") } @@ -277,6 +284,11 @@ func ingestionStatus(q *history.Q) (uint32, bool, error) { // WrapFunc executes the middleware on a given HTTP handler function func (m *StateMiddleware) WrapFunc(h http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + chiRoute := chi.RouteContext(ctx) + if chiRoute != nil { + ctx = context.WithValue(ctx, &db.RouteContextKey, sanitizeMetricRoute(chiRoute.RoutePattern())) + } session := m.HorizonSession.Clone() q := &history.Q{session} sseRequest := render.Negotiate(r) == render.MimeEventStream @@ -286,38 +298,37 @@ func (m *StateMiddleware) WrapFunc(h http.HandlerFunc) http.HandlerFunc { // Otherwise, because the ingestion system is running concurrently with this request, // it is possible to have one read fetch data from ledger N and another read // fetch data from ledger N+1 . - session.Ctx = r.Context() - err := session.BeginTx(&sql.TxOptions{ + err := session.BeginTx(ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }) if err != nil { err = supportErrors.Wrap(err, "Error starting ingestion read transaction") - problem.Render(r.Context(), w, err) + problem.Render(ctx, w, err) return } - defer session.Rollback() + defer session.Rollback(ctx) if !m.NoStateVerification { - stateInvalid, invalidErr := q.GetExpStateInvalid() + stateInvalid, invalidErr := q.GetExpStateInvalid(ctx) if invalidErr != nil { invalidErr = supportErrors.Wrap(invalidErr, "Error running GetExpStateInvalid") - problem.Render(r.Context(), w, invalidErr) + problem.Render(ctx, w, invalidErr) return } if stateInvalid { - problem.Render(r.Context(), w, problem.ServerError) + problem.Render(ctx, w, problem.ServerError) return } } - lastIngestedLedger, ready, err := ingestionStatus(q) + lastIngestedLedger, ready, err := ingestionStatus(ctx, q) if err != nil { - problem.Render(r.Context(), w, err) + problem.Render(ctx, w, err) return } if !m.NoStateVerification && !ready { - problem.Render(r.Context(), w, hProblem.StillIngesting) + problem.Render(ctx, w, hProblem.StillIngesting) return } @@ -325,9 +336,9 @@ func (m *StateMiddleware) WrapFunc(h http.HandlerFunc) http.HandlerFunc { // otherwise, the stream will not pick up updates occurring in future // ledgers if sseRequest { - if err = session.Rollback(); err != nil { + if err = session.Rollback(ctx); err != nil { problem.Render( - r.Context(), + ctx, w, supportErrors.Wrap( err, @@ -341,11 +352,7 @@ func (m *StateMiddleware) WrapFunc(h http.HandlerFunc) http.HandlerFunc { } h.ServeHTTP(w, r.WithContext( - context.WithValue( - r.Context(), - &horizonContext.SessionContextKey, - session, - ), + context.WithValue(ctx, &horizonContext.SessionContextKey, session), )) } } @@ -354,3 +361,51 @@ func (m *StateMiddleware) WrapFunc(h http.HandlerFunc) http.HandlerFunc { func (m *StateMiddleware) Wrap(h http.Handler) http.Handler { return m.WrapFunc(h.ServeHTTP) } + +type ReplicaSyncCheckMiddleware struct { + PrimaryHistoryQ *history.Q + ReplicaHistoryQ *history.Q + ServerMetrics *ServerMetrics +} + +// WrapFunc executes the middleware on a given HTTP handler function +func (m *ReplicaSyncCheckMiddleware) WrapFunc(h http.HandlerFunc) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + for attempt := 1; attempt <= 4; attempt++ { + primaryIngestLedger, err := m.PrimaryHistoryQ.GetLastLedgerIngestNonBlocking(r.Context()) + if err != nil { + problem.Render(r.Context(), w, err) + return + } + + replicaIngestLedger, err := m.ReplicaHistoryQ.GetLastLedgerIngestNonBlocking(r.Context()) + if err != nil { + problem.Render(r.Context(), w, err) + return + } + + if replicaIngestLedger >= primaryIngestLedger { + break + } + + switch attempt { + case 1: + time.Sleep(20 * time.Millisecond) + case 2: + time.Sleep(40 * time.Millisecond) + case 3: + time.Sleep(80 * time.Millisecond) + case 4: + problem.Render(r.Context(), w, hProblem.StaleHistory) + m.ServerMetrics.ReplicaLagErrorsCounter.Inc() + return + } + } + + h.ServeHTTP(w, r) + } +} + +func (m *ReplicaSyncCheckMiddleware) Wrap(h http.Handler) http.Handler { + return m.WrapFunc(h.ServeHTTP) +} diff --git a/services/horizon/internal/httpx/router.go b/services/horizon/internal/httpx/router.go index 966d70178c..27dd893b84 100644 --- a/services/horizon/internal/httpx/router.go +++ b/services/horizon/internal/httpx/router.go @@ -16,6 +16,7 @@ import ( "github.com/stellar/throttled" "github.com/stellar/go/services/horizon/internal/actions" + "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/services/horizon/internal/ledger" "github.com/stellar/go/services/horizon/internal/paths" "github.com/stellar/go/services/horizon/internal/render/sse" @@ -28,9 +29,10 @@ import ( const maxAssetsForPathFinding = 15 type RouterConfig struct { - DBSession *db.Session - TxSubmitter *txsub.System - RateQuota *throttled.RateQuota + DBSession db.SessionInterface + PrimaryDBSession db.SessionInterface + TxSubmitter *txsub.System + RateQuota *throttled.RateQuota BehindCloudflare bool BehindAWSLoadBalancer bool @@ -99,6 +101,15 @@ func (r *Router) addMiddleware(config *RouterConfig, r.Use(rateLimitter.RateLimit) } + if config.PrimaryDBSession != nil { + replicaSyncMiddleware := ReplicaSyncCheckMiddleware{ + PrimaryHistoryQ: &history.Q{config.PrimaryDBSession}, + ReplicaHistoryQ: &history.Q{config.DBSession}, + ServerMetrics: serverMetrics, + } + r.Use(replicaSyncMiddleware.Wrap) + } + // Internal middlewares r.Internal.Use(chimiddleware.StripSlashes) r.Internal.Use(chimiddleware.RequestID) @@ -128,12 +139,10 @@ func (r *Router) addRoutes(config *RouterConfig, rateLimiter *throttled.HTTPRate historyMiddleware := NewHistoryMiddleware(ledgerState, int32(config.StaleThreshold), config.DBSession) // State endpoints behind stateMiddleware r.Group(func(r chi.Router) { - r.Use(stateMiddleware.Wrap) - r.Route("/accounts", func(r chi.Router) { - r.Method(http.MethodGet, "/", restPageHandler(ledgerState, actions.GetAccountsHandler{LedgerState: ledgerState})) + r.With(stateMiddleware.Wrap).Method(http.MethodGet, "/", restPageHandler(ledgerState, actions.GetAccountsHandler{LedgerState: ledgerState})) r.Route("/{account_id}", func(r chi.Router) { - r.Method( + r.With(stateMiddleware.Wrap).Method( http.MethodGet, "/", streamableObjectActionHandler{ @@ -142,25 +151,25 @@ func (r *Router) addRoutes(config *RouterConfig, rateLimiter *throttled.HTTPRate }, ) accountData := actions.GetAccountDataHandler{} - r.Method(http.MethodGet, "/data/{key}", WrapRaw( + r.With(stateMiddleware.Wrap).Method(http.MethodGet, "/data/{key}", WrapRaw( streamableObjectActionHandler{streamHandler: streamHandler, action: accountData}, accountData, )) - r.Method(http.MethodGet, "/offers", streamableStatePageHandler(ledgerState, actions.GetAccountOffersHandler{LedgerState: ledgerState}, streamHandler)) + r.With(stateMiddleware.Wrap).Method(http.MethodGet, "/offers", streamableStatePageHandler(ledgerState, actions.GetAccountOffersHandler{LedgerState: ledgerState}, streamHandler)) }) }) r.Route("/claimable_balances", func(r chi.Router) { - r.Method(http.MethodGet, "/", restPageHandler(ledgerState, actions.GetClaimableBalancesHandler{LedgerState: ledgerState})) - r.Method(http.MethodGet, "/{id}", ObjectActionHandler{actions.GetClaimableBalanceByIDHandler{}}) + r.With(stateMiddleware.Wrap).Method(http.MethodGet, "/", restPageHandler(ledgerState, actions.GetClaimableBalancesHandler{LedgerState: ledgerState})) + r.With(stateMiddleware.Wrap).Method(http.MethodGet, "/{id}", ObjectActionHandler{actions.GetClaimableBalanceByIDHandler{}}) }) r.Route("/offers", func(r chi.Router) { - r.Method(http.MethodGet, "/", restPageHandler(ledgerState, actions.GetOffersHandler{LedgerState: ledgerState})) - r.Method(http.MethodGet, "/{offer_id}", ObjectActionHandler{actions.GetOfferByID{}}) + r.With(stateMiddleware.Wrap).Method(http.MethodGet, "/", restPageHandler(ledgerState, actions.GetOffersHandler{LedgerState: ledgerState})) + r.With(stateMiddleware.Wrap).Method(http.MethodGet, "/{offer_id}", ObjectActionHandler{actions.GetOfferByID{}}) }) - r.Method(http.MethodGet, "/assets", restPageHandler(ledgerState, actions.AssetStatsHandler{LedgerState: ledgerState})) + r.With(stateMiddleware.Wrap).Method(http.MethodGet, "/assets", restPageHandler(ledgerState, actions.AssetStatsHandler{LedgerState: ledgerState})) findPaths := ObjectActionHandler{actions.FindPathsHandler{ StaleThreshold: config.StaleThreshold, @@ -176,11 +185,11 @@ func (r *Router) addRoutes(config *RouterConfig, rateLimiter *throttled.HTTPRate PathFinder: config.PathFinder, }} - r.Method(http.MethodGet, "/paths", findPaths) - r.Method(http.MethodGet, "/paths/strict-receive", findPaths) - r.Method(http.MethodGet, "/paths/strict-send", findFixedPaths) + r.With(stateMiddleware.Wrap).Method(http.MethodGet, "/paths", findPaths) + r.With(stateMiddleware.Wrap).Method(http.MethodGet, "/paths/strict-receive", findPaths) + r.With(stateMiddleware.Wrap).Method(http.MethodGet, "/paths/strict-send", findFixedPaths) - r.Method( + r.With(stateMiddleware.Wrap).Method( http.MethodGet, "/order_book", streamableObjectActionHandler{ @@ -194,33 +203,31 @@ func (r *Router) addRoutes(config *RouterConfig, rateLimiter *throttled.HTTPRate // need to use absolute routes here. Make sure we use regexp check here for // emptiness. Without it, requesting `/accounts//payments` return all payments! r.Group(func(r chi.Router) { - r.Use(historyMiddleware) - r.Method(http.MethodGet, "/accounts/{account_id:\\w+}/effects", streamableHistoryPageHandler(ledgerState, actions.GetEffectsHandler{LedgerState: ledgerState}, streamHandler)) - r.Method(http.MethodGet, "/accounts/{account_id:\\w+}/operations", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ + r.With(historyMiddleware).Method(http.MethodGet, "/accounts/{account_id:\\w+}/effects", streamableHistoryPageHandler(ledgerState, actions.GetEffectsHandler{LedgerState: ledgerState}, streamHandler)) + r.With(historyMiddleware).Method(http.MethodGet, "/accounts/{account_id:\\w+}/operations", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ LedgerState: ledgerState, OnlyPayments: false, }, streamHandler)) - r.Method(http.MethodGet, "/accounts/{account_id:\\w+}/payments", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ + r.With(historyMiddleware).Method(http.MethodGet, "/accounts/{account_id:\\w+}/payments", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ LedgerState: ledgerState, OnlyPayments: true, }, streamHandler)) - r.Method(http.MethodGet, "/accounts/{account_id:\\w+}/trades", streamableHistoryPageHandler(ledgerState, actions.GetTradesHandler{LedgerState: ledgerState}, streamHandler)) - r.Method(http.MethodGet, "/accounts/{account_id:\\w+}/transactions", streamableHistoryPageHandler(ledgerState, actions.GetTransactionsHandler{LedgerState: ledgerState}, streamHandler)) + r.With(historyMiddleware).Method(http.MethodGet, "/accounts/{account_id:\\w+}/trades", streamableHistoryPageHandler(ledgerState, actions.GetTradesHandler{LedgerState: ledgerState}, streamHandler)) + r.With(historyMiddleware).Method(http.MethodGet, "/accounts/{account_id:\\w+}/transactions", streamableHistoryPageHandler(ledgerState, actions.GetTransactionsHandler{LedgerState: ledgerState}, streamHandler)) }) // ledger actions r.Route("/ledgers", func(r chi.Router) { - r.Use(historyMiddleware) - r.Method(http.MethodGet, "/", streamableHistoryPageHandler(ledgerState, actions.GetLedgersHandler{LedgerState: ledgerState}, streamHandler)) + r.With(historyMiddleware).Method(http.MethodGet, "/", streamableHistoryPageHandler(ledgerState, actions.GetLedgersHandler{LedgerState: ledgerState}, streamHandler)) r.Route("/{ledger_id}", func(r chi.Router) { - r.Method(http.MethodGet, "/", ObjectActionHandler{actions.GetLedgerByIDHandler{LedgerState: ledgerState}}) - r.Method(http.MethodGet, "/transactions", streamableHistoryPageHandler(ledgerState, actions.GetTransactionsHandler{LedgerState: ledgerState}, streamHandler)) + r.With(historyMiddleware).Method(http.MethodGet, "/", ObjectActionHandler{actions.GetLedgerByIDHandler{LedgerState: ledgerState}}) + r.With(historyMiddleware).Method(http.MethodGet, "/transactions", streamableHistoryPageHandler(ledgerState, actions.GetTransactionsHandler{LedgerState: ledgerState}, streamHandler)) r.Group(func(r chi.Router) { - r.Method(http.MethodGet, "/effects", streamableHistoryPageHandler(ledgerState, actions.GetEffectsHandler{LedgerState: ledgerState}, streamHandler)) - r.Method(http.MethodGet, "/operations", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ + r.With(historyMiddleware).Method(http.MethodGet, "/effects", streamableHistoryPageHandler(ledgerState, actions.GetEffectsHandler{LedgerState: ledgerState}, streamHandler)) + r.With(historyMiddleware).Method(http.MethodGet, "/operations", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ LedgerState: ledgerState, OnlyPayments: false, }, streamHandler)) - r.Method(http.MethodGet, "/payments", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ + r.With(historyMiddleware).Method(http.MethodGet, "/payments", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ LedgerState: ledgerState, OnlyPayments: true, }, streamHandler)) @@ -229,26 +236,24 @@ func (r *Router) addRoutes(config *RouterConfig, rateLimiter *throttled.HTTPRate }) // claimable balance actions r.Group(func(r chi.Router) { - r.Use(historyMiddleware) - r.Method(http.MethodGet, "/claimable_balances/{claimable_balance_id:\\w+}/operations", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ + r.With(historyMiddleware).Method(http.MethodGet, "/claimable_balances/{claimable_balance_id:\\w+}/operations", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ LedgerState: ledgerState, OnlyPayments: false, }, streamHandler)) - r.Method(http.MethodGet, "/claimable_balances/{claimable_balance_id:\\w+}/transactions", streamableHistoryPageHandler(ledgerState, actions.GetTransactionsHandler{LedgerState: ledgerState}, streamHandler)) + r.With(historyMiddleware).Method(http.MethodGet, "/claimable_balances/{claimable_balance_id:\\w+}/transactions", streamableHistoryPageHandler(ledgerState, actions.GetTransactionsHandler{LedgerState: ledgerState}, streamHandler)) }) // transaction history actions r.Route("/transactions", func(r chi.Router) { r.With(historyMiddleware).Method(http.MethodGet, "/", streamableHistoryPageHandler(ledgerState, actions.GetTransactionsHandler{LedgerState: ledgerState}, streamHandler)) r.Route("/{tx_id}", func(r chi.Router) { - r.Use(historyMiddleware) - r.Method(http.MethodGet, "/", ObjectActionHandler{actions.GetTransactionByHashHandler{}}) - r.Method(http.MethodGet, "/effects", streamableHistoryPageHandler(ledgerState, actions.GetEffectsHandler{LedgerState: ledgerState}, streamHandler)) - r.Method(http.MethodGet, "/operations", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ + r.With(historyMiddleware).Method(http.MethodGet, "/", ObjectActionHandler{actions.GetTransactionByHashHandler{}}) + r.With(historyMiddleware).Method(http.MethodGet, "/effects", streamableHistoryPageHandler(ledgerState, actions.GetEffectsHandler{LedgerState: ledgerState}, streamHandler)) + r.With(historyMiddleware).Method(http.MethodGet, "/operations", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ LedgerState: ledgerState, OnlyPayments: false, }, streamHandler)) - r.Method(http.MethodGet, "/payments", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ + r.With(historyMiddleware).Method(http.MethodGet, "/payments", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ LedgerState: ledgerState, OnlyPayments: true, }, streamHandler)) @@ -257,32 +262,30 @@ func (r *Router) addRoutes(config *RouterConfig, rateLimiter *throttled.HTTPRate // operation actions r.Route("/operations", func(r chi.Router) { - r.Use(historyMiddleware) - r.Method(http.MethodGet, "/", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ + r.With(historyMiddleware).Method(http.MethodGet, "/", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ LedgerState: ledgerState, OnlyPayments: false, }, streamHandler)) - r.Method(http.MethodGet, "/{id}", ObjectActionHandler{actions.GetOperationByIDHandler{LedgerState: ledgerState}}) - r.Method(http.MethodGet, "/{op_id}/effects", streamableHistoryPageHandler(ledgerState, actions.GetEffectsHandler{LedgerState: ledgerState}, streamHandler)) + r.With(historyMiddleware).Method(http.MethodGet, "/{id}", ObjectActionHandler{actions.GetOperationByIDHandler{LedgerState: ledgerState}}) + r.With(historyMiddleware).Method(http.MethodGet, "/{op_id}/effects", streamableHistoryPageHandler(ledgerState, actions.GetEffectsHandler{LedgerState: ledgerState}, streamHandler)) }) r.Group(func(r chi.Router) { - r.Use(historyMiddleware) // payment actions - r.Method(http.MethodGet, "/payments", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ + r.With(historyMiddleware).Method(http.MethodGet, "/payments", streamableHistoryPageHandler(ledgerState, actions.GetOperationsHandler{ LedgerState: ledgerState, OnlyPayments: true, }, streamHandler)) // effect actions - r.Method(http.MethodGet, "/effects", streamableHistoryPageHandler(ledgerState, actions.GetEffectsHandler{LedgerState: ledgerState}, streamHandler)) + r.With(historyMiddleware).Method(http.MethodGet, "/effects", streamableHistoryPageHandler(ledgerState, actions.GetEffectsHandler{LedgerState: ledgerState}, streamHandler)) // trading related endpoints - r.Method(http.MethodGet, "/trades", streamableHistoryPageHandler(ledgerState, actions.GetTradesHandler{LedgerState: ledgerState}, streamHandler)) - r.Method(http.MethodGet, "/trade_aggregations", ObjectActionHandler{actions.GetTradeAggregationsHandler{LedgerState: ledgerState}}) + r.With(historyMiddleware).Method(http.MethodGet, "/trades", streamableHistoryPageHandler(ledgerState, actions.GetTradesHandler{LedgerState: ledgerState}, streamHandler)) + r.With(historyMiddleware).Method(http.MethodGet, "/trade_aggregations", ObjectActionHandler{actions.GetTradeAggregationsHandler{LedgerState: ledgerState}}) // /offers/{offer_id} has been created above so we need to use absolute // routes here. - r.Method(http.MethodGet, "/offers/{offer_id}/trades", streamableHistoryPageHandler(ledgerState, actions.GetTradesHandler{LedgerState: ledgerState}, streamHandler)) + r.With(historyMiddleware).Method(http.MethodGet, "/offers/{offer_id}/trades", streamableHistoryPageHandler(ledgerState, actions.GetTradesHandler{LedgerState: ledgerState}, streamHandler)) }) // Transaction submission API diff --git a/services/horizon/internal/httpx/server.go b/services/horizon/internal/httpx/server.go index bdcd4a696e..87073ff563 100644 --- a/services/horizon/internal/httpx/server.go +++ b/services/horizon/internal/httpx/server.go @@ -22,7 +22,8 @@ import ( ) type ServerMetrics struct { - RequestDurationSummary *prometheus.SummaryVec + RequestDurationSummary *prometheus.SummaryVec + ReplicaLagErrorsCounter prometheus.Counter } type TLSConfig struct { @@ -67,6 +68,12 @@ func NewServer(serverConfig ServerConfig, routerConfig RouterConfig, ledgerState }, []string{"status", "route", "streaming", "method"}, ), + ReplicaLagErrorsCounter: prometheus.NewCounter( + prometheus.CounterOpts{ + Namespace: "horizon", Subsystem: "http", Name: "replica_lag_errors_count", + Help: "Count of HTTP errors returned due to replica lag", + }, + ), } router, err := NewRouter(&routerConfig, sm, ledgerState) if err != nil { diff --git a/services/horizon/internal/httpx/stream_handler_test.go b/services/horizon/internal/httpx/stream_handler_test.go index fa293ca479..ffc1149512 100644 --- a/services/horizon/internal/httpx/stream_handler_test.go +++ b/services/horizon/internal/httpx/stream_handler_test.go @@ -13,6 +13,7 @@ import ( "testing" "github.com/go-chi/chi" + "github.com/stretchr/testify/mock" "github.com/stellar/go/services/horizon/internal/actions" horizonContext "github.com/stellar/go/services/horizon/internal/context" @@ -477,17 +478,17 @@ func TestRepeatableReadStream(t *testing.T) { } session := &db.MockSession{} - session.On("BeginTx", &sql.TxOptions{ + session.On("BeginTx", mock.Anything, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - session.On("Rollback").Return(nil).Once() + session.On("Rollback", mock.Anything).Return(nil).Once() - session.On("BeginTx", &sql.TxOptions{ + session.On("BeginTx", mock.Anything, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - session.On("Rollback").Return(nil).Once() + session.On("Rollback", mock.Anything).Return(nil).Once() request := streamRequest(t, "limit=2") request = request.WithContext(context.WithValue( @@ -516,17 +517,17 @@ func TestRepeatableReadStream(t *testing.T) { } session := &db.MockSession{} - session.On("BeginTx", &sql.TxOptions{ + session.On("BeginTx", mock.Anything, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - session.On("Rollback").Return(nil).Once() + session.On("Rollback", mock.Anything).Return(nil).Once() - session.On("BeginTx", &sql.TxOptions{ + session.On("BeginTx", mock.Anything, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - session.On("Rollback").Return(nil).Once() + session.On("Rollback", mock.Anything).Return(nil).Once() request := streamRequest(t, "") request = request.WithContext(context.WithValue( diff --git a/services/horizon/internal/ingest/build_state_test.go b/services/horizon/internal/ingest/build_state_test.go index 72c73f563c..75e5c83c13 100644 --- a/services/horizon/internal/ingest/build_state_test.go +++ b/services/horizon/internal/ingest/build_state_test.go @@ -20,6 +20,7 @@ func TestBuildStateTestSuite(t *testing.T) { type BuildStateTestSuite struct { suite.Suite + ctx context.Context historyQ *mockDBQ historyAdapter *mockHistoryArchiveAdapter ledgerBackend *ledgerbackend.MockDatabaseBackend @@ -31,6 +32,7 @@ type BuildStateTestSuite struct { } func (s *BuildStateTestSuite) SetupTest() { + s.ctx = context.Background() s.historyQ = &mockDBQ{} s.runner = &mockProcessorsRunner{} s.historyAdapter = &mockHistoryArchiveAdapter{} @@ -39,7 +41,7 @@ func (s *BuildStateTestSuite) SetupTest() { s.checkpointLedger = uint32(63) s.lastLedger = 0 s.system = &system{ - ctx: context.Background(), + ctx: s.ctx, historyQ: s.historyQ, historyAdapter: s.historyAdapter, ledgerBackend: s.ledgerBackend, @@ -48,12 +50,12 @@ func (s *BuildStateTestSuite) SetupTest() { } s.system.initMetrics() - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("Rollback").Return(nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("Rollback", s.ctx).Return(nil).Once() - s.ledgerBackend.On("IsPrepared", ledgerbackend.UnboundedRange(63)).Return(false, nil).Once() - s.ledgerBackend.On("PrepareRange", ledgerbackend.UnboundedRange(63)).Return(nil).Once() - s.ledgerBackend.On("GetLedgerBlocking", uint32(63)).Return(xdr.LedgerCloseMeta{ + s.ledgerBackend.On("IsPrepared", s.ctx, ledgerbackend.UnboundedRange(63)).Return(false, nil).Once() + s.ledgerBackend.On("PrepareRange", s.ctx, ledgerbackend.UnboundedRange(63)).Return(nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(63)).Return(xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{ LedgerHeader: xdr.LedgerHeaderHistoryEntry{ Header: xdr.LedgerHeader{ @@ -76,11 +78,11 @@ func (s *BuildStateTestSuite) TearDownTest() { } func (s *BuildStateTestSuite) mockCommonHistoryQ() { - s.historyQ.On("GetLastLedgerIngest").Return(s.lastLedger, nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() - s.historyQ.On("UpdateLastLedgerIngest", s.lastLedger).Return(nil).Once() - s.historyQ.On("UpdateExpStateInvalid", false).Return(nil).Once() - s.historyQ.On("TruncateIngestStateTables").Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(s.lastLedger, nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, s.lastLedger).Return(nil).Once() + s.historyQ.On("UpdateExpStateInvalid", s.ctx, false).Return(nil).Once() + s.historyQ.On("TruncateIngestStateTables", s.ctx).Return(nil).Once() s.stellarCoreClient.On( "SetCursor", mock.AnythingOfType("*context.timerCtx"), @@ -105,8 +107,8 @@ func (s *BuildStateTestSuite) TestRangeNotPreparedFailPrepare() { *s.historyQ = mockDBQ{} *s.ledgerBackend = ledgerbackend.MockDatabaseBackend{} - s.ledgerBackend.On("IsPrepared", ledgerbackend.UnboundedRange(63)).Return(false, nil).Once() - s.ledgerBackend.On("PrepareRange", ledgerbackend.UnboundedRange(63)).Return(errors.New("my error")).Once() + s.ledgerBackend.On("IsPrepared", s.ctx, ledgerbackend.UnboundedRange(63)).Return(false, nil).Once() + s.ledgerBackend.On("PrepareRange", s.ctx, ledgerbackend.UnboundedRange(63)).Return(errors.New("my error")).Once() next, err := buildState{checkpointLedger: s.checkpointLedger}.run(s.system) @@ -120,9 +122,9 @@ func (s *BuildStateTestSuite) TestRangeNotPreparedSuccessPrepareGetLedgerFail() *s.historyQ = mockDBQ{} *s.ledgerBackend = ledgerbackend.MockDatabaseBackend{} - s.ledgerBackend.On("IsPrepared", ledgerbackend.UnboundedRange(63)).Return(false, nil).Once() - s.ledgerBackend.On("PrepareRange", ledgerbackend.UnboundedRange(63)).Return(nil).Once() - s.ledgerBackend.On("GetLedgerBlocking", uint32(63)).Return(xdr.LedgerCloseMeta{}, errors.New("my error")).Once() + s.ledgerBackend.On("IsPrepared", s.ctx, ledgerbackend.UnboundedRange(63)).Return(false, nil).Once() + s.ledgerBackend.On("PrepareRange", s.ctx, ledgerbackend.UnboundedRange(63)).Return(nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(63)).Return(xdr.LedgerCloseMeta{}, errors.New("my error")).Once() next, err := buildState{checkpointLedger: s.checkpointLedger}.run(s.system) @@ -134,7 +136,7 @@ func (s *BuildStateTestSuite) TestRangeNotPreparedSuccessPrepareGetLedgerFail() func (s *BuildStateTestSuite) TestBeginReturnsError() { // Recreate mock in this single test to remove assertions. *s.historyQ = mockDBQ{} - s.historyQ.On("Begin").Return(errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(errors.New("my error")).Once() next, err := buildState{checkpointLedger: s.checkpointLedger}.run(s.system) s.Assert().Error(err) @@ -143,7 +145,7 @@ func (s *BuildStateTestSuite) TestBeginReturnsError() { } func (s *BuildStateTestSuite) TestGetLastLedgerIngestReturnsError() { - s.historyQ.On("GetLastLedgerIngest").Return(s.lastLedger, errors.New("my error")).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(s.lastLedger, errors.New("my error")).Once() next, err := buildState{checkpointLedger: s.checkpointLedger}.run(s.system) s.Assert().Error(err) @@ -151,8 +153,8 @@ func (s *BuildStateTestSuite) TestGetLastLedgerIngestReturnsError() { s.Assert().Equal(transition{node: startState{}, sleepDuration: defaultSleep}, next) } func (s *BuildStateTestSuite) TestGetIngestVersionReturnsError() { - s.historyQ.On("GetLastLedgerIngest").Return(s.lastLedger, nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, errors.New("my error")).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(s.lastLedger, nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, errors.New("my error")).Once() next, err := buildState{checkpointLedger: s.checkpointLedger}.run(s.system) s.Assert().Error(err) @@ -161,8 +163,8 @@ func (s *BuildStateTestSuite) TestGetIngestVersionReturnsError() { } func (s *BuildStateTestSuite) TestAnotherInstanceHasCompletedBuildState() { - s.historyQ.On("GetLastLedgerIngest").Return(s.checkpointLedger, nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(s.checkpointLedger, nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() next, err := buildState{checkpointLedger: s.checkpointLedger}.run(s.system) s.Assert().NoError(err) @@ -170,9 +172,9 @@ func (s *BuildStateTestSuite) TestAnotherInstanceHasCompletedBuildState() { } func (s *BuildStateTestSuite) TestUpdateLastLedgerIngestReturnsError() { - s.historyQ.On("GetLastLedgerIngest").Return(s.lastLedger, nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() - s.historyQ.On("UpdateLastLedgerIngest", s.lastLedger).Return(errors.New("my error")).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(s.lastLedger, nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, s.lastLedger).Return(errors.New("my error")).Once() s.stellarCoreClient.On( "SetCursor", mock.AnythingOfType("*context.timerCtx"), @@ -188,10 +190,10 @@ func (s *BuildStateTestSuite) TestUpdateLastLedgerIngestReturnsError() { } func (s *BuildStateTestSuite) TestUpdateExpStateInvalidReturnsError() { - s.historyQ.On("GetLastLedgerIngest").Return(s.lastLedger, nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() - s.historyQ.On("UpdateLastLedgerIngest", s.lastLedger).Return(nil).Once() - s.historyQ.On("UpdateExpStateInvalid", false).Return(errors.New("my error")).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(s.lastLedger, nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, s.lastLedger).Return(nil).Once() + s.historyQ.On("UpdateExpStateInvalid", s.ctx, false).Return(errors.New("my error")).Once() s.stellarCoreClient.On( "SetCursor", mock.AnythingOfType("*context.timerCtx"), @@ -207,11 +209,11 @@ func (s *BuildStateTestSuite) TestUpdateExpStateInvalidReturnsError() { } func (s *BuildStateTestSuite) TestTruncateIngestStateTablesReturnsError() { - s.historyQ.On("GetLastLedgerIngest").Return(s.lastLedger, nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() - s.historyQ.On("UpdateLastLedgerIngest", s.lastLedger).Return(nil).Once() - s.historyQ.On("UpdateExpStateInvalid", false).Return(nil).Once() - s.historyQ.On("TruncateIngestStateTables").Return(errors.New("my error")).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(s.lastLedger, nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, s.lastLedger).Return(nil).Once() + s.historyQ.On("UpdateExpStateInvalid", s.ctx, false).Return(nil).Once() + s.historyQ.On("TruncateIngestStateTables", s.ctx).Return(errors.New("my error")).Once() s.stellarCoreClient.On( "SetCursor", @@ -244,11 +246,11 @@ func (s *BuildStateTestSuite) TestRunHistoryArchiveIngestionGenesisReturnsError( // Recreate mock in this single test to remove assertions. *s.ledgerBackend = ledgerbackend.MockDatabaseBackend{} - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() - s.historyQ.On("UpdateLastLedgerIngest", uint32(0)).Return(nil).Once() - s.historyQ.On("UpdateExpStateInvalid", false).Return(nil).Once() - s.historyQ.On("TruncateIngestStateTables").Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, uint32(0)).Return(nil).Once() + s.historyQ.On("UpdateExpStateInvalid", s.ctx, false).Return(nil).Once() + s.historyQ.On("TruncateIngestStateTables", s.ctx).Return(nil).Once() s.stellarCoreClient.On( "SetCursor", mock.AnythingOfType("*context.timerCtx"), @@ -273,10 +275,10 @@ func (s *BuildStateTestSuite) TestUpdateLastLedgerIngestAfterIngestReturnsError( On("RunHistoryArchiveIngestion", s.checkpointLedger, MaxSupportedProtocolVersion, xdr.Hash{1, 2, 3}). Return(ingest.StatsChangeProcessorResults{}, nil). Once() - s.historyQ.On("UpdateIngestVersion", CurrentVersion). + s.historyQ.On("UpdateIngestVersion", s.ctx, CurrentVersion). Return(nil). Once() - s.historyQ.On("UpdateLastLedgerIngest", s.checkpointLedger). + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, s.checkpointLedger). Return(errors.New("my error")). Once() next, err := buildState{checkpointLedger: s.checkpointLedger}.run(s.system) @@ -292,7 +294,7 @@ func (s *BuildStateTestSuite) TestUpdateIngestVersionIngestReturnsError() { On("RunHistoryArchiveIngestion", s.checkpointLedger, MaxSupportedProtocolVersion, xdr.Hash{1, 2, 3}). Return(ingest.StatsChangeProcessorResults{}, nil). Once() - s.historyQ.On("UpdateIngestVersion", CurrentVersion). + s.historyQ.On("UpdateIngestVersion", s.ctx, CurrentVersion). Return(errors.New("my error")). Once() next, err := buildState{checkpointLedger: s.checkpointLedger}.run(s.system) @@ -308,13 +310,13 @@ func (s *BuildStateTestSuite) TestUpdateCommitReturnsError() { On("RunHistoryArchiveIngestion", s.checkpointLedger, MaxSupportedProtocolVersion, xdr.Hash{1, 2, 3}). Return(ingest.StatsChangeProcessorResults{}, nil). Once() - s.historyQ.On("UpdateLastLedgerIngest", s.checkpointLedger). + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, s.checkpointLedger). Return(nil). Once() - s.historyQ.On("UpdateIngestVersion", CurrentVersion). + s.historyQ.On("UpdateIngestVersion", s.ctx, CurrentVersion). Return(nil). Once() - s.historyQ.On("Commit"). + s.historyQ.On("Commit", s.ctx). Return(errors.New("my error")). Once() next, err := buildState{checkpointLedger: s.checkpointLedger}.run(s.system) @@ -330,13 +332,13 @@ func (s *BuildStateTestSuite) TestBuildStateSucceeds() { On("RunHistoryArchiveIngestion", s.checkpointLedger, MaxSupportedProtocolVersion, xdr.Hash{1, 2, 3}). Return(ingest.StatsChangeProcessorResults{}, nil). Once() - s.historyQ.On("UpdateLastLedgerIngest", s.checkpointLedger). + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, s.checkpointLedger). Return(nil). Once() - s.historyQ.On("UpdateIngestVersion", CurrentVersion). + s.historyQ.On("UpdateIngestVersion", s.ctx, CurrentVersion). Return(nil). Once() - s.historyQ.On("Commit"). + s.historyQ.On("Commit", s.ctx). Return(nil). Once() @@ -358,13 +360,13 @@ func (s *BuildStateTestSuite) TestUpdateCommitReturnsErrorStop() { On("RunHistoryArchiveIngestion", s.checkpointLedger, MaxSupportedProtocolVersion, xdr.Hash{1, 2, 3}). Return(ingest.StatsChangeProcessorResults{}, nil). Once() - s.historyQ.On("UpdateLastLedgerIngest", s.checkpointLedger). + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, s.checkpointLedger). Return(nil). Once() - s.historyQ.On("UpdateIngestVersion", CurrentVersion). + s.historyQ.On("UpdateIngestVersion", s.ctx, CurrentVersion). Return(nil). Once() - s.historyQ.On("Commit"). + s.historyQ.On("Commit", s.ctx). Return(errors.New("my error")). Once() next, err := buildState{checkpointLedger: s.checkpointLedger, stop: true}.run(s.system) @@ -380,13 +382,13 @@ func (s *BuildStateTestSuite) TestBuildStateSucceedStop() { On("RunHistoryArchiveIngestion", s.checkpointLedger, MaxSupportedProtocolVersion, xdr.Hash{1, 2, 3}). Return(ingest.StatsChangeProcessorResults{}, nil). Once() - s.historyQ.On("UpdateLastLedgerIngest", s.checkpointLedger). + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, s.checkpointLedger). Return(nil). Once() - s.historyQ.On("UpdateIngestVersion", CurrentVersion). + s.historyQ.On("UpdateIngestVersion", s.ctx, CurrentVersion). Return(nil). Once() - s.historyQ.On("Commit"). + s.historyQ.On("Commit", s.ctx). Return(nil). Once() diff --git a/services/horizon/internal/ingest/database_backend_test.go b/services/horizon/internal/ingest/database_backend_test.go index 1290e3a0e9..69de728116 100644 --- a/services/horizon/internal/ingest/database_backend_test.go +++ b/services/horizon/internal/ingest/database_backend_test.go @@ -15,7 +15,7 @@ func TestGetLatestLedger(t *testing.T) { backend, err := ledgerbackend.NewDatabaseBackendFromSession(tt.CoreSession(), network.TestNetworkPassphrase) tt.Assert.NoError(err) - seq, err := backend.GetLatestLedgerSequence() + seq, err := backend.GetLatestLedgerSequence(tt.Ctx) tt.Assert.NoError(err) tt.Assert.Equal(uint32(3), seq) } @@ -30,6 +30,6 @@ func TestGetLatestLedgerNotFound(t *testing.T) { backend, err := ledgerbackend.NewDatabaseBackendFromSession(tt.CoreSession(), network.TestNetworkPassphrase) tt.Assert.NoError(err) - _, err = backend.GetLatestLedgerSequence() + _, err = backend.GetLatestLedgerSequence(tt.Ctx) tt.Assert.EqualError(err, "no ledgers exist in ledgerheaders table") } diff --git a/services/horizon/internal/ingest/db_integration_test.go b/services/horizon/internal/ingest/db_integration_test.go index 63a870d7b3..2857a277ef 100644 --- a/services/horizon/internal/ingest/db_integration_test.go +++ b/services/horizon/internal/ingest/db_integration_test.go @@ -3,6 +3,7 @@ package ingest import ( + "context" "io" "io/ioutil" "path/filepath" @@ -57,6 +58,7 @@ func TestDBTestSuite(t *testing.T) { type DBTestSuite struct { suite.Suite + ctx context.Context sampleFile string sequence uint32 ledgerBackend *ledgerbackend.MockDatabaseBackend @@ -87,6 +89,7 @@ func (s *DBTestSuite) SetupTest() { }) s.Assert().NoError(err) s.system = sIface.(*system) + s.ctx = s.system.ctx s.sequence = uint32(28660351) s.setupMocksForBuildState() @@ -99,7 +102,7 @@ func (s *DBTestSuite) SetupTest() { func (s *DBTestSuite) mockChangeReader() { changeReader, err := loadChanges(s.sampleFile) s.Assert().NoError(err) - s.historyAdapter.On("GetState", s.system.ctx, s.sequence). + s.historyAdapter.On("GetState", s.ctx, s.sequence). Return(ingest.ChangeReader(changeReader), nil).Once() } func (s *DBTestSuite) setupMocksForBuildState() { @@ -110,8 +113,8 @@ func (s *DBTestSuite) setupMocksForBuildState() { s.historyAdapter.On("BucketListHash", s.sequence). Return(checkpointHash, nil).Once() - s.ledgerBackend.On("IsPrepared", ledgerbackend.UnboundedRange(s.sequence)).Return(true, nil).Once() - s.ledgerBackend.On("GetLedgerBlocking", s.sequence). + s.ledgerBackend.On("IsPrepared", s.ctx, ledgerbackend.UnboundedRange(s.sequence)).Return(true, nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, s.sequence). Return( xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{ @@ -153,7 +156,7 @@ func (s *DBTestSuite) TestVersionMismatchTriggersRebuild() { s.TestBuildState() s.Assert().NoError( - s.system.historyQ.UpdateIngestVersion(CurrentVersion - 1), + s.system.historyQ.UpdateIngestVersion(context.Background(), CurrentVersion-1), ) s.setupMocksForBuildState() diff --git a/services/horizon/internal/ingest/fake_ledger_backend.go b/services/horizon/internal/ingest/fake_ledger_backend.go index b985e43569..74e82d8708 100644 --- a/services/horizon/internal/ingest/fake_ledger_backend.go +++ b/services/horizon/internal/ingest/fake_ledger_backend.go @@ -1,6 +1,8 @@ package ingest import ( + "context" + "github.com/stellar/go/ingest/ledgerbackend" "github.com/stellar/go/keypair" logpkg "github.com/stellar/go/support/log" @@ -12,15 +14,15 @@ type fakeLedgerBackend struct { changesPerTransaction int } -func (fakeLedgerBackend) GetLatestLedgerSequence() (uint32, error) { +func (fakeLedgerBackend) GetLatestLedgerSequence(ctx context.Context) (uint32, error) { return 1, nil } -func (fakeLedgerBackend) PrepareRange(r ledgerbackend.Range) error { +func (fakeLedgerBackend) PrepareRange(ctx context.Context, r ledgerbackend.Range) error { return nil } -func (fakeLedgerBackend) IsPrepared(r ledgerbackend.Range) (bool, error) { +func (fakeLedgerBackend) IsPrepared(ctx context.Context, r ledgerbackend.Range) (bool, error) { return true, nil } @@ -98,7 +100,7 @@ func fakeOffer(offerID int64) xdr.LedgerEntryChange { } } -func (f fakeLedgerBackend) GetLedger(sequence uint32) (bool, xdr.LedgerCloseMeta, error) { +func (f fakeLedgerBackend) getLedgerAsync(ctx context.Context, sequence uint32) (bool, xdr.LedgerCloseMeta, error) { ledgerCloseMeta := xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{ LedgerHeader: xdr.LedgerHeaderHistoryEntry{ @@ -199,8 +201,8 @@ func (f fakeLedgerBackend) GetLedger(sequence uint32) (bool, xdr.LedgerCloseMeta return true, ledgerCloseMeta, nil } -func (f *fakeLedgerBackend) GetLedgerBlocking(sequence uint32) (xdr.LedgerCloseMeta, error) { - _, meta, err := f.GetLedger(sequence) +func (f *fakeLedgerBackend) GetLedger(ctx context.Context, sequence uint32) (xdr.LedgerCloseMeta, error) { + _, meta, err := f.getLedgerAsync(ctx, sequence) return meta, err } diff --git a/services/horizon/internal/ingest/fsm.go b/services/horizon/internal/ingest/fsm.go index 0a8d7651b0..bfd6df15db 100644 --- a/services/horizon/internal/ingest/fsm.go +++ b/services/horizon/internal/ingest/fsm.go @@ -1,6 +1,7 @@ package ingest import ( + "context" "fmt" "strings" "time" @@ -111,18 +112,18 @@ func (startState) String() string { } func (state startState) run(s *system) (transition, error) { - if err := s.historyQ.Begin(); err != nil { + if err := s.historyQ.Begin(s.ctx); err != nil { return start(), errors.Wrap(err, "Error starting a transaction") } - defer s.historyQ.Rollback() + defer s.historyQ.Rollback(s.ctx) // This will get the value `FOR UPDATE`, blocking it for other nodes. - lastIngestedLedger, err := s.historyQ.GetLastLedgerIngest() + lastIngestedLedger, err := s.historyQ.GetLastLedgerIngest(s.ctx) if err != nil { return start(), errors.Wrap(err, getLastIngestedErrMsg) } - ingestVersion, err := s.historyQ.GetIngestVersion() + ingestVersion, err := s.historyQ.GetIngestVersion(s.ctx) if err != nil { return start(), errors.Wrap(err, getIngestVersionErrMsg) } @@ -135,7 +136,7 @@ func (state startState) run(s *system) (transition, error) { return stop(), nil } - lastHistoryLedger, err := s.historyQ.GetLatestHistoryLedger() + lastHistoryLedger, err := s.historyQ.GetLatestHistoryLedger(s.ctx) if err != nil { return start(), errors.Wrap(err, "Error getting last history ledger sequence") } @@ -188,11 +189,11 @@ func (state startState) run(s *system) (transition, error) { // Now it's on by default but the latest history ledger is greater // than the latest ingest ledger. We reset the exp ledger sequence // so init state will rebuild the state correctly. - err = s.historyQ.UpdateLastLedgerIngest(0) + err = s.historyQ.UpdateLastLedgerIngest(s.ctx, 0) if err != nil { return start(), errors.Wrap(err, updateLastLedgerIngestErrMsg) } - err = s.historyQ.Commit() + err = s.historyQ.Commit(s.ctx) if err != nil { return start(), errors.Wrap(err, commitErrMsg) } @@ -243,14 +244,14 @@ func (b buildState) run(s *system) (transition, error) { // ProcessorRunner.RunHistoryArchiveIngestion(). var ledgerCloseMeta xdr.LedgerCloseMeta if b.checkpointLedger != 1 { - err := s.maybePrepareRange(b.checkpointLedger) + err := s.maybePrepareRange(s.ctx, b.checkpointLedger) if err != nil { return nextFailState, err } log.WithField("ledger", b.checkpointLedger).Info("Waiting for ledger to be available in the backend...") startTime := time.Now() - ledgerCloseMeta, err = s.ledgerBackend.GetLedgerBlocking(b.checkpointLedger) + ledgerCloseMeta, err = s.ledgerBackend.GetLedger(s.ctx, b.checkpointLedger) if err != nil { return nextFailState, errors.Wrap(err, "error getting ledger blocking") } @@ -260,19 +261,19 @@ func (b buildState) run(s *system) (transition, error) { }).Info("Ledger returned from the backend") } - if err := s.historyQ.Begin(); err != nil { + if err := s.historyQ.Begin(s.ctx); err != nil { return nextFailState, errors.Wrap(err, "Error starting a transaction") } - defer s.historyQ.Rollback() + defer s.historyQ.Rollback(s.ctx) // We need to get this value `FOR UPDATE` so all other instances // are blocked. - lastIngestedLedger, err := s.historyQ.GetLastLedgerIngest() + lastIngestedLedger, err := s.historyQ.GetLastLedgerIngest(s.ctx) if err != nil { return nextFailState, errors.Wrap(err, getLastIngestedErrMsg) } - ingestVersion, err := s.historyQ.GetIngestVersion() + ingestVersion, err := s.historyQ.GetIngestVersion(s.ctx) if err != nil { return nextFailState, errors.Wrap(err, getIngestVersionErrMsg) } @@ -293,20 +294,20 @@ func (b buildState) run(s *system) (transition, error) { log.Info("Starting ingestion system from empty state...") // Clear last_ingested_ledger in key value store - err = s.historyQ.UpdateLastLedgerIngest(0) + err = s.historyQ.UpdateLastLedgerIngest(s.ctx, 0) if err != nil { return nextFailState, errors.Wrap(err, updateLastLedgerIngestErrMsg) } // Clear invalid state in key value store. It's possible that upgraded // ingestion is fixing it. - err = s.historyQ.UpdateExpStateInvalid(false) + err = s.historyQ.UpdateExpStateInvalid(s.ctx, false) if err != nil { return nextFailState, errors.Wrap(err, updateExpStateInvalidErrMsg) } // State tables should be empty. - err = s.historyQ.TruncateIngestStateTables() + err = s.historyQ.TruncateIngestStateTables(s.ctx) if err != nil { return nextFailState, errors.Wrap(err, "Error clearing ingest tables") } @@ -331,11 +332,11 @@ func (b buildState) run(s *system) (transition, error) { return nextFailState, errors.Wrap(err, "Error ingesting history archive") } - if err = s.historyQ.UpdateIngestVersion(CurrentVersion); err != nil { + if err = s.historyQ.UpdateIngestVersion(s.ctx, CurrentVersion); err != nil { return nextFailState, errors.Wrap(err, "Error updating ingestion version") } - if err = s.completeIngestion(b.checkpointLedger); err != nil { + if err = s.completeIngestion(s.ctx, b.checkpointLedger); err != nil { return nextFailState, err } @@ -371,14 +372,14 @@ func (r resumeState) run(s *system) (transition, error) { ingestLedger := r.latestSuccessfullyProcessedLedger + 1 - err := s.maybePrepareRange(ingestLedger) + err := s.maybePrepareRange(s.ctx, ingestLedger) if err != nil { return start(), err } log.WithField("ledger", ingestLedger).Info("Waiting for ledger to be available in the backend...") startTime := time.Now() - ledgerCloseMeta, err := s.ledgerBackend.GetLedgerBlocking(ingestLedger) + ledgerCloseMeta, err := s.ledgerBackend.GetLedger(s.ctx, ingestLedger) if err != nil { return start(), errors.Wrap(err, "error getting ledger blocking") } @@ -387,14 +388,14 @@ func (r resumeState) run(s *system) (transition, error) { "duration": time.Since(startTime).Seconds(), }).Info("Ledger returned from the backend") - if err = s.historyQ.Begin(); err != nil { + if err = s.historyQ.Begin(s.ctx); err != nil { return retryResume(r), errors.Wrap(err, "Error starting a transaction") } - defer s.historyQ.Rollback() + defer s.historyQ.Rollback(s.ctx) // This will get the value `FOR UPDATE`, blocking it for other nodes. - lastIngestedLedger, err := s.historyQ.GetLastLedgerIngest() + lastIngestedLedger, err := s.historyQ.GetLastLedgerIngest(s.ctx) if err != nil { return retryResume(r), errors.Wrap(err, getLastIngestedErrMsg) } @@ -411,7 +412,7 @@ func (r resumeState) run(s *system) (transition, error) { }), nil } - ingestVersion, err := s.historyQ.GetIngestVersion() + ingestVersion, err := s.historyQ.GetIngestVersion(s.ctx) if err != nil { return retryResume(r), errors.Wrap(err, getIngestVersionErrMsg) } @@ -424,7 +425,7 @@ func (r resumeState) run(s *system) (transition, error) { return start(), nil } - lastHistoryLedger, err := s.historyQ.GetLatestHistoryLedger() + lastHistoryLedger, err := s.historyQ.GetLatestHistoryLedger(s.ctx) if err != nil { return retryResume(r), errors.Wrap(err, "could not get latest history ledger") } @@ -455,7 +456,7 @@ func (r resumeState) run(s *system) (transition, error) { return retryResume(r), errors.Wrap(err, "Error running processors on ledger") } - if err = s.completeIngestion(ingestLedger); err != nil { + if err = s.completeIngestion(s.ctx, ingestLedger); err != nil { return retryResume(r), err } @@ -530,22 +531,22 @@ func (h historyRangeState) run(s *system) (transition, error) { return start(), errors.Errorf("invalid range: [%d, %d]", h.fromLedger, h.toLedger) } - err := s.maybePrepareRange(h.fromLedger) + err := s.maybePrepareRange(s.ctx, h.fromLedger) if err != nil { return start(), err } - if err = s.historyQ.Begin(); err != nil { + if err = s.historyQ.Begin(s.ctx); err != nil { return start(), errors.Wrap(err, "Error starting a transaction") } - defer s.historyQ.Rollback() + defer s.historyQ.Rollback(s.ctx) // acquire distributed lock so no one else can perform ingestion operations. - if _, err = s.historyQ.GetLastLedgerIngest(); err != nil { + if _, err = s.historyQ.GetLastLedgerIngest(s.ctx); err != nil { return start(), errors.Wrap(err, getLastIngestedErrMsg) } - lastHistoryLedger, err := s.historyQ.GetLatestHistoryLedger() + lastHistoryLedger, err := s.historyQ.GetLatestHistoryLedger(s.ctx) if err != nil { return start(), errors.Wrap(err, "could not get latest history ledger") } @@ -564,10 +565,10 @@ func (h historyRangeState) run(s *system) (transition, error) { log.WithField("ledger", cur).Info("Waiting for ledger to be available in the backend...") startTime := time.Now() - ledgerCloseMeta, err = s.ledgerBackend.GetLedgerBlocking(cur) + ledgerCloseMeta, err = s.ledgerBackend.GetLedger(s.ctx, cur) if err != nil { // Commit finished work in case of ledger backend error. - commitErr := s.historyQ.Commit() + commitErr := s.historyQ.Commit(s.ctx) if commitErr != nil { log.WithError(commitErr).Error("Error commiting partial range results") } else { @@ -586,7 +587,7 @@ func (h historyRangeState) run(s *system) (transition, error) { } } - if err = s.historyQ.Commit(); err != nil { + if err = s.historyQ.Commit(s.ctx); err != nil { return start(), errors.Wrap(err, commitErrMsg) } @@ -649,21 +650,17 @@ func (h reingestHistoryRangeState) ingestRange(s *system, fromLedger, toLedger u return errors.Wrap(err, "Invalid range") } - err = s.historyQ.DeleteRangeAll(start, end) + err = s.historyQ.DeleteRangeAll(s.ctx, start, end) if err != nil { return errors.Wrap(err, "error in DeleteRangeAll") } for cur := fromLedger; cur <= toLedger; cur++ { - exists, ledgerCloseMeta, err := s.ledgerBackend.GetLedger(cur) + ledgerCloseMeta, err := s.ledgerBackend.GetLedger(s.ctx, cur) if err != nil { return errors.Wrap(err, "error getting ledger") } - if !exists { - return errors.New("error getting ledger: ledger does not exist") - } - if err = runTransactionProcessorsOnLedger(s, ledgerCloseMeta); err != nil { return err } @@ -690,7 +687,7 @@ func (h reingestHistoryRangeState) run(s *system) (transition, error) { }).Info("Preparing ledger backend to retrieve range") startTime := time.Now() - err := s.ledgerBackend.PrepareRange(ledgerbackend.BoundedRange(h.fromLedger, h.toLedger)) + err := s.ledgerBackend.PrepareRange(s.ctx, ledgerbackend.BoundedRange(h.fromLedger, h.toLedger)) if err != nil { return stop(), errors.Wrap(err, "error preparing range") } @@ -704,13 +701,13 @@ func (h reingestHistoryRangeState) run(s *system) (transition, error) { startTime = time.Now() if h.force { - if err := s.historyQ.Begin(); err != nil { + if err := s.historyQ.Begin(s.ctx); err != nil { return stop(), errors.Wrap(err, "Error starting a transaction") } - defer s.historyQ.Rollback() + defer s.historyQ.Rollback(s.ctx) // acquire distributed lock so no one else can perform ingestion operations. - if _, err := s.historyQ.GetLastLedgerIngest(); err != nil { + if _, err := s.historyQ.GetLastLedgerIngest(s.ctx); err != nil { return stop(), errors.Wrap(err, getLastIngestedErrMsg) } @@ -718,11 +715,11 @@ func (h reingestHistoryRangeState) run(s *system) (transition, error) { return stop(), err } - if err := s.historyQ.Commit(); err != nil { + if err := s.historyQ.Commit(s.ctx); err != nil { return stop(), errors.Wrap(err, commitErrMsg) } } else { - lastIngestedLedger, err := s.historyQ.GetLastLedgerIngestNonBlocking() + lastIngestedLedger, err := s.historyQ.GetLastLedgerIngestNonBlocking(s.ctx) if err != nil { return stop(), errors.Wrap(err, getLastIngestedErrMsg) } @@ -733,10 +730,10 @@ func (h reingestHistoryRangeState) run(s *system) (transition, error) { for cur := h.fromLedger; cur <= h.toLedger; cur++ { err := func(ledger uint32) error { - if err := s.historyQ.Begin(); err != nil { + if err := s.historyQ.Begin(s.ctx); err != nil { return errors.Wrap(err, "Error starting a transaction") } - defer s.historyQ.Rollback() + defer s.historyQ.Rollback(s.ctx) // ingest each ledger in a separate transaction to prevent deadlocks // when acquiring ShareLocks from multiple parallel reingest range processes @@ -744,7 +741,7 @@ func (h reingestHistoryRangeState) run(s *system) (transition, error) { return err } - if err := s.historyQ.Commit(); err != nil { + if err := s.historyQ.Commit(s.ctx); err != nil { return errors.Wrap(err, commitErrMsg) } @@ -798,14 +795,14 @@ func (v verifyRangeState) run(s *system) (transition, error) { return stop(), errors.Errorf("invalid range: [%d, %d]", v.fromLedger, v.toLedger) } - if err := s.historyQ.Begin(); err != nil { + if err := s.historyQ.Begin(s.ctx); err != nil { err = errors.Wrap(err, "Error starting a transaction") return stop(), err } - defer s.historyQ.Rollback() + defer s.historyQ.Rollback(s.ctx) // Simple check if DB clean - lastIngestedLedger, err := s.historyQ.GetLastLedgerIngest() + lastIngestedLedger, err := s.historyQ.GetLastLedgerIngest(s.ctx) if err != nil { err = errors.Wrap(err, getLastIngestedErrMsg) return stop(), err @@ -819,7 +816,7 @@ func (v verifyRangeState) run(s *system) (transition, error) { log.WithField("ledger", v.fromLedger).Info("Preparing range") startTime := time.Now() - err = s.ledgerBackend.PrepareRange(ledgerbackend.BoundedRange(v.fromLedger, v.toLedger)) + err = s.ledgerBackend.PrepareRange(s.ctx, ledgerbackend.BoundedRange(v.fromLedger, v.toLedger)) if err != nil { return stop(), errors.Wrap(err, "Error preparing range") } @@ -832,15 +829,11 @@ func (v verifyRangeState) run(s *system) (transition, error) { log.WithField("ledger", v.fromLedger).Info("Processing state") startTime = time.Now() - exists, ledgerCloseMeta, err := s.ledgerBackend.GetLedger(v.fromLedger) + ledgerCloseMeta, err := s.ledgerBackend.GetLedger(s.ctx, v.fromLedger) if err != nil { return stop(), errors.Wrap(err, "error getting ledger") } - if !exists { - return stop(), errors.New("error getting ledger: ledger does not exist") - } - stats, err := s.runner.RunHistoryArchiveIngestion( ledgerCloseMeta.LedgerSequence(), ledgerCloseMeta.ProtocolVersion(), @@ -851,7 +844,7 @@ func (v verifyRangeState) run(s *system) (transition, error) { return stop(), err } - if err = s.completeIngestion(v.fromLedger); err != nil { + if err = s.completeIngestion(s.ctx, v.fromLedger); err != nil { return stop(), err } @@ -872,22 +865,17 @@ func (v verifyRangeState) run(s *system) (transition, error) { }).Info("Processing ledger") startTime := time.Now() - if err = s.historyQ.Begin(); err != nil { + if err = s.historyQ.Begin(s.ctx); err != nil { err = errors.Wrap(err, "Error starting a transaction") return stop(), err } - var exists bool var ledgerCloseMeta xdr.LedgerCloseMeta - exists, ledgerCloseMeta, err = s.ledgerBackend.GetLedger(sequence) + ledgerCloseMeta, err = s.ledgerBackend.GetLedger(s.ctx, sequence) if err != nil { return stop(), errors.Wrap(err, "error getting ledger") } - if !exists { - return stop(), errors.New("error getting ledger: ledger does not exist") - } - var changeStats ingest.StatsChangeProcessorResults var ledgerTransactionStats processors.StatsLedgerTransactionProcessorResults changeStats, _, ledgerTransactionStats, _, err = @@ -897,7 +885,7 @@ func (v verifyRangeState) run(s *system) (transition, error) { return stop(), err } - if err = s.completeIngestion(sequence); err != nil { + if err = s.completeIngestion(s.ctx, sequence); err != nil { return stop(), err } @@ -928,14 +916,14 @@ func (stressTestState) String() string { } func (stressTestState) run(s *system) (transition, error) { - if err := s.historyQ.Begin(); err != nil { + if err := s.historyQ.Begin(s.ctx); err != nil { err = errors.Wrap(err, "Error starting a transaction") return stop(), err } - defer s.historyQ.Rollback() + defer s.historyQ.Rollback(s.ctx) // Simple check if DB clean - lastIngestedLedger, err := s.historyQ.GetLastLedgerIngest() + lastIngestedLedger, err := s.historyQ.GetLastLedgerIngest(s.ctx) if err != nil { err = errors.Wrap(err, getLastIngestedErrMsg) return stop(), err @@ -958,22 +946,18 @@ func (stressTestState) run(s *system) (transition, error) { }).Info("Processing ledger") startTime := time.Now() - exists, ledgerCloseMeta, err := s.ledgerBackend.GetLedger(sequence) + ledgerCloseMeta, err := s.ledgerBackend.GetLedger(s.ctx, sequence) if err != nil { return stop(), errors.Wrap(err, "error getting ledger") } - if !exists { - return stop(), errors.New("error getting ledger: ledger does not exist") - } - changeStats, _, ledgerTransactionStats, _, err := s.runner.RunAllProcessorsOnLedger(ledgerCloseMeta) if err != nil { err = errors.Wrap(err, "Error running processors on ledger") return stop(), err } - if err = s.completeIngestion(sequence); err != nil { + if err = s.completeIngestion(s.ctx, sequence); err != nil { return stop(), err } @@ -995,17 +979,17 @@ func (stressTestState) run(s *system) (transition, error) { return stop(), nil } -func (s *system) completeIngestion(ledger uint32) error { +func (s *system) completeIngestion(ctx context.Context, ledger uint32) error { if ledger == 0 { return errors.New("ledger must be positive") } - if err := s.historyQ.UpdateLastLedgerIngest(ledger); err != nil { + if err := s.historyQ.UpdateLastLedgerIngest(ctx, ledger); err != nil { err = errors.Wrap(err, updateLastLedgerIngestErrMsg) return err } - if err := s.historyQ.Commit(); err != nil { + if err := s.historyQ.Commit(ctx); err != nil { return errors.Wrap(err, commitErrMsg) } @@ -1013,10 +997,10 @@ func (s *system) completeIngestion(ledger uint32) error { } // maybePrepareRange checks if the range is prepared and, if not, prepares it. -func (s *system) maybePrepareRange(from uint32) error { +func (s *system) maybePrepareRange(ctx context.Context, from uint32) error { ledgerRange := ledgerbackend.UnboundedRange(from) - prepared, err := s.ledgerBackend.IsPrepared(ledgerRange) + prepared, err := s.ledgerBackend.IsPrepared(ctx, ledgerRange) if err != nil { return errors.Wrap(err, "error checking prepared range") } @@ -1025,7 +1009,7 @@ func (s *system) maybePrepareRange(from uint32) error { log.WithFields(logpkg.F{"from": from}).Info("Preparing range") startTime := time.Now() - err = s.ledgerBackend.PrepareRange(ledgerRange) + err = s.ledgerBackend.PrepareRange(ctx, ledgerRange) if err != nil { return errors.Wrap(err, "error preparing range") } diff --git a/services/horizon/internal/ingest/group_processors.go b/services/horizon/internal/ingest/group_processors.go index d2389676cc..b35f940a6b 100644 --- a/services/horizon/internal/ingest/group_processors.go +++ b/services/horizon/internal/ingest/group_processors.go @@ -1,6 +1,7 @@ package ingest import ( + "context" "fmt" "time" @@ -26,10 +27,10 @@ func newGroupChangeProcessors(processors []horizonChangeProcessor) *groupChangeP } } -func (g groupChangeProcessors) ProcessChange(change ingest.Change) error { +func (g groupChangeProcessors) ProcessChange(ctx context.Context, change ingest.Change) error { for _, p := range g.processors { startTime := time.Now() - if err := p.ProcessChange(change); err != nil { + if err := p.ProcessChange(ctx, change); err != nil { return errors.Wrapf(err, "error in %T.ProcessChange", p) } g.AddRunDuration(fmt.Sprintf("%T", p), startTime) @@ -37,10 +38,10 @@ func (g groupChangeProcessors) ProcessChange(change ingest.Change) error { return nil } -func (g groupChangeProcessors) Commit() error { +func (g groupChangeProcessors) Commit(ctx context.Context) error { for _, p := range g.processors { startTime := time.Now() - if err := p.Commit(); err != nil { + if err := p.Commit(ctx); err != nil { return errors.Wrapf(err, "error in %T.Commit", p) } g.AddRunDuration(fmt.Sprintf("%T", p), startTime) @@ -60,10 +61,10 @@ func newGroupTransactionProcessors(processors []horizonTransactionProcessor) *gr } } -func (g groupTransactionProcessors) ProcessTransaction(tx ingest.LedgerTransaction) error { +func (g groupTransactionProcessors) ProcessTransaction(ctx context.Context, tx ingest.LedgerTransaction) error { for _, p := range g.processors { startTime := time.Now() - if err := p.ProcessTransaction(tx); err != nil { + if err := p.ProcessTransaction(ctx, tx); err != nil { return errors.Wrapf(err, "error in %T.ProcessTransaction", p) } g.AddRunDuration(fmt.Sprintf("%T", p), startTime) @@ -71,10 +72,10 @@ func (g groupTransactionProcessors) ProcessTransaction(tx ingest.LedgerTransacti return nil } -func (g groupTransactionProcessors) Commit() error { +func (g groupTransactionProcessors) Commit(ctx context.Context) error { for _, p := range g.processors { startTime := time.Now() - if err := p.Commit(); err != nil { + if err := p.Commit(ctx); err != nil { return errors.Wrapf(err, "error in %T.Commit", p) } g.AddRunDuration(fmt.Sprintf("%T", p), startTime) diff --git a/services/horizon/internal/ingest/group_processors_test.go b/services/horizon/internal/ingest/group_processors_test.go index eaa357fa80..6848c24a66 100644 --- a/services/horizon/internal/ingest/group_processors_test.go +++ b/services/horizon/internal/ingest/group_processors_test.go @@ -3,6 +3,7 @@ package ingest import ( + "context" "errors" "testing" @@ -18,13 +19,13 @@ type mockHorizonChangeProcessor struct { mock.Mock } -func (m *mockHorizonChangeProcessor) ProcessChange(change ingest.Change) error { - args := m.Called(change) +func (m *mockHorizonChangeProcessor) ProcessChange(ctx context.Context, change ingest.Change) error { + args := m.Called(ctx, change) return args.Error(0) } -func (m *mockHorizonChangeProcessor) Commit() error { - args := m.Called() +func (m *mockHorizonChangeProcessor) Commit(ctx context.Context) error { + args := m.Called(ctx) return args.Error(0) } @@ -34,18 +35,19 @@ type mockHorizonTransactionProcessor struct { mock.Mock } -func (m *mockHorizonTransactionProcessor) ProcessTransaction(transaction ingest.LedgerTransaction) error { - args := m.Called(transaction) +func (m *mockHorizonTransactionProcessor) ProcessTransaction(ctx context.Context, transaction ingest.LedgerTransaction) error { + args := m.Called(ctx, transaction) return args.Error(0) } -func (m *mockHorizonTransactionProcessor) Commit() error { - args := m.Called() +func (m *mockHorizonTransactionProcessor) Commit(ctx context.Context) error { + args := m.Called(ctx) return args.Error(0) } type GroupChangeProcessorsTestSuiteLedger struct { suite.Suite + ctx context.Context processors *groupChangeProcessors processorA *mockHorizonChangeProcessor processorB *mockHorizonChangeProcessor @@ -56,6 +58,7 @@ func TestGroupChangeProcessorsTestSuiteLedger(t *testing.T) { } func (s *GroupChangeProcessorsTestSuiteLedger) SetupTest() { + s.ctx = context.Background() s.processorA = &mockHorizonChangeProcessor{} s.processorB = &mockHorizonChangeProcessor{} s.processors = newGroupChangeProcessors([]horizonChangeProcessor{ @@ -72,10 +75,10 @@ func (s *GroupChangeProcessorsTestSuiteLedger) TearDownTest() { func (s *GroupChangeProcessorsTestSuiteLedger) TestProcessChangeFails() { change := ingest.Change{} s.processorA. - On("ProcessChange", change). + On("ProcessChange", s.ctx, change). Return(errors.New("transient error")).Once() - err := s.processors.ProcessChange(change) + err := s.processors.ProcessChange(s.ctx, change) s.Assert().Error(err) s.Assert().EqualError(err, "error in *ingest.mockHorizonChangeProcessor.ProcessChange: transient error") } @@ -83,40 +86,41 @@ func (s *GroupChangeProcessorsTestSuiteLedger) TestProcessChangeFails() { func (s *GroupChangeProcessorsTestSuiteLedger) TestProcessChangeSucceeds() { change := ingest.Change{} s.processorA. - On("ProcessChange", change). + On("ProcessChange", s.ctx, change). Return(nil).Once() s.processorB. - On("ProcessChange", change). + On("ProcessChange", s.ctx, change). Return(nil).Once() - err := s.processors.ProcessChange(change) + err := s.processors.ProcessChange(s.ctx, change) s.Assert().NoError(err) } func (s *GroupChangeProcessorsTestSuiteLedger) TestCommitFails() { s.processorA. - On("Commit"). + On("Commit", s.ctx). Return(errors.New("transient error")).Once() - err := s.processors.Commit() + err := s.processors.Commit(s.ctx) s.Assert().Error(err) s.Assert().EqualError(err, "error in *ingest.mockHorizonChangeProcessor.Commit: transient error") } func (s *GroupChangeProcessorsTestSuiteLedger) TestCommitSucceeds() { s.processorA. - On("Commit"). + On("Commit", s.ctx). Return(nil).Once() s.processorB. - On("Commit"). + On("Commit", s.ctx). Return(nil).Once() - err := s.processors.Commit() + err := s.processors.Commit(s.ctx) s.Assert().NoError(err) } type GroupTransactionProcessorsTestSuiteLedger struct { suite.Suite + ctx context.Context processors *groupTransactionProcessors processorA *mockHorizonTransactionProcessor processorB *mockHorizonTransactionProcessor @@ -127,6 +131,7 @@ func TestGroupTransactionProcessorsTestSuiteLedger(t *testing.T) { } func (s *GroupTransactionProcessorsTestSuiteLedger) SetupTest() { + s.ctx = context.Background() s.processorA = &mockHorizonTransactionProcessor{} s.processorB = &mockHorizonTransactionProcessor{} s.processors = newGroupTransactionProcessors([]horizonTransactionProcessor{ @@ -143,10 +148,10 @@ func (s *GroupTransactionProcessorsTestSuiteLedger) TearDownTest() { func (s *GroupTransactionProcessorsTestSuiteLedger) TestProcessTransactionFails() { transaction := ingest.LedgerTransaction{} s.processorA. - On("ProcessTransaction", transaction). + On("ProcessTransaction", s.ctx, transaction). Return(errors.New("transient error")).Once() - err := s.processors.ProcessTransaction(transaction) + err := s.processors.ProcessTransaction(s.ctx, transaction) s.Assert().Error(err) s.Assert().EqualError(err, "error in *ingest.mockHorizonTransactionProcessor.ProcessTransaction: transient error") } @@ -154,34 +159,34 @@ func (s *GroupTransactionProcessorsTestSuiteLedger) TestProcessTransactionFails( func (s *GroupTransactionProcessorsTestSuiteLedger) TestProcessTransactionSucceeds() { transaction := ingest.LedgerTransaction{} s.processorA. - On("ProcessTransaction", transaction). + On("ProcessTransaction", s.ctx, transaction). Return(nil).Once() s.processorB. - On("ProcessTransaction", transaction). + On("ProcessTransaction", s.ctx, transaction). Return(nil).Once() - err := s.processors.ProcessTransaction(transaction) + err := s.processors.ProcessTransaction(s.ctx, transaction) s.Assert().NoError(err) } func (s *GroupTransactionProcessorsTestSuiteLedger) TestCommitFails() { s.processorA. - On("Commit"). + On("Commit", s.ctx). Return(errors.New("transient error")).Once() - err := s.processors.Commit() + err := s.processors.Commit(s.ctx) s.Assert().Error(err) s.Assert().EqualError(err, "error in *ingest.mockHorizonTransactionProcessor.Commit: transient error") } func (s *GroupTransactionProcessorsTestSuiteLedger) TestCommitSucceeds() { s.processorA. - On("Commit"). + On("Commit", s.ctx). Return(nil).Once() s.processorB. - On("Commit"). + On("Commit", s.ctx). Return(nil).Once() - err := s.processors.Commit() + err := s.processors.Commit(s.ctx) s.Assert().NoError(err) } diff --git a/services/horizon/internal/ingest/ingest_history_range_state_test.go b/services/horizon/internal/ingest/ingest_history_range_state_test.go index f6a5b8181b..9e29d7d635 100644 --- a/services/horizon/internal/ingest/ingest_history_range_state_test.go +++ b/services/horizon/internal/ingest/ingest_history_range_state_test.go @@ -22,6 +22,7 @@ func TestIngestHistoryRangeStateTestSuite(t *testing.T) { type IngestHistoryRangeStateTestSuite struct { suite.Suite + ctx context.Context historyQ *mockDBQ historyAdapter *mockHistoryArchiveAdapter ledgerBackend *ledgerbackend.MockDatabaseBackend @@ -30,12 +31,13 @@ type IngestHistoryRangeStateTestSuite struct { } func (s *IngestHistoryRangeStateTestSuite) SetupTest() { + s.ctx = context.Background() s.historyQ = &mockDBQ{} s.ledgerBackend = &ledgerbackend.MockDatabaseBackend{} s.historyAdapter = &mockHistoryArchiveAdapter{} s.runner = &mockProcessorsRunner{} s.system = &system{ - ctx: context.Background(), + ctx: s.ctx, historyQ: s.historyQ, historyAdapter: s.historyAdapter, ledgerBackend: s.ledgerBackend, @@ -43,10 +45,10 @@ func (s *IngestHistoryRangeStateTestSuite) SetupTest() { } s.system.initMetrics() - s.historyQ.On("Rollback").Return(nil).Once() + s.historyQ.On("Rollback", s.ctx).Return(nil).Once() - s.ledgerBackend.On("IsPrepared", ledgerbackend.UnboundedRange(100)).Return(false, nil).Once() - s.ledgerBackend.On("PrepareRange", ledgerbackend.UnboundedRange(100)).Return(nil).Once() + s.ledgerBackend.On("IsPrepared", s.ctx, ledgerbackend.UnboundedRange(100)).Return(false, nil).Once() + s.ledgerBackend.On("PrepareRange", s.ctx, ledgerbackend.UnboundedRange(100)).Return(nil).Once() } func (s *IngestHistoryRangeStateTestSuite) TearDownTest() { @@ -88,8 +90,8 @@ func (s *IngestHistoryRangeStateTestSuite) TestRangeNotPreparedFailPrepare() { *s.historyQ = mockDBQ{} *s.ledgerBackend = ledgerbackend.MockDatabaseBackend{} - s.ledgerBackend.On("IsPrepared", ledgerbackend.UnboundedRange(100)).Return(false, nil).Once() - s.ledgerBackend.On("PrepareRange", ledgerbackend.UnboundedRange(100)).Return(errors.New("my error")).Once() + s.ledgerBackend.On("IsPrepared", s.ctx, ledgerbackend.UnboundedRange(100)).Return(false, nil).Once() + s.ledgerBackend.On("PrepareRange", s.ctx, ledgerbackend.UnboundedRange(100)).Return(errors.New("my error")).Once() next, err := historyRangeState{fromLedger: 100, toLedger: 200}.run(s.system) s.Assert().Error(err) @@ -101,7 +103,7 @@ func (s *IngestHistoryRangeStateTestSuite) TestBeginReturnsError() { // Recreate mock in this single test to remove Rollback assertion. *s.historyQ = mockDBQ{} - s.historyQ.On("Begin").Return(errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(errors.New("my error")).Once() next, err := historyRangeState{fromLedger: 100, toLedger: 200}.run(s.system) s.Assert().Error(err) @@ -110,8 +112,8 @@ func (s *IngestHistoryRangeStateTestSuite) TestBeginReturnsError() { } func (s *IngestHistoryRangeStateTestSuite) TestGetLastLedgerIngestReturnsError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), errors.New("my error")).Once() next, err := historyRangeState{fromLedger: 100, toLedger: 200}.run(s.system) s.Assert().Error(err) @@ -120,9 +122,9 @@ func (s *IngestHistoryRangeStateTestSuite) TestGetLastLedgerIngestReturnsError() } func (s *IngestHistoryRangeStateTestSuite) TestGetLatestLedgerReturnsError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(0), errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(0), errors.New("my error")).Once() next, err := historyRangeState{fromLedger: 100, toLedger: 200}.run(s.system) s.Assert().Error(err) @@ -133,9 +135,9 @@ func (s *IngestHistoryRangeStateTestSuite) TestGetLatestLedgerReturnsError() { // TestAnotherNodeIngested tests the case when another node has ingested the range. // In such case we go back to `init` state without processing. func (s *IngestHistoryRangeStateTestSuite) TestAnotherNodeIngested() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(200), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(200), nil).Once() next, err := historyRangeState{fromLedger: 100, toLedger: 200}.run(s.system) s.Assert().NoError(err) @@ -143,9 +145,9 @@ func (s *IngestHistoryRangeStateTestSuite) TestAnotherNodeIngested() { } func (s *IngestHistoryRangeStateTestSuite) TestRunTransactionProcessorsOnLedgerReturnsError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(99), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(99), nil).Once() meta := xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{ @@ -156,7 +158,7 @@ func (s *IngestHistoryRangeStateTestSuite) TestRunTransactionProcessorsOnLedgerR }, }, } - s.ledgerBackend.On("GetLedgerBlocking", uint32(100)).Return(meta, nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(100)).Return(meta, nil).Once() s.runner.On("RunTransactionProcessorsOnLedger", meta).Return( processors.StatsLedgerTransactionProcessorResults{}, @@ -171,9 +173,9 @@ func (s *IngestHistoryRangeStateTestSuite) TestRunTransactionProcessorsOnLedgerR } func (s *IngestHistoryRangeStateTestSuite) TestSuccess() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(99), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(99), nil).Once() for i := 100; i <= 200; i++ { meta := xdr.LedgerCloseMeta{ @@ -185,7 +187,7 @@ func (s *IngestHistoryRangeStateTestSuite) TestSuccess() { }, }, } - s.ledgerBackend.On("GetLedgerBlocking", uint32(i)).Return(meta, nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(i)).Return(meta, nil).Once() s.runner.On("RunTransactionProcessorsOnLedger", meta).Return( processors.StatsLedgerTransactionProcessorResults{}, @@ -194,7 +196,7 @@ func (s *IngestHistoryRangeStateTestSuite) TestSuccess() { ).Once() } - s.historyQ.On("Commit").Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(nil).Once() next, err := historyRangeState{fromLedger: 100, toLedger: 200}.run(s.system) s.Assert().NoError(err) @@ -202,9 +204,9 @@ func (s *IngestHistoryRangeStateTestSuite) TestSuccess() { } func (s *IngestHistoryRangeStateTestSuite) TestSuccessOneLedger() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(99), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(99), nil).Once() meta := xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{ @@ -215,7 +217,7 @@ func (s *IngestHistoryRangeStateTestSuite) TestSuccessOneLedger() { }, }, } - s.ledgerBackend.On("GetLedgerBlocking", uint32(100)).Return(meta, nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(100)).Return(meta, nil).Once() s.runner.On("RunTransactionProcessorsOnLedger", meta).Return( processors.StatsLedgerTransactionProcessorResults{}, @@ -223,7 +225,7 @@ func (s *IngestHistoryRangeStateTestSuite) TestSuccessOneLedger() { nil, ).Once() - s.historyQ.On("Commit").Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(nil).Once() next, err := historyRangeState{fromLedger: 100, toLedger: 100}.run(s.system) s.Assert().NoError(err) @@ -231,9 +233,9 @@ func (s *IngestHistoryRangeStateTestSuite) TestSuccessOneLedger() { } func (s *IngestHistoryRangeStateTestSuite) TestCommitsWorkOnLedgerBackendFailure() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(99), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(99), nil).Once() meta := xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{ @@ -244,8 +246,8 @@ func (s *IngestHistoryRangeStateTestSuite) TestCommitsWorkOnLedgerBackendFailure }, }, } - s.ledgerBackend.On("GetLedgerBlocking", uint32(100)).Return(meta, nil).Once() - s.ledgerBackend.On("GetLedgerBlocking", uint32(101)). + s.ledgerBackend.On("GetLedger", s.ctx, uint32(100)).Return(meta, nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(101)). Return(xdr.LedgerCloseMeta{}, errors.New("my error")).Once() s.runner.On("RunTransactionProcessorsOnLedger", meta).Return( @@ -254,7 +256,7 @@ func (s *IngestHistoryRangeStateTestSuite) TestCommitsWorkOnLedgerBackendFailure nil, ).Once() - s.historyQ.On("Commit").Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(nil).Once() next, err := historyRangeState{fromLedger: 100, toLedger: 102}.run(s.system) s.Assert().Error(err) @@ -268,6 +270,7 @@ func TestReingestHistoryRangeStateTestSuite(t *testing.T) { type ReingestHistoryRangeStateTestSuite struct { suite.Suite + ctx context.Context historyQ *mockDBQ historyAdapter *mockHistoryArchiveAdapter ledgerBackend *mockLedgerBackend @@ -276,12 +279,13 @@ type ReingestHistoryRangeStateTestSuite struct { } func (s *ReingestHistoryRangeStateTestSuite) SetupTest() { + s.ctx = context.Background() s.historyQ = &mockDBQ{} s.historyAdapter = &mockHistoryArchiveAdapter{} s.ledgerBackend = &mockLedgerBackend{} s.runner = &mockProcessorsRunner{} s.system = &system{ - ctx: context.Background(), + ctx: s.ctx, historyQ: s.historyQ, historyAdapter: s.historyAdapter, ledgerBackend: s.ledgerBackend, @@ -289,10 +293,10 @@ func (s *ReingestHistoryRangeStateTestSuite) SetupTest() { } s.historyQ.On("GetTx").Return(nil).Once() - s.historyQ.On("Rollback").Return(nil).Once() - s.historyQ.On("Begin").Return(nil).Once() + s.historyQ.On("Rollback", s.ctx).Return(nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() - s.ledgerBackend.On("PrepareRange", ledgerbackend.BoundedRange(100, 200)).Return(nil).Once() + s.ledgerBackend.On("PrepareRange", s.ctx, ledgerbackend.BoundedRange(100, 200)).Return(nil).Once() } func (s *ReingestHistoryRangeStateTestSuite) TearDownTest() { @@ -324,9 +328,9 @@ func (s *ReingestHistoryRangeStateTestSuite) TestBeginReturnsError() { // Recreate mock in this single test to remove Rollback assertion. *s.historyQ = mockDBQ{} s.historyQ.On("GetTx").Return(nil) - s.historyQ.On("GetLastLedgerIngestNonBlocking").Return(uint32(0), nil).Once() + s.historyQ.On("GetLastLedgerIngestNonBlocking", s.ctx).Return(uint32(0), nil).Once() - s.historyQ.On("Begin").Return(errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(errors.New("my error")).Once() err := s.system.ReingestRange(100, 200, false) s.Assert().EqualError(err, "Error starting a transaction: my error") @@ -336,7 +340,7 @@ func (s *ReingestHistoryRangeStateTestSuite) TestGetLastLedgerIngestNonBlockingE *s.historyQ = mockDBQ{} s.historyQ.On("GetTx").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngestNonBlocking").Return(uint32(0), errors.New("my error")).Once() + s.historyQ.On("GetLastLedgerIngestNonBlocking", s.ctx).Return(uint32(0), errors.New("my error")).Once() err := s.system.ReingestRange(100, 200, false) s.Assert().EqualError(err, "Error getting last ingested ledger: my error") @@ -346,7 +350,7 @@ func (s *ReingestHistoryRangeStateTestSuite) TestReingestRangeOverlaps() { *s.historyQ = mockDBQ{} s.historyQ.On("GetTx").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngestNonBlocking").Return(uint32(190), nil).Once() + s.historyQ.On("GetLastLedgerIngestNonBlocking", s.ctx).Return(uint32(190), nil).Once() err := s.system.ReingestRange(100, 200, false) s.Assert().Equal(err, ErrReingestRangeConflict) @@ -356,7 +360,7 @@ func (s *ReingestHistoryRangeStateTestSuite) TestReingestRangeOverlapsAtEnd() { *s.historyQ = mockDBQ{} s.historyQ.On("GetTx").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngestNonBlocking").Return(uint32(200), nil).Once() + s.historyQ.On("GetLastLedgerIngestNonBlocking", s.ctx).Return(uint32(200), nil).Once() err := s.system.ReingestRange(100, 200, false) s.Assert().Equal(err, ErrReingestRangeConflict) @@ -365,17 +369,17 @@ func (s *ReingestHistoryRangeStateTestSuite) TestReingestRangeOverlapsAtEnd() { func (s *ReingestHistoryRangeStateTestSuite) TestClearHistoryFails() { *s.historyQ = mockDBQ{} s.historyQ.On("GetTx").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngestNonBlocking").Return(uint32(0), nil).Once() + s.historyQ.On("GetLastLedgerIngestNonBlocking", s.ctx).Return(uint32(0), nil).Once() - s.historyQ.On("Begin").Return(nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() s.historyQ.On("GetTx").Return(&sqlx.Tx{}).Once() toidFrom := toid.New(100, 0, 0) toidTo := toid.New(101, 0, 0) s.historyQ.On( - "DeleteRangeAll", toidFrom.ToInt64(), toidTo.ToInt64(), + "DeleteRangeAll", s.ctx, toidFrom.ToInt64(), toidTo.ToInt64(), ).Return(errors.New("my error")).Once() - s.historyQ.On("Rollback").Return(nil).Once() + s.historyQ.On("Rollback", s.ctx).Return(nil).Once() err := s.system.ReingestRange(100, 200, false) s.Assert().EqualError(err, "error in DeleteRangeAll: my error") @@ -384,14 +388,14 @@ func (s *ReingestHistoryRangeStateTestSuite) TestClearHistoryFails() { func (s *ReingestHistoryRangeStateTestSuite) TestRunTransactionProcessorsOnLedgerReturnsError() { *s.historyQ = mockDBQ{} s.historyQ.On("GetTx").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngestNonBlocking").Return(uint32(0), nil).Once() + s.historyQ.On("GetLastLedgerIngestNonBlocking", s.ctx).Return(uint32(0), nil).Once() - s.historyQ.On("Begin").Return(nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() s.historyQ.On("GetTx").Return(&sqlx.Tx{}).Once() toidFrom := toid.New(100, 0, 0) toidTo := toid.New(101, 0, 0) s.historyQ.On( - "DeleteRangeAll", toidFrom.ToInt64(), toidTo.ToInt64(), + "DeleteRangeAll", s.ctx, toidFrom.ToInt64(), toidTo.ToInt64(), ).Return(nil).Once() meta := xdr.LedgerCloseMeta{ @@ -403,7 +407,7 @@ func (s *ReingestHistoryRangeStateTestSuite) TestRunTransactionProcessorsOnLedge }, }, } - s.ledgerBackend.On("GetLedger", uint32(100)).Return(true, meta, nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(100)).Return(meta, nil).Once() s.runner.On("RunTransactionProcessorsOnLedger", meta). Return( @@ -411,7 +415,7 @@ func (s *ReingestHistoryRangeStateTestSuite) TestRunTransactionProcessorsOnLedge processorsRunDurations{}, errors.New("my error"), ).Once() - s.historyQ.On("Rollback").Return(nil).Once() + s.historyQ.On("Rollback", s.ctx).Return(nil).Once() err := s.system.ReingestRange(100, 200, false) s.Assert().EqualError(err, "error processing ledger sequence=100: my error") @@ -420,14 +424,14 @@ func (s *ReingestHistoryRangeStateTestSuite) TestRunTransactionProcessorsOnLedge func (s *ReingestHistoryRangeStateTestSuite) TestCommitFails() { *s.historyQ = mockDBQ{} s.historyQ.On("GetTx").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngestNonBlocking").Return(uint32(0), nil).Once() + s.historyQ.On("GetLastLedgerIngestNonBlocking", s.ctx).Return(uint32(0), nil).Once() - s.historyQ.On("Begin").Return(nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() s.historyQ.On("GetTx").Return(&sqlx.Tx{}).Once() toidFrom := toid.New(100, 0, 0) toidTo := toid.New(101, 0, 0) s.historyQ.On( - "DeleteRangeAll", toidFrom.ToInt64(), toidTo.ToInt64(), + "DeleteRangeAll", s.ctx, toidFrom.ToInt64(), toidTo.ToInt64(), ).Return(nil).Once() meta := xdr.LedgerCloseMeta{ @@ -439,7 +443,7 @@ func (s *ReingestHistoryRangeStateTestSuite) TestCommitFails() { }, }, } - s.ledgerBackend.On("GetLedger", uint32(100)).Return(true, meta, nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(100)).Return(meta, nil).Once() s.runner.On("RunTransactionProcessorsOnLedger", meta).Return( processors.StatsLedgerTransactionProcessorResults{}, @@ -447,8 +451,8 @@ func (s *ReingestHistoryRangeStateTestSuite) TestCommitFails() { nil, ).Once() - s.historyQ.On("Commit").Return(errors.New("my error")).Once() - s.historyQ.On("Rollback").Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(errors.New("my error")).Once() + s.historyQ.On("Rollback", s.ctx).Return(nil).Once() err := s.system.ReingestRange(100, 200, false) s.Assert().EqualError(err, "Error committing db transaction: my error") @@ -457,16 +461,16 @@ func (s *ReingestHistoryRangeStateTestSuite) TestCommitFails() { func (s *ReingestHistoryRangeStateTestSuite) TestSuccess() { *s.historyQ = mockDBQ{} s.historyQ.On("GetTx").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngestNonBlocking").Return(uint32(0), nil).Once() + s.historyQ.On("GetLastLedgerIngestNonBlocking", s.ctx).Return(uint32(0), nil).Once() for i := uint32(100); i <= uint32(200); i++ { - s.historyQ.On("Begin").Return(nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() s.historyQ.On("GetTx").Return(&sqlx.Tx{}).Once() toidFrom := toid.New(int32(i), 0, 0) toidTo := toid.New(int32(i+1), 0, 0) s.historyQ.On( - "DeleteRangeAll", toidFrom.ToInt64(), toidTo.ToInt64(), + "DeleteRangeAll", s.ctx, toidFrom.ToInt64(), toidTo.ToInt64(), ).Return(nil).Once() meta := xdr.LedgerCloseMeta{ @@ -478,7 +482,7 @@ func (s *ReingestHistoryRangeStateTestSuite) TestSuccess() { }, }, } - s.ledgerBackend.On("GetLedger", uint32(i)).Return(true, meta, nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(i)).Return(meta, nil).Once() s.runner.On("RunTransactionProcessorsOnLedger", meta).Return( processors.StatsLedgerTransactionProcessorResults{}, @@ -486,8 +490,8 @@ func (s *ReingestHistoryRangeStateTestSuite) TestSuccess() { nil, ).Once() - s.historyQ.On("Commit").Return(nil).Once() - s.historyQ.On("Rollback").Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(nil).Once() + s.historyQ.On("Rollback", s.ctx).Return(nil).Once() } err := s.system.ReingestRange(100, 200, false) @@ -495,13 +499,13 @@ func (s *ReingestHistoryRangeStateTestSuite) TestSuccess() { } func (s *ReingestHistoryRangeStateTestSuite) TestSuccessOneLedger() { - s.historyQ.On("GetLastLedgerIngestNonBlocking").Return(uint32(0), nil).Once() + s.historyQ.On("GetLastLedgerIngestNonBlocking", s.ctx).Return(uint32(0), nil).Once() s.historyQ.On("GetTx").Return(&sqlx.Tx{}).Once() toidFrom := toid.New(100, 0, 0) toidTo := toid.New(101, 0, 0) s.historyQ.On( - "DeleteRangeAll", toidFrom.ToInt64(), toidTo.ToInt64(), + "DeleteRangeAll", s.ctx, toidFrom.ToInt64(), toidTo.ToInt64(), ).Return(nil).Once() meta := xdr.LedgerCloseMeta{ @@ -519,33 +523,33 @@ func (s *ReingestHistoryRangeStateTestSuite) TestSuccessOneLedger() { processorsRunDurations{}, nil, ).Once() - s.historyQ.On("Commit").Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(nil).Once() // Recreate mock in this single test to remove previous assertion. *s.ledgerBackend = mockLedgerBackend{} - s.ledgerBackend.On("PrepareRange", ledgerbackend.BoundedRange(100, 100)).Return(nil).Once() - s.ledgerBackend.On("GetLedger", uint32(100)).Return(true, meta, nil).Once() + s.ledgerBackend.On("PrepareRange", s.ctx, ledgerbackend.BoundedRange(100, 100)).Return(nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(100)).Return(meta, nil).Once() err := s.system.ReingestRange(100, 100, false) s.Assert().NoError(err) } func (s *ReingestHistoryRangeStateTestSuite) TestGetLastLedgerIngestError() { - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), errors.New("my error")).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), errors.New("my error")).Once() err := s.system.ReingestRange(100, 200, true) s.Assert().EqualError(err, "Error getting last ingested ledger: my error") } func (s *ReingestHistoryRangeStateTestSuite) TestReingestRangeForce() { - s.historyQ.On("GetLastLedgerIngest").Return(uint32(190), nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(190), nil).Once() s.historyQ.On("GetTx").Return(&sqlx.Tx{}).Once() toidFrom := toid.New(100, 0, 0) toidTo := toid.New(201, 0, 0) s.historyQ.On( - "DeleteRangeAll", toidFrom.ToInt64(), toidTo.ToInt64(), + "DeleteRangeAll", s.ctx, toidFrom.ToInt64(), toidTo.ToInt64(), ).Return(nil).Once() for i := 100; i <= 200; i++ { @@ -558,7 +562,7 @@ func (s *ReingestHistoryRangeStateTestSuite) TestReingestRangeForce() { }, }, } - s.ledgerBackend.On("GetLedger", uint32(i)).Return(true, meta, nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(i)).Return(meta, nil).Once() s.runner.On("RunTransactionProcessorsOnLedger", meta).Return( processors.StatsLedgerTransactionProcessorResults{}, @@ -567,7 +571,7 @@ func (s *ReingestHistoryRangeStateTestSuite) TestReingestRangeForce() { ).Once() } - s.historyQ.On("Commit").Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(nil).Once() err := s.system.ReingestRange(100, 200, true) s.Assert().NoError(err) diff --git a/services/horizon/internal/ingest/init_state_test.go b/services/horizon/internal/ingest/init_state_test.go index c5858fa494..a209cab7fb 100644 --- a/services/horizon/internal/ingest/init_state_test.go +++ b/services/horizon/internal/ingest/init_state_test.go @@ -16,22 +16,24 @@ func TestInitStateTestSuite(t *testing.T) { type InitStateTestSuite struct { suite.Suite + ctx context.Context historyQ *mockDBQ historyAdapter *mockHistoryArchiveAdapter system *system } func (s *InitStateTestSuite) SetupTest() { + s.ctx = context.Background() s.historyQ = &mockDBQ{} s.historyAdapter = &mockHistoryArchiveAdapter{} s.system = &system{ - ctx: context.Background(), + ctx: s.ctx, historyQ: s.historyQ, historyAdapter: s.historyAdapter, } s.system.initMetrics() - s.historyQ.On("Rollback").Return(nil).Once() + s.historyQ.On("Rollback", s.ctx).Return(nil).Once() } func (s *InitStateTestSuite) TearDownTest() { @@ -43,7 +45,7 @@ func (s *InitStateTestSuite) TearDownTest() { func (s *InitStateTestSuite) TestBeginReturnsError() { // Recreate mock in this single test to remove Rollback assertion. *s.historyQ = mockDBQ{} - s.historyQ.On("Begin").Return(errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(errors.New("my error")).Once() next, err := startState{}.run(s.system) s.Assert().Error(err) @@ -52,8 +54,8 @@ func (s *InitStateTestSuite) TestBeginReturnsError() { } func (s *InitStateTestSuite) TestGetLastLedgerIngestReturnsError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), errors.New("my error")).Once() next, err := startState{}.run(s.system) s.Assert().Error(err) @@ -62,9 +64,9 @@ func (s *InitStateTestSuite) TestGetLastLedgerIngestReturnsError() { } func (s *InitStateTestSuite) TestGetIngestVersionReturnsError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() - s.historyQ.On("GetIngestVersion").Return(0, errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(0, errors.New("my error")).Once() next, err := startState{}.run(s.system) s.Assert().Error(err) @@ -73,9 +75,9 @@ func (s *InitStateTestSuite) TestGetIngestVersionReturnsError() { } func (s *InitStateTestSuite) TestCurrentVersionIsOutdated() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(1), nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion+1, nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(1), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion+1, nil).Once() next, err := startState{}.run(s.system) s.Assert().NoError(err) @@ -83,10 +85,10 @@ func (s *InitStateTestSuite) TestCurrentVersionIsOutdated() { } func (s *InitStateTestSuite) TestGetLatestLedgerReturnsError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() - s.historyQ.On("GetIngestVersion").Return(0, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(0), errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(0, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(0), errors.New("my error")).Once() next, err := startState{}.run(s.system) s.Assert().Error(err) @@ -95,10 +97,10 @@ func (s *InitStateTestSuite) TestGetLatestLedgerReturnsError() { } func (s *InitStateTestSuite) TestBuildStateEmptyDatabase() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() - s.historyQ.On("GetIngestVersion").Return(0, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(0), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(0, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(0), nil).Once() s.historyAdapter.On("GetLatestLedgerSequence").Return(uint32(63), nil).Once() @@ -111,10 +113,10 @@ func (s *InitStateTestSuite) TestBuildStateEmptyDatabase() { } func (s *InitStateTestSuite) TestBuildStateEmptyDatabaseFromSuggestedCheckpoint() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() - s.historyQ.On("GetIngestVersion").Return(0, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(0), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(0, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(0), nil).Once() next, err := startState{suggestedCheckpoint: 127}.run(s.system) s.Assert().NoError(err) @@ -128,10 +130,10 @@ func (s *InitStateTestSuite) TestBuildStateEmptyDatabaseFromSuggestedCheckpoint( // * the ingest system version has been incremented or no ingest ledger, // * the old system is in front of the latest checkpoint. func (s *InitStateTestSuite) TestBuildStateWait() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(100), nil).Once() - s.historyQ.On("GetIngestVersion").Return(0, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(100), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(100), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(0, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(100), nil).Once() s.historyAdapter.On("GetLatestLedgerSequence").Return(uint32(63), nil).Once() @@ -147,10 +149,10 @@ func (s *InitStateTestSuite) TestBuildStateWait() { // * the ingest system version has been incremented or no ingest ledger, // * the old system is behind the latest checkpoint. func (s *InitStateTestSuite) TestBuildStateCatchup() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(100), nil).Once() - s.historyQ.On("GetIngestVersion").Return(0, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(100), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(100), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(0, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(100), nil).Once() s.historyAdapter.On("GetLatestLedgerSequence").Return(uint32(127), nil).Once() @@ -169,10 +171,10 @@ func (s *InitStateTestSuite) TestBuildStateCatchup() { // * the ingest system version has been incremented or no ingest ledger, // * the old system latest ledger is equal to the latest checkpoint. func (s *InitStateTestSuite) TestBuildStateOldHistory() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(127), nil).Once() - s.historyQ.On("GetIngestVersion").Return(0, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(127), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(127), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(0, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(127), nil).Once() s.historyAdapter.On("GetLatestLedgerSequence").Return(uint32(127), nil).Once() @@ -191,13 +193,13 @@ func (s *InitStateTestSuite) TestBuildStateOldHistory() { // * state doesn't need to be rebuilt, // * history is in front of ingest. func (s *InitStateTestSuite) TestResumeStateInFront() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(100), nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(130), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(100), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(130), nil).Once() - s.historyQ.On("UpdateLastLedgerIngest", uint32(0)).Return(nil).Once() - s.historyQ.On("Commit").Return(nil).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, uint32(0)).Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(nil).Once() next, err := startState{}.run(s.system) s.Assert().NoError(err) @@ -208,10 +210,10 @@ func (s *InitStateTestSuite) TestResumeStateInFront() { // * state doesn't need to be rebuilt, // * history is behind of ingest. func (s *InitStateTestSuite) TestResumeStateBehind() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(130), nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(100), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(130), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(100), nil).Once() next, err := startState{}.run(s.system) s.Assert().NoError(err) @@ -229,10 +231,10 @@ func (s *InitStateTestSuite) TestResumeStateBehind() { // * there are no ledgers in history tables. // In such case we load offers and continue ingesting the next ledger. func (s *InitStateTestSuite) TestResumeStateBehindHistory0() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(130), nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(0), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(130), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(0), nil).Once() next, err := startState{}.run(s.system) s.Assert().NoError(err) @@ -249,10 +251,10 @@ func (s *InitStateTestSuite) TestResumeStateBehindHistory0() { // * state doesn't need to be rebuilt, // * history is in sync with ingest. func (s *InitStateTestSuite) TestResumeStateSync() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(130), nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(130), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(130), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(130), nil).Once() next, err := startState{}.run(s.system) s.Assert().NoError(err) diff --git a/services/horizon/internal/ingest/main.go b/services/horizon/internal/ingest/main.go index 79feb9a44e..b75bb64ca6 100644 --- a/services/horizon/internal/ingest/main.go +++ b/services/horizon/internal/ingest/main.go @@ -66,20 +66,17 @@ const ( var log = logpkg.DefaultLogger.WithField("service", "ingest") type Config struct { - CoreSession *db.Session - StellarCoreURL string - StellarCoreCursor string - EnableCaptiveCore bool - CaptiveCoreBinaryPath string - CaptiveCoreStoragePath string - CaptiveCoreConfigAppendPath string - CaptiveCoreHTTPPort uint - CaptiveCorePeerPort uint - CaptiveCoreLogPath string - RemoteCaptiveCoreURL string - NetworkPassphrase string - - HistorySession *db.Session + CoreSession db.SessionInterface + StellarCoreURL string + StellarCoreCursor string + EnableCaptiveCore bool + CaptiveCoreBinaryPath string + CaptiveCoreStoragePath string + CaptiveCoreToml *ledgerbackend.CaptiveCoreToml + RemoteCaptiveCoreURL string + NetworkPassphrase string + + HistorySession db.SessionInterface HistoryArchiveURL string DisableStateVerification bool @@ -197,12 +194,9 @@ func NewSystem(config Config) (System, error) { logger := log.WithField("subservice", "stellar-core") ledgerBackend, err = ledgerbackend.NewCaptive( ledgerbackend.CaptiveCoreConfig{ - LogPath: config.CaptiveCoreLogPath, BinaryPath: config.CaptiveCoreBinaryPath, StoragePath: config.CaptiveCoreStoragePath, - ConfigAppendPath: config.CaptiveCoreConfigAppendPath, - HTTPPort: config.CaptiveCoreHTTPPort, - PeerPort: config.CaptiveCorePeerPort, + Toml: config.CaptiveCoreToml, NetworkPassphrase: config.NetworkPassphrase, HistoryArchiveURLs: []string{config.HistoryArchiveURL}, CheckpointFrequency: config.CheckpointFrequency, @@ -218,7 +212,6 @@ func NewSystem(config Config) (System, error) { } } else { coreSession := config.CoreSession.Clone() - coreSession.Ctx = ctx ledgerBackend, err = ledgerbackend.NewDatabaseBackendFromSession(coreSession, config.NetworkPassphrase) if err != nil { cancel() @@ -227,7 +220,6 @@ func NewSystem(config Config) (System, error) { } historyQ := &history.Q{config.HistorySession.Clone()} - historyQ.Ctx = ctx historyAdapter := newHistoryArchiveAdapter(archive) @@ -279,7 +271,7 @@ func (s *system) initMetrics() { Help: "equals 1 if state invalid, 0 otherwise", }, func() float64 { - invalid, err := s.historyQ.CloneIngestionQ().GetExpStateInvalid() + invalid, err := s.historyQ.CloneIngestionQ().GetExpStateInvalid(s.ctx) if err != nil { log.WithError(err).Error("Error in initMetrics/GetExpStateInvalid") return 0 @@ -314,7 +306,7 @@ func (s *system) initMetrics() { Help: "1 if sync, 0 if not synced, -1 if unable to connect or HTTP server disabled.", }, func() float64 { - if !s.config.EnableCaptiveCore || s.config.CaptiveCoreHTTPPort == 0 { + if !s.config.EnableCaptiveCore || (s.config.CaptiveCoreToml.HTTPPort == 0) { return -1 } @@ -322,7 +314,7 @@ func (s *system) initMetrics() { HTTP: &http.Client{ Timeout: 2 * time.Second, }, - URL: fmt.Sprintf("http://localhost:%d", s.config.CaptiveCoreHTTPPort), + URL: fmt.Sprintf("http://localhost:%d", s.config.CaptiveCoreToml.HTTPPort), } info, err := client.Info(s.ctx) @@ -487,7 +479,7 @@ func (s *system) runStateMachine(cur stateMachineNode) error { } func (s *system) maybeVerifyState(lastIngestedLedger uint32) { - stateInvalid, err := s.historyQ.GetExpStateInvalid() + stateInvalid, err := s.historyQ.GetExpStateInvalid(s.ctx) if err != nil && !isCancelledError(err) { log.WithField("err", err).Error("Error getting state invalid value") } @@ -509,7 +501,7 @@ func (s *system) maybeVerifyState(lastIngestedLedger uint32) { errorCount := s.incrementStateVerificationErrors() switch errors.Cause(err).(type) { case ingest.StateError: - markStateInvalid(s.historyQ, err) + markStateInvalid(s.ctx, s.historyQ, err) default: logger := log.WithField("err", err).Warn if errorCount >= stateVerificationErrorThreshold { @@ -572,10 +564,10 @@ func (s *system) Shutdown() { } } -func markStateInvalid(historyQ history.IngestionQ, err error) { +func markStateInvalid(ctx context.Context, historyQ history.IngestionQ, err error) { log.WithField("err", err).Error("STATE IS INVALID!") q := historyQ.CloneIngestionQ() - if err := q.UpdateExpStateInvalid(true); err != nil { + if err := q.UpdateExpStateInvalid(ctx, true); err != nil { log.WithField("err", err).Error(updateExpStateInvalidErrMsg) } } diff --git a/services/horizon/internal/ingest/main_test.go b/services/horizon/internal/ingest/main_test.go index 92d99262d6..764c4765a0 100644 --- a/services/horizon/internal/ingest/main_test.go +++ b/services/horizon/internal/ingest/main_test.go @@ -79,14 +79,8 @@ func TestCheckVerifyStateVersion(t *testing.T) { func TestNewSystem(t *testing.T) { config := Config{ - CoreSession: &db.Session{ - DB: &sqlx.DB{}, - Ctx: context.Background(), - }, - HistorySession: &db.Session{ - DB: &sqlx.DB{}, - Ctx: context.Background(), - }, + CoreSession: &db.Session{DB: &sqlx.DB{}}, + HistorySession: &db.Session{DB: &sqlx.DB{}}, DisableStateVerification: true, HistoryArchiveURL: "https://history.stellar.org/prd/core-live/core_live_001", CheckpointFrequency: 64, @@ -125,7 +119,7 @@ func TestStateMachineTransition(t *testing.T) { } historyQ.On("GetTx").Return(nil).Once() - historyQ.On("Begin").Return(errors.New("my error")).Once() + historyQ.On("Begin", system.ctx).Return(errors.New("my error")).Once() historyQ.On("GetTx").Return(&sqlx.Tx{}).Once() assert.PanicsWithValue(t, "unexpected transaction", func() { @@ -142,7 +136,7 @@ func TestContextCancel(t *testing.T) { } historyQ.On("GetTx").Return(nil).Once() - historyQ.On("Begin").Return(errors.New("my error")).Once() + historyQ.On("Begin", system.ctx).Return(errors.New("my error")).Once() cancel() assert.NoError(t, system.runStateMachine(startState{})) @@ -183,10 +177,10 @@ func TestMaybeVerifyStateGetExpStateInvalidDBErrCancelOrContextCanceled(t *testi log = logger defer func() { log = oldLogger }() - historyQ.On("GetExpStateInvalid").Return(false, db.ErrCancelled).Once() + historyQ.On("GetExpStateInvalid", system.ctx).Return(false, db.ErrCancelled).Once() system.maybeVerifyState(0) - historyQ.On("GetExpStateInvalid").Return(false, context.Canceled).Once() + historyQ.On("GetExpStateInvalid", system.ctx).Return(false, context.Canceled).Once() system.maybeVerifyState(0) logged := done() @@ -210,15 +204,15 @@ func TestMaybeVerifyInternalDBErrCancelOrContextCanceled(t *testing.T) { log = logger defer func() { log = oldLogger }() - historyQ.On("GetExpStateInvalid").Return(false, nil).Twice() - historyQ.On("Rollback").Return(nil).Twice() + historyQ.On("GetExpStateInvalid", system.ctx, mock.Anything).Return(false, nil).Twice() + historyQ.On("Rollback", system.ctx, mock.Anything).Return(nil).Twice() historyQ.On("CloneIngestionQ").Return(historyQ).Twice() - historyQ.On("BeginTx", mock.Anything).Return(db.ErrCancelled).Once() + historyQ.On("BeginTx", system.ctx, mock.Anything).Return(db.ErrCancelled).Once() system.maybeVerifyState(63) system.wg.Wait() - historyQ.On("BeginTx", mock.Anything).Return(context.Canceled).Once() + historyQ.On("BeginTx", system.ctx, mock.Anything).Return(context.Canceled).Once() system.maybeVerifyState(63) system.wg.Wait() @@ -247,13 +241,13 @@ type mockDBQ struct { history.MockQTrustLines } -func (m *mockDBQ) Begin() error { - args := m.Called() +func (m *mockDBQ) Begin(ctx context.Context) error { + args := m.Called(ctx) return args.Error(0) } -func (m *mockDBQ) BeginTx(txOpts *sql.TxOptions) error { - args := m.Called(txOpts) +func (m *mockDBQ) BeginTx(ctx context.Context, txOpts *sql.TxOptions) error { + args := m.Called(ctx, txOpts) return args.Error(0) } @@ -262,13 +256,13 @@ func (m *mockDBQ) CloneIngestionQ() history.IngestionQ { return args.Get(0).(history.IngestionQ) } -func (m *mockDBQ) Commit() error { - args := m.Called() +func (m *mockDBQ) Commit(ctx context.Context) error { + args := m.Called(ctx) return args.Error(0) } -func (m *mockDBQ) Rollback() error { - args := m.Called() +func (m *mockDBQ) Rollback(ctx context.Context) error { + args := m.Called(ctx) return args.Error(0) } @@ -280,63 +274,63 @@ func (m *mockDBQ) GetTx() *sqlx.Tx { return args.Get(0).(*sqlx.Tx) } -func (m *mockDBQ) GetLastLedgerIngest() (uint32, error) { - args := m.Called() +func (m *mockDBQ) GetLastLedgerIngest(ctx context.Context) (uint32, error) { + args := m.Called(ctx) return args.Get(0).(uint32), args.Error(1) } -func (m *mockDBQ) GetOfferCompactionSequence() (uint32, error) { - args := m.Called() +func (m *mockDBQ) GetOfferCompactionSequence(ctx context.Context) (uint32, error) { + args := m.Called(ctx) return args.Get(0).(uint32), args.Error(1) } -func (m *mockDBQ) GetLastLedgerIngestNonBlocking() (uint32, error) { - args := m.Called() +func (m *mockDBQ) GetLastLedgerIngestNonBlocking(ctx context.Context) (uint32, error) { + args := m.Called(ctx) return args.Get(0).(uint32), args.Error(1) } -func (m *mockDBQ) GetIngestVersion() (int, error) { - args := m.Called() +func (m *mockDBQ) GetIngestVersion(ctx context.Context) (int, error) { + args := m.Called(ctx) return args.Get(0).(int), args.Error(1) } -func (m *mockDBQ) UpdateLastLedgerIngest(sequence uint32) error { - args := m.Called(sequence) +func (m *mockDBQ) UpdateLastLedgerIngest(ctx context.Context, sequence uint32) error { + args := m.Called(ctx, sequence) return args.Error(0) } -func (m *mockDBQ) UpdateExpStateInvalid(invalid bool) error { - args := m.Called(invalid) +func (m *mockDBQ) UpdateExpStateInvalid(ctx context.Context, invalid bool) error { + args := m.Called(ctx, invalid) return args.Error(0) } -func (m *mockDBQ) UpdateIngestVersion(version int) error { - args := m.Called(version) +func (m *mockDBQ) UpdateIngestVersion(ctx context.Context, version int) error { + args := m.Called(ctx, version) return args.Error(0) } -func (m *mockDBQ) GetExpStateInvalid() (bool, error) { - args := m.Called() +func (m *mockDBQ) GetExpStateInvalid(ctx context.Context) (bool, error) { + args := m.Called(ctx) return args.Get(0).(bool), args.Error(1) } -func (m *mockDBQ) GetAllOffers() ([]history.Offer, error) { - args := m.Called() +func (m *mockDBQ) GetAllOffers(ctx context.Context) ([]history.Offer, error) { + args := m.Called(ctx) return args.Get(0).([]history.Offer), args.Error(1) } -func (m *mockDBQ) GetLatestHistoryLedger() (uint32, error) { - args := m.Called() +func (m *mockDBQ) GetLatestHistoryLedger(ctx context.Context) (uint32, error) { + args := m.Called(ctx) return args.Get(0).(uint32), args.Error(1) } -func (m *mockDBQ) TruncateIngestStateTables() error { - args := m.Called() +func (m *mockDBQ) TruncateIngestStateTables(ctx context.Context) error { + args := m.Called(ctx) return args.Error(0) } -func (m *mockDBQ) DeleteRangeAll(start, end int64) error { - args := m.Called(start, end) +func (m *mockDBQ) DeleteRangeAll(ctx context.Context, start, end int64) error { + args := m.Called(ctx, start, end) return args.Error(0) } @@ -357,8 +351,8 @@ func (m *mockDBQ) NewTradeBatchInsertBuilder(maxBatchSize int) history.TradeBatc return args.Get(0).(history.TradeBatchInsertBuilder) } -func (m *mockDBQ) CreateAssets(assets []xdr.Asset, batchSize int) (map[string]history.Asset, error) { - args := m.Called(assets) +func (m *mockDBQ) CreateAssets(ctx context.Context, assets []xdr.Asset, batchSize int) (map[string]history.Asset, error) { + args := m.Called(ctx, assets) return args.Get(0).(map[string]history.Asset), args.Error(1) } @@ -366,28 +360,23 @@ type mockLedgerBackend struct { mock.Mock } -func (m *mockLedgerBackend) GetLatestLedgerSequence() (sequence uint32, err error) { - args := m.Called() +func (m *mockLedgerBackend) GetLatestLedgerSequence(ctx context.Context) (sequence uint32, err error) { + args := m.Called(ctx) return args.Get(0).(uint32), args.Error(1) } -func (m *mockLedgerBackend) GetLedger(sequence uint32) (bool, xdr.LedgerCloseMeta, error) { - args := m.Called(sequence) - return args.Get(0).(bool), args.Get(1).(xdr.LedgerCloseMeta), args.Error(2) -} - -func (m *mockLedgerBackend) GetLedgerBlocking(sequence uint32) (xdr.LedgerCloseMeta, error) { - args := m.Called(sequence) +func (m *mockLedgerBackend) GetLedger(ctx context.Context, sequence uint32) (xdr.LedgerCloseMeta, error) { + args := m.Called(ctx, sequence) return args.Get(0).(xdr.LedgerCloseMeta), args.Error(1) } -func (m *mockLedgerBackend) PrepareRange(ledgerRange ledgerbackend.Range) error { - args := m.Called(ledgerRange) +func (m *mockLedgerBackend) PrepareRange(ctx context.Context, ledgerRange ledgerbackend.Range) error { + args := m.Called(ctx, ledgerRange) return args.Error(0) } -func (m *mockLedgerBackend) IsPrepared(ledgerRange ledgerbackend.Range) (bool, error) { - args := m.Called(ledgerRange) +func (m *mockLedgerBackend) IsPrepared(ctx context.Context, ledgerRange ledgerbackend.Range) (bool, error) { + args := m.Called(ctx, ledgerRange) return args.Get(0).(bool), args.Error(1) } diff --git a/services/horizon/internal/ingest/orderbook.go b/services/horizon/internal/ingest/orderbook.go index cf3805e699..fc057afddb 100644 --- a/services/horizon/internal/ingest/orderbook.go +++ b/services/horizon/internal/ingest/orderbook.go @@ -55,25 +55,25 @@ type ingestionStatus struct { LastOfferCompactionLedger uint32 } -func (o *OrderBookStream) getIngestionStatus() (ingestionStatus, error) { +func (o *OrderBookStream) getIngestionStatus(ctx context.Context) (ingestionStatus, error) { var status ingestionStatus var err error - status.StateInvalid, err = o.historyQ.GetExpStateInvalid() + status.StateInvalid, err = o.historyQ.GetExpStateInvalid(ctx) if err != nil { return status, errors.Wrap(err, "Error from GetExpStateInvalid") } var lastHistoryLedger uint32 - lastHistoryLedger, err = o.historyQ.GetLatestHistoryLedger() + lastHistoryLedger, err = o.historyQ.GetLatestHistoryLedger(ctx) if err != nil { return status, errors.Wrap(err, "Error from GetLatestHistoryLedger") } - status.LastIngestedLedger, err = o.historyQ.GetLastLedgerIngestNonBlocking() + status.LastIngestedLedger, err = o.historyQ.GetLastLedgerIngestNonBlocking(ctx) if err != nil { return status, errors.Wrap(err, "Error from GetLastLedgerIngestNonBlocking") } - status.LastOfferCompactionLedger, err = o.historyQ.GetOfferCompactionSequence() + status.LastOfferCompactionLedger, err = o.historyQ.GetOfferCompactionSequence(ctx) if err != nil { return status, errors.Wrap(err, "Error from GetOfferCompactionSequence") } @@ -103,7 +103,7 @@ func addOfferToGraph(graph orderbook.OBGraph, offer history.Offer) { } // update returns true if the order book graph was reset -func (o *OrderBookStream) update(status ingestionStatus) (bool, error) { +func (o *OrderBookStream) update(ctx context.Context, status ingestionStatus) (bool, error) { reset := o.lastLedger == 0 if status.StateInvalid { log.WithField("status", status).Warn("ingestion state is invalid") @@ -135,7 +135,7 @@ func (o *OrderBookStream) update(status ingestionStatus) (bool, error) { defer o.graph.Discard() - offers, err := o.historyQ.GetAllOffers() + offers, err := o.historyQ.GetAllOffers(ctx) if err != nil { return true, errors.Wrap(err, "Error from GetAllOffers") } @@ -159,7 +159,7 @@ func (o *OrderBookStream) update(status ingestionStatus) (bool, error) { defer o.graph.Discard() - offers, err := o.historyQ.GetUpdatedOffers(o.lastLedger) + offers, err := o.historyQ.GetUpdatedOffers(ctx, o.lastLedger) if err != nil { return false, errors.Wrap(err, "Error from GetUpdatedOffers") } @@ -180,9 +180,9 @@ func (o *OrderBookStream) update(status ingestionStatus) (bool, error) { return false, nil } -func (o *OrderBookStream) verifyAllOffers() { +func (o *OrderBookStream) verifyAllOffers(ctx context.Context) { offers := o.graph.Offers() - ingestionOffers, err := o.historyQ.GetAllOffers() + ingestionOffers, err := o.historyQ.GetAllOffers(ctx) if err != nil { if !isCancelledError(err) { log.WithError(err).Info("Could not verify offers because of error from GetAllOffers") @@ -231,18 +231,18 @@ func (o *OrderBookStream) verifyAllOffers() { // last time Update() was called. Those changes will then be applied to the in memory order book graph. // After calling this function, the the in memory order book graph should be consistent with the // Horizon DB (assuming no error is returned). -func (o *OrderBookStream) Update() error { - if err := o.historyQ.BeginTx(&sql.TxOptions{ReadOnly: true, Isolation: sql.LevelRepeatableRead}); err != nil { +func (o *OrderBookStream) Update(ctx context.Context) error { + if err := o.historyQ.BeginTx(ctx, &sql.TxOptions{ReadOnly: true, Isolation: sql.LevelRepeatableRead}); err != nil { return errors.Wrap(err, "Error starting repeatable read transaction") } - defer o.historyQ.Rollback() + defer o.historyQ.Rollback(ctx) - status, err := o.getIngestionStatus() + status, err := o.getIngestionStatus(ctx) if err != nil { return errors.Wrap(err, "Error obtaining ingestion status") } - if reset, err := o.update(status); err != nil { + if reset, err := o.update(ctx, status); err != nil { return errors.Wrap(err, "Error updating") } else if reset { return nil @@ -255,7 +255,7 @@ func (o *OrderBookStream) Update() error { time.Since(o.lastVerification) >= verificationFrequency+jitter if requiresVerification { - o.verifyAllOffers() + o.verifyAllOffers(ctx) } return nil } @@ -268,7 +268,7 @@ func (o *OrderBookStream) Run(ctx context.Context) { for { select { case <-ticker.C: - if err := o.Update(); err != nil && !isCancelledError(err) { + if err := o.Update(ctx); err != nil && !isCancelledError(err) { log.WithError(err).Error("could not apply updates from order book stream") } case <-ctx.Done(): diff --git a/services/horizon/internal/ingest/orderbook_test.go b/services/horizon/internal/ingest/orderbook_test.go index ddb37372db..1535e45c13 100644 --- a/services/horizon/internal/ingest/orderbook_test.go +++ b/services/horizon/internal/ingest/orderbook_test.go @@ -3,6 +3,7 @@ package ingest import ( + "context" "fmt" "testing" "time" @@ -14,6 +15,7 @@ import ( type IngestionStatusTestSuite struct { suite.Suite + ctx context.Context historyQ *mockDBQ stream *OrderBookStream } @@ -23,6 +25,7 @@ func TestIngestionStatus(t *testing.T) { } func (t *IngestionStatusTestSuite) SetupTest() { + t.ctx = context.Background() t.historyQ = &mockDBQ{} t.stream = NewOrderBookStream(t.historyQ, &mockOrderBookGraph{}) } @@ -32,81 +35,81 @@ func (t *IngestionStatusTestSuite) TearDownTest() { } func (t *IngestionStatusTestSuite) TestGetExpStateInvalidError() { - t.historyQ.On("GetExpStateInvalid"). + t.historyQ.On("GetExpStateInvalid", t.ctx). Return(false, fmt.Errorf("state invalid error")). Once() - _, err := t.stream.getIngestionStatus() + _, err := t.stream.getIngestionStatus(t.ctx) t.Assert().EqualError(err, "Error from GetExpStateInvalid: state invalid error") } func (t *IngestionStatusTestSuite) TestGetLatestLedgerError() { - t.historyQ.On("GetExpStateInvalid"). + t.historyQ.On("GetExpStateInvalid", t.ctx). Return(false, nil). Once() - t.historyQ.On("GetLatestHistoryLedger"). + t.historyQ.On("GetLatestHistoryLedger", t.ctx). Return(uint32(0), fmt.Errorf("latest ledger error")). Once() - _, err := t.stream.getIngestionStatus() + _, err := t.stream.getIngestionStatus(t.ctx) t.Assert().EqualError(err, "Error from GetLatestHistoryLedger: latest ledger error") } func (t *IngestionStatusTestSuite) TestGetLastLedgerIngestNonBlockingError() { - t.historyQ.On("GetExpStateInvalid"). + t.historyQ.On("GetExpStateInvalid", t.ctx). Return(false, nil). Once() - t.historyQ.On("GetLatestHistoryLedger"). + t.historyQ.On("GetLatestHistoryLedger", t.ctx). Return(uint32(200), nil). Once() - t.historyQ.On("GetLastLedgerIngestNonBlocking"). + t.historyQ.On("GetLastLedgerIngestNonBlocking", t.ctx). Return(uint32(0), fmt.Errorf("ingest error")). Once() - _, err := t.stream.getIngestionStatus() + _, err := t.stream.getIngestionStatus(t.ctx) t.Assert().EqualError(err, "Error from GetLastLedgerIngestNonBlocking: ingest error") } func (t *IngestionStatusTestSuite) TestGetOfferCompactionSequenceError() { - t.historyQ.On("GetExpStateInvalid"). + t.historyQ.On("GetExpStateInvalid", t.ctx). Return(false, nil). Once() - t.historyQ.On("GetLatestHistoryLedger"). + t.historyQ.On("GetLatestHistoryLedger", t.ctx). Return(uint32(200), nil). Once() - t.historyQ.On("GetLastLedgerIngestNonBlocking"). + t.historyQ.On("GetLastLedgerIngestNonBlocking", t.ctx). Return(uint32(200), nil). Once() - t.historyQ.On("GetOfferCompactionSequence"). + t.historyQ.On("GetOfferCompactionSequence", t.ctx). Return(uint32(0), fmt.Errorf("compaction error")). Once() - _, err := t.stream.getIngestionStatus() + _, err := t.stream.getIngestionStatus(t.ctx) t.Assert().EqualError(err, "Error from GetOfferCompactionSequence: compaction error") } func (t *IngestionStatusTestSuite) TestStateInvalid() { - t.historyQ.On("GetExpStateInvalid"). + t.historyQ.On("GetExpStateInvalid", t.ctx). Return(true, nil). Once() - t.historyQ.On("GetLatestHistoryLedger"). + t.historyQ.On("GetLatestHistoryLedger", t.ctx). Return(uint32(200), nil). Once() - t.historyQ.On("GetLastLedgerIngestNonBlocking"). + t.historyQ.On("GetLastLedgerIngestNonBlocking", t.ctx). Return(uint32(200), nil). Once() - t.historyQ.On("GetOfferCompactionSequence"). + t.historyQ.On("GetOfferCompactionSequence", t.ctx). Return(uint32(100), nil). Once() - status, err := t.stream.getIngestionStatus() + status, err := t.stream.getIngestionStatus(t.ctx) t.Assert().NoError(err) t.Assert().Equal(ingestionStatus{ HistoryConsistentWithState: true, @@ -117,23 +120,23 @@ func (t *IngestionStatusTestSuite) TestStateInvalid() { } func (t *IngestionStatusTestSuite) TestHistoryInconsistentWithState() { - t.historyQ.On("GetExpStateInvalid"). + t.historyQ.On("GetExpStateInvalid", t.ctx). Return(true, nil). Once() - t.historyQ.On("GetLatestHistoryLedger"). + t.historyQ.On("GetLatestHistoryLedger", t.ctx). Return(uint32(200), nil). Once() - t.historyQ.On("GetLastLedgerIngestNonBlocking"). + t.historyQ.On("GetLastLedgerIngestNonBlocking", t.ctx). Return(uint32(201), nil). Once() - t.historyQ.On("GetOfferCompactionSequence"). + t.historyQ.On("GetOfferCompactionSequence", t.ctx). Return(uint32(100), nil). Once() - status, err := t.stream.getIngestionStatus() + status, err := t.stream.getIngestionStatus(t.ctx) t.Assert().NoError(err) t.Assert().Equal(ingestionStatus{ HistoryConsistentWithState: false, @@ -144,23 +147,23 @@ func (t *IngestionStatusTestSuite) TestHistoryInconsistentWithState() { } func (t *IngestionStatusTestSuite) TestHistoryLatestLedgerZero() { - t.historyQ.On("GetExpStateInvalid"). + t.historyQ.On("GetExpStateInvalid", t.ctx). Return(false, nil). Once() - t.historyQ.On("GetLatestHistoryLedger"). + t.historyQ.On("GetLatestHistoryLedger", t.ctx). Return(uint32(0), nil). Once() - t.historyQ.On("GetLastLedgerIngestNonBlocking"). + t.historyQ.On("GetLastLedgerIngestNonBlocking", t.ctx). Return(uint32(201), nil). Once() - t.historyQ.On("GetOfferCompactionSequence"). + t.historyQ.On("GetOfferCompactionSequence", t.ctx). Return(uint32(100), nil). Once() - status, err := t.stream.getIngestionStatus() + status, err := t.stream.getIngestionStatus(t.ctx) t.Assert().NoError(err) t.Assert().Equal(ingestionStatus{ HistoryConsistentWithState: true, @@ -172,6 +175,7 @@ func (t *IngestionStatusTestSuite) TestHistoryLatestLedgerZero() { type UpdateOrderBookStreamTestSuite struct { suite.Suite + ctx context.Context historyQ *mockDBQ graph *mockOrderBookGraph stream *OrderBookStream @@ -182,6 +186,7 @@ func TestUpdateOrderBookStream(t *testing.T) { } func (t *UpdateOrderBookStreamTestSuite) SetupTest() { + t.ctx = context.Background() t.historyQ = &mockDBQ{} t.graph = &mockOrderBookGraph{} t.stream = NewOrderBookStream(t.historyQ, t.graph) @@ -201,12 +206,12 @@ func (t *UpdateOrderBookStreamTestSuite) TestGetAllOffersError() { } t.graph.On("Clear").Return().Once() t.graph.On("Discard").Return().Once() - t.historyQ.On("GetAllOffers"). + t.historyQ.On("GetAllOffers", t.ctx). Return([]history.Offer{}, fmt.Errorf("offers error")). Once() t.stream.lastLedger = 300 - _, err := t.stream.update(status) + _, err := t.stream.update(t.ctx, status) t.Assert().EqualError(err, "Error from GetAllOffers: offers error") t.Assert().Equal(uint32(0), t.stream.lastLedger) } @@ -232,7 +237,7 @@ func (t *UpdateOrderBookStreamTestSuite) TestResetApplyError() { SellerId: xdr.MustAddress(sellerID), OfferId: 20, } - t.historyQ.On("GetAllOffers"). + t.historyQ.On("GetAllOffers", t.ctx). Return([]history.Offer{offer, otherOffer}, nil). Once() @@ -244,7 +249,7 @@ func (t *UpdateOrderBookStreamTestSuite) TestResetApplyError() { Once() t.stream.lastLedger = 300 - _, err := t.stream.update(status) + _, err := t.stream.update(t.ctx, status) t.Assert().EqualError(err, "Error applying changes to order book: apply error") t.Assert().Equal(uint32(0), t.stream.lastLedger) } @@ -265,7 +270,7 @@ func (t *UpdateOrderBookStreamTestSuite) mockReset(status ingestionStatus) { OfferId: 20, } offers := []history.Offer{offer, otherOffer} - t.historyQ.On("GetAllOffers"). + t.historyQ.On("GetAllOffers", t.ctx). Return(offers, nil). Once() @@ -286,7 +291,7 @@ func (t *UpdateOrderBookStreamTestSuite) TestFirstUpdateSucceeds() { } t.mockReset(status) - reset, err := t.stream.update(status) + reset, err := t.stream.update(t.ctx, status) t.Assert().NoError(err) t.Assert().Equal(uint32(201), t.stream.lastLedger) t.Assert().True(reset) @@ -301,7 +306,7 @@ func (t *UpdateOrderBookStreamTestSuite) TestInvalidState() { } t.graph.On("Clear").Return().Once() - reset, err := t.stream.update(status) + reset, err := t.stream.update(t.ctx, status) t.Assert().NoError(err) t.Assert().Equal(uint32(0), t.stream.lastLedger) t.Assert().True(reset) @@ -310,7 +315,7 @@ func (t *UpdateOrderBookStreamTestSuite) TestInvalidState() { t.graph.On("Clear").Return().Once() - reset, err = t.stream.update(status) + reset, err = t.stream.update(t.ctx, status) t.Assert().NoError(err) t.Assert().Equal(uint32(0), t.stream.lastLedger) t.Assert().True(reset) @@ -325,7 +330,7 @@ func (t *UpdateOrderBookStreamTestSuite) TestHistoryInconsistentWithState() { } t.graph.On("Clear").Return().Once() - reset, err := t.stream.update(status) + reset, err := t.stream.update(t.ctx, status) t.Assert().NoError(err) t.Assert().Equal(uint32(0), t.stream.lastLedger) t.Assert().True(reset) @@ -334,7 +339,7 @@ func (t *UpdateOrderBookStreamTestSuite) TestHistoryInconsistentWithState() { t.graph.On("Clear").Return().Once() - reset, err = t.stream.update(status) + reset, err = t.stream.update(t.ctx, status) t.Assert().NoError(err) t.Assert().Equal(uint32(0), t.stream.lastLedger) t.Assert().True(reset) @@ -350,7 +355,7 @@ func (t *UpdateOrderBookStreamTestSuite) TestLastIngestedLedgerBehindStream() { t.mockReset(status) t.stream.lastLedger = 300 - reset, err := t.stream.update(status) + reset, err := t.stream.update(t.ctx, status) t.Assert().NoError(err) t.Assert().Equal(uint32(201), t.stream.lastLedger) t.Assert().True(reset) @@ -366,7 +371,7 @@ func (t *UpdateOrderBookStreamTestSuite) TestStreamBehindLastCompactionLedger() t.mockReset(status) t.stream.lastLedger = 99 - reset, err := t.stream.update(status) + reset, err := t.stream.update(t.ctx, status) t.Assert().NoError(err) t.Assert().Equal(uint32(201), t.stream.lastLedger) t.Assert().True(reset) @@ -381,7 +386,7 @@ func (t *UpdateOrderBookStreamTestSuite) TestStreamLedgerEqualsLastIngestedLedge } t.stream.lastLedger = 201 - reset, err := t.stream.update(status) + reset, err := t.stream.update(t.ctx, status) t.Assert().NoError(err) t.Assert().Equal(uint32(201), t.stream.lastLedger) t.Assert().False(reset) @@ -397,11 +402,11 @@ func (t *UpdateOrderBookStreamTestSuite) TestGetUpdatedOffersError() { t.graph.On("Discard").Return().Once() t.stream.lastLedger = 100 - t.historyQ.MockQOffers.On("GetUpdatedOffers", uint32(100)). + t.historyQ.MockQOffers.On("GetUpdatedOffers", t.ctx, uint32(100)). Return([]history.Offer{}, fmt.Errorf("updated offers error")). Once() - _, err := t.stream.update(status) + _, err := t.stream.update(t.ctx, status) t.Assert().EqualError(err, "Error from GetUpdatedOffers: updated offers error") t.Assert().Equal(uint32(100), t.stream.lastLedger) } @@ -423,7 +428,7 @@ func (t *UpdateOrderBookStreamTestSuite) mockUpdate() { } deletedOffer := history.Offer{OfferID: 30, SellerID: sellerID, LastModifiedLedger: 103, Deleted: true} offers := []history.Offer{offer, otherOffer, deletedOffer} - t.historyQ.MockQOffers.On("GetUpdatedOffers", t.stream.lastLedger). + t.historyQ.MockQOffers.On("GetUpdatedOffers", t.ctx, t.stream.lastLedger). Return(offers, nil). Once() @@ -446,7 +451,7 @@ func (t *UpdateOrderBookStreamTestSuite) TestApplyUpdatesError() { Return(fmt.Errorf("apply error")). Once() - _, err := t.stream.update(status) + _, err := t.stream.update(t.ctx, status) t.Assert().EqualError(err, "Error applying changes to order book: apply error") t.Assert().Equal(uint32(100), t.stream.lastLedger) } @@ -465,7 +470,7 @@ func (t *UpdateOrderBookStreamTestSuite) TestApplyUpdatesSucceeds() { Return(nil). Once() - reset, err := t.stream.update(status) + reset, err := t.stream.update(t.ctx, status) t.Assert().NoError(err) t.Assert().Equal(status.LastIngestedLedger, t.stream.lastLedger) t.Assert().False(reset) @@ -473,6 +478,7 @@ func (t *UpdateOrderBookStreamTestSuite) TestApplyUpdatesSucceeds() { type VerifyOrderBookStreamTestSuite struct { suite.Suite + ctx context.Context historyQ *mockDBQ graph *mockOrderBookGraph stream *OrderBookStream @@ -484,6 +490,7 @@ func TestVerifyOrderBookStream(t *testing.T) { } func (t *VerifyOrderBookStreamTestSuite) SetupTest() { + t.ctx = context.Background() t.historyQ = &mockDBQ{} t.graph = &mockOrderBookGraph{} t.stream = NewOrderBookStream(t.historyQ, t.graph) @@ -527,22 +534,22 @@ func (t *VerifyOrderBookStreamTestSuite) TearDownTest() { } func (t *VerifyOrderBookStreamTestSuite) TestGetAllOffersError() { - t.historyQ.On("GetAllOffers"). + t.historyQ.On("GetAllOffers", t.ctx). Return([]history.Offer{}, fmt.Errorf("offers error")). Once() t.stream.lastLedger = 300 - t.stream.verifyAllOffers() + t.stream.verifyAllOffers(t.ctx) t.Assert().Equal(uint32(300), t.stream.lastLedger) t.Assert().True(t.stream.lastVerification.Equal(t.initialTime)) } func (t *VerifyOrderBookStreamTestSuite) TestEmptyDBOffers() { var offers []history.Offer - t.historyQ.On("GetAllOffers").Return(offers, nil).Once() + t.historyQ.On("GetAllOffers", t.ctx).Return(offers, nil).Once() t.stream.lastLedger = 300 - t.stream.verifyAllOffers() + t.stream.verifyAllOffers(t.ctx) t.Assert().Equal(uint32(0), t.stream.lastLedger) t.Assert().False(t.stream.lastVerification.Equal(t.initialTime)) } @@ -563,10 +570,10 @@ func (t *VerifyOrderBookStreamTestSuite) TestLengthMismatch() { LastModifiedLedger: 1, }, } - t.historyQ.On("GetAllOffers").Return(offers, nil).Once() + t.historyQ.On("GetAllOffers", t.ctx).Return(offers, nil).Once() t.stream.lastLedger = 300 - t.stream.verifyAllOffers() + t.stream.verifyAllOffers(t.ctx) t.Assert().Equal(uint32(0), t.stream.lastLedger) t.Assert().False(t.stream.lastVerification.Equal(t.initialTime)) } @@ -600,10 +607,10 @@ func (t *VerifyOrderBookStreamTestSuite) TestContentMismatch() { LastModifiedLedger: 1, }, } - t.historyQ.On("GetAllOffers").Return(offers, nil).Once() + t.historyQ.On("GetAllOffers", t.ctx).Return(offers, nil).Once() t.stream.lastLedger = 300 - t.stream.verifyAllOffers() + t.stream.verifyAllOffers(t.ctx) t.Assert().Equal(uint32(0), t.stream.lastLedger) t.Assert().False(t.stream.lastVerification.Equal(t.initialTime)) } @@ -637,10 +644,10 @@ func (t *VerifyOrderBookStreamTestSuite) TestSuccess() { LastModifiedLedger: 1, }, } - t.historyQ.On("GetAllOffers").Return(offers, nil).Once() + t.historyQ.On("GetAllOffers", t.ctx).Return(offers, nil).Once() t.stream.lastLedger = 300 - t.stream.verifyAllOffers() + t.stream.verifyAllOffers(t.ctx) t.Assert().Equal(uint32(300), t.stream.lastLedger) t.Assert().False(t.stream.lastVerification.Equal(t.initialTime)) } diff --git a/services/horizon/internal/ingest/processor_runner.go b/services/horizon/internal/ingest/processor_runner.go index a791304c4c..87c1156a55 100644 --- a/services/horizon/internal/ingest/processor_runner.go +++ b/services/horizon/internal/ingest/processor_runner.go @@ -23,19 +23,19 @@ const ( type horizonChangeProcessor interface { processors.ChangeProcessor - Commit() error + Commit(context.Context) error } type horizonTransactionProcessor interface { processors.LedgerTransactionProcessor - Commit() error + Commit(context.Context) error } type statsChangeProcessor struct { *ingest.StatsChangeProcessor } -func (statsChangeProcessor) Commit() error { +func (statsChangeProcessor) Commit(ctx context.Context) error { return nil } @@ -43,7 +43,7 @@ type statsLedgerTransactionProcessor struct { *processors.StatsLedgerTransactionProcessor } -func (statsLedgerTransactionProcessor) Commit() error { +func (statsLedgerTransactionProcessor) Commit(ctx context.Context) error { return nil } @@ -189,7 +189,7 @@ func (s *ProcessorRunner) RunHistoryArchiveIngestion( changeProcessor := s.buildChangeProcessor(&changeStats, historyArchiveSource, checkpointLedger) if checkpointLedger == 1 { - if err := changeProcessor.ProcessChange(ingest.GenesisChange(s.config.NetworkPassphrase)); err != nil { + if err := changeProcessor.ProcessChange(s.ctx, ingest.GenesisChange(s.config.NetworkPassphrase)); err != nil { return changeStats.GetResults(), errors.Wrap(err, "Error ingesting genesis ledger") } } else { @@ -211,7 +211,7 @@ func (s *ProcessorRunner) RunHistoryArchiveIngestion( log.WithField("ledger", checkpointLedger). Info("Processing entries from History Archive Snapshot") - err = processors.StreamChanges(changeProcessor, newloggingChangeReader( + err = processors.StreamChanges(s.ctx, changeProcessor, newloggingChangeReader( changeReader, "historyArchive", checkpointLedger, @@ -223,7 +223,7 @@ func (s *ProcessorRunner) RunHistoryArchiveIngestion( } } - if err := changeProcessor.Commit(); err != nil { + if err := changeProcessor.Commit(s.ctx); err != nil { return changeStats.GetResults(), errors.Wrap(err, "Error commiting changes from processor") } @@ -246,11 +246,11 @@ func (s *ProcessorRunner) runChangeProcessorOnLedger( logFrequency, s.logMemoryStats, ) - if err = processors.StreamChanges(changeProcessor, changeReader); err != nil { + if err = processors.StreamChanges(s.ctx, changeProcessor, changeReader); err != nil { return errors.Wrap(err, "Error streaming changes from ledger") } - err = changeProcessor.Commit() + err = changeProcessor.Commit(s.ctx) if err != nil { return errors.Wrap(err, "Error commiting changes from processor") } @@ -280,13 +280,13 @@ func (s *ProcessorRunner) RunTransactionProcessorsOnLedger(ledger xdr.LedgerClos } groupTransactionProcessors := s.buildTransactionProcessor(&ledgerTransactionStats, transactionReader.GetHeader()) - err = processors.StreamLedgerTransactions(groupTransactionProcessors, transactionReader) + err = processors.StreamLedgerTransactions(s.ctx, groupTransactionProcessors, transactionReader) if err != nil { err = errors.Wrap(err, "Error streaming changes from ledger") return } - err = groupTransactionProcessors.Commit() + err = groupTransactionProcessors.Commit(s.ctx) if err != nil { err = errors.Wrap(err, "Error commiting changes from processor") return diff --git a/services/horizon/internal/ingest/processor_runner_test.go b/services/horizon/internal/ingest/processor_runner_test.go index 32751acd65..48ee414237 100644 --- a/services/horizon/internal/ingest/processor_runner_test.go +++ b/services/horizon/internal/ingest/processor_runner_test.go @@ -18,6 +18,7 @@ import ( ) func TestProcessorRunnerRunHistoryArchiveIngestionGenesis(t *testing.T) { + ctx := context.Background() maxBatchSize := 100000 q := &mockDBQ{} @@ -25,23 +26,23 @@ func TestProcessorRunnerRunHistoryArchiveIngestionGenesis(t *testing.T) { // Batches mockOffersBatchInsertBuilder := &history.MockOffersBatchInsertBuilder{} defer mock.AssertExpectationsForObjects(t, mockOffersBatchInsertBuilder) - mockOffersBatchInsertBuilder.On("Exec").Return(nil).Once() + mockOffersBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() q.MockQOffers.On("NewOffersBatchInsertBuilder", maxBatchSize). Return(mockOffersBatchInsertBuilder).Once() mockAccountDataBatchInsertBuilder := &history.MockAccountDataBatchInsertBuilder{} defer mock.AssertExpectationsForObjects(t, mockAccountDataBatchInsertBuilder) - mockAccountDataBatchInsertBuilder.On("Exec").Return(nil).Once() + mockAccountDataBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() q.MockQData.On("NewAccountDataBatchInsertBuilder", maxBatchSize). Return(mockAccountDataBatchInsertBuilder).Once() mockClaimableBalancesBatchInsertBuilder := &history.MockClaimableBalancesBatchInsertBuilder{} defer mock.AssertExpectationsForObjects(t, mockClaimableBalancesBatchInsertBuilder) - mockClaimableBalancesBatchInsertBuilder.On("Exec").Return(nil).Once() + mockClaimableBalancesBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() q.MockQClaimableBalances.On("NewClaimableBalancesBatchInsertBuilder", maxBatchSize). Return(mockClaimableBalancesBatchInsertBuilder).Once() - q.MockQAccounts.On("UpsertAccounts", []xdr.LedgerEntry{ + q.MockQAccounts.On("UpsertAccounts", ctx, []xdr.LedgerEntry{ { LastModifiedLedgerSeq: 1, Data: xdr.LedgerEntryData{ @@ -58,20 +59,21 @@ func TestProcessorRunnerRunHistoryArchiveIngestionGenesis(t *testing.T) { mockAccountSignersBatchInsertBuilder := &history.MockAccountSignersBatchInsertBuilder{} defer mock.AssertExpectationsForObjects(t, mockAccountSignersBatchInsertBuilder) - mockAccountSignersBatchInsertBuilder.On("Add", history.AccountSigner{ + mockAccountSignersBatchInsertBuilder.On("Add", ctx, history.AccountSigner{ Account: "GAAZI4TCR3TY5OJHCTJC2A4QSY6CJWJH5IAJTGKIN2ER7LBNVKOCCWN7", Signer: "GAAZI4TCR3TY5OJHCTJC2A4QSY6CJWJH5IAJTGKIN2ER7LBNVKOCCWN7", Weight: 1, Sponsor: null.String{}, }).Return(nil).Once() - mockAccountSignersBatchInsertBuilder.On("Exec").Return(nil).Once() + mockAccountSignersBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() q.MockQSigners.On("NewAccountSignersBatchInsertBuilder", maxBatchSize). Return(mockAccountSignersBatchInsertBuilder).Once() - q.MockQAssetStats.On("InsertAssetStats", []history.ExpAssetStat{}, 100000). + q.MockQAssetStats.On("InsertAssetStats", ctx, []history.ExpAssetStat{}, 100000). Return(nil) runner := ProcessorRunner{ + ctx: ctx, config: Config{ NetworkPassphrase: network.PublicNetworkPassphrase, }, @@ -83,6 +85,7 @@ func TestProcessorRunnerRunHistoryArchiveIngestionGenesis(t *testing.T) { } func TestProcessorRunnerRunHistoryArchiveIngestionHistoryArchive(t *testing.T) { + ctx := context.Background() maxBatchSize := 100000 config := Config{ @@ -103,11 +106,7 @@ func TestProcessorRunnerRunHistoryArchiveIngestionHistoryArchive(t *testing.T) { m.On("Close").Return(nil).Once() historyAdapter. - On( - "GetState", - mock.AnythingOfType("*context.emptyCtx"), - uint32(63), - ). + On("GetState", ctx, uint32(63)). Return( m, nil, @@ -116,23 +115,23 @@ func TestProcessorRunnerRunHistoryArchiveIngestionHistoryArchive(t *testing.T) { // Batches mockOffersBatchInsertBuilder := &history.MockOffersBatchInsertBuilder{} defer mock.AssertExpectationsForObjects(t, mockOffersBatchInsertBuilder) - mockOffersBatchInsertBuilder.On("Exec").Return(nil).Once() + mockOffersBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() q.MockQOffers.On("NewOffersBatchInsertBuilder", maxBatchSize). Return(mockOffersBatchInsertBuilder).Once() mockAccountDataBatchInsertBuilder := &history.MockAccountDataBatchInsertBuilder{} defer mock.AssertExpectationsForObjects(t, mockAccountDataBatchInsertBuilder) - mockAccountDataBatchInsertBuilder.On("Exec").Return(nil).Once() + mockAccountDataBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() q.MockQData.On("NewAccountDataBatchInsertBuilder", maxBatchSize). Return(mockAccountDataBatchInsertBuilder).Once() mockClaimableBalancesBatchInsertBuilder := &history.MockClaimableBalancesBatchInsertBuilder{} defer mock.AssertExpectationsForObjects(t, mockClaimableBalancesBatchInsertBuilder) - mockClaimableBalancesBatchInsertBuilder.On("Exec").Return(nil).Once() + mockClaimableBalancesBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() q.MockQClaimableBalances.On("NewClaimableBalancesBatchInsertBuilder", maxBatchSize). Return(mockClaimableBalancesBatchInsertBuilder).Once() - q.MockQAccounts.On("UpsertAccounts", []xdr.LedgerEntry{ + q.MockQAccounts.On("UpsertAccounts", ctx, []xdr.LedgerEntry{ { LastModifiedLedgerSeq: 1, Data: xdr.LedgerEntryData{ @@ -149,20 +148,20 @@ func TestProcessorRunnerRunHistoryArchiveIngestionHistoryArchive(t *testing.T) { mockAccountSignersBatchInsertBuilder := &history.MockAccountSignersBatchInsertBuilder{} defer mock.AssertExpectationsForObjects(t, mockAccountSignersBatchInsertBuilder) - mockAccountSignersBatchInsertBuilder.On("Add", history.AccountSigner{ + mockAccountSignersBatchInsertBuilder.On("Add", ctx, history.AccountSigner{ Account: "GAAZI4TCR3TY5OJHCTJC2A4QSY6CJWJH5IAJTGKIN2ER7LBNVKOCCWN7", Signer: "GAAZI4TCR3TY5OJHCTJC2A4QSY6CJWJH5IAJTGKIN2ER7LBNVKOCCWN7", Weight: 1, }).Return(nil).Once() - mockAccountSignersBatchInsertBuilder.On("Exec").Return(nil).Once() + mockAccountSignersBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() q.MockQSigners.On("NewAccountSignersBatchInsertBuilder", maxBatchSize). Return(mockAccountSignersBatchInsertBuilder).Once() - q.MockQAssetStats.On("InsertAssetStats", []history.ExpAssetStat{}, 100000). + q.MockQAssetStats.On("InsertAssetStats", ctx, []history.ExpAssetStat{}, 100000). Return(nil) runner := ProcessorRunner{ - ctx: context.Background(), + ctx: ctx, config: config, historyQ: q, historyAdapter: historyAdapter, @@ -173,6 +172,7 @@ func TestProcessorRunnerRunHistoryArchiveIngestionHistoryArchive(t *testing.T) { } func TestProcessorRunnerRunHistoryArchiveIngestionProtocolVersionNotSupported(t *testing.T) { + ctx := context.Background() maxBatchSize := 100000 config := Config{ @@ -205,11 +205,11 @@ func TestProcessorRunnerRunHistoryArchiveIngestionProtocolVersionNotSupported(t q.MockQSigners.On("NewAccountSignersBatchInsertBuilder", maxBatchSize). Return(mockAccountSignersBatchInsertBuilder).Once() - q.MockQAssetStats.On("InsertAssetStats", []history.ExpAssetStat{}, 100000). + q.MockQAssetStats.On("InsertAssetStats", ctx, []history.ExpAssetStat{}, 100000). Return(nil) runner := ProcessorRunner{ - ctx: context.Background(), + ctx: ctx, config: config, historyQ: q, historyAdapter: historyAdapter, @@ -220,6 +220,7 @@ func TestProcessorRunnerRunHistoryArchiveIngestionProtocolVersionNotSupported(t } func TestProcessorRunnerBuildChangeProcessor(t *testing.T) { + ctx := context.Background() maxBatchSize := 100000 q := &mockDBQ{} @@ -234,6 +235,7 @@ func TestProcessorRunnerBuildChangeProcessor(t *testing.T) { Return(&history.MockAccountSignersBatchInsertBuilder{}).Twice() runner := ProcessorRunner{ + ctx: ctx, historyQ: q, } @@ -254,6 +256,7 @@ func TestProcessorRunnerBuildChangeProcessor(t *testing.T) { assert.IsType(t, &processors.TrustLinesProcessor{}, processor.processors[6]) runner = ProcessorRunner{ + ctx: ctx, historyQ: q, } @@ -274,6 +277,7 @@ func TestProcessorRunnerBuildChangeProcessor(t *testing.T) { } func TestProcessorRunnerBuildTransactionProcessor(t *testing.T) { + ctx := context.Background() maxBatchSize := 100000 q := &mockDBQ{} @@ -285,6 +289,7 @@ func TestProcessorRunnerBuildTransactionProcessor(t *testing.T) { Return(&history.MockTransactionsBatchInsertBuilder{}).Twice() runner := ProcessorRunner{ + ctx: ctx, config: Config{}, historyQ: q, } @@ -304,6 +309,7 @@ func TestProcessorRunnerBuildTransactionProcessor(t *testing.T) { } func TestProcessorRunnerRunAllProcessorsOnLedger(t *testing.T) { + ctx := context.Background() maxBatchSize := 100000 config := Config{ @@ -326,13 +332,13 @@ func TestProcessorRunnerRunAllProcessorsOnLedger(t *testing.T) { // Batches mockOffersBatchInsertBuilder := &history.MockOffersBatchInsertBuilder{} defer mock.AssertExpectationsForObjects(t, mockOffersBatchInsertBuilder) - mockOffersBatchInsertBuilder.On("Exec").Return(nil).Once() + mockOffersBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() q.MockQOffers.On("NewOffersBatchInsertBuilder", maxBatchSize). Return(mockOffersBatchInsertBuilder).Once() mockAccountDataBatchInsertBuilder := &history.MockAccountDataBatchInsertBuilder{} defer mock.AssertExpectationsForObjects(t, mockAccountDataBatchInsertBuilder) - mockAccountDataBatchInsertBuilder.On("Exec").Return(nil).Once() + mockAccountDataBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() q.MockQData.On("NewAccountDataBatchInsertBuilder", maxBatchSize). Return(mockAccountDataBatchInsertBuilder).Once() @@ -343,27 +349,27 @@ func TestProcessorRunnerRunAllProcessorsOnLedger(t *testing.T) { mockOperationsBatchInsertBuilder := &history.MockOperationsBatchInsertBuilder{} defer mock.AssertExpectationsForObjects(t, mockOperationsBatchInsertBuilder) - mockOperationsBatchInsertBuilder.On("Exec").Return(nil).Once() + mockOperationsBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() q.MockQOperations.On("NewOperationBatchInsertBuilder", maxBatchSize). Return(mockOperationsBatchInsertBuilder).Twice() mockTransactionsBatchInsertBuilder := &history.MockTransactionsBatchInsertBuilder{} defer mock.AssertExpectationsForObjects(t, mockTransactionsBatchInsertBuilder) - mockTransactionsBatchInsertBuilder.On("Exec").Return(nil).Once() + mockTransactionsBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() q.MockQTransactions.On("NewTransactionBatchInsertBuilder", maxBatchSize). Return(mockTransactionsBatchInsertBuilder).Twice() mockClaimableBalancesBatchInsertBuilder := &history.MockClaimableBalancesBatchInsertBuilder{} defer mock.AssertExpectationsForObjects(t, mockClaimableBalancesBatchInsertBuilder) - mockClaimableBalancesBatchInsertBuilder.On("Exec").Return(nil).Once() + mockClaimableBalancesBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() q.MockQClaimableBalances.On("NewClaimableBalancesBatchInsertBuilder", maxBatchSize). Return(mockClaimableBalancesBatchInsertBuilder).Once() - q.MockQLedgers.On("InsertLedger", ledger.V0.LedgerHeader, 0, 0, 0, 0, CurrentVersion). + q.MockQLedgers.On("InsertLedger", ctx, ledger.V0.LedgerHeader, 0, 0, 0, 0, CurrentVersion). Return(int64(1), nil).Once() runner := ProcessorRunner{ - ctx: context.Background(), + ctx: ctx, config: config, historyQ: q, } @@ -373,6 +379,7 @@ func TestProcessorRunnerRunAllProcessorsOnLedger(t *testing.T) { } func TestProcessorRunnerRunAllProcessorsOnLedgerProtocolVersionNotSupported(t *testing.T) { + ctx := context.Background() maxBatchSize := 100000 config := Config{ @@ -424,7 +431,7 @@ func TestProcessorRunnerRunAllProcessorsOnLedgerProtocolVersionNotSupported(t *t Return(mockClaimableBalancesBatchInsertBuilder).Once() runner := ProcessorRunner{ - ctx: context.Background(), + ctx: ctx, config: config, historyQ: q, } diff --git a/services/horizon/internal/ingest/processors/account_data_processor.go b/services/horizon/internal/ingest/processors/account_data_processor.go index acd06c5948..411a6a7c0d 100644 --- a/services/horizon/internal/ingest/processors/account_data_processor.go +++ b/services/horizon/internal/ingest/processors/account_data_processor.go @@ -1,6 +1,8 @@ package processors import ( + "context" + "github.com/stellar/go/ingest" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/support/errors" @@ -23,7 +25,7 @@ func (p *AccountDataProcessor) reset() { p.cache = ingest.NewChangeCompactor() } -func (p *AccountDataProcessor) ProcessChange(change ingest.Change) error { +func (p *AccountDataProcessor) ProcessChange(ctx context.Context, change ingest.Change) error { // We're interested in data only if change.Type != xdr.LedgerEntryTypeData { return nil @@ -35,7 +37,7 @@ func (p *AccountDataProcessor) ProcessChange(change ingest.Change) error { } if p.cache.Size() > maxBatchSize { - err = p.Commit() + err = p.Commit(ctx) if err != nil { return errors.Wrap(err, "error in Commit") } @@ -45,7 +47,7 @@ func (p *AccountDataProcessor) ProcessChange(change ingest.Change) error { return nil } -func (p *AccountDataProcessor) Commit() error { +func (p *AccountDataProcessor) Commit(ctx context.Context) error { batch := p.dataQ.NewAccountDataBatchInsertBuilder(maxBatchSize) changes := p.cache.GetChanges() @@ -59,7 +61,7 @@ func (p *AccountDataProcessor) Commit() error { case change.Pre == nil && change.Post != nil: // Created action = "inserting" - err = batch.Add(*change.Post) + err = batch.Add(ctx, *change.Post) rowsAffected = 1 // We don't track this when batch inserting case change.Pre != nil && change.Post == nil: // Removed @@ -69,7 +71,7 @@ func (p *AccountDataProcessor) Commit() error { if err != nil { return errors.Wrap(err, "Error creating ledger key") } - rowsAffected, err = p.dataQ.RemoveAccountData(*ledgerKey.Data) + rowsAffected, err = p.dataQ.RemoveAccountData(ctx, *ledgerKey.Data) default: // Updated action = "updating" @@ -78,7 +80,7 @@ func (p *AccountDataProcessor) Commit() error { if err != nil { return errors.Wrap(err, "Error creating ledger key") } - rowsAffected, err = p.dataQ.UpdateAccountData(*change.Post) + rowsAffected, err = p.dataQ.UpdateAccountData(ctx, *change.Post) } if err != nil { @@ -96,7 +98,7 @@ func (p *AccountDataProcessor) Commit() error { } } - err := batch.Exec() + err := batch.Exec(ctx) if err != nil { return errors.Wrap(err, "error executing batch") } diff --git a/services/horizon/internal/ingest/processors/accounts_data_processor_test.go b/services/horizon/internal/ingest/processors/accounts_data_processor_test.go index fec0b3bb0a..7ba09b4822 100644 --- a/services/horizon/internal/ingest/processors/accounts_data_processor_test.go +++ b/services/horizon/internal/ingest/processors/accounts_data_processor_test.go @@ -3,6 +3,7 @@ package processors import ( + "context" "testing" "github.com/stellar/go/ingest" @@ -17,12 +18,14 @@ func TestAccountsDataProcessorTestSuiteState(t *testing.T) { type AccountsDataProcessorTestSuiteState struct { suite.Suite + ctx context.Context processor *AccountDataProcessor mockQ *history.MockQData mockBatchInsertBuilder *history.MockAccountDataBatchInsertBuilder } func (s *AccountsDataProcessorTestSuiteState) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQData{} s.mockBatchInsertBuilder = &history.MockAccountDataBatchInsertBuilder{} @@ -34,8 +37,8 @@ func (s *AccountsDataProcessorTestSuiteState) SetupTest() { } func (s *AccountsDataProcessorTestSuiteState) TearDownTest() { - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() + s.Assert().NoError(s.processor.Commit(s.ctx)) s.mockQ.AssertExpectations(s.T()) s.mockBatchInsertBuilder.AssertExpectations(s.T()) @@ -59,9 +62,9 @@ func (s *AccountsDataProcessorTestSuiteState) TestCreatesAccounts() { }, LastModifiedLedgerSeq: lastModifiedLedgerSeq, } - s.mockBatchInsertBuilder.On("Add", entry).Return(nil).Once() + s.mockBatchInsertBuilder.On("Add", s.ctx, entry).Return(nil).Once() - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeData, Pre: nil, Post: &entry, @@ -75,12 +78,14 @@ func TestAccountsDataProcessorTestSuiteLedger(t *testing.T) { type AccountsDataProcessorTestSuiteLedger struct { suite.Suite + ctx context.Context processor *AccountDataProcessor mockQ *history.MockQData mockBatchInsertBuilder *history.MockAccountDataBatchInsertBuilder } func (s *AccountsDataProcessorTestSuiteLedger) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQData{} s.mockBatchInsertBuilder = &history.MockAccountDataBatchInsertBuilder{} @@ -92,8 +97,8 @@ func (s *AccountsDataProcessorTestSuiteLedger) SetupTest() { } func (s *AccountsDataProcessorTestSuiteLedger) TearDownTest() { - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() + s.Assert().NoError(s.processor.Commit(s.ctx)) s.mockQ.AssertExpectations(s.T()) } @@ -109,7 +114,7 @@ func (s *AccountsDataProcessorTestSuiteLedger) TestNewAccountData() { } lastModifiedLedgerSeq := xdr.Uint32(123) - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeData, Pre: nil, Post: &xdr.LedgerEntry{ @@ -136,7 +141,7 @@ func (s *AccountsDataProcessorTestSuiteLedger) TestNewAccountData() { LastModifiedLedgerSeq: lastModifiedLedgerSeq, } - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeData, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -150,7 +155,7 @@ func (s *AccountsDataProcessorTestSuiteLedger) TestNewAccountData() { s.Assert().NoError(err) // We use LedgerEntryChangesCache so all changes are squashed - s.mockBatchInsertBuilder.On("Add", updatedEntry).Return(nil).Once() + s.mockBatchInsertBuilder.On("Add", s.ctx, updatedEntry).Return(nil).Once() } func (s *AccountsDataProcessorTestSuiteLedger) TestUpdateAccountData() { @@ -175,7 +180,7 @@ func (s *AccountsDataProcessorTestSuiteLedger) TestUpdateAccountData() { LastModifiedLedgerSeq: lastModifiedLedgerSeq, } - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeData, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -188,11 +193,11 @@ func (s *AccountsDataProcessorTestSuiteLedger) TestUpdateAccountData() { }) s.Assert().NoError(err) - s.mockQ.On("UpdateAccountData", updatedEntry).Return(int64(1), nil).Once() + s.mockQ.On("UpdateAccountData", s.ctx, updatedEntry).Return(int64(1), nil).Once() } func (s *AccountsDataProcessorTestSuiteLedger) TestRemoveAccountData() { - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeData, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -210,6 +215,7 @@ func (s *AccountsDataProcessorTestSuiteLedger) TestRemoveAccountData() { s.mockQ.On( "RemoveAccountData", + s.ctx, xdr.LedgerKeyData{ AccountId: xdr.MustAddress("GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML"), DataName: "test", diff --git a/services/horizon/internal/ingest/processors/accounts_processor.go b/services/horizon/internal/ingest/processors/accounts_processor.go index 8f82d8712d..289ad23de5 100644 --- a/services/horizon/internal/ingest/processors/accounts_processor.go +++ b/services/horizon/internal/ingest/processors/accounts_processor.go @@ -1,6 +1,8 @@ package processors import ( + "context" + "github.com/stellar/go/ingest" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/support/errors" @@ -23,7 +25,7 @@ func (p *AccountsProcessor) reset() { p.cache = ingest.NewChangeCompactor() } -func (p *AccountsProcessor) ProcessChange(change ingest.Change) error { +func (p *AccountsProcessor) ProcessChange(ctx context.Context, change ingest.Change) error { if change.Type != xdr.LedgerEntryTypeAccount { return nil } @@ -34,7 +36,7 @@ func (p *AccountsProcessor) ProcessChange(change ingest.Change) error { } if p.cache.Size() > maxBatchSize { - err = p.Commit() + err = p.Commit(ctx) if err != nil { return errors.Wrap(err, "error in Commit") } @@ -44,7 +46,7 @@ func (p *AccountsProcessor) ProcessChange(change ingest.Change) error { return nil } -func (p *AccountsProcessor) Commit() error { +func (p *AccountsProcessor) Commit(ctx context.Context) error { batchUpsertAccounts := []xdr.LedgerEntry{} changes := p.cache.GetChanges() @@ -66,7 +68,7 @@ func (p *AccountsProcessor) Commit() error { // Removed account := change.Pre.Data.MustAccount() accountID := account.AccountId.Address() - rowsAffected, err := p.accountsQ.RemoveAccount(accountID) + rowsAffected, err := p.accountsQ.RemoveAccount(ctx, accountID) if err != nil { return err @@ -86,7 +88,7 @@ func (p *AccountsProcessor) Commit() error { // Upsert accounts if len(batchUpsertAccounts) > 0 { - err := p.accountsQ.UpsertAccounts(batchUpsertAccounts) + err := p.accountsQ.UpsertAccounts(ctx, batchUpsertAccounts) if err != nil { return errors.Wrap(err, "errors in UpsertAccounts") } diff --git a/services/horizon/internal/ingest/processors/accounts_processor_test.go b/services/horizon/internal/ingest/processors/accounts_processor_test.go index b9707ecc3e..65dc2997e9 100644 --- a/services/horizon/internal/ingest/processors/accounts_processor_test.go +++ b/services/horizon/internal/ingest/processors/accounts_processor_test.go @@ -18,18 +18,20 @@ func TestAccountsProcessorTestSuiteState(t *testing.T) { type AccountsProcessorTestSuiteState struct { suite.Suite + ctx context.Context processor *AccountsProcessor mockQ *history.MockQAccounts } func (s *AccountsProcessorTestSuiteState) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQAccounts{} s.processor = NewAccountsProcessor(s.mockQ) } func (s *AccountsProcessorTestSuiteState) TearDownTest() { - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) s.mockQ.AssertExpectations(s.T()) } @@ -46,7 +48,7 @@ func (s *AccountsProcessorTestSuiteState) TestCreatesAccounts() { // We use LedgerEntryChangesCache so all changes are squashed s.mockQ.On( - "UpsertAccounts", + "UpsertAccounts", s.ctx, []xdr.LedgerEntry{ { LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -58,7 +60,7 @@ func (s *AccountsProcessorTestSuiteState) TestCreatesAccounts() { }, ).Return(nil).Once() - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: nil, Post: &xdr.LedgerEntry{ @@ -78,19 +80,20 @@ func TestAccountsProcessorTestSuiteLedger(t *testing.T) { type AccountsProcessorTestSuiteLedger struct { suite.Suite - context context.Context + ctx context.Context processor *AccountsProcessor mockQ *history.MockQAccounts } func (s *AccountsProcessorTestSuiteLedger) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQAccounts{} s.processor = NewAccountsProcessor(s.mockQ) } func (s *AccountsProcessorTestSuiteLedger) TearDownTest() { - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) s.mockQ.AssertExpectations(s.T()) } @@ -105,7 +108,7 @@ func (s *AccountsProcessorTestSuiteLedger) TestNewAccount() { } lastModifiedLedgerSeq := xdr.Uint32(123) - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: nil, Post: &xdr.LedgerEntry{ @@ -124,7 +127,7 @@ func (s *AccountsProcessorTestSuiteLedger) TestNewAccount() { HomeDomain: "stellar.org", } - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq - 1, @@ -146,6 +149,7 @@ func (s *AccountsProcessorTestSuiteLedger) TestNewAccount() { // We use LedgerEntryChangesCache so all changes are squashed s.mockQ.On( "UpsertAccounts", + s.ctx, []xdr.LedgerEntry{ { LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -161,10 +165,11 @@ func (s *AccountsProcessorTestSuiteLedger) TestNewAccount() { func (s *AccountsProcessorTestSuiteLedger) TestRemoveAccount() { s.mockQ.On( "RemoveAccount", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", ).Return(int64(1), nil).Once() - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -187,7 +192,7 @@ func (s *AccountsProcessorTestSuiteLedger) TestProcessUpgradeChange() { } lastModifiedLedgerSeq := xdr.Uint32(123) - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: nil, Post: &xdr.LedgerEntry{ @@ -206,7 +211,7 @@ func (s *AccountsProcessorTestSuiteLedger) TestProcessUpgradeChange() { HomeDomain: "stellar.org", } - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -227,6 +232,7 @@ func (s *AccountsProcessorTestSuiteLedger) TestProcessUpgradeChange() { s.mockQ.On( "UpsertAccounts", + s.ctx, []xdr.LedgerEntry{ { LastModifiedLedgerSeq: lastModifiedLedgerSeq + 1, @@ -240,7 +246,7 @@ func (s *AccountsProcessorTestSuiteLedger) TestProcessUpgradeChange() { } func (s *AccountsProcessorTestSuiteLedger) TestFeeProcessedBeforeEverythingElse() { - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -263,7 +269,7 @@ func (s *AccountsProcessorTestSuiteLedger) TestFeeProcessedBeforeEverythingElse( }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -293,6 +299,7 @@ func (s *AccountsProcessorTestSuiteLedger) TestFeeProcessedBeforeEverythingElse( s.mockQ.On( "UpsertAccounts", + s.ctx, []xdr.LedgerEntry{ { LastModifiedLedgerSeq: 0, diff --git a/services/horizon/internal/ingest/processors/asset_stats_processor.go b/services/horizon/internal/ingest/processors/asset_stats_processor.go index f8f20cbc83..818465d984 100644 --- a/services/horizon/internal/ingest/processors/asset_stats_processor.go +++ b/services/horizon/internal/ingest/processors/asset_stats_processor.go @@ -1,6 +1,7 @@ package processors import ( + "context" "database/sql" "github.com/stellar/go/ingest" @@ -39,12 +40,12 @@ func (p *AssetStatsProcessor) reset() { p.assetStatSet = AssetStatSet{} } -func (p *AssetStatsProcessor) ProcessChange(change ingest.Change) error { +func (p *AssetStatsProcessor) ProcessChange(ctx context.Context, change ingest.Change) error { if change.Type != xdr.LedgerEntryTypeClaimableBalance && change.Type != xdr.LedgerEntryTypeTrustline { return nil } if p.useLedgerEntryCache { - return p.addToCache(change) + return p.addToCache(ctx, change) } if change.Pre != nil || change.Post == nil { return errors.New("AssetStatsProcessor is in insert only mode") @@ -60,14 +61,14 @@ func (p *AssetStatsProcessor) ProcessChange(change ingest.Change) error { } } -func (p *AssetStatsProcessor) addToCache(change ingest.Change) error { +func (p *AssetStatsProcessor) addToCache(ctx context.Context, change ingest.Change) error { err := p.cache.AddChange(change) if err != nil { return errors.Wrap(err, "error adding to ledgerCache") } if p.cache.Size() > maxBatchSize { - err = p.Commit() + err = p.Commit(ctx) if err != nil { return errors.Wrap(err, "error in Commit") } @@ -76,9 +77,9 @@ func (p *AssetStatsProcessor) addToCache(change ingest.Change) error { return nil } -func (p *AssetStatsProcessor) Commit() error { +func (p *AssetStatsProcessor) Commit(ctx context.Context) error { if !p.useLedgerEntryCache { - return p.assetStatsQ.InsertAssetStats(p.assetStatSet.All(), maxBatchSize) + return p.assetStatsQ.InsertAssetStats(ctx, p.assetStatSet.All(), maxBatchSize) } changes := p.cache.GetChanges() @@ -104,7 +105,7 @@ func (p *AssetStatsProcessor) Commit() error { var stat history.ExpAssetStat var err error - stat, err = p.assetStatsQ.GetAssetStat( + stat, err = p.assetStatsQ.GetAssetStat(ctx, delta.AssetType, delta.AssetCode, delta.AssetIssuer, @@ -148,7 +149,7 @@ func (p *AssetStatsProcessor) Commit() error { // Insert var errInsert error - rowsAffected, errInsert = p.assetStatsQ.InsertAssetStat(delta) + rowsAffected, errInsert = p.assetStatsQ.InsertAssetStat(ctx, delta) if errInsert != nil { return errors.Wrap(errInsert, "could not insert asset stat") } @@ -176,7 +177,7 @@ func (p *AssetStatsProcessor) Commit() error { delta.AssetIssuer, )) } - rowsAffected, err = p.assetStatsQ.RemoveAssetStat( + rowsAffected, err = p.assetStatsQ.RemoveAssetStat(ctx, delta.AssetType, delta.AssetCode, delta.AssetIssuer, @@ -186,7 +187,7 @@ func (p *AssetStatsProcessor) Commit() error { } } else { // Update - rowsAffected, err = p.assetStatsQ.UpdateAssetStat(history.ExpAssetStat{ + rowsAffected, err = p.assetStatsQ.UpdateAssetStat(ctx, history.ExpAssetStat{ AssetType: delta.AssetType, AssetCode: delta.AssetCode, AssetIssuer: delta.AssetIssuer, diff --git a/services/horizon/internal/ingest/processors/asset_stats_processor_test.go b/services/horizon/internal/ingest/processors/asset_stats_processor_test.go index 53c15d9c3a..78ef55ea31 100644 --- a/services/horizon/internal/ingest/processors/asset_stats_processor_test.go +++ b/services/horizon/internal/ingest/processors/asset_stats_processor_test.go @@ -3,6 +3,7 @@ package processors import ( + "context" "database/sql" "testing" @@ -18,17 +19,19 @@ func TestAssetStatsProcessorTestSuiteState(t *testing.T) { type AssetStatsProcessorTestSuiteState struct { suite.Suite + ctx context.Context processor *AssetStatsProcessor mockQ *history.MockQAssetStats } func (s *AssetStatsProcessorTestSuiteState) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQAssetStats{} s.processor = NewAssetStatsProcessor(s.mockQ, false) } func (s *AssetStatsProcessorTestSuiteState) TearDownTest() { - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) s.mockQ.AssertExpectations(s.T()) } @@ -40,7 +43,7 @@ func (s *AssetStatsProcessorTestSuiteState) TestCreateTrustLine() { } lastModifiedLedgerSeq := xdr.Uint32(123) - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: nil, Post: &xdr.LedgerEntry{ @@ -53,7 +56,7 @@ func (s *AssetStatsProcessorTestSuiteState) TestCreateTrustLine() { }) s.Assert().NoError(err) - s.mockQ.On("InsertAssetStats", []history.ExpAssetStat{ + s.mockQ.On("InsertAssetStats", s.ctx, []history.ExpAssetStat{ { AssetType: xdr.AssetTypeAssetTypeCreditAlphanum4, AssetIssuer: trustLineIssuer.Address(), @@ -77,7 +80,7 @@ func (s *AssetStatsProcessorTestSuiteState) TestCreateTrustLineUnauthorized() { Asset: xdr.MustNewCreditAsset("EUR", trustLineIssuer.Address()), } lastModifiedLedgerSeq := xdr.Uint32(123) - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: nil, Post: &xdr.LedgerEntry{ @@ -90,7 +93,7 @@ func (s *AssetStatsProcessorTestSuiteState) TestCreateTrustLineUnauthorized() { }) s.Assert().NoError(err) - s.mockQ.On("InsertAssetStats", []history.ExpAssetStat{ + s.mockQ.On("InsertAssetStats", s.ctx, []history.ExpAssetStat{ { AssetType: xdr.AssetTypeAssetTypeCreditAlphanum4, AssetIssuer: trustLineIssuer.Address(), @@ -114,11 +117,13 @@ func TestAssetStatsProcessorTestSuiteLedger(t *testing.T) { type AssetStatsProcessorTestSuiteLedger struct { suite.Suite + ctx context.Context processor *AssetStatsProcessor mockQ *history.MockQAssetStats } func (s *AssetStatsProcessorTestSuiteLedger) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQAssetStats{} s.processor = NewAssetStatsProcessor(s.mockQ, true) @@ -150,7 +155,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertClaimableBalance() { // test inserts - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: nil, Post: &xdr.LedgerEntry{ @@ -163,7 +168,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertClaimableBalance() { }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: nil, Post: &xdr.LedgerEntry{ @@ -185,7 +190,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertClaimableBalance() { }, } - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: nil, Post: &xdr.LedgerEntry{ @@ -203,7 +208,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertClaimableBalance() { updatedClaimableBalance := claimableBalance updatedClaimableBalance.Amount *= 2 - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -222,12 +227,12 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertClaimableBalance() { }) s.Assert().NoError(err) - s.mockQ.On("GetAssetStat", + s.mockQ.On("GetAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "EUR", trustLineIssuer.Address(), ).Return(history.ExpAssetStat{}, sql.ErrNoRows).Once() - s.mockQ.On("InsertAssetStat", history.ExpAssetStat{ + s.mockQ.On("InsertAssetStat", s.ctx, history.ExpAssetStat{ AssetType: xdr.AssetTypeAssetTypeCreditAlphanum4, AssetIssuer: trustLineIssuer.Address(), AssetCode: "EUR", @@ -244,12 +249,12 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertClaimableBalance() { NumAccounts: 0, }).Return(int64(1), nil).Once() - s.mockQ.On("GetAssetStat", + s.mockQ.On("GetAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "USD", trustLineIssuer.Address(), ).Return(history.ExpAssetStat{}, sql.ErrNoRows).Once() - s.mockQ.On("InsertAssetStat", history.ExpAssetStat{ + s.mockQ.On("InsertAssetStat", s.ctx, history.ExpAssetStat{ AssetType: xdr.AssetTypeAssetTypeCreditAlphanum4, AssetIssuer: trustLineIssuer.Address(), AssetCode: "USD", @@ -266,12 +271,12 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertClaimableBalance() { NumAccounts: 0, }).Return(int64(1), nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *AssetStatsProcessorTestSuiteLedger) TestInsertTrustLine() { // should be ignored because it's not an trust line type - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: nil, Post: &xdr.LedgerEntry{ @@ -300,7 +305,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertTrustLine() { } lastModifiedLedgerSeq := xdr.Uint32(1234) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: nil, Post: &xdr.LedgerEntry{ @@ -313,7 +318,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertTrustLine() { }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: nil, Post: &xdr.LedgerEntry{ @@ -338,7 +343,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertTrustLine() { Balance: 10, } - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -357,7 +362,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertTrustLine() { }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -376,12 +381,12 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertTrustLine() { }) s.Assert().NoError(err) - s.mockQ.On("GetAssetStat", + s.mockQ.On("GetAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "EUR", trustLineIssuer.Address(), ).Return(history.ExpAssetStat{}, sql.ErrNoRows).Once() - s.mockQ.On("InsertAssetStat", history.ExpAssetStat{ + s.mockQ.On("InsertAssetStat", s.ctx, history.ExpAssetStat{ AssetType: xdr.AssetTypeAssetTypeCreditAlphanum4, AssetIssuer: trustLineIssuer.Address(), AssetCode: "EUR", @@ -398,12 +403,12 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertTrustLine() { NumAccounts: 1, }).Return(int64(1), nil).Once() - s.mockQ.On("GetAssetStat", + s.mockQ.On("GetAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "USD", trustLineIssuer.Address(), ).Return(history.ExpAssetStat{}, sql.ErrNoRows).Once() - s.mockQ.On("InsertAssetStat", history.ExpAssetStat{ + s.mockQ.On("InsertAssetStat", s.ctx, history.ExpAssetStat{ AssetType: xdr.AssetTypeAssetTypeCreditAlphanum4, AssetIssuer: trustLineIssuer.Address(), AssetCode: "USD", @@ -420,7 +425,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertTrustLine() { NumAccounts: 0, }).Return(int64(1), nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *AssetStatsProcessorTestSuiteLedger) TestInsertClaimableBalanceAndTrustline() { @@ -441,7 +446,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertClaimableBalanceAndTrustl } lastModifiedLedgerSeq := xdr.Uint32(1234) - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: nil, Post: &xdr.LedgerEntry{ @@ -454,7 +459,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertClaimableBalanceAndTrustl }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: nil, Post: &xdr.LedgerEntry{ @@ -467,12 +472,12 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertClaimableBalanceAndTrustl }) s.Assert().NoError(err) - s.mockQ.On("GetAssetStat", + s.mockQ.On("GetAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "EUR", trustLineIssuer.Address(), ).Return(history.ExpAssetStat{}, sql.ErrNoRows).Once() - s.mockQ.On("InsertAssetStat", history.ExpAssetStat{ + s.mockQ.On("InsertAssetStat", s.ctx, history.ExpAssetStat{ AssetType: xdr.AssetTypeAssetTypeCreditAlphanum4, AssetIssuer: trustLineIssuer.Address(), AssetCode: "EUR", @@ -490,7 +495,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestInsertClaimableBalanceAndTrustl NumAccounts: 1, }).Return(int64(1), nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLine() { @@ -509,7 +514,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLine() { Flags: xdr.Uint32(xdr.TrustLineFlagsAuthorizedFlag), } - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -528,7 +533,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLine() { }) s.Assert().NoError(err) - s.mockQ.On("GetAssetStat", + s.mockQ.On("GetAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "EUR", trustLineIssuer.Address(), @@ -546,7 +551,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLine() { Amount: "100", NumAccounts: 1, }, nil).Once() - s.mockQ.On("UpdateAssetStat", history.ExpAssetStat{ + s.mockQ.On("UpdateAssetStat", s.ctx, history.ExpAssetStat{ AssetType: xdr.AssetTypeAssetTypeCreditAlphanum4, AssetIssuer: trustLineIssuer.Address(), AssetCode: "EUR", @@ -561,7 +566,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLine() { NumAccounts: 1, }).Return(int64(1), nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() { @@ -607,7 +612,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() Flags: xdr.Uint32(xdr.TrustLineFlagsAuthorizedToMaintainLiabilitiesFlag), } - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq - 1, @@ -626,7 +631,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq - 1, @@ -645,7 +650,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq - 1, @@ -664,7 +669,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() }) s.Assert().NoError(err) - s.mockQ.On("GetAssetStat", + s.mockQ.On("GetAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "EUR", trustLineIssuer.Address(), @@ -684,7 +689,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() Amount: "0", NumAccounts: 0, }, nil).Once() - s.mockQ.On("UpdateAssetStat", history.ExpAssetStat{ + s.mockQ.On("UpdateAssetStat", s.ctx, history.ExpAssetStat{ AssetType: xdr.AssetTypeAssetTypeCreditAlphanum4, AssetIssuer: trustLineIssuer.Address(), AssetCode: "EUR", @@ -701,7 +706,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() NumAccounts: 1, }).Return(int64(1), nil).Once() - s.mockQ.On("GetAssetStat", + s.mockQ.On("GetAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "USD", trustLineIssuer.Address(), @@ -721,7 +726,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() Amount: "100", NumAccounts: 1, }, nil).Once() - s.mockQ.On("UpdateAssetStat", history.ExpAssetStat{ + s.mockQ.On("UpdateAssetStat", s.ctx, history.ExpAssetStat{ AssetType: xdr.AssetTypeAssetTypeCreditAlphanum4, AssetIssuer: trustLineIssuer.Address(), AssetCode: "USD", @@ -738,7 +743,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() NumAccounts: 0, }).Return(int64(1), nil).Once() - s.mockQ.On("GetAssetStat", + s.mockQ.On("GetAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "ETH", trustLineIssuer.Address(), @@ -758,7 +763,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() Amount: "100", NumAccounts: 1, }, nil).Once() - s.mockQ.On("UpdateAssetStat", history.ExpAssetStat{ + s.mockQ.On("UpdateAssetStat", s.ctx, history.ExpAssetStat{ AssetType: xdr.AssetTypeAssetTypeCreditAlphanum4, AssetIssuer: trustLineIssuer.Address(), AssetCode: "ETH", @@ -775,7 +780,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() NumAccounts: 0, }).Return(int64(1), nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *AssetStatsProcessorTestSuiteLedger) TestRemoveClaimableBalance() { @@ -796,7 +801,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestRemoveClaimableBalance() { }, } - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -808,7 +813,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestRemoveClaimableBalance() { }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -820,7 +825,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestRemoveClaimableBalance() { }) s.Assert().NoError(err) - s.mockQ.On("GetAssetStat", + s.mockQ.On("GetAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "EUR", trustLineIssuer.Address(), @@ -840,13 +845,13 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestRemoveClaimableBalance() { Amount: "0", NumAccounts: 0, }, nil).Once() - s.mockQ.On("RemoveAssetStat", + s.mockQ.On("RemoveAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "EUR", trustLineIssuer.Address(), ).Return(int64(1), nil).Once() - s.mockQ.On("GetAssetStat", + s.mockQ.On("GetAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "USD", trustLineIssuer.Address(), @@ -867,7 +872,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestRemoveClaimableBalance() { Amount: "0", NumAccounts: 0, }, nil).Once() - s.mockQ.On("UpdateAssetStat", history.ExpAssetStat{ + s.mockQ.On("UpdateAssetStat", s.ctx, history.ExpAssetStat{ AssetType: xdr.AssetTypeAssetTypeCreditAlphanum4, AssetIssuer: trustLineIssuer.Address(), AssetCode: "USD", @@ -882,7 +887,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestRemoveClaimableBalance() { NumAccounts: 0, }).Return(int64(1), nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *AssetStatsProcessorTestSuiteLedger) TestRemoveTrustLine() { @@ -898,7 +903,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestRemoveTrustLine() { Balance: 0, } - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -910,7 +915,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestRemoveTrustLine() { }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -922,7 +927,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestRemoveTrustLine() { }) s.Assert().NoError(err) - s.mockQ.On("GetAssetStat", + s.mockQ.On("GetAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "EUR", trustLineIssuer.Address(), @@ -942,13 +947,13 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestRemoveTrustLine() { Amount: "0", NumAccounts: 1, }, nil).Once() - s.mockQ.On("RemoveAssetStat", + s.mockQ.On("RemoveAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "EUR", trustLineIssuer.Address(), ).Return(int64(1), nil).Once() - s.mockQ.On("GetAssetStat", + s.mockQ.On("GetAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "USD", trustLineIssuer.Address(), @@ -968,13 +973,13 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestRemoveTrustLine() { Amount: "0", NumAccounts: 0, }, nil).Once() - s.mockQ.On("RemoveAssetStat", + s.mockQ.On("RemoveAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "USD", trustLineIssuer.Address(), ).Return(int64(1), nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *AssetStatsProcessorTestSuiteLedger) TestProcessUpgradeChange() { @@ -987,7 +992,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestProcessUpgradeChange() { Flags: xdr.Uint32(xdr.TrustLineFlagsAuthorizedFlag), } - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Post: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -1006,7 +1011,7 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestProcessUpgradeChange() { Flags: xdr.Uint32(xdr.TrustLineFlagsAuthorizedFlag), } - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -1025,12 +1030,12 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestProcessUpgradeChange() { }) s.Assert().NoError(err) - s.mockQ.On("GetAssetStat", + s.mockQ.On("GetAssetStat", s.ctx, xdr.AssetTypeAssetTypeCreditAlphanum4, "EUR", trustLineIssuer.Address(), ).Return(history.ExpAssetStat{}, sql.ErrNoRows).Once() - s.mockQ.On("InsertAssetStat", history.ExpAssetStat{ + s.mockQ.On("InsertAssetStat", s.ctx, history.ExpAssetStat{ AssetType: xdr.AssetTypeAssetTypeCreditAlphanum4, AssetIssuer: trustLineIssuer.Address(), AssetCode: "EUR", @@ -1046,5 +1051,5 @@ func (s *AssetStatsProcessorTestSuiteLedger) TestProcessUpgradeChange() { Amount: "10", NumAccounts: 1, }).Return(int64(1), nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } diff --git a/services/horizon/internal/ingest/processors/change_processors.go b/services/horizon/internal/ingest/processors/change_processors.go index eab4305604..6c939288b8 100644 --- a/services/horizon/internal/ingest/processors/change_processors.go +++ b/services/horizon/internal/ingest/processors/change_processors.go @@ -1,6 +1,7 @@ package processors import ( + "context" "io" "github.com/stellar/go/ingest" @@ -8,14 +9,15 @@ import ( ) type ChangeProcessor interface { - ProcessChange(change ingest.Change) error + ProcessChange(ctx context.Context, change ingest.Change) error } type LedgerTransactionProcessor interface { - ProcessTransaction(transaction ingest.LedgerTransaction) error + ProcessTransaction(ctx context.Context, transaction ingest.LedgerTransaction) error } func StreamLedgerTransactions( + ctx context.Context, txProcessor LedgerTransactionProcessor, reader *ingest.LedgerTransactionReader, ) error { @@ -27,7 +29,7 @@ func StreamLedgerTransactions( if err != nil { return errors.Wrap(err, "could not read transaction") } - if err = txProcessor.ProcessTransaction(tx); err != nil { + if err = txProcessor.ProcessTransaction(ctx, tx); err != nil { return errors.Wrapf( err, "could not process transaction %v", @@ -38,6 +40,7 @@ func StreamLedgerTransactions( } func StreamChanges( + ctx context.Context, changeProcessor ChangeProcessor, reader ingest.ChangeReader, ) error { @@ -50,7 +53,7 @@ func StreamChanges( return errors.Wrap(err, "could not read transaction") } - if err = changeProcessor.ProcessChange(change); err != nil { + if err = changeProcessor.ProcessChange(ctx, change); err != nil { return errors.Wrap( err, "could not process change", diff --git a/services/horizon/internal/ingest/processors/change_processors_test.go b/services/horizon/internal/ingest/processors/change_processors_test.go index 1b3104aa59..829552543f 100644 --- a/services/horizon/internal/ingest/processors/change_processors_test.go +++ b/services/horizon/internal/ingest/processors/change_processors_test.go @@ -1,6 +1,7 @@ package processors import ( + "context" "testing" "github.com/stretchr/testify/assert" @@ -11,6 +12,7 @@ import ( func TestStreamReaderError(t *testing.T) { tt := assert.New(t) + ctx := context.Background() mockChangeReader := &ingest.MockChangeReader{} mockChangeReader. @@ -18,12 +20,13 @@ func TestStreamReaderError(t *testing.T) { Return(ingest.Change{}, errors.New("transient error")).Once() mockChangeProcessor := &MockChangeProcessor{} - err := StreamChanges(mockChangeProcessor, mockChangeReader) + err := StreamChanges(ctx, mockChangeProcessor, mockChangeReader) tt.EqualError(err, "could not read transaction: transient error") } func TestStreamChangeProcessorError(t *testing.T) { tt := assert.New(t) + ctx := context.Background() change := ingest.Change{} mockChangeReader := &ingest.MockChangeReader{} @@ -34,11 +37,11 @@ func TestStreamChangeProcessorError(t *testing.T) { mockChangeProcessor := &MockChangeProcessor{} mockChangeProcessor. On( - "ProcessChange", + "ProcessChange", ctx, change, ). Return(errors.New("transient error")).Once() - err := StreamChanges(mockChangeProcessor, mockChangeReader) + err := StreamChanges(ctx, mockChangeProcessor, mockChangeReader) tt.EqualError(err, "could not process change: transient error") } diff --git a/services/horizon/internal/ingest/processors/claimable_balances_change_processor.go b/services/horizon/internal/ingest/processors/claimable_balances_change_processor.go index 79dc442697..390172217a 100644 --- a/services/horizon/internal/ingest/processors/claimable_balances_change_processor.go +++ b/services/horizon/internal/ingest/processors/claimable_balances_change_processor.go @@ -1,6 +1,8 @@ package processors import ( + "context" + "github.com/stellar/go/ingest" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/support/errors" @@ -24,7 +26,7 @@ func (p *ClaimableBalancesChangeProcessor) reset() { p.cache = ingest.NewChangeCompactor() } -func (p *ClaimableBalancesChangeProcessor) ProcessChange(change ingest.Change) error { +func (p *ClaimableBalancesChangeProcessor) ProcessChange(ctx context.Context, change ingest.Change) error { if change.Type != xdr.LedgerEntryTypeClaimableBalance { return nil } @@ -35,7 +37,7 @@ func (p *ClaimableBalancesChangeProcessor) ProcessChange(change ingest.Change) e } if p.cache.Size() > maxBatchSize { - err = p.Commit() + err = p.Commit(ctx) if err != nil { return errors.Wrap(err, "error in Commit") } @@ -45,7 +47,7 @@ func (p *ClaimableBalancesChangeProcessor) ProcessChange(change ingest.Change) e return nil } -func (p *ClaimableBalancesChangeProcessor) Commit() error { +func (p *ClaimableBalancesChangeProcessor) Commit(ctx context.Context) error { batch := p.qClaimableBalances.NewClaimableBalancesBatchInsertBuilder(maxBatchSize) changes := p.cache.GetChanges() @@ -59,7 +61,7 @@ func (p *ClaimableBalancesChangeProcessor) Commit() error { case change.Pre == nil && change.Post != nil: // Created action = "inserting" - err = batch.Add(change.Post) + err = batch.Add(ctx, change.Post) rowsAffected = 1 case change.Pre != nil && change.Post == nil: // Removed @@ -69,7 +71,7 @@ func (p *ClaimableBalancesChangeProcessor) Commit() error { if err != nil { return errors.Wrap(err, "Error creating ledger key") } - rowsAffected, err = p.qClaimableBalances.RemoveClaimableBalance(cBalance) + rowsAffected, err = p.qClaimableBalances.RemoveClaimableBalance(ctx, cBalance) default: // Updated action = "updating" @@ -78,7 +80,7 @@ func (p *ClaimableBalancesChangeProcessor) Commit() error { if err != nil { return errors.Wrap(err, "Error creating ledger key") } - rowsAffected, err = p.qClaimableBalances.UpdateClaimableBalance(*change.Post) + rowsAffected, err = p.qClaimableBalances.UpdateClaimableBalance(ctx, *change.Post) } if err != nil { @@ -99,7 +101,7 @@ func (p *ClaimableBalancesChangeProcessor) Commit() error { } } - err := batch.Exec() + err := batch.Exec(ctx) if err != nil { return errors.Wrap(err, "error executing batch") } diff --git a/services/horizon/internal/ingest/processors/claimable_balances_change_processor_test.go b/services/horizon/internal/ingest/processors/claimable_balances_change_processor_test.go index 049fb90fa9..93b5792017 100644 --- a/services/horizon/internal/ingest/processors/claimable_balances_change_processor_test.go +++ b/services/horizon/internal/ingest/processors/claimable_balances_change_processor_test.go @@ -3,6 +3,7 @@ package processors import ( + "context" "testing" "github.com/stretchr/testify/suite" @@ -18,12 +19,14 @@ func TestClaimableBalancesChangeProcessorTestSuiteState(t *testing.T) { type ClaimableBalancesChangeProcessorTestSuiteState struct { suite.Suite + ctx context.Context processor *ClaimableBalancesChangeProcessor mockQ *history.MockQClaimableBalances mockBatchInsertBuilder *history.MockClaimableBalancesBatchInsertBuilder } func (s *ClaimableBalancesChangeProcessorTestSuiteState) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQClaimableBalances{} s.mockBatchInsertBuilder = &history.MockClaimableBalancesBatchInsertBuilder{} @@ -35,8 +38,8 @@ func (s *ClaimableBalancesChangeProcessorTestSuiteState) SetupTest() { } func (s *ClaimableBalancesChangeProcessorTestSuiteState) TearDownTest() { - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() + s.Assert().NoError(s.processor.Commit(s.ctx)) s.mockQ.AssertExpectations(s.T()) s.mockBatchInsertBuilder.AssertExpectations(s.T()) } @@ -57,7 +60,7 @@ func (s *ClaimableBalancesChangeProcessorTestSuiteState) TestCreatesClaimableBal Amount: 10, } - s.mockBatchInsertBuilder.On("Add", &xdr.LedgerEntry{ + s.mockBatchInsertBuilder.On("Add", s.ctx, &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, Data: xdr.LedgerEntryData{ Type: xdr.LedgerEntryTypeClaimableBalance, @@ -65,7 +68,7 @@ func (s *ClaimableBalancesChangeProcessorTestSuiteState) TestCreatesClaimableBal }, }).Return(nil).Once() - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: nil, Post: &xdr.LedgerEntry{ @@ -85,12 +88,14 @@ func TestClaimableBalancesChangeProcessorTestSuiteLedger(t *testing.T) { type ClaimableBalancesChangeProcessorTestSuiteLedger struct { suite.Suite + ctx context.Context processor *ClaimableBalancesChangeProcessor mockQ *history.MockQClaimableBalances mockBatchInsertBuilder *history.MockClaimableBalancesBatchInsertBuilder } func (s *ClaimableBalancesChangeProcessorTestSuiteLedger) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQClaimableBalances{} s.mockBatchInsertBuilder = &history.MockClaimableBalancesBatchInsertBuilder{} @@ -102,8 +107,8 @@ func (s *ClaimableBalancesChangeProcessorTestSuiteLedger) SetupTest() { } func (s *ClaimableBalancesChangeProcessorTestSuiteLedger) TearDownTest() { - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() + s.Assert().NoError(s.processor.Commit(s.ctx)) s.mockQ.AssertExpectations(s.T()) } @@ -135,7 +140,7 @@ func (s *ClaimableBalancesChangeProcessorTestSuiteLedger) TestNewClaimableBalanc }, }, } - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: nil, Post: &entry, @@ -158,7 +163,7 @@ func (s *ClaimableBalancesChangeProcessorTestSuiteLedger) TestNewClaimableBalanc } entry.LastModifiedLedgerSeq = entry.LastModifiedLedgerSeq - 1 - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: &entry, Post: &updated, @@ -168,6 +173,7 @@ func (s *ClaimableBalancesChangeProcessorTestSuiteLedger) TestNewClaimableBalanc // We use LedgerEntryChangesCache so all changes are squashed s.mockBatchInsertBuilder.On( "Add", + s.ctx, &updated, ).Return(nil).Once() } @@ -213,7 +219,7 @@ func (s *ClaimableBalancesChangeProcessorTestSuiteLedger) TestUpdateClaimableBal }, } - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: &pre, Post: &updated, @@ -222,6 +228,7 @@ func (s *ClaimableBalancesChangeProcessorTestSuiteLedger) TestUpdateClaimableBal s.mockQ.On( "UpdateClaimableBalance", + s.ctx, updated, ).Return(int64(1), nil).Once() } @@ -250,7 +257,7 @@ func (s *ClaimableBalancesChangeProcessorTestSuiteLedger) TestRemoveClaimableBal }, }, } - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeClaimableBalance, Pre: &pre, Post: nil, @@ -259,6 +266,7 @@ func (s *ClaimableBalancesChangeProcessorTestSuiteLedger) TestRemoveClaimableBal s.mockQ.On( "RemoveClaimableBalance", + s.ctx, cBalance, ).Return(int64(1), nil).Once() } diff --git a/services/horizon/internal/ingest/processors/claimable_balances_transaction_processor.go b/services/horizon/internal/ingest/processors/claimable_balances_transaction_processor.go index f67d9d0b4f..c301418ca4 100644 --- a/services/horizon/internal/ingest/processors/claimable_balances_transaction_processor.go +++ b/services/horizon/internal/ingest/processors/claimable_balances_transaction_processor.go @@ -1,6 +1,8 @@ package processors import ( + "context" + "github.com/stellar/go/ingest" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/services/horizon/internal/toid" @@ -42,7 +44,7 @@ func NewClaimableBalancesTransactionProcessor(Q history.QHistoryClaimableBalance } } -func (p *ClaimableBalancesTransactionProcessor) ProcessTransaction(transaction ingest.LedgerTransaction) error { +func (p *ClaimableBalancesTransactionProcessor) ProcessTransaction(ctx context.Context, transaction ingest.LedgerTransaction) error { err := p.addTransactionClaimableBalances(p.claimableBalanceSet, p.sequence, transaction) if err != nil { return err @@ -173,17 +175,17 @@ func claimableBalancesForOperations(transaction ingest.LedgerTransaction, sequen return cbs, nil } -func (p *ClaimableBalancesTransactionProcessor) Commit() error { +func (p *ClaimableBalancesTransactionProcessor) Commit(ctx context.Context) error { if len(p.claimableBalanceSet) > 0 { - if err := p.loadClaimableBalanceIDs(p.claimableBalanceSet); err != nil { + if err := p.loadClaimableBalanceIDs(ctx, p.claimableBalanceSet); err != nil { return err } - if err := p.insertDBTransactionClaimableBalances(p.claimableBalanceSet); err != nil { + if err := p.insertDBTransactionClaimableBalances(ctx, p.claimableBalanceSet); err != nil { return err } - if err := p.insertDBOperationsClaimableBalances(p.claimableBalanceSet); err != nil { + if err := p.insertDBOperationsClaimableBalances(ctx, p.claimableBalanceSet); err != nil { return err } } @@ -191,13 +193,13 @@ func (p *ClaimableBalancesTransactionProcessor) Commit() error { return nil } -func (p *ClaimableBalancesTransactionProcessor) loadClaimableBalanceIDs(claimableBalanceSet map[xdr.ClaimableBalanceId]claimableBalance) error { +func (p *ClaimableBalancesTransactionProcessor) loadClaimableBalanceIDs(ctx context.Context, claimableBalanceSet map[xdr.ClaimableBalanceId]claimableBalance) error { ids := make([]xdr.ClaimableBalanceId, 0, len(claimableBalanceSet)) for id := range claimableBalanceSet { ids = append(ids, id) } - toInternalID, err := p.qClaimableBalances.CreateHistoryClaimableBalances(ids, maxBatchSize) + toInternalID, err := p.qClaimableBalances.CreateHistoryClaimableBalances(ctx, ids, maxBatchSize) if err != nil { return errors.Wrap(err, "Could not create claimable balance ids") } @@ -221,35 +223,35 @@ func (p *ClaimableBalancesTransactionProcessor) loadClaimableBalanceIDs(claimabl return nil } -func (p ClaimableBalancesTransactionProcessor) insertDBTransactionClaimableBalances(claimableBalanceSet map[xdr.ClaimableBalanceId]claimableBalance) error { +func (p ClaimableBalancesTransactionProcessor) insertDBTransactionClaimableBalances(ctx context.Context, claimableBalanceSet map[xdr.ClaimableBalanceId]claimableBalance) error { batch := p.qClaimableBalances.NewTransactionClaimableBalanceBatchInsertBuilder(maxBatchSize) for _, entry := range claimableBalanceSet { for transactionID := range entry.transactionSet { - if err := batch.Add(transactionID, entry.internalID); err != nil { + if err := batch.Add(ctx, transactionID, entry.internalID); err != nil { return errors.Wrap(err, "could not insert transaction claimable balance in db") } } } - if err := batch.Exec(); err != nil { + if err := batch.Exec(ctx); err != nil { return errors.Wrap(err, "could not flush transaction claimable balances to db") } return nil } -func (p ClaimableBalancesTransactionProcessor) insertDBOperationsClaimableBalances(claimableBalanceSet map[xdr.ClaimableBalanceId]claimableBalance) error { +func (p ClaimableBalancesTransactionProcessor) insertDBOperationsClaimableBalances(ctx context.Context, claimableBalanceSet map[xdr.ClaimableBalanceId]claimableBalance) error { batch := p.qClaimableBalances.NewOperationClaimableBalanceBatchInsertBuilder(maxBatchSize) for _, entry := range claimableBalanceSet { for operationID := range entry.operationSet { - if err := batch.Add(operationID, entry.internalID); err != nil { + if err := batch.Add(ctx, operationID, entry.internalID); err != nil { return errors.Wrap(err, "could not insert operation claimable balance in db") } } } - if err := batch.Exec(); err != nil { + if err := batch.Exec(ctx); err != nil { return errors.Wrap(err, "could not flush operation claimable balances to db") } return nil diff --git a/services/horizon/internal/ingest/processors/claimable_balances_transaction_processor_test.go b/services/horizon/internal/ingest/processors/claimable_balances_transaction_processor_test.go index a9b1c30792..bc7a3f438b 100644 --- a/services/horizon/internal/ingest/processors/claimable_balances_transaction_processor_test.go +++ b/services/horizon/internal/ingest/processors/claimable_balances_transaction_processor_test.go @@ -3,6 +3,7 @@ package processors import ( + "context" "testing" "github.com/stretchr/testify/mock" @@ -15,6 +16,7 @@ import ( type ClaimableBalancesTransactionProcessorTestSuiteLedger struct { suite.Suite + ctx context.Context processor *ClaimableBalancesTransactionProcessor mockQ *history.MockQHistoryClaimableBalances mockTransactionBatchInsertBuilder *history.MockTransactionClaimableBalanceBatchInsertBuilder @@ -28,6 +30,7 @@ func TestClaimableBalancesTransactionProcessorTestSuiteLedger(t *testing.T) { } func (s *ClaimableBalancesTransactionProcessorTestSuiteLedger) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQHistoryClaimableBalances{} s.mockTransactionBatchInsertBuilder = &history.MockTransactionClaimableBalanceBatchInsertBuilder{} s.mockOperationBatchInsertBuilder = &history.MockOperationClaimableBalanceBatchInsertBuilder{} @@ -46,16 +49,16 @@ func (s *ClaimableBalancesTransactionProcessorTestSuiteLedger) TearDownTest() { } func (s *ClaimableBalancesTransactionProcessorTestSuiteLedger) mockTransactionBatchAdd(transactionID, internalID int64, err error) { - s.mockTransactionBatchInsertBuilder.On("Add", transactionID, internalID).Return(err).Once() + s.mockTransactionBatchInsertBuilder.On("Add", s.ctx, transactionID, internalID).Return(err).Once() } func (s *ClaimableBalancesTransactionProcessorTestSuiteLedger) mockOperationBatchAdd(operationID, internalID int64, err error) { - s.mockOperationBatchInsertBuilder.On("Add", operationID, internalID).Return(err).Once() + s.mockOperationBatchInsertBuilder.On("Add", s.ctx, operationID, internalID).Return(err).Once() } func (s *ClaimableBalancesTransactionProcessorTestSuiteLedger) TestEmptyClaimableBalances() { // What is this expecting? Doesn't seem to assert anything meaningful... - err := s.processor.Commit() + err := s.processor.Commit(context.Background()) s.Assert().NoError(err) } @@ -64,8 +67,8 @@ func (s *ClaimableBalancesTransactionProcessorTestSuiteLedger) testOperationInse internalID := int64(1234) txn := createTransaction(true, 1) txn.Envelope.Operations()[0].Body = body - txn.Meta.V = 2 - txn.Meta.V2.Operations = []xdr.OperationMeta{ + txn.UnsafeMeta.V = 2 + txn.UnsafeMeta.V2.Operations = []xdr.OperationMeta{ {Changes: xdr.LedgerEntryChanges{ { Type: xdr.LedgerEntryChangeTypeLedgerEntryState, @@ -109,9 +112,9 @@ func (s *ClaimableBalancesTransactionProcessorTestSuiteLedger) testOperationInse hexID, _ := xdr.MarshalHex(balanceID) // Setup a q - s.mockQ.On("CreateHistoryClaimableBalances", mock.AnythingOfType("[]xdr.ClaimableBalanceId"), maxBatchSize). + s.mockQ.On("CreateHistoryClaimableBalances", s.ctx, mock.AnythingOfType("[]xdr.ClaimableBalanceId"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]xdr.ClaimableBalanceId) + arg := args.Get(1).([]xdr.ClaimableBalanceId) s.Assert().ElementsMatch( []xdr.ClaimableBalanceId{ balanceID, @@ -126,18 +129,18 @@ func (s *ClaimableBalancesTransactionProcessorTestSuiteLedger) testOperationInse s.mockQ.On("NewTransactionClaimableBalanceBatchInsertBuilder", maxBatchSize). Return(s.mockTransactionBatchInsertBuilder).Once() s.mockTransactionBatchAdd(txnID, internalID, nil) - s.mockTransactionBatchInsertBuilder.On("Exec").Return(nil).Once() + s.mockTransactionBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() // Prepare to process operations successfully s.mockQ.On("NewOperationClaimableBalanceBatchInsertBuilder", maxBatchSize). Return(s.mockOperationBatchInsertBuilder).Once() s.mockOperationBatchAdd(opID, internalID, nil) - s.mockOperationBatchInsertBuilder.On("Exec").Return(nil).Once() + s.mockOperationBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() // Process the transaction - err := s.processor.ProcessTransaction(txn) + err := s.processor.ProcessTransaction(s.ctx, txn) s.Assert().NoError(err) - err = s.processor.Commit() + err = s.processor.Commit(s.ctx) s.Assert().NoError(err) } diff --git a/services/horizon/internal/ingest/processors/effects_processor.go b/services/horizon/internal/ingest/processors/effects_processor.go index 9708f94d03..b45d1f726f 100644 --- a/services/horizon/internal/ingest/processors/effects_processor.go +++ b/services/horizon/internal/ingest/processors/effects_processor.go @@ -1,12 +1,14 @@ package processors import ( + "context" "encoding/base64" "encoding/json" "fmt" "reflect" "sort" + "github.com/guregu/null" "github.com/stellar/go/amount" "github.com/stellar/go/ingest" "github.com/stellar/go/keypair" @@ -29,13 +31,13 @@ func NewEffectProcessor(effectsQ history.QEffects, sequence uint32) *EffectProce } } -func (p *EffectProcessor) loadAccountIDs(accountSet map[string]int64) error { +func (p *EffectProcessor) loadAccountIDs(ctx context.Context, accountSet map[string]int64) error { addresses := make([]string, 0, len(accountSet)) for address := range accountSet { addresses = append(addresses, address) } - addressToID, err := p.effectsQ.CreateAccounts(addresses, maxBatchSize) + addressToID, err := p.effectsQ.CreateAccounts(ctx, addresses, maxBatchSize) if err != nil { return errors.Wrap(err, "Could not create account ids") } @@ -73,7 +75,7 @@ func operationsEffects(transaction ingest.LedgerTransaction, sequence uint32) ([ return effects, nil } -func (p *EffectProcessor) insertDBOperationsEffects(effects []effect, accountSet map[string]int64) error { +func (p *EffectProcessor) insertDBOperationsEffects(ctx context.Context, effects []effect, accountSet map[string]int64) error { batch := p.effectsQ.NewEffectBatchInsertBuilder(maxBatchSize) for _, effect := range effects { @@ -90,8 +92,9 @@ func (p *EffectProcessor) insertDBOperationsEffects(effects []effect, accountSet return errors.Wrapf(err, "Error marshaling details for operation effect %v", effect.operationID) } - if err := batch.Add( + if err := batch.Add(ctx, accountID, + effect.addressMuxed, effect.operationID, effect.order, effect.effectType, @@ -101,13 +104,13 @@ func (p *EffectProcessor) insertDBOperationsEffects(effects []effect, accountSet } } - if err := batch.Exec(); err != nil { + if err := batch.Exec(ctx); err != nil { return errors.Wrap(err, "could not flush operation effects to db") } return nil } -func (p *EffectProcessor) ProcessTransaction(transaction ingest.LedgerTransaction) (err error) { +func (p *EffectProcessor) ProcessTransaction(ctx context.Context, transaction ingest.LedgerTransaction) (err error) { // Failed transactions don't have operation effects if !transaction.Result.Successful() { return nil @@ -123,7 +126,7 @@ func (p *EffectProcessor) ProcessTransaction(transaction ingest.LedgerTransactio return nil } -func (p *EffectProcessor) Commit() (err error) { +func (p *EffectProcessor) Commit(ctx context.Context) (err error) { if len(p.effects) > 0 { accountSet := map[string]int64{} @@ -131,11 +134,11 @@ func (p *EffectProcessor) Commit() (err error) { accountSet[effect.address] = 0 } - if err = p.loadAccountIDs(accountSet); err != nil { + if err = p.loadAccountIDs(ctx, accountSet); err != nil { return err } - if err = p.insertDBOperationsEffects(p.effects, accountSet); err != nil { + if err = p.insertDBOperationsEffects(ctx, p.effects, accountSet); err != nil { return err } } @@ -144,11 +147,12 @@ func (p *EffectProcessor) Commit() (err error) { } type effect struct { - address string - operationID int64 - details map[string]interface{} - effectType history.EffectType - order uint32 + address string + addressMuxed null.String + operationID int64 + details map[string]interface{} + effectType history.EffectType + order uint32 } // Effects returns the operation effects @@ -233,16 +237,30 @@ type effectsWrapper struct { operation *transactionOperationWrapper } -func (e *effectsWrapper) add(address string, effectType history.EffectType, details map[string]interface{}) { +func (e *effectsWrapper) add(address string, addressMuxed null.String, effectType history.EffectType, details map[string]interface{}) { e.effects = append(e.effects, effect{ - address: address, - operationID: e.operation.ID(), - effectType: effectType, - order: uint32(len(e.effects) + 1), - details: details, + address: address, + addressMuxed: addressMuxed, + operationID: e.operation.ID(), + effectType: effectType, + order: uint32(len(e.effects) + 1), + details: details, }) } +func (e *effectsWrapper) addUnmuxed(address *xdr.AccountId, effectType history.EffectType, details map[string]interface{}) { + e.add(address.Address(), null.String{}, effectType, details) +} + +func (e *effectsWrapper) addMuxed(address *xdr.MuxedAccount, effectType history.EffectType, details map[string]interface{}) { + var addressMuxed null.String + if address.Type == xdr.CryptoKeyTypeKeyTypeMuxedEd25519 { + addressMuxed = null.StringFrom(address.Address()) + } + accID := address.ToAccountId() + e.add(accID.Address(), addressMuxed, effectType, details) +} + var sponsoringEffectsTable = map[xdr.LedgerEntryType]struct { created, updated, removed history.EffectType }{ @@ -311,12 +329,12 @@ func (e *effectsWrapper) addSignerSponsorshipEffects(change ingest.Change) { details["sponsor"] = post.Address() details["signer"] = signer srcAccount := change.Post.Data.MustAccount().AccountId - e.add(srcAccount.Address(), history.EffectSignerSponsorshipCreated, details) + e.addUnmuxed(&srcAccount, history.EffectSignerSponsorshipCreated, details) case !foundPost && foundPre: details["former_sponsor"] = pre.Address() details["signer"] = signer srcAccount := change.Pre.Data.MustAccount().AccountId - e.add(srcAccount.Address(), history.EffectSignerSponsorshipRemoved, details) + e.addUnmuxed(&srcAccount, history.EffectSignerSponsorshipRemoved, details) case foundPre && foundPost: formerSponsor := pre.Address() newSponsor := post.Address() @@ -328,7 +346,7 @@ func (e *effectsWrapper) addSignerSponsorshipEffects(change ingest.Change) { details["new_sponsor"] = newSponsor details["signer"] = signer srcAccount := change.Post.Data.MustAccount().AccountId - e.add(srcAccount.Address(), history.EffectSignerSponsorshipUpdated, details) + e.addUnmuxed(&srcAccount, history.EffectSignerSponsorshipUpdated, details) } } } @@ -365,7 +383,11 @@ func (e *effectsWrapper) addLedgerEntrySponsorshipEffects(change ingest.Change) return nil } - var accountAddress string + var ( + accountID *xdr.AccountId + muxedAccount *xdr.MuxedAccount + ) + var data xdr.LedgerEntryData if change.Post != nil { data = change.Post.Data @@ -375,17 +397,17 @@ func (e *effectsWrapper) addLedgerEntrySponsorshipEffects(change ingest.Change) switch change.Type { case xdr.LedgerEntryTypeAccount: - aid := data.MustAccount().AccountId - accountAddress = aid.Address() + a := data.MustAccount().AccountId + accountID = &a case xdr.LedgerEntryTypeTrustline: - aid := data.MustTrustLine().AccountId - accountAddress = aid.Address() + a := data.MustTrustLine().AccountId + accountID = &a details["asset"] = data.MustTrustLine().Asset.StringCanonical() case xdr.LedgerEntryTypeData: - accountAddress = e.operation.SourceAccount().Address() + muxedAccount = e.operation.SourceAccount() details["data_name"] = data.MustData().DataName case xdr.LedgerEntryTypeClaimableBalance: - accountAddress = e.operation.SourceAccount().Address() + muxedAccount = e.operation.SourceAccount() var err error details["balance_id"], err = xdr.MarshalHex(data.MustClaimableBalance().BalanceId) if err != nil { @@ -395,30 +417,35 @@ func (e *effectsWrapper) addLedgerEntrySponsorshipEffects(change ingest.Change) return errors.Errorf("invalid sponsorship ledger entry type %v", change.Type.String()) } - e.add(accountAddress, effectType, details) + if accountID != nil { + e.addUnmuxed(accountID, effectType, details) + } else { + e.addMuxed(muxedAccount, effectType, details) + } + return nil } func (e *effectsWrapper) addAccountCreatedEffects() { op := e.operation.operation.Body.MustCreateAccountOp() - e.add( - op.Destination.Address(), + e.addUnmuxed( + &op.Destination, history.EffectAccountCreated, map[string]interface{}{ "starting_balance": amount.String(op.StartingBalance), }, ) - e.add( - e.operation.SourceAccount().Address(), + e.addMuxed( + e.operation.SourceAccount(), history.EffectAccountDebited, map[string]interface{}{ "asset_type": "native", "amount": amount.String(op.StartingBalance), }, ) - e.add( - op.Destination.Address(), + e.addUnmuxed( + &op.Destination, history.EffectSignerCreated, map[string]interface{}{ "public_key": op.Destination.Address(), @@ -433,14 +460,13 @@ func (e *effectsWrapper) addPaymentEffects() { details := map[string]interface{}{"amount": amount.String(op.Amount)} addAssetDetails(details, op.Asset, "") - aid := op.Destination.ToAccountId() - e.add( - aid.Address(), + e.addMuxed( + &op.Destination, history.EffectAccountCredited, details, ) - e.add( - e.operation.SourceAccount().Address(), + e.addMuxed( + e.operation.SourceAccount(), history.EffectAccountDebited, details, ) @@ -454,9 +480,8 @@ func (e *effectsWrapper) pathPaymentStrictReceiveEffects() { details := map[string]interface{}{"amount": amount.String(op.DestAmount)} addAssetDetails(details, op.DestAsset, "") - aid := op.Destination.ToAccountId() - e.add( - aid.Address(), + e.addMuxed( + &op.Destination, history.EffectAccountCredited, details, ) @@ -465,8 +490,8 @@ func (e *effectsWrapper) pathPaymentStrictReceiveEffects() { details = map[string]interface{}{"amount": amount.String(result.SendAmount())} addAssetDetails(details, op.SendAsset, "") - e.add( - source.Address(), + e.addMuxed( + source, history.EffectAccountDebited, details, ) @@ -482,12 +507,11 @@ func (e *effectsWrapper) addPathPaymentStrictSendEffects() { details := map[string]interface{}{"amount": amount.String(result.DestAmount())} addAssetDetails(details, op.DestAsset, "") - aid := op.Destination.ToAccountId() - e.add(aid.Address(), history.EffectAccountCredited, details) + e.addMuxed(&op.Destination, history.EffectAccountCredited, details) details = map[string]interface{}{"amount": amount.String(op.SendAmount)} addAssetDetails(details, op.SendAsset, "") - e.add(source.Address(), history.EffectAccountDebited, details) + e.addMuxed(source, history.EffectAccountDebited, details) e.addIngestTradeEffects(*source, resultSuccess.Offers) } @@ -526,7 +550,7 @@ func (e *effectsWrapper) addSetOptionsEffects() error { op := e.operation.operation.Body.MustSetOptionsOp() if op.HomeDomain != nil { - e.add(source.Address(), history.EffectAccountHomeDomainUpdated, + e.addMuxed(source, history.EffectAccountHomeDomainUpdated, map[string]interface{}{ "home_domain": string(*op.HomeDomain), }, @@ -548,7 +572,7 @@ func (e *effectsWrapper) addSetOptionsEffects() error { } if len(thresholdDetails) > 0 { - e.add(source.Address(), history.EffectAccountThresholdsUpdated, thresholdDetails) + e.addMuxed(source, history.EffectAccountThresholdsUpdated, thresholdDetails) } flagDetails := map[string]interface{}{} @@ -560,11 +584,11 @@ func (e *effectsWrapper) addSetOptionsEffects() error { } if len(flagDetails) > 0 { - e.add(source.Address(), history.EffectAccountFlagsUpdated, flagDetails) + e.addMuxed(source, history.EffectAccountFlagsUpdated, flagDetails) } if op.InflationDest != nil { - e.add(source.Address(), history.EffectAccountInflationDestinationUpdated, + e.addMuxed(source, history.EffectAccountInflationDestinationUpdated, map[string]interface{}{ "inflation_destination": op.InflationDest.Address(), }, @@ -600,14 +624,14 @@ func (e *effectsWrapper) addSetOptionsEffects() error { for _, addy := range beforeSortedSigners { weight, ok := after[addy] if !ok { - e.add(source.Address(), history.EffectSignerRemoved, map[string]interface{}{ + e.addMuxed(source, history.EffectSignerRemoved, map[string]interface{}{ "public_key": addy, }) continue } if weight != before[addy] { - e.add(source.Address(), history.EffectSignerUpdated, map[string]interface{}{ + e.addMuxed(source, history.EffectSignerUpdated, map[string]interface{}{ "public_key": addy, "weight": weight, }) @@ -629,7 +653,7 @@ func (e *effectsWrapper) addSetOptionsEffects() error { continue } - e.add(source.Address(), history.EffectSignerCreated, map[string]interface{}{ + e.addMuxed(source, history.EffectSignerCreated, map[string]interface{}{ "public_key": addy, "weight": weight, }) @@ -673,7 +697,7 @@ func (e *effectsWrapper) addChangeTrustEffects() error { break } - e.add(source.Address(), effect, details) + e.addMuxed(source, effect, details) } return nil } @@ -681,7 +705,7 @@ func (e *effectsWrapper) addChangeTrustEffects() error { func (e *effectsWrapper) addAllowTrustEffects() { source := e.operation.SourceAccount() op := e.operation.operation.Body.MustAllowTrustOp() - asset := op.Asset.ToAsset(*source) + asset := op.Asset.ToAsset(source.ToAccountId()) details := map[string]interface{}{ "trustor": op.Trustor.Address(), } @@ -689,13 +713,13 @@ func (e *effectsWrapper) addAllowTrustEffects() { switch { case xdr.TrustLineFlags(op.Authorize).IsAuthorized(): - e.add(source.Address(), history.EffectTrustlineAuthorized, details) + e.addMuxed(source, history.EffectTrustlineAuthorized, details) // Forward compatibility setFlags := xdr.Uint32(xdr.TrustLineFlagsAuthorizedFlag) e.addTrustLineFlagsEffect(source, &op.Trustor, asset, &setFlags, nil) case xdr.TrustLineFlags(op.Authorize).IsAuthorizedToMaintainLiabilitiesFlag(): - e.add( - source.Address(), + e.addMuxed( + source, history.EffectTrustlineAuthorizedToMaintainLiabilities, details, ) @@ -703,7 +727,7 @@ func (e *effectsWrapper) addAllowTrustEffects() { setFlags := xdr.Uint32(xdr.TrustLineFlagsAuthorizedToMaintainLiabilitiesFlag) e.addTrustLineFlagsEffect(source, &op.Trustor, asset, &setFlags, nil) default: - e.add(source.Address(), history.EffectTrustlineDeauthorized, details) + e.addMuxed(source, history.EffectTrustlineDeauthorized, details) // Forward compatibility, show both as cleared clearFlags := xdr.Uint32(xdr.TrustLineFlagsAuthorizedFlag | xdr.TrustLineFlagsAuthorizedToMaintainLiabilitiesFlag) e.addTrustLineFlagsEffect(source, &op.Trustor, asset, nil, &clearFlags) @@ -720,16 +744,15 @@ func (e *effectsWrapper) addAccountMergeEffects() { "asset_type": "native", } - e.add(source.Address(), history.EffectAccountDebited, details) - aid := dest.ToAccountId() - e.add(aid.Address(), history.EffectAccountCredited, details) - e.add(source.Address(), history.EffectAccountRemoved, map[string]interface{}{}) + e.addMuxed(source, history.EffectAccountDebited, details) + e.addMuxed(&dest, history.EffectAccountCredited, details) + e.addMuxed(source, history.EffectAccountRemoved, map[string]interface{}{}) } func (e *effectsWrapper) addInflationEffects() { payouts := e.operation.OperationResult().MustInflationResult().MustPayouts() for _, payout := range payouts { - e.add(payout.Destination.Address(), history.EffectAccountCredited, + e.addUnmuxed(&payout.Destination, history.EffectAccountCredited, map[string]interface{}{ "amount": amount.String(payout.Amount), "asset_type": "native", @@ -775,7 +798,7 @@ func (e *effectsWrapper) addManageDataEffects() error { break } - e.add(source.Address(), effect, details) + e.addMuxed(source, effect, details) return nil } @@ -799,7 +822,7 @@ func (e *effectsWrapper) addBumpSequenceEffects() error { if beforeAccount.SeqNum != afterAccount.SeqNum { details := map[string]interface{}{"new_seq": afterAccount.SeqNum} - e.add(source.Address(), history.EffectSequenceBumped, details) + e.addMuxed(source, history.EffectSequenceBumped, details) } break } @@ -835,16 +858,17 @@ func (e *effectsWrapper) addCreateClaimableBalanceEffects(changes []ingest.Chang setClaimableBalanceFlagDetails(details, change.Post.Data.ClaimableBalance.Flags()) break } - e.add( - e.operation.SourceAccount().Address(), + source := e.operation.SourceAccount() + e.addMuxed( + source, history.EffectClaimableBalanceCreated, details, ) for _, c := range op.Claimants { cv0 := c.MustV0() - e.add( - cv0.Destination.Address(), + e.addUnmuxed( + &cv0.Destination, history.EffectClaimableBalanceClaimantCreated, map[string]interface{}{ "balance_id": balanceID, @@ -859,8 +883,8 @@ func (e *effectsWrapper) addCreateClaimableBalanceEffects(changes []ingest.Chang "amount": amount.String(op.Amount), } addAssetDetails(details, op.Asset, "") - e.add( - e.operation.SourceAccount().Address(), + e.addMuxed( + source, history.EffectAccountDebited, details, ) @@ -907,8 +931,9 @@ func (e *effectsWrapper) addClaimClaimableBalanceEffects(changes []ingest.Change "asset": cBalance.Asset.StringCanonical(), } setClaimableBalanceFlagDetails(details, cBalance.Flags()) - e.add( - e.operation.SourceAccount().Address(), + source := e.operation.SourceAccount() + e.addMuxed( + source, history.EffectClaimableBalanceClaimed, details, ) @@ -917,8 +942,8 @@ func (e *effectsWrapper) addClaimClaimableBalanceEffects(changes []ingest.Change "amount": amount.String(cBalance.Amount), } addAssetDetails(details, cBalance.Asset, "") - e.add( - e.operation.SourceAccount().Address(), + e.addMuxed( + source, history.EffectAccountCredited, details, ) @@ -926,7 +951,7 @@ func (e *effectsWrapper) addClaimClaimableBalanceEffects(changes []ingest.Change return nil } -func (e *effectsWrapper) addIngestTradeEffects(buyer xdr.AccountId, claims []xdr.ClaimOfferAtom) { +func (e *effectsWrapper) addIngestTradeEffects(buyer xdr.MuxedAccount, claims []xdr.ClaimOfferAtom) { for _, claim := range claims { if claim.AmountSold == 0 && claim.AmountBought == 0 { continue @@ -935,14 +960,14 @@ func (e *effectsWrapper) addIngestTradeEffects(buyer xdr.AccountId, claims []xdr seller := claim.SellerId bd, sd := tradeDetails(buyer, seller, claim) - e.add( - buyer.Address(), + e.addMuxed( + &buyer, history.EffectTrade, bd, ) - e.add( - seller.Address(), + e.addUnmuxed( + &seller, history.EffectTrade, sd, ) @@ -958,15 +983,14 @@ func (e *effectsWrapper) addClawbackEffects() error { addAssetDetails(details, op.Asset, "") // The funds will be burned, but even with that, we generated an account credited effect - e.add( - source.Address(), + e.addMuxed( + source, history.EffectAccountCredited, details, ) - from := op.From.ToAccountId() - e.add( - from.Address(), + e.addMuxed( + &op.From, history.EffectAccountDebited, details, ) @@ -983,8 +1007,9 @@ func (e *effectsWrapper) addClawbackClaimableBalanceEffects(changes []ingest.Cha details := map[string]interface{}{ "balance_id": balanceId, } - e.add( - e.operation.SourceAccount().Address(), + source := e.operation.SourceAccount() + e.addMuxed( + source, history.EffectClaimableBalanceClawedBack, details, ) @@ -995,8 +1020,8 @@ func (e *effectsWrapper) addClawbackClaimableBalanceEffects(changes []ingest.Cha cb := c.Pre.Data.ClaimableBalance details = map[string]interface{}{"amount": amount.String(cb.Amount)} addAssetDetails(details, cb.Asset, "") - e.add( - e.operation.SourceAccount().Address(), + e.addMuxed( + source, history.EffectAccountCredited, details, ) @@ -1015,7 +1040,7 @@ func (e *effectsWrapper) addSetTrustLineFlagsEffects() error { } func (e *effectsWrapper) addTrustLineFlagsEffect( - account *xdr.AccountId, + account *xdr.MuxedAccount, trustor *xdr.AccountId, asset xdr.Asset, setFlags *xdr.Uint32, @@ -1036,7 +1061,7 @@ func (e *effectsWrapper) addTrustLineFlagsEffect( } if flagDetailsAdded { - e.add(account.Address(), history.EffectTrustlineFlagsUpdated, details) + e.addMuxed(account, history.EffectTrustlineFlagsUpdated, details) } } @@ -1067,7 +1092,7 @@ func setAuthFlagDetails(flagDetails map[string]interface{}, flags xdr.AccountFla } } -func tradeDetails(buyer, seller xdr.AccountId, claim xdr.ClaimOfferAtom) (bd map[string]interface{}, sd map[string]interface{}) { +func tradeDetails(buyer xdr.MuxedAccount, seller xdr.AccountId, claim xdr.ClaimOfferAtom) (bd map[string]interface{}, sd map[string]interface{}) { bd = map[string]interface{}{ "offer_id": claim.OfferId, "seller": seller.Address(), @@ -1079,10 +1104,10 @@ func tradeDetails(buyer, seller xdr.AccountId, claim xdr.ClaimOfferAtom) (bd map sd = map[string]interface{}{ "offer_id": claim.OfferId, - "seller": buyer.Address(), "bought_amount": amount.String(claim.AmountBought), "sold_amount": amount.String(claim.AmountSold), } + addAccountAndMuxedAccountDetails(sd, buyer, "seller") addAssetDetails(sd, claim.AssetBought, "bought_") addAssetDetails(sd, claim.AssetSold, "sold_") diff --git a/services/horizon/internal/ingest/processors/effects_processor_test.go b/services/horizon/internal/ingest/processors/effects_processor_test.go index 5ff9bf6a0d..331aab7cc9 100644 --- a/services/horizon/internal/ingest/processors/effects_processor_test.go +++ b/services/horizon/internal/ingest/processors/effects_processor_test.go @@ -3,8 +3,10 @@ package processors import ( + "context" "testing" + "github.com/guregu/null" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/suite" @@ -19,6 +21,7 @@ import ( type EffectsProcessorTestSuiteLedger struct { suite.Suite + ctx context.Context processor *EffectProcessor mockQ *history.MockQEffects mockBatchInsertBuilder *history.MockEffectBatchInsertBuilder @@ -42,6 +45,7 @@ func TestEffectsProcessorTestSuiteLedger(t *testing.T) { } func (s *EffectsProcessorTestSuiteLedger) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQEffects{} s.mockBatchInsertBuilder = &history.MockEffectBatchInsertBuilder{} @@ -131,7 +135,9 @@ func (s *EffectsProcessorTestSuiteLedger) TearDownTest() { func (s *EffectsProcessorTestSuiteLedger) mockSuccessfulEffectBatchAdds() { s.mockBatchInsertBuilder.On( "Add", + s.ctx, s.addressToID[s.addresses[2]], + null.String{}, toid.New(int32(s.sequence), 1, 1).ToInt64(), uint32(1), history.EffectSequenceBumped, @@ -139,7 +145,9 @@ func (s *EffectsProcessorTestSuiteLedger) mockSuccessfulEffectBatchAdds() { ).Return(nil).Once() s.mockBatchInsertBuilder.On( "Add", + s.ctx, s.addressToID[s.addresses[2]], + null.String{}, toid.New(int32(s.sequence), 2, 1).ToInt64(), uint32(1), history.EffectAccountCreated, @@ -147,7 +155,9 @@ func (s *EffectsProcessorTestSuiteLedger) mockSuccessfulEffectBatchAdds() { ).Return(nil).Once() s.mockBatchInsertBuilder.On( "Add", + s.ctx, s.addressToID[s.addresses[1]], + null.String{}, toid.New(int32(s.sequence), 2, 1).ToInt64(), uint32(2), history.EffectAccountDebited, @@ -155,7 +165,9 @@ func (s *EffectsProcessorTestSuiteLedger) mockSuccessfulEffectBatchAdds() { ).Return(nil).Once() s.mockBatchInsertBuilder.On( "Add", + s.ctx, s.addressToID[s.addresses[2]], + null.String{}, toid.New(int32(s.sequence), 2, 1).ToInt64(), uint32(3), history.EffectSignerCreated, @@ -164,7 +176,9 @@ func (s *EffectsProcessorTestSuiteLedger) mockSuccessfulEffectBatchAdds() { s.mockBatchInsertBuilder.On( "Add", + s.ctx, s.addressToID[s.addresses[0]], + null.String{}, toid.New(int32(s.sequence), 3, 1).ToInt64(), uint32(1), history.EffectAccountCredited, @@ -173,7 +187,9 @@ func (s *EffectsProcessorTestSuiteLedger) mockSuccessfulEffectBatchAdds() { s.mockBatchInsertBuilder.On( "Add", + s.ctx, s.addressToID[s.addresses[0]], + null.String{}, toid.New(int32(s.sequence), 3, 1).ToInt64(), uint32(2), history.EffectAccountDebited, @@ -184,16 +200,17 @@ func (s *EffectsProcessorTestSuiteLedger) mockSuccessfulEffectBatchAdds() { func (s *EffectsProcessorTestSuiteLedger) mockSuccessfulCreateAccounts() { s.mockQ.On( "CreateAccounts", + s.ctx, mock.AnythingOfType("[]string"), maxBatchSize, ).Run(func(args mock.Arguments) { - arg := args.Get(0).([]string) + arg := args.Get(1).([]string) s.Assert().ElementsMatch(s.addresses, arg) }).Return(s.addressToID, nil).Once() } func (s *EffectsProcessorTestSuiteLedger) TestEmptyEffects() { - err := s.processor.Commit() + err := s.processor.Commit(context.Background()) s.Assert().NoError(err) } @@ -204,25 +221,25 @@ func (s *EffectsProcessorTestSuiteLedger) TestIngestEffectsSucceeds() { s.mockSuccessfulEffectBatchAdds() - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(s.ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(s.ctx) s.Assert().NoError(err) } func (s *EffectsProcessorTestSuiteLedger) TestCreateAccountsFails() { - s.mockQ.On("CreateAccounts", mock.AnythingOfType("[]string"), maxBatchSize). + s.mockQ.On("CreateAccounts", s.ctx, mock.AnythingOfType("[]string"), maxBatchSize). Return(s.addressToID, errors.New("transient error")).Once() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(s.ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(s.ctx) s.Assert().EqualError(err, "Could not create account ids: transient error") } @@ -232,18 +249,19 @@ func (s *EffectsProcessorTestSuiteLedger) TestBatchAddFails() { Return(s.mockBatchInsertBuilder).Once() s.mockBatchInsertBuilder.On( - "Add", + "Add", s.ctx, s.addressToID[s.addresses[2]], + null.String{}, toid.New(int32(s.sequence), 1, 1).ToInt64(), uint32(1), history.EffectSequenceBumped, []byte("{\"new_seq\":300000000000}"), ).Return(errors.New("transient error")).Once() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(s.ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(s.ctx) s.Assert().EqualError(err, "could not insert operation effect in db: transient error") } @@ -416,6 +434,61 @@ func getRevokeSponsorshipMeta(t *testing.T) (string, []effect) { return b64, expectedEffects } +func TestEffectsCoversAllOperationTypes(t *testing.T) { + for typ, s := range xdr.OperationTypeToStringMap { + op := xdr.Operation{ + Body: xdr.OperationBody{ + Type: xdr.OperationType(typ), + }, + } + operation := transactionOperationWrapper{ + index: 0, + transaction: ingest.LedgerTransaction{ + UnsafeMeta: xdr.TransactionMeta{ + V: 2, + V2: &xdr.TransactionMetaV2{}, + }, + }, + operation: op, + ledgerSequence: 1, + } + // calling effects should either panic (because the operation field is set to nil) + // or not error + func() { + var err error + defer func() { + err2 := recover() + if err != nil { + assert.NotContains(t, err.Error(), "Unknown operation type") + } + assert.True(t, err2 != nil || err == nil, s) + }() + _, err = operation.effects() + }() + } + + // make sure the check works for an unknown operation type + op := xdr.Operation{ + Body: xdr.OperationBody{ + Type: xdr.OperationType(20000), + }, + } + operation := transactionOperationWrapper{ + index: 0, + transaction: ingest.LedgerTransaction{ + UnsafeMeta: xdr.TransactionMeta{ + V: 2, + V2: &xdr.TransactionMetaV2{}, + }, + }, + operation: op, + ledgerSequence: 1, + } + // calling effects should error due to the unknown operation + _, err := operation.effects() + assert.Contains(t, err.Error(), "Unknown operation type") +} + func TestOperationEffects(t *testing.T) { sourceAID := xdr.MustAddress("GD3MMHD2YZWL5RAUWG6O3RMA5HTZYM7S3JLSZ2Z35JNJAWTDIKXY737V") @@ -879,7 +952,8 @@ func TestOperationEffects(t *testing.T) { sequence: 20, expected: []effect{ { - address: "GDEOVUDLCYTO46D6GD6WH7BFESPBV5RACC6F6NUFCIRU7PL2XONQHVGJ", + address: "GDEOVUDLCYTO46D6GD6WH7BFESPBV5RACC6F6NUFCIRU7PL2XONQHVGJ", + addressMuxed: null.StringFrom("MDEOVUDLCYTO46D6GD6WH7BFESPBV5RACC6F6NUFCIRU7PL2XONQGAAAAAAMV7V2X24II"), details: map[string]interface{}{ "amount": "1.0000000", "asset_code": "ARS", @@ -891,7 +965,8 @@ func TestOperationEffects(t *testing.T) { order: uint32(1), }, { - address: "GD3MMHD2YZWL5RAUWG6O3RMA5HTZYM7S3JLSZ2Z35JNJAWTDIKXY737V", + address: "GD3MMHD2YZWL5RAUWG6O3RMA5HTZYM7S3JLSZ2Z35JNJAWTDIKXY737V", + addressMuxed: null.StringFrom("MD3MMHD2YZWL5RAUWG6O3RMA5HTZYM7S3JLSZ2Z35JNJAWTDIKXY6AAAAAAMV7V2XZY4C"), details: map[string]interface{}{ "amount": "0.0300000", "asset_code": "BRL", @@ -903,7 +978,8 @@ func TestOperationEffects(t *testing.T) { order: uint32(2), }, { - address: "GD3MMHD2YZWL5RAUWG6O3RMA5HTZYM7S3JLSZ2Z35JNJAWTDIKXY737V", + address: "GD3MMHD2YZWL5RAUWG6O3RMA5HTZYM7S3JLSZ2Z35JNJAWTDIKXY737V", + addressMuxed: null.StringFrom("MD3MMHD2YZWL5RAUWG6O3RMA5HTZYM7S3JLSZ2Z35JNJAWTDIKXY6AAAAAAMV7V2XZY4C"), details: map[string]interface{}{ "seller": "GDEOVUDLCYTO46D6GD6WH7BFESPBV5RACC6F6NUFCIRU7PL2XONQHVGJ", "offer_id": xdr.Int64(10072128), @@ -924,6 +1000,8 @@ func TestOperationEffects(t *testing.T) { address: "GDEOVUDLCYTO46D6GD6WH7BFESPBV5RACC6F6NUFCIRU7PL2XONQHVGJ", details: map[string]interface{}{ "seller": "GD3MMHD2YZWL5RAUWG6O3RMA5HTZYM7S3JLSZ2Z35JNJAWTDIKXY737V", + "seller_muxed": "MD3MMHD2YZWL5RAUWG6O3RMA5HTZYM7S3JLSZ2Z35JNJAWTDIKXY6AAAAAAMV7V2XZY4C", + "seller_muxed_id": uint64(0xcafebabe), "offer_id": xdr.Int64(10072128), "sold_amount": "1.0000000", "bought_amount": "0.0300000", @@ -1499,7 +1577,7 @@ func TestOperationEffects(t *testing.T) { func TestOperationEffectsSetOptionsSignersOrder(t *testing.T) { tt := assert.New(t) transaction := ingest.LedgerTransaction{ - Meta: createTransactionMeta([]xdr.OperationMeta{ + UnsafeMeta: createTransactionMeta([]xdr.OperationMeta{ { Changes: []xdr.LedgerEntryChange{ // State @@ -1630,7 +1708,7 @@ func TestOperationEffectsSetOptionsSignersOrder(t *testing.T) { func TestOperationEffectsSetOptionsSignersNoUpdated(t *testing.T) { tt := assert.New(t) transaction := ingest.LedgerTransaction{ - Meta: createTransactionMeta([]xdr.OperationMeta{ + UnsafeMeta: createTransactionMeta([]xdr.OperationMeta{ { Changes: []xdr.LedgerEntryChange{ // State @@ -1751,7 +1829,7 @@ func TestOperationRegressionAccountTrustItself(t *testing.T) { // NOTE: when an account trusts itself, the transaction is successful but // no ledger entries are actually modified. transaction := ingest.LedgerTransaction{ - Meta: createTransactionMeta([]xdr.OperationMeta{}), + UnsafeMeta: createTransactionMeta([]xdr.OperationMeta{}), } transaction.Index = 1 transaction.Envelope.Type = xdr.EnvelopeTypeEnvelopeTypeTx @@ -1803,7 +1881,7 @@ func TestOperationEffectsAllowTrustAuthorizedToMaintainLiabilities(t *testing.T) operation := transactionOperationWrapper{ index: 0, transaction: ingest.LedgerTransaction{ - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{}, }, @@ -1864,7 +1942,7 @@ func TestOperationEffectsClawback(t *testing.T) { operation := transactionOperationWrapper{ index: 0, transaction: ingest.LedgerTransaction{ - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{}, }, @@ -1924,7 +2002,7 @@ func TestOperationEffectsClawbackClaimableBalance(t *testing.T) { operation := transactionOperationWrapper{ index: 0, transaction: ingest.LedgerTransaction{ - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{}, }, @@ -1973,7 +2051,7 @@ func TestOperationEffectsSetTrustLineFlags(t *testing.T) { operation := transactionOperationWrapper{ index: 0, transaction: ingest.LedgerTransaction{ - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{}, }, @@ -2111,7 +2189,7 @@ func (s *CreateClaimableBalanceEffectsTestSuite) SetupTest() { }, }, FeeChanges: xdr.LedgerEntryChanges{}, - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ Operations: []xdr.OperationMeta{ @@ -2339,7 +2417,7 @@ func (s *ClaimClaimableBalanceEffectsTestSuite) SetupTest() { }, }, FeeChanges: xdr.LedgerEntryChanges{}, - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ Operations: []xdr.OperationMeta{ diff --git a/services/horizon/internal/ingest/processors/ledgers_processor.go b/services/horizon/internal/ingest/processors/ledgers_processor.go index e5d846b0e6..01c29b43d9 100644 --- a/services/horizon/internal/ingest/processors/ledgers_processor.go +++ b/services/horizon/internal/ingest/processors/ledgers_processor.go @@ -1,6 +1,8 @@ package processors import ( + "context" + "github.com/stellar/go/ingest" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/support/errors" @@ -29,7 +31,7 @@ func NewLedgerProcessor( } } -func (p *LedgersProcessor) ProcessTransaction(transaction ingest.LedgerTransaction) (err error) { +func (p *LedgersProcessor) ProcessTransaction(ctx context.Context, transaction ingest.LedgerTransaction) (err error) { opCount := len(transaction.Envelope.Operations()) p.txSetOpCount += opCount if transaction.Result.Successful() { @@ -42,8 +44,8 @@ func (p *LedgersProcessor) ProcessTransaction(transaction ingest.LedgerTransacti return nil } -func (p *LedgersProcessor) Commit() error { - rowsAffected, err := p.ledgersQ.InsertLedger( +func (p *LedgersProcessor) Commit(ctx context.Context) error { + rowsAffected, err := p.ledgersQ.InsertLedger(ctx, p.ledger, p.successTxCount, p.failedTxCount, diff --git a/services/horizon/internal/ingest/processors/ledgers_processor_test.go b/services/horizon/internal/ingest/processors/ledgers_processor_test.go index 67b7b0ae3b..05bd2c3c3b 100644 --- a/services/horizon/internal/ingest/processors/ledgers_processor_test.go +++ b/services/horizon/internal/ingest/processors/ledgers_processor_test.go @@ -3,6 +3,7 @@ package processors import ( + "context" "testing" "github.com/stellar/go/ingest" @@ -67,7 +68,7 @@ func createTransaction(successful bool, numOps int) ingest.LedgerTransaction { }, }, }, - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ Operations: make([]xdr.OperationMeta, numOps, numOps), @@ -107,8 +108,10 @@ func (s *LedgersProcessorTestSuiteLedger) TearDownTest() { } func (s *LedgersProcessorTestSuiteLedger) TestInsertLedgerSucceeds() { + ctx := context.Background() s.mockQ.On( "InsertLedger", + ctx, s.header, s.successCount, s.failedCount, @@ -118,17 +121,19 @@ func (s *LedgersProcessorTestSuiteLedger) TestInsertLedgerSucceeds() { ).Return(int64(1), nil) for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(ctx) s.Assert().NoError(err) } func (s *LedgersProcessorTestSuiteLedger) TestInsertLedgerReturnsError() { + ctx := context.Background() s.mockQ.On( "InsertLedger", + ctx, mock.Anything, mock.Anything, mock.Anything, @@ -137,14 +142,16 @@ func (s *LedgersProcessorTestSuiteLedger) TestInsertLedgerReturnsError() { mock.Anything, ).Return(int64(0), errors.New("transient error")) - err := s.processor.Commit() + err := s.processor.Commit(ctx) s.Assert().Error(err) s.Assert().EqualError(err, "Could not insert ledger: transient error") } func (s *LedgersProcessorTestSuiteLedger) TestInsertLedgerNoRowsAffected() { + ctx := context.Background() s.mockQ.On( "InsertLedger", + ctx, mock.Anything, mock.Anything, mock.Anything, @@ -153,7 +160,7 @@ func (s *LedgersProcessorTestSuiteLedger) TestInsertLedgerNoRowsAffected() { mock.Anything, ).Return(int64(0), nil) - err := s.processor.Commit() + err := s.processor.Commit(ctx) s.Assert().Error(err) s.Assert().EqualError(err, "0 rows affected when ingesting new ledger: 20") } diff --git a/services/horizon/internal/ingest/processors/mock_change_processor.go b/services/horizon/internal/ingest/processors/mock_change_processor.go index 6df7374aef..6d2ab64a8f 100644 --- a/services/horizon/internal/ingest/processors/mock_change_processor.go +++ b/services/horizon/internal/ingest/processors/mock_change_processor.go @@ -1,6 +1,8 @@ package processors import ( + "context" + "github.com/stretchr/testify/mock" "github.com/stellar/go/ingest" @@ -12,7 +14,7 @@ type MockChangeProcessor struct { mock.Mock } -func (m *MockChangeProcessor) ProcessChange(change ingest.Change) error { - args := m.Called(change) +func (m *MockChangeProcessor) ProcessChange(ctx context.Context, change ingest.Change) error { + args := m.Called(ctx, change) return args.Error(0) } diff --git a/services/horizon/internal/ingest/processors/offers_processor.go b/services/horizon/internal/ingest/processors/offers_processor.go index 74c55e3f31..5a99d0a24c 100644 --- a/services/horizon/internal/ingest/processors/offers_processor.go +++ b/services/horizon/internal/ingest/processors/offers_processor.go @@ -1,6 +1,8 @@ package processors import ( + "context" + "github.com/stellar/go/ingest" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/support/errors" @@ -32,7 +34,7 @@ func (p *OffersProcessor) reset() { p.removeBatch = []int64{} } -func (p *OffersProcessor) ProcessChange(change ingest.Change) error { +func (p *OffersProcessor) ProcessChange(ctx context.Context, change ingest.Change) error { if change.Type != xdr.LedgerEntryTypeOffer { return nil } @@ -42,7 +44,7 @@ func (p *OffersProcessor) ProcessChange(change ingest.Change) error { } if p.cache.Size() > maxBatchSize { - if err := p.flushCache(); err != nil { + if err := p.flushCache(ctx); err != nil { return errors.Wrap(err, "error in Commit") } p.reset() @@ -68,7 +70,7 @@ func (p *OffersProcessor) ledgerEntryToRow(entry *xdr.LedgerEntry) history.Offer } } -func (p *OffersProcessor) flushCache() error { +func (p *OffersProcessor) flushCache(ctx context.Context) error { changes := p.cache.GetChanges() for _, change := range changes { var rowsAffected int64 @@ -81,7 +83,7 @@ func (p *OffersProcessor) flushCache() error { // Created action = "inserting" row := p.ledgerEntryToRow(change.Post) - err = p.insertBatch.Add(row) + err = p.insertBatch.Add(ctx, row) rowsAffected = 1 // We don't track this when batch inserting case change.Pre != nil && change.Post == nil: // Removed @@ -95,7 +97,7 @@ func (p *OffersProcessor) flushCache() error { offer := change.Post.Data.MustOffer() offerID = offer.OfferId row := p.ledgerEntryToRow(change.Post) - rowsAffected, err = p.offersQ.UpdateOffer(row) + rowsAffected, err = p.offersQ.UpdateOffer(ctx, row) } if err != nil { @@ -112,13 +114,13 @@ func (p *OffersProcessor) flushCache() error { } } - err := p.insertBatch.Exec() + err := p.insertBatch.Exec(ctx) if err != nil { return errors.Wrap(err, "error executing batch") } if len(p.removeBatch) > 0 { - _, err = p.offersQ.RemoveOffers(p.removeBatch, p.sequence) + _, err = p.offersQ.RemoveOffers(ctx, p.removeBatch, p.sequence) if err != nil { return errors.Wrap(err, "error in RemoveOffers") } @@ -127,14 +129,14 @@ func (p *OffersProcessor) flushCache() error { return nil } -func (p *OffersProcessor) Commit() error { - if err := p.flushCache(); err != nil { +func (p *OffersProcessor) Commit(ctx context.Context) error { + if err := p.flushCache(ctx); err != nil { return errors.Wrap(err, "error flushing cache") } if p.sequence > offerCompactionWindow { // trim offers table by removing offers which were deleted before the cutoff ledger - if offerRowsRemoved, err := p.offersQ.CompactOffers(p.sequence - offerCompactionWindow); err != nil { + if offerRowsRemoved, err := p.offersQ.CompactOffers(ctx, p.sequence-offerCompactionWindow); err != nil { return errors.Wrap(err, "could not compact offers") } else { log.WithField("offer_rows_removed", offerRowsRemoved).Info("Trimmed offers table") diff --git a/services/horizon/internal/ingest/processors/offers_processor_test.go b/services/horizon/internal/ingest/processors/offers_processor_test.go index 95135ff703..c49bbaf26a 100644 --- a/services/horizon/internal/ingest/processors/offers_processor_test.go +++ b/services/horizon/internal/ingest/processors/offers_processor_test.go @@ -22,7 +22,7 @@ import ( func TestFuzzOffers(t *testing.T) { tt := test.Start(t) test.ResetHorizonDB(t, tt.HorizonDB) - q := &history.Q{&db.Session{DB: tt.HorizonDB, Ctx: context.Background()}} + q := &history.Q{&db.Session{DB: tt.HorizonDB}} pp := NewOffersProcessor(q, 10) gen := randxdr.NewGenerator() @@ -47,10 +47,10 @@ func TestFuzzOffers(t *testing.T) { } for _, change := range ingest.GetChangesFromLedgerEntryChanges(changes) { - tt.Assert.NoError(pp.ProcessChange(change)) + tt.Assert.NoError(pp.ProcessChange(tt.Ctx, change)) } - tt.Assert.NoError(pp.Commit()) + tt.Assert.NoError(pp.Commit(tt.Ctx)) } func TestOffersProcessorTestSuiteState(t *testing.T) { @@ -59,6 +59,7 @@ func TestOffersProcessorTestSuiteState(t *testing.T) { type OffersProcessorTestSuiteState struct { suite.Suite + ctx context.Context processor *OffersProcessor mockQ *history.MockQOffers mockBatchInsertBuilder *history.MockOffersBatchInsertBuilder @@ -66,6 +67,7 @@ type OffersProcessorTestSuiteState struct { } func (s *OffersProcessorTestSuiteState) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQOffers{} s.mockBatchInsertBuilder = &history.MockOffersBatchInsertBuilder{} @@ -78,9 +80,9 @@ func (s *OffersProcessorTestSuiteState) SetupTest() { } func (s *OffersProcessorTestSuiteState) TearDownTest() { - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() - s.mockQ.On("CompactOffers", s.sequence-100).Return(int64(0), nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() + s.mockQ.On("CompactOffers", s.ctx, s.sequence-100).Return(int64(0), nil).Once() + s.Assert().NoError(s.processor.Commit(s.ctx)) s.mockQ.AssertExpectations(s.T()) s.mockBatchInsertBuilder.AssertExpectations(s.T()) @@ -101,7 +103,7 @@ func (s *OffersProcessorTestSuiteState) TestCreateOffer() { LastModifiedLedgerSeq: lastModifiedLedgerSeq, } - s.mockBatchInsertBuilder.On("Add", history.Offer{ + s.mockBatchInsertBuilder.On("Add", s.ctx, history.Offer{ SellerID: "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", OfferID: 1, Pricen: int32(1), @@ -110,7 +112,7 @@ func (s *OffersProcessorTestSuiteState) TestCreateOffer() { LastModifiedLedger: uint32(lastModifiedLedgerSeq), }).Return(nil).Once() - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeOffer, Pre: nil, Post: &entry, @@ -124,6 +126,7 @@ func TestOffersProcessorTestSuiteLedger(t *testing.T) { type OffersProcessorTestSuiteLedger struct { suite.Suite + ctx context.Context processor *OffersProcessor mockQ *history.MockQOffers mockBatchInsertBuilder *history.MockOffersBatchInsertBuilder @@ -131,6 +134,7 @@ type OffersProcessorTestSuiteLedger struct { } func (s *OffersProcessorTestSuiteLedger) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQOffers{} s.mockBatchInsertBuilder = &history.MockOffersBatchInsertBuilder{} @@ -149,7 +153,7 @@ func (s *OffersProcessorTestSuiteLedger) TearDownTest() { func (s *OffersProcessorTestSuiteLedger) setupInsertOffer() { // should be ignored because it's not an offer type - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: nil, Post: &xdr.LedgerEntry{ @@ -172,7 +176,7 @@ func (s *OffersProcessorTestSuiteLedger) setupInsertOffer() { } lastModifiedLedgerSeq := xdr.Uint32(1234) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeOffer, Pre: nil, Post: &xdr.LedgerEntry{ @@ -199,7 +203,7 @@ func (s *OffersProcessorTestSuiteLedger) setupInsertOffer() { }, } - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeOffer, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq - 1, @@ -213,7 +217,7 @@ func (s *OffersProcessorTestSuiteLedger) setupInsertOffer() { s.Assert().NoError(err) // We use LedgerEntryChangesCache so all changes are squashed - s.mockBatchInsertBuilder.On("Add", history.Offer{ + s.mockBatchInsertBuilder.On("Add", s.ctx, history.Offer{ SellerID: "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", OfferID: 2, Pricen: int32(1), @@ -222,32 +226,32 @@ func (s *OffersProcessorTestSuiteLedger) setupInsertOffer() { LastModifiedLedger: uint32(lastModifiedLedgerSeq), }).Return(nil).Once() - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() } func (s *OffersProcessorTestSuiteLedger) TestInsertOffer() { s.setupInsertOffer() - s.mockQ.On("CompactOffers", s.sequence-100).Return(int64(0), nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.mockQ.On("CompactOffers", s.ctx, s.sequence-100).Return(int64(0), nil).Once() + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *OffersProcessorTestSuiteLedger) TestSkipCompactionIfSequenceEqualsWindow() { s.processor.sequence = offerCompactionWindow s.setupInsertOffer() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *OffersProcessorTestSuiteLedger) TestSkipCompactionIfSequenceLessThanWindow() { s.processor.sequence = offerCompactionWindow - 1 s.setupInsertOffer() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *OffersProcessorTestSuiteLedger) TestCompactionError() { s.setupInsertOffer() - s.mockQ.On("CompactOffers", s.sequence-100). + s.mockQ.On("CompactOffers", s.ctx, s.sequence-100). Return(int64(0), errors.New("compaction error")).Once() - s.Assert().EqualError(s.processor.Commit(), "could not compact offers: compaction error") + s.Assert().EqualError(s.processor.Commit(s.ctx), "could not compact offers: compaction error") } func (s *OffersProcessorTestSuiteLedger) TestUpdateOfferNoRowsAffected() { @@ -272,7 +276,7 @@ func (s *OffersProcessorTestSuiteLedger) TestUpdateOfferNoRowsAffected() { }, } - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeOffer, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq - 1, @@ -285,7 +289,7 @@ func (s *OffersProcessorTestSuiteLedger) TestUpdateOfferNoRowsAffected() { }) s.Assert().NoError(err) - s.mockQ.On("UpdateOffer", history.Offer{ + s.mockQ.On("UpdateOffer", s.ctx, history.Offer{ SellerID: "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", OfferID: 2, Pricen: int32(1), @@ -294,14 +298,14 @@ func (s *OffersProcessorTestSuiteLedger) TestUpdateOfferNoRowsAffected() { LastModifiedLedger: uint32(lastModifiedLedgerSeq), }).Return(int64(0), nil).Once() - err = s.processor.Commit() + err = s.processor.Commit(s.ctx) s.Assert().Error(err) s.Assert().IsType(ingest.StateError{}, errors.Cause(err)) s.Assert().EqualError(err, "error flushing cache: 0 rows affected when updating offer 2") } func (s *OffersProcessorTestSuiteLedger) TestRemoveOffer() { - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeOffer, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -317,11 +321,11 @@ func (s *OffersProcessorTestSuiteLedger) TestRemoveOffer() { }) s.Assert().NoError(err) - s.mockQ.On("RemoveOffers", []int64{3}, s.sequence).Return(int64(1), nil).Once() + s.mockQ.On("RemoveOffers", s.ctx, []int64{3}, s.sequence).Return(int64(1), nil).Once() - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() - s.mockQ.On("CompactOffers", s.sequence-100).Return(int64(0), nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() + s.mockQ.On("CompactOffers", s.ctx, s.sequence-100).Return(int64(0), nil).Once() + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *OffersProcessorTestSuiteLedger) TestProcessUpgradeChange() { @@ -333,7 +337,7 @@ func (s *OffersProcessorTestSuiteLedger) TestProcessUpgradeChange() { } lastModifiedLedgerSeq := xdr.Uint32(1234) - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeOffer, Post: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -359,7 +363,7 @@ func (s *OffersProcessorTestSuiteLedger) TestProcessUpgradeChange() { }, } - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeOffer, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -373,7 +377,7 @@ func (s *OffersProcessorTestSuiteLedger) TestProcessUpgradeChange() { s.Assert().NoError(err) // We use LedgerEntryChangesCache so all changes are squashed - s.mockBatchInsertBuilder.On("Add", history.Offer{ + s.mockBatchInsertBuilder.On("Add", s.ctx, history.Offer{ SellerID: "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", OfferID: 2, Pricen: int32(1), @@ -382,13 +386,13 @@ func (s *OffersProcessorTestSuiteLedger) TestProcessUpgradeChange() { LastModifiedLedger: uint32(lastModifiedLedgerSeq), }).Return(nil).Once() - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() - s.mockQ.On("CompactOffers", s.sequence-100).Return(int64(0), nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() + s.mockQ.On("CompactOffers", s.ctx, s.sequence-100).Return(int64(0), nil).Once() + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *OffersProcessorTestSuiteLedger) TestRemoveMultipleOffers() { - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeOffer, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -404,7 +408,7 @@ func (s *OffersProcessorTestSuiteLedger) TestRemoveMultipleOffers() { }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeOffer, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -420,14 +424,14 @@ func (s *OffersProcessorTestSuiteLedger) TestRemoveMultipleOffers() { }) s.Assert().NoError(err) - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() - s.mockQ.On("CompactOffers", s.sequence-100).Return(int64(0), nil).Once() - s.mockQ.On("RemoveOffers", mock.Anything, s.sequence).Run(func(args mock.Arguments) { + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() + s.mockQ.On("CompactOffers", s.ctx, s.sequence-100).Return(int64(0), nil).Once() + s.mockQ.On("RemoveOffers", s.ctx, mock.Anything, s.sequence).Run(func(args mock.Arguments) { // To fix order issue due to using ChangeCompactor - ids := args.Get(0).([]int64) + ids := args.Get(1).([]int64) s.Assert().ElementsMatch(ids, []int64{3, 4}) }).Return(int64(0), nil).Once() - err = s.processor.Commit() + err = s.processor.Commit(s.ctx) s.Assert().NoError(err) } diff --git a/services/horizon/internal/ingest/processors/operations_processor.go b/services/horizon/internal/ingest/processors/operations_processor.go index 31aa39d7fe..010f4b5b88 100644 --- a/services/horizon/internal/ingest/processors/operations_processor.go +++ b/services/horizon/internal/ingest/processors/operations_processor.go @@ -1,10 +1,12 @@ package processors import ( + "context" "encoding/base64" "encoding/json" "fmt" + "github.com/guregu/null" "github.com/stellar/go/amount" "github.com/stellar/go/ingest" "github.com/stellar/go/services/horizon/internal/db2/history" @@ -30,7 +32,7 @@ func NewOperationProcessor(operationsQ history.QOperations, sequence uint32) *Op } // ProcessTransaction process the given transaction -func (p *OperationProcessor) ProcessTransaction(transaction ingest.LedgerTransaction) error { +func (p *OperationProcessor) ProcessTransaction(ctx context.Context, transaction ingest.LedgerTransaction) error { for i, op := range transaction.Envelope.Operations() { operation := transactionOperationWrapper{ index: uint32(i), @@ -48,13 +50,20 @@ func (p *OperationProcessor) ProcessTransaction(transaction ingest.LedgerTransac return errors.Wrapf(err, "Error marshaling details for operation %v", operation.ID()) } - if err := p.batch.Add( + source := operation.SourceAccount() + acID := source.ToAccountId() + var sourceAccountMuxed null.String + if source.Type == xdr.CryptoKeyTypeKeyTypeMuxedEd25519 { + sourceAccountMuxed = null.StringFrom(source.Address()) + } + if err := p.batch.Add(ctx, operation.ID(), operation.TransactionID(), operation.Order(), operation.OperationType(), detailsJSON, - operation.SourceAccount().Address(), + acID.Address(), + sourceAccountMuxed, ); err != nil { return errors.Wrap(err, "Error batch inserting operation rows") } @@ -63,8 +72,8 @@ func (p *OperationProcessor) ProcessTransaction(transaction ingest.LedgerTransac return nil } -func (p *OperationProcessor) Commit() error { - return p.batch.Exec() +func (p *OperationProcessor) Commit(ctx context.Context) error { + return p.batch.Exec(ctx) } // transactionOperationWrapper represents the data for a single operation within a transaction @@ -95,16 +104,14 @@ func (operation *transactionOperationWrapper) TransactionID() int64 { } // SourceAccount returns the operation's source account. -func (operation *transactionOperationWrapper) SourceAccount() *xdr.AccountId { +func (operation *transactionOperationWrapper) SourceAccount() *xdr.MuxedAccount { sourceAccount := operation.operation.SourceAccount - var sa xdr.AccountId if sourceAccount != nil { - sa = sourceAccount.ToAccountId() + return sourceAccount } else { - sa = operation.transaction.Envelope.SourceAccount().ToAccountId() + ret := operation.transaction.Envelope.SourceAccount() + return &ret } - - return &sa } // OperationType returns the operation type. @@ -190,7 +197,7 @@ func (operation *transactionOperationWrapper) findInitatingBeginSponsoringOp() * // and thus we bail out since we could return incorrect information. return nil } - sponsoree := operation.SourceAccount() + sponsoree := operation.SourceAccount().ToAccountId() operations := operation.transaction.Envelope.Operations() for i := int(operation.index) - 1; i >= 0; i-- { if beginOp, ok := operations[i].Body.GetBeginSponsoringFutureReservesOp(); ok && @@ -204,6 +211,15 @@ func (operation *transactionOperationWrapper) findInitatingBeginSponsoringOp() * return nil } +func addAccountAndMuxedAccountDetails(result map[string]interface{}, a xdr.MuxedAccount, prefix string) { + accid := a.ToAccountId() + result[prefix] = accid.Address() + if a.Type == xdr.CryptoKeyTypeKeyTypeMuxedEd25519 { + result[prefix+"_muxed"] = a.Address() + result[prefix+"_muxed_id"] = uint64(a.Med25519.Id) + } +} + // Details returns the operation details as a map which can be stored as JSON. func (operation *transactionOperationWrapper) Details() (map[string]interface{}, error) { details := map[string]interface{}{} @@ -211,21 +227,19 @@ func (operation *transactionOperationWrapper) Details() (map[string]interface{}, switch operation.OperationType() { case xdr.OperationTypeCreateAccount: op := operation.operation.Body.MustCreateAccountOp() - details["funder"] = source.Address() + addAccountAndMuxedAccountDetails(details, *source, "funder") details["account"] = op.Destination.Address() details["starting_balance"] = amount.String(op.StartingBalance) case xdr.OperationTypePayment: op := operation.operation.Body.MustPaymentOp() - details["from"] = source.Address() - accid := op.Destination.ToAccountId() - details["to"] = accid.Address() + addAccountAndMuxedAccountDetails(details, *source, "from") + addAccountAndMuxedAccountDetails(details, op.Destination, "to") details["amount"] = amount.String(op.Amount) addAssetDetails(details, op.Asset, "") case xdr.OperationTypePathPaymentStrictReceive: op := operation.operation.Body.MustPathPaymentStrictReceiveOp() - details["from"] = source.Address() - accid := op.Destination.ToAccountId() - details["to"] = accid.Address() + addAccountAndMuxedAccountDetails(details, *source, "from") + addAccountAndMuxedAccountDetails(details, op.Destination, "to") details["amount"] = amount.String(op.DestAmount) details["source_amount"] = amount.String(0) @@ -247,9 +261,8 @@ func (operation *transactionOperationWrapper) Details() (map[string]interface{}, case xdr.OperationTypePathPaymentStrictSend: op := operation.operation.Body.MustPathPaymentStrictSendOp() - details["from"] = source.Address() - accid := op.Destination.ToAccountId() - details["to"] = accid.Address() + addAccountAndMuxedAccountDetails(details, *source, "from") + addAccountAndMuxedAccountDetails(details, op.Destination, "to") details["amount"] = amount.String(0) details["source_amount"] = amount.String(op.SendAmount) @@ -342,13 +355,13 @@ func (operation *transactionOperationWrapper) Details() (map[string]interface{}, case xdr.OperationTypeChangeTrust: op := operation.operation.Body.MustChangeTrustOp() addAssetDetails(details, op.Line, "") - details["trustor"] = source.Address() + addAccountAndMuxedAccountDetails(details, *source, "trustor") details["trustee"] = details["asset_issuer"] details["limit"] = amount.String(op.Limit) case xdr.OperationTypeAllowTrust: op := operation.operation.Body.MustAllowTrustOp() - addAssetDetails(details, op.Asset.ToAsset(*source), "") - details["trustee"] = source.Address() + addAssetDetails(details, op.Asset.ToAsset(source.ToAccountId()), "") + addAccountAndMuxedAccountDetails(details, *source, "trustee") details["trustor"] = op.Trustor.Address() details["authorize"] = xdr.TrustLineFlags(op.Authorize).IsAuthorized() authLiabilities := xdr.TrustLineFlags(op.Authorize).IsAuthorizedToMaintainLiabilitiesFlag() @@ -360,9 +373,8 @@ func (operation *transactionOperationWrapper) Details() (map[string]interface{}, details["clawback_enabled"] = clawbackEnabled } case xdr.OperationTypeAccountMerge: - aid := operation.operation.Body.MustDestination().ToAccountId() - details["account"] = source.Address() - details["into"] = aid.Address() + addAccountAndMuxedAccountDetails(details, *source, "account") + addAccountAndMuxedAccountDetails(details, operation.operation.Body.MustDestination(), "into") case xdr.OperationTypeInflation: // no inflation details, presently case xdr.OperationTypeManageData: @@ -396,14 +408,15 @@ func (operation *transactionOperationWrapper) Details() (map[string]interface{}, panic(fmt.Errorf("Invalid balanceId in op: %d", operation.index)) } details["balance_id"] = balanceID - details["claimant"] = source.Address() + addAccountAndMuxedAccountDetails(details, *source, "claimant") case xdr.OperationTypeBeginSponsoringFutureReserves: op := operation.operation.Body.MustBeginSponsoringFutureReservesOp() details["sponsored_id"] = op.SponsoredId.Address() case xdr.OperationTypeEndSponsoringFutureReserves: beginSponsorshipOp := operation.findInitatingBeginSponsoringOp() if beginSponsorshipOp != nil { - details["begin_sponsor"] = beginSponsorshipOp.SourceAccount().Address() + beginSponsorshipSource := beginSponsorshipOp.SourceAccount() + addAccountAndMuxedAccountDetails(details, *beginSponsorshipSource, "begin_sponsor") } case xdr.OperationTypeRevokeSponsorship: op := operation.operation.Body.MustRevokeSponsorshipOp() @@ -419,8 +432,7 @@ func (operation *transactionOperationWrapper) Details() (map[string]interface{}, case xdr.OperationTypeClawback: op := operation.operation.Body.MustClawbackOp() addAssetDetails(details, op.Asset, "") - from := op.From.ToAccountId() - details["from"] = from.Address() + addAccountAndMuxedAccountDetails(details, op.From, "from") details["amount"] = amount.String(op.Amount) case xdr.OperationTypeClawbackClaimableBalance: op := operation.operation.Body.MustClawbackClaimableBalanceOp() @@ -577,7 +589,7 @@ func getLedgerKeyParticipants(ledgerKey xdr.LedgerKey) []xdr.AccountId { // Participants returns the accounts taking part in the operation. func (operation *transactionOperationWrapper) Participants() ([]xdr.AccountId, error) { participants := []xdr.AccountId{} - participants = append(participants, *operation.SourceAccount()) + participants = append(participants, operation.SourceAccount().ToAccountId()) op := operation.operation switch operation.OperationType() { @@ -620,7 +632,7 @@ func (operation *transactionOperationWrapper) Participants() ([]xdr.AccountId, e case xdr.OperationTypeEndSponsoringFutureReserves: beginSponsorshipOp := operation.findInitatingBeginSponsoringOp() if beginSponsorshipOp != nil { - participants = append(participants, *beginSponsorshipOp.SourceAccount()) + participants = append(participants, beginSponsorshipOp.SourceAccount().ToAccountId()) } case xdr.OperationTypeRevokeSponsorship: op := operation.operation.Body.MustRevokeSponsorshipOp() diff --git a/services/horizon/internal/ingest/processors/operations_processor_test.go b/services/horizon/internal/ingest/processors/operations_processor_test.go index 332138936a..79b94b1f7f 100644 --- a/services/horizon/internal/ingest/processors/operations_processor_test.go +++ b/services/horizon/internal/ingest/processors/operations_processor_test.go @@ -3,9 +3,11 @@ package processors import ( + "context" "encoding/json" "testing" + "github.com/guregu/null" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/suite" @@ -17,6 +19,7 @@ import ( type OperationsProcessorTestSuiteLedger struct { suite.Suite + ctx context.Context processor *OperationProcessor mockQ *history.MockQOperations mockBatchInsertBuilder *history.MockOperationsBatchInsertBuilder @@ -27,6 +30,7 @@ func TestOperationProcessorTestSuiteLedger(t *testing.T) { } func (s *OperationsProcessorTestSuiteLedger) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQOperations{} s.mockBatchInsertBuilder = &history.MockOperationsBatchInsertBuilder{} s.mockQ. @@ -62,14 +66,22 @@ func (s *OperationsProcessorTestSuiteLedger) mockBatchInsertAdds(txs []ingest.Le return err } + source := expected.SourceAccount() + acID := source.ToAccountId() + var muxedAccount null.String + if source.Type == xdr.CryptoKeyTypeKeyTypeMuxedEd25519 { + muxedAccount = null.StringFrom(source.Address()) + } s.mockBatchInsertBuilder.On( "Add", + s.ctx, expected.ID(), expected.TransactionID(), expected.Order(), expected.OperationType(), detailsJSON, - expected.SourceAccount().Address(), + acID.Address(), + muxedAccount, ).Return(nil).Once() } } @@ -110,11 +122,11 @@ func (s *OperationsProcessorTestSuiteLedger) TestAddOperationSucceeds() { err = s.mockBatchInsertAdds(txs, uint32(56)) s.Assert().NoError(err) - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() + s.Assert().NoError(s.processor.Commit(s.ctx)) for _, tx := range txs { - err = s.processor.ProcessTransaction(tx) + err = s.processor.ProcessTransaction(s.ctx, tx) s.Assert().NoError(err) } } @@ -124,7 +136,8 @@ func (s *OperationsProcessorTestSuiteLedger) TestAddOperationFails() { s.mockBatchInsertBuilder. On( - "Add", + "Add", s.ctx, + mock.Anything, mock.Anything, mock.Anything, mock.Anything, @@ -133,14 +146,14 @@ func (s *OperationsProcessorTestSuiteLedger) TestAddOperationFails() { mock.Anything, ).Return(errors.New("transient error")).Once() - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(s.ctx, tx) s.Assert().Error(err) s.Assert().EqualError(err, "Error batch inserting operation rows: transient error") } func (s *OperationsProcessorTestSuiteLedger) TestExecFails() { - s.mockBatchInsertBuilder.On("Exec").Return(errors.New("transient error")).Once() - err := s.processor.Commit() + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(errors.New("transient error")).Once() + err := s.processor.Commit(s.ctx) s.Assert().Error(err) s.Assert().EqualError(err, "transient error") } diff --git a/services/horizon/internal/ingest/processors/participants_processor.go b/services/horizon/internal/ingest/processors/participants_processor.go index 8e17bfe9aa..50f4187132 100644 --- a/services/horizon/internal/ingest/processors/participants_processor.go +++ b/services/horizon/internal/ingest/processors/participants_processor.go @@ -3,6 +3,7 @@ package processors import ( + "context" "github.com/stellar/go/ingest" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/services/horizon/internal/toid" @@ -46,13 +47,13 @@ func (p *participant) addOperationID(id int64) { p.operationSet[id] = struct{}{} } -func (p *ParticipantsProcessor) loadAccountIDs(participantSet map[string]participant) error { +func (p *ParticipantsProcessor) loadAccountIDs(ctx context.Context, participantSet map[string]participant) error { addresses := make([]string, 0, len(participantSet)) for address := range participantSet { addresses = append(addresses, address) } - addressToID, err := p.participantsQ.CreateAccounts(addresses, maxBatchSize) + addressToID, err := p.participantsQ.CreateAccounts(ctx, addresses, maxBatchSize) if err != nil { return errors.Wrap(err, "Could not create account ids") } @@ -148,7 +149,7 @@ func participantsForTransaction( participants = append(participants, transaction.Envelope.FeeBumpAccount().ToAccountId()) } - p, err := participantsForMeta(transaction.Meta) + p, err := participantsForMeta(transaction.UnsafeMeta) if err != nil { return nil, err } @@ -226,41 +227,41 @@ func (p *ParticipantsProcessor) addOperationsParticipants( return nil } -func (p *ParticipantsProcessor) insertDBTransactionParticipants(participantSet map[string]participant) error { +func (p *ParticipantsProcessor) insertDBTransactionParticipants(ctx context.Context, participantSet map[string]participant) error { batch := p.participantsQ.NewTransactionParticipantsBatchInsertBuilder(maxBatchSize) for _, entry := range participantSet { for transactionID := range entry.transactionSet { - if err := batch.Add(transactionID, entry.accountID); err != nil { + if err := batch.Add(ctx, transactionID, entry.accountID); err != nil { return errors.Wrap(err, "Could not insert transaction participant in db") } } } - if err := batch.Exec(); err != nil { + if err := batch.Exec(ctx); err != nil { return errors.Wrap(err, "Could not flush transaction participants to db") } return nil } -func (p *ParticipantsProcessor) insertDBOperationsParticipants(participantSet map[string]participant) error { +func (p *ParticipantsProcessor) insertDBOperationsParticipants(ctx context.Context, participantSet map[string]participant) error { batch := p.participantsQ.NewOperationParticipantBatchInsertBuilder(maxBatchSize) for _, entry := range participantSet { for operationID := range entry.operationSet { - if err := batch.Add(operationID, entry.accountID); err != nil { + if err := batch.Add(ctx, operationID, entry.accountID); err != nil { return errors.Wrap(err, "could not insert operation participant in db") } } } - if err := batch.Exec(); err != nil { + if err := batch.Exec(ctx); err != nil { return errors.Wrap(err, "could not flush operation participants to db") } return nil } -func (p *ParticipantsProcessor) ProcessTransaction(transaction ingest.LedgerTransaction) (err error) { +func (p *ParticipantsProcessor) ProcessTransaction(ctx context.Context, transaction ingest.LedgerTransaction) (err error) { err = p.addTransactionParticipants(p.participantSet, p.sequence, transaction) if err != nil { return err @@ -274,17 +275,17 @@ func (p *ParticipantsProcessor) ProcessTransaction(transaction ingest.LedgerTran return nil } -func (p *ParticipantsProcessor) Commit() (err error) { +func (p *ParticipantsProcessor) Commit(ctx context.Context) (err error) { if len(p.participantSet) > 0 { - if err = p.loadAccountIDs(p.participantSet); err != nil { + if err = p.loadAccountIDs(ctx, p.participantSet); err != nil { return err } - if err = p.insertDBTransactionParticipants(p.participantSet); err != nil { + if err = p.insertDBTransactionParticipants(ctx, p.participantSet); err != nil { return err } - if err = p.insertDBOperationsParticipants(p.participantSet); err != nil { + if err = p.insertDBOperationsParticipants(ctx, p.participantSet); err != nil { return err } } diff --git a/services/horizon/internal/ingest/processors/participants_processor_test.go b/services/horizon/internal/ingest/processors/participants_processor_test.go index a816c1ce5f..cf6fcc5f6d 100644 --- a/services/horizon/internal/ingest/processors/participants_processor_test.go +++ b/services/horizon/internal/ingest/processors/participants_processor_test.go @@ -3,6 +3,7 @@ package processors import ( + "context" "testing" "github.com/stretchr/testify/mock" @@ -17,6 +18,7 @@ import ( type ParticipantsProcessorTestSuiteLedger struct { suite.Suite + ctx context.Context processor *ParticipantsProcessor mockQ *history.MockQParticipants mockBatchInsertBuilder *history.MockTransactionParticipantsBatchInsertBuilder @@ -38,6 +40,7 @@ func TestParticipantsProcessorTestSuiteLedger(t *testing.T) { } func (s *ParticipantsProcessorTestSuiteLedger) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQParticipants{} s.mockBatchInsertBuilder = &history.MockTransactionParticipantsBatchInsertBuilder{} s.mockOperationsBatchInsertBuilder = &history.MockOperationParticipantBatchInsertBuilder{} @@ -99,37 +102,37 @@ func (s *ParticipantsProcessorTestSuiteLedger) TearDownTest() { func (s *ParticipantsProcessorTestSuiteLedger) mockSuccessfulTransactionBatchAdds() { s.mockBatchInsertBuilder.On( - "Add", s.firstTxID, s.addressToID[s.addresses[0]], + "Add", s.ctx, s.firstTxID, s.addressToID[s.addresses[0]], ).Return(nil).Once() s.mockBatchInsertBuilder.On( - "Add", s.secondTxID, s.addressToID[s.addresses[1]], + "Add", s.ctx, s.secondTxID, s.addressToID[s.addresses[1]], ).Return(nil).Once() s.mockBatchInsertBuilder.On( - "Add", s.secondTxID, s.addressToID[s.addresses[2]], + "Add", s.ctx, s.secondTxID, s.addressToID[s.addresses[2]], ).Return(nil).Once() s.mockBatchInsertBuilder.On( - "Add", s.thirdTxID, s.addressToID[s.addresses[0]], + "Add", s.ctx, s.thirdTxID, s.addressToID[s.addresses[0]], ).Return(nil).Once() } func (s *ParticipantsProcessorTestSuiteLedger) mockSuccessfulOperationBatchAdds() { s.mockOperationsBatchInsertBuilder.On( - "Add", s.firstTxID+1, s.addressToID[s.addresses[0]], + "Add", s.ctx, s.firstTxID+1, s.addressToID[s.addresses[0]], ).Return(nil).Once() s.mockOperationsBatchInsertBuilder.On( - "Add", s.secondTxID+1, s.addressToID[s.addresses[1]], + "Add", s.ctx, s.secondTxID+1, s.addressToID[s.addresses[1]], ).Return(nil).Once() s.mockOperationsBatchInsertBuilder.On( - "Add", s.secondTxID+1, s.addressToID[s.addresses[2]], + "Add", s.ctx, s.secondTxID+1, s.addressToID[s.addresses[2]], ).Return(nil).Once() s.mockOperationsBatchInsertBuilder.On( - "Add", s.thirdTxID+1, s.addressToID[s.addresses[0]], + "Add", s.ctx, s.thirdTxID+1, s.addressToID[s.addresses[0]], ).Return(nil).Once() } func (s *ParticipantsProcessorTestSuiteLedger) TestEmptyParticipants() { - err := s.processor.Commit() + err := s.processor.Commit(s.ctx) s.Assert().NoError(err) } @@ -168,9 +171,9 @@ func (s *ParticipantsProcessorTestSuiteLedger) TestFeeBumptransaction() { addresses[0]: s.addressToID[addresses[0]], addresses[1]: s.addressToID[addresses[1]], } - s.mockQ.On("CreateAccounts", mock.AnythingOfType("[]string"), maxBatchSize). + s.mockQ.On("CreateAccounts", s.ctx, mock.AnythingOfType("[]string"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]string) + arg := args.Get(1).([]string) s.Assert().ElementsMatch( addresses, arg, @@ -182,23 +185,23 @@ func (s *ParticipantsProcessorTestSuiteLedger) TestFeeBumptransaction() { Return(s.mockOperationsBatchInsertBuilder).Once() s.mockBatchInsertBuilder.On( - "Add", feeBumpTxID, addressToID[addresses[0]], + "Add", s.ctx, feeBumpTxID, addressToID[addresses[0]], ).Return(nil).Once() s.mockBatchInsertBuilder.On( - "Add", feeBumpTxID, addressToID[addresses[1]], + "Add", s.ctx, feeBumpTxID, addressToID[addresses[1]], ).Return(nil).Once() - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() - s.mockOperationsBatchInsertBuilder.On("Exec").Return(nil).Once() + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() + s.mockOperationsBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() - s.Assert().NoError(s.processor.ProcessTransaction(feeBumpTx)) - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.ProcessTransaction(s.ctx, feeBumpTx)) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *ParticipantsProcessorTestSuiteLedger) TestIngestParticipantsSucceeds() { - s.mockQ.On("CreateAccounts", mock.AnythingOfType("[]string"), maxBatchSize). + s.mockQ.On("CreateAccounts", s.ctx, mock.AnythingOfType("[]string"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]string) + arg := args.Get(1).([]string) s.Assert().ElementsMatch( s.addresses, arg, @@ -212,32 +215,32 @@ func (s *ParticipantsProcessorTestSuiteLedger) TestIngestParticipantsSucceeds() s.mockSuccessfulTransactionBatchAdds() s.mockSuccessfulOperationBatchAdds() - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() - s.mockOperationsBatchInsertBuilder.On("Exec").Return(nil).Once() + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() + s.mockOperationsBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(s.ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(s.ctx) s.Assert().NoError(err) } func (s *ParticipantsProcessorTestSuiteLedger) TestCreateAccountsFails() { - s.mockQ.On("CreateAccounts", mock.AnythingOfType("[]string"), maxBatchSize). + s.mockQ.On("CreateAccounts", s.ctx, mock.AnythingOfType("[]string"), maxBatchSize). Return(s.addressToID, errors.New("transient error")).Once() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(s.ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(s.ctx) s.Assert().EqualError(err, "Could not create account ids: transient error") } func (s *ParticipantsProcessorTestSuiteLedger) TestBatchAddFails() { - s.mockQ.On("CreateAccounts", mock.AnythingOfType("[]string"), maxBatchSize). + s.mockQ.On("CreateAccounts", s.ctx, mock.AnythingOfType("[]string"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]string) + arg := args.Get(1).([]string) s.Assert().ElementsMatch( s.addresses, arg, @@ -247,31 +250,31 @@ func (s *ParticipantsProcessorTestSuiteLedger) TestBatchAddFails() { Return(s.mockBatchInsertBuilder).Once() s.mockBatchInsertBuilder.On( - "Add", s.firstTxID, s.addressToID[s.addresses[0]], + "Add", s.ctx, s.firstTxID, s.addressToID[s.addresses[0]], ).Return(errors.New("transient error")).Once() s.mockBatchInsertBuilder.On( - "Add", s.secondTxID, s.addressToID[s.addresses[1]], + "Add", s.ctx, s.secondTxID, s.addressToID[s.addresses[1]], ).Return(nil).Maybe() s.mockBatchInsertBuilder.On( - "Add", s.secondTxID, s.addressToID[s.addresses[2]], + "Add", s.ctx, s.secondTxID, s.addressToID[s.addresses[2]], ).Return(nil).Maybe() s.mockBatchInsertBuilder.On( - "Add", s.thirdTxID, s.addressToID[s.addresses[0]], + "Add", s.ctx, s.thirdTxID, s.addressToID[s.addresses[0]], ).Return(nil).Maybe() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(s.ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(s.ctx) s.Assert().EqualError(err, "Could not insert transaction participant in db: transient error") } func (s *ParticipantsProcessorTestSuiteLedger) TestOperationParticipantsBatchAddFails() { - s.mockQ.On("CreateAccounts", mock.AnythingOfType("[]string"), maxBatchSize). + s.mockQ.On("CreateAccounts", s.ctx, mock.AnythingOfType("[]string"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]string) + arg := args.Get(1).([]string) s.Assert().ElementsMatch( s.addresses, arg, @@ -285,32 +288,32 @@ func (s *ParticipantsProcessorTestSuiteLedger) TestOperationParticipantsBatchAdd s.mockSuccessfulTransactionBatchAdds() s.mockOperationsBatchInsertBuilder.On( - "Add", s.firstTxID+1, s.addressToID[s.addresses[0]], + "Add", s.ctx, s.firstTxID+1, s.addressToID[s.addresses[0]], ).Return(errors.New("transient error")).Once() s.mockOperationsBatchInsertBuilder.On( - "Add", s.secondTxID+1, s.addressToID[s.addresses[1]], + "Add", s.ctx, s.secondTxID+1, s.addressToID[s.addresses[1]], ).Return(nil).Maybe() s.mockOperationsBatchInsertBuilder.On( - "Add", s.secondTxID+1, s.addressToID[s.addresses[2]], + "Add", s.ctx, s.secondTxID+1, s.addressToID[s.addresses[2]], ).Return(nil).Maybe() s.mockOperationsBatchInsertBuilder.On( - "Add", s.thirdTxID+1, s.addressToID[s.addresses[0]], + "Add", s.ctx, s.thirdTxID+1, s.addressToID[s.addresses[0]], ).Return(nil).Maybe() - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(s.ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(s.ctx) s.Assert().EqualError(err, "could not insert operation participant in db: transient error") } func (s *ParticipantsProcessorTestSuiteLedger) TestBatchAddExecFails() { - s.mockQ.On("CreateAccounts", mock.AnythingOfType("[]string"), maxBatchSize). + s.mockQ.On("CreateAccounts", s.ctx, mock.AnythingOfType("[]string"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]string) + arg := args.Get(1).([]string) s.Assert().ElementsMatch( s.addresses, arg, @@ -321,20 +324,20 @@ func (s *ParticipantsProcessorTestSuiteLedger) TestBatchAddExecFails() { s.mockSuccessfulTransactionBatchAdds() - s.mockBatchInsertBuilder.On("Exec").Return(errors.New("transient error")).Once() + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(errors.New("transient error")).Once() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(s.ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(s.ctx) s.Assert().EqualError(err, "Could not flush transaction participants to db: transient error") } func (s *ParticipantsProcessorTestSuiteLedger) TestOpeartionBatchAddExecFails() { - s.mockQ.On("CreateAccounts", mock.AnythingOfType("[]string"), maxBatchSize). + s.mockQ.On("CreateAccounts", s.ctx, mock.AnythingOfType("[]string"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]string) + arg := args.Get(1).([]string) s.Assert().ElementsMatch( s.addresses, arg, @@ -348,13 +351,13 @@ func (s *ParticipantsProcessorTestSuiteLedger) TestOpeartionBatchAddExecFails() s.mockSuccessfulTransactionBatchAdds() s.mockSuccessfulOperationBatchAdds() - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() - s.mockOperationsBatchInsertBuilder.On("Exec").Return(errors.New("transient error")).Once() + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() + s.mockOperationsBatchInsertBuilder.On("Exec", s.ctx).Return(errors.New("transient error")).Once() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(s.ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(s.ctx) s.Assert().EqualError(err, "could not flush operation participants to db: transient error") } diff --git a/services/horizon/internal/ingest/processors/participants_test.go b/services/horizon/internal/ingest/processors/participants_test.go index 370fa6d5b2..73684c0555 100644 --- a/services/horizon/internal/ingest/processors/participants_test.go +++ b/services/horizon/internal/ingest/processors/participants_test.go @@ -41,7 +41,7 @@ func TestParticipantsForTransaction(t *testing.T) { Index: 1, Envelope: envelope, FeeChanges: feeChanges, - Meta: meta, + UnsafeMeta: meta, Result: xdr.TransactionResultPair{ Result: xdr.TransactionResult{ Result: xdr.TransactionResultResult{ diff --git a/services/horizon/internal/ingest/processors/signer_processor_test.go b/services/horizon/internal/ingest/processors/signer_processor_test.go index 79abbc260b..de5c70bddc 100644 --- a/services/horizon/internal/ingest/processors/signer_processor_test.go +++ b/services/horizon/internal/ingest/processors/signer_processor_test.go @@ -3,6 +3,7 @@ package processors import ( + "context" "testing" "github.com/guregu/null" @@ -20,12 +21,14 @@ func TestAccountsSignerProcessorTestSuiteState(t *testing.T) { type AccountsSignerProcessorTestSuiteState struct { suite.Suite + ctx context.Context processor *SignersProcessor mockQ *history.MockQSigners mockBatchInsertBuilder *history.MockAccountSignersBatchInsertBuilder } func (s *AccountsSignerProcessorTestSuiteState) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQSigners{} s.mockBatchInsertBuilder = &history.MockAccountSignersBatchInsertBuilder{} @@ -37,8 +40,8 @@ func (s *AccountsSignerProcessorTestSuiteState) SetupTest() { } func (s *AccountsSignerProcessorTestSuiteState) TearDownTest() { - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() + s.Assert().NoError(s.processor.Commit(s.ctx)) s.mockQ.AssertExpectations(s.T()) s.mockBatchInsertBuilder.AssertExpectations(s.T()) @@ -50,13 +53,13 @@ func (s *AccountsSignerProcessorTestSuiteState) TestNoEntries() { func (s *AccountsSignerProcessorTestSuiteState) TestCreatesSigners() { s.mockBatchInsertBuilder. - On("Add", history.AccountSigner{ + On("Add", s.ctx, history.AccountSigner{ Account: "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", Signer: "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", Weight: int32(1), }).Return(nil).Once() - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: nil, Post: &xdr.LedgerEntry{ @@ -72,13 +75,13 @@ func (s *AccountsSignerProcessorTestSuiteState) TestCreatesSigners() { s.Assert().NoError(err) s.mockBatchInsertBuilder. - On("Add", history.AccountSigner{ + On("Add", s.ctx, history.AccountSigner{ Account: "GCCCU34WDY2RATQTOOQKY6SZWU6J5DONY42SWGW2CIXGW4LICAGNRZKX", Signer: "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", Weight: int32(10), }).Return(nil).Once() - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: nil, Post: &xdr.LedgerEntry{ @@ -102,7 +105,7 @@ func (s *AccountsSignerProcessorTestSuiteState) TestCreatesSigners() { func (s *AccountsSignerProcessorTestSuiteState) TestCreatesSignerWithSponsor() { s.mockBatchInsertBuilder. - On("Add", history.AccountSigner{ + On("Add", s.ctx, history.AccountSigner{ Account: "GCCCU34WDY2RATQTOOQKY6SZWU6J5DONY42SWGW2CIXGW4LICAGNRZKX", Signer: "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", Weight: int32(10), @@ -111,7 +114,7 @@ func (s *AccountsSignerProcessorTestSuiteState) TestCreatesSignerWithSponsor() { sponsorshipDescriptor := xdr.MustAddress("GDWZ6MKJP5ESVIB7O5RW4UFFGSCDILPEKDXWGG4HXXSHEZZPTKLR6UVG") - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: nil, Post: &xdr.LedgerEntry{ @@ -153,11 +156,13 @@ func TestAccountsSignerProcessorTestSuiteLedger(t *testing.T) { type AccountsSignerProcessorTestSuiteLedger struct { suite.Suite + ctx context.Context processor *SignersProcessor mockQ *history.MockQSigners } func (s *AccountsSignerProcessorTestSuiteLedger) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQSigners{} s.mockQ. On("NewAccountSignersBatchInsertBuilder", maxBatchSize). @@ -172,13 +177,14 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TearDownTest() { func (s *AccountsSignerProcessorTestSuiteLedger) TestNoTransactions() { // Nothing processed, assertions in TearDownTest. - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(context.Background())) } func (s *AccountsSignerProcessorTestSuiteLedger) TestNewAccount() { s.mockQ. On( "CreateAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", int32(1), @@ -186,7 +192,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestNewAccount() { ). Return(int64(1), nil).Once() - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: nil, Post: &xdr.LedgerEntry{ @@ -200,11 +206,11 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestNewAccount() { }, }) s.Assert().NoError(err) - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *AccountsSignerProcessorTestSuiteLedger) TestNoUpdatesWhenNoSignerChanges() { - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -226,7 +232,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestNoUpdatesWhenNoSignerChange }, }) s.Assert().NoError(err) - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *AccountsSignerProcessorTestSuiteLedger) TestNewSigner() { @@ -234,6 +240,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestNewSigner() { s.mockQ. On( "RemoveAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GCBBDQLCTNASZJ3MTKAOYEOWRGSHDFAJVI7VPZUOP7KXNHYR3HP2BUKV", ). @@ -243,6 +250,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestNewSigner() { s.mockQ. On( "CreateAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GCBBDQLCTNASZJ3MTKAOYEOWRGSHDFAJVI7VPZUOP7KXNHYR3HP2BUKV", int32(10), @@ -253,6 +261,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestNewSigner() { s.mockQ. On( "CreateAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GCAHY6JSXQFKWKP6R7U5JPXDVNV4DJWOWRFLY3Y6YPBF64QRL4BPFDNS", int32(15), @@ -260,7 +269,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestNewSigner() { ). Return(int64(1), nil).Once() - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -296,7 +305,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestNewSigner() { }, }) s.Assert().NoError(err) - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *AccountsSignerProcessorTestSuiteLedger) TestSignerRemoved() { @@ -304,6 +313,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestSignerRemoved() { s.mockQ. On( "RemoveAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GCBBDQLCTNASZJ3MTKAOYEOWRGSHDFAJVI7VPZUOP7KXNHYR3HP2BUKV", ). @@ -312,6 +322,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestSignerRemoved() { s.mockQ. On( "RemoveAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GCAHY6JSXQFKWKP6R7U5JPXDVNV4DJWOWRFLY3Y6YPBF64QRL4BPFDNS", ). @@ -321,6 +332,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestSignerRemoved() { s.mockQ. On( "CreateAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GCAHY6JSXQFKWKP6R7U5JPXDVNV4DJWOWRFLY3Y6YPBF64QRL4BPFDNS", int32(15), @@ -328,7 +340,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestSignerRemoved() { ). Return(int64(1), nil).Once() - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -364,7 +376,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestSignerRemoved() { }, }) s.Assert().NoError(err) - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } // TestSignerPreAuthTxRemovedTxFailed tests if removing preauthorized transaction @@ -374,6 +386,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestSignerPreAuthTxRemovedTxFai s.mockQ. On( "RemoveAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GCBBDQLCTNASZJ3MTKAOYEOWRGSHDFAJVI7VPZUOP7KXNHYR3HP2BUKV", ). @@ -382,6 +395,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestSignerPreAuthTxRemovedTxFai s.mockQ. On( "RemoveAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "TBU2RRGLXH3E5CQHTD3ODLDF2BWDCYUSSBLLZ5GNW7JXHDIYKXZWHXL7", ). @@ -391,6 +405,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestSignerPreAuthTxRemovedTxFai s.mockQ. On( "CreateAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GCBBDQLCTNASZJ3MTKAOYEOWRGSHDFAJVI7VPZUOP7KXNHYR3HP2BUKV", int32(10), @@ -398,7 +413,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestSignerPreAuthTxRemovedTxFai ). Return(int64(1), nil).Once() - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -434,19 +449,20 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestSignerPreAuthTxRemovedTxFai }, }) s.Assert().NoError(err) - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *AccountsSignerProcessorTestSuiteLedger) TestRemoveAccount() { s.mockQ. On( "RemoveAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", ). Return(int64(1), nil).Once() - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -460,13 +476,14 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestRemoveAccount() { Post: nil, }) s.Assert().NoError(err) - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *AccountsSignerProcessorTestSuiteLedger) TestNewAccountNoRowsAffected() { s.mockQ. On( "CreateAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", int32(1), @@ -474,7 +491,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestNewAccountNoRowsAffected() ). Return(int64(0), nil).Once() - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: nil, Post: &xdr.LedgerEntry{ @@ -489,7 +506,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestNewAccountNoRowsAffected() }) s.Assert().NoError(err) - err = s.processor.Commit() + err = s.processor.Commit(s.ctx) s.Assert().Error(err) s.Assert().IsType(ingest.StateError{}, errors.Cause(err)) s.Assert().EqualError( @@ -504,12 +521,13 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestRemoveAccountNoRowsAffected s.mockQ. On( "RemoveAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", ). Return(int64(0), nil).Once() - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -524,7 +542,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestRemoveAccountNoRowsAffected }) s.Assert().NoError(err) - err = s.processor.Commit() + err = s.processor.Commit(s.ctx) s.Assert().Error(err) s.Assert().IsType(ingest.StateError{}, errors.Cause(err)) s.Assert().EqualError( @@ -541,6 +559,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestProcessUpgradeChange() { s.mockQ. On( "RemoveAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GCBBDQLCTNASZJ3MTKAOYEOWRGSHDFAJVI7VPZUOP7KXNHYR3HP2BUKV", ). @@ -550,6 +569,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestProcessUpgradeChange() { s.mockQ. On( "CreateAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GCBBDQLCTNASZJ3MTKAOYEOWRGSHDFAJVI7VPZUOP7KXNHYR3HP2BUKV", int32(12), @@ -560,6 +580,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestProcessUpgradeChange() { s.mockQ. On( "CreateAccountSigner", + s.ctx, "GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML", "GCAHY6JSXQFKWKP6R7U5JPXDVNV4DJWOWRFLY3Y6YPBF64QRL4BPFDNS", int32(15), @@ -567,7 +588,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestProcessUpgradeChange() { ). Return(int64(1), nil).Once() - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -604,7 +625,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestProcessUpgradeChange() { }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: 1000, @@ -642,7 +663,7 @@ func (s *AccountsSignerProcessorTestSuiteLedger) TestProcessUpgradeChange() { }, }) s.Assert().NoError(err) - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func createTransactionMeta(opMeta []xdr.OperationMeta) xdr.TransactionMeta { diff --git a/services/horizon/internal/ingest/processors/signers_processor.go b/services/horizon/internal/ingest/processors/signers_processor.go index 0be39ba84e..77fe54ebc2 100644 --- a/services/horizon/internal/ingest/processors/signers_processor.go +++ b/services/horizon/internal/ingest/processors/signers_processor.go @@ -1,6 +1,8 @@ package processors import ( + "context" + "github.com/guregu/null" "github.com/stellar/go/ingest" @@ -33,7 +35,7 @@ func (p *SignersProcessor) reset() { p.cache = ingest.NewChangeCompactor() } -func (p *SignersProcessor) ProcessChange(change ingest.Change) error { +func (p *SignersProcessor) ProcessChange(ctx context.Context, change ingest.Change) error { if change.Type != xdr.LedgerEntryTypeAccount { return nil } @@ -45,7 +47,7 @@ func (p *SignersProcessor) ProcessChange(change ingest.Change) error { } if p.cache.Size() > maxBatchSize { - err = p.Commit() + err = p.Commit(ctx) if err != nil { return errors.Wrap(err, "error in Commit") } @@ -69,7 +71,7 @@ func (p *SignersProcessor) ProcessChange(change ingest.Change) error { sponsor = null.StringFrom(sponsorDesc.Address()) } - err := p.batch.Add(history.AccountSigner{ + err := p.batch.Add(ctx, history.AccountSigner{ Account: account, Signer: signer, Weight: weight, @@ -83,9 +85,9 @@ func (p *SignersProcessor) ProcessChange(change ingest.Change) error { return nil } -func (p *SignersProcessor) Commit() error { +func (p *SignersProcessor) Commit(ctx context.Context) error { if !p.useLedgerEntryCache { - return p.batch.Exec() + return p.batch.Exec(ctx) } changes := p.cache.GetChanges() @@ -99,7 +101,7 @@ func (p *SignersProcessor) Commit() error { if change.Pre != nil { preAccountEntry := change.Pre.Data.MustAccount() for signer := range preAccountEntry.SignerSummary() { - rowsAffected, err := p.signersQ.RemoveAccountSigner(preAccountEntry.AccountId.Address(), signer) + rowsAffected, err := p.signersQ.RemoveAccountSigner(ctx, preAccountEntry.AccountId.Address(), signer) if err != nil { return errors.Wrap(err, "Error removing a signer") } @@ -129,7 +131,7 @@ func (p *SignersProcessor) Commit() error { } } - rowsAffected, err := p.signersQ.CreateAccountSigner( + rowsAffected, err := p.signersQ.CreateAccountSigner(ctx, postAccountEntry.AccountId.Address(), signer, weight, diff --git a/services/horizon/internal/ingest/processors/stats_ledger_transaction_processor.go b/services/horizon/internal/ingest/processors/stats_ledger_transaction_processor.go index 1839203b87..999d31e7e9 100644 --- a/services/horizon/internal/ingest/processors/stats_ledger_transaction_processor.go +++ b/services/horizon/internal/ingest/processors/stats_ledger_transaction_processor.go @@ -1,6 +1,7 @@ package processors import ( + "context" "fmt" "github.com/stellar/go/ingest" @@ -47,7 +48,7 @@ type StatsLedgerTransactionProcessorResults struct { OperationsSetTrustLineFlags int64 } -func (p *StatsLedgerTransactionProcessor) ProcessTransaction(transaction ingest.LedgerTransaction) error { +func (p *StatsLedgerTransactionProcessor) ProcessTransaction(ctx context.Context, transaction ingest.LedgerTransaction) error { p.results.Transactions++ ops := int64(len(transaction.Envelope.Operations())) p.results.Operations += ops diff --git a/services/horizon/internal/ingest/processors/stats_ledger_transaction_processor_test.go b/services/horizon/internal/ingest/processors/stats_ledger_transaction_processor_test.go index 1b83307214..ef4f15ce61 100644 --- a/services/horizon/internal/ingest/processors/stats_ledger_transaction_processor_test.go +++ b/services/horizon/internal/ingest/processors/stats_ledger_transaction_processor_test.go @@ -1,6 +1,7 @@ package processors import ( + "context" "testing" "github.com/stretchr/testify/assert" @@ -9,11 +10,44 @@ import ( "github.com/stellar/go/xdr" ) +func TestStatsLedgerTransactionProcessoAllOpTypesCovered(t *testing.T) { + txTemplate := ingest.LedgerTransaction{ + Envelope: xdr.TransactionEnvelope{ + Type: xdr.EnvelopeTypeEnvelopeTypeTx, + V1: &xdr.TransactionV1Envelope{ + Tx: xdr.Transaction{ + Operations: []xdr.Operation{ + {Body: xdr.OperationBody{Type: 0}}, + }, + }, + }, + }, + } + for typ, s := range xdr.OperationTypeToStringMap { + tx := txTemplate + txTemplate.Envelope.V1.Tx.Operations[0].Body.Type = xdr.OperationType(typ) + f := func() { + var p StatsLedgerTransactionProcessor + p.ProcessTransaction(context.Background(), tx) + } + assert.NotPanics(t, f, s) + } + + // make sure the check works for an unreasonable operation type + tx := txTemplate + txTemplate.Envelope.V1.Tx.Operations[0].Body.Type = 20000 + f := func() { + var p StatsLedgerTransactionProcessor + p.ProcessTransaction(context.Background(), tx) + } + assert.Panics(t, f) +} + func TestStatsLedgerTransactionProcessor(t *testing.T) { processor := &StatsLedgerTransactionProcessor{} // Successful - assert.NoError(t, processor.ProcessTransaction(ingest.LedgerTransaction{ + assert.NoError(t, processor.ProcessTransaction(context.Background(), ingest.LedgerTransaction{ Result: xdr.TransactionResultPair{ Result: xdr.TransactionResult{ Result: xdr.TransactionResultResult{ @@ -54,7 +88,7 @@ func TestStatsLedgerTransactionProcessor(t *testing.T) { })) // Failed - assert.NoError(t, processor.ProcessTransaction(ingest.LedgerTransaction{ + assert.NoError(t, processor.ProcessTransaction(context.Background(), ingest.LedgerTransaction{ Result: xdr.TransactionResultPair{ Result: xdr.TransactionResult{ Result: xdr.TransactionResultResult{ diff --git a/services/horizon/internal/ingest/processors/trades_processor.go b/services/horizon/internal/ingest/processors/trades_processor.go index 8024a240f8..529f3b18c3 100644 --- a/services/horizon/internal/ingest/processors/trades_processor.go +++ b/services/horizon/internal/ingest/processors/trades_processor.go @@ -1,6 +1,7 @@ package processors import ( + "context" "time" "github.com/stellar/go/ingest" @@ -29,7 +30,7 @@ func NewTradeProcessor(tradesQ history.QTrades, ledger xdr.LedgerHeaderHistoryEn } // ProcessTransaction process the given transaction -func (p *TradeProcessor) ProcessTransaction(transaction ingest.LedgerTransaction) (err error) { +func (p *TradeProcessor) ProcessTransaction(ctx context.Context, transaction ingest.LedgerTransaction) (err error) { if !transaction.Result.Successful() { return nil } @@ -54,16 +55,16 @@ func (p *TradeProcessor) ProcessTransaction(transaction ingest.LedgerTransaction return nil } -func (p *TradeProcessor) Commit() error { +func (p *TradeProcessor) Commit(ctx context.Context) error { if len(p.inserts) > 0 { batch := p.tradesQ.NewTradeBatchInsertBuilder(maxBatchSize) - accountSet, err := p.tradesQ.CreateAccounts(mapKeysToList(p.accountSet), maxBatchSize) + accountSet, err := p.tradesQ.CreateAccounts(ctx, mapKeysToList(p.accountSet), maxBatchSize) if err != nil { return errors.Wrap(err, "Error creating account ids") } var assetMap map[string]history.Asset - assetMap, err = p.tradesQ.CreateAssets(p.assets, maxBatchSize) + assetMap, err = p.tradesQ.CreateAssets(ctx, p.assets, maxBatchSize) if err != nil { return errors.Wrap(err, "Error creating asset ids") } @@ -73,12 +74,12 @@ func (p *TradeProcessor) Commit() error { insert.SellerAccountID = accountSet[insert.Trade.SellerId.Address()] insert.SoldAssetID = assetMap[insert.Trade.AssetSold.String()].ID insert.BoughtAssetID = assetMap[insert.Trade.AssetBought.String()].ID - if err = batch.Add(insert); err != nil { + if err = batch.Add(ctx, insert); err != nil { return errors.Wrap(err, "Error adding trade to batch") } } - if err = batch.Exec(); err != nil { + if err = batch.Exec(ctx); err != nil { return errors.Wrap(err, "Error flushing operation batch") } } diff --git a/services/horizon/internal/ingest/processors/trades_processor_test.go b/services/horizon/internal/ingest/processors/trades_processor_test.go index 5782e893cf..47c481b3bd 100644 --- a/services/horizon/internal/ingest/processors/trades_processor_test.go +++ b/services/horizon/internal/ingest/processors/trades_processor_test.go @@ -3,6 +3,7 @@ package processors import ( + "context" "fmt" "testing" "time" @@ -156,10 +157,11 @@ func (s *TradeProcessorTestSuiteLedger) TearDownTest() { } func (s *TradeProcessorTestSuiteLedger) TestIgnoreFailedTransactions() { - err := s.processor.ProcessTransaction(createTransaction(false, 1)) + ctx := context.Background() + err := s.processor.ProcessTransaction(ctx, createTransaction(false, 1)) s.Assert().NoError(err) - err = s.processor.Commit() + err = s.processor.Commit(ctx) s.Assert().NoError(err) } @@ -438,7 +440,7 @@ func (s *TradeProcessorTestSuiteLedger) mockReadTradeTransactions( }, Index: 1, FeeChanges: []xdr.LedgerEntryChange{}, - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ Operations: []xdr.OperationMeta{ @@ -451,7 +453,7 @@ func (s *TradeProcessorTestSuiteLedger) mockReadTradeTransactions( } for i, trade := range s.allTrades { - tx.Meta.V2.Operations = append(tx.Meta.V2.Operations, xdr.OperationMeta{ + tx.UnsafeMeta.V2.Operations = append(tx.UnsafeMeta.V2.Operations, xdr.OperationMeta{ Changes: xdr.LedgerEntryChanges{ xdr.LedgerEntryChange{ Type: xdr.LedgerEntryChangeTypeLedgerEntryState, @@ -491,20 +493,21 @@ func (s *TradeProcessorTestSuiteLedger) mockReadTradeTransactions( } func (s *TradeProcessorTestSuiteLedger) TestIngestTradesSucceeds() { + ctx := context.Background() inserts := s.mockReadTradeTransactions(s.processor.ledger) - s.mockQ.On("CreateAccounts", mock.AnythingOfType("[]string"), maxBatchSize). + s.mockQ.On("CreateAccounts", ctx, mock.AnythingOfType("[]string"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]string) + arg := args.Get(1).([]string) s.Assert().ElementsMatch( mapKeysToList(s.unmuxedAccountToID), arg, ) }).Return(s.unmuxedAccountToID, nil).Once() - s.mockQ.On("CreateAssets", mock.AnythingOfType("[]xdr.Asset"), maxBatchSize). + s.mockQ.On("CreateAssets", ctx, mock.AnythingOfType("[]xdr.Asset"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]xdr.Asset) + arg := args.Get(1).([]xdr.Asset) s.Assert().ElementsMatch( s.assets, arg, @@ -512,28 +515,29 @@ func (s *TradeProcessorTestSuiteLedger) TestIngestTradesSucceeds() { }).Return(s.assetToID, nil).Once() for _, insert := range inserts { - s.mockBatchInsertBuilder.On("Add", []history.InsertTrade{ + s.mockBatchInsertBuilder.On("Add", ctx, []history.InsertTrade{ insert, }).Return(nil).Once() } - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() + s.mockBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(ctx) s.Assert().NoError(err) } func (s *TradeProcessorTestSuiteLedger) TestCreateAccountsError() { + ctx := context.Background() s.mockReadTradeTransactions(s.processor.ledger) - s.mockQ.On("CreateAccounts", mock.AnythingOfType("[]string"), maxBatchSize). + s.mockQ.On("CreateAccounts", ctx, mock.AnythingOfType("[]string"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]string) + arg := args.Get(1).([]string) s.Assert().ElementsMatch( mapKeysToList(s.unmuxedAccountToID), arg, @@ -541,30 +545,31 @@ func (s *TradeProcessorTestSuiteLedger) TestCreateAccountsError() { }).Return(map[string]int64{}, fmt.Errorf("create accounts error")).Once() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(ctx) s.Assert().EqualError(err, "Error creating account ids: create accounts error") } func (s *TradeProcessorTestSuiteLedger) TestCreateAssetsError() { + ctx := context.Background() s.mockReadTradeTransactions(s.processor.ledger) - s.mockQ.On("CreateAccounts", mock.AnythingOfType("[]string"), maxBatchSize). + s.mockQ.On("CreateAccounts", ctx, mock.AnythingOfType("[]string"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]string) + arg := args.Get(1).([]string) s.Assert().ElementsMatch( mapKeysToList(s.unmuxedAccountToID), arg, ) }).Return(s.unmuxedAccountToID, nil).Once() - s.mockQ.On("CreateAssets", mock.AnythingOfType("[]xdr.Asset"), maxBatchSize). + s.mockQ.On("CreateAssets", ctx, mock.AnythingOfType("[]xdr.Asset"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]xdr.Asset) + arg := args.Get(1).([]xdr.Asset) s.Assert().ElementsMatch( s.assets, arg, @@ -572,111 +577,114 @@ func (s *TradeProcessorTestSuiteLedger) TestCreateAssetsError() { }).Return(s.assetToID, fmt.Errorf("create assets error")).Once() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(ctx) s.Assert().EqualError(err, "Error creating asset ids: create assets error") } func (s *TradeProcessorTestSuiteLedger) TestBatchAddError() { + ctx := context.Background() s.mockReadTradeTransactions(s.processor.ledger) - s.mockQ.On("CreateAccounts", mock.AnythingOfType("[]string"), maxBatchSize). + s.mockQ.On("CreateAccounts", ctx, mock.AnythingOfType("[]string"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]string) + arg := args.Get(1).([]string) s.Assert().ElementsMatch( mapKeysToList(s.unmuxedAccountToID), arg, ) }).Return(s.unmuxedAccountToID, nil).Once() - s.mockQ.On("CreateAssets", mock.AnythingOfType("[]xdr.Asset"), maxBatchSize). + s.mockQ.On("CreateAssets", ctx, mock.AnythingOfType("[]xdr.Asset"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]xdr.Asset) + arg := args.Get(1).([]xdr.Asset) s.Assert().ElementsMatch( s.assets, arg, ) }).Return(s.assetToID, nil).Once() - s.mockBatchInsertBuilder.On("Add", mock.AnythingOfType("[]history.InsertTrade")). + s.mockBatchInsertBuilder.On("Add", ctx, mock.AnythingOfType("[]history.InsertTrade")). Return(fmt.Errorf("batch add error")).Once() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(ctx) s.Assert().EqualError(err, "Error adding trade to batch: batch add error") } func (s *TradeProcessorTestSuiteLedger) TestBatchExecError() { + ctx := context.Background() insert := s.mockReadTradeTransactions(s.processor.ledger) - s.mockQ.On("CreateAccounts", mock.AnythingOfType("[]string"), maxBatchSize). + s.mockQ.On("CreateAccounts", ctx, mock.AnythingOfType("[]string"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]string) + arg := args.Get(1).([]string) s.Assert().ElementsMatch( mapKeysToList(s.unmuxedAccountToID), arg, ) }).Return(s.unmuxedAccountToID, nil).Once() - s.mockQ.On("CreateAssets", mock.AnythingOfType("[]xdr.Asset"), maxBatchSize). + s.mockQ.On("CreateAssets", ctx, mock.AnythingOfType("[]xdr.Asset"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]xdr.Asset) + arg := args.Get(1).([]xdr.Asset) s.Assert().ElementsMatch( s.assets, arg, ) }).Return(s.assetToID, nil).Once() - s.mockBatchInsertBuilder.On("Add", mock.AnythingOfType("[]history.InsertTrade")). + s.mockBatchInsertBuilder.On("Add", ctx, mock.AnythingOfType("[]history.InsertTrade")). Return(nil).Times(len(insert)) - s.mockBatchInsertBuilder.On("Exec").Return(fmt.Errorf("exec error")).Once() + s.mockBatchInsertBuilder.On("Exec", ctx).Return(fmt.Errorf("exec error")).Once() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(ctx) s.Assert().EqualError(err, "Error flushing operation batch: exec error") } func (s *TradeProcessorTestSuiteLedger) TestIgnoreCheckIfSmallLedger() { + ctx := context.Background() insert := s.mockReadTradeTransactions(s.processor.ledger) - s.mockQ.On("CreateAccounts", mock.AnythingOfType("[]string"), maxBatchSize). + s.mockQ.On("CreateAccounts", ctx, mock.AnythingOfType("[]string"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]string) + arg := args.Get(1).([]string) s.Assert().ElementsMatch( mapKeysToList(s.unmuxedAccountToID), arg, ) }).Return(s.unmuxedAccountToID, nil).Once() - s.mockQ.On("CreateAssets", mock.AnythingOfType("[]xdr.Asset"), maxBatchSize). + s.mockQ.On("CreateAssets", ctx, mock.AnythingOfType("[]xdr.Asset"), maxBatchSize). Run(func(args mock.Arguments) { - arg := args.Get(0).([]xdr.Asset) + arg := args.Get(1).([]xdr.Asset) s.Assert().ElementsMatch( s.assets, arg, ) }).Return(s.assetToID, nil).Once() - s.mockBatchInsertBuilder.On("Add", mock.AnythingOfType("[]history.InsertTrade")). + s.mockBatchInsertBuilder.On("Add", ctx, mock.AnythingOfType("[]history.InsertTrade")). Return(nil).Times(len(insert)) - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() + s.mockBatchInsertBuilder.On("Exec", ctx).Return(nil).Once() for _, tx := range s.txs { - err := s.processor.ProcessTransaction(tx) + err := s.processor.ProcessTransaction(ctx, tx) s.Assert().NoError(err) } - err := s.processor.Commit() + err := s.processor.Commit(ctx) s.Assert().NoError(err) } diff --git a/services/horizon/internal/ingest/processors/transaction_operation_wrapper_test.go b/services/horizon/internal/ingest/processors/transaction_operation_wrapper_test.go index 9c39ef049b..01f32a6427 100644 --- a/services/horizon/internal/ingest/processors/transaction_operation_wrapper_test.go +++ b/services/horizon/internal/ingest/processors/transaction_operation_wrapper_test.go @@ -3,6 +3,7 @@ package processors import ( + "fmt" "testing" "github.com/stretchr/testify/assert" @@ -101,6 +102,16 @@ func TestOperationTransactionSourceAccount(t *testing.T) { sourceAccount: "GDMQUXK7ZUCWM5472ZU3YLDP4BMJLQQ76DEMNYDEY2ODEEGGRKLEWGW2", expected: "GDMQUXK7ZUCWM5472ZU3YLDP4BMJLQQ76DEMNYDEY2ODEEGGRKLEWGW2", }, + { + desc: "Operation with source account", + sourceAccount: "GDMQUXK7ZUCWM5472ZU3YLDP4BMJLQQ76DEMNYDEY2ODEEGGRKLEWGW2", + expected: "GDMQUXK7ZUCWM5472ZU3YLDP4BMJLQQ76DEMNYDEY2ODEEGGRKLEWGW2", + }, + { + desc: "Operation with muxed source account", + sourceAccount: "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", + expected: "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", + }, } for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { @@ -118,8 +129,7 @@ func TestOperationTransactionSourceAccount(t *testing.T) { ) op := transaction.Envelope.Operations()[0] if len(tc.sourceAccount) > 0 { - aid := xdr.MustAddress(tc.sourceAccount) - sourceAccount := aid.ToMuxedAccount() + sourceAccount := xdr.MustMuxedAddress(tc.sourceAccount) op.SourceAccount = &sourceAccount } @@ -215,6 +225,21 @@ func TestTransactionOperationDetails(t *testing.T) { "starting_balance": "1000.0000000", }, }, + { + desc: "createAccount with muxed accounts", + envelopeXDR: "AAAAAgAAAQAAAAAAAAAE0iAAdX7q5YP8UN1mn5dnOswl7HJYI6xz+vbH3zGtMeUJAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAoZftFP3p4ifbTm6hQdieotu3Zw9E05GtoSh5MBytEpQAAAACVAvkAAAAAAAAAAAA", + resultXDR: "AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=", + metaXDR: "AAAAAQAAAAIAAAADAAAAOQAAAAAAAAAAYvwdC9CRsrYcDdZWNGsqaNfTR8bywsjubQRHAlb8BfcLGrZY9dZxbAAAAAAAAAAZAAAAAAAAAAEAAAAAYvwdC9CRsrYcDdZWNGsqaNfTR8bywsjubQRHAlb8BfcAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAOQAAAAAAAAAAYvwdC9CRsrYcDdZWNGsqaNfTR8bywsjubQRHAlb8BfcLGrZY9dZxbAAAAAAAAAAaAAAAAAAAAAEAAAAAYvwdC9CRsrYcDdZWNGsqaNfTR8bywsjubQRHAlb8BfcAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAA5AAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9wsatlj11nFsAAAAAAAAABoAAAAAAAAAAQAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9wAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAA5AAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9wsatlahyo1sAAAAAAAAABoAAAAAAAAAAQAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9wAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5AAAAAAAAAAChl+0U/eniJ9tObqFB2J6i27dnD0TTka2hKHkwHK0SlAAAAAJUC+QAAAAAOQAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==", + feeChangesXDR: "AAAAAgAAAAMAAAA3AAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9wsatlj11nHQAAAAAAAAABkAAAAAAAAAAQAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9wAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAA5AAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9wsatlj11nFsAAAAAAAAABkAAAAAAAAAAQAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9wAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==", + index: 0, + expected: map[string]interface{}{ + "account": "GCQZP3IU7XU6EJ63JZXKCQOYT2RNXN3HB5CNHENNUEUHSMA4VUJJJSEN", + "funder": "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", + "funder_muxed": "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", + "funder_muxed_id": uint64(1234), + "starting_balance": "1000.0000000", + }, + }, { desc: "payment", envelopeXDR: "AAAAABpcjiETZ0uhwxJJhgBPYKWSVJy2TZ2LI87fqV1cUf/UAAAAZAAAADcAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAGlyOIRNnS6HDEkmGAE9gpZJUnLZNnYsjzt+pXVxR/9QAAAAAAAAAAAX14QAAAAAAAAAAAVxR/9QAAABAK6pcXYMzAEmH08CZ1LWmvtNDKauhx+OImtP/Lk4hVTMJRVBOebVs5WEPj9iSrgGT0EswuDCZ2i5AEzwgGof9Ag==", @@ -230,6 +255,24 @@ func TestTransactionOperationDetails(t *testing.T) { "to": "GANFZDRBCNTUXIODCJEYMACPMCSZEVE4WZGZ3CZDZ3P2SXK4KH75IK6Y", }, }, + { + desc: "payment with muxed accounts", + envelopeXDR: "AAAAAgAAAQAAAAAAAAAE0iAAdX7q5YP8UN1mn5dnOswl7HJYI6xz+vbH3zGtMeUJAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAABAAAAAAAAAAEAAAEAAAAAAAAAAAA/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omgAAAAAAAAAABfXhAAAAAAAAAAAA", + resultXDR: "AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=", + metaXDR: "AAAAAQAAAAIAAAADAAAAOAAAAAAAAAAAGlyOIRNnS6HDEkmGAE9gpZJUnLZNnYsjzt+pXVxR/9QAAAACVAvjnAAAADcAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAOAAAAAAAAAAAGlyOIRNnS6HDEkmGAE9gpZJUnLZNnYsjzt+pXVxR/9QAAAACVAvjnAAAADcAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA==", + feeChangesXDR: "AAAAAgAAAAMAAAA3AAAAAAAAAAAaXI4hE2dLocMSSYYAT2ClklSctk2diyPO36ldXFH/1AAAAAJUC+QAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAA4AAAAAAAAAAAaXI4hE2dLocMSSYYAT2ClklSctk2diyPO36ldXFH/1AAAAAJUC+OcAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==", + index: 0, + expected: map[string]interface{}{ + "amount": "10.0000000", + "asset_type": "native", + "from": "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", + "from_muxed": "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", + "from_muxed_id": uint64(1234), + "to": "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ", + "to_muxed": "MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUQ", + "to_muxed_id": uint64(0), + }, + }, { desc: "pathPaymentStrictReceive", envelopeXDR: "AAAAAONt/6wGI884Zi6sYDYC1GOV/drnh4OcRrTrqJPoOTUKAAAAZAAAABAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAIAAAAAAAAAADuaygAAAAAABAjoBMEUiZNLUjsWXL1iK59D90Li4w56076b8HKxZfIAAAABRVVSAAAAAAAuwvNzNk9twbuJHUBqnX26GYI3MbCdpQU9t4n6EVRXsQAAAAA7msoAAAAAAAAAAAAAAAAB6Dk1CgAAAEB+7jxesBKKrF343onyycjp2tiQLZiGH2ETl+9fuOqotveY2rIgvt9ng+QJ2aDP3+PnDsYEa9ZUaA+Zne2nIGgE", @@ -251,6 +294,30 @@ func TestTransactionOperationDetails(t *testing.T) { "source_asset_type": "native", }, }, + { + desc: "pathPaymentStrictReceive with muxed accounts", + envelopeXDR: "AAAAAgAAAQAAAAAAAAAE0iAAdX7q5YP8UN1mn5dnOswl7HJYI6xz+vbH3zGtMeUJAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAABAAAAAAAAAAIAAAAAAAAAADuaygAAAAEAAAAAAAAAAAA/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omgAAAAFFVVIAAAAAAC7C83M2T23Bu4kdQGqdfboZgjcxsJ2lBT23ifoRVFexAAAAADuaygAAAAAAAAAAAAAAAAA=", + resultXDR: "AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAEAAAAALsLzczZPbcG7iR1Aap19uhmCNzGwnaUFPbeJ+hFUV7EAAAAAAAAAAgAAAAFFVVIAAAAAAC7C83M2T23Bu4kdQGqdfboZgjcxsJ2lBT23ifoRVFexAAAAADuaygAAAAAAAAAAADuaygAAAAAABAjoBMEUiZNLUjsWXL1iK59D90Li4w56076b8HKxZfIAAAABRVVSAAAAAAAuwvNzNk9twbuJHUBqnX26GYI3MbCdpQU9t4n6EVRXsQAAAAA7msoAAAAAAA==", + metaXDR: "AAAAAQAAAAIAAAADAAAAFAAAAAAAAAAA423/rAYjzzhmLqxgNgLUY5X92ueHg5xGtOuok+g5NQoAAAACVAvi1AAAABAAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAFAAAAAAAAAAA423/rAYjzzhmLqxgNgLUY5X92ueHg5xGtOuok+g5NQoAAAACVAvi1AAAABAAAAADAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAACAAAAAMAAAATAAAAAQAAAAAECOgEwRSJk0tSOxZcvWIrn0P3QuLjDnrTvpvwcrFl8gAAAAFFVVIAAAAAAC7C83M2T23Bu4kdQGqdfboZgjcxsJ2lBT23ifoRVFexAAAAAHc1lAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAUAAAAAQAAAAAECOgEwRSJk0tSOxZcvWIrn0P3QuLjDnrTvpvwcrFl8gAAAAFFVVIAAAAAAC7C83M2T23Bu4kdQGqdfboZgjcxsJ2lBT23ifoRVFexAAAAALLQXgB//////////wAAAAEAAAAAAAAAAAAAAAMAAAATAAAAAgAAAAAuwvNzNk9twbuJHUBqnX26GYI3MbCdpQU9t4n6EVRXsQAAAAAAAAACAAAAAUVVUgAAAAAALsLzczZPbcG7iR1Aap19uhmCNzGwnaUFPbeJ+hFUV7EAAAAAAAAAADuaygAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAC7C83M2T23Bu4kdQGqdfboZgjcxsJ2lBT23ifoRVFexAAAAAAAAAAIAAAADAAAAFAAAAAAAAAAA423/rAYjzzhmLqxgNgLUY5X92ueHg5xGtOuok+g5NQoAAAACVAvi1AAAABAAAAADAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAFAAAAAAAAAAA423/rAYjzzhmLqxgNgLUY5X92ueHg5xGtOuok+g5NQoAAAACGHEY1AAAABAAAAADAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAADAAAAEwAAAAAAAAAALsLzczZPbcG7iR1Aap19uhmCNzGwnaUFPbeJ+hFUV7EAAAACVAvi1AAAABAAAAADAAAAAgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAA7msoAAAAAAHc1lAAAAAAAAAAAAAAAAAEAAAAUAAAAAAAAAAAuwvNzNk9twbuJHUBqnX26GYI3MbCdpQU9t4n6EVRXsQAAAAKPpqzUAAAAEAAAAAMAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAdzWUAAAAAAAAAAAA", + feeChangesXDR: "AAAAAgAAAAMAAAATAAAAAAAAAADjbf+sBiPPOGYurGA2AtRjlf3a54eDnEa066iT6Dk1CgAAAAJUC+M4AAAAEAAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAUAAAAAAAAAADjbf+sBiPPOGYurGA2AtRjlf3a54eDnEa066iT6Dk1CgAAAAJUC+LUAAAAEAAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==", + index: 0, + expected: map[string]interface{}{ + "to": "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ", + "to_muxed": "MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUQ", + "to_muxed_id": uint64(0), + "from": "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", + "from_muxed": "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", + "from_muxed_id": uint64(1234), + "path": []map[string]interface{}{}, + "amount": "100.0000000", + "asset_code": "EUR", + "asset_type": "credit_alphanum4", + "source_max": "100.0000000", + "asset_issuer": "GAXMF43TGZHW3QN3REOUA2U5PW5BTARXGGYJ3JIFHW3YT6QRKRL3CPPU", + "source_amount": "100.0000000", + "source_asset_type": "native", + }, + }, { desc: "manageSellOffer", envelopeXDR: "AAAAAC7C83M2T23Bu4kdQGqdfboZgjcxsJ2lBT23ifoRVFexAAAAZAAAABAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAALsLzczZPbcG7iR1Aap19uhmCNzGwnaUFPbeJ+hFUV7EAAAAA7msoAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAARFUV7EAAABALuai5QxceFbtAiC5nkntNVnvSPeWR+C+FgplPAdRgRS+PPESpUiSCyuiwuhmvuDw7kwxn+A6E0M4ca1s2qzMAg==", @@ -466,6 +533,24 @@ func TestTransactionOperationDetails(t *testing.T) { "trustor": "GCVW5LCRZFP7PENXTAGOVIQXADDNUXXZJCNKF4VQB2IK7W2LPJWF73UG", }, }, + { + desc: "changeTrust with muxed accounts", + envelopeXDR: "AAAAAgAAAQAAAAAAAAAE0iAAdX7q5YP8UN1mn5dnOswl7HJYI6xz+vbH3zGtMeUJAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAD5Jjibq+Rf5jsUyQ2/tGzCwiRg0Zd5nj9jARA1Skjz+H//////////AAAAAAAAAAA=", + resultXDR: "AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=", + metaXDR: "AAAAAQAAAAIAAAADAAAAKAAAAAAAAAAAq26sUclf95G3mAzqohcAxtpe+UiaovKwDpCv20t6bF8AAAACVAvjOAAAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAKAAAAAAAAAAAq26sUclf95G3mAzqohcAxtpe+UiaovKwDpCv20t6bF8AAAACVAvjOAAAACYAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAAoAAAAAAAAAACrbqxRyV/3kbeYDOqiFwDG2l75SJqi8rAOkK/bS3psXwAAAAJUC+M4AAAAJgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAoAAAAAAAAAACrbqxRyV/3kbeYDOqiFwDG2l75SJqi8rAOkK/bS3psXwAAAAJUC+M4AAAAJgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAQAAAACrbqxRyV/3kbeYDOqiFwDG2l75SJqi8rAOkK/bS3psXwAAAAFVU0QAAAAAAPkmOJur5F/mOxTJDb+0bMLCJGDRl3meP2MBEDVKSPP4AAAAAAAAAAB//////////wAAAAAAAAAAAAAAAA==", + feeChangesXDR: "AAAAAgAAAAMAAAAmAAAAAAAAAACrbqxRyV/3kbeYDOqiFwDG2l75SJqi8rAOkK/bS3psXwAAAAJUC+QAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAoAAAAAAAAAACrbqxRyV/3kbeYDOqiFwDG2l75SJqi8rAOkK/bS3psXwAAAAJUC+OcAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==", + index: 0, + expected: map[string]interface{}{ + "asset_code": "USD", + "asset_issuer": "GD4SMOE3VPSF7ZR3CTEQ3P5UNTBMEJDA2GLXTHR7MMARANKKJDZ7RPGF", + "asset_type": "credit_alphanum4", + "limit": "922337203685.4775807", + "trustee": "GD4SMOE3VPSF7ZR3CTEQ3P5UNTBMEJDA2GLXTHR7MMARANKKJDZ7RPGF", + "trustor": "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", + "trustor_muxed": "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", + "trustor_muxed_id": uint64(1234), + }, + }, { desc: "allowTrust", envelopeXDR: "AAAAAPkmOJur5F/mOxTJDb+0bMLCJGDRl3meP2MBEDVKSPP4AAAAZAAAACYAAAACAAAAAAAAAAAAAAABAAAAAAAAAAcAAAAAq26sUclf95G3mAzqohcAxtpe+UiaovKwDpCv20t6bF8AAAABVVNEAAAAAAEAAAAAAAAAAUpI8/gAAABA6O2fe1gQBwoO0fMNNEUKH0QdVXVjEWbN5VL51DmRUedYMMXtbX5JKVSzla2kIGvWgls1dXuXHZY/IOlaK01rBQ==", @@ -483,6 +568,24 @@ func TestTransactionOperationDetails(t *testing.T) { "trustor": "GCVW5LCRZFP7PENXTAGOVIQXADDNUXXZJCNKF4VQB2IK7W2LPJWF73UG", }, }, + { + desc: "allowTrust with muxed accounts", + envelopeXDR: "AAAAAgAAAQAAAAAAAAAE0iAAdX7q5YP8UN1mn5dnOswl7HJYI6xz+vbH3zGtMeUJAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAABAAAAAAAAAAcAAAAAq26sUclf95G3mAzqohcAxtpe+UiaovKwDpCv20t6bF8AAAABVVNEAAAAAAEAAAAAAAAAAA==", + resultXDR: "AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=", + metaXDR: "AAAAAQAAAAIAAAADAAAAKQAAAAAAAAAA+SY4m6vkX+Y7FMkNv7RswsIkYNGXeZ4/YwEQNUpI8/gAAAACVAvi1AAAACYAAAABAAAAAAAAAAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAKQAAAAAAAAAA+SY4m6vkX+Y7FMkNv7RswsIkYNGXeZ4/YwEQNUpI8/gAAAACVAvi1AAAACYAAAACAAAAAAAAAAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAoAAAAAQAAAACrbqxRyV/3kbeYDOqiFwDG2l75SJqi8rAOkK/bS3psXwAAAAFVU0QAAAAAAPkmOJur5F/mOxTJDb+0bMLCJGDRl3meP2MBEDVKSPP4AAAAAAAAAAB//////////wAAAAAAAAAAAAAAAAAAAAEAAAApAAAAAQAAAACrbqxRyV/3kbeYDOqiFwDG2l75SJqi8rAOkK/bS3psXwAAAAFVU0QAAAAAAPkmOJur5F/mOxTJDb+0bMLCJGDRl3meP2MBEDVKSPP4AAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==", + feeChangesXDR: "AAAAAgAAAAMAAAAnAAAAAAAAAAD5Jjibq+Rf5jsUyQ2/tGzCwiRg0Zd5nj9jARA1Skjz+AAAAAJUC+OcAAAAJgAAAAEAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAApAAAAAAAAAAD5Jjibq+Rf5jsUyQ2/tGzCwiRg0Zd5nj9jARA1Skjz+AAAAAJUC+M4AAAAJgAAAAEAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAA==", + index: 0, + expected: map[string]interface{}{ + "asset_code": "USD", + "asset_issuer": "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", + "asset_type": "credit_alphanum4", + "authorize": true, + "trustee": "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", + "trustee_muxed": "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", + "trustee_muxed_id": uint64(1234), + "trustor": "GCVW5LCRZFP7PENXTAGOVIQXADDNUXXZJCNKF4VQB2IK7W2LPJWF73UG", + }, + }, { desc: "accountMerge (Destination)", envelopeXDR: "AAAAAI77mqNTy9VPgmgn+//uvjP8VJxJ1FHQ4jCrYS+K4+HvAAAAZAAAACsAAAABAAAAAAAAAAAAAAABAAAAAAAAAAgAAAAAYvwdC9CRsrYcDdZWNGsqaNfTR8bywsjubQRHAlb8BfcAAAAAAAAAAYrj4e8AAABA3jJ7wBrRpsrcnqBQWjyzwvVz2v5UJ56G60IhgsaWQFSf+7om462KToc+HJ27aLVOQ83dGh1ivp+VIuREJq/SBw==", @@ -496,6 +599,22 @@ func TestTransactionOperationDetails(t *testing.T) { "account": "GCHPXGVDKPF5KT4CNAT7X77OXYZ7YVE4JHKFDUHCGCVWCL4K4PQ67KKZ", }, }, + { + desc: "accountMerge (Destination) with muxed accounts", + envelopeXDR: "AAAAAgAAAQAAAAAAAAAE0iAAdX7q5YP8UN1mn5dnOswl7HJYI6xz+vbH3zGtMeUJAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAABAAAAAAAAAAgAAAEAAAAAAAAAAAA/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omgAAAAAAAAAA", + resultXDR: "AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=", + metaXDR: "AAAAAQAAAAIAAAADAAAALAAAAAAAAAAAjvuao1PL1U+CaCf7/+6+M/xUnEnUUdDiMKthL4rj4e8AAAACVAvjnAAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAALAAAAAAAAAAAjvuao1PL1U+CaCf7/+6+M/xUnEnUUdDiMKthL4rj4e8AAAACVAvjnAAAACsAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAMAAAArAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtonM3Az4AAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAsAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtowg5/CUAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAMAAAAsAAAAAAAAAACO+5qjU8vVT4JoJ/v/7r4z/FScSdRR0OIwq2EviuPh7wAAAAJUC+OcAAAAKwAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAI77mqNTy9VPgmgn+//uvjP8VJxJ1FHQ4jCrYS+K4+Hv", + feeChangesXDR: "AAAAAgAAAAMAAAArAAAAAAAAAACO+5qjU8vVT4JoJ/v/7r4z/FScSdRR0OIwq2EviuPh7wAAAAJUC+QAAAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAsAAAAAAAAAACO+5qjU8vVT4JoJ/v/7r4z/FScSdRR0OIwq2EviuPh7wAAAAJUC+OcAAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==", + index: 0, + expected: map[string]interface{}{ + "into": "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ", + "into_muxed": "MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUQ", + "into_muxed_id": uint64(0), + "account": "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", + "account_muxed": "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", + "account_muxed_id": uint64(1234), + }, + }, { desc: "inflation", envelopeXDR: "AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAAVAAAAAAAAAAAAAAABAAAAAAAAAAkAAAAAAAAAAVb8BfcAAABABUHuXY+MTgW/wDv5+NDVh9fw4meszxeXO98HEQfgXVeCZ7eObCI2orSGUNA/SK6HV9/uTVSxIQQWIso1QoxHBQ==", @@ -574,6 +693,28 @@ func TestTransactionOperationDetails(t *testing.T) { "to": "GDQVLGCJPJ57SALDJPH3YWZVGYUJJTRUUIEJGYKHLTSFY3ZOBKU3QIO3", }, }, + { + desc: "pathPaymentStrictSend with muxed accounts", + envelopeXDR: "AAAAAgAAAQAAAAAAAAAE0iAAdX7q5YP8UN1mn5dnOswl7HJYI6xz+vbH3zGtMeUJAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAABAAAAAAAAAA0AAAAAAAAAAAX14QAAAAEAAAAAAAAAAAA/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omgAAAAAAAAAABfXhAAAAAAEAAAAAAAAAAAAAAAA=", + resultXDR: "AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAANAAAAAAAAAAAAAAAA4VWYSXp7+QFjS8+8WzU2KJTONKIIk2FHXORcby4KqbgAAAAAAAAAAAX14QAAAAAA", + metaXDR: "AAAAAQAAAAIAAAADAApOFQAAAAAAAAAA6wLdS5Ald4laXujZD1Z/ZG9mIeIcp9Ju0M2xeSfc0yIAAAAXSHbnnAAKTgQAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAApOFQAAAAAAAAAA6wLdS5Ald4laXujZD1Z/ZG9mIeIcp9Ju0M2xeSfc0yIAAAAXSHbnnAAKTgQAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAMACk4VAAAAAAAAAADrAt1LkCV3iVpe6NkPVn9kb2Yh4hyn0m7QzbF5J9zTIgAAABdIduecAApOBAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEACk4VAAAAAAAAAADrAt1LkCV3iVpe6NkPVn9kb2Yh4hyn0m7QzbF5J9zTIgAAABdCgQacAApOBAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAMABZwuAAAAAAAAAADhVZhJenv5AWNLz7xbNTYolM40ogiTYUdc5FxvLgqpuAAAAAAAmJaAAAWcLgAAAAAAAAAAAAAAAAAAAAQAAAARdHN0LnRlc3Rhc3NldC5jb20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAKThUAAAAAAAAAAOFVmEl6e/kBY0vPvFs1NiiUzjSiCJNhR1zkXG8uCqm4AAAAAAaOd4AABZwuAAAAAAAAAAAAAAAAAAAABAAAABF0c3QudGVzdGFzc2V0LmNvbQAAAAAAAAAAAAAAAAAAAAAAAAA=", + feeChangesXDR: "AAAAAgAAAAMACk4EAAAAAAAAAADrAt1LkCV3iVpe6NkPVn9kb2Yh4hyn0m7QzbF5J9zTIgAAABdIdugAAApOBAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEACk4VAAAAAAAAAADrAt1LkCV3iVpe6NkPVn9kb2Yh4hyn0m7QzbF5J9zTIgAAABdIduecAApOBAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==", + index: 0, + expected: map[string]interface{}{ + "amount": "10.0000000", + "asset_type": "native", + "destination_min": "10.0000000", + "from": "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", + "from_muxed": "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", + "from_muxed_id": uint64(1234), + "path": []map[string]interface{}{{"asset_type": "native"}}, + "source_amount": "10.0000000", + "source_asset_type": "native", + "to": "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ", + "to_muxed": "MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUQ", + "to_muxed_id": uint64(0), + }, + }, { desc: "revokeSponsorship (signer)", envelopeXDR: getRevokeSponsorshipEnvelopeXDR(t), @@ -613,6 +754,28 @@ func TestTransactionOperationDetails(t *testing.T) { }, } + var tx1 xdr.TransactionEnvelope + err := xdr.SafeUnmarshalBase64("AAAAAI77mqNTy9VPgmgn+//uvjP8VJxJ1FHQ4jCrYS+K4+HvAAAAZAAAACsAAAABAAAAAAAAAAAAAAABAAAAAAAAAAgAAAAAYvwdC9CRsrYcDdZWNGsqaNfTR8bywsjubQRHAlb8BfcAAAAAAAAAAYrj4e8AAABA3jJ7wBrRpsrcnqBQWjyzwvVz2v5UJ56G60IhgsaWQFSf+7om462KToc+HJ27aLVOQ83dGh1ivp+VIuREJq/SBw==", &tx1) + assert.NoError(t, err) + fmt.Printf("%#v\n", tx1) + destination := xdr.MustMuxedAddress("MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUQ") + tx2 := xdr.TransactionEnvelope{ + Type: xdr.EnvelopeTypeEnvelopeTypeTx, + V1: &xdr.TransactionV1Envelope{ + Tx: xdr.Transaction{ + SourceAccount: xdr.MustMuxedAddress("MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26"), + Fee: 0, + SeqNum: 26, + TimeBounds: nil, + Memo: xdr.Memo{Type: xdr.MemoTypeMemoNone}, + Operations: []xdr.Operation{{Body: xdr.OperationBody{Type: xdr.OperationTypeAccountMerge, Destination: &destination}}}, + Ext: xdr.TransactionExt{}, + }, + }, + } + str, err := xdr.MarshalBase64(&tx2) + assert.NoError(t, err) + fmt.Println(str) for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { tt := assert.New(t) @@ -1042,7 +1205,7 @@ func TestTransactionOperationAllowTrustDetails(t *testing.T) { operation := transactionOperationWrapper{ index: 0, transaction: ingest.LedgerTransaction{ - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ Operations: make([]xdr.OperationMeta, 1, 1), @@ -1172,7 +1335,7 @@ func (s *CreateClaimableBalanceOpTestSuite) TestDetails() { operation := transactionOperationWrapper{ index: 0, transaction: ingest.LedgerTransaction{ - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ Operations: make([]xdr.OperationMeta, 1, 1), @@ -1218,7 +1381,7 @@ func (s *CreateClaimableBalanceOpTestSuite) TestParticipants() { s.T().Run(tc.desc, func(t *testing.T) { operation := transactionOperationWrapper{ index: 0, - transaction: ingest.LedgerTransaction{Meta: xdr.TransactionMeta{ + transaction: ingest.LedgerTransaction{UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ Operations: make([]xdr.OperationMeta, 1, 1), @@ -1246,8 +1409,7 @@ type ClaimClaimableBalanceOpTestSuite struct { func (s *ClaimClaimableBalanceOpTestSuite) SetupTest() { s.balanceID = "00000000da0d57da7d4850e7fc10d2a9d0ebc731f7afb40574c03395b17d49149b91f5be" - aid := xdr.MustAddress("GDRW375MAYR46ODGF2WGANQC2RRZL7O246DYHHCGWTV2RE7IHE2QUQLD") - source := aid.ToMuxedAccount() + source := xdr.MustMuxedAddress("MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26") var balanceID xdr.ClaimableBalanceId xdr.SafeUnmarshalHex(s.balanceID, &balanceID) s.op = xdr.Operation{ @@ -1262,14 +1424,16 @@ func (s *ClaimClaimableBalanceOpTestSuite) SetupTest() { } func (s *ClaimClaimableBalanceOpTestSuite) TestDetails() { expected := map[string]interface{}{ - "claimant": "GDRW375MAYR46ODGF2WGANQC2RRZL7O246DYHHCGWTV2RE7IHE2QUQLD", - "balance_id": s.balanceID, + "claimant": "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", + "claimant_muxed": "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", + "claimant_muxed_id": uint64(1234), + "balance_id": s.balanceID, } operation := transactionOperationWrapper{ index: 0, transaction: ingest.LedgerTransaction{ - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ Operations: make([]xdr.OperationMeta, 1, 1), @@ -1288,7 +1452,7 @@ func (s *ClaimClaimableBalanceOpTestSuite) TestParticipants() { operation := transactionOperationWrapper{ index: 0, transaction: ingest.LedgerTransaction{ - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ Operations: make([]xdr.OperationMeta, 1, 1), @@ -1302,7 +1466,7 @@ func (s *ClaimClaimableBalanceOpTestSuite) TestParticipants() { participants, err := operation.Participants() s.Assert().NoError(err) s.Assert().ElementsMatch([]xdr.AccountId{ - xdr.MustAddress("GDRW375MAYR46ODGF2WGANQC2RRZL7O246DYHHCGWTV2RE7IHE2QUQLD"), + xdr.MustAddress("GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY"), }, participants) } @@ -1311,15 +1475,16 @@ func TestClaimClaimableBalanceOpTestSuite(t *testing.T) { } var ( - sponsor = xdr.MustAddress("GAUJETIZVEP2NRYLUESJ3LS66NVCEGMON4UDCBCSBEVPIID773P2W6AY") - sponsoree = xdr.MustAddress("GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2") + sponsor = xdr.MustMuxedAddress("MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26") + sponsorAID = sponsor.ToAccountId() + sponsoree = xdr.MustAddress("GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2") ) func getSponsoredSandwichWrappers() []*transactionOperationWrapper { const ledgerSeq = uint32(12345) tx := createTransaction(true, 3) tx.Index = 1 - tx.Meta = xdr.TransactionMeta{ + tx.UnsafeMeta = xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ Operations: make([]xdr.OperationMeta, 3, 3), @@ -1342,7 +1507,7 @@ func getSponsoredSandwichWrappers() []*transactionOperationWrapper { }, } - sponsorMuxed := sponsor.ToMuxedAccount() + sponsorMuxed := sponsor // Do not provide the source explicitly so that the transaction source is used // It tests https://github.com/stellar/go/issues/2982 . // tx.Envelope.Operations()[0].SourceAccount = &sponsorMuxed @@ -1358,7 +1523,7 @@ func getSponsoredSandwichWrappers() []*transactionOperationWrapper { } sponsoreeMuxed := sponsoree.ToMuxedAccount() tx.Envelope.Operations()[1].SourceAccount = &sponsoreeMuxed - tx.Meta.V2.Operations[1] = xdr.OperationMeta{Changes: []xdr.LedgerEntryChange{ + tx.UnsafeMeta.V2.Operations[1] = xdr.OperationMeta{Changes: []xdr.LedgerEntryChange{ { Type: xdr.LedgerEntryChangeTypeLedgerEntryCreated, Created: &xdr.LedgerEntry{ @@ -1366,7 +1531,7 @@ func getSponsoredSandwichWrappers() []*transactionOperationWrapper { Ext: xdr.LedgerEntryExt{ V: 1, V1: &xdr.LedgerEntryExtensionV1{ - SponsoringId: &sponsor, + SponsoringId: &sponsorAID, }, }, }, @@ -1406,14 +1571,16 @@ func TestSponsoredSandwichTransaction_Details(t *testing.T) { assert.Equal(t, map[string]interface{}{ "account": "GC6VKA3RC3CVU7POEKFORVMHWJNQIRZS6AEH3KIIHCVO3YRGWUV7MSUC", "funder": "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2", - "sponsor": "GAUJETIZVEP2NRYLUESJ3LS66NVCEGMON4UDCBCSBEVPIID773P2W6AY", + "sponsor": "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", "starting_balance": "0.0000000", }, details) details, err = wrappers[2].Details() assert.NoError(t, err) assert.Equal(t, map[string]interface{}{ - "begin_sponsor": "GAUJETIZVEP2NRYLUESJ3LS66NVCEGMON4UDCBCSBEVPIID773P2W6AY", + "begin_sponsor": "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", + "begin_sponsor_muxed": "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", + "begin_sponsor_muxed_id": uint64(1234), }, details) } @@ -1424,7 +1591,7 @@ func TestSponsoredSandwichTransaction_Participants(t *testing.T) { assert.NoError(t, err) assert.ElementsMatch(t, []xdr.AccountId{ - xdr.MustAddress("GAUJETIZVEP2NRYLUESJ3LS66NVCEGMON4UDCBCSBEVPIID773P2W6AY"), + xdr.MustAddress("GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY"), xdr.MustAddress("GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"), }, participants, @@ -1436,7 +1603,7 @@ func TestSponsoredSandwichTransaction_Participants(t *testing.T) { []xdr.AccountId{ xdr.MustAddress("GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"), xdr.MustAddress("GC6VKA3RC3CVU7POEKFORVMHWJNQIRZS6AEH3KIIHCVO3YRGWUV7MSUC"), - xdr.MustAddress("GAUJETIZVEP2NRYLUESJ3LS66NVCEGMON4UDCBCSBEVPIID773P2W6AY"), + xdr.MustAddress("GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY"), }, participants, ) @@ -1446,7 +1613,7 @@ func TestSponsoredSandwichTransaction_Participants(t *testing.T) { assert.ElementsMatch(t, []xdr.AccountId{ xdr.MustAddress("GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"), - xdr.MustAddress("GAUJETIZVEP2NRYLUESJ3LS66NVCEGMON4UDCBCSBEVPIID773P2W6AY"), + xdr.MustAddress("GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY"), }, participants, ) @@ -1459,15 +1626,14 @@ type ClawbackTestSuite struct { } func (s *ClawbackTestSuite) SetupTest() { - aid := xdr.MustAddress("GDRW375MAYR46ODGF2WGANQC2RRZL7O246DYHHCGWTV2RE7IHE2QUQLD") - source := aid.ToMuxedAccount() + source := xdr.MustMuxedAddress("MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26") s.op = xdr.Operation{ SourceAccount: &source, Body: xdr.OperationBody{ Type: xdr.OperationTypeClawback, ClawbackOp: &xdr.ClawbackOp{ Asset: xdr.MustNewCreditAsset("USD", "GDRW375MAYR46ODGF2WGANQC2RRZL7O246DYHHCGWTV2RE7IHE2QUQLD"), - From: xdr.MustMuxedAddress("GAUJETIZVEP2NRYLUESJ3LS66NVCEGMON4UDCBCSBEVPIID773P2W6AY"), + From: xdr.MustMuxedAddress("MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUQ"), Amount: 20, }, }, @@ -1475,17 +1641,19 @@ func (s *ClawbackTestSuite) SetupTest() { } func (s *ClawbackTestSuite) TestDetails() { expected := map[string]interface{}{ - "asset_code": "USD", - "asset_issuer": "GDRW375MAYR46ODGF2WGANQC2RRZL7O246DYHHCGWTV2RE7IHE2QUQLD", - "asset_type": "credit_alphanum4", - "amount": "0.0000020", - "from": "GAUJETIZVEP2NRYLUESJ3LS66NVCEGMON4UDCBCSBEVPIID773P2W6AY", + "asset_code": "USD", + "asset_issuer": "GDRW375MAYR46ODGF2WGANQC2RRZL7O246DYHHCGWTV2RE7IHE2QUQLD", + "asset_type": "credit_alphanum4", + "amount": "0.0000020", + "from": "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ", + "from_muxed": "MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUQ", + "from_muxed_id": uint64(0), } operation := transactionOperationWrapper{ index: 0, transaction: ingest.LedgerTransaction{ - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ Operations: make([]xdr.OperationMeta, 1, 1), @@ -1504,7 +1672,7 @@ func (s *ClawbackTestSuite) TestParticipants() { operation := transactionOperationWrapper{ index: 0, transaction: ingest.LedgerTransaction{ - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ Operations: make([]xdr.OperationMeta, 1, 1), @@ -1518,8 +1686,8 @@ func (s *ClawbackTestSuite) TestParticipants() { participants, err := operation.Participants() s.Assert().NoError(err) s.Assert().ElementsMatch([]xdr.AccountId{ - xdr.MustAddress("GDRW375MAYR46ODGF2WGANQC2RRZL7O246DYHHCGWTV2RE7IHE2QUQLD"), - xdr.MustAddress("GAUJETIZVEP2NRYLUESJ3LS66NVCEGMON4UDCBCSBEVPIID773P2W6AY"), + xdr.MustAddress("GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY"), + xdr.MustAddress("GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ"), }, participants) } @@ -1567,7 +1735,7 @@ func (s *SetTrustLineFlagsTestSuite) TestDetails() { operation := transactionOperationWrapper{ index: 0, transaction: ingest.LedgerTransaction{ - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ Operations: make([]xdr.OperationMeta, 1, 1), @@ -1586,7 +1754,7 @@ func (s *SetTrustLineFlagsTestSuite) TestParticipants() { operation := transactionOperationWrapper{ index: 0, transaction: ingest.LedgerTransaction{ - Meta: xdr.TransactionMeta{ + UnsafeMeta: xdr.TransactionMeta{ V: 2, V2: &xdr.TransactionMetaV2{ Operations: make([]xdr.OperationMeta, 1, 1), @@ -1608,3 +1776,123 @@ func (s *SetTrustLineFlagsTestSuite) TestParticipants() { func TestSetTrustLineFlagsTestSuite(t *testing.T) { suite.Run(t, new(SetTrustLineFlagsTestSuite)) } + +func TestParticipantsCoversAllOperationTypes(t *testing.T) { + source := xdr.MustMuxedAddress("GDRW375MAYR46ODGF2WGANQC2RRZL7O246DYHHCGWTV2RE7IHE2QUQLD") + for typ, s := range xdr.OperationTypeToStringMap { + op := xdr.Operation{ + SourceAccount: &source, + Body: xdr.OperationBody{ + Type: xdr.OperationType(typ), + }, + } + operation := transactionOperationWrapper{ + index: 0, + transaction: ingest.LedgerTransaction{ + UnsafeMeta: xdr.TransactionMeta{ + V: 2, + V2: &xdr.TransactionMetaV2{}, + }, + }, + operation: op, + ledgerSequence: 1, + } + // calling Participants should either panic (because the operation field is set to nil) + // or not error + func() { + var err error + defer func() { + err2 := recover() + if err != nil { + assert.NotContains(t, err.Error(), "Unknown operation type") + } + assert.True(t, err2 != nil || err == nil, s) + }() + _, err = operation.Participants() + }() + } + + // make sure the check works for an unknown operation type + op := xdr.Operation{ + SourceAccount: &source, + Body: xdr.OperationBody{ + Type: xdr.OperationType(20000), + }, + } + operation := transactionOperationWrapper{ + index: 0, + transaction: ingest.LedgerTransaction{ + UnsafeMeta: xdr.TransactionMeta{ + V: 2, + V2: &xdr.TransactionMetaV2{}, + }, + }, + operation: op, + ledgerSequence: 1, + } + // calling Participants should error due to the unknown operation + _, err := operation.Participants() + assert.Contains(t, err.Error(), "Unknown operation type") +} + +func TestDetailsCoversAllOperationTypes(t *testing.T) { + source := xdr.MustMuxedAddress("GDRW375MAYR46ODGF2WGANQC2RRZL7O246DYHHCGWTV2RE7IHE2QUQLD") + for typ, s := range xdr.OperationTypeToStringMap { + op := xdr.Operation{ + SourceAccount: &source, + Body: xdr.OperationBody{ + Type: xdr.OperationType(typ), + }, + } + operation := transactionOperationWrapper{ + index: 0, + transaction: ingest.LedgerTransaction{ + UnsafeMeta: xdr.TransactionMeta{ + V: 2, + V2: &xdr.TransactionMetaV2{}, + }, + }, + operation: op, + ledgerSequence: 1, + } + // calling Details should either panic (because the operation field is set to nil) + // or not error + func() { + var err error + defer func() { + err2 := recover() + if err2 != nil { + if err3, ok := err2.(error); ok { + assert.NotContains(t, "Unknown operation type", err3.Error()) + } + } + assert.True(t, err2 != nil || err == nil, s) + }() + _, err = operation.Details() + }() + } + + // make sure the check works for an unknown operation type + op := xdr.Operation{ + SourceAccount: &source, + Body: xdr.OperationBody{ + Type: xdr.OperationType(20000), + }, + } + operation := transactionOperationWrapper{ + index: 0, + transaction: ingest.LedgerTransaction{ + UnsafeMeta: xdr.TransactionMeta{ + V: 2, + V2: &xdr.TransactionMetaV2{}, + }, + }, + operation: op, + ledgerSequence: 1, + } + // calling Details should panic with unknown operation type + f := func() { + operation.Details() + } + assert.PanicsWithError(t, "Unknown operation type: ", f) +} diff --git a/services/horizon/internal/ingest/processors/transactions_processor.go b/services/horizon/internal/ingest/processors/transactions_processor.go index 8ba007bd87..4e47cb96ba 100644 --- a/services/horizon/internal/ingest/processors/transactions_processor.go +++ b/services/horizon/internal/ingest/processors/transactions_processor.go @@ -1,6 +1,7 @@ package processors import ( + "context" "github.com/stellar/go/ingest" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/support/errors" @@ -20,16 +21,16 @@ func NewTransactionProcessor(transactionsQ history.QTransactions, sequence uint3 } } -func (p *TransactionProcessor) ProcessTransaction(transaction ingest.LedgerTransaction) error { - if err := p.batch.Add(transaction, p.sequence); err != nil { +func (p *TransactionProcessor) ProcessTransaction(ctx context.Context, transaction ingest.LedgerTransaction) error { + if err := p.batch.Add(ctx, transaction, p.sequence); err != nil { return errors.Wrap(err, "Error batch inserting transaction rows") } return nil } -func (p *TransactionProcessor) Commit() error { - if err := p.batch.Exec(); err != nil { +func (p *TransactionProcessor) Commit(ctx context.Context) error { + if err := p.batch.Exec(ctx); err != nil { return errors.Wrap(err, "Error flushing transaction batch") } diff --git a/services/horizon/internal/ingest/processors/transactions_processor_test.go b/services/horizon/internal/ingest/processors/transactions_processor_test.go index d04aaec44d..ec1cf105e5 100644 --- a/services/horizon/internal/ingest/processors/transactions_processor_test.go +++ b/services/horizon/internal/ingest/processors/transactions_processor_test.go @@ -3,6 +3,7 @@ package processors import ( + "context" "testing" "github.com/stellar/go/services/horizon/internal/db2/history" @@ -12,6 +13,7 @@ import ( type TransactionsProcessorTestSuiteLedger struct { suite.Suite + ctx context.Context processor *TransactionProcessor mockQ *history.MockQTransactions mockBatchInsertBuilder *history.MockTransactionsBatchInsertBuilder @@ -22,6 +24,7 @@ func TestTransactionsProcessorTestSuiteLedger(t *testing.T) { } func (s *TransactionsProcessorTestSuiteLedger) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQTransactions{} s.mockBatchInsertBuilder = &history.MockTransactionsBatchInsertBuilder{} @@ -44,29 +47,29 @@ func (s *TransactionsProcessorTestSuiteLedger) TestAddTransactionsSucceeds() { secondTx := createTransaction(false, 3) thirdTx := createTransaction(true, 4) - s.mockBatchInsertBuilder.On("Add", firstTx, sequence).Return(nil).Once() - s.mockBatchInsertBuilder.On("Add", secondTx, sequence).Return(nil).Once() - s.mockBatchInsertBuilder.On("Add", thirdTx, sequence).Return(nil).Once() - s.mockBatchInsertBuilder.On("Exec").Return(nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.mockBatchInsertBuilder.On("Add", s.ctx, firstTx, sequence).Return(nil).Once() + s.mockBatchInsertBuilder.On("Add", s.ctx, secondTx, sequence).Return(nil).Once() + s.mockBatchInsertBuilder.On("Add", s.ctx, thirdTx, sequence).Return(nil).Once() + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(nil).Once() + s.Assert().NoError(s.processor.Commit(s.ctx)) - err := s.processor.ProcessTransaction(firstTx) + err := s.processor.ProcessTransaction(s.ctx, firstTx) s.Assert().NoError(err) - err = s.processor.ProcessTransaction(secondTx) + err = s.processor.ProcessTransaction(s.ctx, secondTx) s.Assert().NoError(err) - err = s.processor.ProcessTransaction(thirdTx) + err = s.processor.ProcessTransaction(s.ctx, thirdTx) s.Assert().NoError(err) } func (s *TransactionsProcessorTestSuiteLedger) TestAddTransactionsFails() { sequence := uint32(20) firstTx := createTransaction(true, 1) - s.mockBatchInsertBuilder.On("Add", firstTx, sequence). + s.mockBatchInsertBuilder.On("Add", s.ctx, firstTx, sequence). Return(errors.New("transient error")).Once() - err := s.processor.ProcessTransaction(firstTx) + err := s.processor.ProcessTransaction(s.ctx, firstTx) s.Assert().Error(err) s.Assert().EqualError(err, "Error batch inserting transaction rows: transient error") } @@ -75,13 +78,13 @@ func (s *TransactionsProcessorTestSuiteLedger) TestExecFails() { sequence := uint32(20) firstTx := createTransaction(true, 1) - s.mockBatchInsertBuilder.On("Add", firstTx, sequence).Return(nil).Once() - s.mockBatchInsertBuilder.On("Exec").Return(errors.New("transient error")).Once() + s.mockBatchInsertBuilder.On("Add", s.ctx, firstTx, sequence).Return(nil).Once() + s.mockBatchInsertBuilder.On("Exec", s.ctx).Return(errors.New("transient error")).Once() - err := s.processor.ProcessTransaction(firstTx) + err := s.processor.ProcessTransaction(s.ctx, firstTx) s.Assert().NoError(err) - err = s.processor.Commit() + err = s.processor.Commit(s.ctx) s.Assert().Error(err) s.Assert().EqualError(err, "Error flushing transaction batch: transient error") } diff --git a/services/horizon/internal/ingest/processors/trust_lines_processor.go b/services/horizon/internal/ingest/processors/trust_lines_processor.go index ac1a6b7e45..c97e47e709 100644 --- a/services/horizon/internal/ingest/processors/trust_lines_processor.go +++ b/services/horizon/internal/ingest/processors/trust_lines_processor.go @@ -1,6 +1,8 @@ package processors import ( + "context" + "github.com/stellar/go/ingest" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/support/errors" @@ -23,7 +25,7 @@ func (p *TrustLinesProcessor) reset() { p.cache = ingest.NewChangeCompactor() } -func (p *TrustLinesProcessor) ProcessChange(change ingest.Change) error { +func (p *TrustLinesProcessor) ProcessChange(ctx context.Context, change ingest.Change) error { if change.Type != xdr.LedgerEntryTypeTrustline { return nil } @@ -34,7 +36,7 @@ func (p *TrustLinesProcessor) ProcessChange(change ingest.Change) error { } if p.cache.Size() > maxBatchSize { - err = p.Commit() + err = p.Commit(ctx) if err != nil { return errors.Wrap(err, "error in Commit") } @@ -44,7 +46,7 @@ func (p *TrustLinesProcessor) ProcessChange(change ingest.Change) error { return nil } -func (p *TrustLinesProcessor) Commit() error { +func (p *TrustLinesProcessor) Commit(ctx context.Context) error { batchUpsertTrustLines := []xdr.LedgerEntry{} changes := p.cache.GetChanges() @@ -66,7 +68,7 @@ func (p *TrustLinesProcessor) Commit() error { if err != nil { return errors.Wrap(err, "Error creating ledger key") } - rowsAffected, err = p.trustLinesQ.RemoveTrustLine(*ledgerKey.TrustLine) + rowsAffected, err = p.trustLinesQ.RemoveTrustLine(ctx, *ledgerKey.TrustLine) if err != nil { return err } @@ -87,7 +89,7 @@ func (p *TrustLinesProcessor) Commit() error { // Upsert accounts if len(batchUpsertTrustLines) > 0 { - err := p.trustLinesQ.UpsertTrustLines(batchUpsertTrustLines) + err := p.trustLinesQ.UpsertTrustLines(ctx, batchUpsertTrustLines) if err != nil { return errors.Wrap(err, "errors in UpsertTrustLines") } diff --git a/services/horizon/internal/ingest/processors/trust_lines_processor_test.go b/services/horizon/internal/ingest/processors/trust_lines_processor_test.go index 98b3f6b5ed..2ca13189d2 100644 --- a/services/horizon/internal/ingest/processors/trust_lines_processor_test.go +++ b/services/horizon/internal/ingest/processors/trust_lines_processor_test.go @@ -3,6 +3,7 @@ package processors import ( + "context" "testing" "github.com/stretchr/testify/mock" @@ -22,17 +23,19 @@ func TestTrustLinesProcessorTestSuiteState(t *testing.T) { type TrustLinesProcessorTestSuiteState struct { suite.Suite + ctx context.Context processor *TrustLinesProcessor mockQ *history.MockQTrustLines } func (s *TrustLinesProcessorTestSuiteState) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQTrustLines{} s.processor = NewTrustLinesProcessor(s.mockQ) } func (s *TrustLinesProcessorTestSuiteState) TearDownTest() { - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) s.mockQ.AssertExpectations(s.T()) } @@ -44,7 +47,7 @@ func (s *TrustLinesProcessorTestSuiteState) TestCreateTrustLine() { } lastModifiedLedgerSeq := xdr.Uint32(123) - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: nil, Post: &xdr.LedgerEntry{ @@ -59,6 +62,7 @@ func (s *TrustLinesProcessorTestSuiteState) TestCreateTrustLine() { s.mockQ.On( "UpsertTrustLines", + s.ctx, []xdr.LedgerEntry{ { LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -77,7 +81,7 @@ func (s *TrustLinesProcessorTestSuiteState) TestCreateTrustLineUnauthorized() { Asset: xdr.MustNewCreditAsset("EUR", trustLineIssuer.Address()), } lastModifiedLedgerSeq := xdr.Uint32(123) - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: nil, Post: &xdr.LedgerEntry{ @@ -92,6 +96,7 @@ func (s *TrustLinesProcessorTestSuiteState) TestCreateTrustLineUnauthorized() { s.mockQ.On( "UpsertTrustLines", + s.ctx, []xdr.LedgerEntry{ { LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -110,11 +115,13 @@ func TestTrustLinesProcessorTestSuiteLedger(t *testing.T) { type TrustLinesProcessorTestSuiteLedger struct { suite.Suite + ctx context.Context processor *TrustLinesProcessor mockQ *history.MockQTrustLines } func (s *TrustLinesProcessorTestSuiteLedger) SetupTest() { + s.ctx = context.Background() s.mockQ = &history.MockQTrustLines{} s.processor = NewTrustLinesProcessor(s.mockQ) } @@ -125,12 +132,12 @@ func (s *TrustLinesProcessorTestSuiteLedger) TearDownTest() { func (s *TrustLinesProcessorTestSuiteLedger) TestNoIngestUpdateState() { // Nothing processed, assertions in TearDownTest. - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *TrustLinesProcessorTestSuiteLedger) TestInsertTrustLine() { // should be ignored because it's not an trust line type - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeAccount, Pre: nil, Post: &xdr.LedgerEntry{ @@ -159,7 +166,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestInsertTrustLine() { } lastModifiedLedgerSeq := xdr.Uint32(1234) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: nil, Post: &xdr.LedgerEntry{ @@ -172,7 +179,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestInsertTrustLine() { }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: nil, Post: &xdr.LedgerEntry{ @@ -197,7 +204,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestInsertTrustLine() { Balance: 10, } - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -216,7 +223,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestInsertTrustLine() { }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -237,9 +244,10 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestInsertTrustLine() { s.mockQ.On( "UpsertTrustLines", + s.ctx, mock.AnythingOfType("[]xdr.LedgerEntry"), ).Run(func(args mock.Arguments) { - arg := args.Get(0).([]xdr.LedgerEntry) + arg := args.Get(1).([]xdr.LedgerEntry) s.Assert().ElementsMatch( []xdr.LedgerEntry{ { @@ -260,7 +268,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestInsertTrustLine() { arg, ) }).Return(nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *TrustLinesProcessorTestSuiteLedger) TestUpdateTrustLine() { @@ -279,7 +287,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestUpdateTrustLine() { Flags: xdr.Uint32(xdr.TrustLineFlagsAuthorizedFlag), } - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -300,6 +308,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestUpdateTrustLine() { s.mockQ.On( "UpsertTrustLines", + s.ctx, []xdr.LedgerEntry{ { LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -310,7 +319,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestUpdateTrustLine() { }, }, ).Return(nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *TrustLinesProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() { @@ -340,7 +349,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() Balance: 10, } - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq - 1, @@ -359,7 +368,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq - 1, @@ -380,9 +389,10 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() s.mockQ.On( "UpsertTrustLines", + s.ctx, mock.AnythingOfType("[]xdr.LedgerEntry"), ).Run(func(args mock.Arguments) { - arg := args.Get(0).([]xdr.LedgerEntry) + arg := args.Get(1).([]xdr.LedgerEntry) s.Assert().ElementsMatch( []xdr.LedgerEntry{ { @@ -403,7 +413,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestUpdateTrustLineAuthorization() arg, ) }).Return(nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *TrustLinesProcessorTestSuiteLedger) TestRemoveTrustLine() { @@ -413,7 +423,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestRemoveTrustLine() { Balance: 0, } - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -430,7 +440,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestRemoveTrustLine() { }) s.Assert().NoError(err) - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -443,20 +453,20 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestRemoveTrustLine() { s.Assert().NoError(err) s.mockQ.On( - "RemoveTrustLine", + "RemoveTrustLine", s.ctx, xdr.LedgerKeyTrustLine{ AccountId: xdr.MustAddress("GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB"), Asset: xdr.MustNewCreditAsset("EUR", trustLineIssuer.Address()), }, ).Return(int64(1), nil).Once() s.mockQ.On( - "RemoveTrustLine", + "RemoveTrustLine", s.ctx, xdr.LedgerKeyTrustLine{ AccountId: xdr.MustAddress("GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB"), Asset: xdr.MustNewCreditAsset("USD", trustLineIssuer.Address()), }, ).Return(int64(1), nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *TrustLinesProcessorTestSuiteLedger) TestProcessUpgradeChange() { @@ -469,7 +479,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestProcessUpgradeChange() { Flags: xdr.Uint32(xdr.TrustLineFlagsAuthorizedFlag), } - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Post: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -488,7 +498,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestProcessUpgradeChange() { Flags: xdr.Uint32(xdr.TrustLineFlagsAuthorizedFlag), } - err = s.processor.ProcessChange(ingest.Change{ + err = s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -508,7 +518,7 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestProcessUpgradeChange() { s.Assert().NoError(err) s.mockQ.On( - "UpsertTrustLines", + "UpsertTrustLines", s.ctx, []xdr.LedgerEntry{ { LastModifiedLedgerSeq: lastModifiedLedgerSeq, @@ -519,11 +529,11 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestProcessUpgradeChange() { }, }, ).Return(nil).Once() - s.Assert().NoError(s.processor.Commit()) + s.Assert().NoError(s.processor.Commit(s.ctx)) } func (s *TrustLinesProcessorTestSuiteLedger) TestRemoveTrustlineNoRowsAffected() { - err := s.processor.ProcessChange(ingest.Change{ + err := s.processor.ProcessChange(s.ctx, ingest.Change{ Type: xdr.LedgerEntryTypeTrustline, Pre: &xdr.LedgerEntry{ Data: xdr.LedgerEntryData{ @@ -541,14 +551,14 @@ func (s *TrustLinesProcessorTestSuiteLedger) TestRemoveTrustlineNoRowsAffected() s.Assert().NoError(err) s.mockQ.On( - "RemoveTrustLine", + "RemoveTrustLine", s.ctx, xdr.LedgerKeyTrustLine{ AccountId: xdr.MustAddress("GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB"), Asset: xdr.MustNewCreditAsset("EUR", trustLineIssuer.Address()), }, ).Return(int64(0), nil).Once() - err = s.processor.Commit() + err = s.processor.Commit(s.ctx) s.Assert().Error(err) s.Assert().IsType(ingest.StateError{}, errors.Cause(err)) s.Assert().EqualError(err, "0 rows affected when removing trustline: GAOQJGUAB7NI7K7I62ORBXMN3J4SSWQUQ7FOEPSDJ322W2HMCNWPHXFB credit_alphanum4/EUR/GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H") diff --git a/services/horizon/internal/ingest/resume_state_test.go b/services/horizon/internal/ingest/resume_state_test.go index 2647f4a6e9..b6e2b4c2a8 100644 --- a/services/horizon/internal/ingest/resume_state_test.go +++ b/services/horizon/internal/ingest/resume_state_test.go @@ -23,6 +23,7 @@ func TestResumeTestTestSuite(t *testing.T) { type ResumeTestTestSuite struct { suite.Suite + ctx context.Context ledgerBackend *ledgerbackend.MockDatabaseBackend historyQ *mockDBQ historyAdapter *mockHistoryArchiveAdapter @@ -32,13 +33,14 @@ type ResumeTestTestSuite struct { } func (s *ResumeTestTestSuite) SetupTest() { + s.ctx = context.Background() s.ledgerBackend = &ledgerbackend.MockDatabaseBackend{} s.historyQ = &mockDBQ{} s.historyAdapter = &mockHistoryArchiveAdapter{} s.runner = &mockProcessorsRunner{} s.stellarCoreClient = &mockStellarCoreClient{} s.system = &system{ - ctx: context.Background(), + ctx: s.ctx, historyQ: s.historyQ, historyAdapter: s.historyAdapter, runner: s.runner, @@ -48,11 +50,11 @@ func (s *ResumeTestTestSuite) SetupTest() { } s.system.initMetrics() - s.historyQ.On("Rollback").Return(nil).Once() + s.historyQ.On("Rollback", s.ctx).Return(nil).Once() - s.ledgerBackend.On("IsPrepared", ledgerbackend.UnboundedRange(101)).Return(false, nil).Once() - s.ledgerBackend.On("PrepareRange", ledgerbackend.UnboundedRange(101)).Return(nil).Once() - s.ledgerBackend.On("GetLedgerBlocking", uint32(101)).Return(xdr.LedgerCloseMeta{ + s.ledgerBackend.On("IsPrepared", s.ctx, ledgerbackend.UnboundedRange(101)).Return(false, nil).Once() + s.ledgerBackend.On("PrepareRange", s.ctx, ledgerbackend.UnboundedRange(101)).Return(nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(101)).Return(xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{ LedgerHeader: xdr.LedgerHeaderHistoryEntry{ Header: xdr.LedgerHeader{ @@ -93,8 +95,8 @@ func (s *ResumeTestTestSuite) TestRangeNotPreparedFailPrepare() { *s.historyQ = mockDBQ{} *s.ledgerBackend = ledgerbackend.MockDatabaseBackend{} - s.ledgerBackend.On("IsPrepared", ledgerbackend.UnboundedRange(101)).Return(false, nil).Once() - s.ledgerBackend.On("PrepareRange", ledgerbackend.UnboundedRange(101)).Return(errors.New("my error")).Once() + s.ledgerBackend.On("IsPrepared", s.ctx, ledgerbackend.UnboundedRange(101)).Return(false, nil).Once() + s.ledgerBackend.On("PrepareRange", s.ctx, ledgerbackend.UnboundedRange(101)).Return(errors.New("my error")).Once() next, err := resumeState{latestSuccessfullyProcessedLedger: 100}.run(s.system) s.Assert().Error(err) @@ -110,9 +112,9 @@ func (s *ResumeTestTestSuite) TestRangeNotPreparedSuccessPrepareGetLedgerFail() *s.historyQ = mockDBQ{} *s.ledgerBackend = ledgerbackend.MockDatabaseBackend{} - s.ledgerBackend.On("IsPrepared", ledgerbackend.UnboundedRange(101)).Return(false, nil).Once() - s.ledgerBackend.On("PrepareRange", ledgerbackend.UnboundedRange(101)).Return(nil).Once() - s.ledgerBackend.On("GetLedgerBlocking", uint32(101)).Return(xdr.LedgerCloseMeta{}, errors.New("my error")).Once() + s.ledgerBackend.On("IsPrepared", s.ctx, ledgerbackend.UnboundedRange(101)).Return(false, nil).Once() + s.ledgerBackend.On("PrepareRange", s.ctx, ledgerbackend.UnboundedRange(101)).Return(nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(101)).Return(xdr.LedgerCloseMeta{}, errors.New("my error")).Once() next, err := resumeState{latestSuccessfullyProcessedLedger: 100}.run(s.system) s.Assert().Error(err) @@ -124,7 +126,7 @@ func (s *ResumeTestTestSuite) TestBeginReturnsError() { // Recreate mock in this single test to remove Rollback assertion. *s.historyQ = mockDBQ{} - s.historyQ.On("Begin").Return(errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(errors.New("my error")).Once() next, err := resumeState{latestSuccessfullyProcessedLedger: 100}.run(s.system) s.Assert().Error(err) @@ -139,8 +141,8 @@ func (s *ResumeTestTestSuite) TestBeginReturnsError() { } func (s *ResumeTestTestSuite) TestGetLastLedgerIngestReturnsError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), errors.New("my error")).Once() next, err := resumeState{latestSuccessfullyProcessedLedger: 100}.run(s.system) s.Assert().Error(err) @@ -155,8 +157,8 @@ func (s *ResumeTestTestSuite) TestGetLastLedgerIngestReturnsError() { } func (s *ResumeTestTestSuite) TestGetLatestLedgerLessThanCurrent() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(99), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(99), nil).Once() next, err := resumeState{latestSuccessfullyProcessedLedger: 100}.run(s.system) s.Assert().Error(err) @@ -168,9 +170,9 @@ func (s *ResumeTestTestSuite) TestGetLatestLedgerLessThanCurrent() { } func (s *ResumeTestTestSuite) TestGetIngestionVersionError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(100), nil).Once() - s.historyQ.On("GetIngestVersion").Return(0, errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(100), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(0, errors.New("my error")).Once() next, err := resumeState{latestSuccessfullyProcessedLedger: 100}.run(s.system) s.Assert().Error(err) @@ -185,9 +187,9 @@ func (s *ResumeTestTestSuite) TestGetIngestionVersionError() { } func (s *ResumeTestTestSuite) TestIngestionVersionLessThanCurrentVersion() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(100), nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion-1, nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(100), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion-1, nil).Once() next, err := resumeState{latestSuccessfullyProcessedLedger: 100}.run(s.system) s.Assert().NoError(err) @@ -198,9 +200,9 @@ func (s *ResumeTestTestSuite) TestIngestionVersionLessThanCurrentVersion() { } func (s *ResumeTestTestSuite) TestIngestionVersionGreaterThanCurrentVersion() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(100), nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion+1, nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(100), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion+1, nil).Once() next, err := resumeState{latestSuccessfullyProcessedLedger: 100}.run(s.system) s.Assert().NoError(err) @@ -211,10 +213,10 @@ func (s *ResumeTestTestSuite) TestIngestionVersionGreaterThanCurrentVersion() { } func (s *ResumeTestTestSuite) TestGetLatestLedgerError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(100), nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(0), errors.New("my error")) + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(100), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(0), errors.New("my error")) next, err := resumeState{latestSuccessfullyProcessedLedger: 100}.run(s.system) s.Assert().Error(err) @@ -229,10 +231,10 @@ func (s *ResumeTestTestSuite) TestGetLatestLedgerError() { } func (s *ResumeTestTestSuite) TestLatestHistoryLedgerLessThanIngestLedger() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(100), nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(99), nil) + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(100), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(99), nil) next, err := resumeState{latestSuccessfullyProcessedLedger: 100}.run(s.system) s.Assert().NoError(err) @@ -243,10 +245,10 @@ func (s *ResumeTestTestSuite) TestLatestHistoryLedgerLessThanIngestLedger() { } func (s *ResumeTestTestSuite) TestLatestHistoryLedgerGreaterThanIngestLedger() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(100), nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(101), nil) + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(100), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(101), nil) next, err := resumeState{latestSuccessfullyProcessedLedger: 100}.run(s.system) s.Assert().NoError(err) @@ -257,10 +259,10 @@ func (s *ResumeTestTestSuite) TestLatestHistoryLedgerGreaterThanIngestLedger() { } func (s *ResumeTestTestSuite) mockSuccessfulIngestion() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(100), nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(100), nil) + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(100), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(100), nil) s.runner.On("RunAllProcessorsOnLedger", mock.AnythingOfType("xdr.LedgerCloseMeta")). Run(func(args mock.Arguments) { @@ -274,8 +276,8 @@ func (s *ResumeTestTestSuite) mockSuccessfulIngestion() { processorsRunDurations{}, nil, ).Once() - s.historyQ.On("UpdateLastLedgerIngest", uint32(101)).Return(nil).Once() - s.historyQ.On("Commit").Return(nil).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, uint32(101)).Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(nil).Once() s.stellarCoreClient.On( "SetCursor", @@ -284,14 +286,14 @@ func (s *ResumeTestTestSuite) mockSuccessfulIngestion() { int32(101), ).Return(nil).Once() - s.historyQ.On("GetExpStateInvalid").Return(false, nil).Once() + s.historyQ.On("GetExpStateInvalid", s.ctx).Return(false, nil).Once() } func (s *ResumeTestTestSuite) TestBumpIngestLedger() { *s.ledgerBackend = ledgerbackend.MockDatabaseBackend{} - s.ledgerBackend.On("IsPrepared", ledgerbackend.UnboundedRange(100)).Return(false, nil).Once() - s.ledgerBackend.On("PrepareRange", ledgerbackend.UnboundedRange(100)).Return(nil).Once() - s.ledgerBackend.On("GetLedgerBlocking", uint32(100)).Return(xdr.LedgerCloseMeta{ + s.ledgerBackend.On("IsPrepared", s.ctx, ledgerbackend.UnboundedRange(100)).Return(false, nil).Once() + s.ledgerBackend.On("PrepareRange", s.ctx, ledgerbackend.UnboundedRange(100)).Return(nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(100)).Return(xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{ LedgerHeader: xdr.LedgerHeaderHistoryEntry{ Header: xdr.LedgerHeader{ @@ -303,8 +305,8 @@ func (s *ResumeTestTestSuite) TestBumpIngestLedger() { }, }, nil).Once() - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(101), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(101), nil).Once() next, err := resumeState{latestSuccessfullyProcessedLedger: 99}.run(s.system) s.Assert().NoError(err) @@ -332,10 +334,10 @@ func (s *ResumeTestTestSuite) TestIngestAllMasterNode() { } func (s *ResumeTestTestSuite) TestErrorSettingCursorIgnored() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(100), nil).Once() - s.historyQ.On("GetIngestVersion").Return(CurrentVersion, nil).Once() - s.historyQ.On("GetLatestHistoryLedger").Return(uint32(100), nil) + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(100), nil).Once() + s.historyQ.On("GetIngestVersion", s.ctx).Return(CurrentVersion, nil).Once() + s.historyQ.On("GetLatestHistoryLedger", s.ctx).Return(uint32(100), nil) s.runner.On("RunAllProcessorsOnLedger", mock.AnythingOfType("xdr.LedgerCloseMeta")). Run(func(args mock.Arguments) { @@ -349,8 +351,8 @@ func (s *ResumeTestTestSuite) TestErrorSettingCursorIgnored() { processorsRunDurations{}, nil, ).Once() - s.historyQ.On("UpdateLastLedgerIngest", uint32(101)).Return(nil).Once() - s.historyQ.On("Commit").Return(nil).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, uint32(101)).Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(nil).Once() s.stellarCoreClient.On( "SetCursor", @@ -359,7 +361,7 @@ func (s *ResumeTestTestSuite) TestErrorSettingCursorIgnored() { int32(101), ).Return(errors.New("my error")).Once() - s.historyQ.On("GetExpStateInvalid").Return(false, nil).Once() + s.historyQ.On("GetExpStateInvalid", s.ctx).Return(false, nil).Once() next, err := resumeState{latestSuccessfullyProcessedLedger: 100}.run(s.system) s.Assert().NoError(err) diff --git a/services/horizon/internal/ingest/stress_test.go b/services/horizon/internal/ingest/stress_test.go index b3d2d9dd56..852ad8ed57 100644 --- a/services/horizon/internal/ingest/stress_test.go +++ b/services/horizon/internal/ingest/stress_test.go @@ -3,6 +3,7 @@ package ingest import ( + "context" "testing" "github.com/stretchr/testify/mock" @@ -19,6 +20,7 @@ func TestStressTestStateTestSuite(t *testing.T) { type StressTestStateTestSuite struct { suite.Suite + ctx context.Context historyQ *mockDBQ historyAdapter *mockHistoryArchiveAdapter runner *mockProcessorsRunner @@ -26,10 +28,12 @@ type StressTestStateTestSuite struct { } func (s *StressTestStateTestSuite) SetupTest() { + s.ctx = context.Background() s.historyQ = &mockDBQ{} s.historyAdapter = &mockHistoryArchiveAdapter{} s.runner = &mockProcessorsRunner{} s.system = &system{ + ctx: s.ctx, historyQ: s.historyQ, historyAdapter: s.historyAdapter, runner: s.runner, @@ -37,7 +41,7 @@ func (s *StressTestStateTestSuite) SetupTest() { s.system.initMetrics() s.historyQ.On("GetTx").Return(nil).Once() - s.historyQ.On("Rollback").Return(nil).Once() + s.historyQ.On("Rollback", s.ctx).Return(nil).Once() s.runner.On("EnableMemoryStatsLogging").Return() } @@ -65,31 +69,31 @@ func (s *StressTestStateTestSuite) TestBounds() { func (s *StressTestStateTestSuite) TestBeginReturnsError() { *s.historyQ = mockDBQ{} s.historyQ.On("GetTx").Return(nil).Once() - s.historyQ.On("Begin").Return(errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(errors.New("my error")).Once() err := s.system.StressTest(10, 4) s.Assert().EqualError(err, "Error starting a transaction: my error") } func (s *StressTestStateTestSuite) TestGetLastLedgerIngestReturnsError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), errors.New("my error")).Once() err := s.system.StressTest(10, 4) s.Assert().EqualError(err, "Error getting last ingested ledger: my error") } func (s *StressTestStateTestSuite) TestGetLastLedgerIngestNonEmpty() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(100), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(100), nil).Once() err := s.system.StressTest(10, 4) s.Assert().EqualError(err, "Database not empty") } func (s *StressTestStateTestSuite) TestRunAllProcessorsOnLedgerReturnsError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() s.runner.On("RunAllProcessorsOnLedger", mock.AnythingOfType("xdr.LedgerCloseMeta")).Return( ingest.StatsChangeProcessorResults{}, @@ -104,8 +108,8 @@ func (s *StressTestStateTestSuite) TestRunAllProcessorsOnLedgerReturnsError() { } func (s *StressTestStateTestSuite) TestUpdateLastLedgerIngestReturnsError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() s.runner.On("RunAllProcessorsOnLedger", mock.AnythingOfType("xdr.LedgerCloseMeta")).Return( ingest.StatsChangeProcessorResults{}, processorsRunDurations{}, @@ -113,15 +117,15 @@ func (s *StressTestStateTestSuite) TestUpdateLastLedgerIngestReturnsError() { processorsRunDurations{}, nil, ).Once() - s.historyQ.On("UpdateLastLedgerIngest", uint32(1)).Return(errors.New("my error")).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, uint32(1)).Return(errors.New("my error")).Once() err := s.system.StressTest(10, 4) s.Assert().EqualError(err, "Error updating last ingested ledger: my error") } func (s *StressTestStateTestSuite) TestCommitReturnsError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() s.runner.On("RunAllProcessorsOnLedger", mock.AnythingOfType("xdr.LedgerCloseMeta")).Return( ingest.StatsChangeProcessorResults{}, processorsRunDurations{}, @@ -129,16 +133,16 @@ func (s *StressTestStateTestSuite) TestCommitReturnsError() { processorsRunDurations{}, nil, ).Once() - s.historyQ.On("UpdateLastLedgerIngest", uint32(1)).Return(nil).Once() - s.historyQ.On("Commit").Return(errors.New("my error")).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, uint32(1)).Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(errors.New("my error")).Once() err := s.system.StressTest(10, 4) s.Assert().EqualError(err, "Error committing db transaction: my error") } func (s *StressTestStateTestSuite) TestSucceeds() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() s.runner.On("RunAllProcessorsOnLedger", mock.AnythingOfType("xdr.LedgerCloseMeta")).Return( ingest.StatsChangeProcessorResults{}, processorsRunDurations{}, @@ -146,8 +150,8 @@ func (s *StressTestStateTestSuite) TestSucceeds() { processorsRunDurations{}, nil, ).Once() - s.historyQ.On("UpdateLastLedgerIngest", uint32(1)).Return(nil).Once() - s.historyQ.On("Commit").Return(nil).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, uint32(1)).Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(nil).Once() err := s.system.StressTest(10, 4) s.Assert().NoError(err) diff --git a/services/horizon/internal/ingest/verify.go b/services/horizon/internal/ingest/verify.go index 7d239aa0cd..f7c47dfaea 100644 --- a/services/horizon/internal/ingest/verify.go +++ b/services/horizon/internal/ingest/verify.go @@ -59,8 +59,8 @@ func (s *system) verifyState(verifyAgainstLatestCheckpoint bool) error { } historyQ := s.historyQ.CloneIngestionQ() - defer historyQ.Rollback() - err := historyQ.BeginTx(&sql.TxOptions{ + defer historyQ.Rollback(s.ctx) + err := historyQ.BeginTx(s.ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }) @@ -69,7 +69,7 @@ func (s *system) verifyState(verifyAgainstLatestCheckpoint bool) error { } // Ensure the ledger is a checkpoint ledger - ledgerSequence, err := historyQ.GetLastLedgerIngestNonBlocking() + ledgerSequence, err := historyQ.GetLastLedgerIngestNonBlocking(s.ctx) if err != nil { return errors.Wrap(err, "Error running historyQ.GetLastLedgerIngestNonBlocking") } @@ -183,27 +183,27 @@ func (s *system) verifyState(verifyAgainstLatestCheckpoint bool) error { } } - err = addAccountsToStateVerifier(verifier, historyQ, accounts) + err = addAccountsToStateVerifier(s.ctx, verifier, historyQ, accounts) if err != nil { return errors.Wrap(err, "addAccountsToStateVerifier failed") } - err = addDataToStateVerifier(verifier, historyQ, data) + err = addDataToStateVerifier(s.ctx, verifier, historyQ, data) if err != nil { return errors.Wrap(err, "addDataToStateVerifier failed") } - err = addOffersToStateVerifier(verifier, historyQ, offers) + err = addOffersToStateVerifier(s.ctx, verifier, historyQ, offers) if err != nil { return errors.Wrap(err, "addOffersToStateVerifier failed") } - err = addTrustLinesToStateVerifier(verifier, assetStats, historyQ, trustLines) + err = addTrustLinesToStateVerifier(s.ctx, verifier, assetStats, historyQ, trustLines) if err != nil { return errors.Wrap(err, "addTrustLinesToStateVerifier failed") } - err = addClaimableBalanceToStateVerifier(verifier, assetStats, historyQ, cBalances) + err = addClaimableBalanceToStateVerifier(s.ctx, verifier, assetStats, historyQ, cBalances) if err != nil { return errors.Wrap(err, "addClaimableBalanceToStateVerifier failed") } @@ -214,27 +214,27 @@ func (s *system) verifyState(verifyAgainstLatestCheckpoint bool) error { localLog.WithField("total", total).Info("Finished writing to StateVerifier") - countAccounts, err := historyQ.CountAccounts() + countAccounts, err := historyQ.CountAccounts(s.ctx) if err != nil { return errors.Wrap(err, "Error running historyQ.CountAccounts") } - countData, err := historyQ.CountAccountsData() + countData, err := historyQ.CountAccountsData(s.ctx) if err != nil { return errors.Wrap(err, "Error running historyQ.CountData") } - countOffers, err := historyQ.CountOffers() + countOffers, err := historyQ.CountOffers(s.ctx) if err != nil { return errors.Wrap(err, "Error running historyQ.CountOffers") } - countTrustLines, err := historyQ.CountTrustLines() + countTrustLines, err := historyQ.CountTrustLines(s.ctx) if err != nil { return errors.Wrap(err, "Error running historyQ.CountTrustLines") } - countClaimableBalances, err := historyQ.CountClaimableBalances() + countClaimableBalances, err := historyQ.CountClaimableBalances(s.ctx) if err != nil { return errors.Wrap(err, "Error running historyQ.CountClaimableBalances") } @@ -244,7 +244,7 @@ func (s *system) verifyState(verifyAgainstLatestCheckpoint bool) error { return errors.Wrap(err, "verifier.Verify failed") } - err = checkAssetStats(assetStats, historyQ) + err = checkAssetStats(s.ctx, assetStats, historyQ) if err != nil { return errors.Wrap(err, "checkAssetStats failed") } @@ -254,14 +254,14 @@ func (s *system) verifyState(verifyAgainstLatestCheckpoint bool) error { return nil } -func checkAssetStats(set processors.AssetStatSet, q history.IngestionQ) error { +func checkAssetStats(ctx context.Context, set processors.AssetStatSet, q history.IngestionQ) error { page := db2.PageQuery{ Order: "asc", Limit: assetStatsBatchSize, } for { - assetStats, err := q.GetAssetStats("", "", page) + assetStats, err := q.GetAssetStats(ctx, "", "", page) if err != nil { return errors.Wrap(err, "could not fetch asset stats from db") } @@ -304,17 +304,17 @@ func checkAssetStats(set processors.AssetStatSet, q history.IngestionQ) error { return nil } -func addAccountsToStateVerifier(verifier *verify.StateVerifier, q history.IngestionQ, ids []string) error { +func addAccountsToStateVerifier(ctx context.Context, verifier *verify.StateVerifier, q history.IngestionQ, ids []string) error { if len(ids) == 0 { return nil } - accounts, err := q.GetAccountsByIDs(ids) + accounts, err := q.GetAccountsByIDs(ctx, ids) if err != nil { return errors.Wrap(err, "Error running history.Q.GetAccountsByIDs") } - signers, err := q.SignersForAccounts(ids) + signers, err := q.SignersForAccounts(ctx, ids) if err != nil { return errors.Wrap(err, "Error running history.Q.SignersForAccounts") } @@ -420,12 +420,12 @@ func addAccountsToStateVerifier(verifier *verify.StateVerifier, q history.Ingest return nil } -func addDataToStateVerifier(verifier *verify.StateVerifier, q history.IngestionQ, keys []xdr.LedgerKeyData) error { +func addDataToStateVerifier(ctx context.Context, verifier *verify.StateVerifier, q history.IngestionQ, keys []xdr.LedgerKeyData) error { if len(keys) == 0 { return nil } - data, err := q.GetAccountDataByKeys(keys) + data, err := q.GetAccountDataByKeys(ctx, keys) if err != nil { return errors.Wrap(err, "Error running history.Q.GetAccountDataByKeys") } @@ -453,6 +453,7 @@ func addDataToStateVerifier(verifier *verify.StateVerifier, q history.IngestionQ } func addOffersToStateVerifier( + ctx context.Context, verifier *verify.StateVerifier, q history.IngestionQ, ids []int64, @@ -461,7 +462,7 @@ func addOffersToStateVerifier( return nil } - offers, err := q.GetOffersByIDs(ids) + offers, err := q.GetOffersByIDs(ctx, ids) if err != nil { return errors.Wrap(err, "Error running history.Q.GetOfferByIDs") } @@ -496,6 +497,7 @@ func addOffersToStateVerifier( } func addTrustLinesToStateVerifier( + ctx context.Context, verifier *verify.StateVerifier, assetStats processors.AssetStatSet, q history.IngestionQ, @@ -505,7 +507,7 @@ func addTrustLinesToStateVerifier( return nil } - trustLines, err := q.GetTrustLinesByKeys(keys) + trustLines, err := q.GetTrustLinesByKeys(ctx, keys) if err != nil { return errors.Wrap(err, "Error running history.Q.GetTrustLinesByKeys") } @@ -558,6 +560,7 @@ func addTrustLinesToStateVerifier( } func addClaimableBalanceToStateVerifier( + ctx context.Context, verifier *verify.StateVerifier, assetStats processors.AssetStatSet, q history.IngestionQ, @@ -567,7 +570,7 @@ func addClaimableBalanceToStateVerifier( return nil } - cBalances, err := q.GetClaimableBalancesByID(ids) + cBalances, err := q.GetClaimableBalancesByID(ctx, ids) if err != nil { return errors.Wrap(err, "Error running history.Q.GetClaimableBalancesByID") } diff --git a/services/horizon/internal/ingest/verify_range_state_test.go b/services/horizon/internal/ingest/verify_range_state_test.go index 55c90fae86..503becf979 100644 --- a/services/horizon/internal/ingest/verify_range_state_test.go +++ b/services/horizon/internal/ingest/verify_range_state_test.go @@ -30,6 +30,7 @@ func TestVerifyRangeStateTestSuite(t *testing.T) { type VerifyRangeStateTestSuite struct { suite.Suite + ctx context.Context ledgerBackend *ledgerbackend.MockDatabaseBackend historyQ *mockDBQ historyAdapter *mockHistoryArchiveAdapter @@ -38,12 +39,13 @@ type VerifyRangeStateTestSuite struct { } func (s *VerifyRangeStateTestSuite) SetupTest() { + s.ctx = context.Background() s.ledgerBackend = &ledgerbackend.MockDatabaseBackend{} s.historyQ = &mockDBQ{} s.historyAdapter = &mockHistoryArchiveAdapter{} s.runner = &mockProcessorsRunner{} s.system = &system{ - ctx: context.Background(), + ctx: s.ctx, historyQ: s.historyQ, historyAdapter: s.historyAdapter, ledgerBackend: s.ledgerBackend, @@ -52,7 +54,7 @@ func (s *VerifyRangeStateTestSuite) SetupTest() { } s.system.initMetrics() - s.historyQ.On("Rollback").Return(nil).Once() + s.historyQ.On("Rollback", s.ctx).Return(nil).Once() } func (s *VerifyRangeStateTestSuite) TearDownTest() { @@ -102,7 +104,7 @@ func (s *VerifyRangeStateTestSuite) TestInvalidRange() { func (s *VerifyRangeStateTestSuite) TestBeginReturnsError() { // Recreate mock in this single test to remove Rollback assertion. *s.historyQ = mockDBQ{} - s.historyQ.On("Begin").Return(errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(errors.New("my error")).Once() next, err := verifyRangeState{fromLedger: 100, toLedger: 200}.run(s.system) s.Assert().Error(err) @@ -114,8 +116,8 @@ func (s *VerifyRangeStateTestSuite) TestBeginReturnsError() { } func (s *VerifyRangeStateTestSuite) TestGetLastLedgerIngestReturnsError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), errors.New("my error")).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), errors.New("my error")).Once() next, err := verifyRangeState{fromLedger: 100, toLedger: 200}.run(s.system) s.Assert().Error(err) @@ -127,8 +129,8 @@ func (s *VerifyRangeStateTestSuite) TestGetLastLedgerIngestReturnsError() { } func (s *VerifyRangeStateTestSuite) TestGetLastLedgerIngestNonEmpty() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(100), nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(100), nil).Once() next, err := verifyRangeState{fromLedger: 100, toLedger: 200}.run(s.system) s.Assert().Error(err) @@ -140,9 +142,9 @@ func (s *VerifyRangeStateTestSuite) TestGetLastLedgerIngestNonEmpty() { } func (s *VerifyRangeStateTestSuite) TestRunHistoryArchiveIngestionReturnsError() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() - s.ledgerBackend.On("PrepareRange", ledgerbackend.BoundedRange(100, 200)).Return(nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() + s.ledgerBackend.On("PrepareRange", s.ctx, ledgerbackend.BoundedRange(100, 200)).Return(nil).Once() meta := xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{ @@ -155,7 +157,7 @@ func (s *VerifyRangeStateTestSuite) TestRunHistoryArchiveIngestionReturnsError() }, }, } - s.ledgerBackend.On("GetLedger", uint32(100)).Return(true, meta, nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(100)).Return(meta, nil).Once() s.runner.On("RunHistoryArchiveIngestion", uint32(100), MaxSupportedProtocolVersion, xdr.Hash{1, 2, 3}).Return(ingest.StatsChangeProcessorResults{}, errors.New("my error")).Once() next, err := verifyRangeState{fromLedger: 100, toLedger: 200}.run(s.system) @@ -168,9 +170,9 @@ func (s *VerifyRangeStateTestSuite) TestRunHistoryArchiveIngestionReturnsError() } func (s *VerifyRangeStateTestSuite) TestSuccess() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() - s.ledgerBackend.On("PrepareRange", ledgerbackend.BoundedRange(100, 200)).Return(nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() + s.ledgerBackend.On("PrepareRange", s.ctx, ledgerbackend.BoundedRange(100, 200)).Return(nil).Once() meta := xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{ @@ -183,14 +185,14 @@ func (s *VerifyRangeStateTestSuite) TestSuccess() { }, }, } - s.ledgerBackend.On("GetLedger", uint32(100)).Return(true, meta, nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(100)).Return(meta, nil).Once() s.runner.On("RunHistoryArchiveIngestion", uint32(100), MaxSupportedProtocolVersion, xdr.Hash{1, 2, 3}).Return(ingest.StatsChangeProcessorResults{}, nil).Once() - s.historyQ.On("UpdateLastLedgerIngest", uint32(100)).Return(nil).Once() - s.historyQ.On("Commit").Return(nil).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, uint32(100)).Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(nil).Once() for i := uint32(101); i <= 200; i++ { - s.historyQ.On("Begin").Return(nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() meta := xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{ @@ -201,7 +203,7 @@ func (s *VerifyRangeStateTestSuite) TestSuccess() { }, }, } - s.ledgerBackend.On("GetLedger", uint32(i)).Return(true, meta, nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(i)).Return(meta, nil).Once() s.runner.On("RunAllProcessorsOnLedger", meta).Return( ingest.StatsChangeProcessorResults{}, @@ -210,8 +212,8 @@ func (s *VerifyRangeStateTestSuite) TestSuccess() { processorsRunDurations{}, nil, ).Once() - s.historyQ.On("UpdateLastLedgerIngest", i).Return(nil).Once() - s.historyQ.On("Commit").Return(nil).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, i).Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(nil).Once() } next, err := verifyRangeState{fromLedger: 100, toLedger: 200}.run(s.system) @@ -223,9 +225,9 @@ func (s *VerifyRangeStateTestSuite) TestSuccess() { } func (s *VerifyRangeStateTestSuite) TestSuccessWithVerify() { - s.historyQ.On("Begin").Return(nil).Once() - s.historyQ.On("GetLastLedgerIngest").Return(uint32(0), nil).Once() - s.ledgerBackend.On("PrepareRange", ledgerbackend.BoundedRange(100, 110)).Return(nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() + s.historyQ.On("GetLastLedgerIngest", s.ctx).Return(uint32(0), nil).Once() + s.ledgerBackend.On("PrepareRange", s.ctx, ledgerbackend.BoundedRange(100, 110)).Return(nil).Once() meta := xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{ @@ -238,14 +240,14 @@ func (s *VerifyRangeStateTestSuite) TestSuccessWithVerify() { }, }, } - s.ledgerBackend.On("GetLedger", uint32(100)).Return(true, meta, nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(100)).Return(meta, nil).Once() s.runner.On("RunHistoryArchiveIngestion", uint32(100), MaxSupportedProtocolVersion, xdr.Hash{1, 2, 3}).Return(ingest.StatsChangeProcessorResults{}, nil).Once() - s.historyQ.On("UpdateLastLedgerIngest", uint32(100)).Return(nil).Once() - s.historyQ.On("Commit").Return(nil).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, uint32(100)).Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(nil).Once() for i := uint32(101); i <= 110; i++ { - s.historyQ.On("Begin").Return(nil).Once() + s.historyQ.On("Begin", s.ctx).Return(nil).Once() meta := xdr.LedgerCloseMeta{ V0: &xdr.LedgerCloseMetaV0{ @@ -256,7 +258,7 @@ func (s *VerifyRangeStateTestSuite) TestSuccessWithVerify() { }, }, } - s.ledgerBackend.On("GetLedger", uint32(i)).Return(true, meta, nil).Once() + s.ledgerBackend.On("GetLedger", s.ctx, uint32(i)).Return(meta, nil).Once() s.runner.On("RunAllProcessorsOnLedger", meta).Return( ingest.StatsChangeProcessorResults{}, @@ -265,20 +267,20 @@ func (s *VerifyRangeStateTestSuite) TestSuccessWithVerify() { processorsRunDurations{}, nil, ).Once() - s.historyQ.On("UpdateLastLedgerIngest", i).Return(nil).Once() - s.historyQ.On("Commit").Return(nil).Once() + s.historyQ.On("UpdateLastLedgerIngest", s.ctx, i).Return(nil).Once() + s.historyQ.On("Commit", s.ctx).Return(nil).Once() } clonedQ := &mockDBQ{} s.historyQ.On("CloneIngestionQ").Return(clonedQ).Once() - clonedQ.On("BeginTx", mock.Anything).Run(func(args mock.Arguments) { - arg := args.Get(0).(*sql.TxOptions) + clonedQ.On("BeginTx", s.ctx, mock.AnythingOfType("*sql.TxOptions")).Run(func(args mock.Arguments) { + arg := args.Get(1).(*sql.TxOptions) s.Assert().Equal(sql.LevelRepeatableRead, arg.Isolation) s.Assert().True(arg.ReadOnly) }).Return(nil).Once() - clonedQ.On("Rollback").Return(nil).Once() - clonedQ.On("GetLastLedgerIngestNonBlocking").Return(uint32(63), nil).Once() + clonedQ.On("Rollback", s.ctx).Return(nil).Once() + clonedQ.On("GetLastLedgerIngestNonBlocking", s.ctx).Return(uint32(63), nil).Once() mockChangeReader := &ingest.MockChangeReader{} mockChangeReader.On("Close").Return(nil).Once() mockAccountID := "GACMZD5VJXTRLKVET72CETCYKELPNCOTTBDC6DHFEUPLG5DHEK534JQX" @@ -422,7 +424,7 @@ func (s *VerifyRangeStateTestSuite) TestSuccessWithVerify() { mockChangeReader.On("Read").Return(claimableBalanceChange, nil).Once() mockChangeReader.On("Read").Return(ingest.Change{}, io.EOF).Once() mockChangeReader.On("Read").Return(ingest.Change{}, io.EOF).Once() - s.historyAdapter.On("GetState", mock.AnythingOfType("*context.emptyCtx"), uint32(63)).Return(mockChangeReader, nil).Once() + s.historyAdapter.On("GetState", s.ctx, uint32(63)).Return(mockChangeReader, nil).Once() mockAccount := history.AccountEntry{ AccountID: mockAccountID, Balance: 600, @@ -435,8 +437,8 @@ func (s *VerifyRangeStateTestSuite) TestSuccessWithVerify() { Sponsor: null.StringFrom("GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML"), } - clonedQ.MockQAccounts.On("GetAccountsByIDs", []string{mockAccountID}).Return([]history.AccountEntry{mockAccount}, nil).Once() - clonedQ.MockQSigners.On("SignersForAccounts", []string{mockAccountID}).Return([]history.AccountSigner{ + clonedQ.MockQAccounts.On("GetAccountsByIDs", s.ctx, []string{mockAccountID}).Return([]history.AccountEntry{mockAccount}, nil).Once() + clonedQ.MockQSigners.On("SignersForAccounts", s.ctx, []string{mockAccountID}).Return([]history.AccountSigner{ { Account: mockAccountID, Signer: mockAccountID, @@ -460,7 +462,7 @@ func (s *VerifyRangeStateTestSuite) TestSuccessWithVerify() { Sponsor: null.StringFrom(mockAccountID), }, }, nil).Once() - clonedQ.MockQSigners.On("CountAccounts").Return(1, nil).Once() + clonedQ.MockQSigners.On("CountAccounts", s.ctx).Return(1, nil).Once() mockOffer := history.Offer{ SellerID: eurOffer.SellerId.Address(), OfferID: int64(eurOffer.OfferId), @@ -474,19 +476,19 @@ func (s *VerifyRangeStateTestSuite) TestSuccessWithVerify() { LastModifiedLedger: 62, Sponsor: null.StringFrom("GC3C4AKRBQLHOJ45U4XG35ESVWRDECWO5XLDGYADO6DPR3L7KIDVUMML"), } - clonedQ.MockQOffers.On("GetOffersByIDs", []int64{int64(eurOffer.OfferId)}).Return([]history.Offer{mockOffer}, nil).Once() - clonedQ.MockQOffers.On("CountOffers").Return(1, nil).Once() + clonedQ.MockQOffers.On("GetOffersByIDs", s.ctx, []int64{int64(eurOffer.OfferId)}).Return([]history.Offer{mockOffer}, nil).Once() + clonedQ.MockQOffers.On("CountOffers", s.ctx).Return(1, nil).Once() // TODO: add accounts data, trustlines and asset stats - clonedQ.MockQData.On("CountAccountsData").Return(0, nil).Once() - clonedQ.MockQAssetStats.On("CountTrustLines").Return(0, nil).Once() - clonedQ.MockQAssetStats.On("GetAssetStats", "", "", db2.PageQuery{ + clonedQ.MockQData.On("CountAccountsData", s.ctx).Return(0, nil).Once() + clonedQ.MockQAssetStats.On("CountTrustLines", s.ctx).Return(0, nil).Once() + clonedQ.MockQAssetStats.On("GetAssetStats", s.ctx, "", "", db2.PageQuery{ Order: "asc", Limit: assetStatsBatchSize, }).Return([]history.ExpAssetStat{}, nil).Once() - clonedQ.MockQClaimableBalances.On("CountClaimableBalances").Return(1, nil).Once() + clonedQ.MockQClaimableBalances.On("CountClaimableBalances", s.ctx).Return(1, nil).Once() clonedQ.MockQClaimableBalances. - On("GetClaimableBalancesByID", []xdr.ClaimableBalanceId{claimableBalanceChange.Post.Data.ClaimableBalance.BalanceId}). + On("GetClaimableBalancesByID", s.ctx, []xdr.ClaimableBalanceId{claimableBalanceChange.Post.Data.ClaimableBalance.BalanceId}). Return([]history.ClaimableBalance{claimableBalance}, nil).Once() next, err := verifyRangeState{ @@ -535,19 +537,19 @@ func (s *VerifyRangeStateTestSuite) TestVerifyFailsWhenAssetStatsMismatch() { NumAccounts: 0, } - s.historyQ.MockQAssetStats.On("GetAssetStats", "", "", db2.PageQuery{ + s.historyQ.MockQAssetStats.On("GetAssetStats", s.ctx, "", "", db2.PageQuery{ Order: "asc", Limit: assetStatsBatchSize, }).Return([]history.ExpAssetStat{stat}, nil).Once() - s.historyQ.MockQAssetStats.On("GetAssetStats", "", "", db2.PageQuery{ + s.historyQ.MockQAssetStats.On("GetAssetStats", s.ctx, "", "", db2.PageQuery{ Cursor: stat.PagingToken(), Order: "asc", Limit: assetStatsBatchSize, }).Return([]history.ExpAssetStat{}, nil).Once() - err := checkAssetStats(set, s.historyQ) + err := checkAssetStats(s.ctx, set, s.historyQ) s.Assert().EqualError(err, fmt.Sprintf("db asset stat with code EUR issuer %s does not match asset stat from HAS", trustLineIssuer.Address())) // Satisfy the mock - s.historyQ.Rollback() + s.historyQ.Rollback(s.ctx) } diff --git a/services/horizon/internal/init.go b/services/horizon/internal/init.go index db6a87573b..b3b7fe1d44 100644 --- a/services/horizon/internal/init.go +++ b/services/horizon/internal/init.go @@ -18,7 +18,7 @@ import ( "github.com/stellar/go/support/log" ) -func mustNewDBSession(databaseURL string, maxIdle, maxOpen int) *db.Session { +func mustNewDBSession(subservice db.Subservice, databaseURL string, maxIdle, maxOpen int, registry *prometheus.Registry) db.SessionInterface { session, err := db.Open("postgres", databaseURL) if err != nil { log.Fatalf("cannot open Horizon DB: %v", err) @@ -26,7 +26,7 @@ func mustNewDBSession(databaseURL string, maxIdle, maxOpen int) *db.Session { session.DB.SetMaxIdleConns(maxIdle) session.DB.SetMaxOpenConns(maxOpen) - return session + return db.RegisterMetrics(session, "horizon", subservice, registry) } func mustInitHorizonDB(app *App) { @@ -43,41 +43,60 @@ func mustInitHorizonDB(app *App) { } } - app.historyQ = &history.Q{mustNewDBSession( - app.config.DatabaseURL, - maxIdle, - maxOpen, - )} + if app.config.RoDatabaseURL == "" { + app.historyQ = &history.Q{mustNewDBSession( + db.HistorySubservice, + app.config.DatabaseURL, + maxIdle, + maxOpen, + app.prometheusRegistry, + )} + } else { + // If RO set, use it for all DB queries + app.historyQ = &history.Q{mustNewDBSession( + db.HistorySubservice, + app.config.RoDatabaseURL, + maxIdle, + maxOpen, + app.prometheusRegistry, + )} + + app.primaryHistoryQ = &history.Q{mustNewDBSession( + db.HistorySubservice, + app.config.DatabaseURL, + maxIdle, + maxOpen, + app.prometheusRegistry, + )} + } } func initIngester(app *App) { var err error - var coreSession *db.Session + var coreSession db.SessionInterface if !app.config.EnableCaptiveCoreIngestion { - coreSession = mustNewDBSession(app.config.StellarCoreDatabaseURL, ingest.MaxDBConnections, ingest.MaxDBConnections) + coreSession = mustNewDBSession( + db.CoreSubservice, app.config.StellarCoreDatabaseURL, ingest.MaxDBConnections, ingest.MaxDBConnections, app.prometheusRegistry) } app.ingester, err = ingest.NewSystem(ingest.Config{ CoreSession: coreSession, HistorySession: mustNewDBSession( - app.config.DatabaseURL, ingest.MaxDBConnections, ingest.MaxDBConnections, + db.IngestSubservice, app.config.DatabaseURL, ingest.MaxDBConnections, ingest.MaxDBConnections, app.prometheusRegistry, ), NetworkPassphrase: app.config.NetworkPassphrase, // TODO: // Use the first archive for now. We don't have a mechanism to // use multiple archives at the same time currently. - HistoryArchiveURL: app.config.HistoryArchiveURLs[0], - CheckpointFrequency: app.config.CheckpointFrequency, - StellarCoreURL: app.config.StellarCoreURL, - StellarCoreCursor: app.config.CursorName, - CaptiveCoreBinaryPath: app.config.CaptiveCoreBinaryPath, - CaptiveCoreStoragePath: app.config.CaptiveCoreStoragePath, - CaptiveCoreConfigAppendPath: app.config.CaptiveCoreConfigAppendPath, - CaptiveCoreHTTPPort: app.config.CaptiveCoreHTTPPort, - CaptiveCorePeerPort: app.config.CaptiveCorePeerPort, - CaptiveCoreLogPath: app.config.CaptiveCoreLogPath, - RemoteCaptiveCoreURL: app.config.RemoteCaptiveCoreURL, - EnableCaptiveCore: app.config.EnableCaptiveCoreIngestion, - DisableStateVerification: app.config.IngestDisableStateVerification, + HistoryArchiveURL: app.config.HistoryArchiveURLs[0], + CheckpointFrequency: app.config.CheckpointFrequency, + StellarCoreURL: app.config.StellarCoreURL, + StellarCoreCursor: app.config.CursorName, + CaptiveCoreBinaryPath: app.config.CaptiveCoreBinaryPath, + CaptiveCoreStoragePath: app.config.CaptiveCoreStoragePath, + CaptiveCoreToml: app.config.CaptiveCoreToml, + RemoteCaptiveCoreURL: app.config.RemoteCaptiveCoreURL, + EnableCaptiveCore: app.config.EnableCaptiveCoreIngestion, + DisableStateVerification: app.config.IngestDisableStateVerification, }) if err != nil { @@ -88,7 +107,7 @@ func initIngester(app *App) { func initPathFinder(app *App) { orderBookGraph := orderbook.NewOrderBookGraph() app.orderBookStream = ingest.NewOrderBookStream( - &history.Q{app.HorizonSession(app.ctx)}, + &history.Q{app.HorizonSession()}, orderBookGraph, ) @@ -198,55 +217,6 @@ func initDbMetrics(app *App) { ) app.prometheusRegistry.MustRegister(app.coreSynced) - app.dbMaxOpenConnectionsGauge = prometheus.NewGaugeFunc( - prometheus.GaugeOpts{Namespace: "horizon", Subsystem: "db", Name: "max_open_connections"}, - func() float64 { - // Right now MaxOpenConnections in Horizon is static however it's possible that - // it will change one day. In such case, using GaugeFunc is very cheap and will - // prevent issues with this metric in the future. - return float64(app.historyQ.Session.DB.Stats().MaxOpenConnections) - }, - ) - app.prometheusRegistry.MustRegister(app.dbMaxOpenConnectionsGauge) - - app.dbOpenConnectionsGauge = prometheus.NewGaugeFunc( - prometheus.GaugeOpts{Namespace: "horizon", Subsystem: "db", Name: "open_connections"}, - func() float64 { - return float64(app.historyQ.Session.DB.Stats().OpenConnections) - }, - ) - app.prometheusRegistry.MustRegister(app.dbOpenConnectionsGauge) - - app.dbInUseConnectionsGauge = prometheus.NewGaugeFunc( - prometheus.GaugeOpts{Namespace: "horizon", Subsystem: "db", Name: "in_use_connections"}, - func() float64 { - return float64(app.historyQ.Session.DB.Stats().InUse) - }, - ) - app.prometheusRegistry.MustRegister(app.dbInUseConnectionsGauge) - - app.dbWaitCountCounter = prometheus.NewCounterFunc( - prometheus.CounterOpts{ - Namespace: "horizon", Subsystem: "db", Name: "wait_count_total", - Help: "total number of number of connections waited for", - }, - func() float64 { - return float64(app.historyQ.Session.DB.Stats().WaitCount) - }, - ) - app.prometheusRegistry.MustRegister(app.dbWaitCountCounter) - - app.dbWaitDurationCounter = prometheus.NewCounterFunc( - prometheus.CounterOpts{ - Namespace: "horizon", Subsystem: "db", Name: "wait_duration_seconds_total", - Help: "total time blocked waiting for a new connection", - }, - func() float64 { - return app.historyQ.Session.DB.Stats().WaitDuration.Seconds() - }, - ) - app.prometheusRegistry.MustRegister(app.dbWaitDurationCounter) - app.prometheusRegistry.MustRegister(app.orderBookStream.LatestLedgerGauge) } @@ -296,6 +266,7 @@ func initTxSubMetrics(app *App) { func initWebMetrics(app *App) { app.prometheusRegistry.MustRegister(app.webServer.Metrics.RequestDurationSummary) + app.prometheusRegistry.MustRegister(app.webServer.Metrics.ReplicaLagErrorsCounter) } func initSubmissionSystem(app *App) { @@ -304,7 +275,7 @@ func initSubmissionSystem(app *App) { Submitter: txsub.NewDefaultSubmitter(http.DefaultClient, app.config.StellarCoreURL), SubmissionQueue: sequence.NewManager(), DB: func(ctx context.Context) txsub.HorizonDB { - return &history.Q{Session: app.HorizonSession(ctx)} + return &history.Q{SessionInterface: app.HorizonSession()} }, } } diff --git a/services/horizon/internal/integration/db_test.go b/services/horizon/internal/integration/db_test.go index f7163e0413..b208bd40ea 100644 --- a/services/horizon/internal/integration/db_test.go +++ b/services/horizon/internal/integration/db_test.go @@ -1,7 +1,9 @@ package integration import ( + "fmt" "path/filepath" + "strconv" "testing" "time" @@ -81,13 +83,38 @@ func TestReingestDB(t *testing.T) { toLedger = latestCheckpoint } - horizonConfig.CaptiveCoreConfigAppendPath = filepath.Join( - filepath.Dir(horizonConfig.CaptiveCoreConfigAppendPath), + horizonConfig.CaptiveCoreConfigPath = filepath.Join( + filepath.Dir(horizonConfig.CaptiveCoreConfigPath), "captive-core-reingest-range-integration-tests.cfg", ) + horizoncmd.RootCmd.SetArgs([]string{ + "--stellar-core-url", + horizonConfig.StellarCoreURL, + "--history-archive-urls", + horizonConfig.HistoryArchiveURLs[0], + "--db-url", + horizonConfig.DatabaseURL, + "--stellar-core-db-url", + horizonConfig.StellarCoreDatabaseURL, + "--stellar-core-binary-path", + horizonConfig.CaptiveCoreBinaryPath, + "--captive-core-config-path", + horizonConfig.CaptiveCoreConfigPath, + "--enable-captive-core-ingestion=" + strconv.FormatBool(horizonConfig.EnableCaptiveCoreIngestion), + "--network-passphrase", + horizonConfig.NetworkPassphrase, + // due to ARTIFICIALLY_ACCELERATE_TIME_FOR_TESTING + "--checkpoint-frequency", + "8", + "db", + "reingest", + "range", + "1", + fmt.Sprintf("%d", toLedger), + }) + err = horizoncmd.RootCmd.Execute() // Reingest into the DB - err = horizoncmd.RunDBReingestRange(1, toLedger, false, 1, horizonConfig) tt.NoError(err) } diff --git a/services/horizon/internal/integration/muxed_account_details_test.go b/services/horizon/internal/integration/muxed_account_details_test.go new file mode 100644 index 0000000000..98bc0c3503 --- /dev/null +++ b/services/horizon/internal/integration/muxed_account_details_test.go @@ -0,0 +1,90 @@ +package integration + +import ( + "testing" + + "github.com/stellar/go/clients/horizonclient" + hProtocol "github.com/stellar/go/protocols/horizon" + "github.com/stellar/go/protocols/horizon/effects" + "github.com/stellar/go/protocols/horizon/operations" + "github.com/stellar/go/services/horizon/internal/test/integration" + "github.com/stellar/go/txnbuild" + "github.com/stellar/go/xdr" + "github.com/stretchr/testify/assert" +) + +func TestMuxedAccountDetails(t *testing.T) { + tt := assert.New(t) + itest := integration.NewTest(t, integration.Config{ProtocolVersion: 17}) + master := itest.Master() + masterStr := master.Address() + masterAcID := xdr.MustAddress(masterStr) + + accs, _ := itest.CreateAccounts(1, "100") + destionationStr := accs[0].Address() + destinationAcID := xdr.MustAddress(destionationStr) + + source := xdr.MuxedAccount{ + Type: xdr.CryptoKeyTypeKeyTypeMuxedEd25519, + Med25519: &xdr.MuxedAccountMed25519{ + Id: 0xcafebabe, + Ed25519: *masterAcID.Ed25519, + }, + } + + destination := xdr.MuxedAccount{ + Type: xdr.CryptoKeyTypeKeyTypeMuxedEd25519, + Med25519: &xdr.MuxedAccountMed25519{ + Id: 0xdeadbeef, + Ed25519: *destinationAcID.Ed25519, + }, + } + + // Submit a simple payment tx + op := txnbuild.Payment{ + SourceAccount: source.Address(), + Destination: destination.Address(), + Amount: "10", + Asset: txnbuild.NativeAsset{}, + } + + txSource := itest.MasterAccount().(*hProtocol.Account) + txSource.AccountID = source.Address() + txResp := itest.MustSubmitOperations(txSource, master, &op) + + // check the transaction details + txDetails, err := itest.Client().TransactionDetail(txResp.Hash) + tt.NoError(err) + tt.Equal(source.Address(), txDetails.AccountMuxed) + tt.Equal(uint64(source.Med25519.Id), txDetails.AccountMuxedID) + tt.Equal(source.Address(), txDetails.FeeAccountMuxed) + tt.Equal(uint64(source.Med25519.Id), txDetails.FeeAccountMuxedID) + + // check the operation details + opsResp, err := itest.Client().Operations(horizonclient.OperationRequest{ + ForTransaction: txResp.Hash, + }) + tt.NoError(err) + opDetails := opsResp.Embedded.Records[0].(operations.Payment) + tt.Equal(source.Address(), opDetails.SourceAccountMuxed) + tt.Equal(uint64(source.Med25519.Id), opDetails.SourceAccountMuxedID) + tt.Equal(source.Address(), opDetails.FromMuxed) + tt.Equal(uint64(source.Med25519.Id), opDetails.FromMuxedID) + tt.Equal(destination.Address(), opDetails.ToMuxed) + tt.Equal(uint64(destination.Med25519.Id), opDetails.ToMuxedID) + + // check the effect details + effectsResp, err := itest.Client().Effects(horizonclient.EffectRequest{ + ForTransaction: txResp.Hash, + }) + tt.NoError(err) + records := effectsResp.Embedded.Records + + credited := records[0].(effects.AccountCredited) + tt.Equal(destination.Address(), credited.AccountMuxed) + tt.Equal(uint64(destination.Med25519.Id), credited.AccountMuxedID) + + debited := records[1].(effects.AccountDebited) + tt.Equal(source.Address(), debited.AccountMuxed) + tt.Equal(uint64(source.Med25519.Id), debited.AccountMuxedID) +} diff --git a/services/horizon/internal/integration/protocol16_test.go b/services/horizon/internal/integration/protocol16_test.go index 080ea65fed..7ca62a24b0 100644 --- a/services/horizon/internal/integration/protocol16_test.go +++ b/services/horizon/internal/integration/protocol16_test.go @@ -1,7 +1,6 @@ package integration import ( - "os" "testing" "github.com/stretchr/testify/assert" @@ -18,14 +17,7 @@ import ( ) func NewProtocol16Test(t *testing.T) *integration.Test { - // TODO, this should be removed once a core version with CAP 35 is released - if os.Getenv("HORIZON_INTEGRATION_ENABLE_CAP_35") != "true" { - t.Skip("skipping CAP35 test, set HORIZON_INTEGRATION_ENABLE_CAP_35=true if you want to run it") - } - config := integration.Config{ - ProtocolVersion: 16, - CoreDockerImage: "2opremio/stellar-core:cap35", - } + config := integration.Config{ProtocolVersion: 17} return integration.NewTest(t, config) } @@ -37,8 +29,8 @@ func TestProtocol16Basics(t *testing.T) { t.Run("Sanity", func(t *testing.T) { root, err := itest.Client().Root() tt.NoError(err) - tt.LessOrEqual(int32(16), root.CoreSupportedProtocolVersion) - tt.Equal(int32(16), root.CurrentProtocolVersion) + tt.LessOrEqual(int32(17), root.CoreSupportedProtocolVersion) + tt.Equal(int32(17), root.CurrentProtocolVersion) // Submit a simple tx op := txnbuild.Payment{ @@ -381,7 +373,7 @@ func TestHappyClawbackClaimableBalance(t *testing.T) { tt.NoError(err) if tt.Len(opDetailsResponse.Embedded.Records, 1) { clawbackOp := opDetailsResponse.Embedded.Records[0].(operations.ClawbackClaimableBalance) - tt.Equal(cbID, *clawbackOp.ClaimableBalanceID) + tt.Equal(cbID, clawbackOp.BalanceID) } // Check the operation effects diff --git a/services/horizon/internal/middleware_test.go b/services/horizon/internal/middleware_test.go index ecae31a138..92472c2ca9 100644 --- a/services/horizon/internal/middleware_test.go +++ b/services/horizon/internal/middleware_test.go @@ -3,11 +3,13 @@ package horizon import ( + "context" "net/http" "net/http/httptest" "strconv" "testing" + "github.com/go-chi/chi" "github.com/stellar/throttled" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" @@ -147,12 +149,12 @@ func TestStateMiddleware(t *testing.T) { q := &history.Q{tt.HorizonSession()} - request, err := http.NewRequest("GET", "http://localhost", nil) + request, err := http.NewRequest("GET", "http://localhost/", nil) tt.Assert.NoError(err) expectTransaction := true endpoint := func(w http.ResponseWriter, r *http.Request) { - session := r.Context().Value(&horizonContext.SessionContextKey).(*db.Session) + session := r.Context().Value(&horizonContext.SessionContextKey).(db.SessionInterface) if (session.GetTx() == nil) == expectTransaction { t.Fatalf("expected transaction to be in session: %v", expectTransaction) } @@ -162,7 +164,8 @@ func TestStateMiddleware(t *testing.T) { stateMiddleware := &httpx.StateMiddleware{ HorizonSession: tt.HorizonSession(), } - handler := stateMiddleware.Wrap(http.HandlerFunc(endpoint)) + handler := chi.NewRouter() + handler.With(stateMiddleware.Wrap).MethodFunc("GET", "/", endpoint) for i, testCase := range []struct { name string @@ -270,8 +273,8 @@ func TestStateMiddleware(t *testing.T) { } { t.Run(testCase.name, func(t *testing.T) { stateMiddleware.NoStateVerification = testCase.noStateVerification - tt.Assert.NoError(q.UpdateExpStateInvalid(testCase.stateInvalid)) - _, err = q.InsertLedger(xdr.LedgerHeaderHistoryEntry{ + tt.Assert.NoError(q.UpdateExpStateInvalid(context.Background(), testCase.stateInvalid)) + _, err = q.InsertLedger(context.Background(), xdr.LedgerHeaderHistoryEntry{ Hash: xdr.Hash{byte(i)}, Header: xdr.LedgerHeader{ LedgerSeq: testCase.latestHistoryLedger, @@ -279,8 +282,8 @@ func TestStateMiddleware(t *testing.T) { }, }, 0, 0, 0, 0, 0) tt.Assert.NoError(err) - tt.Assert.NoError(q.UpdateLastLedgerIngest(testCase.lastIngestedLedger)) - tt.Assert.NoError(q.UpdateIngestVersion(testCase.ingestionVersion)) + tt.Assert.NoError(q.UpdateLastLedgerIngest(context.Background(), testCase.lastIngestedLedger)) + tt.Assert.NoError(q.UpdateIngestVersion(context.Background(), testCase.ingestionVersion)) if testCase.sseRequest { request.Header.Set("Accept", "text/event-stream") @@ -306,7 +309,7 @@ func TestStateMiddleware(t *testing.T) { func TestCheckHistoryStaleMiddleware(t *testing.T) { tt := test.Start(t) defer tt.Finish() - request, err := http.NewRequest("GET", "http://localhost", nil) + request, err := http.NewRequest("GET", "http://localhost/", nil) tt.Assert.NoError(err) endpoint := func(w http.ResponseWriter, r *http.Request) { @@ -350,7 +353,8 @@ func TestCheckHistoryStaleMiddleware(t *testing.T) { ledgerState := &ledger.State{} ledgerState.SetStatus(state) historyMiddleware := httpx.NewHistoryMiddleware(ledgerState, testCase.staleThreshold, tt.HorizonSession()) - handler := historyMiddleware(http.HandlerFunc(endpoint)) + handler := chi.NewRouter() + handler.With(historyMiddleware).MethodFunc("GET", "/", endpoint) w := httptest.NewRecorder() handler.ServeHTTP(w, request) tt.Assert.Equal(testCase.expectedStatus, w.Code) diff --git a/services/horizon/internal/reap/main.go b/services/horizon/internal/reap/main.go index 917782be55..65b29f53cd 100644 --- a/services/horizon/internal/reap/main.go +++ b/services/horizon/internal/reap/main.go @@ -23,7 +23,7 @@ type System struct { // New initializes the reaper, causing it to begin polling the stellar-core // database for now ledgers and ingesting data into the horizon database. -func New(retention uint, dbSession *db.Session, ledgerState *ledger.State) *System { +func New(retention uint, dbSession db.SessionInterface, ledgerState *ledger.State) *System { r := &System{ HistoryQ: &history.Q{dbSession}, RetentionCount: retention, diff --git a/services/horizon/internal/reap/system.go b/services/horizon/internal/reap/system.go index 25127bdea3..66c695ddf2 100644 --- a/services/horizon/internal/reap/system.go +++ b/services/horizon/internal/reap/system.go @@ -1,6 +1,7 @@ package reap import ( + "context" "time" "github.com/stellar/go/services/horizon/internal/errors" @@ -9,7 +10,7 @@ import ( ) // DeleteUnretainedHistory removes all data associated with unretained ledgers. -func (r *System) DeleteUnretainedHistory() error { +func (r *System) DeleteUnretainedHistory(ctx context.Context) error { // RetentionCount of 0 indicates "keep all history" if r.RetentionCount == 0 { return nil @@ -24,7 +25,7 @@ func (r *System) DeleteUnretainedHistory() error { return nil } - err := r.clearBefore(targetElder) + err := r.clearBefore(ctx, targetElder) if err != nil { return err } @@ -38,16 +39,16 @@ func (r *System) DeleteUnretainedHistory() error { // Tick triggers the reaper system to update itself, deleted unretained history // if it is the appropriate time. -func (r *System) Tick() { +func (r *System) Tick(ctx context.Context) { if time.Now().Before(r.nextRun) { return } - r.runOnce() + r.runOnce(ctx) r.nextRun = time.Now().Add(1 * time.Hour) } -func (r *System) runOnce() { +func (r *System) runOnce(ctx context.Context) { defer func() { if rec := recover(); rec != nil { err := errors.FromPanic(rec) @@ -56,13 +57,13 @@ func (r *System) runOnce() { } }() - err := r.DeleteUnretainedHistory() + err := r.DeleteUnretainedHistory(ctx) if err != nil { log.Errorf("reaper failed: %s", err) } } -func (r *System) clearBefore(seq int32) error { +func (r *System) clearBefore(ctx context.Context, seq int32) error { log.WithField("new_elder", seq).Info("reaper: clearing") start, end, err := toid.LedgerRangeInclusive(1, seq-1) @@ -70,7 +71,7 @@ func (r *System) clearBefore(seq int32) error { return err } - err = r.HistoryQ.DeleteRangeAll(start, end) + err = r.HistoryQ.DeleteRangeAll(ctx, start, end) if err != nil { return err } diff --git a/services/horizon/internal/reap/system_test.go b/services/horizon/internal/reap/system_test.go index c5a081d719..695a5ea3dc 100644 --- a/services/horizon/internal/reap/system_test.go +++ b/services/horizon/internal/reap/system_test.go @@ -21,30 +21,30 @@ func TestDeleteUnretainedHistory(t *testing.T) { prev int cur int ) - err := db.GetRaw(&prev, `SELECT COUNT(*) FROM history_ledgers`) + err := db.GetRaw(tt.Ctx, &prev, `SELECT COUNT(*) FROM history_ledgers`) tt.Require.NoError(err) - err = sys.DeleteUnretainedHistory() + err = sys.DeleteUnretainedHistory(tt.Ctx) if tt.Assert.NoError(err) { - err = db.GetRaw(&cur, `SELECT COUNT(*) FROM history_ledgers`) + err = db.GetRaw(tt.Ctx, &cur, `SELECT COUNT(*) FROM history_ledgers`) tt.Require.NoError(err) tt.Assert.Equal(prev, cur, "Ledgers deleted when RetentionCount == 0") } ledgerState.SetStatus(tt.LoadLedgerStatus()) sys.RetentionCount = 10 - err = sys.DeleteUnretainedHistory() + err = sys.DeleteUnretainedHistory(tt.Ctx) if tt.Assert.NoError(err) { - err = db.GetRaw(&cur, `SELECT COUNT(*) FROM history_ledgers`) + err = db.GetRaw(tt.Ctx, &cur, `SELECT COUNT(*) FROM history_ledgers`) tt.Require.NoError(err) tt.Assert.Equal(10, cur) } ledgerState.SetStatus(tt.LoadLedgerStatus()) sys.RetentionCount = 1 - err = sys.DeleteUnretainedHistory() + err = sys.DeleteUnretainedHistory(tt.Ctx) if tt.Assert.NoError(err) { - err = db.GetRaw(&cur, `SELECT COUNT(*) FROM history_ledgers`) + err = db.GetRaw(tt.Ctx, &cur, `SELECT COUNT(*) FROM history_ledgers`) tt.Require.NoError(err) tt.Assert.Equal(1, cur) } diff --git a/services/horizon/internal/render/problem/problem.go b/services/horizon/internal/render/problem/problem.go index a6278c956f..f1b23b676e 100644 --- a/services/horizon/internal/render/problem/problem.go +++ b/services/horizon/internal/render/problem/problem.go @@ -100,8 +100,8 @@ var ( Status: http.StatusServiceUnavailable, Detail: "This horizon instance is configured to reject client requests " + "when it can determine that the history database is lagging too far " + - "behind the connected instance of stellar-core. If you operate this " + - "server, please ensure that the ingestion system is properly running.", + "behind the connected instance of stellar-core or read replica. Please " + + "try again later.", } // StillIngesting is a well-known problem type. Use it as a shortcut diff --git a/services/horizon/internal/resourceadapter/effects.go b/services/horizon/internal/resourceadapter/effects.go index 9a8121ff07..e73800fb46 100644 --- a/services/horizon/internal/resourceadapter/effects.go +++ b/services/horizon/internal/resourceadapter/effects.go @@ -8,6 +8,7 @@ import ( horizonContext "github.com/stellar/go/services/horizon/internal/context" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/support/render/hal" + "github.com/stellar/go/xdr" ) var EffectTypeNames = map[history.EffectType]string{ @@ -29,33 +30,34 @@ var EffectTypeNames = map[history.EffectType]string{ history.EffectTrustlineAuthorizedToMaintainLiabilities: "trustline_authorized_to_maintain_liabilities", history.EffectTrustlineDeauthorized: "trustline_deauthorized", history.EffectTrustlineFlagsUpdated: "trustline_flags_updated", - history.EffectOfferCreated: "offer_created", - history.EffectOfferRemoved: "offer_removed", - history.EffectOfferUpdated: "offer_updated", - history.EffectTrade: "trade", - history.EffectDataCreated: "data_created", - history.EffectDataRemoved: "data_removed", - history.EffectDataUpdated: "data_updated", - history.EffectSequenceBumped: "sequence_bumped", - history.EffectClaimableBalanceCreated: "claimable_balance_created", - history.EffectClaimableBalanceClaimantCreated: "claimable_balance_claimant_created", - history.EffectClaimableBalanceClaimed: "claimable_balance_claimed", - history.EffectAccountSponsorshipCreated: "account_sponsorship_created", - history.EffectAccountSponsorshipUpdated: "account_sponsorship_updated", - history.EffectAccountSponsorshipRemoved: "account_sponsorship_removed", - history.EffectTrustlineSponsorshipCreated: "trustline_sponsorship_created", - history.EffectTrustlineSponsorshipUpdated: "trustline_sponsorship_updated", - history.EffectTrustlineSponsorshipRemoved: "trustline_sponsorship_removed", - history.EffectDataSponsorshipCreated: "data_sponsorship_created", - history.EffectDataSponsorshipUpdated: "data_sponsorship_updated", - history.EffectDataSponsorshipRemoved: "data_sponsorship_removed", - history.EffectClaimableBalanceSponsorshipCreated: "claimable_balance_sponsorship_created", - history.EffectClaimableBalanceSponsorshipUpdated: "claimable_balance_sponsorship_updated", - history.EffectClaimableBalanceSponsorshipRemoved: "claimable_balance_sponsorship_removed", - history.EffectSignerSponsorshipCreated: "signer_sponsorship_created", - history.EffectSignerSponsorshipUpdated: "signer_sponsorship_updated", - history.EffectSignerSponsorshipRemoved: "signer_sponsorship_removed", - history.EffectClaimableBalanceClawedBack: "claimable_balance_clawed_back", + // unused + // history.EffectOfferCreated: "offer_created", + // history.EffectOfferRemoved: "offer_removed", + // history.EffectOfferUpdated: "offer_updated", + history.EffectTrade: "trade", + history.EffectDataCreated: "data_created", + history.EffectDataRemoved: "data_removed", + history.EffectDataUpdated: "data_updated", + history.EffectSequenceBumped: "sequence_bumped", + history.EffectClaimableBalanceCreated: "claimable_balance_created", + history.EffectClaimableBalanceClaimantCreated: "claimable_balance_claimant_created", + history.EffectClaimableBalanceClaimed: "claimable_balance_claimed", + history.EffectAccountSponsorshipCreated: "account_sponsorship_created", + history.EffectAccountSponsorshipUpdated: "account_sponsorship_updated", + history.EffectAccountSponsorshipRemoved: "account_sponsorship_removed", + history.EffectTrustlineSponsorshipCreated: "trustline_sponsorship_created", + history.EffectTrustlineSponsorshipUpdated: "trustline_sponsorship_updated", + history.EffectTrustlineSponsorshipRemoved: "trustline_sponsorship_removed", + history.EffectDataSponsorshipCreated: "data_sponsorship_created", + history.EffectDataSponsorshipUpdated: "data_sponsorship_updated", + history.EffectDataSponsorshipRemoved: "data_sponsorship_removed", + history.EffectClaimableBalanceSponsorshipCreated: "claimable_balance_sponsorship_created", + history.EffectClaimableBalanceSponsorshipUpdated: "claimable_balance_sponsorship_updated", + history.EffectClaimableBalanceSponsorshipRemoved: "claimable_balance_sponsorship_removed", + history.EffectSignerSponsorshipCreated: "signer_sponsorship_created", + history.EffectSignerSponsorshipUpdated: "signer_sponsorship_updated", + history.EffectSignerSponsorshipRemoved: "signer_sponsorship_removed", + history.EffectClaimableBalanceClawedBack: "claimable_balance_clawed_back", } // NewEffect creates a new effect resource from the provided database representation @@ -140,6 +142,8 @@ func NewEffect( err = row.UnmarshalDetails(&tradeDetails) if err == nil { e.Seller = tradeDetails.Seller + e.SellerMuxed = tradeDetails.SellerMuxed + e.SellerMuxedID = tradeDetails.SellerMuxedID e.OfferID = tradeDetails.OfferID e.SoldAmount = tradeDetails.SoldAmount e.SoldAssetType = tradeDetails.SoldAssetType @@ -247,6 +251,9 @@ func NewEffect( e := effects.ClaimableBalanceClawedBack{Base: basev} err = row.UnmarshalDetails(&e) result = e + case history.EffectAccountRemoved: + // there is no explicit data structure for account removed + fallthrough default: result = basev } @@ -269,6 +276,11 @@ func PopulateBaseEffect(ctx context.Context, this *effects.Base, row history.Eff this.ID = row.ID() this.PT = row.PagingToken() this.Account = row.Account + if row.AccountMuxed.Valid { + this.AccountMuxed = row.AccountMuxed.String + muxedAccount := xdr.MustMuxedAddress(row.AccountMuxed.String) + this.AccountMuxedID = uint64(muxedAccount.Med25519.Id) + } populateEffectType(this, row) this.LedgerCloseTime = ledger.ClosedAt diff --git a/services/horizon/internal/resourceadapter/effects_test.go b/services/horizon/internal/resourceadapter/effects_test.go index 794dba41be..f0ef2f4912 100644 --- a/services/horizon/internal/resourceadapter/effects_test.go +++ b/services/horizon/internal/resourceadapter/effects_test.go @@ -1,6 +1,7 @@ package resourceadapter import ( + "context" "encoding/json" "testing" @@ -12,6 +13,45 @@ import ( "github.com/stretchr/testify/assert" ) +func TestNewEffectAllEffectsCovered(t *testing.T) { + for typ, s := range EffectTypeNames { + if typ == history.EffectAccountRemoved || typ == history.EffectAccountInflationDestinationUpdated { + // these effects use the base representation + continue + } + e := history.Effect{ + Type: typ, + } + result, err := NewEffect(context.TODO(), e, history.Ledger{}) + assert.NoError(t, err, s) + // it shouldn't be a base type + _, ok := result.(effects.Base) + assert.False(t, ok, s) + } + + // verify that the check works for an unknown effect + e := history.Effect{ + Type: 20000, + } + result, err := NewEffect(context.TODO(), e, history.Ledger{}) + assert.NoError(t, err) + _, ok := result.(effects.Base) + assert.True(t, ok) +} + +func TestEffectTypeNamesAreConsistentWithAdapterTypeNames(t *testing.T) { + for typ, s := range EffectTypeNames { + s2, ok := effects.EffectTypeNames[effects.EffectType(typ)] + assert.True(t, ok, s) + assert.Equal(t, s, s2) + } + for typ, s := range effects.EffectTypeNames { + s2, ok := EffectTypeNames[history.EffectType(typ)] + assert.True(t, ok, s) + assert.Equal(t, s, s2) + } +} + func TestNewEffect_EffectTrustlineAuthorizedToMaintainLiabilities(t *testing.T) { tt := assert.New(t) ctx, _ := test.ContextWithLogBuffer() @@ -48,3 +88,46 @@ func TestNewEffect_EffectTrustlineAuthorizedToMaintainLiabilities(t *testing.T) tt.Len(page.Embedded.Records, 1) tt.Equal(effect, page.Embedded.Records[0].(effects.TrustlineAuthorizedToMaintainLiabilities)) } + +func TestNewEffect_EffectTrade_Muxed(t *testing.T) { + tt := assert.New(t) + ctx, _ := test.ContextWithLogBuffer() + + details := `{ + "seller": "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", + "seller_muxed": "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", + "seller_muxed_id": 1234 + }` + + hEffect := history.Effect{ + Account: "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", + AccountMuxed: null.StringFrom("MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26"), + HistoryOperationID: 1, + Order: 1, + Type: history.EffectTrade, + DetailsString: null.StringFrom(details), + } + resource, err := NewEffect(ctx, hEffect, history.Ledger{}) + tt.NoError(err) + + var resourcePage hal.Page + resourcePage.Add(resource) + + effect, ok := resource.(effects.Trade) + tt.True(ok) + tt.Equal("trade", effect.Type) + + binary, err := json.Marshal(resourcePage) + tt.NoError(err) + + var page effects.EffectsPage + tt.NoError(json.Unmarshal(binary, &page)) + tt.Len(page.Embedded.Records, 1) + tt.Equal(effect, page.Embedded.Records[0].(effects.Trade)) + tt.Equal("GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", effect.Account) + tt.Equal("MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", effect.AccountMuxed) + tt.Equal(uint64(1234), effect.AccountMuxedID) + tt.Equal("GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", effect.Seller) + tt.Equal("MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", effect.SellerMuxed) + tt.Equal(uint64(1234), effect.SellerMuxedID) +} diff --git a/services/horizon/internal/resourceadapter/operations.go b/services/horizon/internal/resourceadapter/operations.go index eaeaef65c9..fb4b406fb0 100644 --- a/services/horizon/internal/resourceadapter/operations.go +++ b/services/horizon/internal/resourceadapter/operations.go @@ -23,9 +23,7 @@ func NewOperation( ) (result hal.Pageable, err error) { base := operations.Base{} - err = PopulateBaseOperation( - ctx, &base, operationRow, transactionHash, transactionRow, ledger, - ) + err = PopulateBaseOperation(ctx, &base, operationRow, transactionHash, transactionRow, ledger) if err != nil { return } @@ -148,18 +146,16 @@ func NewOperation( } // Populate fills out this resource using `row` as the source. -func PopulateBaseOperation( - ctx context.Context, - dest *operations.Base, - operationRow history.Operation, - transactionHash string, - transactionRow *history.Transaction, - ledger history.Ledger, -) error { +func PopulateBaseOperation(ctx context.Context, dest *operations.Base, operationRow history.Operation, transactionHash string, transactionRow *history.Transaction, ledger history.Ledger) error { dest.ID = fmt.Sprintf("%d", operationRow.ID) dest.PT = operationRow.PagingToken() dest.TransactionSuccessful = operationRow.TransactionSuccessful dest.SourceAccount = operationRow.SourceAccount + if operationRow.SourceAccountMuxed.Valid { + dest.SourceAccountMuxed = operationRow.SourceAccountMuxed.String + muxedAccount := xdr.MustMuxedAddress(dest.SourceAccountMuxed) + dest.SourceAccountMuxedID = uint64(muxedAccount.Med25519.Id) + } populateOperationType(dest, operationRow) dest.LedgerCloseTime = ledger.ClosedAt dest.TransactionHash = transactionHash diff --git a/services/horizon/internal/resourceadapter/operations_test.go b/services/horizon/internal/resourceadapter/operations_test.go index b85d0a7d18..0cac1957dc 100644 --- a/services/horizon/internal/resourceadapter/operations_test.go +++ b/services/horizon/internal/resourceadapter/operations_test.go @@ -1,6 +1,7 @@ package resourceadapter import ( + "context" "encoding/json" "testing" @@ -12,6 +13,29 @@ import ( "github.com/stretchr/testify/assert" ) +func TestNewOperationAllTypesCovered(t *testing.T) { + for typ, s := range xdr.OperationTypeToStringMap { + row := history.Operation{ + Type: xdr.OperationType(typ), + } + op, err := NewOperation(context.Background(), row, "foo", &history.Transaction{}, history.Ledger{}) + assert.NoError(t, err, s) + // if we got a base type, the operation is not covered + if _, ok := op.(operations.Base); ok { + assert.Fail(t, s) + } + } + + // make sure the check works for an unreasonable operation type + row := history.Operation{ + Type: xdr.OperationType(200000), + } + op, err := NewOperation(context.Background(), row, "foo", &history.Transaction{}, history.Ledger{}) + assert.NoError(t, err) + assert.IsType(t, op, operations.Base{}) + +} + // TestPopulateOperation_Successful tests operation object population. func TestPopulateOperation_Successful(t *testing.T) { ctx, _ := test.ContextWithLogBuffer() @@ -66,14 +90,7 @@ func TestPopulateOperation_WithTransaction(t *testing.T) { assert.NoError( t, - PopulateBaseOperation( - ctx, - &dest, - operationsRow, - transactionRow.TransactionHash, - &transactionRow, - ledger, - ), + PopulateBaseOperation(ctx, &dest, operationsRow, transactionRow.TransactionHash, &transactionRow, ledger), ) assert.True(t, dest.TransactionSuccessful) assert.True(t, dest.Transaction.Successful) @@ -176,6 +193,28 @@ func TestPopulateOperation_ClaimClaimableBalance(t *testing.T) { tt.Equal("GDRW375MAYR46ODGF2WGANQC2RRZL7O246DYHHCGWTV2RE7IHE2QUQLD", resp["claimant"]) } +func TestPopulateOperation_ClaimClaimableBalance_Muxed(t *testing.T) { + tt := assert.New(t) + + details := `{ + "claimant": "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", + "claimant_muxed": "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", + "claimant_muxed_id": 1234, + "balance_id": "abc", + "source_account_muxed": "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", + "source_account_muxed_id": 1234 + }` + + resp, err := getJSONResponse(xdr.OperationTypeClaimClaimableBalance, details) + tt.NoError(err) + tt.Equal("abc", resp["balance_id"]) + tt.Equal("GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", resp["claimant"]) + tt.Equal("MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", resp["claimant_muxed"]) + tt.Equal(1234, int(resp["claimant_muxed_id"].(float64))) + tt.Equal("MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26", resp["source_account_muxed"]) + tt.Equal(1234, int(resp["source_account_muxed_id"].(float64))) +} + func TestPopulateOperation_BeginSponsoringFutureReserves(t *testing.T) { tt := assert.New(t) @@ -300,40 +339,19 @@ func TestFeeBumpOperation(t *testing.T) { assert.NoError( t, - PopulateBaseOperation( - ctx, - &dest, - operationsRow, - transactionRow.TransactionHash, - nil, - history.Ledger{}, - ), + PopulateBaseOperation(ctx, &dest, operationsRow, transactionRow.TransactionHash, nil, history.Ledger{}), ) assert.Equal(t, transactionRow.TransactionHash, dest.TransactionHash) assert.NoError( t, - PopulateBaseOperation( - ctx, - &dest, - operationsRow, - transactionRow.InnerTransactionHash.String, - nil, - history.Ledger{}, - ), + PopulateBaseOperation(ctx, &dest, operationsRow, transactionRow.InnerTransactionHash.String, nil, history.Ledger{}), ) assert.Equal(t, transactionRow.InnerTransactionHash.String, dest.TransactionHash) assert.NoError( t, - PopulateBaseOperation( - ctx, - &dest, - operationsRow, - transactionRow.TransactionHash, - &transactionRow, - history.Ledger{}, - ), + PopulateBaseOperation(ctx, &dest, operationsRow, transactionRow.TransactionHash, &transactionRow, history.Ledger{}), ) assert.Equal(t, transactionRow.TransactionHash, dest.TransactionHash) @@ -352,14 +370,7 @@ func TestFeeBumpOperation(t *testing.T) { assert.NoError( t, - PopulateBaseOperation( - ctx, - &dest, - operationsRow, - transactionRow.InnerTransactionHash.String, - &transactionRow, - history.Ledger{}, - ), + PopulateBaseOperation(ctx, &dest, operationsRow, transactionRow.InnerTransactionHash.String, &transactionRow, history.Ledger{}), ) assert.Equal(t, transactionRow.InnerTransactionHash.String, dest.TransactionHash) assert.Equal(t, transactionRow.InnerTransactionHash.String, dest.Transaction.Hash) diff --git a/services/horizon/internal/resourceadapter/transaction.go b/services/horizon/internal/resourceadapter/transaction.go index aa6f2ee4e6..ec5b8cc01c 100644 --- a/services/horizon/internal/resourceadapter/transaction.go +++ b/services/horizon/internal/resourceadapter/transaction.go @@ -30,6 +30,11 @@ func PopulateTransaction( dest.Ledger = row.LedgerSequence dest.LedgerCloseTime = row.LedgerCloseTime dest.Account = row.Account + if row.AccountMuxed.Valid { + dest.AccountMuxed = row.AccountMuxed.String + muxedAccount := xdr.MustMuxedAddress(dest.AccountMuxed) + dest.AccountMuxedID = uint64(muxedAccount.Med25519.Id) + } dest.AccountSequence = row.AccountSequence dest.FeeCharged = row.FeeCharged @@ -56,6 +61,11 @@ func PopulateTransaction( if row.InnerTransactionHash.Valid { dest.FeeAccount = row.FeeAccount.String + if row.FeeAccountMuxed.Valid { + dest.FeeAccountMuxed = row.FeeAccountMuxed.String + muxedAccount := xdr.MustMuxedAddress(dest.FeeAccountMuxed) + dest.FeeAccountMuxedID = uint64(muxedAccount.Med25519.Id) + } dest.MaxFee = row.NewMaxFee.Int64 dest.FeeBumpTransaction = &protocol.FeeBumpTransaction{ Hash: row.TransactionHash, @@ -70,7 +80,9 @@ func PopulateTransaction( dest.Signatures = dest.InnerTransaction.Signatures } } else { - dest.FeeAccount = row.Account + dest.FeeAccount = dest.Account + dest.FeeAccountMuxed = dest.AccountMuxed + dest.FeeAccountMuxedID = dest.AccountMuxedID dest.MaxFee = row.MaxFee } diff --git a/services/horizon/internal/resourceadapter/transaction_test.go b/services/horizon/internal/resourceadapter/transaction_test.go index 7d23a284cb..b522858240 100644 --- a/services/horizon/internal/resourceadapter/transaction_test.go +++ b/services/horizon/internal/resourceadapter/transaction_test.go @@ -2,9 +2,10 @@ package resourceadapter import ( "encoding/base64" + "testing" + "github.com/guregu/null" "github.com/stellar/go/xdr" - "testing" . "github.com/stellar/go/protocols/horizon" "github.com/stellar/go/services/horizon/internal/db2/history" @@ -158,8 +159,10 @@ func TestFeeBumpTransaction(t *testing.T) { MaxFee: 123, FeeCharged: 100, TransactionHash: "cebb875a00ff6e1383aef0fd251a76f22c1f9ab2a2dffcb077855736ade2659a", - FeeAccount: null.StringFrom("GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"), - Account: "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", + FeeAccount: null.StringFrom("GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ"), + FeeAccountMuxed: null.StringFrom("MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUQ"), + Account: "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY", + AccountMuxed: null.StringFrom("MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26"), NewMaxFee: null.IntFrom(10000), InnerTransactionHash: null.StringFrom("2374e99349b9ef7dba9a5db3339b78fda8f34777b1af33ba468ad5c0df946d4d"), Signatures: []string{"a", "b", "c"}, @@ -171,7 +174,11 @@ func TestFeeBumpTransaction(t *testing.T) { assert.Equal(t, row.TransactionHash, dest.Hash) assert.Equal(t, row.TransactionHash, dest.ID) assert.Equal(t, row.FeeAccount.String, dest.FeeAccount) + assert.Equal(t, row.FeeAccountMuxed.String, dest.FeeAccountMuxed) + assert.Equal(t, uint64(0), dest.FeeAccountMuxedID) assert.Equal(t, row.Account, dest.Account) + assert.Equal(t, row.AccountMuxed.String, dest.AccountMuxed) + assert.Equal(t, uint64(1234), dest.AccountMuxedID) assert.Equal(t, row.FeeCharged, dest.FeeCharged) assert.Equal(t, row.NewMaxFee.Int64, dest.MaxFee) assert.Equal(t, []string{"a", "b", "c"}, dest.Signatures) @@ -186,7 +193,11 @@ func TestFeeBumpTransaction(t *testing.T) { assert.Equal(t, row.InnerTransactionHash.String, dest.Hash) assert.Equal(t, row.InnerTransactionHash.String, dest.ID) assert.Equal(t, row.FeeAccount.String, dest.FeeAccount) + assert.Equal(t, row.FeeAccountMuxed.String, dest.FeeAccountMuxed) + assert.Equal(t, uint64(0), dest.FeeAccountMuxedID) assert.Equal(t, row.Account, dest.Account) + assert.Equal(t, row.AccountMuxed.String, dest.AccountMuxed) + assert.Equal(t, uint64(1234), dest.AccountMuxedID) assert.Equal(t, row.FeeCharged, dest.FeeCharged) assert.Equal(t, row.NewMaxFee.Int64, dest.MaxFee) assert.Equal(t, []string{"d", "e", "f"}, dest.Signatures) diff --git a/services/horizon/internal/scripts/check_release_hash/Dockerfile b/services/horizon/internal/scripts/check_release_hash/Dockerfile index 39087c3157..36a3d8cc2f 100644 --- a/services/horizon/internal/scripts/check_release_hash/Dockerfile +++ b/services/horizon/internal/scripts/check_release_hash/Dockerfile @@ -1,5 +1,5 @@ # Change to Go version used in CI or rebuild with --build-arg. -ARG GO_IMAGE=golang:1.16.2 +ARG GO_IMAGE=golang:1.16.3 FROM $GO_IMAGE WORKDIR /go/src/github.com/stellar/go diff --git a/services/horizon/internal/test/integration/integration.go b/services/horizon/internal/test/integration/integration.go index 3e4f02a8c5..b50f470067 100644 --- a/services/horizon/internal/test/integration/integration.go +++ b/services/horizon/internal/test/integration/integration.go @@ -142,7 +142,7 @@ func (i *Test) RestartHorizon() { i.startHorizon( i.horizonConfig.CaptiveCoreBinaryPath, - i.horizonConfig.CaptiveCoreConfigAppendPath, + i.horizonConfig.CaptiveCoreConfigPath, i.horizonConfig.DatabaseURL, false, ) @@ -213,7 +213,7 @@ of accounts, subscribe to event streams, and more.`, "--stellar-core-binary-path", captiveCoreBinaryPath, - "--captive-core-config-append-path", + "--captive-core-config-path", captiveCoreConfigPath, "--captive-core-http-port", @@ -526,6 +526,7 @@ func (i *Test) CreateSignedTransaction( BaseFee: txnbuild.MinBaseFee, Timebounds: txnbuild.NewInfiniteTimeout(), IncrementSequenceNum: true, + EnableMuxedAccounts: true, } tx, err := txnbuild.NewTransaction(txParams) diff --git a/services/horizon/internal/test/scenarios/account_merge-horizon.sql b/services/horizon/internal/test/scenarios/account_merge-horizon.sql index 3d999bbcd4..232f3221e2 100644 --- a/services/horizon/internal/test/scenarios/account_merge-horizon.sql +++ b/services/horizon/internal/test/scenarios/account_merge-horizon.sql @@ -951,6 +951,11 @@ ALTER TABLE ONLY history_trades ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); +-- added manually +ALTER TABLE history_transactions ADD account_muxed varchar(69) NULL, ADD fee_account_muxed varchar(69) NULL; +ALTER TABLE history_operations ADD source_account_muxed varchar(69) NULL; +ALTER TABLE history_effects ADD address_muxed varchar(69) NULL; + -- -- PostgreSQL database dump complete -- diff --git a/services/horizon/internal/test/scenarios/allow_trust-core.sql b/services/horizon/internal/test/scenarios/allow_trust-core.sql deleted file mode 100644 index e5b80c072a..0000000000 --- a/services/horizon/internal/test/scenarios/allow_trust-core.sql +++ /dev/null @@ -1,753 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999969999999700, 3, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 9999999900, 8589934593, 1, NULL, '', 'AQAAAA==', 0, 4, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 9999999900, 8589934593, 1, NULL, '', 'AQAAAA==', 0, 5, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 9999999500, 8589934597, 0, NULL, '', 'AQAAAA==', 3, 8, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('6baec8d27b7cd6fd51f52d29177ab7091add263fa44d66266ffb954e0ebf17e9', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '23f6f5243a4e5db5fc67196fdb701e8c1c2b433f2fed5822408028472d9464d5', 2, 1559579749, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZU7nPOoI7SirHEO1Sa67WumwKQ62PpQGlvJvyyQ8QGEYAAAAAXPVMZQAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAj6+p+aI7JvbSfHisaUUAXhzcG+/2YWJE2bnf4zuV8i4j9vUkOk5dtfxnGW/bcB6MHCtDPy/tWCJAgChHLZRk1QAAAAIN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('5478ec2487f0f1288bd06885075187168de8ceaa2bf49b61f5b0dd16fd15c8d3', '6baec8d27b7cd6fd51f52d29177ab7091add263fa44d66266ffb954e0ebf17e9', '7f075212d3a0fed1c81d3e8237f52b28a28516ee8bae8f4eec95c2ffc081572f', 3, 1559579750, 'AAAAC2uuyNJ7fNb9UfUtKRd6twka3SY/pE1mJm/7lU4OvxfphWD90LNKVE27wGnXgnm8lMvOHfDLez+LD6lekshRaMAAAAAAXPVMZgAAAAAAAAAATlvjBWe7MinR9n7UosajCKxUpgQMBBbhmF6bHAvPHGV/B1IS06D+0cgdPoI39SsoooUW7ouuj07slcL/wIFXLwAAAAMN4Lazp2QAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('0bf3a200e3c6780dc6959a968663f18b028cbaa6c9b3dc75acdc786ad6393578', '5478ec2487f0f1288bd06885075187168de8ceaa2bf49b61f5b0dd16fd15c8d3', 'd79767593cf88e66f790741443a68bb7180323e8b0ba96c47dc3fb10d2141c1a', 4, 1559579751, 'AAAAC1R47CSH8PEoi9BohQdRhxaN6M6qK/SbYfWw3Rb9FcjT42xySXzEXCxN+8wF0VV0djkKp9z/N6Rzeh8Y3xY2sQgAAAAAXPVMZwAAAAAAAAAALLKPbMojH+RR+TSBDKGB/tufH2mL12ccCHr1Jn27yPDXl2dZPPiOZveQdBRDpou3GAMj6LC6lsR9w/sQ0hQcGgAAAAQN4Lazp2QAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('18a40e55f50102d4dee5b09a22f5548e65352c7e7a34c8fe6f39751e8f147c66', '0bf3a200e3c6780dc6959a968663f18b028cbaa6c9b3dc75acdc786ad6393578', '504bd637c5d4decfcbdf1fa128a75e4616cabca352b3fe8ac991a6c3a9f79dc1', 5, 1559579752, 'AAAACwvzogDjxngNxpWaloZj8YsCjLqmybPcdazceGrWOTV4fTokoMnHd2mbTjn+EpjK1E1Nhy96TB9Tru0p92TQ3DIAAAAAXPVMaAAAAAAAAAAAxlJuyWie0d1LzUCR1K4LD2g+0KuAHvbJ+SgmGHyguLVQS9Y3xdTez8vfH6Eop15GFsq8o1Kz/orJkabDqfedwQAAAAUN4Lazp2QAAAAAAAAAAAK8AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('5f341eddfb0f2a46317a399bab66b03ece78082891716e9d0e5532a1234cb00c', '18a40e55f50102d4dee5b09a22f5548e65352c7e7a34c8fe6f39751e8f147c66', '7f8143b022e85052652ba8a4db115886ea9f1bf646c103bcd61c490736f0e41c', 6, 1559579753, 'AAAACxikDlX1AQLU3uWwmiL1VI5lNSx+ejTI/m85dR6PFHxmuXzNyzH8ehpU2xSNT+qW+zBhR6vOC7kqgpgmqXr023wAAAAAXPVMaQAAAAAAAAAAFp2fvkMO7OW+Jq1zFYvyIp0pN6KM6DetMmxOjZVOCKd/gUOwIuhQUmUrqKTbEViG6p8b9kbBA7zWHEkHNvDkHAAAAAYN4Lazp2QAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('609d9d97b1a8b02deb8d5ee5831d9c8c04a0089a1fd34ef5cfde9c604d9fe715', '5f341eddfb0f2a46317a399bab66b03ece78082891716e9d0e5532a1234cb00c', '284ec247599bcccaeaa0e4093d4225753f55ae45ba69278f1c6463990f94f6e6', 7, 1559579754, 'AAAAC180Ht37DypGMXo5m6tmsD7OeAgokXFunQ5VMqEjTLAM/BtWb8A5xj0T4ezCfoxv6QEiZ4EnxHPyiUPvpquGnLkAAAAAXPVMagAAAAAAAAAA2F0xW7K6lNYrXRzu7d5HyBUnPlumNFQipNBwSQNAx1IoTsJHWZvMyuqg5Ak9QiV1P1WuRbppJ48cZGOZD5T25gAAAAcN4Lazp2QAAAAAAAAAAAOEAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('2f255f04551f6afeea21a0974313303f6664b0d47a1135d53eccc6a15b5033f3', '609d9d97b1a8b02deb8d5ee5831d9c8c04a0089a1fd34ef5cfde9c604d9fe715', 'bd21bbb78e05efba24d017105ef7b94c8224db355fab3177c41beb4056410281', 8, 1559579755, 'AAAAC2CdnZexqLAt641e5YMdnIwEoAiaH9NO9c/enGBNn+cVOp8HkEvM+k++maYD2SHmOqh+h77YyP7hd5pc5bdDuxgAAAAAXPVMawAAAAAAAAAA17tytOKBxgu8yeo5X/akyYnyYlyrUb7gJWE+zfCgC2C9Ibu3jgXvuiTQFxBe97lMgiTbNV+rMXfEG+tAVkECgQAAAAgN4Lazp2QAAAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('e28639230b548f9da67603a89665b61fb23f5301974a58bc50fac7daaa37ba32', '2f255f04551f6afeea21a0974313303f6664b0d47a1135d53eccc6a15b5033f3', 'bd21bbb78e05efba24d017105ef7b94c8224db355fab3177c41beb4056410281', 9, 1559579756, 'AAAACy8lXwRVH2r+6iGgl0MTMD9mZLDUehE11T7MxqFbUDPzAmndzDaKyOupQT763G1TTS131dtwNuiESSWEa7BENWcAAAAAXPVMbAAAAAAAAAAA3z9hmASpL9tAVxktxD3XSOp3itxSvEmM6AUkwBS4ERm9Ibu3jgXvuiTQFxBe97lMgiTbNV+rMXfEG+tAVkECgQAAAAkN4Lazp2QAAAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GCZ2ERNZMGKRSTYIUYAA3ZXSSHBQ7MHLHFJBBQIHH6SVYBFXOKW7RHB7', 2, 'AAAAALOiRblhlRlPCKYADebykcMPsOs5UhDBBz+lXAS3cq34AAAAAAAAAAIAAAACAAAAAQAAAEhTuc86gjtKKscQ7VJrrta6bApDrY+lAaW8m/LJDxAYRgAAAABc9UxlAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABdicUkRziBK+Q9bThB+84NSbIJ1VZ+rH5Tx4qsDZBhn0AAABA048MiD8z7p62LLFZD1GTT+c0yKknMssLhGpo3DidqzP5UgsS2zBtQ+SMxQXwDf89RqKcru8J8CXbVLpyTw9rBA=='); -INSERT INTO scphistory VALUES ('GCZ2ERNZMGKRSTYIUYAA3ZXSSHBQ7MHLHFJBBQIHH6SVYBFXOKW7RHB7', 3, 'AAAAALOiRblhlRlPCKYADebykcMPsOs5UhDBBz+lXAS3cq34AAAAAAAAAAMAAAACAAAAAQAAADCFYP3Qs0pUTbvAadeCebyUy84d8Mt7P4sPqV6SyFFowAAAAABc9UxmAAAAAAAAAAAAAAABdicUkRziBK+Q9bThB+84NSbIJ1VZ+rH5Tx4qsDZBhn0AAABAYdXorGm/ezkwwVHLWbCf3cqXIdBpYMLHHlubY2QafElyd+Nmf2jrRWP4tuYkOxgvWmc98t5995qzk+VR1KHdBQ=='); -INSERT INTO scphistory VALUES ('GCZ2ERNZMGKRSTYIUYAA3ZXSSHBQ7MHLHFJBBQIHH6SVYBFXOKW7RHB7', 4, 'AAAAALOiRblhlRlPCKYADebykcMPsOs5UhDBBz+lXAS3cq34AAAAAAAAAAQAAAACAAAAAQAAADDjbHJJfMRcLE37zAXRVXR2OQqn3P83pHN6HxjfFjaxCAAAAABc9UxnAAAAAAAAAAAAAAABdicUkRziBK+Q9bThB+84NSbIJ1VZ+rH5Tx4qsDZBhn0AAABAdYPAZZMhRz2CYSO4c2CirU4KGZ5jeqUC04RYWRPkK3yzpIMWzRwZ00cTusK2432gf5VSLcOuTrDpsV0mWGoiAA=='); -INSERT INTO scphistory VALUES ('GCZ2ERNZMGKRSTYIUYAA3ZXSSHBQ7MHLHFJBBQIHH6SVYBFXOKW7RHB7', 5, 'AAAAALOiRblhlRlPCKYADebykcMPsOs5UhDBBz+lXAS3cq34AAAAAAAAAAUAAAACAAAAAQAAADB9OiSgycd3aZtOOf4SmMrUTU2HL3pMH1Ou7Sn3ZNDcMgAAAABc9UxoAAAAAAAAAAAAAAABdicUkRziBK+Q9bThB+84NSbIJ1VZ+rH5Tx4qsDZBhn0AAABAjMfdYVGbwFYJgN7qPqvS7/wURcD7aF/buKNa98M1bg8hTozh3d2HxWOkLYlItGgq1hZyvRIsSS6VjxJeZSFEAQ=='); -INSERT INTO scphistory VALUES ('GCZ2ERNZMGKRSTYIUYAA3ZXSSHBQ7MHLHFJBBQIHH6SVYBFXOKW7RHB7', 6, 'AAAAALOiRblhlRlPCKYADebykcMPsOs5UhDBBz+lXAS3cq34AAAAAAAAAAYAAAACAAAAAQAAADC5fM3LMfx6GlTbFI1P6pb7MGFHq84LuSqCmCapevTbfAAAAABc9UxpAAAAAAAAAAAAAAABdicUkRziBK+Q9bThB+84NSbIJ1VZ+rH5Tx4qsDZBhn0AAABAi3p6s80itjHTpvvZ28WhuY0FkXbnPpHmjHYWTko5RDv+p4GJ026w6IzldrC1YsaMF/LTKETRCY5bRHPcuSmOAg=='); -INSERT INTO scphistory VALUES ('GCZ2ERNZMGKRSTYIUYAA3ZXSSHBQ7MHLHFJBBQIHH6SVYBFXOKW7RHB7', 7, 'AAAAALOiRblhlRlPCKYADebykcMPsOs5UhDBBz+lXAS3cq34AAAAAAAAAAcAAAACAAAAAQAAADD8G1ZvwDnGPRPh7MJ+jG/pASJngSfEc/KJQ++mq4acuQAAAABc9UxqAAAAAAAAAAAAAAABdicUkRziBK+Q9bThB+84NSbIJ1VZ+rH5Tx4qsDZBhn0AAABAe5T2wcVv+vsBjOgYzSoEiigW6G7SSMklZl0RNph2rBtiP4eYCJvykoINYXfJ/GZanAyqyxukiPWt1QhntkQQDQ=='); -INSERT INTO scphistory VALUES ('GCZ2ERNZMGKRSTYIUYAA3ZXSSHBQ7MHLHFJBBQIHH6SVYBFXOKW7RHB7', 8, 'AAAAALOiRblhlRlPCKYADebykcMPsOs5UhDBBz+lXAS3cq34AAAAAAAAAAgAAAACAAAAAQAAADA6nweQS8z6T76ZpgPZIeY6qH6HvtjI/uF3mlzlt0O7GAAAAABc9UxrAAAAAAAAAAAAAAABdicUkRziBK+Q9bThB+84NSbIJ1VZ+rH5Tx4qsDZBhn0AAABAAq0rGe5ZC/OIJQQUmttl+ubIo6N/k363+4lSgFohDVpx4USQewACJnw8wcIjHqVVWgPKVYsk7GQwvWuDgQcrDg=='); -INSERT INTO scphistory VALUES ('GCZ2ERNZMGKRSTYIUYAA3ZXSSHBQ7MHLHFJBBQIHH6SVYBFXOKW7RHB7', 9, 'AAAAALOiRblhlRlPCKYADebykcMPsOs5UhDBBz+lXAS3cq34AAAAAAAAAAkAAAACAAAAAQAAADACad3MNorI66lBPvrcbVNNLXfV23A26IRJJYRrsEQ1ZwAAAABc9UxsAAAAAAAAAAAAAAABdicUkRziBK+Q9bThB+84NSbIJ1VZ+rH5Tx4qsDZBhn0AAABAebfHp0UDQm/+bC5F9he9/FwU3+0Z0HaVsZCpGR8bsiiH/cLrX9hIUzdKDfsvEbEYc7WSph0vKLaa/4Sz5ZkgAg=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('762714911ce204af90f5b4e107ef383526c8275559fab1f94f1e2ab03641867d', 9, 'AAAAAQAAAAEAAAAAs6JFuWGVGU8IpgAN5vKRww+w6zlSEMEHP6VcBLdyrfgAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastclosedledger ', 'e28639230b548f9da67603a89665b61fb23f5301974a58bc50fac7daaa37ba32'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 9, - "currentBuckets": [ - { - "curr": "6d8ba01a011be3496c42e8248a2aa003b2225a97ede7cd9486333973624da5fa", - "next": { - "state": 0 - }, - "snap": "047b5ccfa4e01588a70d767ab0643e4abed920b99e72be4c30dca4aa1f40c886" - }, - { - "curr": "012b45a29f46b9d3af33464315aab41bb669037827635dc0e5bc756a41c4bd36", - "next": { - "state": 1, - "output": "fbec47c59d1686a88c806a198dbf3538070f527d7f22942d935c1573fbdbfc89" - }, - "snap": "923189f3817faacbeb3b804fb08c59d21ac6d78fcd1c2e68444bfa6c5eb5dc23" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 1, - "output": "923189f3817faacbeb3b804fb08c59d21ac6d78fcd1c2e68444bfa6c5eb5dc23" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAACzokW5YZUZTwimAA3m8pHDD7DrOVIQwQc/pVwEt3Kt+AAAAAAAAAAJAAAAA3YnFJEc4gSvkPW04QfvODUmyCdVWfqx+U8eKrA2QYZ9AAAAAQAAAJgCad3MNorI66lBPvrcbVNNLXfV23A26IRJJYRrsEQ1ZwAAAABc9UxsAAAAAAAAAAEAAAAAs6JFuWGVGU8IpgAN5vKRww+w6zlSEMEHP6VcBLdyrfgAAABAulWgr1846GTk8eU1Ni8S/p+EeOw4pORLXn7/ZMabAqzcWpZmTTEre4mXILXtNEJDcyOs2FMtMXv0izKDOUlvAAAAAAEAAACYAmndzDaKyOupQT763G1TTS131dtwNuiESSWEa7BENWcAAAAAXPVMbAAAAAAAAAABAAAAALOiRblhlRlPCKYADebykcMPsOs5UhDBBz+lXAS3cq34AAAAQLpVoK9fOOhk5PHlNTYvEv6fhHjsOKTkS15+/2TGmwKs3FqWZk0xK3uJlyC17TRCQ3MjrNhTLTF79IsygzlJbwAAAABAOZves1hGUNmLeSq/RbOH6phw9TjzKt7G/ZJxzOJITywINPyAFnTPp7e47rq9S8hf7fv7CxdPmosA/xf7E2QnBwAAAACzokW5YZUZTwimAA3m8pHDD7DrOVIQwQc/pVwEt3Kt+AAAAAAAAAAJAAAAAgAAAAEAAAAwAmndzDaKyOupQT763G1TTS131dtwNuiESSWEa7BENWcAAAAAXPVMbAAAAAAAAAAAAAAAAXYnFJEc4gSvkPW04QfvODUmyCdVWfqx+U8eKrA2QYZ9AAAAQHm3x6dFA0Jv/mwuRfYXvfxcFN/tGdB2lbGQqRkfG7Ioh/3C61/YSFM3Sg37LxGxGHO1kqYdLyi2mv+Es+WZIAIAAAABLyVfBFUfav7qIaCXQxMwP2ZksNR6ETXVPszGoVtQM/MAAAAAAAAAAQAAAAEAAAABAAAAALOiRblhlRlPCKYADebykcMPsOs5UhDBBz+lXAS3cq34AAAAAA=='); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 0, 1, 6, NULL, NULL); -INSERT INTO trustlines VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 40000000000, 0, 0, 8, NULL, NULL); - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('90880ac53815dac8441add0220a7631ef5eac3d57c2e89634ea9b5203f61a8e4', 2, 3, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('7a707186a5cc36a0e520548ae511b53896c0391ce166d40da80588cbaae6aa2c', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('c6bfdd93f1470df9dfa3ef95d57ba28cecace068d9f2bb040a79ffc7c5d96cb9', 3, 2, 'AAAAAgAAAAMAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 4, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('b55d768a4e8e712da20efdee0e7d85f02948f9b6fd3ef2daefd3a5a147ecd63d', 5, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('3b666a253313fc7a0d241ee28064eec78aaa5ebd0a7c0ae7f85259e80fad029f', 6, 1, 'AAAAAgAAAAMAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+LUAAAAAgAAAAIAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('3f2aa00ba539e24ba9c0ba62f50318d8c7180f2d6757cc76e9984055c5e19ff4', 7, 1, 'AAAAAgAAAAMAAAAGAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+LUAAAAAgAAAAMAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+JwAAAAAgAAAAMAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('3ce9fc1159c25adc62c9686792cd41f06908280b899744057856db33bafe75de', 8, 1, 'AAAAAgAAAAMAAAAHAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+JwAAAAAgAAAAQAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+IMAAAAAgAAAAQAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', '2zmOtK6JdWMlZDytIclOE7/AdLMj7oPhQb9wGl2QTxsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', '+Xyv+rjBYCOjeIQWXLCz/xqi2vQAD+9J0h78hH3b++oAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDbUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('90880ac53815dac8441add0220a7631ef5eac3d57c2e89634ea9b5203f61a8e4', 2, 3, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBdX4R/Ghzq8/r+u8PL+sNriHsS5lW1Vt+9eCe0nnWMNTzMgcUbarePbrpD2gr8DjVumcmpVH9wG2GXtWvwzXoL', 'kIgKxTgV2shEGt0CIKdjHvXqw9V8LoljTqm1ID9hqOQAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDbUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqyrQFLUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('7a707186a5cc36a0e520548ae511b53896c0391ce166d40da80588cbaae6aa2c', 3, 1, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+ZAt7wAAAEDBhDOsFWP2KCoZuJDRXuiNm0CjgVKLLtdZi/A3OfrCsgvX8izhAllXkRqrXyitSvGo3kQh6V/S/tnQbrYgHQQG', 'enBxhqXMNqDlIFSK5RG1OJbAORzhZtQNqAWIy6rmqiwAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('c6bfdd93f1470df9dfa3ef95d57ba28cecace068d9f2bb040a79ffc7c5d96cb9', 3, 2, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+ZAt7wAAAEBVJkTQTFlpFKoMhcibMpdJ5khR91LY3zPQwv/e5Ov7XIcWKGIv5sDfgyhaK/x5WYWfawNWcc5fMlW7c/PxGOQJ', 'xr/dk/FHDfnfo++V1XuijOys4GjZ8rsECnn/x8XZbLkAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjOAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjOAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 4, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'vUhtvdAtRggXZxxKWn6dboZcopy0HmLXqvcKL+5bNt4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('b55d768a4e8e712da20efdee0e7d85f02948f9b6fd3ef2daefd3a5a147ecd63d', 5, 1, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAlQL5AAAAAAAAAAAAFvFIhaAAAAQBlpm/6rv5JvbN2AKUSlH+4idIlX0cM678QXxK+il0u7z3KLORdzKSkLnS5WdLZlAB6iDmoKI5WbydQLktNtDQA=', 'tV12ik6OcS2iDv3uDn2F8ClI+bb9PvLa79OloUfs1j0AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAAAAAJUC+QAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('3b666a253313fc7a0d241ee28064eec78aaa5ebd0a7c0ae7f85259e80fad029f', 6, 1, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAcAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAEAAAAAAAAAAfmQLe8AAABAL6czYFvSBhdVeD4fbXOHuXFa2CDqLpFfc+QJnoiPLt/23YViURGLyfg388FKMKsbNJEgmFsCJjtgl3fj7wr/Aw==', 'O2ZqJTMT/HoNJB7igGTux4qqXr0KfArn+FJZ6A+tAp8AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAcAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvi1AAAAAIAAAACAAAAAAAAAAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvi1AAAAAIAAAADAAAAAAAAAAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('3f2aa00ba539e24ba9c0ba62f50318d8c7180f2d6757cc76e9984055c5e19ff4', 7, 1, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAcAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAEAAAAAAAAAAfmQLe8AAABA1TAQBu/2f7XHs/ctAJ5W7Ytk4jvQBopdO05zkSQoS8piu1mZm/tTvDTXEq/QUufpt/E8NBgKtNpcJXuMv5aPCw==', 'PyqgC6U54kupwLpi9QMY2McYDy1nV8x26ZhAVcXhn/QAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAcAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAADAAAAAAAAAAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAAEAAAAAAAAAAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAFAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAAAAAJUC+QAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAAAAAJUC+QAAAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('3ce9fc1159c25adc62c9686792cd41f06908280b899744057856db33bafe75de', 8, 1, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAcAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAAAAAAAAAAAAfmQLe8AAABASafHp/zp11tF81MRvbAnx9gQNTXdLW4DmoIofkgoG+jJw/Xj/k+N5WvSjqGrGF33uB6KnD+wAfQIhf0/DlxpBQ==', 'POn8EVnCWtxiyWhnks1B8GkIKAuJl0QFeFbbM7r+dd4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAcAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAACAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAviDAAAAAIAAAAEAAAAAAAAAAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAACAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAviDAAAAAIAAAAFAAAAAAAAAAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAHAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAAAAAJUC+QAAAAAAEAAAAAAAAAAAAAAAEAAAAIAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAAAAAJUC+QAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/allow_trust-horizon.sql b/services/horizon/internal/test/scenarios/allow_trust-horizon.sql deleted file mode 100644 index 5ec29ff811..0000000000 --- a/services/horizon/internal/test/scenarios/allow_trust-horizon.sql +++ /dev/null @@ -1,1007 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO asset_stats VALUES (1, '0', 1, 3, ''); - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_accounts VALUES (2, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_accounts VALUES (3, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (4, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 4, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_assets VALUES (1, 'credit_alphanum4', 'USD', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 1, true); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 34359742465, 1, 24, '{"trustor": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 30064775169, 1, 23, '{"trustor": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 25769807873, 1, 23, '{"trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 21474840577, 1, 20, '{"limit": "4000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 17179873281, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 12884905985, 1, 6, '{"auth_required_flag": true}'); -INSERT INTO history_effects VALUES (1, 12884910081, 1, 6, '{"auth_revocable_flag": true}'); -INSERT INTO history_effects VALUES (1, 8589938689, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589938689, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589938689, 3, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589942785, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); -INSERT INTO history_effects VALUES (2, 8589946881, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589946881, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 8589946881, 3, 10, '{"weight": 1, "public_key": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (9, 'e28639230b548f9da67603a89665b61fb23f5301974a58bc50fac7daaa37ba32', '2f255f04551f6afeea21a0974313303f6664b0d47a1135d53eccc6a15b5033f3', 0, 0, '2019-06-03 16:35:56', '2019-06-03 16:35:52.453681', '2019-06-03 16:35:52.453681', 38654705664, 16, 1000000000000000000, 1000, 100, 100000000, 1000000, 11, 'AAAACy8lXwRVH2r+6iGgl0MTMD9mZLDUehE11T7MxqFbUDPzAmndzDaKyOupQT763G1TTS131dtwNuiESSWEa7BENWcAAAAAXPVMbAAAAAAAAAAA3z9hmASpL9tAVxktxD3XSOp3itxSvEmM6AUkwBS4ERm9Ibu3jgXvuiTQFxBe97lMgiTbNV+rMXfEG+tAVkECgQAAAAkN4Lazp2QAAAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); -INSERT INTO history_ledgers VALUES (8, '2f255f04551f6afeea21a0974313303f6664b0d47a1135d53eccc6a15b5033f3', '609d9d97b1a8b02deb8d5ee5831d9c8c04a0089a1fd34ef5cfde9c604d9fe715', 1, 1, '2019-06-03 16:35:55', '2019-06-03 16:35:52.461994', '2019-06-03 16:35:52.461994', 34359738368, 16, 1000000000000000000, 1000, 100, 100000000, 1000000, 11, 'AAAAC2CdnZexqLAt641e5YMdnIwEoAiaH9NO9c/enGBNn+cVOp8HkEvM+k++maYD2SHmOqh+h77YyP7hd5pc5bdDuxgAAAAAXPVMawAAAAAAAAAA17tytOKBxgu8yeo5X/akyYnyYlyrUb7gJWE+zfCgC2C9Ibu3jgXvuiTQFxBe97lMgiTbNV+rMXfEG+tAVkECgQAAAAgN4Lazp2QAAAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (7, '609d9d97b1a8b02deb8d5ee5831d9c8c04a0089a1fd34ef5cfde9c604d9fe715', '5f341eddfb0f2a46317a399bab66b03ece78082891716e9d0e5532a1234cb00c', 1, 1, '2019-06-03 16:35:54', '2019-06-03 16:35:52.477905', '2019-06-03 16:35:52.477905', 30064771072, 16, 1000000000000000000, 900, 100, 100000000, 1000000, 11, 'AAAAC180Ht37DypGMXo5m6tmsD7OeAgokXFunQ5VMqEjTLAM/BtWb8A5xj0T4ezCfoxv6QEiZ4EnxHPyiUPvpquGnLkAAAAAXPVMagAAAAAAAAAA2F0xW7K6lNYrXRzu7d5HyBUnPlumNFQipNBwSQNAx1IoTsJHWZvMyuqg5Ak9QiV1P1WuRbppJ48cZGOZD5T25gAAAAcN4Lazp2QAAAAAAAAAAAOEAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (6, '5f341eddfb0f2a46317a399bab66b03ece78082891716e9d0e5532a1234cb00c', '18a40e55f50102d4dee5b09a22f5548e65352c7e7a34c8fe6f39751e8f147c66', 1, 1, '2019-06-03 16:35:53', '2019-06-03 16:35:52.492661', '2019-06-03 16:35:52.492661', 25769803776, 16, 1000000000000000000, 800, 100, 100000000, 1000000, 11, 'AAAACxikDlX1AQLU3uWwmiL1VI5lNSx+ejTI/m85dR6PFHxmuXzNyzH8ehpU2xSNT+qW+zBhR6vOC7kqgpgmqXr023wAAAAAXPVMaQAAAAAAAAAAFp2fvkMO7OW+Jq1zFYvyIp0pN6KM6DetMmxOjZVOCKd/gUOwIuhQUmUrqKTbEViG6p8b9kbBA7zWHEkHNvDkHAAAAAYN4Lazp2QAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (5, '18a40e55f50102d4dee5b09a22f5548e65352c7e7a34c8fe6f39751e8f147c66', '0bf3a200e3c6780dc6959a968663f18b028cbaa6c9b3dc75acdc786ad6393578', 1, 1, '2019-06-03 16:35:52', '2019-06-03 16:35:52.505868', '2019-06-03 16:35:52.505869', 21474836480, 16, 1000000000000000000, 700, 100, 100000000, 1000000, 11, 'AAAACwvzogDjxngNxpWaloZj8YsCjLqmybPcdazceGrWOTV4fTokoMnHd2mbTjn+EpjK1E1Nhy96TB9Tru0p92TQ3DIAAAAAXPVMaAAAAAAAAAAAxlJuyWie0d1LzUCR1K4LD2g+0KuAHvbJ+SgmGHyguLVQS9Y3xdTez8vfH6Eop15GFsq8o1Kz/orJkabDqfedwQAAAAUN4Lazp2QAAAAAAAAAAAK8AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (4, '0bf3a200e3c6780dc6959a968663f18b028cbaa6c9b3dc75acdc786ad6393578', '5478ec2487f0f1288bd06885075187168de8ceaa2bf49b61f5b0dd16fd15c8d3', 1, 1, '2019-06-03 16:35:51', '2019-06-03 16:35:52.523332', '2019-06-03 16:35:52.523332', 17179869184, 16, 1000000000000000000, 600, 100, 100000000, 1000000, 11, 'AAAAC1R47CSH8PEoi9BohQdRhxaN6M6qK/SbYfWw3Rb9FcjT42xySXzEXCxN+8wF0VV0djkKp9z/N6Rzeh8Y3xY2sQgAAAAAXPVMZwAAAAAAAAAALLKPbMojH+RR+TSBDKGB/tufH2mL12ccCHr1Jn27yPDXl2dZPPiOZveQdBRDpou3GAMj6LC6lsR9w/sQ0hQcGgAAAAQN4Lazp2QAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (3, '5478ec2487f0f1288bd06885075187168de8ceaa2bf49b61f5b0dd16fd15c8d3', '6baec8d27b7cd6fd51f52d29177ab7091add263fa44d66266ffb954e0ebf17e9', 2, 2, '2019-06-03 16:35:50', '2019-06-03 16:35:52.538285', '2019-06-03 16:35:52.538285', 12884901888, 16, 1000000000000000000, 500, 100, 100000000, 1000000, 11, 'AAAAC2uuyNJ7fNb9UfUtKRd6twka3SY/pE1mJm/7lU4OvxfphWD90LNKVE27wGnXgnm8lMvOHfDLez+LD6lekshRaMAAAAAAXPVMZgAAAAAAAAAATlvjBWe7MinR9n7UosajCKxUpgQMBBbhmF6bHAvPHGV/B1IS06D+0cgdPoI39SsoooUW7ouuj07slcL/wIFXLwAAAAMN4Lazp2QAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (2, '6baec8d27b7cd6fd51f52d29177ab7091add263fa44d66266ffb954e0ebf17e9', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 3, 3, '2019-06-03 16:35:49', '2019-06-03 16:35:52.550865', '2019-06-03 16:35:52.550866', 8589934592, 16, 1000000000000000000, 300, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZU7nPOoI7SirHEO1Sa67WumwKQ62PpQGlvJvyyQ8QGEYAAAAAXPVMZQAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAj6+p+aI7JvbSfHisaUUAXhzcG+/2YWJE2bnf4zuV8i4j9vUkOk5dtfxnGW/bcB6MHCtDPy/tWCJAgChHLZRk1QAAAAIN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 3, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:35:52.581599', '2019-06-03 16:35:52.5816', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 34359742465, 1); -INSERT INTO history_operation_participants VALUES (2, 34359742465, 2); -INSERT INTO history_operation_participants VALUES (3, 30064775169, 1); -INSERT INTO history_operation_participants VALUES (4, 30064775169, 2); -INSERT INTO history_operation_participants VALUES (5, 25769807873, 1); -INSERT INTO history_operation_participants VALUES (6, 25769807873, 3); -INSERT INTO history_operation_participants VALUES (7, 21474840577, 2); -INSERT INTO history_operation_participants VALUES (8, 17179873281, 3); -INSERT INTO history_operation_participants VALUES (9, 12884905985, 1); -INSERT INTO history_operation_participants VALUES (10, 12884910081, 1); -INSERT INTO history_operation_participants VALUES (11, 8589938689, 4); -INSERT INTO history_operation_participants VALUES (12, 8589938689, 1); -INSERT INTO history_operation_participants VALUES (13, 8589942785, 4); -INSERT INTO history_operation_participants VALUES (14, 8589942785, 3); -INSERT INTO history_operation_participants VALUES (15, 8589946881, 2); -INSERT INTO history_operation_participants VALUES (16, 8589946881, 4); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 16, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (34359742465, 34359742464, 1, 7, '{"trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "authorize": false, "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (30064775169, 30064775168, 1, 7, '{"trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "authorize": true, "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (25769807873, 25769807872, 1, 7, '{"trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "authorize": true, "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (21474840577, 21474840576, 1, 6, '{"limit": "4000.0000000", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_operations VALUES (17179873281, 17179873280, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 5, '{"set_flags": [1], "set_flags_s": ["auth_required"]}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (12884910081, 12884910080, 1, 5, '{"set_flags": [2], "set_flags_s": ["auth_revocable"]}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589946881, 8589946880, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 34359742464, 2); -INSERT INTO history_transaction_participants VALUES (2, 34359742464, 1); -INSERT INTO history_transaction_participants VALUES (3, 30064775168, 1); -INSERT INTO history_transaction_participants VALUES (4, 30064775168, 2); -INSERT INTO history_transaction_participants VALUES (5, 25769807872, 1); -INSERT INTO history_transaction_participants VALUES (6, 25769807872, 3); -INSERT INTO history_transaction_participants VALUES (7, 21474840576, 2); -INSERT INTO history_transaction_participants VALUES (8, 17179873280, 3); -INSERT INTO history_transaction_participants VALUES (9, 12884905984, 1); -INSERT INTO history_transaction_participants VALUES (10, 12884910080, 1); -INSERT INTO history_transaction_participants VALUES (11, 8589938688, 4); -INSERT INTO history_transaction_participants VALUES (12, 8589938688, 1); -INSERT INTO history_transaction_participants VALUES (13, 8589942784, 4); -INSERT INTO history_transaction_participants VALUES (14, 8589942784, 3); -INSERT INTO history_transaction_participants VALUES (15, 8589946880, 4); -INSERT INTO history_transaction_participants VALUES (16, 8589946880, 2); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 16, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('3ce9fc1159c25adc62c9686792cd41f06908280b899744057856db33bafe75de', 8, 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934597, 100, 1, '2019-06-03 16:35:52.462154', '2019-06-03 16:35:52.462154', 34359742464, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAcAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAAAAAAAAAAAAfmQLe8AAABASafHp/zp11tF81MRvbAnx9gQNTXdLW4DmoIofkgoG+jJw/Xj/k+N5WvSjqGrGF33uB6KnD+wAfQIhf0/DlxpBQ==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAHAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAACAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAviDAAAAAIAAAAEAAAAAAAAAAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAACAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAviDAAAAAIAAAAFAAAAAAAAAAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAHAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAAAAAJUC+QAAAAAAEAAAAAAAAAAAAAAAEAAAAIAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAAAAAJUC+QAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAHAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+JwAAAAAgAAAAQAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+IMAAAAAgAAAAQAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{SafHp/zp11tF81MRvbAnx9gQNTXdLW4DmoIofkgoG+jJw/Xj/k+N5WvSjqGrGF33uB6KnD+wAfQIhf0/DlxpBQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('3f2aa00ba539e24ba9c0ba62f50318d8c7180f2d6757cc76e9984055c5e19ff4', 7, 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934596, 100, 1, '2019-06-03 16:35:52.478131', '2019-06-03 16:35:52.478132', 30064775168, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAcAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAEAAAAAAAAAAfmQLe8AAABA1TAQBu/2f7XHs/ctAJ5W7Ytk4jvQBopdO05zkSQoS8piu1mZm/tTvDTXEq/QUufpt/E8NBgKtNpcJXuMv5aPCw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAHAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAADAAAAAAAAAAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAAEAAAAAAAAAAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAFAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAAAAAJUC+QAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAAAAAJUC+QAAAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAGAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+LUAAAAAgAAAAMAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+JwAAAAAgAAAAMAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{1TAQBu/2f7XHs/ctAJ5W7Ytk4jvQBopdO05zkSQoS8piu1mZm/tTvDTXEq/QUufpt/E8NBgKtNpcJXuMv5aPCw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('3b666a253313fc7a0d241ee28064eec78aaa5ebd0a7c0ae7f85259e80fad029f', 6, 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934595, 100, 1, '2019-06-03 16:35:52.492865', '2019-06-03 16:35:52.492865', 25769807872, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAcAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAEAAAAAAAAAAfmQLe8AAABAL6czYFvSBhdVeD4fbXOHuXFa2CDqLpFfc+QJnoiPLt/23YViURGLyfg388FKMKsbNJEgmFsCJjtgl3fj7wr/Aw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAHAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvi1AAAAAIAAAACAAAAAAAAAAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvi1AAAAAIAAAADAAAAAAAAAAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+LUAAAAAgAAAAIAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{L6czYFvSBhdVeD4fbXOHuXFa2CDqLpFfc+QJnoiPLt/23YViURGLyfg388FKMKsbNJEgmFsCJjtgl3fj7wr/Aw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('b55d768a4e8e712da20efdee0e7d85f02948f9b6fd3ef2daefd3a5a147ecd63d', 5, 1, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 8589934593, 100, 1, '2019-06-03 16:35:52.506148', '2019-06-03 16:35:52.506149', 21474840576, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAlQL5AAAAAAAAAAAAFvFIhaAAAAQBlpm/6rv5JvbN2AKUSlH+4idIlX0cM678QXxK+il0u7z3KLORdzKSkLnS5WdLZlAB6iDmoKI5WbydQLktNtDQA=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAAAAAJUC+QAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GWmb/qu/km9s3YApRKUf7iJ0iVfRwzrvxBfEr6KXS7vPcos5F3MpKQudLlZ0tmUAHqIOagojlZvJ1AuS020NAA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 4, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:35:52.523591', '2019-06-03 16:35:52.523592', 17179873280, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{H2SYpbare/tB/Lw8x6QRvVNMjmLGqQjQGiBes63uA7XrZBuSHZ1JNR94Oi9zQ8Bp+ENfG2FUCWwu6OUGbKMEBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('7a707186a5cc36a0e520548ae511b53896c0391ce166d40da80588cbaae6aa2c', 3, 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934593, 100, 1, '2019-06-03 16:35:52.538445', '2019-06-03 16:35:52.538446', 12884905984, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+ZAt7wAAAEDBhDOsFWP2KCoZuJDRXuiNm0CjgVKLLtdZi/A3OfrCsgvX8izhAllXkRqrXyitSvGo3kQh6V/S/tnQbrYgHQQG', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{wYQzrBVj9igqGbiQ0V7ojZtAo4FSiy7XWYvwNzn6wrIL1/Is4QJZV5Eaq18orUrxqN5EIelf0v7Z0G62IB0EBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('c6bfdd93f1470df9dfa3ef95d57ba28cecace068d9f2bb040a79ffc7c5d96cb9', 3, 2, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934594, 100, 1, '2019-06-03 16:35:52.538629', '2019-06-03 16:35:52.538629', 12884910080, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+ZAt7wAAAEBVJkTQTFlpFKoMhcibMpdJ5khR91LY3zPQwv/e5Ov7XIcWKGIv5sDfgyhaK/x5WYWfawNWcc5fMlW7c/PxGOQJ', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjOAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjOAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{VSZE0ExZaRSqDIXImzKXSeZIUfdS2N8z0ML/3uTr+1yHFihiL+bA34MoWiv8eVmFn2sDVnHOXzJVu3Pz8RjkCQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:35:52.551045', '2019-06-03 16:35:52.551046', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GI0HD09huYapwZoBhnoPSfJeHNRJ1JcZJRJR/bKma9Pe9Reji1n3v5uJKRbSPrCNItai4reQNCclp24WC1uaAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:35:52.551274', '2019-06-03 16:35:52.551275', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDbUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{ZiqUoL68CjttFwjn2H17BhBFLcGGmhH6kruspiZpQ5mviF+iOyIIG1GTKHEHWfeCDAHynUADal2yDu8rMHnjAg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('90880ac53815dac8441add0220a7631ef5eac3d57c2e89634ea9b5203f61a8e4', 2, 3, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 3, 100, 1, '2019-06-03 16:35:52.551526', '2019-06-03 16:35:52.551527', 8589946880, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBdX4R/Ghzq8/r+u8PL+sNriHsS5lW1Vt+9eCe0nnWMNTzMgcUbarePbrpD2gr8DjVumcmpVH9wG2GXtWvwzXoL', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDbUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqyrQFLUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{XV+Efxoc6vP6/rvDy/rDa4h7EuZVtVbfvXgntJ51jDU8zIHFG2q3j266Q9oK/A41bpnJqVR/cBthl7Vr8M16Cw==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/allow_trust.rb b/services/horizon/internal/test/scenarios/allow_trust.rb deleted file mode 100644 index 3d6201e681..0000000000 --- a/services/horizon/internal/test/scenarios/allow_trust.rb +++ /dev/null @@ -1,22 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :usd_gateway -create_account :scott -create_account :andrew - -close_ledger - -require_trust_auth :usd_gateway -set_flags :usd_gateway, [:auth_revocable_flag] - -close_ledger - -trust :scott, :usd_gateway, "USD" ; close_ledger -change_trust :andrew, :usd_gateway, "USD", 4000 ; close_ledger -allow_trust :usd_gateway, :scott, "USD" ; close_ledger -allow_trust :usd_gateway, :andrew, "USD" ; close_ledger -revoke_trust :usd_gateway, :andrew, "USD" ; close_ledger - -close_ledger diff --git a/services/horizon/internal/test/scenarios/asset_stat_account-core.sql b/services/horizon/internal/test/scenarios/asset_stat_account-core.sql deleted file mode 100644 index 4af103fbce..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_account-core.sql +++ /dev/null @@ -1,739 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999959999999600, 4, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 9999999900, 8589934593, 0, NULL, '', 'AQAAAA==', 3, 3, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 9999999800, 8589934594, 0, NULL, '', 'AQAAAA==', 2, 3, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2', 9999999800, 8589934594, 0, NULL, 'YWJjLmNvbQ==', 'AQAAAA==', 1, 3, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 9999999900, 8589934593, 0, NULL, 'ZXhhbXBsZS5jb20=', 'AQAAAA==', 0, 3, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('ee372db805c4649d12da0db5f7ae9f6f5fd73f6fc6c1492f007ea75f7f16049b', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '10c929c404fb221210dbbe2e30b30a03298ba201b14adaaf33e71ecf244404e0', 2, 1559579880, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZscGG1OkysoQqFH5/E8iDeQerrqbg9nZyFDtaAzodV6gAAAAAXPVM6AAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP3+y2Yo1bFnwdbq5SkW6ZHGyFTUCOM0jd0OrEn834kcQySnEBPsiEhDbvi4wswoDKYuiAbFK2q8z5x7PJEQE4AAAAAIN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('b840b422497ef10629bc47af2c80e5ab0709016478a7e911fffecca5cabae754', 'ee372db805c4649d12da0db5f7ae9f6f5fd73f6fc6c1492f007ea75f7f16049b', '7411283d436f3fd4650ed049dd7a9991d45b4da7df6639e0a9064d4805666d53', 3, 1559579881, 'AAAAC+43LbgFxGSdEtoNtfeun29f1z9vxsFJLwB+p19/FgSbV0Mp7QsV07OIjyMFH7yF8uqcYMo35M03/y43tybrExQAAAAAXPVM6QAAAAAAAAAAY8B/JRimfMVbhaV6D0lsYPxgvQSH1XDQ4SJj/7cfxqt0ESg9Q28/1GUO0EndepmR1FtNp99mOeCpBk1IBWZtUwAAAAMN4Lazp2QAAAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GCBWDZSRE6DSDJAECXR5CDN6F5MYKDJSOYJBZY3KMXH2GMK5VVFSCHQH', 2, 'AAAAAINh5lEnhyGkBBXj0Q2+L1mFDTJ2EhzjamXPozFdrUshAAAAAAAAAAIAAAACAAAAAQAAAEixwYbU6TKyhCoUfn8TyIN5B6uupuD2dnIUO1oDOh1XqAAAAABc9UzoAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABYpy7+qYpe/uPxDUOrzUQt3UA5cVP4WVMWaLb6bBcnjkAAABA3iLLlMYEYTpB8w4Q7OXGOu2gIGMSYW34OuYArYBT54+5HkbRa2L5IODI+pGP8AA1FhrKTvaPsy33UB/GAUGWCg=='); -INSERT INTO scphistory VALUES ('GCBWDZSRE6DSDJAECXR5CDN6F5MYKDJSOYJBZY3KMXH2GMK5VVFSCHQH', 3, 'AAAAAINh5lEnhyGkBBXj0Q2+L1mFDTJ2EhzjamXPozFdrUshAAAAAAAAAAMAAAACAAAAAQAAADBXQyntCxXTs4iPIwUfvIXy6pxgyjfkzTf/Lje3JusTFAAAAABc9UzpAAAAAAAAAAAAAAABYpy7+qYpe/uPxDUOrzUQt3UA5cVP4WVMWaLb6bBcnjkAAABA9vUPsLBKUz738nYw3xhf9MuW1T8vIlkDj17y5lxH+2+qJSdLksB4v/77MrGNSRlixq5VCNz68+6Wo/lOUsgfBg=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('629cbbfaa6297bfb8fc4350eaf3510b77500e5c54fe1654c59a2dbe9b05c9e39', 3, 'AAAAAQAAAAEAAAAAg2HmUSeHIaQEFePRDb4vWYUNMnYSHONqZc+jMV2tSyEAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAACDYeZRJ4chpAQV49ENvi9ZhQ0ydhIc42plz6MxXa1LIQAAAAAAAAADAAAAA2Kcu/qmKXv7j8Q1Dq81ELd1AOXFT+FlTFmi2+mwXJ45AAAAAQAAAJhXQyntCxXTs4iPIwUfvIXy6pxgyjfkzTf/Lje3JusTFAAAAABc9UzpAAAAAAAAAAEAAAAAg2HmUSeHIaQEFePRDb4vWYUNMnYSHONqZc+jMV2tSyEAAABA494Zhr4+3RqoKwW+/OW75EKMQUOSDqcvPowllkSELvn/BT1swTvOoOOxAL1sJFtXlUhX6ZH40ziw5UgGYg2IDQAAAAEAAACYV0Mp7QsV07OIjyMFH7yF8uqcYMo35M03/y43tybrExQAAAAAXPVM6QAAAAAAAAABAAAAAINh5lEnhyGkBBXj0Q2+L1mFDTJ2EhzjamXPozFdrUshAAAAQOPeGYa+Pt0aqCsFvvzlu+RCjEFDkg6nLz6MJZZEhC75/wU9bME7zqDjsQC9bCRbV5VIV+mR+NM4sOVIBmINiA0AAABA4FvRTAaEr3vrEE9GEJTeyeNWZKeQfriN9H9Zm6E6bdv0EZcmD9ka3Gry49YCUwc+5H4/ZwOKPKZoLIXlpf91DQAAAACDYeZRJ4chpAQV49ENvi9ZhQ0ydhIc42plz6MxXa1LIQAAAAAAAAADAAAAAgAAAAEAAAAwV0Mp7QsV07OIjyMFH7yF8uqcYMo35M03/y43tybrExQAAAAAXPVM6QAAAAAAAAAAAAAAAWKcu/qmKXv7j8Q1Dq81ELd1AOXFT+FlTFmi2+mwXJ45AAAAQPb1D7CwSlM+9/J2MN8YX/TLltU/LyJZA49e8uZcR/tvqiUnS5LAeL/++zKxjUkZYsauVQjc+vPulqP5TlLIHwYAAAAB7jctuAXEZJ0S2g21966fb1/XP2/GwUkvAH6nX38WBJsAAAAGAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbxSIWgAAAEBTN2f3Ze/XH3TWj7Q9wf3r9M7+8ftPryhxFB/A6lwR5ICiidCl24UqDbO153ccgqd3cMsGqCtE6JZywBKQb88LAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+ZAt7wAAAEBzzvdpZTqxPYVXalv5Mxbfw1KQbtHkOweJYU2iEU9qX/9pWN01cGBcA3gLG3pJyo11wbEy6q26Bo4Lq6Mky+cKAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbxSIWgAAAEAhQmiMSoK3bdG8/cMO3aYhJZWGhRzP9NCVmFSZaWZ7oEp7RysFJShIL2wAw+CYYevaS3VQ4PlG9SblNTLOOh8AAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAC2V4YW1wbGUuY29tAAAAAAAAAAAAAAAAAa7kvkwAAABAyfE1Bq+ojZFnfczsV/5ZPFNT9FRpeVdjfR8KEX8McvuNFPgKRV32p8p5Rfw+lx3JC/Wo4Ap5bQolJGqNoGeKBwAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAGQAAAACAAAAAgAAAAAAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAdhYmMuY29tAAAAAAAAAAAAAAAAASdyItUAAABA7mPZK+Aa8yL+8m5PVudcUuLf2zAz+P35T6BalWf5nstdzUv5wCeStJ+OBScceL7o/VucQ0Pe7ye7AJ3kOjWQCwAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAGQAAAACAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASdyItUAAABAsFVOzo691F4kssPIlH/NsZLqHpCaEWT1T80A+yOTqMSrHBTkMVdIC6PP44xyf/ViohgVkmSl6mmh0/s4iuPEDAAAAAEAAAABAAAAAQAAAACDYeZRJ4chpAQV49ENvi9ZhQ0ydhIc42plz6MxXa1LIQAAAAA='); -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastclosedledger ', 'b840b422497ef10629bc47af2c80e5ab0709016478a7e911fffecca5cabae754'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 3, - "currentBuckets": [ - { - "curr": "02e92233811202873269c06b024e409d67443160ffabdee28c8c48a75210002c", - "next": { - "state": 0 - }, - "snap": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 1, - "output": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('b2a227c39c64a44fc7abd4c96819456f0399906d12c476d70b402bfdb296d6a3', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('36be70fb7782f9801cdcedc1206e21f99293c99860a15e441f4749747a0a37ab', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('90880ac53815dac8441add0220a7631ef5eac3d57c2e89634ea9b5203f61a8e4', 2, 3, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('d55be296c632a0da12694260ee59de3b3056116f308df1b3d867384ba4bc501f', 2, 4, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/5wAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('303f80a93d90ac54f6c19cba102c15691c5074d0a45bfda94b3cc14841aefba4', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('9583238fc99d27f44f6b60e36110b766f521fbcabb68f09e1dab91c402e30658', 3, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('c54713f50ce473f861155482c2a068e6d10491a6bf973022b5fc799e43668424', 3, 3, 'AAAAAgAAAAMAAAACAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('7566bd8b48d5baf686c899d4f8e732ce16ad1a4a4fdf5bc54c5a5f636dbaf093', 3, 4, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('e55a573c27be38f6eef4ca4522540e46961f2ddc9b0ea696114380cd95ba4072', 3, 5, 'AAAAAgAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('43ce5c493b66081919bc5c4f9a80a4c26756129fc0e7bd3b3d6baa1eaea16720', 3, 6, 'AAAAAgAAAAMAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('b2a227c39c64a44fc7abd4c96819456f0399906d12c476d70b402bfdb296d6a3', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEDt3KwmaPuPdFSUxdAFeb6OQetyQKIWazlbSMMhmHKNLD4sqhEqUZcQP0l+X/Op+osWmN6+FUYbsz75Q2jG4vMM', 'sqInw5xkpE/Hq9TJaBlFbwOZkG0SxHbXC0Ar/bKW1qMAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/5wAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBpwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('36be70fb7782f9801cdcedc1206e21f99293c99860a15e441f4749747a0a37ab', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvkAAAAAAAAAAABVvwF9wAAAEA3xWbxPObnZMiBGFKLJQufJLguTsHJxyAsPP5F9Zj561aXnvN/HVRJbFsEcitGbgi9dWVdKRYvmVWCizIdmLID', 'Nr5w+3eC+YAc3O3BIG4h+ZKTyZhgoV5EH0dJdHoKN6sAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBpwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDZwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('90880ac53815dac8441add0220a7631ef5eac3d57c2e89634ea9b5203f61a8e4', 2, 3, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBdX4R/Ghzq8/r+u8PL+sNriHsS5lW1Vt+9eCe0nnWMNTzMgcUbarePbrpD2gr8DjVumcmpVH9wG2GXtWvwzXoL', 'kIgKxTgV2shEGt0CIKdjHvXqw9V8LoljTqm1ID9hqOQAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDZwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqyrQFJwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('d55be296c632a0da12694260ee59de3b3056116f308df1b3d867384ba4bc501f', 2, 4, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAECCLWxqLddjkFkxGzPyIWRq3DsxF75d7ulJo2ZJxS739M7vVVMPCFDgy7IS8iCmRZ6/65y7IyrJlEEfzJiavYEG', '1VvilsYyoNoSaUJg7lneOzBWEW8wjfGz2Gc4S6S8UB8AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqyrQFJwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqpXNG5wAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('303f80a93d90ac54f6c19cba102c15691c5074d0a45bfda94b3cc14841aefba4', 3, 1, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+ZAt7wAAAEBzzvdpZTqxPYVXalv5Mxbfw1KQbtHkOweJYU2iEU9qX/9pWN01cGBcA3gLG3pJyo11wbEy6q26Bo4Lq6Mky+cK', 'MD+AqT2QrFT2wZy6ECwVaRxQdNCkW/2pSzzBSEGu+6QAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('9583238fc99d27f44f6b60e36110b766f521fbcabb68f09e1dab91c402e30658', 3, 2, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbxSIWgAAAEBTN2f3Ze/XH3TWj7Q9wf3r9M7+8ftPryhxFB/A6lwR5ICiidCl24UqDbO153ccgqd3cMsGqCtE6JZywBKQb88L', 'lYMjj8mdJ/RPa2DjYRC3ZvUh+8q7aPCeHauRxALjBlgAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvjOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvjOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAAAAAAIAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('c54713f50ce473f861155482c2a068e6d10491a6bf973022b5fc799e43668424', 3, 3, 'AAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJ3Ii1QAAAECwVU7Ojr3UXiSyw8iUf82xkuoekJoRZPVPzQD7I5OoxKscFOQxV0gLo8/jjHJ/9WKiGBWSZKXqaaHT+ziK48QM', 'xUcT9Qzkc/hhFVSCwqBo5tEEkaa/lzAitfx5nkNmhCQAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvjOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvjOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('7566bd8b48d5baf686c899d4f8e732ce16ad1a4a4fdf5bc54c5a5f636dbaf093', 3, 4, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAC2V4YW1wbGUuY29tAAAAAAAAAAAAAAAAAa7kvkwAAABAyfE1Bq+ojZFnfczsV/5ZPFNT9FRpeVdjfR8KEX8McvuNFPgKRV32p8p5Rfw+lx3JC/Wo4Ap5bQolJGqNoGeKBw==', 'dWa9i0jVuvaGyJnU+OcyzhatGkpP31vFTFpfY2268JMAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAALZXhhbXBsZS5jb20AAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('e55a573c27be38f6eef4ca4522540e46961f2ddc9b0ea696114380cd95ba4072', 3, 5, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbxSIWgAAAEAhQmiMSoK3bdG8/cMO3aYhJZWGhRzP9NCVmFSZaWZ7oEp7RysFJShIL2wAw+CYYevaS3VQ4PlG9SblNTLOOh8A', '5VpXPCe+OPbu9MpFIlQORpYfLdybDqaWEUOAzZW6QHIAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvjOAAAAAIAAAABAAAAAAAAAAAAAAACAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvjOAAAAAIAAAACAAAAAAAAAAAAAAACAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAAAAAAIAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAAAAAAIAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('43ce5c493b66081919bc5c4f9a80a4c26756129fc0e7bd3b3d6baa1eaea16720', 3, 6, 'AAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAB2FiYy5jb20AAAAAAAAAAAAAAAABJ3Ii1QAAAEDuY9kr4BrzIv7ybk9W51xS4t/bMDP4/flPoFqVZ/mey13NS/nAJ5K0n44FJxx4vuj9W5xDQ97vJ7sAneQ6NZAL', 'Q85cSTtmCBkZvFxPmoCkwmdWEp/A5707PWuqHq6hZyAAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvjOAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvjOAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAAAAAAEAAAAHYWJjLmNvbQABAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_account-horizon.sql b/services/horizon/internal/test/scenarios/asset_stat_account-horizon.sql deleted file mode 100644 index 3d8849f1e3..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_account-horizon.sql +++ /dev/null @@ -1,997 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_accounts VALUES (2, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_accounts VALUES (3, 'GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2'); -INSERT INTO history_accounts VALUES (4, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (5, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 5, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 1, false); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 12884905985, 1, 6, '{"auth_required_flag": true, "auth_revocable_flag": true}'); -INSERT INTO history_effects VALUES (2, 12884910081, 1, 6, '{"auth_revocable_flag": true}'); -INSERT INTO history_effects VALUES (3, 12884914177, 1, 6, '{"auth_required_flag": true}'); -INSERT INTO history_effects VALUES (4, 12884918273, 1, 5, '{"home_domain": "example.com"}'); -INSERT INTO history_effects VALUES (3, 12884926465, 1, 5, '{"home_domain": "abc.com"}'); -INSERT INTO history_effects VALUES (4, 8589938689, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (5, 8589938689, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (4, 8589938689, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (5, 8589942785, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 3, 10, '{"weight": 1, "public_key": "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"}'); -INSERT INTO history_effects VALUES (2, 8589946881, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (5, 8589946881, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 8589946881, 3, 10, '{"weight": 1, "public_key": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON"}'); -INSERT INTO history_effects VALUES (1, 8589950977, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (5, 8589950977, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589950977, 3, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (3, 'b840b422497ef10629bc47af2c80e5ab0709016478a7e911fffecca5cabae754', 'ee372db805c4649d12da0db5f7ae9f6f5fd73f6fc6c1492f007ea75f7f16049b', 6, 6, '2019-06-03 16:38:01', '2019-06-03 16:38:03.053035', '2019-06-03 16:38:03.053035', 12884901888, 16, 1000000000000000000, 1000, 100, 100000000, 1000000, 11, 'AAAAC+43LbgFxGSdEtoNtfeun29f1z9vxsFJLwB+p19/FgSbV0Mp7QsV07OIjyMFH7yF8uqcYMo35M03/y43tybrExQAAAAAXPVM6QAAAAAAAAAAY8B/JRimfMVbhaV6D0lsYPxgvQSH1XDQ4SJj/7cfxqt0ESg9Q28/1GUO0EndepmR1FtNp99mOeCpBk1IBWZtUwAAAAMN4Lazp2QAAAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 6, 0); -INSERT INTO history_ledgers VALUES (2, 'ee372db805c4649d12da0db5f7ae9f6f5fd73f6fc6c1492f007ea75f7f16049b', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 4, 4, '2019-06-03 16:38:00', '2019-06-03 16:38:03.072448', '2019-06-03 16:38:03.072448', 8589934592, 16, 1000000000000000000, 400, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZscGG1OkysoQqFH5/E8iDeQerrqbg9nZyFDtaAzodV6gAAAAAXPVM6AAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP3+y2Yo1bFnwdbq5SkW6ZHGyFTUCOM0jd0OrEn834kcQySnEBPsiEhDbvi4wswoDKYuiAbFK2q8z5x7PJEQE4AAAAAIN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 4, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:38:03.088013', '2019-06-03 16:38:03.088013', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 12884905985, 1); -INSERT INTO history_operation_participants VALUES (2, 12884910081, 2); -INSERT INTO history_operation_participants VALUES (3, 12884914177, 3); -INSERT INTO history_operation_participants VALUES (4, 12884918273, 4); -INSERT INTO history_operation_participants VALUES (5, 12884922369, 2); -INSERT INTO history_operation_participants VALUES (6, 12884926465, 3); -INSERT INTO history_operation_participants VALUES (7, 8589938689, 5); -INSERT INTO history_operation_participants VALUES (8, 8589938689, 4); -INSERT INTO history_operation_participants VALUES (9, 8589942785, 5); -INSERT INTO history_operation_participants VALUES (10, 8589942785, 3); -INSERT INTO history_operation_participants VALUES (11, 8589946881, 5); -INSERT INTO history_operation_participants VALUES (12, 8589946881, 2); -INSERT INTO history_operation_participants VALUES (13, 8589950977, 5); -INSERT INTO history_operation_participants VALUES (14, 8589950977, 1); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 14, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 5, '{"set_flags": [1, 2], "set_flags_s": ["auth_required", "auth_revocable"]}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (12884910081, 12884910080, 1, 5, '{"set_flags": [2], "set_flags_s": ["auth_revocable"]}', 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_operations VALUES (12884914177, 12884914176, 1, 5, '{"set_flags": [1], "set_flags_s": ["auth_required"]}', 'GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2'); -INSERT INTO history_operations VALUES (12884918273, 12884918272, 1, 5, '{"home_domain": "example.com"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (12884922369, 12884922368, 1, 5, '{}', 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_operations VALUES (12884926465, 12884926464, 1, 5, '{"home_domain": "abc.com"}', 'GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589946881, 8589946880, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589950977, 8589950976, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 12884905984, 1); -INSERT INTO history_transaction_participants VALUES (2, 12884910080, 2); -INSERT INTO history_transaction_participants VALUES (3, 12884914176, 3); -INSERT INTO history_transaction_participants VALUES (4, 12884918272, 4); -INSERT INTO history_transaction_participants VALUES (5, 12884922368, 2); -INSERT INTO history_transaction_participants VALUES (6, 12884926464, 3); -INSERT INTO history_transaction_participants VALUES (7, 8589938688, 5); -INSERT INTO history_transaction_participants VALUES (8, 8589938688, 4); -INSERT INTO history_transaction_participants VALUES (9, 8589942784, 5); -INSERT INTO history_transaction_participants VALUES (10, 8589942784, 3); -INSERT INTO history_transaction_participants VALUES (11, 8589946880, 5); -INSERT INTO history_transaction_participants VALUES (12, 8589946880, 2); -INSERT INTO history_transaction_participants VALUES (13, 8589950976, 5); -INSERT INTO history_transaction_participants VALUES (14, 8589950976, 1); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 14, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('303f80a93d90ac54f6c19cba102c15691c5074d0a45bfda94b3cc14841aefba4', 3, 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934593, 100, 1, '2019-06-03 16:38:03.053201', '2019-06-03 16:38:03.053201', 12884905984, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+ZAt7wAAAEBzzvdpZTqxPYVXalv5Mxbfw1KQbtHkOweJYU2iEU9qX/9pWN01cGBcA3gLG3pJyo11wbEy6q26Bo4Lq6Mky+cK', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAMAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{c873aWU6sT2FV2pb+TMW38NSkG7R5DsHiWFNohFPal//aVjdNXBgXAN4Cxt6ScqNdcGxMuqtugaOC6ujJMvnCg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('9583238fc99d27f44f6b60e36110b766f521fbcabb68f09e1dab91c402e30658', 3, 2, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 8589934593, 100, 1, '2019-06-03 16:38:03.053458', '2019-06-03 16:38:03.053458', 12884910080, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbxSIWgAAAEBTN2f3Ze/XH3TWj7Q9wf3r9M7+8ftPryhxFB/A6lwR5ICiidCl24UqDbO153ccgqd3cMsGqCtE6JZywBKQb88L', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvjOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvjOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAAAAAAIAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{Uzdn92Xv1x901o+0PcH96/TO/vH7T68ocRQfwOpcEeSAoonQpduFKg2zted3HIKnd3DLBqgrROiWcsASkG/PCw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('c54713f50ce473f861155482c2a068e6d10491a6bf973022b5fc799e43668424', 3, 3, 'GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2', 8589934593, 100, 1, '2019-06-03 16:38:03.053577', '2019-06-03 16:38:03.053577', 12884914176, 'AAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJ3Ii1QAAAECwVU7Ojr3UXiSyw8iUf82xkuoekJoRZPVPzQD7I5OoxKscFOQxV0gLo8/jjHJ/9WKiGBWSZKXqaaHT+ziK48QM', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvjOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvjOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{sFVOzo691F4kssPIlH/NsZLqHpCaEWT1T80A+yOTqMSrHBTkMVdIC6PP44xyf/ViohgVkmSl6mmh0/s4iuPEDA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('7566bd8b48d5baf686c899d4f8e732ce16ad1a4a4fdf5bc54c5a5f636dbaf093', 3, 4, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:38:03.053695', '2019-06-03 16:38:03.053695', 12884918272, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAC2V4YW1wbGUuY29tAAAAAAAAAAAAAAAAAa7kvkwAAABAyfE1Bq+ojZFnfczsV/5ZPFNT9FRpeVdjfR8KEX8McvuNFPgKRV32p8p5Rfw+lx3JC/Wo4Ap5bQolJGqNoGeKBw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAALZXhhbXBsZS5jb20AAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{yfE1Bq+ojZFnfczsV/5ZPFNT9FRpeVdjfR8KEX8McvuNFPgKRV32p8p5Rfw+lx3JC/Wo4Ap5bQolJGqNoGeKBw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('e55a573c27be38f6eef4ca4522540e46961f2ddc9b0ea696114380cd95ba4072', 3, 5, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 8589934594, 100, 1, '2019-06-03 16:38:03.053818', '2019-06-03 16:38:03.053818', 12884922368, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbxSIWgAAAEAhQmiMSoK3bdG8/cMO3aYhJZWGhRzP9NCVmFSZaWZ7oEp7RysFJShIL2wAw+CYYevaS3VQ4PlG9SblNTLOOh8A', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvjOAAAAAIAAAABAAAAAAAAAAAAAAACAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvjOAAAAAIAAAACAAAAAAAAAAAAAAACAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAAAAAAIAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAAAAAAIAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{IUJojEqCt23RvP3DDt2mISWVhoUcz/TQlZhUmWlme6BKe0crBSUoSC9sAMPgmGHr2kt1UOD5RvUm5TUyzjofAA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('43ce5c493b66081919bc5c4f9a80a4c26756129fc0e7bd3b3d6baa1eaea16720', 3, 6, 'GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2', 8589934594, 100, 1, '2019-06-03 16:38:03.053925', '2019-06-03 16:38:03.053925', 12884926464, 'AAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAB2FiYy5jb20AAAAAAAAAAAAAAAABJ3Ii1QAAAEDuY9kr4BrzIv7ybk9W51xS4t/bMDP4/flPoFqVZ/mey13NS/nAJ5K0n44FJxx4vuj9W5xDQ97vJ7sAneQ6NZAL', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvjOAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvjOAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAAAAAAEAAAAHYWJjLmNvbQABAAAAAAAAAAAAAAAAAAAA', 'AAAAAgAAAAMAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{7mPZK+Aa8yL+8m5PVudcUuLf2zAz+P35T6BalWf5nstdzUv5wCeStJ+OBScceL7o/VucQ0Pe7ye7AJ3kOjWQCw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('b2a227c39c64a44fc7abd4c96819456f0399906d12c476d70b402bfdb296d6a3', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:38:03.072644', '2019-06-03 16:38:03.072645', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEDt3KwmaPuPdFSUxdAFeb6OQetyQKIWazlbSMMhmHKNLD4sqhEqUZcQP0l+X/Op+osWmN6+FUYbsz75Q2jG4vMM', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/5wAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBpwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{7dysJmj7j3RUlMXQBXm+jkHrckCiFms5W0jDIZhyjSw+LKoRKlGXED9Jfl/zqfqLFpjevhVGG7M++UNoxuLzDA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('36be70fb7782f9801cdcedc1206e21f99293c99860a15e441f4749747a0a37ab', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:38:03.072838', '2019-06-03 16:38:03.072839', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvkAAAAAAAAAAABVvwF9wAAAEA3xWbxPObnZMiBGFKLJQufJLguTsHJxyAsPP5F9Zj561aXnvN/HVRJbFsEcitGbgi9dWVdKRYvmVWCizIdmLID', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBpwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDZwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{N8Vm8Tzm52TIgRhSiyULnyS4Lk7ByccgLDz+RfWY+etWl57zfx1USWxbBHIrRm4IvXVlXSkWL5lVgosyHZiyAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('90880ac53815dac8441add0220a7631ef5eac3d57c2e89634ea9b5203f61a8e4', 2, 3, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 3, 100, 1, '2019-06-03 16:38:03.072966', '2019-06-03 16:38:03.072966', 8589946880, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBdX4R/Ghzq8/r+u8PL+sNriHsS5lW1Vt+9eCe0nnWMNTzMgcUbarePbrpD2gr8DjVumcmpVH9wG2GXtWvwzXoL', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDZwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqyrQFJwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{XV+Efxoc6vP6/rvDy/rDa4h7EuZVtVbfvXgntJ51jDU8zIHFG2q3j266Q9oK/A41bpnJqVR/cBthl7Vr8M16Cw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('d55be296c632a0da12694260ee59de3b3056116f308df1b3d867384ba4bc501f', 2, 4, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 4, 100, 1, '2019-06-03 16:38:03.073086', '2019-06-03 16:38:03.073086', 8589950976, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAECCLWxqLddjkFkxGzPyIWRq3DsxF75d7ulJo2ZJxS739M7vVVMPCFDgy7IS8iCmRZ6/65y7IyrJlEEfzJiavYEG', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqyrQFJwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqpXNG5wAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/5wAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{gi1sai3XY5BZMRsz8iFkatw7MRe+Xe7pSaNmScUu9/TO71VTDwhQ4MuyEvIgpkWev+ucuyMqyZRBH8yYmr2BBg==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_account.rb b/services/horizon/internal/test/scenarios/asset_stat_account.rb deleted file mode 100644 index 74479ec32b..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_account.rb +++ /dev/null @@ -1,23 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :scott -create_account :bartek -create_account :andrew -create_account :usd_gateway -close_ledger - -# :scott has no flags set -set_home_domain :scott, "example.com" - -set_flags :bartek, [:auth_required_flag] -set_home_domain :bartek, "abc.com" - -set_flags :andrew, [:auth_revocable_flag] -set_home_domain :andrew, "" - -set_flags :usd_gateway, [:auth_required_flag, :auth_revocable_flag] -# no home domain set - -close_ledger diff --git a/services/horizon/internal/test/scenarios/asset_stat_operations-core.sql b/services/horizon/internal/test/scenarios/asset_stat_operations-core.sql deleted file mode 100644 index 9a18a5c103..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_operations-core.sql +++ /dev/null @@ -1,733 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999959999999600, 4, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCFZWN3AOVFQM2BZTZX7P47WSI4QMGJC62LILPKODTNDLVKZZNA5BQJ3', 10000000000, 8589934592, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GAB7GMQPJ5YY2E4UJMLNAZPDEUKPK4AAIPRXIZHKZGUIRC6FP2LAQSDN', 10000000000, 8589934592, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCSX4PDUZP3BL522ZVMFXCEJ55NKEOHEMII7PSMJZNAAESJ444GSSJMO', 9999999900, 8589934593, 1, NULL, '', 'AQAAAA==', 0, 3, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCYLTPOU7IVYHHA3XKQF4YB4W4ZWHFERMOQ7K47IWANKNBFBNJJNEOG5', 9999999900, 8589934593, 1, NULL, '', 'AQAAAA==', 0, 3, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('0dc75706bf9958fdd2326dca73c429ba839b3565bf43959c972460e2e741d52b', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '4a4bacf70ee86458779f2ff4e54fd8710a5434bf0d58307e88dfc105d9038419', 2, 1559579667, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZAl4xVs7p/dHViPjkvi2jwT71A96KVxBFTiVfkaPKPPMAAAAAXPVMEwAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAi4Ue20vNo0cmNykBLoF1m6yPEvTdv3MfCquWXwc7NpxKS6z3DuhkWHefL/TlT9hxClQ0vw1YMH6I38EF2QOEGQAAAAIN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('18cbb37ab371dcb900c846a1fd8000c2a09c68ea23ba43858c0deed05df2d9cd', '0dc75706bf9958fdd2326dca73c429ba839b3565bf43959c972460e2e741d52b', '255d96414b66ee031f96ac428fd27dfeea5137eab44cd9e878180d9bac6c1a57', 3, 1559579668, 'AAAACw3HVwa/mVj90jJtynPEKbqDmzVlv0OVnJckYOLnQdUrEfAYHWfAn84njhZoaIFZlI1KsNuRDfce9f6vVb64XJ0AAAAAXPVMFAAAAAAAAAAAhSD66Lhzb7ZNorUyzTQqB11nd0srMHPv8kaiQLT5higlXZZBS2buAx+WrEKP0n3+6lE36rRM2eh4GA2brGwaVwAAAAMN4Lazp2QAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GCHSPAWNLVYEOJ5QIWN5DRT2KFGOFRRXPBMGGD2C2X2ZCFXBXIN32XTI', 2, 'AAAAAI8ngs1dcEcnsEWb0cZ6UUzixjd4WGMPQtX1kRbhuhu9AAAAAAAAAAIAAAACAAAAAQAAAEgCXjFWzun90dWI+OS+LaPBPvUD3opXEEVOJV+Ro8o88wAAAABc9UwTAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABZgcwdPbe7XdMFPZ8j87J0zEqCP++XEJkH0Ddvf9ZmLIAAABA8ubzb3l+hx93XhuSnGYNuHPuKwYEo46Lz/ZrK1ghbHD99B5+JzOokzf8BD+q8XBrBz8A0k4xF7H79EoOZ/QlDA=='); -INSERT INTO scphistory VALUES ('GCHSPAWNLVYEOJ5QIWN5DRT2KFGOFRRXPBMGGD2C2X2ZCFXBXIN32XTI', 3, 'AAAAAI8ngs1dcEcnsEWb0cZ6UUzixjd4WGMPQtX1kRbhuhu9AAAAAAAAAAMAAAACAAAAAQAAADAR8BgdZ8CfzieOFmhogVmUjUqw25EN9x71/q9VvrhcnQAAAABc9UwUAAAAAAAAAAAAAAABZgcwdPbe7XdMFPZ8j87J0zEqCP++XEJkH0Ddvf9ZmLIAAABAaED18lLRkFoinjFqAE7h52NkZQKxOKA84a7hHsj9V3xBjc6g+MGz67Db7Cxo7wFPbRTwAnBJN+n9DY9t93eBBg=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('66073074f6deed774c14f67c8fcec9d3312a08ffbe5c42641f40ddbdff5998b2', 3, 'AAAAAQAAAAEAAAAAjyeCzV1wRyewRZvRxnpRTOLGN3hYYw9C1fWRFuG6G70AAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastclosedledger ', '18cbb37ab371dcb900c846a1fd8000c2a09c68ea23ba43858c0deed05df2d9cd'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 3, - "currentBuckets": [ - { - "curr": "f21f6db99c8ac25b8bf672e8f75360230a9864a52509699e1ba03a21d7d884bd", - "next": { - "state": 0 - }, - "snap": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 1, - "output": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAACPJ4LNXXBHJ7BFm9HGelFM4sY3eFhjD0LV9ZEW4bobvQAAAAAAAAADAAAAA2YHMHT23u13TBT2fI/OydMxKgj/vlxCZB9A3b3/WZiyAAAAAQAAAJgR8BgdZ8CfzieOFmhogVmUjUqw25EN9x71/q9VvrhcnQAAAABc9UwUAAAAAAAAAAEAAAAAjyeCzV1wRyewRZvRxnpRTOLGN3hYYw9C1fWRFuG6G70AAABAs4etSBgrBvS2X4JMge/H2K0HB3HoU/e8RNnqPmHNjyQBpxRSNsNUk8alITPvmo3nA4fyvJC4QlVUySFY+rvHCgAAAAEAAACYEfAYHWfAn84njhZoaIFZlI1KsNuRDfce9f6vVb64XJ0AAAAAXPVMFAAAAAAAAAABAAAAAI8ngs1dcEcnsEWb0cZ6UUzixjd4WGMPQtX1kRbhuhu9AAAAQLOHrUgYKwb0tl+CTIHvx9itBwdx6FP3vETZ6j5hzY8kAacUUjbDVJPGpSEz75qN5wOH8ryQuEJVVMkhWPq7xwoAAABA+IBefeM9vDmssNIeMVdovciRH8A3ilS42BRnH0zck8ZwZ3LtFhJlY45HIDC/TVMBZA5WNTQUWmoUY/OLCCI5DgAAAACPJ4LNXXBHJ7BFm9HGelFM4sY3eFhjD0LV9ZEW4bobvQAAAAAAAAADAAAAAgAAAAEAAAAwEfAYHWfAn84njhZoaIFZlI1KsNuRDfce9f6vVb64XJ0AAAAAXPVMFAAAAAAAAAAAAAAAAWYHMHT23u13TBT2fI/OydMxKgj/vlxCZB9A3b3/WZiyAAAAQGhA9fJS0ZBaIp4xagBO4edjZGUCsTigPOGu4R7I/Vd8QY3OoPjBs+uw2+wsaO8BT20U8AJwSTfp/Q2Pbfd3gQYAAAABDcdXBr+ZWP3SMm3Kc8QpuoObNWW/Q5WclyRg4udB1SsAAAACAAAAALC5vdT6K4OcG7qgXmA8tzNjlJFjofVz6LAapoShalLSAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAACLmzdgdUsGaDmeb/fz9pI5Bhki9paFvU4c2jXVWctB0H//////////AAAAAAAAAAGhalLSAAAAQCnZlvEITlesuWctD/z9XMvJSujWqCYBR5F6tzeyStpEqiQXeyOEtJrGO3ulubYfi4kuwxETF5+CORR/2+0IKA4AAAAApX48dMv2FfdazVhbiInvWqI45GIR98mJy0ACSTznDSkAAABkAAAAAgAAAAEAAAAAAAAAAAAAAAEAAAAAAAAABgAAAAFVU0QAAAAAAAPzMg9PcY0TlEsW0GXjJRT1cABD43Rk6smoiIvFfpYIf/////////8AAAAAAAAAATznDSkAAABACD1Q1IWv8UnBj7YBwTe/bL9Tit2zfm4Mnzy8/z7qVZHEtNlkl9mSQ9CG1IbRVnjgc7c4sswvgy/6kYuGBeiaAAAAAAEAAAABAAAAAQAAAACPJ4LNXXBHJ7BFm9HGelFM4sY3eFhjD0LV9ZEW4bobvQAAAAA='); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO trustlines VALUES ('GCSX4PDUZP3BL522ZVMFXCEJ55NKEOHEMII7PSMJZNAAESJ444GSSJMO', 1, 'GAB7GMQPJ5YY2E4UJMLNAZPDEUKPK4AAIPRXIZHKZGUIRC6FP2LAQSDN', 'USD', 9223372036854775807, 0, 1, 3, NULL, NULL); -INSERT INTO trustlines VALUES ('GCYLTPOU7IVYHHA3XKQF4YB4W4ZWHFERMOQ7K47IWANKNBFBNJJNEOG5', 1, 'GCFZWN3AOVFQM2BZTZX7P47WSI4QMGJC62LILPKODTNDLVKZZNA5BQJ3', 'USD', 9223372036854775807, 0, 1, 3, NULL, NULL); - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('c6c673dd3f0f5248f1e2c85bc88daebedafa4de71202bede4980667c10292821', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('790c7fd5024a5da930b7cd55ed31bff4dd4a279ee20a2c1fc089e97557573424', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('834f6076a7870b4921347be0a6128487d900fabc1078be433f473b2f3139837f', 2, 3, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('ff8874bbd46e02dfe9b47aafd35b817d3f44bf769a0dff0bf73b16e6bc0a33ef', 2, 4, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/5wAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('a407d1e59a681499d7b1af4752df7b73953c631772eb40ca758989b96018d692', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAACwub3U+iuDnBu6oF5gPLczY5SRY6H1c+iwGqaEoWpS0gAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACwub3U+iuDnBu6oF5gPLczY5SRY6H1c+iwGqaEoWpS0gAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('3cb0f6b31e0a73f6c3a316d930f5deb4d9a825abd80310dcf0c587d7e12c7624', 3, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAAClfjx0y/YV91rNWFuIie9aojjkYhH3yYnLQAJJPOcNKQAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAClfjx0y/YV91rNWFuIie9aojjkYhH3yYnLQAJJPOcNKQAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('c6c673dd3f0f5248f1e2c85bc88daebedafa4de71202bede4980667c10292821', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAsLm91Porg5wbuqBeYDy3M2OUkWOh9XPosBqmhKFqUtIAAAACVAvkAAAAAAAAAAABVvwF9wAAAEDr7G099qIL7nPbxze2xCgJGbUVZ4rvCgTyz+zsKbHqYfSJAlqq+1LJAUIH9fbjTjbNObVelKRa90ri/p2RHXIJ', 'xsZz3T8PUkjx4shbyI2uvtr6TecSAr7eSYBmfBApKCEAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/5wAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBpwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACwub3U+iuDnBu6oF5gPLczY5SRY6H1c+iwGqaEoWpS0gAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('790c7fd5024a5da930b7cd55ed31bff4dd4a279ee20a2c1fc089e97557573424', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAApX48dMv2FfdazVhbiInvWqI45GIR98mJy0ACSTznDSkAAAACVAvkAAAAAAAAAAABVvwF9wAAAEAquSOIytKAx1/dElrYoSuRdTbRtVMQvtE9gAa4uM/elgMLXsdxSsar7SZL+p7I/+J8ZIwivYxnGjOXipt5f4UJ', 'eQx/1QJKXakwt81V7TG/9N1KJ57iCiwfwInpdVdXNCQAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBpwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDZwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAClfjx0y/YV91rNWFuIie9aojjkYhH3yYnLQAJJPOcNKQAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('834f6076a7870b4921347be0a6128487d900fabc1078be433f473b2f3139837f', 2, 3, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAi5s3YHVLBmg5nm/38/aSOQYZIvaWhb1OHNo11VnLQdAAAAACVAvkAAAAAAAAAAABVvwF9wAAAEDSRx2tkaPmowO5+GO4a5qEZ6/6BwbkoAK+N9Ad4Ie8Gu6f4XWu7RjxQ7fbuLLW6kipomxVIfFJ8+Tiv5Zd4UME', 'g09gdqeHC0khNHvgphKEh9kA+rwQeL5DP0c7LzE5g38AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDZwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqyrQFJwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACLmzdgdUsGaDmeb/fz9pI5Bhki9paFvU4c2jXVWctB0AAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('ff8874bbd46e02dfe9b47aafd35b817d3f44bf769a0dff0bf73b16e6bc0a33ef', 2, 4, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAA/MyD09xjROUSxbQZeMlFPVwAEPjdGTqyaiIi8V+lggAAAACVAvkAAAAAAAAAAABVvwF9wAAAEABI+RIBTA9OBOHPtApTdYY2ABBRoR55l4dwEYszn8laVt52bZNa+1NfBVuZffVTyHbaww6Q0/sfo2OfF5c0HwN', '/4h0u9RuAt/ptHqv01uBfT9Ev3aaDf8L9zsW5rwKM+8AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqyrQFJwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqpXNG5wAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAD8zIPT3GNE5RLFtBl4yUU9XAAQ+N0ZOrJqIiLxX6WCAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('a407d1e59a681499d7b1af4752df7b73953c631772eb40ca758989b96018d692', 3, 1, 'AAAAALC5vdT6K4OcG7qgXmA8tzNjlJFjofVz6LAapoShalLSAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAACLmzdgdUsGaDmeb/fz9pI5Bhki9paFvU4c2jXVWctB0H//////////AAAAAAAAAAGhalLSAAAAQCnZlvEITlesuWctD/z9XMvJSujWqCYBR5F6tzeyStpEqiQXeyOEtJrGO3ulubYfi4kuwxETF5+CORR/2+0IKA4=', 'pAfR5ZpoFJnXsa9HUt97c5U8Yxdy60DKdYmJuWAY1pIAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAsLm91Porg5wbuqBeYDy3M2OUkWOh9XPosBqmhKFqUtIAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAsLm91Porg5wbuqBeYDy3M2OUkWOh9XPosBqmhKFqUtIAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACwub3U+iuDnBu6oF5gPLczY5SRY6H1c+iwGqaEoWpS0gAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACwub3U+iuDnBu6oF5gPLczY5SRY6H1c+iwGqaEoWpS0gAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACwub3U+iuDnBu6oF5gPLczY5SRY6H1c+iwGqaEoWpS0gAAAAFVU0QAAAAAAIubN2B1SwZoOZ5v9/P2kjkGGSL2loW9ThzaNdVZy0HQAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('3cb0f6b31e0a73f6c3a316d930f5deb4d9a825abd80310dcf0c587d7e12c7624', 3, 2, 'AAAAAKV+PHTL9hX3Ws1YW4iJ71qiOORiEffJictAAkk85w0pAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAAD8zIPT3GNE5RLFtBl4yUU9XAAQ+N0ZOrJqIiLxX6WCH//////////AAAAAAAAAAE85w0pAAAAQAg9UNSFr/FJwY+2AcE3v2y/U4rds35uDJ88vP8+6lWRxLTZZJfZkkPQhtSG0VZ44HO3OLLML4Mv+pGLhgXomgA=', 'PLD2sx4Kc/bDoxbZMPXetNmoJavYAxDc8MWH1+EsdiQAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAApX48dMv2FfdazVhbiInvWqI45GIR98mJy0ACSTznDSkAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAApX48dMv2FfdazVhbiInvWqI45GIR98mJy0ACSTznDSkAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAAClfjx0y/YV91rNWFuIie9aojjkYhH3yYnLQAJJPOcNKQAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAClfjx0y/YV91rNWFuIie9aojjkYhH3yYnLQAJJPOcNKQAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAClfjx0y/YV91rNWFuIie9aojjkYhH3yYnLQAJJPOcNKQAAAAFVU0QAAAAAAAPzMg9PcY0TlEsW0GXjJRT1cABD43Rk6smoiIvFfpYIAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_operations-horizon.sql b/services/horizon/internal/test/scenarios/asset_stat_operations-horizon.sql deleted file mode 100644 index fca7159bd2..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_operations-horizon.sql +++ /dev/null @@ -1,982 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO asset_stats VALUES (1, '0', 1, 0, ''); -INSERT INTO asset_stats VALUES (2, '0', 1, 0, ''); - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GCYLTPOU7IVYHHA3XKQF4YB4W4ZWHFERMOQ7K47IWANKNBFBNJJNEOG5'); -INSERT INTO history_accounts VALUES (2, 'GCSX4PDUZP3BL522ZVMFXCEJ55NKEOHEMII7PSMJZNAAESJ444GSSJMO'); -INSERT INTO history_accounts VALUES (3, 'GCFZWN3AOVFQM2BZTZX7P47WSI4QMGJC62LILPKODTNDLVKZZNA5BQJ3'); -INSERT INTO history_accounts VALUES (4, 'GAB7GMQPJ5YY2E4UJMLNAZPDEUKPK4AAIPRXIZHKZGUIRC6FP2LAQSDN'); -INSERT INTO history_accounts VALUES (5, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 5, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_assets VALUES (1, 'credit_alphanum4', 'USD', 'GAB7GMQPJ5YY2E4UJMLNAZPDEUKPK4AAIPRXIZHKZGUIRC6FP2LAQSDN'); -INSERT INTO history_assets VALUES (2, 'credit_alphanum4', 'USD', 'GCFZWN3AOVFQM2BZTZX7P47WSI4QMGJC62LILPKODTNDLVKZZNA5BQJ3'); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 2, true); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 12884905985, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GCFZWN3AOVFQM2BZTZX7P47WSI4QMGJC62LILPKODTNDLVKZZNA5BQJ3"}'); -INSERT INTO history_effects VALUES (2, 12884910081, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GAB7GMQPJ5YY2E4UJMLNAZPDEUKPK4AAIPRXIZHKZGUIRC6FP2LAQSDN"}'); -INSERT INTO history_effects VALUES (1, 8589938689, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (5, 8589938689, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589938689, 3, 10, '{"weight": 1, "public_key": "GCYLTPOU7IVYHHA3XKQF4YB4W4ZWHFERMOQ7K47IWANKNBFBNJJNEOG5"}'); -INSERT INTO history_effects VALUES (2, 8589942785, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (5, 8589942785, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 8589942785, 3, 10, '{"weight": 1, "public_key": "GCSX4PDUZP3BL522ZVMFXCEJ55NKEOHEMII7PSMJZNAAESJ444GSSJMO"}'); -INSERT INTO history_effects VALUES (3, 8589946881, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (5, 8589946881, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (3, 8589946881, 3, 10, '{"weight": 1, "public_key": "GCFZWN3AOVFQM2BZTZX7P47WSI4QMGJC62LILPKODTNDLVKZZNA5BQJ3"}'); -INSERT INTO history_effects VALUES (4, 8589950977, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (5, 8589950977, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (4, 8589950977, 3, 10, '{"weight": 1, "public_key": "GAB7GMQPJ5YY2E4UJMLNAZPDEUKPK4AAIPRXIZHKZGUIRC6FP2LAQSDN"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (3, '18cbb37ab371dcb900c846a1fd8000c2a09c68ea23ba43858c0deed05df2d9cd', '0dc75706bf9958fdd2326dca73c429ba839b3565bf43959c972460e2e741d52b', 2, 2, '2019-06-03 16:34:28', '2019-06-03 16:34:30.786903', '2019-06-03 16:34:30.786903', 12884901888, 16, 1000000000000000000, 600, 100, 100000000, 1000000, 11, 'AAAACw3HVwa/mVj90jJtynPEKbqDmzVlv0OVnJckYOLnQdUrEfAYHWfAn84njhZoaIFZlI1KsNuRDfce9f6vVb64XJ0AAAAAXPVMFAAAAAAAAAAAhSD66Lhzb7ZNorUyzTQqB11nd0srMHPv8kaiQLT5higlXZZBS2buAx+WrEKP0n3+6lE36rRM2eh4GA2brGwaVwAAAAMN4Lazp2QAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (2, '0dc75706bf9958fdd2326dca73c429ba839b3565bf43959c972460e2e741d52b', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 4, 4, '2019-06-03 16:34:27', '2019-06-03 16:34:30.804493', '2019-06-03 16:34:30.804493', 8589934592, 16, 1000000000000000000, 400, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZAl4xVs7p/dHViPjkvi2jwT71A96KVxBFTiVfkaPKPPMAAAAAXPVMEwAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAi4Ue20vNo0cmNykBLoF1m6yPEvTdv3MfCquWXwc7NpxKS6z3DuhkWHefL/TlT9hxClQ0vw1YMH6I38EF2QOEGQAAAAIN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 4, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:34:30.817439', '2019-06-03 16:34:30.81744', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 12884905985, 1); -INSERT INTO history_operation_participants VALUES (2, 12884910081, 2); -INSERT INTO history_operation_participants VALUES (3, 8589938689, 5); -INSERT INTO history_operation_participants VALUES (4, 8589938689, 1); -INSERT INTO history_operation_participants VALUES (5, 8589942785, 5); -INSERT INTO history_operation_participants VALUES (6, 8589942785, 2); -INSERT INTO history_operation_participants VALUES (7, 8589946881, 5); -INSERT INTO history_operation_participants VALUES (8, 8589946881, 3); -INSERT INTO history_operation_participants VALUES (9, 8589950977, 5); -INSERT INTO history_operation_participants VALUES (10, 8589950977, 4); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 10, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GCFZWN3AOVFQM2BZTZX7P47WSI4QMGJC62LILPKODTNDLVKZZNA5BQJ3", "trustor": "GCYLTPOU7IVYHHA3XKQF4YB4W4ZWHFERMOQ7K47IWANKNBFBNJJNEOG5", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GCFZWN3AOVFQM2BZTZX7P47WSI4QMGJC62LILPKODTNDLVKZZNA5BQJ3"}', 'GCYLTPOU7IVYHHA3XKQF4YB4W4ZWHFERMOQ7K47IWANKNBFBNJJNEOG5'); -INSERT INTO history_operations VALUES (12884910081, 12884910080, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GAB7GMQPJ5YY2E4UJMLNAZPDEUKPK4AAIPRXIZHKZGUIRC6FP2LAQSDN", "trustor": "GCSX4PDUZP3BL522ZVMFXCEJ55NKEOHEMII7PSMJZNAAESJ444GSSJMO", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GAB7GMQPJ5YY2E4UJMLNAZPDEUKPK4AAIPRXIZHKZGUIRC6FP2LAQSDN"}', 'GCSX4PDUZP3BL522ZVMFXCEJ55NKEOHEMII7PSMJZNAAESJ444GSSJMO'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCYLTPOU7IVYHHA3XKQF4YB4W4ZWHFERMOQ7K47IWANKNBFBNJJNEOG5", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCSX4PDUZP3BL522ZVMFXCEJ55NKEOHEMII7PSMJZNAAESJ444GSSJMO", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589946881, 8589946880, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCFZWN3AOVFQM2BZTZX7P47WSI4QMGJC62LILPKODTNDLVKZZNA5BQJ3", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589950977, 8589950976, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GAB7GMQPJ5YY2E4UJMLNAZPDEUKPK4AAIPRXIZHKZGUIRC6FP2LAQSDN", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 12884905984, 1); -INSERT INTO history_transaction_participants VALUES (2, 12884910080, 2); -INSERT INTO history_transaction_participants VALUES (3, 8589938688, 5); -INSERT INTO history_transaction_participants VALUES (4, 8589938688, 1); -INSERT INTO history_transaction_participants VALUES (5, 8589942784, 5); -INSERT INTO history_transaction_participants VALUES (6, 8589942784, 2); -INSERT INTO history_transaction_participants VALUES (7, 8589946880, 5); -INSERT INTO history_transaction_participants VALUES (8, 8589946880, 3); -INSERT INTO history_transaction_participants VALUES (9, 8589950976, 5); -INSERT INTO history_transaction_participants VALUES (10, 8589950976, 4); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 10, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('a407d1e59a681499d7b1af4752df7b73953c631772eb40ca758989b96018d692', 3, 1, 'GCYLTPOU7IVYHHA3XKQF4YB4W4ZWHFERMOQ7K47IWANKNBFBNJJNEOG5', 8589934593, 100, 1, '2019-06-03 16:34:30.787087', '2019-06-03 16:34:30.787087', 12884905984, 'AAAAALC5vdT6K4OcG7qgXmA8tzNjlJFjofVz6LAapoShalLSAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAACLmzdgdUsGaDmeb/fz9pI5Bhki9paFvU4c2jXVWctB0H//////////AAAAAAAAAAGhalLSAAAAQCnZlvEITlesuWctD/z9XMvJSujWqCYBR5F6tzeyStpEqiQXeyOEtJrGO3ulubYfi4kuwxETF5+CORR/2+0IKA4=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAsLm91Porg5wbuqBeYDy3M2OUkWOh9XPosBqmhKFqUtIAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAsLm91Porg5wbuqBeYDy3M2OUkWOh9XPosBqmhKFqUtIAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACwub3U+iuDnBu6oF5gPLczY5SRY6H1c+iwGqaEoWpS0gAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACwub3U+iuDnBu6oF5gPLczY5SRY6H1c+iwGqaEoWpS0gAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACwub3U+iuDnBu6oF5gPLczY5SRY6H1c+iwGqaEoWpS0gAAAAFVU0QAAAAAAIubN2B1SwZoOZ5v9/P2kjkGGSL2loW9ThzaNdVZy0HQAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACwub3U+iuDnBu6oF5gPLczY5SRY6H1c+iwGqaEoWpS0gAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACwub3U+iuDnBu6oF5gPLczY5SRY6H1c+iwGqaEoWpS0gAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{KdmW8QhOV6y5Zy0P/P1cy8lK6NaoJgFHkXq3N7JK2kSqJBd7I4S0msY7e6W5th+LiS7DERMXn4I5FH/b7QgoDg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('3cb0f6b31e0a73f6c3a316d930f5deb4d9a825abd80310dcf0c587d7e12c7624', 3, 2, 'GCSX4PDUZP3BL522ZVMFXCEJ55NKEOHEMII7PSMJZNAAESJ444GSSJMO', 8589934593, 100, 1, '2019-06-03 16:34:30.787358', '2019-06-03 16:34:30.787358', 12884910080, 'AAAAAKV+PHTL9hX3Ws1YW4iJ71qiOORiEffJictAAkk85w0pAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAAD8zIPT3GNE5RLFtBl4yUU9XAAQ+N0ZOrJqIiLxX6WCH//////////AAAAAAAAAAE85w0pAAAAQAg9UNSFr/FJwY+2AcE3v2y/U4rds35uDJ88vP8+6lWRxLTZZJfZkkPQhtSG0VZ44HO3OLLML4Mv+pGLhgXomgA=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAApX48dMv2FfdazVhbiInvWqI45GIR98mJy0ACSTznDSkAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAApX48dMv2FfdazVhbiInvWqI45GIR98mJy0ACSTznDSkAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAAClfjx0y/YV91rNWFuIie9aojjkYhH3yYnLQAJJPOcNKQAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAClfjx0y/YV91rNWFuIie9aojjkYhH3yYnLQAJJPOcNKQAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAClfjx0y/YV91rNWFuIie9aojjkYhH3yYnLQAJJPOcNKQAAAAFVU0QAAAAAAAPzMg9PcY0TlEsW0GXjJRT1cABD43Rk6smoiIvFfpYIAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAAClfjx0y/YV91rNWFuIie9aojjkYhH3yYnLQAJJPOcNKQAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAClfjx0y/YV91rNWFuIie9aojjkYhH3yYnLQAJJPOcNKQAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{CD1Q1IWv8UnBj7YBwTe/bL9Tit2zfm4Mnzy8/z7qVZHEtNlkl9mSQ9CG1IbRVnjgc7c4sswvgy/6kYuGBeiaAA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('c6c673dd3f0f5248f1e2c85bc88daebedafa4de71202bede4980667c10292821', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:34:30.804685', '2019-06-03 16:34:30.804686', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAsLm91Porg5wbuqBeYDy3M2OUkWOh9XPosBqmhKFqUtIAAAACVAvkAAAAAAAAAAABVvwF9wAAAEDr7G099qIL7nPbxze2xCgJGbUVZ4rvCgTyz+zsKbHqYfSJAlqq+1LJAUIH9fbjTjbNObVelKRa90ri/p2RHXIJ', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/5wAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBpwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACwub3U+iuDnBu6oF5gPLczY5SRY6H1c+iwGqaEoWpS0gAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{6+xtPfaiC+5z28c3tsQoCRm1FWeK7woE8s/s7Cmx6mH0iQJaqvtSyQFCB/X24042zTm1XpSkWvdK4v6dkR1yCQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('790c7fd5024a5da930b7cd55ed31bff4dd4a279ee20a2c1fc089e97557573424', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:34:30.804872', '2019-06-03 16:34:30.804872', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAApX48dMv2FfdazVhbiInvWqI45GIR98mJy0ACSTznDSkAAAACVAvkAAAAAAAAAAABVvwF9wAAAEAquSOIytKAx1/dElrYoSuRdTbRtVMQvtE9gAa4uM/elgMLXsdxSsar7SZL+p7I/+J8ZIwivYxnGjOXipt5f4UJ', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBpwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDZwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAClfjx0y/YV91rNWFuIie9aojjkYhH3yYnLQAJJPOcNKQAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{KrkjiMrSgMdf3RJa2KErkXU20bVTEL7RPYAGuLjP3pYDC17HcUrGq+0mS/qeyP/ifGSMIr2MZxozl4qbeX+FCQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('834f6076a7870b4921347be0a6128487d900fabc1078be433f473b2f3139837f', 2, 3, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 3, 100, 1, '2019-06-03 16:34:30.804999', '2019-06-03 16:34:30.804999', 8589946880, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAi5s3YHVLBmg5nm/38/aSOQYZIvaWhb1OHNo11VnLQdAAAAACVAvkAAAAAAAAAAABVvwF9wAAAEDSRx2tkaPmowO5+GO4a5qEZ6/6BwbkoAK+N9Ad4Ie8Gu6f4XWu7RjxQ7fbuLLW6kipomxVIfFJ8+Tiv5Zd4UME', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDZwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqyrQFJwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACLmzdgdUsGaDmeb/fz9pI5Bhki9paFvU4c2jXVWctB0AAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{0kcdrZGj5qMDufhjuGuahGev+gcG5KACvjfQHeCHvBrun+F1ru0Y8UO327iy1upIqaJsVSHxSfPk4r+WXeFDBA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('ff8874bbd46e02dfe9b47aafd35b817d3f44bf769a0dff0bf73b16e6bc0a33ef', 2, 4, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 4, 100, 1, '2019-06-03 16:34:30.805228', '2019-06-03 16:34:30.805229', 8589950976, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAA/MyD09xjROUSxbQZeMlFPVwAEPjdGTqyaiIi8V+lggAAAACVAvkAAAAAAAAAAABVvwF9wAAAEABI+RIBTA9OBOHPtApTdYY2ABBRoR55l4dwEYszn8laVt52bZNa+1NfBVuZffVTyHbaww6Q0/sfo2OfF5c0HwN', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqyrQFJwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqpXNG5wAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAD8zIPT3GNE5RLFtBl4yUU9XAAQ+N0ZOrJqIiLxX6WCAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/5wAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{ASPkSAUwPTgThz7QKU3WGNgAQUaEeeZeHcBGLM5/JWlbedm2TWvtTXwVbmX31U8h22sMOkNP7H6NjnxeXNB8DQ==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_operations.rb b/services/horizon/internal/test/scenarios/asset_stat_operations.rb deleted file mode 100644 index ad22a220f7..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_operations.rb +++ /dev/null @@ -1,34 +0,0 @@ -# Secret seed: SANFNPZPA4LWBD3RPDSCJU63KCBU3OBFOM5FFBJCGIOCVIABMRTKBAU2 -# Address: GCYLTPOU7IVYHHA3XKQF4YB4W4ZWHFERMOQ7K47IWANKNBFBNJJNEOG5 -# Asset Code Issued: USD -account :source, Stellar::KeyPair.from_seed("SANFNPZPA4LWBD3RPDSCJU63KCBU3OBFOM5FFBJCGIOCVIABMRTKBAU2") - -# Secret seed: SABP5P625YBETJV4BCEWQD674ED4FF4QVNBRL6TQCRODJUWBNJBMND5O -# Address: GCSX4PDUZP3BL522ZVMFXCEJ55NKEOHEMII7PSMJZNAAESJ444GSSJMO -# Asset Code Issued: EUR -account :dest, Stellar::KeyPair.from_seed("SABP5P625YBETJV4BCEWQD674ED4FF4QVNBRL6TQCRODJUWBNJBMND5O") - -# Secret seed: SCCUFFUANIXJPAWBHDXZXY5D4GB32QPM6MOUWDD6PTYBLPE6JVYZFE76 -# Address: GCFZWN3AOVFQM2BZTZX7P47WSI4QMGJC62LILPKODTNDLVKZZNA5BQJ3 -# Asset Code Issued: USD -account :issuer, Stellar::KeyPair.from_seed("SCCUFFUANIXJPAWBHDXZXY5D4GB32QPM6MOUWDD6PTYBLPE6JVYZFE76") - -# Secret seed: SAISD7SISIIW5YNQ7GY5727L6MOFS667K3LVIPYPPUBIPCRQUORFLQMN -# Address: GAB7GMQPJ5YY2E4UJMLNAZPDEUKPK4AAIPRXIZHKZGUIRC6FP2LAQSDN -# Asset Code Issued: USD -account :another, Stellar::KeyPair.from_seed("SAISD7SISIIW5YNQ7GY5727L6MOFS667K3LVIPYPPUBIPCRQUORFLQMN") - -use_manual_close - -# create accounts -create_account :source -create_account :dest -create_account :issuer -create_account :another -close_ledger - -# add a trust line so the :source account lists USD:issuer as a currency it holds -trust :source, :issuer, "USD" -# add a trust line so the :dest account lists USD:another as a currency it holds -trust :dest, :another, "USD" -close_ledger diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_1-core.sql b/services/horizon/internal/test/scenarios/asset_stat_trustlines_1-core.sql deleted file mode 100644 index 32b6833b1e..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_1-core.sql +++ /dev/null @@ -1,724 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999979999999800, 2, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 10000000000, 8589934592, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 9999999900, 8589934593, 1, NULL, '', 'AQAAAA==', 0, 3, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('98cb2efcf21ebee074103b289cde84b91c04c03a15943d1ce466359066d36f28', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '69b2226ee24347478a171c44c8778d4f3495fba49aa8d36038a3ee6745bdf3bb', 2, 1559579739, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Zu5H9cHd0qAsZj9Q6Y8yIIc6utkf/CO+Lm/0KbsfrzPUAAAAAXPVMWwAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP0PjS3Rf7hs8xVIBg2g8xKvqOO/n/g/XwgPR/HB7qe9psiJu4kNHR4oXHETId41PNJX7pJqo02A4o+5nRb3zuwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('3d1582f6553a00296493dba6bb3d463c0eb7c417daf0c727391fcf832fefb05e', '98cb2efcf21ebee074103b289cde84b91c04c03a15943d1ce466359066d36f28', '90d0d3fb695b7e03b5c2de781e7a8839c18b2d4c713fb2e27f28d9a992860963', 3, 1559579740, 'AAAAC5jLLvzyHr7gdBA7KJzehLkcBMA6FZQ9HORmNZBm028ofrSv2cs96S7UgH9hGCX2w2tJu6/3Np99jSWhyIyAxr8AAAAAXPVMXAAAAAAAAAAALLKPbMojH+RR+TSBDKGB/tufH2mL12ccCHr1Jn27yPCQ0NP7aVt+A7XC3ngeeog5wYstTHE/suJ/KNmpkoYJYwAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GAGDAOMXIXF5U47SLBC5MBHNQKLX4VJXOA27LSA3CHBXAS3BFQTS34WF', 2, 'AAAAAAwwOZdFy9pz8lhF1gTtgpd+VTdwNfXIGxHDcEthLCctAAAAAAAAAAIAAAACAAAAAQAAAEi7kf1wd3SoCxmP1DpjzIghzq62R/8I74ub/Qpux+vM9QAAAABc9UxbAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABRdQWOXYDLSbw6F/Iayel0O4dVlEMLmVgdRjE4tQqGYIAAABAiFaFK5WBUuMeaY1OfQR9hO0y47tbypqwIv0tb0pYBf2vRg9Y7Dy6AbhnZw9uJas1g4LwaU55OCMWcZQwZtguDA=='); -INSERT INTO scphistory VALUES ('GAGDAOMXIXF5U47SLBC5MBHNQKLX4VJXOA27LSA3CHBXAS3BFQTS34WF', 3, 'AAAAAAwwOZdFy9pz8lhF1gTtgpd+VTdwNfXIGxHDcEthLCctAAAAAAAAAAMAAAACAAAAAQAAADB+tK/Zyz3pLtSAf2EYJfbDa0m7r/c2n32NJaHIjIDGvwAAAABc9UxcAAAAAAAAAAAAAAABRdQWOXYDLSbw6F/Iayel0O4dVlEMLmVgdRjE4tQqGYIAAABAlAP9o9j8qk8W4EPo8W/EHvaEWACEEXuPDUgF3Bb+FDvZwOFl9iAdaq+AK9i6SCWm6WC1HAH9SzN1Ho7DguiRAw=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('45d4163976032d26f0e85fc86b27a5d0ee1d56510c2e65607518c4e2d42a1982', 3, 'AAAAAQAAAAEAAAAADDA5l0XL2nPyWEXWBO2Cl35VN3A19cgbEcNwS2EsJy0AAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastclosedledger ', '3d1582f6553a00296493dba6bb3d463c0eb7c417daf0c727391fcf832fefb05e'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 3, - "currentBuckets": [ - { - "curr": "5e9b6cf93c3d773407f0bd3735e8d02aa3ab4e6e6a4c61f0126008e4c7cf7bf0", - "next": { - "state": 0 - }, - "snap": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 1, - "output": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAAAMMDmXRcvac/JYRdYE7YKXflU3cDX1yBsRw3BLYSwnLQAAAAAAAAADAAAAA0XUFjl2Ay0m8OhfyGsnpdDuHVZRDC5lYHUYxOLUKhmCAAAAAQAAAJh+tK/Zyz3pLtSAf2EYJfbDa0m7r/c2n32NJaHIjIDGvwAAAABc9UxcAAAAAAAAAAEAAAAADDA5l0XL2nPyWEXWBO2Cl35VN3A19cgbEcNwS2EsJy0AAABA9W+I4dWqD7dZnjp+nT/NyUl0MXtIWh/MLFJuDvk11FWrpWZVexb/rFAalDJl+otKoaquk2Dku1VlSgDupA8LBgAAAAEAAACYfrSv2cs96S7UgH9hGCX2w2tJu6/3Np99jSWhyIyAxr8AAAAAXPVMXAAAAAAAAAABAAAAAAwwOZdFy9pz8lhF1gTtgpd+VTdwNfXIGxHDcEthLCctAAAAQPVviOHVqg+3WZ46fp0/zclJdDF7SFofzCxSbg75NdRVq6VmVXsW/6xQGpQyZfqLSqGqrpNg5LtVZUoA7qQPCwYAAABA5CM3Lb93LPj2uUojF+kpk3foRerGKfbDgJfiiYmBllLilNWfJMrsUoKaCDeOOXltGiK/wgVC19uUiv7i8eJCAgAAAAAMMDmXRcvac/JYRdYE7YKXflU3cDX1yBsRw3BLYSwnLQAAAAAAAAADAAAAAgAAAAEAAAAwfrSv2cs96S7UgH9hGCX2w2tJu6/3Np99jSWhyIyAxr8AAAAAXPVMXAAAAAAAAAAAAAAAAUXUFjl2Ay0m8OhfyGsnpdDuHVZRDC5lYHUYxOLUKhmCAAAAQJQD/aPY/KpPFuBD6PFvxB72hFgAhBF7jw1IBdwW/hQ72cDhZfYgHWqvgCvYukglpulgtRwB/UszdR6Ow4LokQMAAAABmMsu/PIevuB0EDsonN6EuRwEwDoVlD0c5GY1kGbTbygAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAYAAAABAAAAAQAAAAEAAAAADDA5l0XL2nPyWEXWBO2Cl35VN3A19cgbEcNwS2EsJy0AAAAA'); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 0, 1, 3, NULL, NULL); - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', '2zmOtK6JdWMlZDytIclOE7/AdLMj7oPhQb9wGl2QTxsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', '+Xyv+rjBYCOjeIQWXLCz/xqi2vQAD+9J0h78hH3b++oAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'vUhtvdAtRggXZxxKWn6dboZcopy0HmLXqvcKL+5bNt4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_1-horizon.sql b/services/horizon/internal/test/scenarios/asset_stat_trustlines_1-horizon.sql deleted file mode 100644 index b7466e939b..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_1-horizon.sql +++ /dev/null @@ -1,955 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO asset_stats VALUES (1, '0', 1, 0, ''); - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (2, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_accounts VALUES (3, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 3, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_assets VALUES (1, 'credit_alphanum4', 'USD', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 1, true); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 12884905985, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (3, 8589938689, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 3, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (3, '3d1582f6553a00296493dba6bb3d463c0eb7c417daf0c727391fcf832fefb05e', '98cb2efcf21ebee074103b289cde84b91c04c03a15943d1ce466359066d36f28', 1, 1, '2019-06-03 16:35:40', '2019-06-03 16:35:42.432775', '2019-06-03 16:35:42.432775', 12884901888, 16, 1000000000000000000, 300, 100, 100000000, 1000000, 11, 'AAAAC5jLLvzyHr7gdBA7KJzehLkcBMA6FZQ9HORmNZBm028ofrSv2cs96S7UgH9hGCX2w2tJu6/3Np99jSWhyIyAxr8AAAAAXPVMXAAAAAAAAAAALLKPbMojH+RR+TSBDKGB/tufH2mL12ccCHr1Jn27yPCQ0NP7aVt+A7XC3ngeeog5wYstTHE/suJ/KNmpkoYJYwAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (2, '98cb2efcf21ebee074103b289cde84b91c04c03a15943d1ce466359066d36f28', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 2, 2, '2019-06-03 16:35:39', '2019-06-03 16:35:42.448289', '2019-06-03 16:35:42.448289', 8589934592, 16, 1000000000000000000, 200, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Zu5H9cHd0qAsZj9Q6Y8yIIc6utkf/CO+Lm/0KbsfrzPUAAAAAXPVMWwAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP0PjS3Rf7hs8xVIBg2g8xKvqOO/n/g/XwgPR/HB7qe9psiJu4kNHR4oXHETId41PNJX7pJqo02A4o+5nRb3zuwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:35:42.461054', '2019-06-03 16:35:42.461054', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 12884905985, 1); -INSERT INTO history_operation_participants VALUES (2, 8589938689, 3); -INSERT INTO history_operation_participants VALUES (3, 8589938689, 2); -INSERT INTO history_operation_participants VALUES (4, 8589942785, 3); -INSERT INTO history_operation_participants VALUES (5, 8589942785, 1); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 5, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 12884905984, 1); -INSERT INTO history_transaction_participants VALUES (2, 8589938688, 2); -INSERT INTO history_transaction_participants VALUES (3, 8589938688, 3); -INSERT INTO history_transaction_participants VALUES (4, 8589942784, 3); -INSERT INTO history_transaction_participants VALUES (5, 8589942784, 1); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 5, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:35:42.432963', '2019-06-03 16:35:42.432963', 12884905984, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{H2SYpbare/tB/Lw8x6QRvVNMjmLGqQjQGiBes63uA7XrZBuSHZ1JNR94Oi9zQ8Bp+ENfG2FUCWwu6OUGbKMEBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:35:42.448424', '2019-06-03 16:35:42.448424', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GI0HD09huYapwZoBhnoPSfJeHNRJ1JcZJRJR/bKma9Pe9Reji1n3v5uJKRbSPrCNItai4reQNCclp24WC1uaAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:35:42.448605', '2019-06-03 16:35:42.448605', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{ZiqUoL68CjttFwjn2H17BhBFLcGGmhH6kruspiZpQ5mviF+iOyIIG1GTKHEHWfeCDAHynUADal2yDu8rMHnjAg==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_1.rb b/services/horizon/internal/test/scenarios/asset_stat_trustlines_1.rb deleted file mode 100644 index ccfb21be67..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_1.rb +++ /dev/null @@ -1,10 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :usd_gateway -create_account :scott -close_ledger - -trust :scott, :usd_gateway, "USD" -close_ledger diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_2-core.sql b/services/horizon/internal/test/scenarios/asset_stat_trustlines_2-core.sql deleted file mode 100644 index 441d3f42ab..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_2-core.sql +++ /dev/null @@ -1,728 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999979999999800, 2, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 10000000000, 8589934592, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 9999999800, 8589934594, 1, NULL, '', 'AQAAAA==', 0, 4, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('3609e559ce9335b37e174b44c582b721d3f11dc4eb49de0efb672f76b41b9eec', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '69b2226ee24347478a171c44c8778d4f3495fba49aa8d36038a3ee6745bdf3bb', 2, 1559579853, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Zu5H9cHd0qAsZj9Q6Y8yIIc6utkf/CO+Lm/0KbsfrzPUAAAAAXPVMzQAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP0PjS3Rf7hs8xVIBg2g8xKvqOO/n/g/XwgPR/HB7qe9psiJu4kNHR4oXHETId41PNJX7pJqo02A4o+5nRb3zuwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('1276d34ca36295958f45f61de5659be4e1abdd9d66455adc13e9ec048ec6f2d6', '3609e559ce9335b37e174b44c582b721d3f11dc4eb49de0efb672f76b41b9eec', '90d0d3fb695b7e03b5c2de781e7a8839c18b2d4c713fb2e27f28d9a992860963', 3, 1559579854, 'AAAACzYJ5VnOkzWzfhdLRMWCtyHT8R3E60neDvtnL3a0G57sCW6zWwwoK9T+JmR/5oRTEhLJ7wlHg6aCX28MpKtXJxkAAAAAXPVMzgAAAAAAAAAALLKPbMojH+RR+TSBDKGB/tufH2mL12ccCHr1Jn27yPCQ0NP7aVt+A7XC3ngeeog5wYstTHE/suJ/KNmpkoYJYwAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('a30feb1145fd3354ad5afc7d5b1f94d05b6dcfaecb0810d71fea1fee2d6b6052', '1276d34ca36295958f45f61de5659be4e1abdd9d66455adc13e9ec048ec6f2d6', 'af3f614d8425b8141cf20ccae41c149123549b96ff0359bbb218b6832d8d1e52', 4, 1559579855, 'AAAACxJ200yjYpWVj0X2HeVlm+Thq92dZkVa3BPp7ASOxvLWq8h8Dblv+wye4hdRsuy90Y3iCPafp7x2aYKeXPqn7vEAAAAAXPVMzwAAAAAAAAAA33EmKJw3Wal+OUXaW5YmJOts5uge1kmyR6dBxxKsgl2vP2FNhCW4FBzyDMrkHBSRI1Sblv8DWbuyGLaDLY0eUgAAAAQN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GCKUMVWLCKJ6WRKQV6TIEKQGEU7WJJHGSW56TANKNICMYBEXLSQWMSOY', 2, 'AAAAAJVGVssSk+tFUK+mgioGJT9kpOaVu+mBqmoEzASXXKFmAAAAAAAAAAIAAAACAAAAAQAAAEi7kf1wd3SoCxmP1DpjzIghzq62R/8I74ub/Qpux+vM9QAAAABc9UzNAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABgOVCq4HOTTvRmr9C9eQN/Bx/d3oGBKU3NZjuT7q/SLAAAABAcK8Z0BCph+YH3QoxXjLf5t1d7AG8+vXP9i/T/kp61bBWcGGv63ttgkZjURIqPkB7Kb30MQqVi6Y4IzXgor3/BA=='); -INSERT INTO scphistory VALUES ('GCKUMVWLCKJ6WRKQV6TIEKQGEU7WJJHGSW56TANKNICMYBEXLSQWMSOY', 3, 'AAAAAJVGVssSk+tFUK+mgioGJT9kpOaVu+mBqmoEzASXXKFmAAAAAAAAAAMAAAACAAAAAQAAADAJbrNbDCgr1P4mZH/mhFMSEsnvCUeDpoJfbwykq1cnGQAAAABc9UzOAAAAAAAAAAAAAAABgOVCq4HOTTvRmr9C9eQN/Bx/d3oGBKU3NZjuT7q/SLAAAABAXzYkkA6k47JCx0DQwJ21l8w7TD6oxXfaHACMsbyzYiotIqwoF/dkf6g2/enQRzUvvFSmUQqDmwO3Y3249CXMCw=='); -INSERT INTO scphistory VALUES ('GCKUMVWLCKJ6WRKQV6TIEKQGEU7WJJHGSW56TANKNICMYBEXLSQWMSOY', 4, 'AAAAAJVGVssSk+tFUK+mgioGJT9kpOaVu+mBqmoEzASXXKFmAAAAAAAAAAQAAAACAAAAAQAAADCryHwNuW/7DJ7iF1Gy7L3RjeII9p+nvHZpgp5c+qfu8QAAAABc9UzPAAAAAAAAAAAAAAABgOVCq4HOTTvRmr9C9eQN/Bx/d3oGBKU3NZjuT7q/SLAAAABAIpmkMk9L1tGeI0Dc/EWJ91stWrm396pHYvdxd8bAJU8KL8dGI4w09tpcSo5XhngOHYOUHOVoiYlYDtyNu6O9AA=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('80e542ab81ce4d3bd19abf42f5e40dfc1c7f777a0604a5373598ee4fbabf48b0', 4, 'AAAAAQAAAAEAAAAAlUZWyxKT60VQr6aCKgYlP2Sk5pW76YGqagTMBJdcoWYAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 4, - "currentBuckets": [ - { - "curr": "fb148baeabc8528a03169adaecc8e9a16ee1356f6d52a54095090215acbf5f0c", - "next": { - "state": 0 - }, - "snap": "5e9b6cf93c3d773407f0bd3735e8d02aa3ab4e6e6a4c61f0126008e4c7cf7bf0" - }, - { - "curr": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9", - "next": { - "state": 1, - "output": "5e9b6cf93c3d773407f0bd3735e8d02aa3ab4e6e6a4c61f0126008e4c7cf7bf0" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAACVRlbLEpPrRVCvpoIqBiU/ZKTmlbvpgapqBMwEl1yhZgAAAAAAAAAEAAAAA4DlQquBzk070Zq/QvXkDfwcf3d6BgSlNzWY7k+6v0iwAAAAAQAAAJiryHwNuW/7DJ7iF1Gy7L3RjeII9p+nvHZpgp5c+qfu8QAAAABc9UzPAAAAAAAAAAEAAAAAlUZWyxKT60VQr6aCKgYlP2Sk5pW76YGqagTMBJdcoWYAAABAknaRqBLBJyJPdMkjBap/9/ZTCqwmdAgLaaemrGZg5DB6QWzdzAdmTtohwYsi5RWHN6E+z/yXHGmE5fcnJJtjAQAAAAEAAACYq8h8Dblv+wye4hdRsuy90Y3iCPafp7x2aYKeXPqn7vEAAAAAXPVMzwAAAAAAAAABAAAAAJVGVssSk+tFUK+mgioGJT9kpOaVu+mBqmoEzASXXKFmAAAAQJJ2kagSwSciT3TJIwWqf/f2UwqsJnQIC2mnpqxmYOQwekFs3cwHZk7aIcGLIuUVhzehPs/8lxxphOX3JySbYwEAAABAq/i0Fua8QcibSHCTT6xV/nj3AWI3EINa6sMH3zmEUj9A10PpAfl4KyKIVWdxs/33N64j6Via121cfW1+JrE6BQAAAACVRlbLEpPrRVCvpoIqBiU/ZKTmlbvpgapqBMwEl1yhZgAAAAAAAAAEAAAAAgAAAAEAAAAwq8h8Dblv+wye4hdRsuy90Y3iCPafp7x2aYKeXPqn7vEAAAAAXPVMzwAAAAAAAAAAAAAAAYDlQquBzk070Zq/QvXkDfwcf3d6BgSlNzWY7k+6v0iwAAAAQCKZpDJPS9bRniNA3PxFifdbLVq5t/eqR2L3cXfGwCVPCi/HRiOMNPbaXEqOV4Z4Dh2DlBzlaImJWA7cjbujvQAAAAABEnbTTKNilZWPRfYd5WWb5OGr3Z1mRVrcE+nsBI7G8tYAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQFp8rsD4Au1oeZkBT1RHIJRyxWayau3f5UjeA0w4+0LzjLEyi9nGMs8elAH4lDhhDJxCJ8HhxbG+XT/cmQsu1QAAAAABAAAAAQAAAAEAAAAAlUZWyxKT60VQr6aCKgYlP2Sk5pW76YGqagTMBJdcoWYAAAAA'); -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastclosedledger ', 'a30feb1145fd3354ad5afc7d5b1f94d05b6dcfaecb0810d71fea1fee2d6b6052'); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 0, 1, 4, NULL, NULL); - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('4486298e04ffb1f3620c521f81adb5207f5d12c21b08a076589d2be3d8dae543', 4, 1, 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', '2zmOtK6JdWMlZDytIclOE7/AdLMj7oPhQb9wGl2QTxsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', '+Xyv+rjBYCOjeIQWXLCz/xqi2vQAD+9J0h78hH3b++oAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'vUhtvdAtRggXZxxKWn6dboZcopy0HmLXqvcKL+5bNt4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('4486298e04ffb1f3620c521f81adb5207f5d12c21b08a076589d2be3d8dae543', 4, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQFp8rsD4Au1oeZkBT1RHIJRyxWayau3f5UjeA0w4+0LzjLEyi9nGMs8elAH4lDhhDJxCJ8HhxbG+XT/cmQsu1QA=', 'RIYpjgT/sfNiDFIfga21IH9dEsIbCKB2WJ0r49ja5UMAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_2-horizon.sql b/services/horizon/internal/test/scenarios/asset_stat_trustlines_2-horizon.sql deleted file mode 100644 index db1db21bd9..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_2-horizon.sql +++ /dev/null @@ -1,961 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO asset_stats VALUES (1, '0', 1, 0, ''); - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_accounts VALUES (3, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 3, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_assets VALUES (1, 'credit_alphanum4', 'USD', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 1, true); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 17179873281, 1, 22, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 12884905985, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 8589938689, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (3, 8589938689, 3, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (2, 8589942785, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (4, 'a30feb1145fd3354ad5afc7d5b1f94d05b6dcfaecb0810d71fea1fee2d6b6052', '1276d34ca36295958f45f61de5659be4e1abdd9d66455adc13e9ec048ec6f2d6', 1, 1, '2019-06-03 16:37:35', '2019-06-03 16:37:36.392159', '2019-06-03 16:37:36.392159', 17179869184, 16, 1000000000000000000, 400, 100, 100000000, 1000000, 11, 'AAAACxJ200yjYpWVj0X2HeVlm+Thq92dZkVa3BPp7ASOxvLWq8h8Dblv+wye4hdRsuy90Y3iCPafp7x2aYKeXPqn7vEAAAAAXPVMzwAAAAAAAAAA33EmKJw3Wal+OUXaW5YmJOts5uge1kmyR6dBxxKsgl2vP2FNhCW4FBzyDMrkHBSRI1Sblv8DWbuyGLaDLY0eUgAAAAQN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (3, '1276d34ca36295958f45f61de5659be4e1abdd9d66455adc13e9ec048ec6f2d6', '3609e559ce9335b37e174b44c582b721d3f11dc4eb49de0efb672f76b41b9eec', 1, 1, '2019-06-03 16:37:34', '2019-06-03 16:37:36.410538', '2019-06-03 16:37:36.410539', 12884901888, 16, 1000000000000000000, 300, 100, 100000000, 1000000, 11, 'AAAACzYJ5VnOkzWzfhdLRMWCtyHT8R3E60neDvtnL3a0G57sCW6zWwwoK9T+JmR/5oRTEhLJ7wlHg6aCX28MpKtXJxkAAAAAXPVMzgAAAAAAAAAALLKPbMojH+RR+TSBDKGB/tufH2mL12ccCHr1Jn27yPCQ0NP7aVt+A7XC3ngeeog5wYstTHE/suJ/KNmpkoYJYwAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (2, '3609e559ce9335b37e174b44c582b721d3f11dc4eb49de0efb672f76b41b9eec', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 2, 2, '2019-06-03 16:37:33', '2019-06-03 16:37:36.421018', '2019-06-03 16:37:36.421018', 8589934592, 16, 1000000000000000000, 200, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Zu5H9cHd0qAsZj9Q6Y8yIIc6utkf/CO+Lm/0KbsfrzPUAAAAAXPVMzQAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP0PjS3Rf7hs8xVIBg2g8xKvqOO/n/g/XwgPR/HB7qe9psiJu4kNHR4oXHETId41PNJX7pJqo02A4o+5nRb3zuwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:37:36.435274', '2019-06-03 16:37:36.435274', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 17179873281, 1); -INSERT INTO history_operation_participants VALUES (2, 12884905985, 1); -INSERT INTO history_operation_participants VALUES (3, 8589938689, 2); -INSERT INTO history_operation_participants VALUES (4, 8589938689, 3); -INSERT INTO history_operation_participants VALUES (5, 8589942785, 2); -INSERT INTO history_operation_participants VALUES (6, 8589942785, 1); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 6, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (17179873281, 17179873280, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 17179873280, 1); -INSERT INTO history_transaction_participants VALUES (2, 12884905984, 1); -INSERT INTO history_transaction_participants VALUES (3, 8589938688, 2); -INSERT INTO history_transaction_participants VALUES (4, 8589938688, 3); -INSERT INTO history_transaction_participants VALUES (5, 8589942784, 2); -INSERT INTO history_transaction_participants VALUES (6, 8589942784, 1); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 6, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('4486298e04ffb1f3620c521f81adb5207f5d12c21b08a076589d2be3d8dae543', 4, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934594, 100, 1, '2019-06-03 16:37:36.392424', '2019-06-03 16:37:36.392424', 17179873280, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQFp8rsD4Au1oeZkBT1RHIJRyxWayau3f5UjeA0w4+0LzjLEyi9nGMs8elAH4lDhhDJxCJ8HhxbG+XT/cmQsu1QA=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{WnyuwPgC7Wh5mQFPVEcglHLFZrJq7d/lSN4DTDj7QvOMsTKL2cYyzx6UAfiUOGEMnEInweHFsb5dP9yZCy7VAA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:37:36.410725', '2019-06-03 16:37:36.410726', 12884905984, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{H2SYpbare/tB/Lw8x6QRvVNMjmLGqQjQGiBes63uA7XrZBuSHZ1JNR94Oi9zQ8Bp+ENfG2FUCWwu6OUGbKMEBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:37:36.421144', '2019-06-03 16:37:36.421144', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GI0HD09huYapwZoBhnoPSfJeHNRJ1JcZJRJR/bKma9Pe9Reji1n3v5uJKRbSPrCNItai4reQNCclp24WC1uaAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:37:36.421317', '2019-06-03 16:37:36.421317', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{ZiqUoL68CjttFwjn2H17BhBFLcGGmhH6kruspiZpQ5mviF+iOyIIG1GTKHEHWfeCDAHynUADal2yDu8rMHnjAg==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_2.rb b/services/horizon/internal/test/scenarios/asset_stat_trustlines_2.rb deleted file mode 100644 index ca7046d767..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_2.rb +++ /dev/null @@ -1,13 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :usd_gateway -create_account :scott -close_ledger - -trust :scott, :usd_gateway, "USD" -close_ledger - -trust :scott, :usd_gateway, "USD" -close_ledger diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_3-core.sql b/services/horizon/internal/test/scenarios/asset_stat_trustlines_3-core.sql deleted file mode 100644 index 12b0d0d81d..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_3-core.sql +++ /dev/null @@ -1,727 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999979999999800, 2, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 10000000000, 8589934592, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 9999999800, 8589934594, 2, NULL, '', 'AQAAAA==', 0, 3, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('7432efa86301e55aaf0772778f996607a4945206a3afa626ee66eb31d38d4837', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '69b2226ee24347478a171c44c8778d4f3495fba49aa8d36038a3ee6745bdf3bb', 2, 1559579836, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Zu5H9cHd0qAsZj9Q6Y8yIIc6utkf/CO+Lm/0KbsfrzPUAAAAAXPVMvAAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP0PjS3Rf7hs8xVIBg2g8xKvqOO/n/g/XwgPR/HB7qe9psiJu4kNHR4oXHETId41PNJX7pJqo02A4o+5nRb3zuwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('0936020da1ec96a4a0c69e895a9080fd74767067417fe5fb1b0cdecf19fc1ab8', '7432efa86301e55aaf0772778f996607a4945206a3afa626ee66eb31d38d4837', '3f512ddd1f53ac05a81aad7e5b8ebf1d0f18f3c5c593047ae70c2ad14f8a0192', 3, 1559579837, 'AAAAC3Qy76hjAeVarwdyd4+ZZgeklFIGo6+mJu5m6zHTjUg3dXqDplvemlCQM2Eody4ZBZGHd1krjbstYqYhd/Rby1UAAAAAXPVMvQAAAAAAAAAAqZ+gKTLothY9s7mUE9wPGSzC2wvgaWBDyFO+d3wnDjI/US3dH1OsBagarX5bjr8dDxjzxcWTBHrnDCrRT4oBkgAAAAMN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GBJ4IGN5UMNLX74J4GLBB44FFWGMXULYJKU5NAFZCZK6PHNROHYC34SX', 2, 'AAAAAFPEGb2jGrv/ieGWEPOFLYzL0XhKqdaAuRZV552xcfAtAAAAAAAAAAIAAAACAAAAAQAAAEi7kf1wd3SoCxmP1DpjzIghzq62R/8I74ub/Qpux+vM9QAAAABc9Uy8AAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABBc/MAEUGFFSjJd4Z5WQq+eH+7dSqCr1TUQKlC3gNfQUAAABANpwYYgSyUzriiK5pOT4fkjlpH3gdqNmpEYMp1Bvekq9aFiFDHHH3uIDmq85cs9FnNCibCYirFtIr0S3fIk/fAQ=='); -INSERT INTO scphistory VALUES ('GBJ4IGN5UMNLX74J4GLBB44FFWGMXULYJKU5NAFZCZK6PHNROHYC34SX', 3, 'AAAAAFPEGb2jGrv/ieGWEPOFLYzL0XhKqdaAuRZV552xcfAtAAAAAAAAAAMAAAACAAAAAQAAADB1eoOmW96aUJAzYSh3LhkFkYd3WSuNuy1ipiF39FvLVQAAAABc9Uy9AAAAAAAAAAAAAAABBc/MAEUGFFSjJd4Z5WQq+eH+7dSqCr1TUQKlC3gNfQUAAABA9Z+uUzrpFVeM5bdwOSubQlieCiXWBamGnR4o6bqV8AWAuK/opeM4DQwz9TMW9QWaCvfdKOl3xsa5EDFr7IBICQ=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('05cfcc0045061454a325de19e5642af9e1feedd4aa0abd535102a50b780d7d05', 3, 'AAAAAQAAAAEAAAAAU8QZvaMau/+J4ZYQ84UtjMvReEqp1oC5FlXnnbFx8C0AAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastclosedledger ', '0936020da1ec96a4a0c69e895a9080fd74767067417fe5fb1b0cdecf19fc1ab8'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 3, - "currentBuckets": [ - { - "curr": "d3656f6420186a7b97c63b78f5c407f1576d99ceaf5309339f5eab53d29b1308", - "next": { - "state": 0 - }, - "snap": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 1, - "output": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAABTxBm9oxq7/4nhlhDzhS2My9F4SqnWgLkWVeedsXHwLQAAAAAAAAADAAAAAwXPzABFBhRUoyXeGeVkKvnh/u3Uqgq9U1ECpQt4DX0FAAAAAQAAAJh1eoOmW96aUJAzYSh3LhkFkYd3WSuNuy1ipiF39FvLVQAAAABc9Uy9AAAAAAAAAAEAAAAAU8QZvaMau/+J4ZYQ84UtjMvReEqp1oC5FlXnnbFx8C0AAABArzND55LUdHGo6jjcij57/6mxrOsaGr9Ly4z+iV2mI/U5SFOnT48ZZEjPpiSskD715V4+vI0tbab+B2vqfA8sAAAAAAEAAACYdXqDplvemlCQM2Eody4ZBZGHd1krjbstYqYhd/Rby1UAAAAAXPVMvQAAAAAAAAABAAAAAFPEGb2jGrv/ieGWEPOFLYzL0XhKqdaAuRZV552xcfAtAAAAQK8zQ+eS1HRxqOo43Io+e/+psazrGhq/S8uM/oldpiP1OUhTp0+PGWRIz6YkrJA+9eVePryNLW2m/gdr6nwPLAAAAABAInShh5nj3I2wjrnx41caB3S1Dcvofe1A7Tpf/0TEoUrCCq1Y0bFUFv7EqoNGKy5CTX6YAntgV3TNNNGx4WZ+DQAAAABTxBm9oxq7/4nhlhDzhS2My9F4SqnWgLkWVeedsXHwLQAAAAAAAAADAAAAAgAAAAEAAAAwdXqDplvemlCQM2Eody4ZBZGHd1krjbstYqYhd/Rby1UAAAAAXPVMvQAAAAAAAAAAAAAAAQXPzABFBhRUoyXeGeVkKvnh/u3Uqgq9U1ECpQt4DX0FAAAAQPWfrlM66RVXjOW3cDkrm0JYngol1gWphp0eKOm6lfAFgLiv6KXjOA0MM/UzFvUFmgr33Sjpd8bGuRAxa+yASAkAAAABdDLvqGMB5VqvB3J3j5lmB6SUUgajr6Ym7mbrMdONSDcAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEMgAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQFIuyQo5bQLTEoP2UHNr/GyjDMHoqL9x3Zvsfw/Nz6c6pYtnWfb/TyhwkTctbte/EF0zzmevTiTz3COG3vJgWwoAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAAAEAAAAAAAAAAAAAAAEAAAAAAAAABgAAAAFVU0QxAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vf/////////8AAAAAAAAAAa7kvkwAAABAlnxa5Z5su4ezAE1OQOcKgCguO9e1poqNj/bmON3IebZNmeh48q6uvJ10Y9OES5jsZhEnKZ1aSI6oN+cM+nQ0BgAAAAEAAAABAAAAAQAAAABTxBm9oxq7/4nhlhDzhS2My9F4SqnWgLkWVeedsXHwLQAAAAA='); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD1', 9223372036854775807, 0, 1, 3, NULL, NULL); -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD2', 9223372036854775807, 0, 1, 3, NULL, NULL); - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('c1fb42a38cf10241a172e577a71760921f59764ef844c88e70a8aa8a45cc95b3', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('373bb9329939fdb7d4448e72b01a4063e350b04a6c0f0434bc43413440d95bc0', 3, 2, 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', '2zmOtK6JdWMlZDytIclOE7/AdLMj7oPhQb9wGl2QTxsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', '+Xyv+rjBYCOjeIQWXLCz/xqi2vQAD+9J0h78hH3b++oAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('c1fb42a38cf10241a172e577a71760921f59764ef844c88e70a8aa8a45cc95b3', 3, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEMQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQJZ8WuWebLuHswBNTkDnCoAoLjvXtaaKjY/25jjdyHm2TZnoePKurryddGPThEuY7GYRJymdWkiOqDfnDPp0NAY=', 'wftCo4zxAkGhcuV3pxdgkh9Zdk74RMiOcKiqikXMlbMAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QxAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('373bb9329939fdb7d4448e72b01a4063e350b04a6c0f0434bc43413440d95bc0', 3, 2, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEMgAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQFIuyQo5bQLTEoP2UHNr/GyjDMHoqL9x3Zvsfw/Nz6c6pYtnWfb/TyhwkTctbte/EF0zzmevTiTz3COG3vJgWwo=', 'Nzu5Mpk5/bfURI5ysBpAY+NQsEpsDwQ0vENBNEDZW8AAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QyAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_3-horizon.sql b/services/horizon/internal/test/scenarios/asset_stat_trustlines_3-horizon.sql deleted file mode 100644 index 86f3bb1089..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_3-horizon.sql +++ /dev/null @@ -1,962 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO asset_stats VALUES (1, '0', 1, 0, ''); -INSERT INTO asset_stats VALUES (2, '0', 1, 0, ''); - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (2, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_accounts VALUES (3, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 3, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_assets VALUES (1, 'credit_alphanum4', 'USD1', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_assets VALUES (2, 'credit_alphanum4', 'USD2', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 2, true); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 12884905985, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD1", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 12884910081, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD2", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (3, 8589938689, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 3, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (3, '0936020da1ec96a4a0c69e895a9080fd74767067417fe5fb1b0cdecf19fc1ab8', '7432efa86301e55aaf0772778f996607a4945206a3afa626ee66eb31d38d4837', 2, 2, '2019-06-03 16:37:17', '2019-06-03 16:37:19.125178', '2019-06-03 16:37:19.125178', 12884901888, 16, 1000000000000000000, 400, 100, 100000000, 1000000, 11, 'AAAAC3Qy76hjAeVarwdyd4+ZZgeklFIGo6+mJu5m6zHTjUg3dXqDplvemlCQM2Eody4ZBZGHd1krjbstYqYhd/Rby1UAAAAAXPVMvQAAAAAAAAAAqZ+gKTLothY9s7mUE9wPGSzC2wvgaWBDyFO+d3wnDjI/US3dH1OsBagarX5bjr8dDxjzxcWTBHrnDCrRT4oBkgAAAAMN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (2, '7432efa86301e55aaf0772778f996607a4945206a3afa626ee66eb31d38d4837', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 2, 2, '2019-06-03 16:37:16', '2019-06-03 16:37:19.142791', '2019-06-03 16:37:19.142792', 8589934592, 16, 1000000000000000000, 200, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Zu5H9cHd0qAsZj9Q6Y8yIIc6utkf/CO+Lm/0KbsfrzPUAAAAAXPVMvAAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP0PjS3Rf7hs8xVIBg2g8xKvqOO/n/g/XwgPR/HB7qe9psiJu4kNHR4oXHETId41PNJX7pJqo02A4o+5nRb3zuwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:37:19.155776', '2019-06-03 16:37:19.155776', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 12884905985, 1); -INSERT INTO history_operation_participants VALUES (2, 12884910081, 1); -INSERT INTO history_operation_participants VALUES (3, 8589938689, 3); -INSERT INTO history_operation_participants VALUES (4, 8589938689, 2); -INSERT INTO history_operation_participants VALUES (5, 8589942785, 3); -INSERT INTO history_operation_participants VALUES (6, 8589942785, 1); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 6, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD1", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (12884910081, 12884910080, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD2", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 12884905984, 1); -INSERT INTO history_transaction_participants VALUES (2, 12884910080, 1); -INSERT INTO history_transaction_participants VALUES (3, 8589938688, 3); -INSERT INTO history_transaction_participants VALUES (4, 8589938688, 2); -INSERT INTO history_transaction_participants VALUES (5, 8589942784, 3); -INSERT INTO history_transaction_participants VALUES (6, 8589942784, 1); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 6, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('c1fb42a38cf10241a172e577a71760921f59764ef844c88e70a8aa8a45cc95b3', 3, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:37:19.125465', '2019-06-03 16:37:19.125465', 12884905984, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEMQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQJZ8WuWebLuHswBNTkDnCoAoLjvXtaaKjY/25jjdyHm2TZnoePKurryddGPThEuY7GYRJymdWkiOqDfnDPp0NAY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QxAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{lnxa5Z5su4ezAE1OQOcKgCguO9e1poqNj/bmON3IebZNmeh48q6uvJ10Y9OES5jsZhEnKZ1aSI6oN+cM+nQ0Bg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('373bb9329939fdb7d4448e72b01a4063e350b04a6c0f0434bc43413440d95bc0', 3, 2, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934594, 100, 1, '2019-06-03 16:37:19.125835', '2019-06-03 16:37:19.125836', 12884910080, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEMgAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQFIuyQo5bQLTEoP2UHNr/GyjDMHoqL9x3Zvsfw/Nz6c6pYtnWfb/TyhwkTctbte/EF0zzmevTiTz3COG3vJgWwo=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QyAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{Ui7JCjltAtMSg/ZQc2v8bKMMweiov3Hdm+x/D83Ppzqli2dZ9v9PKHCRNy1u178QXTPOZ69OJPPcI4be8mBbCg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:37:19.143014', '2019-06-03 16:37:19.143015', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GI0HD09huYapwZoBhnoPSfJeHNRJ1JcZJRJR/bKma9Pe9Reji1n3v5uJKRbSPrCNItai4reQNCclp24WC1uaAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:37:19.143366', '2019-06-03 16:37:19.143367', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{ZiqUoL68CjttFwjn2H17BhBFLcGGmhH6kruspiZpQ5mviF+iOyIIG1GTKHEHWfeCDAHynUADal2yDu8rMHnjAg==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_3.rb b/services/horizon/internal/test/scenarios/asset_stat_trustlines_3.rb deleted file mode 100644 index 0b2732fd35..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_3.rb +++ /dev/null @@ -1,11 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :usd_gateway -create_account :scott -close_ledger - -trust :scott, :usd_gateway, "USD1" -trust :scott, :usd_gateway, "USD2" -close_ledger diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_4-core.sql b/services/horizon/internal/test/scenarios/asset_stat_trustlines_4-core.sql deleted file mode 100644 index 192d347437..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_4-core.sql +++ /dev/null @@ -1,727 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999979999999800, 2, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 9999999900, 8589934593, 1, NULL, '', 'AQAAAA==', 0, 3, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 9999999900, 8589934593, 1, NULL, '', 'AQAAAA==', 0, 3, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('8f12435bd1a23276222695e5b65019af41e0b410395644ac360ab34ff5d72add', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '69b2226ee24347478a171c44c8778d4f3495fba49aa8d36038a3ee6745bdf3bb', 2, 1559579792, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Zu5H9cHd0qAsZj9Q6Y8yIIc6utkf/CO+Lm/0KbsfrzPUAAAAAXPVMkAAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP0PjS3Rf7hs8xVIBg2g8xKvqOO/n/g/XwgPR/HB7qe9psiJu4kNHR4oXHETId41PNJX7pJqo02A4o+5nRb3zuwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('8aebdbebcb22c9e850aed4fc170a46f04cdbad757304ff80bdae9647d09e26e2', '8f12435bd1a23276222695e5b65019af41e0b410395644ac360ab34ff5d72add', 'dd2112db5529f4afd1ae4b55abde902c39c85289978be8667df794d92f46e2dc', 3, 1559579793, 'AAAAC48SQ1vRojJ2IiaV5bZQGa9B4LQQOVZErDYKs0/11yrdc7p1d2ioS/oGKu4qKjuT1c0Fvkqtyx6YdW1LbIMYKPcAAAAAXPVMkQAAAAAAAAAA49F11bpUjk7WVHNZpzNSuDZE+6J2QRCzbusrKlZkk6/dIRLbVSn0r9GuS1Wr3pAsOchSiZeL6GZ995TZL0bi3AAAAAMN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GCKEESBPDVRVAYOZA4AQ77ABE6OISVH5VLANSOLKJDWAXGC4BDQ3T3FL', 2, 'AAAAAJRCSC8dY1Bh2QcBD/wBJ5yJVP2qwNk5akjsC5hcCOG5AAAAAAAAAAIAAAACAAAAAQAAAEi7kf1wd3SoCxmP1DpjzIghzq62R/8I74ub/Qpux+vM9QAAAABc9UyQAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABlrS/lBN1EwkwHTwMMTktFeIkfvPl7oinun5NXzwY5EcAAABAEz32lpwwRmsv/m8nb8UYFZV7UKYCcj/IPO9cfmYytdrZhPZ9dvJg5cLLb3muSB2YnNWMIZCLDE42NVIHmkIGAQ=='); -INSERT INTO scphistory VALUES ('GCKEESBPDVRVAYOZA4AQ77ABE6OISVH5VLANSOLKJDWAXGC4BDQ3T3FL', 3, 'AAAAAJRCSC8dY1Bh2QcBD/wBJ5yJVP2qwNk5akjsC5hcCOG5AAAAAAAAAAMAAAACAAAAAQAAADBzunV3aKhL+gYq7ioqO5PVzQW+Sq3LHph1bUtsgxgo9wAAAABc9UyRAAAAAAAAAAAAAAABlrS/lBN1EwkwHTwMMTktFeIkfvPl7oinun5NXzwY5EcAAABAH020Spzy8Ph9E25r7V3e19G4oFXOS2b3/YaWemzpiMWs2frQ9uHw4Jrk2EmxvCna7hgt31XC+Aviq4IEZb76BQ=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('96b4bf9413751309301d3c0c31392d15e2247ef3e5ee88a7ba7e4d5f3c18e447', 3, 'AAAAAQAAAAEAAAAAlEJILx1jUGHZBwEP/AEnnIlU/arA2TlqSOwLmFwI4bkAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastclosedledger ', '8aebdbebcb22c9e850aed4fc170a46f04cdbad757304ff80bdae9647d09e26e2'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 3, - "currentBuckets": [ - { - "curr": "8f3301b4fe61769399f5fc9b495f3d6432acb10c1edcb691f45322c08d61154c", - "next": { - "state": 0 - }, - "snap": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 1, - "output": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAACUQkgvHWNQYdkHAQ/8ASeciVT9qsDZOWpI7AuYXAjhuQAAAAAAAAADAAAAA5a0v5QTdRMJMB08DDE5LRXiJH7z5e6Ip7p+TV88GORHAAAAAQAAAJhzunV3aKhL+gYq7ioqO5PVzQW+Sq3LHph1bUtsgxgo9wAAAABc9UyRAAAAAAAAAAEAAAAAlEJILx1jUGHZBwEP/AEnnIlU/arA2TlqSOwLmFwI4bkAAABAHjCp6WI44GWSwOh2jGU84+45MBqG0CkgZtWG/8LePTpzFM4sQnNbdCfOn1Ir+PrELdadWYqyMCfIwnbv5j1vCwAAAAEAAACYc7p1d2ioS/oGKu4qKjuT1c0Fvkqtyx6YdW1LbIMYKPcAAAAAXPVMkQAAAAAAAAABAAAAAJRCSC8dY1Bh2QcBD/wBJ5yJVP2qwNk5akjsC5hcCOG5AAAAQB4wqeliOOBlksDodoxlPOPuOTAahtApIGbVhv/C3j06cxTOLEJzW3Qnzp9SK/j6xC3WnVmKsjAnyMJ27+Y9bwsAAABA/hey7v0d3+Fdz6XCw9urslSsijpsNNjFFxO4JgGPuuA3DT/Z24tQswwpt/RxeDpbMr1xcH/rdDmne1OOn8v4BwAAAACUQkgvHWNQYdkHAQ/8ASeciVT9qsDZOWpI7AuYXAjhuQAAAAAAAAADAAAAAgAAAAEAAAAwc7p1d2ioS/oGKu4qKjuT1c0Fvkqtyx6YdW1LbIMYKPcAAAAAXPVMkQAAAAAAAAAAAAAAAZa0v5QTdRMJMB08DDE5LRXiJH7z5e6Ip7p+TV88GORHAAAAQB9NtEqc8vD4fRNua+1d3tfRuKBVzktm9/2Glnps6YjFrNn60Pbh8OCa5NhJsbwp2u4YLd9VwvgL4quCBGW++gUAAAABjxJDW9GiMnYiJpXltlAZr0HgtBA5VkSsNgqzT/XXKt0AAAACAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TH//////////AAAAAAAAAAH5kC3vAAAAQKsXCTQaskp1gtnIfwAT8+KKY2+hL/bv7UMFLJ/Hz9usgndf5XhE/65EFJ936u99chtOaMCYDHFXzsAF//2LogMAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAAAEAAAAAAAAAAAAAAAEAAAAAAAAABgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vf/////////8AAAAAAAAAAa7kvkwAAABAH2SYpbare/tB/Lw8x6QRvVNMjmLGqQjQGiBes63uA7XrZBuSHZ1JNR94Oi9zQ8Bp+ENfG2FUCWwu6OUGbKMEBgAAAAEAAAABAAAAAQAAAACUQkgvHWNQYdkHAQ/8ASeciVT9qsDZOWpI7AuYXAjhuQAAAAA='); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO trustlines VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 'USD', 9223372036854775807, 0, 1, 3, NULL, NULL); -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 0, 1, 3, NULL, NULL); - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('2e85d9a320409ec6017076f0fb34809dcd723202d5af498af04350faa9a7e361', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', '2zmOtK6JdWMlZDytIclOE7/AdLMj7oPhQb9wGl2QTxsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', '+Xyv+rjBYCOjeIQWXLCz/xqi2vQAD+9J0h78hH3b++oAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('2e85d9a320409ec6017076f0fb34809dcd723202d5af498af04350faa9a7e361', 3, 1, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TH//////////AAAAAAAAAAH5kC3vAAAAQKsXCTQaskp1gtnIfwAT8+KKY2+hL/bv7UMFLJ/Hz9usgndf5XhE/65EFJ936u99chtOaMCYDHFXzsAF//2LogM=', 'LoXZoyBAnsYBcHbw+zSAnc1yMgLVr0mK8ENQ+qmn42EAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFVU0QAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 2, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'vUhtvdAtRggXZxxKWn6dboZcopy0HmLXqvcKL+5bNt4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_4-horizon.sql b/services/horizon/internal/test/scenarios/asset_stat_trustlines_4-horizon.sql deleted file mode 100644 index b8bd9b28fb..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_4-horizon.sql +++ /dev/null @@ -1,962 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO asset_stats VALUES (1, '0', 1, 0, ''); -INSERT INTO asset_stats VALUES (2, '0', 1, 0, ''); - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (2, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_accounts VALUES (3, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 3, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_assets VALUES (1, 'credit_alphanum4', 'USD', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_assets VALUES (2, 'credit_alphanum4', 'USD', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 2, true); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (2, 12884905985, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); -INSERT INTO history_effects VALUES (1, 12884910081, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (3, 8589938689, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 3, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (3, '8aebdbebcb22c9e850aed4fc170a46f04cdbad757304ff80bdae9647d09e26e2', '8f12435bd1a23276222695e5b65019af41e0b410395644ac360ab34ff5d72add', 2, 2, '2019-06-03 16:36:33', '2019-06-03 16:36:35.723236', '2019-06-03 16:36:35.723236', 12884901888, 16, 1000000000000000000, 400, 100, 100000000, 1000000, 11, 'AAAAC48SQ1vRojJ2IiaV5bZQGa9B4LQQOVZErDYKs0/11yrdc7p1d2ioS/oGKu4qKjuT1c0Fvkqtyx6YdW1LbIMYKPcAAAAAXPVMkQAAAAAAAAAA49F11bpUjk7WVHNZpzNSuDZE+6J2QRCzbusrKlZkk6/dIRLbVSn0r9GuS1Wr3pAsOchSiZeL6GZ995TZL0bi3AAAAAMN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (2, '8f12435bd1a23276222695e5b65019af41e0b410395644ac360ab34ff5d72add', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 2, 2, '2019-06-03 16:36:32', '2019-06-03 16:36:35.742229', '2019-06-03 16:36:35.742229', 8589934592, 16, 1000000000000000000, 200, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Zu5H9cHd0qAsZj9Q6Y8yIIc6utkf/CO+Lm/0KbsfrzPUAAAAAXPVMkAAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP0PjS3Rf7hs8xVIBg2g8xKvqOO/n/g/XwgPR/HB7qe9psiJu4kNHR4oXHETId41PNJX7pJqo02A4o+5nRb3zuwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:36:35.753194', '2019-06-03 16:36:35.753194', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 12884905985, 2); -INSERT INTO history_operation_participants VALUES (2, 12884910081, 1); -INSERT INTO history_operation_participants VALUES (3, 8589938689, 3); -INSERT INTO history_operation_participants VALUES (4, 8589938689, 2); -INSERT INTO history_operation_participants VALUES (5, 8589942785, 3); -INSERT INTO history_operation_participants VALUES (6, 8589942785, 1); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 6, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "trustor": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (12884910081, 12884910080, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 12884905984, 2); -INSERT INTO history_transaction_participants VALUES (2, 12884910080, 1); -INSERT INTO history_transaction_participants VALUES (3, 8589938688, 3); -INSERT INTO history_transaction_participants VALUES (4, 8589938688, 2); -INSERT INTO history_transaction_participants VALUES (5, 8589942784, 3); -INSERT INTO history_transaction_participants VALUES (6, 8589942784, 1); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 6, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('2e85d9a320409ec6017076f0fb34809dcd723202d5af498af04350faa9a7e361', 3, 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934593, 100, 1, '2019-06-03 16:36:35.723448', '2019-06-03 16:36:35.723448', 12884905984, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TH//////////AAAAAAAAAAH5kC3vAAAAQKsXCTQaskp1gtnIfwAT8+KKY2+hL/bv7UMFLJ/Hz9usgndf5XhE/65EFJ936u99chtOaMCYDHFXzsAF//2LogM=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFVU0QAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{qxcJNBqySnWC2ch/ABPz4opjb6Ev9u/tQwUsn8fP26yCd1/leET/rkQUn3fq731yG05owJgMcVfOwAX//YuiAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 2, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:36:35.723693', '2019-06-03 16:36:35.723693', 12884910080, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{H2SYpbare/tB/Lw8x6QRvVNMjmLGqQjQGiBes63uA7XrZBuSHZ1JNR94Oi9zQ8Bp+ENfG2FUCWwu6OUGbKMEBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:36:35.74236', '2019-06-03 16:36:35.742361', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GI0HD09huYapwZoBhnoPSfJeHNRJ1JcZJRJR/bKma9Pe9Reji1n3v5uJKRbSPrCNItai4reQNCclp24WC1uaAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:36:35.742537', '2019-06-03 16:36:35.742537', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{ZiqUoL68CjttFwjn2H17BhBFLcGGmhH6kruspiZpQ5mviF+iOyIIG1GTKHEHWfeCDAHynUADal2yDu8rMHnjAg==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_4.rb b/services/horizon/internal/test/scenarios/asset_stat_trustlines_4.rb deleted file mode 100644 index 91bde4fe1f..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_4.rb +++ /dev/null @@ -1,11 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :usd_gateway -create_account :scott -close_ledger - -trust :scott, :usd_gateway, "USD" -trust :usd_gateway, :scott, "USD" -close_ledger diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_5-core.sql b/services/horizon/internal/test/scenarios/asset_stat_trustlines_5-core.sql deleted file mode 100644 index 1c05523ebd..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_5-core.sql +++ /dev/null @@ -1,728 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999979999999800, 2, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 9899999800, 8589934594, 1, NULL, '', 'AQAAAA==', 0, 4, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 10100000000, 8589934592, 0, NULL, '', 'AQAAAA==', 0, 4, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('3f34ac8ae79b89cf78bfd062a56b414eddb9c455125a23519084e9080609b6e6', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '69b2226ee24347478a171c44c8778d4f3495fba49aa8d36038a3ee6745bdf3bb', 2, 1559579784, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Zu5H9cHd0qAsZj9Q6Y8yIIc6utkf/CO+Lm/0KbsfrzPUAAAAAXPVMiAAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP0PjS3Rf7hs8xVIBg2g8xKvqOO/n/g/XwgPR/HB7qe9psiJu4kNHR4oXHETId41PNJX7pJqo02A4o+5nRb3zuwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('4894f2f6ee4f3711000766708b952334b2c9e5cd9adf9766eba635ada86e07c8', '3f34ac8ae79b89cf78bfd062a56b414eddb9c455125a23519084e9080609b6e6', '90d0d3fb695b7e03b5c2de781e7a8839c18b2d4c713fb2e27f28d9a992860963', 3, 1559579785, 'AAAACz80rIrnm4nPeL/QYqVrQU7ducRVElojUZCE6QgGCbbm5qzEzYm6SssmcCmds1lUPaUqGPn6FnpRzo8OHaOcpjQAAAAAXPVMiQAAAAAAAAAALLKPbMojH+RR+TSBDKGB/tufH2mL12ccCHr1Jn27yPCQ0NP7aVt+A7XC3ngeeog5wYstTHE/suJ/KNmpkoYJYwAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('f2cc16fb7bb74a913184795ec5e82b3bb312ba33b88805b127c6fab01fdbc845', '4894f2f6ee4f3711000766708b952334b2c9e5cd9adf9766eba635ada86e07c8', '91216354bd8994cf9383cd1650315e3f8b05ecfcb82564e34db2e392f008d97b', 4, 1559579786, 'AAAAC0iU8vbuTzcRAAdmcIuVIzSyyeXNmt+XZuumNa2obgfImVUk9WfW40WDvmUH4I5yOpRMKMngWIn7p53JiyLVJ44AAAAAXPVMigAAAAAAAAAA6Ap3Xy0qNN834YP/UI/nracOqnsrZT8u288mLAvc1ByRIWNUvYmUz5ODzRZQMV4/iwXs/LglZONNsuOS8AjZewAAAAQN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GBYRMKMP6PTAYP4FZX4MZW4PLKG2YI4Y5S5UROX3TSV7BCFUWDNGYXQQ', 2, 'AAAAAHEWKY/z5gw/hc34zNuPWo2sI5jsu0i6+5yr8Ii0sNpsAAAAAAAAAAIAAAACAAAAAQAAAEi7kf1wd3SoCxmP1DpjzIghzq62R/8I74ub/Qpux+vM9QAAAABc9UyIAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABOJ7dLC0I1XqEtb6jUp/WXiqSWPbj+TI5RPD7EvuDmkYAAABAY9aYGzkIyd9gFrcHElyDUUADaGYi908yjHcL/BNLNyoEEKDY39SJjyZSUppGqQMKHY9CopD38qOqy98aOzn5Bw=='); -INSERT INTO scphistory VALUES ('GBYRMKMP6PTAYP4FZX4MZW4PLKG2YI4Y5S5UROX3TSV7BCFUWDNGYXQQ', 3, 'AAAAAHEWKY/z5gw/hc34zNuPWo2sI5jsu0i6+5yr8Ii0sNpsAAAAAAAAAAMAAAACAAAAAQAAADDmrMTNibpKyyZwKZ2zWVQ9pSoY+foWelHOjw4do5ymNAAAAABc9UyJAAAAAAAAAAAAAAABOJ7dLC0I1XqEtb6jUp/WXiqSWPbj+TI5RPD7EvuDmkYAAABAP6q33Bftdq0MZL2yw7n6rDxDsMIZ5OnNmDnLBu23DZrGgsiy4/H8cyPQQsWIKYvR/8l4AQGLQ7ls2v2veuGvBA=='); -INSERT INTO scphistory VALUES ('GBYRMKMP6PTAYP4FZX4MZW4PLKG2YI4Y5S5UROX3TSV7BCFUWDNGYXQQ', 4, 'AAAAAHEWKY/z5gw/hc34zNuPWo2sI5jsu0i6+5yr8Ii0sNpsAAAAAAAAAAQAAAACAAAAAQAAADCZVST1Z9bjRYO+ZQfgjnI6lEwoyeBYifunncmLItUnjgAAAABc9UyKAAAAAAAAAAAAAAABOJ7dLC0I1XqEtb6jUp/WXiqSWPbj+TI5RPD7EvuDmkYAAABArr+UB51X7Yuf62iJQSEVzwjXI/Jzsr2B4W/77tvE/mrK8IvUn6+U4P422xV4dC7+K1UeZfz2paQbGhq7ErODDA=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('389edd2c2d08d57a84b5bea3529fd65e2a9258f6e3f9323944f0fb12fb839a46', 4, 'AAAAAQAAAAEAAAAAcRYpj/PmDD+FzfjM249ajawjmOy7SLr7nKvwiLSw2mwAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 4, - "currentBuckets": [ - { - "curr": "854f6be6f46266f9d2fee50ba44a5b997fa6a973e737dd1985acb395199490c0", - "next": { - "state": 0 - }, - "snap": "5e9b6cf93c3d773407f0bd3735e8d02aa3ab4e6e6a4c61f0126008e4c7cf7bf0" - }, - { - "curr": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9", - "next": { - "state": 1, - "output": "5e9b6cf93c3d773407f0bd3735e8d02aa3ab4e6e6a4c61f0126008e4c7cf7bf0" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAABxFimP8+YMP4XN+Mzbj1qNrCOY7LtIuvucq/CItLDabAAAAAAAAAAEAAAAAzie3SwtCNV6hLW+o1Kf1l4qklj24/kyOUTw+xL7g5pGAAAAAQAAAJiZVST1Z9bjRYO+ZQfgjnI6lEwoyeBYifunncmLItUnjgAAAABc9UyKAAAAAAAAAAEAAAAAcRYpj/PmDD+FzfjM249ajawjmOy7SLr7nKvwiLSw2mwAAABALOkpCJPnJLZ4gvuhu5cBD12PK2vUMx8stp+Kg5ETgmbFfxMUWpDjKVd/6VuRtiyjIdn0qC4WAJQu7USHggBzCgAAAAEAAACYmVUk9WfW40WDvmUH4I5yOpRMKMngWIn7p53JiyLVJ44AAAAAXPVMigAAAAAAAAABAAAAAHEWKY/z5gw/hc34zNuPWo2sI5jsu0i6+5yr8Ii0sNpsAAAAQCzpKQiT5yS2eIL7obuXAQ9djytr1DMfLLafioORE4JmxX8TFFqQ4ylXf+lbkbYsoyHZ9KguFgCULu1Eh4IAcwoAAABA4ySgQHshZ/lpvjxOSguIK0vyxJGW0nlEH05l3iXjmQopBTAR4UcvbN4JpfxgNuPBzZN/b/pBTspQrPhZ6xKmCwAAAABxFimP8+YMP4XN+Mzbj1qNrCOY7LtIuvucq/CItLDabAAAAAAAAAAEAAAAAgAAAAEAAAAwmVUk9WfW40WDvmUH4I5yOpRMKMngWIn7p53JiyLVJ44AAAAAXPVMigAAAAAAAAAAAAAAATie3SwtCNV6hLW+o1Kf1l4qklj24/kyOUTw+xL7g5pGAAAAQK6/lAedV+2Ln+toiUEhFc8I1yPyc7K9geFv++7bxP5qyvCL1J+vlOD+NtsVeHQu/itVHmX89qWkGxoauxKzgwwAAAABSJTy9u5PNxEAB2Zwi5UjNLLJ5c2a35dm66Y1rahuB8gAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAAAAAAAX14QAAAAAAAAAAAa7kvkwAAABAD8OHQOSeNgKiCX3tTSvuXhy2/pE8FTbrkHZ0FfVBYAjka/2DIQuvVw98shOatgxBUcAAE6v10atB+uEfUIRCAgAAAAEAAAABAAAAAQAAAABxFimP8+YMP4XN+Mzbj1qNrCOY7LtIuvucq/CItLDabAAAAAA='); -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastclosedledger ', 'f2cc16fb7bb74a913184795ec5e82b3bb312ba33b88805b127c6fab01fdbc845'); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 0, 1, 3, NULL, NULL); - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('5eba4195dc8326158c5d87c641a2f17a3a276f8889c1ade84b5c60b462684bc0', 4, 1, 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', '2zmOtK6JdWMlZDytIclOE7/AdLMj7oPhQb9wGl2QTxsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', '+Xyv+rjBYCOjeIQWXLCz/xqi2vQAD+9J0h78hH3b++oAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'vUhtvdAtRggXZxxKWn6dboZcopy0HmLXqvcKL+5bNt4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('5eba4195dc8326158c5d87c641a2f17a3a276f8889c1ade84b5c60b462684bc0', 4, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAAAAAAAX14QAAAAAAAAAAAa7kvkwAAABAD8OHQOSeNgKiCX3tTSvuXhy2/pE8FTbrkHZ0FfVBYAjka/2DIQuvVw98shOatgxBUcAAE6v10atB+uEfUIRCAg==', 'XrpBldyDJhWMXYfGQaLxejonb4iJwa3oS1xgtGJoS8AAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJaAcUAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAMAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJOFgI4AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_5-horizon.sql b/services/horizon/internal/test/scenarios/asset_stat_trustlines_5-horizon.sql deleted file mode 100644 index ff2a4c1594..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_5-horizon.sql +++ /dev/null @@ -1,964 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO asset_stats VALUES (1, '0', 1, 0, ''); - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_accounts VALUES (2, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (3, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 3, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_assets VALUES (1, 'credit_alphanum4', 'USD', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 1, true); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 17179873281, 1, 2, '{"amount": "10.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 17179873281, 2, 3, '{"amount": "10.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 12884905985, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 8589938689, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (3, 8589938689, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589938689, 3, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 8589942785, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 8589942785, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (4, 'f2cc16fb7bb74a913184795ec5e82b3bb312ba33b88805b127c6fab01fdbc845', '4894f2f6ee4f3711000766708b952334b2c9e5cd9adf9766eba635ada86e07c8', 1, 1, '2019-06-03 16:36:26', '2019-06-03 16:36:27.204137', '2019-06-03 16:36:27.204137', 17179869184, 16, 1000000000000000000, 400, 100, 100000000, 1000000, 11, 'AAAAC0iU8vbuTzcRAAdmcIuVIzSyyeXNmt+XZuumNa2obgfImVUk9WfW40WDvmUH4I5yOpRMKMngWIn7p53JiyLVJ44AAAAAXPVMigAAAAAAAAAA6Ap3Xy0qNN834YP/UI/nracOqnsrZT8u288mLAvc1ByRIWNUvYmUz5ODzRZQMV4/iwXs/LglZONNsuOS8AjZewAAAAQN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (3, '4894f2f6ee4f3711000766708b952334b2c9e5cd9adf9766eba635ada86e07c8', '3f34ac8ae79b89cf78bfd062a56b414eddb9c455125a23519084e9080609b6e6', 1, 1, '2019-06-03 16:36:25', '2019-06-03 16:36:27.227916', '2019-06-03 16:36:27.227916', 12884901888, 16, 1000000000000000000, 300, 100, 100000000, 1000000, 11, 'AAAACz80rIrnm4nPeL/QYqVrQU7ducRVElojUZCE6QgGCbbm5qzEzYm6SssmcCmds1lUPaUqGPn6FnpRzo8OHaOcpjQAAAAAXPVMiQAAAAAAAAAALLKPbMojH+RR+TSBDKGB/tufH2mL12ccCHr1Jn27yPCQ0NP7aVt+A7XC3ngeeog5wYstTHE/suJ/KNmpkoYJYwAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (2, '3f34ac8ae79b89cf78bfd062a56b414eddb9c455125a23519084e9080609b6e6', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 2, 2, '2019-06-03 16:36:24', '2019-06-03 16:36:27.241769', '2019-06-03 16:36:27.241769', 8589934592, 16, 1000000000000000000, 200, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Zu5H9cHd0qAsZj9Q6Y8yIIc6utkf/CO+Lm/0KbsfrzPUAAAAAXPVMiAAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP0PjS3Rf7hs8xVIBg2g8xKvqOO/n/g/XwgPR/HB7qe9psiJu4kNHR4oXHETId41PNJX7pJqo02A4o+5nRb3zuwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:36:27.25427', '2019-06-03 16:36:27.25427', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 17179873281, 2); -INSERT INTO history_operation_participants VALUES (2, 17179873281, 1); -INSERT INTO history_operation_participants VALUES (3, 12884905985, 2); -INSERT INTO history_operation_participants VALUES (4, 8589938689, 3); -INSERT INTO history_operation_participants VALUES (5, 8589938689, 1); -INSERT INTO history_operation_participants VALUES (6, 8589942785, 3); -INSERT INTO history_operation_participants VALUES (7, 8589942785, 2); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 7, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (17179873281, 17179873280, 1, 1, '{"to": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "from": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "amount": "10.0000000", "asset_type": "native"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 17179873280, 1); -INSERT INTO history_transaction_participants VALUES (2, 17179873280, 2); -INSERT INTO history_transaction_participants VALUES (3, 12884905984, 2); -INSERT INTO history_transaction_participants VALUES (4, 8589938688, 3); -INSERT INTO history_transaction_participants VALUES (5, 8589938688, 1); -INSERT INTO history_transaction_participants VALUES (6, 8589942784, 3); -INSERT INTO history_transaction_participants VALUES (7, 8589942784, 2); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 7, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('5eba4195dc8326158c5d87c641a2f17a3a276f8889c1ade84b5c60b462684bc0', 4, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934594, 100, 1, '2019-06-03 16:36:27.204356', '2019-06-03 16:36:27.204356', 17179873280, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAAAAAAAX14QAAAAAAAAAAAa7kvkwAAABAD8OHQOSeNgKiCX3tTSvuXhy2/pE8FTbrkHZ0FfVBYAjka/2DIQuvVw98shOatgxBUcAAE6v10atB+uEfUIRCAg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJaAcUAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAMAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJOFgI4AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{D8OHQOSeNgKiCX3tTSvuXhy2/pE8FTbrkHZ0FfVBYAjka/2DIQuvVw98shOatgxBUcAAE6v10atB+uEfUIRCAg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:36:27.228085', '2019-06-03 16:36:27.228085', 12884905984, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{H2SYpbare/tB/Lw8x6QRvVNMjmLGqQjQGiBes63uA7XrZBuSHZ1JNR94Oi9zQ8Bp+ENfG2FUCWwu6OUGbKMEBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:36:27.242034', '2019-06-03 16:36:27.242034', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GI0HD09huYapwZoBhnoPSfJeHNRJ1JcZJRJR/bKma9Pe9Reji1n3v5uJKRbSPrCNItai4reQNCclp24WC1uaAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:36:27.242277', '2019-06-03 16:36:27.242277', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{ZiqUoL68CjttFwjn2H17BhBFLcGGmhH6kruspiZpQ5mviF+iOyIIG1GTKHEHWfeCDAHynUADal2yDu8rMHnjAg==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_5.rb b/services/horizon/internal/test/scenarios/asset_stat_trustlines_5.rb deleted file mode 100644 index 7f4d2b94e5..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_5.rb +++ /dev/null @@ -1,13 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :usd_gateway -create_account :scott -close_ledger - -trust :scott, :usd_gateway, "USD" -close_ledger - -payment :scott, :usd_gateway, [:native, "10.00"] -close_ledger diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_6-core.sql b/services/horizon/internal/test/scenarios/asset_stat_trustlines_6-core.sql deleted file mode 100644 index 2f850ae136..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_6-core.sql +++ /dev/null @@ -1,728 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999979999999800, 2, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 9999999900, 8589934593, 1, NULL, '', 'AQAAAA==', 0, 3, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 9999999900, 8589934593, 0, NULL, '', 'AQAAAA==', 0, 4, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('1a53a62e971d98d3d68ee79d441faae6cd2630ba77d001d45e746d285c493c88', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '69b2226ee24347478a171c44c8778d4f3495fba49aa8d36038a3ee6745bdf3bb', 2, 1559579870, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Zu5H9cHd0qAsZj9Q6Y8yIIc6utkf/CO+Lm/0KbsfrzPUAAAAAXPVM3gAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP0PjS3Rf7hs8xVIBg2g8xKvqOO/n/g/XwgPR/HB7qe9psiJu4kNHR4oXHETId41PNJX7pJqo02A4o+5nRb3zuwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('0ec1fa4449aca562f2faa84cb742bbeb3c058c1f1bb824a252be217fd7b20c3a', '1a53a62e971d98d3d68ee79d441faae6cd2630ba77d001d45e746d285c493c88', '90d0d3fb695b7e03b5c2de781e7a8839c18b2d4c713fb2e27f28d9a992860963', 3, 1559579871, 'AAAACxpTpi6XHZjT1o7nnUQfqubNJjC6d9AB1F50bShcSTyIZS9kdwZoE5n2wefynfMkhpZJIZb7Li/oLXyYsPVCmWUAAAAAXPVM3wAAAAAAAAAALLKPbMojH+RR+TSBDKGB/tufH2mL12ccCHr1Jn27yPCQ0NP7aVt+A7XC3ngeeog5wYstTHE/suJ/KNmpkoYJYwAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('d37666cd87e03990ff15d97dfb78842d45d8ee1b1647e3b3ce442b24b48eb897', '0ec1fa4449aca562f2faa84cb742bbeb3c058c1f1bb824a252be217fd7b20c3a', 'c77022f15d1ada8ef257889b9f2e9cc6d5137903fbd9100af411602fe7efab2d', 4, 1559579872, 'AAAACw7B+kRJrKVi8vqoTLdCu+s8BYwfG7gkolK+IX/Xsgw6mLQGbHGkrhoGuUXXla4bmbTTTPC7Sqc+4AriwFv0lj4AAAAAXPVM4AAAAAAAAAAAD7vJ2GXYn9oO/fo5QrmHKnTVIqBarv7BmCtsbOtbf6THcCLxXRrajvJXiJufLpzG1RN5A/vZEAr0EWAv5++rLQAAAAQN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GCIHGSHT7XIJVBEMNTY43I2EVB57FPDVIZWKOHPHXUNFADPVCLDQDC22', 2, 'AAAAAJBzSPP90JqEjGzxzaNEqHvyvHVGbKcd570aUA31EscBAAAAAAAAAAIAAAACAAAAAQAAAEi7kf1wd3SoCxmP1DpjzIghzq62R/8I74ub/Qpux+vM9QAAAABc9UzeAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABmU6Za5Mcq2/JocOLDKqxpcAQj3/DF6akjjzmnxLc2EUAAABATtNudx1qB1EeBJ99+9ymFQOyDj0VP/Brj3Um5lT4nOcqyqMLEAsjcDDutPkB8l0I9Boia6mYPckJFxvkk7xvDQ=='); -INSERT INTO scphistory VALUES ('GCIHGSHT7XIJVBEMNTY43I2EVB57FPDVIZWKOHPHXUNFADPVCLDQDC22', 3, 'AAAAAJBzSPP90JqEjGzxzaNEqHvyvHVGbKcd570aUA31EscBAAAAAAAAAAMAAAACAAAAAQAAADBlL2R3BmgTmfbB5/Kd8ySGlkkhlvsuL+gtfJiw9UKZZQAAAABc9UzfAAAAAAAAAAAAAAABmU6Za5Mcq2/JocOLDKqxpcAQj3/DF6akjjzmnxLc2EUAAABA/7xv6cxg7+ajR/IDW5hqLWMEkOgWyq9q6wMaLBid/xkmqIvUsn7STtNC10Yymh9CdiRxTtlZYc8jGgDT14WFBQ=='); -INSERT INTO scphistory VALUES ('GCIHGSHT7XIJVBEMNTY43I2EVB57FPDVIZWKOHPHXUNFADPVCLDQDC22', 4, 'AAAAAJBzSPP90JqEjGzxzaNEqHvyvHVGbKcd570aUA31EscBAAAAAAAAAAQAAAACAAAAAQAAADCYtAZscaSuGga5RdeVrhuZtNNM8LtKpz7gCuLAW/SWPgAAAABc9UzgAAAAAAAAAAAAAAABmU6Za5Mcq2/JocOLDKqxpcAQj3/DF6akjjzmnxLc2EUAAABARfIwF5ma212VUNa/+89u8QmwvxItXhaygOzyR5OOhkc6NYVH+iv/TWpD3Np5szZyiK6zWfGaGdF9bY5Xb9+fCA=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('994e996b931cab6fc9a1c38b0caab1a5c0108f7fc317a6a48e3ce69f12dcd845', 4, 'AAAAAQAAAAEAAAAAkHNI8/3QmoSMbPHNo0Soe/K8dUZspx3nvRpQDfUSxwEAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 4, - "currentBuckets": [ - { - "curr": "20ccae7eb93c304f558db1b9754d92de16660361a274da8f7bf36746466891e9", - "next": { - "state": 0 - }, - "snap": "5e9b6cf93c3d773407f0bd3735e8d02aa3ab4e6e6a4c61f0126008e4c7cf7bf0" - }, - { - "curr": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9", - "next": { - "state": 1, - "output": "5e9b6cf93c3d773407f0bd3735e8d02aa3ab4e6e6a4c61f0126008e4c7cf7bf0" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAACQc0jz/dCahIxs8c2jRKh78rx1RmynHee9GlAN9RLHAQAAAAAAAAAEAAAAA5lOmWuTHKtvyaHDiwyqsaXAEI9/wxempI485p8S3NhFAAAAAQAAAJiYtAZscaSuGga5RdeVrhuZtNNM8LtKpz7gCuLAW/SWPgAAAABc9UzgAAAAAAAAAAEAAAAAkHNI8/3QmoSMbPHNo0Soe/K8dUZspx3nvRpQDfUSxwEAAABACeMTSdGKh0uqmNYXE3suqhmtAUOoShd+2sIjSR/F5ICkIx/hm1fA30c2+viAMlTdRBYRrwPJTpLBxmC44LvxAAAAAAEAAACYmLQGbHGkrhoGuUXXla4bmbTTTPC7Sqc+4AriwFv0lj4AAAAAXPVM4AAAAAAAAAABAAAAAJBzSPP90JqEjGzxzaNEqHvyvHVGbKcd570aUA31EscBAAAAQAnjE0nRiodLqpjWFxN7LqoZrQFDqEoXftrCI0kfxeSApCMf4ZtXwN9HNvr4gDJU3UQWEa8DyU6SwcZguOC78QAAAABAs7AVy2qSuNnrmWVjV0hX4PSl86iS8q9i/frvuW20lWGmp/af5SlekWZlbiHCP24kKws2JkSdoMzcQzfO9ldlAgAAAACQc0jz/dCahIxs8c2jRKh78rx1RmynHee9GlAN9RLHAQAAAAAAAAAEAAAAAgAAAAEAAAAwmLQGbHGkrhoGuUXXla4bmbTTTPC7Sqc+4AriwFv0lj4AAAAAXPVM4AAAAAAAAAAAAAAAAZlOmWuTHKtvyaHDiwyqsaXAEI9/wxempI485p8S3NhFAAAAQEXyMBeZmttdlVDWv/vPbvEJsL8SLV4WsoDs8keTjoZHOjWFR/or/01qQ9zaebM2coius1nxmhnRfW2OV2/fnwgAAAABDsH6REmspWLy+qhMt0K76zwFjB8buCSiUr4hf9eyDDoAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA8VyioAAAAAAAAAAH5kC3vAAAAQEceJbYupnWlUerU60gfpFg8Nk2a3A6QMSfVgQoNFZOLjN7zc4w7jBxwiFIUi6pyXJNNQpL2OQxTnV4gs9lDrgQAAAABAAAAAQAAAAEAAAAAkHNI8/3QmoSMbPHNo0Soe/K8dUZspx3nvRpQDfUSxwEAAAAA'); -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastclosedledger ', 'd37666cd87e03990ff15d97dfb78842d45d8ee1b1647e3b3ce442b24b48eb897'); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 1012345000, 1, 4, NULL, NULL); - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('5243c6934f0fb5017758869aa3bff53ddc389cf81861cfae610cc225aae18ccc', 4, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', '2zmOtK6JdWMlZDytIclOE7/AdLMj7oPhQb9wGl2QTxsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', '+Xyv+rjBYCOjeIQWXLCz/xqi2vQAD+9J0h78hH3b++oAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'vUhtvdAtRggXZxxKWn6dboZcopy0HmLXqvcKL+5bNt4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('5243c6934f0fb5017758869aa3bff53ddc389cf81861cfae610cc225aae18ccc', 4, 1, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA8VyioAAAAAAAAAAH5kC3vAAAAQEceJbYupnWlUerU60gfpFg8Nk2a3A6QMSfVgQoNFZOLjN7zc4w7jBxwiFIUi6pyXJNNQpL2OQxTnV4gs9lDrgQ=', 'UkPGk08PtQF3WIaao7/1Pdw4nPgYYc+uYQzCJarhjMwAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADxXKKh//////////wAAAAEAAAAAAAAAAA=='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_6-horizon.sql b/services/horizon/internal/test/scenarios/asset_stat_trustlines_6-horizon.sql deleted file mode 100644 index bb0c1ec2f3..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_6-horizon.sql +++ /dev/null @@ -1,964 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO asset_stats VALUES (1, '1012345000', 1, 0, ''); - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (2, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_accounts VALUES (3, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 3, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_assets VALUES (1, 'credit_alphanum4', 'USD', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 1, true); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 17179873281, 1, 2, '{"amount": "101.2345000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 17179873281, 2, 3, '{"amount": "101.2345000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 12884905985, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (3, 8589938689, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 3, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (4, 'd37666cd87e03990ff15d97dfb78842d45d8ee1b1647e3b3ce442b24b48eb897', '0ec1fa4449aca562f2faa84cb742bbeb3c058c1f1bb824a252be217fd7b20c3a', 1, 1, '2019-06-03 16:37:52', '2019-06-03 16:37:54.220083', '2019-06-03 16:37:54.220083', 17179869184, 16, 1000000000000000000, 400, 100, 100000000, 1000000, 11, 'AAAACw7B+kRJrKVi8vqoTLdCu+s8BYwfG7gkolK+IX/Xsgw6mLQGbHGkrhoGuUXXla4bmbTTTPC7Sqc+4AriwFv0lj4AAAAAXPVM4AAAAAAAAAAAD7vJ2GXYn9oO/fo5QrmHKnTVIqBarv7BmCtsbOtbf6THcCLxXRrajvJXiJufLpzG1RN5A/vZEAr0EWAv5++rLQAAAAQN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (3, '0ec1fa4449aca562f2faa84cb742bbeb3c058c1f1bb824a252be217fd7b20c3a', '1a53a62e971d98d3d68ee79d441faae6cd2630ba77d001d45e746d285c493c88', 1, 1, '2019-06-03 16:37:51', '2019-06-03 16:37:54.251432', '2019-06-03 16:37:54.251432', 12884901888, 16, 1000000000000000000, 300, 100, 100000000, 1000000, 11, 'AAAACxpTpi6XHZjT1o7nnUQfqubNJjC6d9AB1F50bShcSTyIZS9kdwZoE5n2wefynfMkhpZJIZb7Li/oLXyYsPVCmWUAAAAAXPVM3wAAAAAAAAAALLKPbMojH+RR+TSBDKGB/tufH2mL12ccCHr1Jn27yPCQ0NP7aVt+A7XC3ngeeog5wYstTHE/suJ/KNmpkoYJYwAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (2, '1a53a62e971d98d3d68ee79d441faae6cd2630ba77d001d45e746d285c493c88', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 2, 2, '2019-06-03 16:37:50', '2019-06-03 16:37:54.261839', '2019-06-03 16:37:54.261839', 8589934592, 16, 1000000000000000000, 200, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Zu5H9cHd0qAsZj9Q6Y8yIIc6utkf/CO+Lm/0KbsfrzPUAAAAAXPVM3gAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP0PjS3Rf7hs8xVIBg2g8xKvqOO/n/g/XwgPR/HB7qe9psiJu4kNHR4oXHETId41PNJX7pJqo02A4o+5nRb3zuwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:37:54.275122', '2019-06-03 16:37:54.275122', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 17179873281, 2); -INSERT INTO history_operation_participants VALUES (2, 17179873281, 1); -INSERT INTO history_operation_participants VALUES (3, 12884905985, 1); -INSERT INTO history_operation_participants VALUES (4, 8589938689, 3); -INSERT INTO history_operation_participants VALUES (5, 8589938689, 2); -INSERT INTO history_operation_participants VALUES (6, 8589942785, 3); -INSERT INTO history_operation_participants VALUES (7, 8589942785, 1); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 7, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (17179873281, 17179873280, 1, 1, '{"to": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "from": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "amount": "101.2345000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 17179873280, 2); -INSERT INTO history_transaction_participants VALUES (2, 17179873280, 1); -INSERT INTO history_transaction_participants VALUES (3, 12884905984, 1); -INSERT INTO history_transaction_participants VALUES (4, 8589938688, 3); -INSERT INTO history_transaction_participants VALUES (5, 8589938688, 2); -INSERT INTO history_transaction_participants VALUES (6, 8589942784, 3); -INSERT INTO history_transaction_participants VALUES (7, 8589942784, 1); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 7, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('5243c6934f0fb5017758869aa3bff53ddc389cf81861cfae610cc225aae18ccc', 4, 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934593, 100, 1, '2019-06-03 16:37:54.220262', '2019-06-03 16:37:54.220262', 17179873280, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA8VyioAAAAAAAAAAH5kC3vAAAAQEceJbYupnWlUerU60gfpFg8Nk2a3A6QMSfVgQoNFZOLjN7zc4w7jBxwiFIUi6pyXJNNQpL2OQxTnV4gs9lDrgQ=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADxXKKh//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{Rx4lti6mdaVR6tTrSB+kWDw2TZrcDpAxJ9WBCg0Vk4uM3vNzjDuMHHCIUhSLqnJck01CkvY5DFOdXiCz2UOuBA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:37:54.251653', '2019-06-03 16:37:54.251653', 12884905984, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{H2SYpbare/tB/Lw8x6QRvVNMjmLGqQjQGiBes63uA7XrZBuSHZ1JNR94Oi9zQ8Bp+ENfG2FUCWwu6OUGbKMEBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:37:54.261943', '2019-06-03 16:37:54.261944', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GI0HD09huYapwZoBhnoPSfJeHNRJ1JcZJRJR/bKma9Pe9Reji1n3v5uJKRbSPrCNItai4reQNCclp24WC1uaAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:37:54.262125', '2019-06-03 16:37:54.262125', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{ZiqUoL68CjttFwjn2H17BhBFLcGGmhH6kruspiZpQ5mviF+iOyIIG1GTKHEHWfeCDAHynUADal2yDu8rMHnjAg==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_6.rb b/services/horizon/internal/test/scenarios/asset_stat_trustlines_6.rb deleted file mode 100644 index 4405628441..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_6.rb +++ /dev/null @@ -1,14 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :usd_gateway -create_account :scott -close_ledger - -trust :scott, :usd_gateway, "USD" -close_ledger - -# issue asset to :scott -payment :usd_gateway, :scott, ["USD", :usd_gateway, "101.2345"] -close_ledger diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_7-core.sql b/services/horizon/internal/test/scenarios/asset_stat_trustlines_7-core.sql deleted file mode 100644 index a6366a0911..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_7-core.sql +++ /dev/null @@ -1,738 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999969999999700, 3, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2', 9999999900, 8589934593, 1, NULL, '', 'AQAAAA==', 0, 3, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 9999999900, 8589934593, 0, NULL, '', 'AQAAAA==', 0, 4, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 9999999800, 8589934594, 1, NULL, '', 'AQAAAA==', 0, 5, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('f323001ebc2b87bd5e6d5f876dc04b4c14752d5739dd6db1b85b31cfb961718b', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 'ed397b2691125cc979a57b664a163ce14e4d2edf5759a08917e75ba89dc7cfe3', 2, 1559579819, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Z9GwX6q8KzxXUDk3+fdZshszCWX2SbuAnJNMiSoulCykAAAAAXPVMqwAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAACyk/eWGAYEOhla9SxZHjkxGIQ61pIijmPF9hVp1Qv5rtOXsmkRJcyXmle2ZKFjzhTk0u31dZoIkX51uoncfP4wAAAAIN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('5d5396461879e749e998097d068ea7bf49c01084ab407bd1cd17290194de5c34', 'f323001ebc2b87bd5e6d5f876dc04b4c14752d5739dd6db1b85b31cfb961718b', 'f2d7ce37add2f34386fe1aeb375d6ff4d946cf097f32c6e066bddee98ecbab22', 3, 1559579820, 'AAAAC/MjAB68K4e9Xm1fh23AS0wUdS1XOd1tsbhbMc+5YXGLxuKqOY6UQEYjj1Z8YTay62+StbkZ1TpuQgaIZivyX44AAAAAXPVMrAAAAAAAAAAACZ7JC4EHnY0GXRNEwciolY7p1One+T5tlBKrlCdwa0Dy1843rdLzQ4b+Gus3XW/02UbPCX8yxuBmvd7pjsurIgAAAAMN4Lazp2QAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('62ae95288153ec34e794eb0a3ec2b9788d1e82a48ee0629f4139312a37b35924', '5d5396461879e749e998097d068ea7bf49c01084ab407bd1cd17290194de5c34', 'ef4a8106cff703b8f6c6e83a40d84adec3a532d76c34f967b35fa38d49193854', 4, 1559579821, 'AAAAC11TlkYYeedJ6ZgJfQaOp79JwBCEq0B70c0XKQGU3lw0jAOj6Tx085X3/Z6J7mYHycS8g7u514DI1J/3rp8DNHkAAAAAXPVMrQAAAAAAAAAAD7vJ2GXYn9oO/fo5QrmHKnTVIqBarv7BmCtsbOtbf6TvSoEGz/cDuPbG6DpA2Erew6Uy12w0+WezX6ONSRk4VAAAAAQN4Lazp2QAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('a9769933d6fe5907b5b883df11c175e31a7c7c19d4024862b2c7c39845f62a2a', '62ae95288153ec34e794eb0a3ec2b9788d1e82a48ee0629f4139312a37b35924', 'd550cc0ecc2742bd740e8ed99512b38302165ac5c1cc4208c6b4e33152240a4f', 5, 1559579822, 'AAAAC2KulSiBU+w055TrCj7CuXiNHoKkjuBin0E5MSo3s1kk9buypkSeADep/pTWlpB9E6Equk5xmpuvFyFwqdZLY9sAAAAAXPVMrgAAAAAAAAAAuMBMcxg1gTklVN8u2mY/OPQmKCMsWP3OArGw6LUyTlnVUMwOzCdCvXQOjtmVErODAhZaxcHMQgjGtOMxUiQKTwAAAAUN4Lazp2QAAAAAAAAAAAK8AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GA6Z2PV5PPSFWXY2ZK3QZPBUMEF77JU4E2N422RG23T3HLLZBD4DXPDN', 2, 'AAAAAD2dPr175FtfGsq3DLw0YQv/ppwmm81qJtbns615CPg7AAAAAAAAAAIAAAACAAAAAQAAAEj0bBfqrwrPFdQOTf591myGzMJZfZJu4Cck0yJKi6ULKQAAAABc9UyrAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABKEizrp6YhYIss7axnG1vFu/Vdo162i2I7WS3QaaKdkUAAABA9isi1BV16raSAeVWGxedpdvFWZOa0PW/Of3cY8mcPeyX0AtD1wokZb1c4/t3+n54NTLm2zJp01tgth66bc+fAQ=='); -INSERT INTO scphistory VALUES ('GA6Z2PV5PPSFWXY2ZK3QZPBUMEF77JU4E2N422RG23T3HLLZBD4DXPDN', 3, 'AAAAAD2dPr175FtfGsq3DLw0YQv/ppwmm81qJtbns615CPg7AAAAAAAAAAMAAAACAAAAAQAAADDG4qo5jpRARiOPVnxhNrLrb5K1uRnVOm5CBohmK/JfjgAAAABc9UysAAAAAAAAAAAAAAABKEizrp6YhYIss7axnG1vFu/Vdo162i2I7WS3QaaKdkUAAABA+f/bSq3rRLRcbNHPkSqVjqQV9Ne63hRFp0W4sYGV6UI7cjuo+CstigkhYYRdhRK6HJNSgb3aXBi7gjXgeloUDA=='); -INSERT INTO scphistory VALUES ('GA6Z2PV5PPSFWXY2ZK3QZPBUMEF77JU4E2N422RG23T3HLLZBD4DXPDN', 4, 'AAAAAD2dPr175FtfGsq3DLw0YQv/ppwmm81qJtbns615CPg7AAAAAAAAAAQAAAACAAAAAQAAADCMA6PpPHTzlff9nonuZgfJxLyDu7nXgMjUn/eunwM0eQAAAABc9UytAAAAAAAAAAAAAAABKEizrp6YhYIss7axnG1vFu/Vdo162i2I7WS3QaaKdkUAAABA2nniVMXOZiv5k9ilhn8/wiROd/tMC82cRMFfP9qn4cs24XDkpTbnVWdQEDm3Wmzbwyoul7EHrxnSZGtuzlmqDg=='); -INSERT INTO scphistory VALUES ('GA6Z2PV5PPSFWXY2ZK3QZPBUMEF77JU4E2N422RG23T3HLLZBD4DXPDN', 5, 'AAAAAD2dPr175FtfGsq3DLw0YQv/ppwmm81qJtbns615CPg7AAAAAAAAAAUAAAACAAAAAQAAADD1u7KmRJ4AN6n+lNaWkH0ToSq6TnGam68XIXCp1ktj2wAAAABc9UyuAAAAAAAAAAAAAAABKEizrp6YhYIss7axnG1vFu/Vdo162i2I7WS3QaaKdkUAAABAvDzHDnTbYb1i0qh6st4L9fSPvmOdmklzKlLlWJnpZZ4wm+DL+XmslROrtAVSaQBCaLBq99A+clJDLE3U/mYSCQ=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('2848b3ae9e9885822cb3b6b19c6d6f16efd5768d7ada2d88ed64b741a68a7645', 5, 'AAAAAQAAAAEAAAAAPZ0+vXvkW18ayrcMvDRhC/+mnCabzWom1uezrXkI+DsAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('lastclosedledger ', 'a9769933d6fe5907b5b883df11c175e31a7c7c19d4024862b2c7c39845f62a2a'); -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 5, - "currentBuckets": [ - { - "curr": "008f9a7dd08840564efe5a0e1fbd74cc3539c1745bf2f35dcb35cf7d6f7d0686", - "next": { - "state": 0 - }, - "snap": "2a93b268c88dae143487e146e2c0fc5234a596d85c750b47ea1ac7b6f0b2fc82" - }, - { - "curr": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9", - "next": { - "state": 1, - "output": "2a93b268c88dae143487e146e2c0fc5234a596d85c750b47ea1ac7b6f0b2fc82" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAAA9nT69e+RbXxrKtwy8NGEL/6acJpvNaibW57OteQj4OwAAAAAAAAAFAAAAAyhIs66emIWCLLO2sZxtbxbv1XaNetotiO1kt0GminZFAAAAAQAAAJj1u7KmRJ4AN6n+lNaWkH0ToSq6TnGam68XIXCp1ktj2wAAAABc9UyuAAAAAAAAAAEAAAAAPZ0+vXvkW18ayrcMvDRhC/+mnCabzWom1uezrXkI+DsAAABAiBPvxOHIiXZSj6szlWODBZIt54EF8UTErjYzWXcp+/lVul7IxmraghQXJwUrljfzIl0mU5xFr8+5he6pxBQ8DwAAAAEAAACY9buypkSeADep/pTWlpB9E6Equk5xmpuvFyFwqdZLY9sAAAAAXPVMrgAAAAAAAAABAAAAAD2dPr175FtfGsq3DLw0YQv/ppwmm81qJtbns615CPg7AAAAQIgT78ThyIl2Uo+rM5VjgwWSLeeBBfFExK42M1l3Kfv5VbpeyMZq2oIUFycFK5Y38yJdJlOcRa/PuYXuqcQUPA8AAABArGSTP6ytQRmZfEJrAj6tPeRf+YGMrZxjVadOxNEqc9drej1KaOIGWH4EPsgKDiE3qOgeuyOMej7ydrylZMdTAgAAAAA9nT69e+RbXxrKtwy8NGEL/6acJpvNaibW57OteQj4OwAAAAAAAAAFAAAAAgAAAAEAAAAw9buypkSeADep/pTWlpB9E6Equk5xmpuvFyFwqdZLY9sAAAAAXPVMrgAAAAAAAAAAAAAAAShIs66emIWCLLO2sZxtbxbv1XaNetotiO1kt0GminZFAAAAQLw8xw5022G9YtKoerLeC/X0j75jnZpJcypS5ViZ6WWeMJvgy/l5rJUTq7QFUmkAQmiwavfQPnJSQyxN1P5mEgkAAAABYq6VKIFT7DTnlOsKPsK5eI0egqSO4GKfQTkxKjezWSQAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAGCKWwAAAAAAAAAAGu5L5MAAAAQOduHh8u6n4aETFH/A6BiFlfEPqDszcZVcoCIRvAY33jJ+1aQxY8IyUQpF0oXbcKVegzVZNO81OUEN/9I5F/DgIAAAABAAAAAQAAAAEAAAAAPZ0+vXvkW18ayrcMvDRhC/+mnCabzWom1uezrXkI+DsAAAAA'); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO trustlines VALUES ('GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 101230000, 1, 5, NULL, NULL); -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 911115000, 1, 5, NULL, NULL); - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('725756b1fbdf83b08127f385efedf0909cc820b6cce71f1c0897d15427cb5add', 2, 3, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('00ab9cfce2b4c4141d8bb6768dd094bdbb1c7406710dbb3ba0ef98870f63a344', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('5243c6934f0fb5017758869aa3bff53ddc389cf81861cfae610cc225aae18ccc', 4, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('d867852608d9aaf21e1f7bacb98e75fd5cb39be10d70c9cbcc80391d73728869', 5, 1, 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', '2zmOtK6JdWMlZDytIclOE7/AdLMj7oPhQb9wGl2QTxsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', '+Xyv+rjBYCOjeIQWXLCz/xqi2vQAD+9J0h78hH3b++oAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDbUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('725756b1fbdf83b08127f385efedf0909cc820b6cce71f1c0897d15427cb5add', 2, 3, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBj4gBQ/BAbgqf7qOotatgZUHjDlsOtDNdp7alZR5/Fk9fGj+lxEygAZWzY7/LY1Z3SF6c0qs172LhAkkvV8p0M', 'cldWsfvfg7CBJ/OF7+3wkJzIILbM5x8cCJfRVCfLWt0AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDbUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqyrQFLUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('00ab9cfce2b4c4141d8bb6768dd094bdbb1c7406710dbb3ba0ef98870f63a344', 3, 1, 'AAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAEnciLVAAAAQLVbII+1LeizxgncDI46KHyBt05+H92n1+R328J9zNl2fgJW2nfn3FIoLVs2qV1+CUpr121a2B7AM6HKr4nBLAI=', 'AKuc/OK0xBQdi7Z2jdCUvbscdAZxDbs7oO+Yhw9jo0QAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 2, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'vUhtvdAtRggXZxxKWn6dboZcopy0HmLXqvcKL+5bNt4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('5243c6934f0fb5017758869aa3bff53ddc389cf81861cfae610cc225aae18ccc', 4, 1, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA8VyioAAAAAAAAAAH5kC3vAAAAQEceJbYupnWlUerU60gfpFg8Nk2a3A6QMSfVgQoNFZOLjN7zc4w7jBxwiFIUi6pyXJNNQpL2OQxTnV4gs9lDrgQ=', 'UkPGk08PtQF3WIaao7/1Pdw4nPgYYc+uYQzCJarhjMwAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADxXKKh//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('d867852608d9aaf21e1f7bacb98e75fd5cb39be10d70c9cbcc80391d73728869', 5, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAGCKWwAAAAAAAAAAGu5L5MAAAAQOduHh8u6n4aETFH/A6BiFlfEPqDszcZVcoCIRvAY33jJ+1aQxY8IyUQpF0oXbcKVegzVZNO81OUEN/9I5F/DgI=', '2GeFJgjZqvIeH3usuY51/Vyzm+ENcMnLzIA5HXNyiGkAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAMAAAADAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAYIpbB//////////wAAAAEAAAAAAAAAAAAAAAMAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADxXKKh//////////wAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADZOgvh//////////wAAAAEAAAAAAAAAAA=='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_7-horizon.sql b/services/horizon/internal/test/scenarios/asset_stat_trustlines_7-horizon.sql deleted file mode 100644 index e6a1c36888..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_7-horizon.sql +++ /dev/null @@ -1,988 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO asset_stats VALUES (1, '1012345000', 2, 0, ''); - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (2, 'GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2'); -INSERT INTO history_accounts VALUES (3, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_accounts VALUES (4, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 4, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_assets VALUES (1, 'credit_alphanum4', 'USD', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 1, true); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (2, 21474840577, 1, 2, '{"amount": "10.1230000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 21474840577, 2, 3, '{"amount": "10.1230000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 17179873281, 1, 2, '{"amount": "101.2345000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 17179873281, 2, 3, '{"amount": "101.2345000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 12884905985, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 12884910081, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 8589938689, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589938689, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (3, 8589938689, 3, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589942785, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); -INSERT INTO history_effects VALUES (2, 8589946881, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589946881, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 8589946881, 3, 10, '{"weight": 1, "public_key": "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (5, 'a9769933d6fe5907b5b883df11c175e31a7c7c19d4024862b2c7c39845f62a2a', '62ae95288153ec34e794eb0a3ec2b9788d1e82a48ee0629f4139312a37b35924', 1, 1, '2019-06-03 16:37:02', '2019-06-03 16:37:02.133323', '2019-06-03 16:37:02.133323', 21474836480, 16, 1000000000000000000, 700, 100, 100000000, 1000000, 11, 'AAAAC2KulSiBU+w055TrCj7CuXiNHoKkjuBin0E5MSo3s1kk9buypkSeADep/pTWlpB9E6Equk5xmpuvFyFwqdZLY9sAAAAAXPVMrgAAAAAAAAAAuMBMcxg1gTklVN8u2mY/OPQmKCMsWP3OArGw6LUyTlnVUMwOzCdCvXQOjtmVErODAhZaxcHMQgjGtOMxUiQKTwAAAAUN4Lazp2QAAAAAAAAAAAK8AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (4, '62ae95288153ec34e794eb0a3ec2b9788d1e82a48ee0629f4139312a37b35924', '5d5396461879e749e998097d068ea7bf49c01084ab407bd1cd17290194de5c34', 1, 1, '2019-06-03 16:37:01', '2019-06-03 16:37:02.151435', '2019-06-03 16:37:02.151435', 17179869184, 16, 1000000000000000000, 600, 100, 100000000, 1000000, 11, 'AAAAC11TlkYYeedJ6ZgJfQaOp79JwBCEq0B70c0XKQGU3lw0jAOj6Tx085X3/Z6J7mYHycS8g7u514DI1J/3rp8DNHkAAAAAXPVMrQAAAAAAAAAAD7vJ2GXYn9oO/fo5QrmHKnTVIqBarv7BmCtsbOtbf6TvSoEGz/cDuPbG6DpA2Erew6Uy12w0+WezX6ONSRk4VAAAAAQN4Lazp2QAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (3, '5d5396461879e749e998097d068ea7bf49c01084ab407bd1cd17290194de5c34', 'f323001ebc2b87bd5e6d5f876dc04b4c14752d5739dd6db1b85b31cfb961718b', 2, 2, '2019-06-03 16:37:00', '2019-06-03 16:37:02.162998', '2019-06-03 16:37:02.162999', 12884901888, 16, 1000000000000000000, 500, 100, 100000000, 1000000, 11, 'AAAAC/MjAB68K4e9Xm1fh23AS0wUdS1XOd1tsbhbMc+5YXGLxuKqOY6UQEYjj1Z8YTay62+StbkZ1TpuQgaIZivyX44AAAAAXPVMrAAAAAAAAAAACZ7JC4EHnY0GXRNEwciolY7p1One+T5tlBKrlCdwa0Dy1843rdLzQ4b+Gus3XW/02UbPCX8yxuBmvd7pjsurIgAAAAMN4Lazp2QAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (2, 'f323001ebc2b87bd5e6d5f876dc04b4c14752d5739dd6db1b85b31cfb961718b', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 3, 3, '2019-06-03 16:36:59', '2019-06-03 16:37:02.173609', '2019-06-03 16:37:02.173609', 8589934592, 16, 1000000000000000000, 300, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Z9GwX6q8KzxXUDk3+fdZshszCWX2SbuAnJNMiSoulCykAAAAAXPVMqwAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAACyk/eWGAYEOhla9SxZHjkxGIQ61pIijmPF9hVp1Qv5rtOXsmkRJcyXmle2ZKFjzhTk0u31dZoIkX51uoncfP4wAAAAIN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 3, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:37:02.187642', '2019-06-03 16:37:02.187642', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 21474840577, 1); -INSERT INTO history_operation_participants VALUES (2, 21474840577, 2); -INSERT INTO history_operation_participants VALUES (3, 17179873281, 3); -INSERT INTO history_operation_participants VALUES (4, 17179873281, 1); -INSERT INTO history_operation_participants VALUES (5, 12884905985, 2); -INSERT INTO history_operation_participants VALUES (6, 12884910081, 1); -INSERT INTO history_operation_participants VALUES (7, 8589938689, 4); -INSERT INTO history_operation_participants VALUES (8, 8589938689, 3); -INSERT INTO history_operation_participants VALUES (9, 8589942785, 4); -INSERT INTO history_operation_participants VALUES (10, 8589942785, 1); -INSERT INTO history_operation_participants VALUES (11, 8589946881, 4); -INSERT INTO history_operation_participants VALUES (12, 8589946881, 2); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 12, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (21474840577, 21474840576, 1, 1, '{"to": "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2", "from": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "amount": "10.1230000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (17179873281, 17179873280, 1, 1, '{"to": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "from": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "amount": "101.2345000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2'); -INSERT INTO history_operations VALUES (12884910081, 12884910080, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589946881, 8589946880, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 21474840576, 1); -INSERT INTO history_transaction_participants VALUES (2, 21474840576, 2); -INSERT INTO history_transaction_participants VALUES (3, 17179873280, 3); -INSERT INTO history_transaction_participants VALUES (4, 17179873280, 1); -INSERT INTO history_transaction_participants VALUES (5, 12884905984, 2); -INSERT INTO history_transaction_participants VALUES (6, 12884910080, 1); -INSERT INTO history_transaction_participants VALUES (7, 8589938688, 4); -INSERT INTO history_transaction_participants VALUES (8, 8589938688, 3); -INSERT INTO history_transaction_participants VALUES (9, 8589942784, 4); -INSERT INTO history_transaction_participants VALUES (10, 8589942784, 1); -INSERT INTO history_transaction_participants VALUES (11, 8589946880, 4); -INSERT INTO history_transaction_participants VALUES (12, 8589946880, 2); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 12, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('d867852608d9aaf21e1f7bacb98e75fd5cb39be10d70c9cbcc80391d73728869', 5, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934594, 100, 1, '2019-06-03 16:37:02.133553', '2019-06-03 16:37:02.133553', 21474840576, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAGCKWwAAAAAAAAAAGu5L5MAAAAQOduHh8u6n4aETFH/A6BiFlfEPqDszcZVcoCIRvAY33jJ+1aQxY8IyUQpF0oXbcKVegzVZNO81OUEN/9I5F/DgI=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAMAAAADAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAYIpbB//////////wAAAAEAAAAAAAAAAAAAAAMAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADxXKKh//////////wAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADZOgvh//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{524eHy7qfhoRMUf8DoGIWV8Q+oOzNxlVygIhG8BjfeMn7VpDFjwjJRCkXShdtwpV6DNVk07zU5QQ3/0jkX8OAg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('5243c6934f0fb5017758869aa3bff53ddc389cf81861cfae610cc225aae18ccc', 4, 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934593, 100, 1, '2019-06-03 16:37:02.15159', '2019-06-03 16:37:02.15159', 17179873280, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA8VyioAAAAAAAAAAH5kC3vAAAAQEceJbYupnWlUerU60gfpFg8Nk2a3A6QMSfVgQoNFZOLjN7zc4w7jBxwiFIUi6pyXJNNQpL2OQxTnV4gs9lDrgQ=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADxXKKh//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{Rx4lti6mdaVR6tTrSB+kWDw2TZrcDpAxJ9WBCg0Vk4uM3vNzjDuMHHCIUhSLqnJck01CkvY5DFOdXiCz2UOuBA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('00ab9cfce2b4c4141d8bb6768dd094bdbb1c7406710dbb3ba0ef98870f63a344', 3, 1, 'GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2', 8589934593, 100, 1, '2019-06-03 16:37:02.163152', '2019-06-03 16:37:02.163152', 12884905984, 'AAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAEnciLVAAAAQLVbII+1LeizxgncDI46KHyBt05+H92n1+R328J9zNl2fgJW2nfn3FIoLVs2qV1+CUpr121a2B7AM6HKr4nBLAI=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{tVsgj7Ut6LPGCdwMjjoofIG3Tn4f3afX5Hfbwn3M2XZ+Albad+fcUigtWzapXX4JSmvXbVrYHsAzocqvicEsAg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 2, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:37:02.163352', '2019-06-03 16:37:02.163352', 12884910080, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{H2SYpbare/tB/Lw8x6QRvVNMjmLGqQjQGiBes63uA7XrZBuSHZ1JNR94Oi9zQ8Bp+ENfG2FUCWwu6OUGbKMEBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:37:02.173754', '2019-06-03 16:37:02.173754', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GI0HD09huYapwZoBhnoPSfJeHNRJ1JcZJRJR/bKma9Pe9Reji1n3v5uJKRbSPrCNItai4reQNCclp24WC1uaAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:37:02.173938', '2019-06-03 16:37:02.173938', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDbUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{ZiqUoL68CjttFwjn2H17BhBFLcGGmhH6kruspiZpQ5mviF+iOyIIG1GTKHEHWfeCDAHynUADal2yDu8rMHnjAg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('725756b1fbdf83b08127f385efedf0909cc820b6cce71f1c0897d15427cb5add', 2, 3, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 3, 100, 1, '2019-06-03 16:37:02.174056', '2019-06-03 16:37:02.174057', 8589946880, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBj4gBQ/BAbgqf7qOotatgZUHjDlsOtDNdp7alZR5/Fk9fGj+lxEygAZWzY7/LY1Z3SF6c0qs172LhAkkvV8p0M', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDbUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtqyrQFLUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{Y+IAUPwQG4Kn+6jqLWrYGVB4w5bDrQzXae2pWUefxZPXxo/pcRMoAGVs2O/y2NWd0henNKrNe9i4QJJL1fKdDA==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/asset_stat_trustlines_7.rb b/services/horizon/internal/test/scenarios/asset_stat_trustlines_7.rb deleted file mode 100644 index cfba7e6a21..0000000000 --- a/services/horizon/internal/test/scenarios/asset_stat_trustlines_7.rb +++ /dev/null @@ -1,20 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :usd_gateway -create_account :scott -create_account :bartek -close_ledger - -trust :scott, :usd_gateway, "USD" -trust :bartek, :usd_gateway, "USD" -close_ledger - -# issue asset to :scott -payment :usd_gateway, :scott, ["USD", :usd_gateway, "101.2345"] -close_ledger - -# :scott pays :bartek -payment :scott, :bartek, ["USD", :usd_gateway, "10.123"] -close_ledger diff --git a/services/horizon/internal/test/scenarios/base-horizon.sql b/services/horizon/internal/test/scenarios/base-horizon.sql index b4e02eec20..d8eb87b34e 100644 --- a/services/horizon/internal/test/scenarios/base-horizon.sql +++ b/services/horizon/internal/test/scenarios/base-horizon.sql @@ -713,6 +713,7 @@ INSERT INTO gorp_migrations VALUES ('35_drop_participant_id.sql', '2019-11-30 14 INSERT INTO gorp_migrations VALUES ('37_add_tx_set_operation_count_to_ledgers.sql', '2019-11-30 12:19:49.163728+01'); INSERT INTO gorp_migrations VALUES ('41_add_sponsor_to_state_tables.sql', '2019-11-30 13:19:49.163718+01'); INSERT INTO gorp_migrations VALUES ('45_add_claimable_balances_history.sql', '2019-11-30 14:19:49.163718+01'); +INSERT INTO gorp_migrations VALUES ('46_add_muxed_accounts.sql', '2019-12-30 14:19:49.163718+01'); -- @@ -1357,11 +1358,6 @@ ALTER TABLE ONLY history_trades ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); --- --- PostgreSQL database dump complete --- - - -- needed for migrations to work ALTER TABLE accounts ADD sponsor TEXT; CREATE INDEX accounts_by_sponsor ON accounts USING BTREE(sponsor); @@ -1390,3 +1386,12 @@ DROP INDEX index_history_transactions_on_id; DROP INDEX index_history_ledgers_on_id; DROP INDEX asset_by_code; + +ALTER TABLE history_transactions ADD account_muxed varchar(69) NULL, ADD fee_account_muxed varchar(69) NULL; +ALTER TABLE history_operations ADD source_account_muxed varchar(69) NULL; +ALTER TABLE history_effects ADD address_muxed varchar(69) NULL; + + +-- +-- PostgreSQL database dump complete +-- diff --git a/services/horizon/internal/test/scenarios/bindata.go b/services/horizon/internal/test/scenarios/bindata.go index 9b5919dfb6..7ad557e10e 100644 --- a/services/horizon/internal/test/scenarios/bindata.go +++ b/services/horizon/internal/test/scenarios/bindata.go @@ -1,43 +1,15 @@ // Code generated by go-bindata. DO NOT EDIT. // sources: // account_merge-core.sql (26.849kB) -// account_merge-horizon.sql (36.385kB) -// allow_trust-core.sql (43.697kB) -// allow_trust-horizon.sql (57.667kB) -// asset_stat_account-core.sql (37.928kB) -// asset_stat_account-horizon.sql (50.23kB) -// asset_stat_operations-core.sql (32.058kB) -// asset_stat_operations-horizon.sql (44.04kB) -// asset_stat_trustlines_1-core.sql (27.224kB) -// asset_stat_trustlines_1-horizon.sql (36.508kB) -// asset_stat_trustlines_2-core.sql (29.742kB) -// asset_stat_trustlines_2-horizon.sql (39.687kB) -// asset_stat_trustlines_3-core.sql (29.243kB) -// asset_stat_trustlines_3-horizon.sql (39.187kB) -// asset_stat_trustlines_4-core.sql (29.24kB) -// asset_stat_trustlines_4-horizon.sql (39.18kB) -// asset_stat_trustlines_5-core.sql (29.926kB) -// asset_stat_trustlines_5-horizon.sql (39.887kB) -// asset_stat_trustlines_6-core.sql (29.846kB) -// asset_stat_trustlines_6-horizon.sql (40.082kB) -// asset_stat_trustlines_7-core.sql (35.896kB) -// asset_stat_trustlines_7-horizon.sql (48.894kB) +// account_merge-horizon.sql (36.651kB) // base-core.sql (29.682kB) -// base-horizon.sql (52.175kB) -// change_trust-core.sql (33.073kB) -// change_trust-horizon.sql (43.637kB) -// core_database_schema_version_8-core.sql (8.369kB) -// core_database_schema_version_9-core.sql (8.029kB) +// base-horizon.sql (52.522kB) // failed_transactions-core.sql (38.723kB) -// failed_transactions-horizon.sql (54.67kB) +// failed_transactions-horizon.sql (54.917kB) // ingest_asset_stats-core.sql (61.38kB) // ingest_asset_stats-horizon.sql (87.473kB) -// kahuna-2-core.sql (29.749kB) -// kahuna-2-horizon.sql (37.751kB) // kahuna-core.sql (232.639kB) -// kahuna-horizon.sql (301.496kB) -// non_native_payment-core.sql (35.893kB) -// non_native_payment-horizon.sql (48.887kB) +// kahuna-horizon.sql (301.761kB) // offer_ids-core.sql (61.677kB) // offer_ids-horizon.sql (85.572kB) // operation_fee_stats_1-core.sql (48.276kB) @@ -46,22 +18,12 @@ // operation_fee_stats_2-horizon.sql (32.011kB) // operation_fee_stats_3-core.sql (45.051kB) // operation_fee_stats_3-horizon.sql (58.503kB) -// order_books-core.sql (77.742kB) -// order_books-horizon.sql (99.263kB) -// order_books_310-core.sql (132.118kB) -// order_books_310-horizon.sql (155.941kB) // pathed_payment-core.sql (52.308kB) -// pathed_payment-horizon.sql (76.08kB) +// pathed_payment-horizon.sql (76.327kB) // paths_strict_send-core.sql (70.821kB) -// paths_strict_send-horizon.sql (92.703kB) -// self_send-core.sql (25.186kB) -// self_send-horizon.sql (33.348kB) -// send_to_issuer-core.sql (32.414kB) -// send_to_issuer-horizon.sql (43.662kB) -// set_options-core.sql (51.466kB) -// set_options-horizon.sql (63.246kB) +// paths_strict_send-horizon.sql (92.968kB) // trades-core.sql (64.752kB) -// trades-horizon.sql (85.918kB) +// trades-horizon.sql (86.165kB) package scenarios @@ -150,7 +112,7 @@ func account_mergeCoreSql() (*asset, error) { return a, nil } -var _account_mergeHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x5d\x79\x6f\xe2\x48\xd3\xff\x7f\x3e\x85\x35\x5a\x29\x33\x4a\x66\xe2\xfb\xc8\x3c\xb3\x92\x01\x13\x08\x60\xee\x40\xb2\x5a\x59\x3e\xda\xc4\x89\xb1\x89\x6d\x12\xc8\xea\xf9\xee\xaf\x7c\x81\x6d\x7c\x02\x33\xfb\xbc\x28\x8a\x00\x57\x57\xfd\xaa\xba\xba\xab\xab\xbb\xe9\xfe\xf6\xed\xd3\xb7\x6f\xd0\xc0\xb4\x9d\x85\x05\xc6\xc3\x2e\xa4\x88\x8e\x28\x89\x36\x80\x94\xf5\x72\xf5\xe9\xdb\xb7\x4f\xee\xf3\xc6\x7a\xb9\x02\x0a\xa4\x5a\xe6\x72\x4f\xf0\x06\x2c\x5b\x33\x0d\x88\xf9\x4e\x7e\x47\x22\x54\xd2\x16\x5a\x2d\x04\xb7\x78\x82\xe4\xd3\x98\x9b\x40\xb6\x23\x3a\x60\x09\x0c\x47\x70\xb4\x25\x30\xd7\x0e\xf4\x13\x82\x7f\x78\x8f\x74\x53\x7e\x39\xfc\x56\xd6\x35\x97\x1a\x18\xb2\xa9\x68\xc6\x02\xfa\x09\x5d\x4c\x27\x4d\xfa\xe2\x47\xc8\xce\x50\x44\x4b\x11\x64\xd3\x50\x4d\x6b\xa9\x19\x0b\xc1\x76\x2c\xcd\x58\xd8\xd0\x4f\xc8\x34\x02\x1e\x4f\x40\x7e\x11\xd4\xb5\x21\x3b\x9a\x69\x08\x92\xa9\x68\xc0\x7d\xae\x8a\xba\x0d\x62\x62\x96\x9a\x21\x2c\x81\x6d\x8b\x0b\x8f\xe0\x5d\xb4\x0c\xcd\x58\xfc\x08\xb0\x03\xd1\x92\x9f\x84\x95\xe8\x3c\x41\x3f\xa1\xd5\x5a\xd2\x35\xf9\xca\x55\x56\x16\x1d\x51\x37\x5d\x32\xb6\x3b\xe1\x46\xd0\x84\xad\x75\x39\xa8\xdd\x84\xb8\x79\x7b\x3c\x19\x43\x7d\xbe\xfb\x10\xd0\x7f\x7f\xd2\x6c\xc7\xb4\xb6\x82\x63\x89\x0a\xb0\xa1\xc6\xa8\x3f\x80\xea\x7d\x7e\x3c\x19\xb1\x6d\x7e\x12\x29\x14\x27\x14\x64\x73\x6d\x38\xc0\x12\x44\xdb\x06\x8e\xa0\x29\x82\xfa\x02\xb6\x3f\x7e\x87\x40\xd9\x7b\xf7\x3b\x44\xba\x7e\xf5\xfb\x14\xf4\xa5\x55\xd7\xce\x07\xe8\x3a\x72\x9e\xb0\x08\xd5\x9e\xb9\x47\xde\xe6\x1b\xdc\x3c\x42\x19\xb0\xf5\x50\x09\x40\x55\x81\xec\xd8\x82\xb4\x15\x4c\x4b\x01\x96\x20\x99\xe6\x4b\x7e\x41\xcd\x50\xc0\x46\x88\x28\x67\xd8\xa2\xe7\xe8\xb6\x60\x1a\x82\xa6\x54\x29\x6d\xae\x80\x25\xee\xca\x3a\xdb\x15\x38\xa1\xf4\x1e\xc9\x49\x28\xaa\x95\xd5\x81\xb2\x00\x96\x57\xd0\x06\xaf\x6b\x60\xc8\x95\x54\x88\x14\x5f\x59\xe0\x4d\x33\xd7\x76\xf0\x9d\xf0\x24\xda\x4f\x47\xb2\x3a\x9d\x83\xb6\x5c\x99\x96\xdb\x1c\x83\x3e\xf5\x58\x36\xc7\xda\x52\xd6\x4d\x1b\x28\x82\xe8\x54\x29\x1f\x3a\xf3\x11\xae\x14\xb4\xcb\x23\x40\x47\x4b\x8a\x8a\x62\x01\xdb\xce\x2f\xfe\xe4\x58\x8a\x17\x77\x04\xdd\x34\x5f\xd6\xab\x12\xd4\xab\x22\x48\x3e\x95\xa8\x59\x15\x19\x87\x9d\x6e\xe9\x02\x6e\x3f\xa1\xaa\xc0\x2a\x47\x1a\xb2\x3f\xa2\x48\x60\xd6\x72\x85\xbc\xae\xb5\x82\x90\x68\x57\x5c\x54\x62\xe5\x16\x78\x72\x0a\x6b\xc0\x8e\x75\x40\xd2\xb6\xd0\x8d\x9e\x76\x2d\xbd\x0c\xb1\xe9\xe3\x30\x0b\x09\x35\xdb\x11\x9c\x8d\xb0\x2a\x66\xe9\x52\x9a\xab\xb2\x94\xa0\x2c\x59\x18\x4a\xf2\x89\xa5\xb0\xb9\x17\x92\x15\xf7\x62\xd2\xb6\x5c\x65\xfa\x31\xd2\xb5\xb6\x6d\xaf\x8b\x24\xef\x88\x65\x53\x01\x15\xc7\x05\x3b\x37\x58\x89\x96\xa3\xc9\xda\x4a\x34\x72\x83\x77\x51\x51\x61\x55\x71\x6c\xb2\x8b\x68\x55\x11\xa4\x17\xac\x2c\xdf\x33\x5e\x19\x79\x3e\xe1\x2f\xe7\xef\x57\xa6\x5b\x93\xc1\x5b\x37\x3e\x84\x43\x3f\xcf\x19\x84\x92\x08\x16\xa6\xb5\x12\x96\xda\x22\x18\x30\xe4\x40\x48\x50\x96\xd6\xb1\xfa\x78\x2f\x8f\x73\x59\xe7\xf4\x4b\xd7\xfb\xdd\x69\x8f\x87\x34\xc5\x97\xdc\xe0\x9a\xec\xb4\x3b\x29\xc9\x3b\xc3\xe9\xce\xc0\x39\xa8\xee\x7c\x4e\xde\xa7\xf2\xea\x87\x51\x7a\xcc\x0d\xa7\x1c\x5f\x3f\xc2\x66\xee\x38\xdb\x06\xaf\x95\x25\xc7\x98\x94\x2e\xad\x80\x92\xb4\xfb\xd1\x6c\x69\x0d\x33\x5a\x7d\x15\xfd\xd2\x59\x94\x2b\x1b\x8c\xfb\xca\x11\x07\x83\xbc\xd2\xba\x05\x3d\x40\x15\x5d\xfc\x22\x25\x69\x83\xe1\x5f\x79\x3c\xe1\x78\xb1\x0c\xa2\x44\x1f\x92\x4f\x1c\xe9\x12\x02\x42\xf6\xf6\x76\xc4\xdd\xb2\x93\x14\xe2\xa5\xe6\x66\x1c\x9a\x0c\xbe\x18\xeb\x25\xb0\x34\xf9\xaf\xbf\xbf\x96\x28\x25\x6e\x8e\x28\xa5\x8b\xb6\xf3\x45\x34\xb6\x40\xf7\xa6\x62\x4a\x94\x50\x35\x2b\xb5\x48\x73\xca\xd7\x27\xed\x3e\x9f\xa3\x8f\x20\x2e\x16\x7b\x74\x57\xd0\x01\xd0\x1c\x1e\xa1\x76\x27\xf0\x70\x75\xf5\x8a\xef\xc1\x5f\x41\x55\x14\xf1\x54\x2f\xc1\x81\x9b\x4f\x38\x7e\x9c\x60\xa1\xaf\x16\xf6\xab\x1e\xfa\x62\xbd\xc5\xf5\xd8\x03\x09\x3f\x3e\xf9\xb3\x70\xbc\xb8\x04\x37\xe1\x77\xd0\x64\xbb\x02\x37\x41\x91\x1f\xd0\x58\x7e\x02\x4b\xf1\x06\xfa\xf6\x03\xea\xbf\x1b\xc0\xba\x81\xbe\x79\x93\x73\xf5\x11\xe7\xd6\x57\xc0\x39\xe4\xf7\x29\xc6\x31\xfe\x30\x60\x5c\xef\xf7\x7a\x1c\x3f\xc9\xe1\xec\x13\x40\x7d\x3e\xce\x00\x6a\x8f\xa1\x8b\x70\xda\x2d\xfc\xce\xf6\x98\x5c\x24\x25\x87\xea\x07\x32\x77\x16\x2a\xd4\x27\x66\x4b\xbe\x3f\x49\xd8\x13\x9a\xb5\x27\xad\x1d\xac\xe8\xfc\x5b\x4c\xfc\x9e\x4b\x02\x48\x15\xe5\x0f\x98\x78\x06\x18\x74\xaf\x57\x8b\xf1\xb0\x0b\xad\x2c\x53\x06\xca\xda\x12\x75\x48\x17\x8d\xc5\x5a\x5c\x00\xcf\x0c\x25\xe7\x0b\xa3\x70\x8b\x1d\x2d\x80\x1f\xfa\xea\x1e\x7f\x58\xb7\x69\xb6\xdc\x79\x76\x21\x7f\x68\xc4\x4d\xa6\x23\x7e\x1c\xf9\xee\x13\x04\x41\x50\x97\xe5\x6f\xa7\xec\x2d\x07\x79\xda\xf7\x7a\x53\xbf\xbf\x1b\x4f\x46\xed\xfa\xc4\xa3\x60\xc7\xd0\x1f\xc2\x1f\xd0\x98\xeb\x72\xf5\x09\xf4\x07\xe2\x7e\x4a\xd6\x46\x61\x43\x3c\x4d\xbb\x22\xf6\x67\x53\x0e\x4d\x53\xae\x4c\x4f\x75\x9a\x7e\x25\x24\xec\x54\xdc\x7d\x75\x94\x86\x5f\x3e\x41\x50\x9d\x1d\x73\xd0\xac\xc5\xf1\xd0\x1f\xc8\x5f\xc8\xdf\xd7\x7f\x20\x7f\xa1\x7f\xff\xf9\x07\xea\xbd\x47\xff\x42\xff\x86\x26\xfe\x43\x88\xeb\x8e\x39\xd7\x28\x1c\xdf\xf8\x9a\x6a\x99\x12\x71\xe0\x44\xcb\x14\x4b\xf8\xd5\x96\xf9\xcf\x31\x96\x39\x8c\xa9\x81\x1d\x76\x71\xb8\x9c\x21\xf6\x61\xfb\x80\xa3\x87\x18\x82\xc6\xae\xad\xa0\x9f\xfb\x1e\xe0\xca\xff\x7a\xf2\x30\xe0\xa0\x9f\xd1\x16\xf1\x35\xad\xd5\x9e\x15\x63\x92\x61\x02\x62\xd8\x8c\xcb\x23\x4c\x1d\x02\x9d\x8a\x32\x8d\x69\x02\x69\xac\x41\xc6\xe1\xee\xbd\xec\x10\x6d\xda\x30\xef\x64\xb4\x29\x4c\x93\x68\xa3\x8d\x24\x17\xad\x1b\xb9\x14\xa0\x8a\x6b\xdd\x11\x1c\x51\xd2\x81\xbd\x12\x65\x00\xfd\x84\x2e\x2e\x7e\xc4\x9f\xbe\x6b\xce\x93\x60\x6a\x4a\x64\x29\x2d\xa6\x6b\x74\xfc\x1b\xa8\xe8\x35\xb0\x72\xea\xf9\x6d\x31\x9a\x7c\xfb\x1a\x69\x0a\x24\x69\x0b\xcd\x70\xbc\x81\x01\x3f\xed\x76\x7d\x75\xc4\xa5\x3b\x8c\x87\xe4\x27\xd1\x12\x65\x07\x58\xd0\x9b\x68\x6d\x35\x63\x91\x20\x33\xd6\xcb\xdd\x90\x1f\xd2\x0c\x07\x2c\x80\x95\x20\x51\x75\x71\x61\x43\xf6\x52\xd4\xf5\x43\x31\x8e\xb9\xd4\x0f\x85\x7c\x41\x09\xe2\xeb\x8e\xf2\xb0\xda\x93\x79\xc3\xb1\xe6\x48\xce\x76\xec\x4c\xe2\x80\xcd\x81\x41\x56\x2b\x5d\xf3\xe6\xec\x21\x47\x5b\x02\xdb\x11\x97\x2b\xc8\xad\x33\xef\x23\xf4\x61\x1a\xe0\x10\x68\x56\x56\x14\x8e\x47\x83\x74\xaa\x1c\xe6\x5d\xf2\x95\xc1\x35\x70\x43\x76\x34\xf1\x47\x74\x88\xf7\x45\x9b\xaf\x8f\x38\x6f\xf8\x55\x7b\x08\xbe\xe2\xfb\x50\xaf\xcd\xdf\xb3\xdd\x29\xb7\xfb\xcc\xce\xf7\x9f\xeb\x6c\xbd\xc5\x41\x48\x91\x32\x47\x9b\x3d\xc9\xe8\xc0\x15\x83\x49\x0f\xc8\x00\x1b\xe7\x4d\xd4\xbf\x5c\x64\x68\x7c\x71\x73\x63\x81\x85\xac\x8b\xb6\xfd\x35\x59\x5d\xfe\x5a\x45\x8a\x6f\x91\xf8\xd7\x9c\x8a\xf2\x73\xe3\x93\x35\xf3\x67\x74\x76\x7a\xa5\xb7\x8c\xfd\x5c\x5d\x3a\xcc\x54\x72\xd9\x54\xd2\xc8\x11\x34\x9d\xdc\x9f\xfe\x4b\x29\x40\x90\x79\x2d\x2c\x7d\x7a\xe1\x4c\x6e\x1b\xe5\xf9\xdb\x9c\x36\x4f\x11\xa8\x3f\xe3\xb9\x06\x54\x7b\x28\xd0\xc8\x9f\xa1\xcb\x57\x68\xc7\x2b\xf1\xf8\xbb\xa6\x64\x61\x0b\xe7\x7c\x4e\xf5\xba\x80\x4f\xe0\x76\x89\x36\x23\x64\xf5\xf4\x87\x53\x5c\x59\x94\x9f\xbd\x85\x8f\xcf\x19\xde\xec\xf9\x71\xfa\x23\x05\x38\xa2\xa6\xdb\xd0\xb3\x6d\x1a\x52\xb6\xb3\x85\x13\x65\xa7\xda\x21\xe0\x13\xd8\x21\x5c\xb7\xce\xc0\x16\x59\x4c\x2e\xd5\x0a\xd3\xd6\xb1\xd3\x0b\x06\x66\x89\xcc\x8c\x7a\x15\xb1\xc3\x11\xf6\x72\x70\x42\xc2\xbe\x22\xca\xd1\xef\x16\x93\x13\x81\xc9\x5c\x3b\xfb\xd8\x94\x2c\x63\x01\xd1\x29\x2c\xe4\xd3\xae\x57\x4a\x69\xda\x9d\xeb\x04\x1f\x13\xeb\xec\x07\xba\x20\x07\xe3\x01\x47\xd4\x05\xd9\xd4\x0c\x3b\xdd\x07\x55\x00\x84\x95\x69\xea\xe9\x4f\xbd\x95\x4f\x15\x64\xd5\xb5\xf7\xd8\x02\x36\xb0\xde\xb2\x48\xdc\x71\xa8\xb3\x11\xbc\x61\x92\xf6\x91\x45\xb5\xb2\x4c\xc7\x94\x4d\x3d\x53\xaf\x64\x1d\x85\xce\x02\x44\x05\x58\xde\xf0\xc2\xff\xde\x5e\xcb\x32\xb0\x6d\x75\xad\x0b\x99\x8e\x12\x28\x2e\x6a\x3a\x50\xb2\xa9\xb2\x9b\x55\xc6\xdc\xf5\xa9\xad\x2c\x63\x3d\xa4\x20\xe6\x95\xef\x6d\x8a\xfb\xaf\xaa\x2a\x9f\x37\x8c\xe5\xca\xf8\x5d\x61\xad\x92\xa2\x27\x86\xb9\x5c\x59\x87\x61\x2f\x9d\x3c\x27\x0c\x46\x56\x76\xce\xe6\x9b\x45\x69\x4e\x7c\x57\x55\x46\x2a\xe4\x8e\xfc\x65\x5f\x15\x2f\x02\x9e\x18\x00\x83\x96\x6f\xae\x2d\x79\xb7\x4d\x23\x23\xf4\x84\xdd\xc9\xc5\xc5\xcd\x4d\x76\x2a\x96\xdd\x0e\x82\x85\xb5\x53\xcd\x19\xec\x05\xfc\x72\xd6\xf1\x42\xd0\x25\x1e\x13\xbd\xbc\xbd\x30\x99\x62\x13\x3b\x11\xf3\x88\x82\xcd\x91\x79\x24\x7e\x1e\x9c\x4a\x70\xb8\xa7\xb3\x80\x2e\x57\xdc\x8e\x2a\x47\xa2\x07\x49\xb3\x05\x1b\xe8\x3a\xb0\x20\xc9\x34\x75\x20\x1a\x61\x4c\xd2\x64\x20\x18\xb1\xf8\xeb\x7f\x17\x8f\xc9\xfb\xdd\x44\x42\x22\x5a\xc7\xf6\x33\x25\x1f\x46\x96\xe9\x53\x77\x7e\x7a\xa8\x05\x6f\x6f\x30\x54\x6f\x71\xf5\x0e\xf4\xe5\x4b\xd4\x82\x7f\x42\xf0\xd7\xaf\x45\xac\xd2\x8a\x87\x46\xfb\xcf\x81\x1d\x4b\xf0\x8b\xd9\x34\xc1\x3e\x61\x70\x0f\x60\x6e\x53\x4a\x5f\xe1\x3e\x43\xe3\x4a\xdf\xb3\x50\x32\x92\x96\xe9\xc2\x4e\x89\xa5\x45\xfb\x03\xce\x13\x4d\x0b\xa4\xfc\xae\x78\x5a\x51\xd9\x13\x23\x6a\x81\xb4\xc3\x98\x9a\x55\x20\x27\xaa\xc6\xf6\x84\x9c\xd1\x57\x43\xff\x8c\x42\x2a\x9d\x44\x05\x7d\x7f\x41\x6a\x56\x36\xf0\xe6\xc7\xd0\x54\xda\xbd\xe8\xd4\xf6\xe2\x66\x01\xd9\x69\x44\x56\x82\xf6\xaf\xa4\x58\xce\x46\x00\xc6\x1b\xd0\xcd\x15\x48\x9b\xb6\x74\x36\x6e\xc2\xb3\xd6\x9d\x8c\x87\x4b\xe0\x88\x19\x8f\xdc\x54\x2b\xeb\xb1\xad\x2d\x0c\xd1\x59\x5b\x20\x6d\x86\x8d\x21\xbf\xfe\xf5\xf7\x7e\xec\xf2\xcf\x7f\xd3\x46\x2f\x7f\xfd\x9d\xb4\x39\x58\x9a\x19\x93\x61\x7b\x5e\x86\x69\x80\xdc\xb1\xd0\x9e\xd7\x21\x9b\x40\x33\x6d\x09\x04\xc9\x5c\x1b\x8a\x37\x63\x4d\x5b\xa2\xb1\x00\xc9\x6c\x2c\x1e\x5a\x5d\x4b\xb8\xdc\x16\x40\x29\x4e\xb7\x82\xb9\x3f\x4d\x09\x5b\x5b\xb8\x85\xab\x4c\x17\xe1\x37\x37\x6f\xbf\x5c\xc1\xee\xb0\x31\x37\xc9\x99\x27\x8d\xce\x48\x45\x67\x49\xab\xe5\x11\xe7\x53\xa2\xe4\xe6\xb9\x5c\xa5\x72\xf3\x8f\x32\x4a\x66\x46\xda\xb3\xa9\x59\x7a\xff\x61\xae\xa2\x05\x61\x21\x5d\xd5\x86\xe8\x88\x90\x6a\x5a\x05\xab\x45\x50\x83\x9d\xb0\x05\xea\x65\xb0\xcc\x5b\x75\x29\xc3\xb6\xcd\x8f\xb9\xd1\x04\x6a\xf3\x93\xfe\xc1\xca\x8b\x17\xa0\xc7\xd0\x97\x0b\x44\xd0\x0c\xcd\xd1\x44\x5d\xf0\x77\xc1\x7c\xb7\x5f\xf5\x8b\x2b\xe8\x02\x85\x11\xe6\x1b\x4c\x7e\x83\x31\x08\xa1\x6f\x50\xfa\x06\xa7\xbe\xc3\x18\x8a\x33\xe4\x25\x8c\x5e\x7c\xfd\x51\x8e\x3b\x2a\xf8\xbf\x6e\x88\x59\x55\xda\x0a\x8e\xa9\x29\xf9\x92\x18\x92\xa0\xaa\x48\xc2\x84\xb5\x0d\x76\x51\x46\xd0\x8c\x83\x5f\x54\xe4\xca\xc3\x71\x18\xa7\xab\xc8\xc3\x05\x51\x51\x84\xe4\xbc\x54\xae\x0c\x02\x27\x30\xb4\x8a\x0c\x42\xf0\x63\x5a\x38\xba\xf6\xd6\x33\x73\x45\x90\x18\x8c\x56\x52\x83\x0c\x45\x04\x3d\x58\x09\x11\x34\x8e\x10\x55\x44\x50\xc2\xd2\x54\x34\x75\x5b\x5e\x0b\x1a\x21\xd1\x4a\x22\xe8\x98\x16\xc1\x36\xe6\x12\x72\x28\x9c\xc4\xaa\xc9\x71\x2b\x5d\x5c\x2c\x2c\xb0\x10\x1d\xd3\xca\xf7\x29\x06\x46\x60\xa6\x0a\x7b\xc6\x63\xef\xcf\x59\x0a\x1b\xc5\xca\xe7\x8e\x52\x48\xa5\xaa\x46\x60\x8f\x7d\x50\x0b\x5e\xa6\x9a\x2f\x80\x60\xa8\x4a\xd6\x41\x90\xa8\x80\x5d\xea\xe3\x76\x00\xf9\x82\x18\x92\xa9\xa6\x09\x1a\xab\xe8\x20\xd9\xf4\x7f\x38\x9b\x27\x09\x81\x29\x02\xaf\x54\x23\x08\xe6\xab\xb3\x4b\xd1\x73\x6b\x1c\x41\x50\x8a\xac\xa6\x09\x2e\xa8\xda\x26\xfc\x11\x81\xb9\xd4\x05\x55\x03\x7a\x6e\xd7\x88\x20\x04\x82\x54\xea\x84\x11\x22\x5c\x3b\x09\xe7\xb4\x37\x05\x6a\x90\x54\xb5\x6e\x1e\x21\x05\xcd\x58\x00\xdb\x11\x0e\x67\xcd\x0b\x44\x51\x0c\x5d\xad\x46\xa8\x58\xb8\xf6\x96\x27\xc4\xfc\x60\x82\xa0\x30\x8c\xe1\x81\x90\x8c\x58\x9b\xbb\xd6\x5e\x35\xd8\x1e\xac\xb7\x87\xe8\x91\x2b\xe8\xe2\xb6\x3e\xef\xdc\x92\x23\x1e\xef\xf3\x6d\x6e\x50\xef\xf1\xcd\x1a\x85\xa1\x2c\x8e\x91\x8f\xc4\x80\x6f\x8c\x47\xdd\xdb\x59\x87\xba\xad\x75\xeb\xbd\x61\xb7\xdd\xec\xe3\x63\x8a\x7b\x98\xdd\x4f\x93\x16\xca\x14\x82\xba\x42\x58\x62\x56\x1b\x3c\xb0\xc4\x03\x3e\x63\xb9\xd6\x7c\x36\x42\xa7\x9d\x3e\x3a\xed\xe3\xb5\xe9\x6d\x6b\x3a\xa4\x70\x6e\x3a\xe8\xf4\x79\x74\xd8\xba\xc7\x67\xa3\x56\xbf\x3d\xe2\x3b\x9d\xd6\x41\x35\x64\x0a\xc1\x5c\x21\xb5\xd1\xe0\xa1\xd5\xee\xa2\xf5\x36\xd6\xe4\x87\x78\x6d\xde\x6d\xf6\xf8\x46\xb7\x79\x37\xe5\x07\x53\xb4\xf5\x80\x3d\xf6\x9a\xe3\x56\x9f\x9f\xd6\xb9\x3e\x3b\x9e\x51\xc3\x3a\xd5\x9f\xa3\xad\x8b\x63\xb7\x6d\xb8\xa3\xb8\x82\x6a\x08\xb6\xba\xed\x77\xa9\x7e\xb7\x41\xfe\x96\x86\x2b\x08\xbb\x82\x1c\x6b\x0d\x4a\x38\xc7\xe1\x66\x85\x2a\xc3\xbb\x2a\x0b\xe4\x67\xd1\x34\x96\x94\x5c\x41\xc8\x95\xbf\xcf\xa9\x58\xd1\xb4\x05\xf2\x63\x1b\x41\xb8\x48\x1e\x69\x03\x08\x4a\xd3\x38\x03\x13\x0c\x4d\x78\xa8\x5c\x67\xfa\xe7\xb3\xdf\x8d\x7f\xbe\x81\x3e\x33\x0c\xf3\x9d\x71\x5f\x30\xfc\xf9\x0a\xfa\xbc\xdf\xb6\xe1\x3e\x34\x44\x47\x7b\x03\x9f\xff\x9b\xe5\xaa\x49\x79\x68\x42\x1e\xea\xfd\xfd\x3a\x79\x49\xfd\x30\x4f\x45\x37\x29\x2f\xcf\x80\x26\x68\x86\xc1\x68\x92\x66\xbc\xc2\xb0\x87\xd7\x76\xdc\x41\xb4\xb1\x10\x24\x51\x17\x0d\xd9\x03\x87\xc0\x30\xfc\x1d\xf6\x5f\xe5\x21\x62\x71\x09\xe8\x61\x0d\xc4\xf8\x9e\xc3\x24\x51\x79\xae\x45\x7c\x95\xde\x81\xb6\x78\x72\x05\x22\x57\xd0\x67\xdf\xa3\x84\x17\xb0\x75\x65\x1c\xdb\x4d\x56\x72\x0c\x0f\x15\x8e\x52\x81\x1f\xfe\x2a\x3b\x07\x12\x7e\xb9\x9d\x13\x1a\x95\xb3\xf3\x91\x91\xc2\x47\x55\xd0\x8f\xa4\x6d\x30\x39\xb6\x1f\x09\x37\x99\x44\x23\x10\xaa\xd0\x84\x8c\xe3\x24\x26\xa1\x22\xc9\xa0\x28\x05\x28\x85\xc2\x10\x4a\x55\x09\x02\xa5\x24\x40\x2a\x08\x46\x50\x34\x01\x70\x15\x96\x44\x95\x22\x09\x8a\x01\xb8\x8a\xaa\x8a\x82\x21\x92\x48\xb8\x23\x06\x98\x92\x45\x1c\xc8\x12\x8a\xd3\xa2\x8a\xaa\x18\xc9\xc8\xa8\x88\x89\x34\x43\x61\x24\xc0\x49\x20\xa2\x38\x8c\x11\x8a\x8a\x2b\x40\x42\x54\x06\x67\x14\x19\x43\x30\x85\x21\x54\x52\xa4\x64\x42\xf6\x3b\x56\x24\x31\xf6\x20\x6f\x30\xe2\x06\x45\x92\x43\x12\xff\x6b\xf4\x3b\x43\x53\x30\x42\x15\x3e\x0d\x3a\x12\x84\xa6\xe9\x2b\x08\x21\xdd\xfa\x3c\x78\x5d\x41\x98\xfb\x0f\x09\xfe\x85\x5f\x22\xbb\x37\x2e\x34\x96\x65\xd9\xfa\xbb\xda\x99\xd8\xf6\x8b\xf6\xd6\xfd\x10\xe5\xce\xf3\xeb\x9d\x8c\x12\xb7\xa4\x36\x6c\xcc\xd5\x09\xb0\x55\xfd\x0e\x6b\x70\x8c\xae\x8a\xc6\x46\x96\x08\x16\xc3\x5f\xdf\x5a\xf4\xe5\xed\xf6\x6d\x5d\x53\xf4\xb1\xdc\x03\xf6\xe2\xce\x5a\xf1\xa3\x77\x5b\x62\x5e\x99\x49\x8f\x45\x71\x59\x7b\x85\x5d\xd6\xec\x7c\x70\xdf\x1b\x0f\xd9\xdd\x4b\xc7\x54\xfe\x4d\x7d\x54\x1e\x6a\x9b\xc1\x6d\x9d\x26\x9f\x5f\x31\xa5\x4d\x74\x3a\xd3\xcd\xa3\x6c\xae\x50\x69\xfe\x71\xdd\x69\x3d\x50\xfd\xcd\xf5\xa8\x2f\xbf\xb2\xcb\xfe\xc8\x6c\x2f\x7b\xe8\xdd\x63\x8d\x78\x7d\x9d\x8e\x09\xfe\x85\x7e\x46\x3a\xe8\xe5\xd3\x04\xa3\x65\xa3\xdf\x9d\xf3\x60\x8d\xbd\xbb\x9c\x7b\x3c\xde\x15\x3f\x56\x68\x44\x18\xcb\xd9\x6c\xca\xeb\x91\x9d\x23\xf8\x90\x65\x1b\xf0\x5d\xda\xe3\xff\xe9\x97\xef\x54\x70\x46\xbb\x4f\x36\x05\xf4\x3c\x6e\x7c\x41\x62\x0a\x43\xab\x04\x46\x02\x40\xd2\x0a\x22\xa1\x94\x44\x48\x34\xa3\xa2\x98\xa8\x12\x18\x82\x48\x14\x41\x32\x22\x8a\xab\xa2\x8a\xe0\x30\x26\x2a\xb0\x44\xa0\x12\x89\x61\x12\x4c\x49\x80\x61\x2e\x76\xd1\xf5\xd0\xab\xe1\x74\x67\xc7\xbe\xc3\x30\x46\x31\x19\x4d\x21\xf2\xd4\x0f\x20\x38\xc1\xa0\x39\x2d\x01\x2d\xd9\x12\xd0\xc1\xe3\x33\xc2\xaf\x09\x13\x96\xee\xa8\x19\x6e\x6c\xfb\x6f\xd3\xcd\x2d\x76\xbf\x32\x5f\x2e\xdf\x9a\x6c\xdf\xa9\x23\x1d\xb4\x47\xd5\x28\xf2\x71\x0a\x9a\xb3\x27\xec\xb2\xfb\x80\x3d\x4c\x5a\x2f\x4f\x12\xe9\x5c\xce\xb5\x97\x09\x4e\xb3\x9d\xfb\xa9\xf5\x74\xd9\xe6\x75\xac\xf7\xc0\xf0\xbc\x33\xf5\x6a\xce\x6b\x09\xde\xbb\xf6\xee\x1f\xeb\x39\xab\xbd\xff\xfc\xce\x0e\x86\x2f\x7e\x4d\xbf\xcf\xf8\x47\xb5\x4d\xcc\xb6\xcd\xd9\x06\x5d\x52\x13\x93\x1f\xd6\x9f\x1e\x1e\x89\x8f\xd7\xa6\xf5\x6e\x2e\xd0\x67\xf8\x65\xfe\x3a\xe4\xbb\xac\xe5\xf0\xe8\xa4\x8f\x76\x9b\x2c\x33\x31\x6e\xdf\x9c\xf1\xfc\xe3\x7e\x3e\xb8\xb5\xb9\x0e\xff\xfc\x41\x76\x40\xef\xe9\xae\xcf\xea\xe2\x7c\xa6\xe0\x6f\x5e\x4b\x69\xa7\xb4\x94\x46\x3b\xcd\xdb\xfe\x9f\xb7\x14\xb4\x7c\x4b\x41\xce\xe3\xe5\xde\xc2\x87\x3b\x5c\x70\xc3\x2b\xc2\x50\xf0\x37\x18\xf9\x06\x23\x10\x0c\xdf\x78\x7f\x99\xde\x8c\x50\x08\x99\xfb\xd0\x8d\x18\x38\xca\xe0\x0c\x49\xa1\x0c\x99\xe3\xea\xe9\x8e\xee\x23\xfa\xb7\xeb\x24\xfb\x55\x9b\x77\x34\x7c\x7b\xbd\x1d\x77\x6a\x54\xc3\x68\x30\x2d\x14\xde\x3c\xd7\x2e\x6d\x78\xe1\xd8\xef\xed\xf7\x0f\x64\xae\x8c\x67\x0f\x62\xed\x4e\x6c\x2e\x5c\x7a\x2e\xc5\x87\xd3\x5f\xa1\x0f\xb3\x6c\xed\xe5\x37\x28\x72\xd6\xd7\x85\xef\x4b\xc5\xe3\xa9\x12\x3b\x0b\x8f\x1d\x5e\x65\x2c\x18\x65\x66\x6d\x19\x0d\xae\x80\xcd\x41\x32\x76\x1c\x9b\x44\x02\x83\x1d\xc7\x05\x4f\x24\x5a\xc7\x71\x21\x12\x83\xee\xe3\xb8\x90\x89\x54\xe1\x3c\x3b\x2d\xcf\x32\x8d\x90\xbf\x0c\x78\x05\x91\x65\xa7\x4f\x32\xf6\x1b\x9e\xec\xb1\x11\x2f\x8d\xb9\xe8\xee\x03\xee\x8d\xa6\x68\x2f\x15\xd2\x0c\xc7\x3c\x29\xef\x71\xb3\x34\x7f\x0a\xe9\xc4\x34\xf5\x17\xcc\x05\xa6\x98\x24\xea\xe1\xbb\xf7\x74\x24\xdd\x55\xd7\x86\x02\x2c\x4f\x97\x23\xe7\xf3\xce\x65\x92\x2b\xa8\x4c\xee\x7d\xe2\xc4\x63\x15\xb3\x05\x8d\x71\xf7\x1e\xff\xa5\x66\x3b\xc1\x21\x7f\xbd\xd9\x0a\x9a\x76\xca\xbe\xd7\x13\x16\xbe\x2b\x6d\x01\x3c\xb6\xfb\xc8\xdc\x3a\x90\x1a\xf2\xf0\xec\xf8\x50\xc8\x08\x4d\x30\xca\x0a\x7a\x85\x8c\xb0\x78\x13\xce\x0a\x35\x85\x7c\xf0\x44\x57\x70\x2c\x9f\x44\xdb\x38\x1a\x0f\x19\xe7\x93\x1d\xfc\xaa\xee\x16\x3c\x47\xf8\x2b\xda\x1c\x52\x21\x00\x66\x6e\x0d\x3c\x83\x0f\x47\x17\xdc\x31\x5c\x02\x0c\x4e\x91\xa8\xa2\xe0\x12\xa5\x32\xb4\x4a\xe2\xb8\x02\x50\x98\x42\x29\x4c\x45\x44\x04\x63\x54\x02\x13\x81\x2a\xa3\x22\x02\x80\x44\x22\x34\x4d\x22\x08\x2d\x8b\x14\x8d\x52\xea\xc5\x6e\xd2\xfa\xe8\xf8\x14\xc9\xd7\xb1\x30\x51\xc9\x9e\xec\x42\x11\x2c\x67\x2a\xcc\x7f\x1a\x6b\x41\x7e\x86\xd3\x21\x9f\x81\x86\x3d\x2f\xcd\x36\x3d\xb9\xd5\x1b\xd7\x60\x21\x63\xd4\x60\xee\xb4\x3a\x9d\x8f\xd9\x3d\xfd\x7e\xaf\x3d\xd6\xc4\xfa\x9a\xe8\x12\x3d\xd6\xcb\x10\xd8\x30\x01\xaf\x25\x06\xe0\x91\xcf\x5e\xda\xc1\xf6\xd1\xfa\x35\xdb\xc7\x89\x87\x5a\x03\x73\x5a\xf7\xcd\x3e\x32\xc2\x58\xb8\x07\x5e\x06\xf4\xdd\x88\x34\x78\x84\x65\xc0\x4c\x53\xb6\xed\x20\xeb\xf7\x5e\x22\xf5\xf2\xf6\xf2\xee\xb1\xeb\x5d\x37\xd6\x4d\x06\xb5\x9d\xa1\x09\x3f\x0f\x55\xc7\xe2\xd6\x6f\xa3\x91\x85\x36\x1f\x1c\x91\x5e\x5c\x37\x98\x99\xb4\x9c\x4d\xef\x3e\xb4\x29\xfd\x4c\x3d\x5e\x8f\x3b\xe8\xed\xd3\xf5\xb5\xb5\x00\xf0\x33\x3c\x1f\xd2\xdb\x17\x09\x6b\xd0\x5d\x83\xf9\x50\x57\xd6\xa0\x43\x4d\x2e\xa7\xdb\x0f\x76\xf8\xf3\xe7\x45\x34\xbb\xbb\x8d\x64\x45\xfb\xb7\x91\x0c\xff\x6e\x5a\xbf\xec\xcb\xfe\xfb\x48\xd9\xe1\x8e\xac\xe1\x7d\x7e\xdf\x97\xb0\x5e\x79\xb2\x0b\xfa\xe2\xe2\x79\xd3\x13\xa7\x03\x86\xac\x7d\xa8\x36\x03\x60\xd9\xb4\xf8\xc7\xf9\x47\x6d\x76\xf7\xd2\x34\x3b\xa1\x9e\x6c\xfd\x9e\x7d\x7b\x36\x92\x62\x0f\x5e\x5c\xd6\x83\xda\x99\xe5\x27\xeb\xb5\x94\x7c\xbf\x90\xe7\x22\xf5\xc8\x33\xea\xa1\x4b\xb3\xd4\xb3\xbe\xe0\x06\x00\x56\xa6\x53\xea\xbe\x25\x37\x86\x1b\x72\x78\xfd\xae\xb7\x5e\x65\x6c\xda\x40\x08\xf1\x0e\x6b\x6b\x88\x67\x4f\xd7\xd6\x41\x25\x2c\x72\x4c\x91\x99\xc8\x7a\x18\x1b\xc7\xcb\x1f\x9b\x4d\x1a\xc8\xc7\xcb\xef\x25\xe4\xd7\xd7\x26\x66\x3a\x38\xf1\x5a\x1f\x70\x9b\xd5\xf0\x1a\x33\x5b\xfc\xe5\x07\x42\x8d\xb6\x9a\x8d\xe8\x6a\xaf\xf9\xb0\x1c\xce\x16\xd6\x7a\x7c\x39\x61\xd9\xb8\xaf\x2d\xd8\x6c\x9b\x67\xca\x8f\xf8\x4f\x85\x76\xbd\xf3\xe9\x05\x9b\x52\x87\xc7\xe8\x70\xce\x3a\x3c\xd5\x86\x55\xe4\xfb\xed\xfb\x9f\x5f\xd5\xf1\x78\x03\x48\x6f\x33\x70\x38\xfb\xe5\xff\x77\x03\x9f\xd7\xc1\x17\xc7\xfe\x48\x84\x92\x50\x11\x45\x29\x19\x63\x64\x12\x17\x71\x5c\x95\x29\x51\x52\x70\x99\x21\x69\x84\xc1\x09\x52\x85\x31\x86\x61\x60\x52\x41\x50\x19\xa7\x48\x85\x82\x25\x1c\x46\x25\x55\x91\x50\x86\x54\x48\x11\xf3\x27\xfd\x90\x53\xc6\xb4\xfe\xaa\x4d\x76\x60\xf2\xa6\x9e\x19\x2c\x7b\xb6\xce\x7d\xba\x9f\x98\xf6\x47\x52\xbe\x2f\xde\x76\xe9\xd6\xf0\x6d\xf8\x22\x75\xd0\x16\x8b\xcd\xee\x9f\x47\x56\x67\xf9\x3c\x87\x61\xf5\x96\xb6\xbb\x6d\x6a\x09\x73\xa3\xf7\xbb\xd9\x35\x3b\xc7\xd8\x5d\x5c\xf2\x5e\x39\x71\xc9\x7f\x1d\xd1\x3f\x46\x67\xc3\x6a\xf7\x6f\xef\x4d\xc6\x7d\xc4\x35\x1c\xac\xf3\xbe\x14\x07\xeb\x81\xd2\x1c\x4f\x37\x0a\xdb\x04\x12\xd9\x1f\x02\x67\x3b\xec\xb4\x67\xe2\x87\x2e\x8d\x7b\xbd\xa7\x65\xab\xc3\x77\x1b\xb8\xfd\xfa\xc4\xbd\x4e\x1f\xe5\xe1\x00\xd6\x2f\xe7\xd7\xfd\xd5\xa5\x69\xcf\x96\x3c\x79\xd9\x9c\x3e\x48\xf6\x07\x45\x0c\xd1\xe7\x5b\xfc\xad\xd7\x2b\x11\x9f\x62\x4e\x1b\x8f\x49\x11\x9d\xfd\xb5\x1e\x36\xde\x9e\x6b\xda\x75\x0d\xee\xc2\x77\xb7\x5b\xe7\xe9\x9d\x47\xf4\x07\x58\xdc\xae\x4c\x84\xe1\x5b\x9b\xb7\x6e\x7d\xdb\x27\x9c\x1a\x27\xd7\x7d\x1d\xb1\x85\x63\xf5\x8d\x87\x6b\x1a\xdf\x97\xcf\x88\x51\xf9\xed\xf9\x04\xf9\xcd\xc9\xac\x66\x9f\x20\x9f\x65\xff\xbd\xfe\x2c\x32\x5e\xd8\xf7\xad\xb5\xe3\x6d\xd1\x37\x1e\x73\xd5\x2c\xb2\xc5\xa9\x75\xe1\xfa\xc2\xa5\x9c\xe0\x57\xc9\x16\xff\x50\xca\xd6\xbe\x5b\x3e\x53\xcf\xd8\x68\xaa\xf7\xe6\xc3\xda\x7c\x79\xf9\xfc\xd2\xb2\xe4\x97\xba\xd6\x5c\xda\xc4\x0c\x7e\x6e\xb4\x1f\x9f\xb6\xcf\xe3\xf7\xcb\x6e\xc7\x1c\x75\xf4\xdb\x39\xd7\x60\xee\x54\xfd\xfa\xe3\x55\x7d\xed\x36\x57\xcf\xe0\xed\xe9\xfe\xf6\x96\xea\x5d\x5e\x4e\x79\x73\xb3\xee\x7e\x34\xd8\x73\xf7\xad\x18\x29\x01\x0a\x56\x25\x8a\xa2\x51\x95\xa1\x61\x44\x56\x64\xa0\xc8\x08\x0a\x93\x00\x45\x54\x86\x41\x19\x4c\x66\x18\x9a\x84\x45\x84\x00\x38\x8e\xa8\x38\x85\x33\x14\x4e\x89\xb0\x88\x51\xa2\xb4\x5f\xc4\x3b\xa1\x6f\x45\x0b\xfb\x56\x1c\x41\x98\xec\xbe\x35\x78\x1a\xcd\x0a\x4f\xed\x5b\xeb\x89\x4a\x3d\xe8\x5b\x2b\x8e\xf9\x73\xfa\x56\x16\xdb\xcc\xa4\xcd\xa0\x2f\x19\x8f\x3d\xad\x76\xdb\xec\x74\xef\x86\x6b\xf5\xae\xbb\x58\x4f\xec\xd6\xdd\x66\xcb\xda\x83\x01\xd1\x64\x1e\x9f\x09\x12\x11\xe7\xc6\x1b\x7f\xdd\xba\x1f\xdd\x49\x4d\x9b\x93\x35\xe7\x56\x5a\x68\x8c\x32\xbb\x57\x3a\xa3\x87\xb7\xe5\xfd\xac\xae\x7d\xb4\x95\x65\xb7\xdd\xf8\xdf\xea\x5b\x4f\xed\xdb\x4e\x6c\xcf\xaf\xd4\xf5\xa4\x21\x9f\xb1\x6f\xfd\x9d\xe3\xfd\xd4\xbe\xf5\x5f\xea\xdb\xd8\x33\xf5\xad\xc7\xc6\xd9\xa0\x6f\xe5\xe9\xfb\x25\x3d\xf9\x58\x12\xe8\xa4\xbd\x18\x3d\x8d\xb5\xed\xb4\x6b\x6c\xc7\x78\xf7\x85\xaa\x6d\x65\x79\xd1\x6d\x7c\x5c\x8e\xd4\xd9\xc3\x25\x70\x66\x3a\x41\x7d\xa8\x1b\x64\x3a\x9e\x6d\xa4\x5a\xab\x6d\x8d\x96\x78\xfb\x6d\x7e\xaf\xcf\xc7\x2f\xb3\x2e\xa1\xdf\x2f\x4c\x7b\xdb\x7a\xd4\xb6\xec\x7b\xb9\xbe\x35\xf3\xd8\xb7\xc3\x53\xd1\x77\x27\xb0\x86\x3f\x80\xae\xfa\xc3\xa5\x08\x47\xff\x84\xc6\x46\x23\xfa\x73\xea\xa4\x40\x68\x30\x6a\xf7\xd8\xd1\x03\xd4\xe1\x1e\xa0\x2f\x9a\x52\x74\x32\x5b\xfa\x29\xf1\x27\xa3\x4e\x70\x4d\x43\x9e\x26\xb8\x10\x7d\xe2\x27\x77\xc7\x9d\xb2\x7f\xb2\x76\x71\xb1\x69\xca\x1d\x05\x0c\x9a\xf2\xed\xe1\x94\x83\xbe\xec\xc9\xaf\x22\x47\x90\x5d\xc5\x0e\x0c\xab\x68\x9a\xf3\x54\x6b\x65\xc5\x2b\x55\x6a\xc6\x8a\x67\xc1\xb2\xe2\x79\x35\x4b\x17\x92\xa7\x69\x0e\xac\xd2\x9a\x67\x4e\x78\x17\xce\x29\x9f\x57\xfb\x2c\x31\x79\xfa\xe7\x42\x2b\xb4\x40\xfc\x96\x93\x40\x11\xef\x46\x94\x72\xbf\x7e\xf7\x2f\x4f\x89\x71\x81\xfa\x7c\xb2\x31\x4c\xc7\x6d\xfe\x16\x92\x1c\x0b\x80\x68\xeb\xca\x46\x13\x5c\xd0\x72\x32\x9e\xe0\x70\xbf\x52\x88\x32\xda\x75\xe4\x72\x99\x63\xe1\xec\x59\x44\x91\xc4\xb2\x81\x38\x1e\x9f\xf8\xea\xe0\xb7\xf8\x69\xe0\xbc\xeb\x71\x4e\x40\xe6\x1d\x49\x50\x0a\x56\xf2\x20\x83\x34\x34\xc1\x9d\x3e\x27\xe0\xf1\x39\x94\x43\x94\x38\x25\xe1\xea\xf0\x40\x84\xd4\x26\x1f\xbd\xa4\xa8\x3a\xd2\x20\x4a\xf8\x80\x13\xec\xa2\xb0\xc3\xcd\xde\x31\xc4\x69\x67\x03\x5d\x85\xe7\x00\x65\x81\xdd\xff\xfa\xfa\x44\x98\x9a\x52\x1a\xe0\xfe\x20\x94\xab\xd4\x03\x8d\x0a\x40\x87\xf7\x4a\x9d\x03\x77\xc0\x2b\x0a\x3d\x23\x54\x1d\xa5\x49\xba\x02\xe1\x15\x5a\xe7\x50\x20\xe0\x95\xe1\xd3\x47\xaa\x10\x3f\xd5\xe6\x50\x89\xc8\x85\x61\xc7\xb6\xc6\x08\x8f\x63\x8d\x9f\x6f\xe8\xc4\x0d\x68\xa7\xda\x3a\xce\x2e\x0a\x39\xdc\x56\x1a\xc3\x98\x8e\xe8\xf0\x16\xb7\xd3\x61\x1d\xf0\x2c\xd7\xbd\xa5\x01\x8c\xdc\x47\x77\x74\xb5\xee\x79\x1c\xef\x92\x45\xee\x97\x76\xd3\xde\xf1\x80\x0f\x99\x25\x90\x2b\x20\x81\x33\x71\xc6\x59\x3e\x40\xff\xea\xc0\xb3\xc0\xf3\x58\x95\x02\x17\xfe\x42\x39\x13\x5a\xf2\x2a\xc4\x53\xf1\x25\xf8\x15\x81\x3c\x3c\xbc\xad\x10\xe9\x79\xec\x18\xe3\x56\x16\x65\xa1\x35\xcf\x83\xad\x14\xa6\x7c\x2c\x89\x3b\x37\x4f\x42\x14\xe7\x55\xba\x46\xc3\xe3\xe1\x52\xf1\x1d\x5c\x23\x7a\x12\xc2\x24\xb7\x72\xed\x36\x00\x78\x75\x70\xa2\xdd\xd5\xc1\xa9\x88\x19\x4a\x9c\xa1\xdf\x0e\xf8\x14\x21\xae\x38\x3a\x4a\xde\xfe\x7a\x92\x75\x2b\x18\xb6\xd0\x6e\xc5\xd7\xda\x9e\x68\xd0\x42\x01\xb1\x3c\x2d\xfc\x01\x7b\x3c\x33\xf2\x09\x2b\x60\x3f\xdd\x0f\xf2\x78\x17\x23\x4e\x69\x65\xf9\x97\x16\x1f\xeb\x0f\xb9\x5c\x0b\x87\xfd\x2e\x51\x01\xd0\xd4\xdb\x99\xcf\x83\x36\x8d\x75\xe1\xf0\xad\xac\x27\xc7\xaf\xa3\x3e\xab\x33\xc4\x58\x1f\x33\xde\x2c\x7f\xff\xf6\xd9\x0d\x7d\x70\xf2\x78\x21\xfc\x44\x81\xf2\xca\x44\xaf\x23\xff\x55\xf6\x8f\x1e\x36\x5f\xa4\x49\x84\xb6\xbc\x12\xa9\xd7\xb3\xff\x2a\x6d\x52\xcf\xd0\x2f\x52\x2b\xad\x50\x79\xfd\x76\xb7\xd7\xff\x2a\x9d\x76\x07\x4a\x16\xe9\x91\x39\xdb\x55\x70\x6b\xff\x59\x81\x27\xb9\xa7\x26\xc0\x55\x1b\x78\x9c\x69\x3c\x85\x3a\x53\x0b\xcf\x13\x51\x46\x87\x82\xbc\x2e\x57\xd8\xf9\xc2\xd7\x21\xe3\x52\xd8\x8b\x83\x58\x34\xd9\xfe\x15\x6e\x73\xc8\xff\xe8\x54\xdf\x3f\xc7\x2a\x0c\xe4\xe1\x0c\xa3\x20\x99\xe6\xcb\xd1\x56\xce\xe1\x59\x38\x44\xf8\xf2\x25\x3c\xa4\xfd\xdb\x9f\x7f\x42\x17\xb6\xa9\x2b\x91\xd5\xb4\x8b\x9b\x1b\x07\x6c\x9c\xaf\x5f\xaf\xa0\x6c\x42\xd9\x54\xca\x11\xfa\x73\xf1\xd9\xa4\x92\xb9\x5e\x3c\x39\xa5\xc4\xc7\x48\xf3\x01\xc4\x48\x13\x10\xbe\x42\xb3\x16\x37\xe2\x7c\x27\x83\x7e\x42\x18\x56\x7a\x21\x5a\x53\x04\x35\xb2\x4c\xd4\xec\xfc\x9e\xe5\xe8\x40\x2c\xd4\xec\x8f\xb8\xf6\x2d\xbf\x5b\x02\x82\x46\x5c\x93\x1b\x71\x7c\x9d\x4b\x5e\x93\xee\x3d\xed\xf3\xd0\x74\xd0\x70\x5d\x66\xc4\xf9\x37\x13\xba\x5f\x35\xb8\x2e\x37\xe1\xa0\x3a\x3b\xae\xb3\x0d\x2e\xff\x34\xfd\xc4\x47\x21\x31\x15\x73\x3e\x63\xc4\xe5\x14\x2c\x92\x65\x21\x89\xdb\x27\x39\x6d\x94\x6a\xac\x60\xa0\x5f\xb0\xa2\x98\x69\x89\x20\x95\xfd\xd7\xed\x10\xc5\x91\x66\x85\x70\x96\x20\xdf\x61\xaa\x59\xe0\x70\x52\xe9\x5f\x34\x43\x06\x98\xb8\x2d\x52\xa6\xc1\xce\xeb\x14\xc9\x29\x8e\xff\x05\x83\x64\xbb\xc6\xc1\x1c\x52\x59\xef\x18\x98\xb6\xb3\xb0\xc0\x78\xd8\x85\x14\xd1\x11\x5d\x17\x83\x94\xf5\x72\x05\xc9\xe6\x72\xa5\x03\x07\x78\x3a\xfc\x5f\x00\x00\x00\xff\xff\x35\x02\x7e\xcd\x21\x8e\x00\x00") +var _account_mergeHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x5d\x79\x6f\xe2\x48\xd3\xff\x7f\x3e\x85\x35\x5a\x29\x33\x4a\x66\xe2\xdb\x38\xf3\xcc\x4a\x06\xcc\x11\xc0\xdc\x81\x64\xb5\xb2\x7c\xb4\xc1\x89\xb1\x89\x6d\x12\xc8\xea\xf9\xee\xaf\x7c\x81\x6d\x7c\x02\x33\xfb\xbc\x28\x8a\x00\x57\x57\xfd\xaa\xba\xba\xab\xab\xbb\xe9\xfe\xf6\xed\xd3\xb7\x6f\xd0\xc0\xb0\xec\x85\x09\xc6\xc3\x2e\x24\x0b\xb6\x20\x0a\x16\x80\xe4\xcd\x6a\xfd\xe9\xdb\xb7\x4f\xce\xf3\xfa\x66\xb5\x06\x32\xa4\x98\xc6\xea\x40\xf0\x06\x4c\x4b\x35\x74\x88\xfe\x4e\x7e\x47\x42\x54\xe2\x0e\x5a\x2f\x78\xa7\x78\x8c\xe4\xd3\x98\x9d\x40\x96\x2d\xd8\x60\x05\x74\x9b\xb7\xd5\x15\x30\x36\x36\xf4\x13\x82\x7f\xb8\x8f\x34\x43\x7a\x39\xfe\x56\xd2\x54\x87\x1a\xe8\x92\x21\xab\xfa\x02\xfa\x09\x5d\x4d\x27\x8d\xca\xd5\x8f\x80\x9d\x2e\x0b\xa6\xcc\x4b\x86\xae\x18\xe6\x4a\xd5\x17\xbc\x65\x9b\xaa\xbe\xb0\xa0\x9f\x90\xa1\xfb\x3c\x96\x40\x7a\xe1\x95\x8d\x2e\xd9\xaa\xa1\xf3\xa2\x21\xab\xc0\x79\xae\x08\x9a\x05\x22\x62\x56\xaa\xce\xaf\x80\x65\x09\x0b\x97\xe0\x5d\x30\x75\x55\x5f\xfc\xf0\xb1\x03\xc1\x94\x96\xfc\x5a\xb0\x97\xd0\x4f\x68\xbd\x11\x35\x55\xba\x71\x94\x95\x04\x5b\xd0\x0c\x87\x8c\xe9\x4e\xd8\x11\x34\x61\xaa\x5d\x16\x6a\x37\x20\x76\xde\x1e\x4f\xc6\x50\x9f\xeb\x3e\xfa\xf4\xdf\x97\xaa\x65\x1b\xe6\x8e\xb7\x4d\x41\x06\x16\x54\x1f\xf5\x07\x50\xad\xcf\x8d\x27\x23\xa6\xcd\x4d\x42\x85\xa2\x84\xbc\x64\x6c\x74\x1b\x98\xbc\x60\x59\xc0\xe6\x55\x99\x57\x5e\xc0\xee\xc7\xef\x10\x28\xb9\xef\x7e\x87\x48\xc7\xaf\x7e\x9f\x82\x9e\xb4\xf2\xda\x79\x00\x1d\x47\xce\x12\x16\xa2\x3a\x30\x77\xc9\xdb\x5c\x9d\x9d\x87\x28\x7d\xb6\x2e\x2a\x1e\x28\x0a\x90\x6c\x8b\x17\x77\xbc\x61\xca\xc0\xe4\x45\xc3\x78\xc9\x2e\xa8\xea\x32\xd8\xf2\x21\xe5\x74\x4b\x70\x1d\xdd\xe2\x0d\x9d\x57\xe5\x32\xa5\x8d\x35\x30\x85\x7d\x59\x7b\xb7\x06\x67\x94\x3e\x20\x39\x0b\x45\xb9\xb2\x1a\x90\x17\xc0\x74\x0b\x5a\xe0\x75\x03\x74\xa9\x94\x0a\xa1\xe2\x6b\x13\xbc\xa9\xc6\xc6\xf2\xbf\xe3\x97\x82\xb5\x3c\x91\xd5\xf9\x1c\xd4\xd5\xda\x30\x9d\xe6\xe8\xf7\xa9\xa7\xb2\x39\xd5\x96\x92\x66\x58\x40\xe6\x05\xbb\x4c\xf9\xc0\x99\x4f\x70\x25\xbf\x5d\x9e\x00\x3a\x5c\x52\x90\x65\x13\x58\x56\x76\xf1\xa5\x6d\xca\x6e\xdc\xe1\x35\xc3\x78\xd9\xac\x0b\x50\xaf\xf3\x20\x79\x54\x82\x6a\x96\x64\x1c\x74\xba\x85\x0b\x38\xfd\x84\xa2\x00\xb3\x18\x69\xc0\xfe\x84\x22\xbe\x59\x8b\x15\x72\xbb\xd6\x12\x42\xc2\x5d\x71\x5e\x89\xb5\x53\x60\x69\xe7\xd6\x80\x15\xe9\x80\xc4\x5d\xae\x1b\x2d\xf7\x2d\xbd\x08\xb1\xe1\xe1\x30\x72\x09\x55\xcb\xe6\xed\x2d\xbf\xce\x67\xe9\x50\x1a\xeb\xa2\x94\xa0\x28\x59\x10\x4a\xb2\x89\xc5\xa0\xb9\xe7\x92\xe5\xf7\x62\xe2\xae\x58\x65\x7a\x31\xd2\xb1\xb6\x65\x6d\xf2\x24\xef\x89\x25\x43\x06\x25\xc7\x05\x7b\x37\x58\x0b\xa6\xad\x4a\xea\x5a\xd0\x33\x83\x77\x5e\x51\x7e\x5d\x72\x6c\xb2\x8f\x68\x65\x11\x24\x17\x2c\x2d\xdf\x35\x5e\x11\x79\x1e\xe1\x2f\xe7\xef\x55\xa6\x53\x93\xfe\x5b\x27\x3e\x04\x43\x3f\xd7\x19\xf8\x82\x08\x16\x86\xb9\xe6\x57\xea\xc2\x1f\x30\x64\x40\x88\x51\x16\xd6\xb1\xfc\x78\x2f\x8b\x73\x51\xe7\xf4\x4a\xd7\xfa\xdd\x69\x8f\x83\x54\xd9\x93\x5c\x67\x1b\xcc\xb4\x3b\x29\xc8\x3b\xc5\xe9\x2e\xc0\xd9\xaf\xee\x6c\x4e\xee\xa7\xe2\xea\x07\x51\x7a\xcc\x0e\xa7\x2c\x57\x3b\xc1\x66\xce\x38\xdb\x02\xaf\xa5\x25\x47\x98\x14\x2e\x2d\x83\x82\xb4\x87\xd1\x6c\x61\x0d\x53\x5a\x7d\x19\xfd\x92\x59\x14\x2b\xeb\x8f\xfb\x8a\x11\xfb\x83\xbc\xc2\xba\xf9\x3d\x40\x19\x5d\xbc\x22\x05\x69\xfd\xe1\x5f\x71\x3c\xc1\x78\xb1\x08\xa2\x58\x1f\x92\x4d\x1c\xea\x12\x7c\x42\xa6\xd9\x1c\xb1\x4d\x66\x92\x40\xbc\x52\x9d\x8c\x43\x95\xc0\x17\x7d\xb3\x02\xa6\x2a\xfd\xf5\xf7\xd7\x02\xa5\x84\xed\x09\xa5\x34\xc1\xb2\xbf\x08\xfa\x0e\x68\xee\x54\x4c\x81\x12\x8a\x6a\x26\x16\x69\x4c\xb9\xda\xa4\xdd\xe7\x32\xf4\xe1\x85\xc5\xe2\x80\xee\x06\x3a\x02\x9a\xc1\x23\xd0\xee\x0c\x1e\x8e\xae\x6e\xf1\x03\xf8\x1b\xa8\x8c\x22\xae\xea\x05\x38\xb0\xf3\x09\xcb\x8d\x63\x2c\xb4\xf5\xc2\x7a\xd5\x02\x5f\xac\xb5\xd8\x1e\x73\x24\xe1\xc7\x27\x6f\x16\x8e\x13\x56\xe0\x2e\xf8\x0e\x9a\xec\xd6\xe0\xce\x2f\xf2\x03\x1a\x4b\x4b\xb0\x12\xee\xa0\x6f\x3f\xa0\xfe\xbb\x0e\xcc\x3b\xe8\x9b\x3b\x39\x57\x1b\xb1\x4e\x7d\xf9\x9c\x03\x7e\x9f\x22\x1c\xa3\x0f\x7d\xc6\xb5\x7e\xaf\xc7\x72\x93\x0c\xce\x1e\x01\xd4\xe7\xa2\x0c\xa0\xf6\x18\xba\x0a\xa6\xdd\x82\xef\x2c\x97\xc9\x55\x5c\x72\xa0\xbe\x2f\x73\x6f\xa1\x5c\x7d\x22\xb6\xe4\xfa\x93\x98\x3d\xa1\x59\x7b\xd2\xda\xc3\x0a\xcf\xbf\x45\xc4\x1f\xb8\xc4\x80\x94\x51\xfe\x88\x89\x6b\x80\x41\xf7\x76\xbd\x18\x0f\xbb\xd0\xda\x34\x24\x20\x6f\x4c\x41\x83\x34\x41\x5f\x6c\x84\x05\x70\xcd\x50\x70\xbe\x30\x0c\x37\xdf\xd1\x7c\xf8\x81\xaf\x1e\xf0\x07\x75\x9b\x64\xcb\xbd\x67\xe7\xf2\x87\x46\xec\x64\x3a\xe2\xc6\xa1\xef\x3e\x41\x10\x04\x75\x19\xae\x39\x65\x9a\x2c\xe4\x6a\xdf\xeb\x4d\xbd\xfe\x6e\x3c\x19\xb5\x6b\x13\x97\x82\x19\x43\x7f\xf0\x7f\x40\x63\xb6\xcb\xd6\x26\xd0\x1f\x88\xf3\x29\x5e\x1b\xb9\x0d\xf1\x3c\xed\xf2\xd8\x5f\x4c\x39\x34\x49\xb9\x22\x3d\xd5\x79\xfa\x15\x90\xb0\x57\x71\xff\xd5\x49\x1a\x7e\xf9\x04\x41\x35\x66\xcc\x42\xb3\x16\xcb\x41\x7f\x20\x7f\x21\x7f\xdf\xfe\x81\xfc\x85\xfe\xfd\xe7\x1f\xa8\xfb\x1e\xfd\x0b\xfd\x1b\x9a\x78\x0f\x21\xb6\x3b\x66\x1d\xa3\xb0\x5c\xfd\x6b\xa2\x65\x0a\xc4\x81\x33\x2d\x93\x2f\xe1\x57\x5b\xe6\x3f\xa7\x58\xe6\x38\xa6\xfa\x76\xd8\xc7\xe1\x62\x86\x38\x84\xed\x23\x8e\x2e\x62\x08\x1a\x3b\xb6\x82\x7e\x1e\x7a\x80\x1b\xef\xeb\xc9\xe3\x80\x85\x7e\x86\x5b\xc4\xd7\xa4\x56\x7b\x51\x8c\x71\x86\x31\x88\x41\x33\x2e\x8e\x30\x71\x08\x74\x2e\xca\x24\xa6\x31\xa4\x91\x06\x19\x85\x7b\xf0\xb2\x63\xb4\x49\xc3\xbc\xb3\xd1\x26\x30\x8d\xa3\x0d\x37\x92\x4c\xb4\x4e\xe4\x92\x81\x22\x6c\x34\x9b\xb7\x05\x51\x03\xd6\x5a\x90\x00\xf4\x13\xba\xba\xfa\x11\x7d\xfa\xae\xda\x4b\xde\x50\xe5\xd0\x52\x5a\x44\xd7\xf0\xf8\xd7\x57\xd1\x6d\x60\xc5\xd4\xf3\xda\x62\x38\xf9\xf6\x34\x52\x65\x48\x54\x17\xaa\x6e\xbb\x03\x03\x6e\xda\xed\x7a\xea\x08\x2b\x67\x18\x0f\x49\x4b\xc1\x14\x24\x1b\x98\xd0\x9b\x60\xee\x54\x7d\x11\x23\xd3\x37\xab\xfd\x90\x1f\x52\x75\x1b\x2c\x80\x19\x23\x51\x34\x61\x61\x41\xd6\x4a\xd0\xb4\x63\x31\xb6\xb1\xd2\x8e\x85\x7c\x41\x09\xe2\xeb\x9e\xf2\xb8\xda\xe3\x79\xc3\xa9\xe6\x88\xcf\x76\xec\x4d\x62\x83\xed\x91\x41\xd6\x6b\x4d\x75\xe7\xec\x21\x5b\x5d\x01\xcb\x16\x56\x6b\xc8\xa9\x33\xf7\x23\xf4\x61\xe8\xe0\x18\x68\x5a\x56\x14\x8c\x47\xfd\x74\xaa\x18\xe6\x7d\xf2\x95\xc2\xd5\x77\x43\x66\x34\xf1\x46\x74\x88\xfb\x45\x9b\xab\x8d\x58\x77\xf8\x55\x7d\xf4\xbf\xe2\xfa\x50\xaf\xcd\x3d\x30\xdd\x29\xbb\xff\xcc\xcc\x0f\x9f\x6b\x4c\xad\xc5\x42\x48\x9e\x32\x27\x9b\x3d\xce\xe8\xc8\x15\xfd\x49\x0f\x48\x07\x5b\xfb\x4d\xd0\xbe\x5c\xa5\x68\x7c\x75\x77\x67\x82\x85\xa4\x09\x96\xf5\x35\x5e\x5d\xde\x5a\x45\x82\x6f\x91\xf8\xd7\x8c\x8a\xf2\x72\xe3\xb3\x35\xf3\x66\x74\xf6\x7a\x25\xb7\x8c\xc3\x5c\x5d\x32\xcc\x44\x72\xc9\x90\x93\xc8\x11\x34\x99\xdc\x9b\xfe\x4b\x28\x40\x90\x59\x2d\x2c\x79\x7a\xe1\x42\x6e\x1b\xe6\xf9\xdb\x9c\x36\x4b\x11\xa8\x3f\xe3\xd8\x3a\x54\x7d\xcc\xd1\xc8\x9b\xa1\xcb\x56\x68\xcf\x2b\xf6\xf8\xbb\x2a\xa7\x61\x0b\xe6\x7c\xce\xf5\x3a\x9f\x8f\xef\x76\xb1\x36\xc3\xa7\xf5\xf4\xc7\x53\x5c\x69\x94\x9f\xdd\x85\x8f\xcf\x29\xde\xec\xfa\x71\xf2\x23\x19\xd8\x82\xaa\x59\xd0\xb3\x65\xe8\x62\xba\xb3\x05\x13\x65\xe7\xda\xc1\xe7\xe3\xdb\x21\x58\xb7\x4e\xc1\x16\x5a\x4c\x2e\xd4\x0a\x93\xd6\xb1\x93\x0b\xfa\x66\x09\xcd\x8c\xba\x15\xb1\xc7\x11\xf4\x72\x70\x4c\xc2\xa1\x22\x8a\xd1\xef\x17\x93\x63\x81\xc9\xd8\xd8\x87\xd8\x14\x2f\x63\x02\xc1\xce\x2d\xe4\xd1\x6e\xd6\x72\x61\xda\xbd\xeb\xf8\x1f\x63\xeb\xec\x47\xba\x20\x47\xe3\x01\x5b\xd0\x78\xc9\x50\x75\x2b\xd9\x07\x15\x00\xf8\xb5\x61\x68\xc9\x4f\xdd\x95\x4f\x05\xa4\xd5\xb5\xfb\xd8\x04\x16\x30\xdf\xd2\x48\x9c\x71\xa8\xbd\xe5\xdd\x61\x92\xfa\x91\x46\xb5\x36\x0d\xdb\x90\x0c\x2d\x55\xaf\x78\x1d\x05\xce\x02\x04\x19\x98\xee\xf0\xc2\xfb\xde\xda\x48\x12\xb0\x2c\x65\xa3\xf1\xa9\x8e\xe2\x2b\x2e\xa8\x1a\x90\xd3\xa9\xd2\x9b\x55\xca\xdc\xf5\xb9\xad\x2c\x65\x3d\x24\x27\xe6\x15\xef\x6d\xf2\xfb\xaf\xb2\x2a\x5f\x36\x8c\x65\xca\xf8\x5d\x61\xad\x94\xa2\x67\x86\xb9\x4c\x59\xc7\x61\x2f\x99\x3c\x23\x0c\x86\x56\x76\x2e\xe6\x9b\x79\x69\x4e\x74\x57\x55\x4a\x2a\xe4\x8c\xfc\x25\x4f\x15\x37\x02\x9e\x19\x00\xfd\x96\x6f\x6c\x4c\x69\xbf\x4d\x23\x25\xf4\x04\xdd\xc9\xd5\xd5\xdd\x5d\x7a\x2a\x96\xde\x0e\xfc\x85\xb5\x73\xcd\xe9\xef\x05\xfc\x72\xd1\xf1\x82\xdf\x25\x9e\x12\xbd\xdc\xbd\x30\xa9\x62\x63\x3b\x11\xb3\x88\xfc\xcd\x91\x59\x24\x5e\x1e\x9c\x48\x70\xbc\xa7\x33\x87\x2e\x53\xdc\x9e\x2a\x43\xa2\x0b\x49\xb5\x78\x0b\x68\x1a\x30\x21\xd1\x30\x34\x20\xe8\x41\x4c\x52\x25\xc0\xeb\x91\xf8\xeb\x7d\x17\x8d\xc9\x87\xdd\x44\x7c\x2c\x5a\x47\xf6\x33\xc5\x1f\x86\x96\xe9\x13\x77\x7e\xba\xa8\x79\x77\x6f\x30\x54\x6b\xb1\xb5\x0e\xf4\xe5\x4b\xd8\x82\x7f\x42\xf0\xd7\xaf\x79\xac\x92\x8a\x07\x46\xfb\xcf\x91\x1d\x0b\xf0\x8b\xd8\x34\xc6\x3e\x66\x70\x17\x60\x66\x53\x4a\x5e\xe1\xbe\x40\xe3\x4a\xde\xb3\x50\x30\x92\x16\xe9\xc2\xce\x89\xa5\x79\xfb\x03\x2e\x13\x4d\x73\xa4\xfc\xae\x78\x5a\x52\xd9\x33\x23\x6a\x8e\xb4\xe3\x98\x9a\x56\x20\x23\xaa\x46\xf6\x84\x5c\xd0\x57\x03\xff\x0c\x43\x2a\x9c\x44\xf9\x7d\x7f\x4e\x6a\x56\x34\xf0\x66\xc7\xd0\x44\xda\x83\xe8\xc4\xf6\xe2\x64\x01\xe9\x69\x44\x5a\x82\xf6\xaf\xa4\x58\xf6\x96\x07\xfa\x1b\xd0\x8c\x35\x48\x9a\xb6\xb4\xb7\x4e\xc2\xb3\xd1\xec\x94\x87\x2b\x60\x0b\x29\x8f\x9c\x54\x2b\xed\xb1\xa5\x2e\x74\xc1\xde\x98\x20\x69\x86\x8d\x26\xbf\xfe\xf5\xf7\x61\xec\xf2\xcf\x7f\x93\x46\x2f\x7f\xfd\x1d\xb7\x39\x58\x19\x29\x93\x61\x07\x5e\xba\xa1\x83\xcc\xb1\xd0\x81\xd7\x31\x1b\x5f\x33\x75\x05\x78\xd1\xd8\xe8\xb2\x3b\x63\x5d\x31\x05\x7d\x01\xe2\xd9\x58\x34\xb4\x3a\x96\x70\xb8\x2d\x80\x9c\x9f\x6e\xf9\x73\x7f\xaa\x1c\xb4\xb6\x60\x0b\x57\x91\x2e\xc2\x6b\x6e\xee\x7e\xb9\x9c\xdd\x61\x63\x76\x92\x31\x4f\x1a\x9e\x91\x0a\xcf\x92\x96\xcb\x23\x2e\xa7\x44\xc1\xcd\x73\x99\x4a\x65\xe6\x1f\x45\x94\x4c\x8d\xb4\x17\x53\xb3\xf0\xfe\xc3\x4c\x45\x73\xc2\x42\xb2\xaa\x75\xc1\x16\x20\xc5\x30\x73\x56\x8b\xa0\x3a\x33\x61\x72\xd4\x4b\x61\x99\xb5\xea\x52\x84\x6d\x9b\x1b\xb3\xa3\x09\xd4\xe6\x26\xfd\xa3\x95\x17\x37\x40\x8f\xa1\x2f\x57\x08\xaf\xea\xaa\xad\x0a\x1a\xef\xed\x82\xf9\x6e\xbd\x6a\x57\x37\xd0\x15\x0a\x23\xf4\x37\x98\xfc\x06\x63\x10\x52\xb9\x43\x2b\x77\x38\xf5\x1d\xc6\x50\x9c\x26\xaf\x61\xf4\xea\xeb\x8f\x62\xdc\x51\xde\xfb\x75\x43\xc4\xaa\xe2\x8e\xb7\x0d\x55\xce\x96\x44\x93\x04\x55\x46\x12\xc6\x6f\x2c\xb0\x8f\x32\xbc\xaa\x1f\xfd\xa2\x22\x53\x1e\x8e\xc3\x78\xa5\x8c\x3c\x9c\x17\x64\x99\x8f\xcf\x4b\x65\xca\x20\x70\x02\x43\xcb\xc8\x20\x78\x2f\xa6\x05\xa3\x6b\x77\x3d\x33\x53\x04\x89\xc1\x68\x29\x35\xc8\x40\x84\xdf\x83\x15\x10\x51\xc1\x11\xa2\x8c\x08\x8a\x5f\x19\xb2\xaa\xec\x8a\x6b\x51\x41\x48\xb4\x94\x88\x4a\x44\x0b\x7f\x1b\x73\x01\x39\x14\x4e\x62\xe5\xe4\x38\x95\x2e\x2c\x16\x26\x58\x08\xb6\x61\x66\xfb\x14\x0d\x23\x30\x5d\x86\x3d\xed\xb2\xf7\xe6\x2c\xf9\xad\x6c\x66\x73\x47\x29\xa4\x54\x55\x23\xb0\xcb\xde\xaf\x05\x37\x53\xcd\x16\x40\xd0\x54\x29\xeb\x20\x48\x58\xc0\x3e\xf5\x71\x3a\x80\x6c\x41\x34\x49\x97\xd3\x04\x8d\x54\xb4\x9f\x6c\x7a\x3f\x9c\xcd\x92\x84\xc0\x14\x81\x97\xaa\x11\x04\xf3\xd4\xd9\xa7\xe8\x99\x35\x8e\x20\x28\x45\x96\xd3\x04\xe7\x15\x75\x1b\xfc\x88\xc0\x58\x69\xbc\xa2\x02\x2d\xb3\x6b\x44\x10\x02\x41\x4a\x75\xc2\x08\x11\xac\x9d\x04\x73\xda\xdb\x1c\x35\x48\xaa\x5c\x37\x8f\x90\xbc\xaa\x2f\x80\x65\xf3\xc7\xb3\xe6\x39\xa2\x28\xba\x52\xae\x46\xa8\x48\xb8\x76\x97\x27\x84\xec\x60\x82\xa0\x30\x8c\xe1\xbe\x90\x94\x58\x9b\xb9\xd6\x5e\x36\xd8\x1e\xad\xb7\x07\xe8\x91\x1b\xe8\xaa\x59\x9b\x77\x9a\xe4\x88\xc3\xfb\x5c\x9b\x1d\xd4\x7a\x5c\xa3\x4a\x61\x28\x83\x63\xe4\x13\x31\xe0\xea\xe3\x51\xb7\x39\xeb\x50\xcd\x6a\xb7\xd6\x1b\x76\xdb\x8d\x3e\x3e\xa6\xd8\xc7\xd9\xc3\x34\x6e\xa1\x54\x21\xa8\x23\x84\x21\x66\xd5\xc1\x23\x43\x3c\xe2\x33\x86\x6d\xcd\x67\x23\x74\xda\xe9\xa3\xd3\x3e\x5e\x9d\x36\x5b\xd3\x21\x85\xb3\xd3\x41\xa7\xcf\xa1\xc3\xd6\x03\x3e\x1b\xb5\xfa\xed\x11\xd7\xe9\xb4\x8e\xaa\x21\x55\x08\xe6\x08\xa9\x8e\x06\x8f\xad\x76\x17\xad\xb5\xb1\x06\x37\xc4\xab\xf3\x6e\xa3\xc7\xd5\xbb\x8d\xfb\x29\x37\x98\xa2\xad\x47\xec\xa9\xd7\x18\xb7\xfa\xdc\xb4\xc6\xf6\x99\xf1\x8c\x1a\xd6\xa8\xfe\x1c\x6d\x5d\x9d\xba\x6d\xc3\x19\xc5\xe5\x54\x83\xbf\xd5\xed\xb0\x4b\xf5\xbb\x05\xb2\xb7\x34\xdc\x40\xd8\x0d\x64\x9b\x1b\x50\xc0\x39\x8e\x37\x2b\x94\x19\xde\x95\x59\x20\xbf\x88\xa6\x91\xa4\xe4\x06\x42\x6e\xbc\x7d\x4e\xf9\x8a\x26\x2d\x90\x9f\xda\x08\x82\x45\xf2\x50\x1b\x40\xd0\x4a\x05\xa7\x61\x82\xae\x10\x2e\x2a\xc7\x99\xfe\xf9\xec\x75\xe3\x9f\xef\xa0\xcf\x34\x4d\x7f\xa7\x9d\x17\x0c\x7f\xbe\x81\x3e\x1f\xb6\x6d\x38\x0f\x75\xc1\x56\xdf\xc0\xe7\xff\xa6\xb9\x6a\x5c\x1e\x1a\x93\x87\xba\x7f\xbf\x4e\x5e\x5c\x3f\xcc\x55\xd1\x49\xca\x8b\x33\xa8\x10\x15\x9a\xc6\x2a\x64\x85\x76\x0b\xc3\x2e\x5e\xcb\x76\x06\xd1\xfa\x82\x17\x05\x4d\xd0\x25\x17\x1c\x02\xc3\xf0\x77\xd8\x7b\x15\x87\x88\x45\x25\xa0\xc7\x35\x10\xe1\x7b\x09\x93\x84\xe5\x39\x16\xf1\x54\x7a\x07\xea\x62\xe9\x08\x44\x6e\xa0\xcf\x9e\x47\xf1\x2f\x60\xe7\xc8\x38\xb5\x9b\x2c\xe5\x18\x2e\x2a\x1c\xa5\x7c\x3f\xfc\x55\x76\xf6\x25\xfc\x72\x3b\xc7\x34\x2a\x66\xe7\x13\x23\x85\x87\x2a\xa7\x1f\x49\xda\x60\x72\x6a\x3f\x12\x6c\x32\x09\x47\x20\x54\xae\x10\x12\x8e\x93\x98\x88\x0a\x24\x8d\xa2\x14\xa0\x64\x0a\x43\x28\x45\x21\x08\x94\x12\x01\x29\x23\x18\x41\x55\x08\x80\x2b\xb0\x28\x28\x14\x49\x50\x34\xc0\x15\x54\x91\x65\x0c\x11\x05\xc2\x19\x31\xc0\x94\x24\xe0\x40\x12\x51\xbc\x22\x28\xa8\x82\x91\xb4\x84\x0a\x98\x50\xa1\x29\x8c\x04\x38\x09\x04\x14\x87\x31\x42\x56\x70\x19\x88\x88\x42\xe3\xb4\x2c\x61\x08\x26\xd3\x84\x42\x0a\x94\x44\x48\x5e\xc7\x8a\xc4\xc6\x1e\xe4\x1d\x46\xdc\xa1\x48\x7c\x48\xe2\x7d\x8d\x7e\xa7\x2b\x14\x8c\x50\xb9\x4f\xfd\x8e\x04\xa9\x54\x2a\x37\x10\x42\x3a\xf5\x79\xf4\xba\x81\x30\xe7\x1f\xe2\xff\x0b\xbe\x44\xf6\x6f\x1c\x68\x0c\xc3\x30\xb5\x77\xa5\x33\xb1\xac\x17\xf5\xad\xfb\x21\x48\x9d\xe7\xd7\x7b\x09\x25\x9a\xa4\x3a\xac\xcf\x95\x09\xb0\x14\xed\x1e\xab\xb3\xb4\xa6\x08\xfa\x56\x12\x09\x06\xc3\x5f\xdf\x5a\x95\xeb\xe6\xee\x6d\x53\x95\xb5\xb1\xd4\x03\xd6\xe2\xde\x5c\x73\xa3\x77\x4b\xa4\x5f\xe9\x49\x8f\x41\x71\x49\x7d\x85\x1d\xd6\xcc\x7c\xf0\xd0\x1b\x0f\x99\xfd\x4b\xc3\x14\xee\x4d\x79\x92\x1f\xab\xdb\x41\xb3\x56\x21\x9f\x5f\x31\xb9\x4d\x74\x3a\xd3\xed\x93\x64\xac\x51\x71\xfe\x71\xdb\x69\x3d\x52\xfd\xed\xed\xa8\x2f\xbd\x32\xab\xfe\xc8\x68\xaf\x7a\xe8\xfd\x53\x95\x78\x7d\x9d\x8e\x09\xee\xa5\xf2\x8c\x74\xd0\xeb\xe5\x04\xab\x48\x7a\xbf\x3b\xe7\xc0\x06\x7b\x77\x38\xf7\x38\xbc\x2b\x7c\xac\xd1\x90\x30\x86\xb5\x98\x84\xd7\x13\x33\x47\xf0\x21\xc3\xd4\xe1\xfb\xa4\xc7\xff\xd3\x2f\xcf\xa9\xe0\x94\x76\x1f\x6f\x0a\xe8\x65\xdc\xf8\x8a\xc4\x64\xba\xa2\x10\x18\x09\x00\x59\x91\x11\x11\xa5\x44\x42\xac\xd0\x0a\x8a\x09\x0a\x81\x21\x88\x48\x11\x24\x2d\xa0\xb8\x22\x28\x08\x0e\x63\x82\x0c\x8b\x04\x2a\x92\x18\x26\xc2\x94\x08\x68\xfa\x6a\x1f\x5d\x8f\xbd\x1a\x4e\x76\x76\xec\x3b\x0c\x63\x14\x9d\xd2\x14\x42\x4f\xbd\x00\x82\x13\x34\x9a\xd1\x12\xd0\x82\x2d\x01\x1d\x3c\x3d\x23\xdc\x86\x30\x60\xf1\x9e\x9a\xe1\xfa\xae\xff\x36\xdd\x36\xb1\x87\xb5\xf1\x72\xfd\xd6\x60\xfa\x76\x0d\xe9\xa0\x3d\xaa\x4a\x91\x4f\x53\xd0\x98\x2d\xb1\xeb\xee\x23\xf6\x38\x69\xbd\x2c\x45\xd2\xbe\x9e\xab\x2f\x13\xbc\xc2\x74\x1e\xa6\xe6\xf2\xba\xcd\x69\x58\xef\x91\xe6\x38\x7b\xea\xd6\x9c\xdb\x12\xdc\x77\xed\xfd\x3f\xc6\x75\x56\xeb\xf0\xf9\x9d\x19\x0c\x5f\xbc\x9a\x7e\x9f\x71\x4f\x4a\x9b\x98\xed\x1a\xb3\x2d\xba\xa2\x26\x06\x37\xac\x2d\x1f\x9f\x88\x8f\xd7\x86\xf9\x6e\x2c\xd0\x67\xf8\x65\xfe\x3a\xe4\xba\x8c\x69\x73\xe8\xa4\x8f\x76\x1b\x0c\x3d\xd1\x9b\x6f\xf6\x78\xfe\xf1\x30\x1f\x34\x2d\xb6\xc3\x3d\x7f\x90\x1d\xd0\x5b\xde\xf7\x19\x4d\x98\xcf\x64\xfc\xcd\x6d\x29\xed\x84\x96\x52\x6f\x27\x79\xdb\xff\xf3\x96\x82\x16\x6f\x29\xc8\x65\xbc\xdc\x5d\xf8\x70\x86\x0b\x4e\x78\x45\x68\x0a\xfe\x06\x23\xdf\x60\x04\x82\xe1\x3b\xf7\x2f\xd5\x9b\x11\x0a\x21\x33\x1f\x3a\x11\x03\x47\x69\x9c\x26\x29\x94\x26\x33\x5c\x3d\xd9\xd1\x3d\x44\xff\x76\x9d\xa4\xbf\xaa\xf3\x8e\x8a\xef\x6e\x77\xe3\x4e\x95\xaa\xeb\x75\xba\x85\xc2\xdb\xe7\xea\xb5\x05\x2f\x6c\xeb\xbd\xfd\xfe\x81\xcc\xe5\xf1\xec\x51\xa8\xde\x0b\x8d\x85\x43\xcf\x26\xf8\x70\xf2\x2b\xf0\x61\x86\xa9\xbe\xfc\x06\x45\x2e\xfa\xba\xf2\x7c\x29\x7f\x3c\x55\x60\x67\xe1\xa9\xc3\xab\x94\x05\xa3\xd4\xac\x2d\xa5\xc1\xe5\xb0\x39\x4a\xc6\x4e\x63\x13\x4b\x60\xb0\xd3\xb8\xe0\xb1\x44\xeb\x34\x2e\x44\x6c\xd0\x7d\x1a\x17\x32\x96\x2a\x5c\x66\xa7\xe5\x45\xa6\x11\xb2\x97\x01\x6f\x20\xb2\xe8\xf4\x49\xca\x7e\xc3\xb3\x3d\x36\xe4\xa5\x11\x17\xdd\x7f\xc0\xdd\xd1\x54\xc5\x4d\x85\x54\xdd\x36\xce\xca\x7b\x9c\x2c\xcd\x9b\x42\x3a\x33\x4d\xfd\x05\x73\x81\x09\x26\x09\x7b\xf8\xfe\x7d\x25\x94\xee\x2a\x1b\x5d\x06\xa6\xab\xcb\x89\xf3\x79\x97\x32\xc9\x0d\x54\x24\xf7\x3e\x73\xe2\xb1\x8c\xd9\xfc\xc6\xb8\x7f\x8f\xff\x52\xb3\x9d\xe1\x90\xbf\xde\x6c\x39\x4d\x3b\x61\xdf\xeb\x19\x0b\xdf\xa5\xb6\x00\x9e\xda\x7d\xa4\x6e\x1d\x48\x0c\x79\x78\x7a\x7c\xc8\x65\x84\xc6\x18\xa5\x05\xbd\x5c\x46\x58\xb4\x09\xa7\x85\x9a\x5c\x3e\x78\xac\x2b\x38\x95\x4f\xac\x6d\x9c\x8c\x87\x8c\xf2\x49\x0f\x7e\x65\x77\x0b\x5e\x22\xfc\xe5\x6d\x0e\x29\x11\x00\x53\xb7\x06\x5e\xc0\x87\xc3\x0b\xee\x18\x2e\x02\x1a\xa7\x48\x54\x96\x71\x91\x52\xe8\x8a\x42\xe2\xb8\x0c\x50\x98\x42\x29\x4c\x41\x04\x04\xa3\x15\x02\x13\x80\x22\xa1\x02\x02\x80\x48\x22\x95\x0a\x89\x20\x15\x49\xa0\x2a\x28\xa5\x5c\xed\x27\xad\x4f\x8e\x4f\xa1\x7c\x1d\x0b\x12\x95\xf4\xc9\x2e\x14\xc1\x32\xa6\xc2\xbc\xa7\x91\x16\xe4\x65\x38\x1d\xf2\x19\xa8\xd8\xf3\xca\x68\x57\x26\x4d\xad\x7e\x0b\x16\x12\x46\x0d\xe6\x76\xab\xd3\xf9\x98\x3d\x54\xde\x1f\xd4\xa7\xaa\x50\xdb\x10\x5d\xa2\xc7\xb8\x19\x02\x13\x24\xe0\xd5\xd8\x00\x3c\xf4\xd9\x4d\x3b\x98\x3e\x5a\xbb\x65\xfa\x38\xf1\x58\xad\x63\x76\xeb\xa1\xd1\x47\x46\x18\x03\xf7\xc0\xcb\xa0\x72\x3f\x22\x75\x0e\x61\x68\x30\x53\xe5\x5d\xdb\xcf\xfa\xdd\x97\x40\xbd\xbc\xbd\xbc\xbb\xec\x7a\xb7\xf5\x4d\x83\x46\x2d\x7b\x68\xc0\xcf\x43\xc5\x36\xd9\xcd\xdb\x68\x64\xa2\x8d\x47\x5b\xa8\x2c\x6e\xeb\xf4\x4c\x5c\xcd\xa6\xf7\x1f\xea\xb4\xf2\x4c\x3d\xdd\x8e\x3b\x68\x73\x79\x7b\x6b\x2e\x00\xfc\x0c\xcf\x87\x95\xdd\x8b\x88\xd5\x2b\x5d\x9d\xfe\x50\xd6\xe6\xa0\x43\x4d\xae\xa7\xbb\x0f\x66\xf8\xf3\xe7\x55\x38\xbb\x6b\x86\xb2\xa2\xc3\xdb\x50\x86\x7f\x3f\xad\x5d\xf7\x25\xef\x7d\xa8\xec\x70\x4f\x56\x77\x3f\xbf\x1f\x4a\x98\xaf\x1c\xd9\x05\x7d\x61\xf1\xbc\xed\x09\xd3\x01\x4d\x56\x3f\x14\x8b\x06\xb0\x64\x98\xdc\xd3\xfc\xa3\x3a\xbb\x7f\x69\x18\x9d\x40\x4f\xa6\xf6\xc0\xbc\x3d\xeb\x71\xb1\x47\x2f\x36\xed\x41\xf5\xc2\xf2\xe3\xf5\x5a\x48\xbe\x57\xc8\x75\x91\x5a\xe8\x19\xf5\xd8\xad\x30\xd4\xb3\xb6\x60\x07\x00\x96\xa7\x53\xea\xa1\x25\xd5\x87\x5b\x72\x78\xfb\xae\xb5\x5e\x25\x6c\x5a\x47\x08\xe1\x1e\x6b\xab\x88\x6b\x4f\xc7\xd6\x7e\x25\x2c\x32\x4c\x91\x9a\xc8\xba\x18\xeb\xa7\xcb\x1f\x1b\x8d\x0a\x90\x4e\x97\xdf\x8b\xc9\xaf\x6d\x0c\xcc\xb0\x71\xe2\xb5\x36\x60\xb7\xeb\xe1\x2d\x66\xb4\xb8\xeb\x0f\x84\x1a\xed\x54\x0b\xd1\x94\x5e\xe3\x71\x35\x9c\x2d\xcc\xcd\xf8\x7a\xc2\x30\x51\x5f\x5b\x30\xe9\x36\x4f\x95\x1f\xf2\x9f\x12\xed\x7a\xef\xd3\x0b\x26\xa1\x0e\x4f\xd1\xe1\x92\x75\x78\xae\x0d\xcb\xc8\xf7\xda\xf7\x3f\xbf\xaa\xe3\x71\x07\x90\xee\x66\xe0\x60\xf6\xcb\xfb\xef\x04\x3e\xb7\x83\xcf\x8f\xfd\xa1\x08\x25\xa2\x02\x8a\x52\x12\x46\x4b\x24\x2e\xe0\xb8\x22\x51\x82\x28\xe3\x12\x4d\x56\x10\x1a\x27\x48\x05\xc6\x68\x9a\x86\x49\x19\x41\x25\x9c\x22\x65\x0a\x16\x71\x18\x15\x15\x59\x44\x69\x52\x26\x05\xcc\x9b\xf4\x43\xce\x19\xd3\x7a\xab\x36\xe9\x81\xc9\x9d\x7a\xa6\xb1\xf4\xd9\x3a\xe7\xe9\x61\x62\xda\x1b\x49\x79\xbe\xd8\xec\x56\x5a\xc3\xb7\xe1\x8b\xd8\x41\x5b\x0c\x36\x7b\x78\x1e\x99\x9d\xd5\xf3\x1c\x86\x95\x66\xc5\xea\xb6\xa9\x15\xcc\x8e\xde\xef\x67\xb7\xcc\x1c\x63\xf6\x71\xc9\x7d\x65\xc4\x25\xef\x75\x42\xff\x18\x9e\x0d\xab\x3e\xbc\xbd\x37\x68\xe7\x11\x5b\xb7\xb1\xce\xfb\x4a\x18\x6c\x06\x72\x63\x3c\xdd\xca\x4c\x03\x88\x64\x7f\x08\xec\xdd\xb0\xd3\x9e\x09\x1f\x9a\x38\xee\xf5\x96\xab\x56\x87\xeb\xd6\x71\xeb\x75\xc9\xbe\x4e\x9f\xa4\xe1\x00\xd6\xae\xe7\xb7\xfd\xf5\xb5\x61\xcd\x56\x1c\x79\xdd\x98\x3e\x8a\xd6\x07\x45\x0c\xd1\xe7\x26\xfe\xd6\xeb\x15\x88\x4f\x11\xa7\x8d\xc6\xa4\x90\xce\xde\x5a\x0f\x13\x6d\xcf\x55\xf5\xb6\x0a\x77\xe1\xfb\xe6\xce\x5e\xbe\x73\x88\xf6\x08\x0b\xbb\xb5\x81\xd0\x5c\x6b\xfb\xd6\xad\xed\xfa\x84\x5d\x65\xa5\x9a\xa7\x23\xb6\xb0\xcd\xbe\xfe\x78\x5b\xc1\x0f\xe5\x53\x62\x54\x76\x7b\x3e\x43\x7e\x63\x32\xab\x5a\x67\xc8\x67\x98\x7f\xaf\x3f\x0b\x8d\x17\x0e\x7d\x6b\xf5\x74\x5b\xf4\xf5\xa7\x4c\x35\xf3\x6c\x71\x6e\x5d\x38\xbe\x70\x2d\xc5\xf8\x95\xb2\xc5\x3f\x94\xbc\xb3\xee\x57\xcf\xd4\x33\x36\x9a\x6a\xbd\xf9\xb0\x3a\x5f\x5d\x3f\xbf\xb4\x4c\xe9\xa5\xa6\x36\x56\x16\x31\x83\x9f\xeb\xed\xa7\xe5\xee\x79\xfc\x7e\xdd\xed\x18\xa3\x8e\xd6\x9c\xb3\x75\xfa\x5e\xd1\x6e\x3f\x5e\x95\xd7\x6e\x63\xfd\x0c\xde\x96\x0f\xcd\x26\xd5\xbb\xbe\x9e\x72\xc6\x76\xd3\xfd\xa8\x33\x97\xee\x5b\x31\x52\x04\x14\xac\x88\x14\x55\x41\x15\xba\x02\x23\x92\x2c\x01\x59\x42\x50\x98\x04\x28\xa2\xd0\x34\x4a\x63\x12\x4d\x57\x48\x58\x40\x08\x80\xe3\x88\x82\x53\x38\x4d\xe1\x94\x00\x0b\x18\x25\x88\x87\x45\xbc\x33\xfa\x56\x34\xb7\x6f\xc5\x11\x84\x4e\xef\x5b\xfd\xa7\xe1\xac\xf0\xdc\xbe\xb5\x16\xab\xd4\xa3\xbe\xb5\xe4\x98\x3f\xa3\x6f\x65\xb0\xed\x4c\xdc\x0e\xfa\xa2\xfe\xd4\x53\xab\xcd\x46\xa7\x7b\x3f\xdc\x28\xf7\xdd\xc5\x66\x62\xb5\xee\xb7\x3b\xc6\x1a\x0c\x88\x06\xfd\xf4\x4c\x90\x88\x30\xd7\xdf\xb8\xdb\xd6\xc3\xe8\x5e\x6c\x58\xac\xa4\xda\x4d\x71\xa1\xd2\xf2\xec\x41\xee\x8c\x1e\xdf\x56\x0f\xb3\x9a\xfa\xd1\x96\x57\xdd\x76\xfd\x7f\xab\x6f\x3d\xb7\x6f\x3b\xb3\x3d\xbf\x52\xb7\x93\xba\x74\xc1\xbe\xf5\x77\x8e\xf7\x13\xfb\xd6\x7f\xa9\x6f\x63\x2e\xd4\xb7\x9e\x1a\x67\xfd\xbe\x95\xab\x3c\xac\x2a\x93\x8f\x15\x81\x4e\xda\x8b\xd1\x72\xac\xee\xa6\x5d\x7d\x37\xc6\xbb\x2f\x54\x75\x27\x49\x8b\x6e\xfd\xe3\x7a\xa4\xcc\x1e\xaf\x81\x3d\xd3\x08\xea\x43\xd9\x22\xd3\xf1\x6c\x2b\x56\x5b\x6d\x73\xb4\xc2\xdb\x6f\xf3\x07\x6d\x3e\x7e\x99\x75\x09\xed\x61\x61\x58\xbb\xd6\x93\xba\x63\xde\x8b\xf5\xad\xa9\xc7\xbe\x1d\x9f\x8a\xbe\x3f\x81\x35\xf8\x01\x74\xd9\x1f\x2e\x85\x38\x7a\x27\x34\xd6\xeb\xe1\x9f\x53\xc7\x05\x42\x83\x51\xbb\xc7\x8c\x1e\xa1\x0e\xfb\x08\x7d\x51\xe5\xbc\x93\xd9\x92\x4f\x89\x3f\x1b\x75\x8c\x6b\x12\xf2\x24\xc1\xb9\xe8\x63\x3f\xb9\x3b\xed\x94\xfd\xb3\xb5\x8b\x8a\x4d\x52\xee\x24\x60\xd0\x94\x6b\x0f\xa7\x2c\xf4\xe5\x40\x7e\x13\x3a\x82\xec\x26\x72\x60\x58\x49\xd3\x5c\xa6\x5a\x4b\x2b\x5e\xaa\x52\x53\x56\x3c\x73\x96\x15\x2f\xab\x59\xb2\x90\x2c\x4d\x33\x60\x15\xd6\x3c\x75\xc2\x3b\x77\x4e\xf9\xb2\xda\xa7\x89\xc9\xd2\x3f\x13\x5a\xae\x05\xa2\xb7\x9c\xf8\x8a\xb8\x37\xa2\x14\xfb\xf5\xbb\x77\x79\x4a\x84\x0b\xd4\xe7\xe2\x8d\x61\x3a\x6e\x73\x4d\x48\xb4\x4d\x00\xc2\xad\x2b\x1d\x8d\x7f\x41\xcb\xd9\x78\xfc\xc3\xfd\x0a\x21\x4a\x69\xd7\xa1\xcb\x65\x4e\x85\x73\x60\x11\x46\x12\xc9\x06\xa2\x78\x3c\xe2\x9b\xa3\xdf\xe2\x27\x81\x73\xaf\xc7\x39\x03\x99\x7b\x24\x41\x21\x58\xf1\x83\x0c\x92\xd0\xf8\x77\xfa\x9c\x81\xc7\xe3\x50\x0c\x51\xec\x94\x84\x9b\xe3\x03\x11\x12\x9b\x7c\xf8\x92\xa2\xf2\x48\xfd\x28\xe1\x01\x8e\xb1\x0b\xc3\x0e\x36\x7b\x47\x10\x27\x9d\x0d\x74\x13\x9c\x03\x94\x06\xf6\xf0\xeb\xeb\x33\x61\xaa\x72\x61\x80\x87\x83\x50\x6e\x12\x0f\x34\xca\x01\x1d\xdc\x2b\x75\x09\xdc\x3e\xaf\x30\xf4\x94\x50\x75\x92\x26\xc9\x0a\x04\x57\x68\x5d\x42\x01\x9f\x57\x8a\x4f\x9f\xa8\x42\xf4\x54\x9b\x63\x25\x42\x17\x86\x9d\xda\x1a\x43\x3c\x4e\x35\x7e\xb6\xa1\x63\x37\xa0\x9d\x6b\xeb\x28\xbb\x30\xe4\x60\x5b\x69\x04\x63\x32\xa2\xe3\x5b\xdc\xce\x87\x75\xc4\xb3\x58\xf7\x96\x04\x30\x74\x1f\xdd\xc9\xd5\x7a\xe0\x71\xba\x4b\xe6\xb9\x5f\xd2\x4d\x7b\xa7\x03\x3e\x66\x16\x43\x2e\x83\x18\xce\xd8\x19\x67\xd9\x00\xbd\xab\x03\x2f\x02\xcf\x65\x55\x08\x5c\xf0\x0b\xe5\x54\x68\xf1\xab\x10\xcf\xc5\x17\xe3\x97\x07\xf2\xf8\xf0\xb6\x5c\xa4\x97\xb1\x63\x84\x5b\x51\x94\xb9\xd6\xbc\x0c\xb6\x42\x98\xb2\xb1\xc4\xee\xdc\x3c\x0b\x51\x94\x57\xe1\x1a\x0d\x8e\x87\x4b\xc4\x77\x74\x8d\xe8\x59\x08\xe3\xdc\x8a\xb5\x5b\x1f\xe0\xcd\xd1\x89\x76\x37\x47\xa7\x22\xa6\x28\x71\x81\x7e\xdb\xe7\x93\x87\xb8\xe4\xe8\x28\x7e\xfb\xeb\x59\xd6\x2d\x61\xd8\x5c\xbb\xe5\x5f\x6b\x7b\xa6\x41\x73\x05\x44\xf2\xb4\xe0\x07\xec\xd1\xcc\xc8\x23\x2c\x81\xfd\x7c\x3f\xc8\xe2\x9d\x8f\x38\xa1\x95\x65\x5f\x5a\x7c\xaa\x3f\x64\x72\xcd\x1d\xf6\x3b\x44\x39\x40\x13\x6f\x67\xbe\x0c\xda\x24\xd6\xb9\xc3\xb7\xa2\x9e\x1c\xbd\x8e\xfa\xa2\xce\x10\x61\x7d\xca\x78\xb3\xf8\xfd\xdb\x17\x37\xf4\xd1\xc9\xe3\xb9\xf0\x63\x05\x8a\x2b\x13\xbe\x8e\xfc\x57\xd9\x3f\x7c\xd8\x7c\x9e\x26\x21\xda\xe2\x4a\x24\x5e\xcf\xfe\xab\xb4\x49\x3c\x43\x3f\x4f\xad\xa4\x42\xc5\xf5\xdb\xdf\x5e\xff\xab\x74\xda\x1f\x28\x99\xa7\x47\xea\x6c\x57\xce\xad\xfd\x17\x05\x1e\xe7\x9e\x98\x00\x97\x6d\xe0\x51\xa6\xd1\x14\xea\x42\x2d\x3c\x4b\x44\x11\x1d\x72\xf2\xba\x4c\x61\x97\x0b\x5f\xc7\x8c\x0b\x61\xcf\x0f\x62\xe1\x64\xfb\x57\xb8\xcd\x31\xff\x93\x53\x7d\xef\x1c\xab\x20\x90\x07\x33\x8c\xbc\x68\x18\x2f\x27\x5b\x39\x83\x67\xee\x10\xe1\xcb\x97\xe0\x90\xf6\x6f\x7f\xfe\x09\x5d\x59\x86\x26\x87\x56\xd3\xae\xee\xee\x6c\xb0\xb5\xbf\x7e\xbd\x81\xd2\x09\x25\x43\x2e\x46\xe8\xcd\xc5\xa7\x93\x8a\xc6\x66\xb1\xb4\x0b\x89\x8f\x90\x66\x03\x88\x90\xc6\x20\x7c\x85\x66\x2d\x76\xc4\x7a\x4e\x06\xfd\x84\x30\xac\xf0\x42\xb4\x2a\xf3\x4a\x68\x99\xa8\xd1\xf9\x3d\xcb\xd1\xbe\x58\xa8\xd1\x1f\xb1\xed\x26\xb7\x5f\x02\x82\x46\x6c\x83\x1d\xb1\x5c\x8d\x8d\x5f\x93\xee\x3e\xed\x73\xd0\x74\x50\x77\x5c\x66\xc4\x7a\x37\x13\x3a\x5f\xd5\xd9\x2e\x3b\x61\xa1\x1a\x33\xae\x31\x75\x36\xfb\x34\xfd\xd8\x47\x3e\x36\x15\x73\x39\x63\x44\xe5\xe4\x2c\x92\xa5\x21\x89\xda\x27\x3e\x6d\x94\x68\x2c\x7f\xa0\x9f\xb3\xa2\x98\x6a\x09\x3f\x95\xfd\xd7\xed\x10\xc6\x91\x64\x85\x60\x96\x20\xdb\x61\xca\x59\xe0\x78\x52\xe9\x5f\x34\x43\x0a\x98\xa8\x2d\x12\xa6\xc1\x2e\xeb\x14\xf1\x29\x8e\xff\x05\x83\xa4\xbb\xc6\xd1\x1c\x52\x11\xef\x80\x04\x59\x06\x32\xb4\x12\xf4\x8d\xa0\x69\xbb\x08\xd2\xc4\xd8\xe8\xc0\x0c\x0c\xbe\xda\x6c\x81\x0c\xbd\x09\xa6\xb4\x14\xcc\x2f\x24\xfd\xd5\xdf\x11\xe4\xd0\x28\xe0\xd0\x5a\x93\xe9\x7e\x24\x0a\x0b\x8d\x20\x1c\x36\xd1\xab\x46\x4a\x71\x0a\x42\xa5\x8b\xd8\x9b\x9d\x48\x2d\xef\x3b\xc5\xc0\xb0\xec\x85\x09\xc6\xc3\x2e\x24\x0b\xb6\xe0\x34\x36\x48\xde\xac\xd6\x90\x64\xac\xd6\x1a\xb0\x81\x5b\x9b\xff\x17\x00\x00\xff\xff\xa6\x6a\x02\x7e\x2b\x8f\x00\x00") func account_mergeHorizonSqlBytes() ([]byte, error) { return bindataRead( @@ -166,407 +128,7 @@ func account_mergeHorizonSql() (*asset, error) { } info := bindataFileInfo{name: "account_merge-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6a, 0x42, 0x81, 0x26, 0x5d, 0x26, 0xa6, 0x1d, 0xfe, 0x58, 0xa3, 0x33, 0xdf, 0x89, 0xc, 0x51, 0x78, 0x86, 0xa6, 0x67, 0x86, 0x3b, 0x81, 0x5d, 0x50, 0x17, 0x98, 0x2d, 0x50, 0x38, 0x62, 0xdf}} - return a, nil -} - -var _allow_trustCoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x67\x8f\xe3\x38\xd6\x36\xfc\x7d\x7e\x85\x31\x5f\x7a\x16\xee\x59\x8b\x0a\xa4\x34\xf3\xce\x0d\xc8\x39\xc8\x39\xfb\xc5\x83\x06\x49\x91\xb2\x6c\x25\x2b\x38\x3d\xb8\xff\xfb\x03\x87\x2a\x87\x72\x55\xb9\xaa\xdc\xbb\x03\xec\x0a\xe8\x6a\xdb\x3a\x3a\xe7\xf0\xe2\x75\x0e\x93\x28\xfd\xfe\xfb\x2f\xbf\xff\x9e\x6a\xf9\x51\x6c\x85\xac\xdb\x36\x52\x26\x8e\x31\xc1\x11\x4b\x99\x89\x1b\xfc\xf2\xfb\xef\xbf\xec\xce\xe7\x13\x37\x60\x66\x8a\x87\xbe\x7b\x12\x58\xb2\x30\xb2\x7d\x2f\xa5\xfd\x13\xfe\x13\x9c\x49\x91\x4d\x2a\xb0\x7e\xec\x2e\xbf\x12\xf9\xa5\x5b\xe8\xa5\xa2\x18\xc7\xcc\x65\x5e\xfc\x23\xb6\x5d\xe6\x27\x71\xea\xaf\x94\xf0\xe7\xfe\x94\xe3\xd3\xf9\xcb\x5f\x6d\xd3\x61\x3f\x6c\xef\x47\x1c\x62\x2f\xc2\x34\xb6\x7d\xef\x47\xc4\xa2\x9d\xde\x97\xc2\xd4\xb1\x77\xaa\x99\x47\x7d\xd3\xf6\xac\xd4\x5f\xa9\x6f\xfd\x5e\x51\xfd\xf6\xe7\x93\x6d\xcf\xc4\xa1\xf9\x83\xfa\x1e\xf7\x43\xd7\xf6\xac\x1f\x51\x1c\xda\x9e\x15\xa5\xfe\x4a\xf9\xde\x51\xc7\x94\xd1\xf9\x0f\x9e\x78\x07\x5b\xc4\x37\x6d\xb6\x3b\xcf\xb1\x13\xb1\x0b\x33\xae\xed\xfd\x70\x59\x14\x61\x6b\x2f\xb0\xc2\xa1\x67\x7b\xd6\x41\x24\xf4\x57\x3f\x22\x46\x93\xd0\x8e\x37\x3b\xe5\x9c\xff\x79\x04\x80\xe1\x90\x4e\x7f\x04\x38\x9e\xa6\xfe\x4a\x05\x09\x71\x6c\xfa\x7d\x87\x18\xc5\x31\x76\x7c\xeb\xcf\x5f\x7e\xc9\x77\x9a\xad\x54\xa5\x91\x2f\x8c\x52\x95\x62\xaa\x30\xaa\x74\x7b\xdd\xa3\xe4\x3f\x93\xc0\x0a\xb1\xc9\xa6\x76\x14\x93\x4d\xc4\x16\x7f\xbe\x29\x1d\xd1\x60\x91\xf8\x61\xe2\x46\xf7\x09\x33\x6f\x79\x8f\xa4\xc3\x4c\x8b\x85\xf7\x48\xee\xfc\xe4\x8c\xdd\x29\x79\x87\x18\x61\x51\xec\x73\xce\x42\xdb\x33\xd9\xfa\x6d\x59\x4c\xa9\x9f\x78\x31\xc1\x0e\xf6\x28\x8b\xfe\xfc\x45\x37\x7a\x85\x4e\xaa\xa7\x67\x8d\xc2\x99\x74\xb3\x61\x8c\x6f\xc0\xeb\x87\x9b\xd4\x5e\x7b\xae\xd9\xe8\xf6\x3a\x7a\xa5\xd1\x3b\xbb\xe8\x52\xf0\x47\x30\x67\x9b\x7b\xf4\xc7\xeb\xf7\x55\x3f\xcb\x7c\x40\x2b\x67\x77\xf8\x7c\x2e\x76\xbf\xee\x30\x89\x62\xc7\xf6\x58\xf4\x96\xe6\x67\xa1\xbb\xf5\xee\xbc\x60\xfb\x6c\xf0\x86\xde\x93\xd0\xfd\x7a\x9f\x29\xff\x96\xde\x67\xa1\xbb\xf5\x1e\xe4\x6d\x8f\xfb\x6f\xe8\x3d\x09\xdd\xad\x37\x48\x48\x94\x90\x37\x74\x1e\x04\x3e\xa2\xcf\xb1\xa3\xe9\x22\x61\xc9\x5b\xc8\x9e\x8b\xdd\xaf\x9b\xb1\xf0\x2d\x58\xf7\xe7\xef\xd6\xb6\x0f\xe3\xb7\xd4\x1d\x04\xee\xd6\x77\xc8\x4a\x53\x86\xcd\xb7\xd5\x5e\xc8\xfd\x64\xed\xc7\x4c\xc9\x16\x3f\xee\x34\x43\xb0\xf7\x86\x72\x82\xbd\xbb\x1d\x3e\x66\xbf\xb7\x7c\x7d\x12\xf9\xa8\xce\x5d\x1f\xe0\x7d\xb5\x3b\xa9\xa3\xe6\xbd\xec\xb5\xe2\x9b\x29\xf7\x6d\xd9\xe7\xd4\xf8\x9e\xd8\x29\xd1\xbd\x23\xf9\x9c\xb8\xde\x96\x3b\x25\xa2\x77\xe4\x9e\x13\xcb\xbb\x72\x77\xf9\x77\x4a\x28\x6f\xcb\x1d\x92\xc4\xbb\x32\xcf\x21\xff\x8e\xe4\x2e\x8e\xdf\x16\x39\xc4\xe6\xdb\x32\x17\xa1\xf0\xb6\x28\xc1\xde\xdb\x02\x4f\x54\xbd\x4b\x6a\xc7\xbc\xa3\x60\x61\xd4\x2b\x34\xba\x95\x66\xe3\x5c\xd8\x09\xac\x68\xe1\x1c\x25\xba\xb9\x72\xa1\xae\xbf\xd0\xf5\xe7\x2f\x87\xbe\x71\x03\xbb\xec\x8f\xa7\xdf\x52\xbd\x4d\xc0\xfe\x38\x5e\xf2\x67\xaa\x4b\xa7\xcc\xc5\x7f\xa4\x7e\xff\x33\xd5\x5c\x79\x2c\xfc\x23\xf5\xfb\xbe\xcb\x9c\xeb\x14\xf4\x5e\xe1\x49\xf3\x93\xbe\x5f\x2e\x34\x5e\x9e\x3c\x2a\xce\x35\xeb\xf5\x42\xa3\xf7\x86\xe6\x83\x40\xaa\xd9\xb8\x54\x90\xaa\x74\x53\xdf\x9e\xfa\xb7\x4f\xbf\x45\x7b\x25\xdf\xae\x2d\x3f\x15\xff\x68\xf3\x19\xa1\x77\xcb\x73\x81\x65\xa3\xd9\xbb\xc2\x33\x35\xac\xf4\xca\xcf\x6e\x9d\x77\x68\x2f\xcc\x9f\xb4\x5c\x39\xf2\x91\xc2\xbf\x50\xb2\x07\xa0\x65\x64\x02\x6b\x37\x8a\x09\x42\x9f\x32\x33\x09\xb1\x93\x72\xb0\x67\x25\xd8\x62\x7b\x18\xee\xec\x80\xef\xc4\x4c\xc6\x71\xe2\xc4\x3f\x62\x4c\x1c\x16\x05\x98\xb2\xdd\x68\xe2\xdb\xd5\xd9\x95\x1d\x4f\x7f\xf8\xb6\x79\x36\x40\xb8\x28\xec\x39\x21\x8f\xc5\xdc\x53\xf7\x54\xc8\x27\x02\xdc\x02\xfc\xc0\xf2\xf3\xa4\xfb\xdb\x2f\xa9\x54\xea\xe9\x17\xdb\x4c\xd1\x29\x0e\x31\x8d\x59\x98\x5a\xe2\x70\x63\x7b\xd6\x6f\x0a\xfc\xc7\xbe\x6e\x1a\x7d\xc3\xf8\xbe\x97\xde\x5d\xe8\x61\x97\xdd\x10\x56\xd5\x5b\xc2\x4b\xec\x24\xb7\xa4\x01\x10\xaf\xc5\x1d\x1c\xc5\xae\x6f\xda\xdc\x66\x66\xca\xf6\x62\x66\xb1\xf0\x59\xe4\x97\x7f\x5c\xd7\xfd\x73\x14\x7f\x11\x8b\xe8\x53\x40\x1c\x07\x02\x29\x62\x5b\xb6\x17\x5f\x9d\x8c\xd8\xc2\x4b\xdc\xdb\xe7\xbc\xc4\x8d\x12\xc2\xbc\x38\xdc\x0d\x05\xaf\x8b\x79\x90\xb1\x3d\xee\xe0\xdd\x88\xd1\x64\x51\x7c\xdb\x9d\x83\xe0\xd4\x77\x99\xe9\xbb\xd8\xf6\x6e\x48\xc9\xf2\xb5\xd3\xf1\x34\x64\xd1\xd4\x77\xcc\x28\x15\xb3\xf5\xb5\x67\xdc\xc1\xd6\x6b\x1e\xbd\x59\x37\x47\x44\x92\x9d\x55\xc7\xc6\xc4\x76\xec\x78\x57\xb8\x43\xf9\x9f\x20\x71\x9c\xb7\x4e\xdb\x96\xb7\xeb\x0b\xed\xdc\x3a\xfc\x72\xd6\x1b\x78\xee\x5a\x1c\x41\xff\xb1\x1f\x56\xa7\x72\xe5\x42\xae\x96\xfa\xed\xb7\xa7\xaa\xf8\x9f\xbf\x52\xc2\x3f\xfe\xf1\xc6\xd5\xd7\x0e\x5e\xeb\x79\x51\x80\xf7\x34\x5e\xd4\xe5\x95\xb6\xcb\x7a\x7e\x4f\xd3\x4b\x78\xae\xd4\xdd\xc0\xef\xa0\xf3\x65\x60\xec\xda\xbf\xcf\xc6\xc4\xae\xcb\x78\x08\x07\xcf\x37\xd9\x79\x2c\x5c\xc4\xc0\x4b\xa3\x97\xed\xf3\x67\xcd\x5f\x76\x8c\x0f\x8e\x1c\x7f\xc3\xd1\xf4\xcc\x19\xf8\x82\xdb\x41\xc8\x96\xef\x0a\x91\x84\xce\x59\xec\xd8\x51\xfc\xae\xe8\x73\x6f\xfb\x89\xee\x87\x9f\xa9\xe3\x47\x2c\xb6\xdd\x57\x22\x7f\x9f\x58\x6f\xc4\xd6\x59\x9d\x5f\x76\xea\x9f\xf5\x5d\xd5\xf7\xc9\xce\x2b\xd4\x79\x6d\x6c\x70\xa9\xe6\x54\x8a\xd7\xd8\x72\xec\x7c\x7d\xb6\xc6\x8e\x03\xaf\xdf\x9e\x83\x9c\x85\x77\x66\xd0\xc3\xcc\x8b\xf9\x5a\x06\xdd\xd3\x1d\x47\x11\x8b\x6f\xe1\x79\x88\xd5\x57\x4f\x63\x77\x17\x56\xb7\x55\x07\xa1\x4d\x99\xf7\x4a\x12\xdb\x9f\x7c\x2d\xc3\xed\x4f\xa6\x4c\x3f\x21\x0e\xdb\xf1\x8d\xda\xfb\x19\xc9\x87\x66\xd1\xb3\x1a\x3e\x0e\x59\x0f\x65\xb9\xaa\xd7\x63\x01\x5f\xe1\xc6\xf1\xca\x23\xc2\x57\x97\x3e\xe1\xfe\x1a\x21\x0e\x1d\xf6\xcf\xf2\xe1\x30\xac\x3f\xd0\xc1\x0e\x6e\x35\xfc\xca\x8b\xc8\xf5\xc3\xf8\x19\x8d\x7c\xa1\xa8\xf7\x8d\x5e\x4a\xb8\x6e\x36\xd9\x3a\xc6\x71\xcc\xdc\x20\x4e\xed\xc2\x22\x8a\xb1\x1b\xa4\x76\x5d\x26\x3f\x39\xfc\x92\xda\xfa\x1e\x7b\xd9\xd8\x72\x6c\x3b\x49\x78\xd6\xd4\xbe\x66\x21\xde\x04\xec\xfd\x4a\x39\x4c\x4b\x9c\xe9\x7d\x99\xf6\x9f\x2d\xbe\x52\x3b\xc7\x99\x0d\x3f\xbc\xae\xd4\xdf\xf6\x48\xfc\x4f\x4a\xf8\x47\x4a\x6f\xe4\x53\x87\xaf\xff\xdf\x5f\x29\xa8\x28\x92\xf2\x8f\x9b\x75\x75\x3e\x0c\xfb\x74\x95\x9d\xcf\xf2\x9c\xe7\xdc\x57\xd0\x38\x4c\xb4\xed\xa2\xee\xa6\x43\xbb\xb1\xe3\x17\x5c\x89\x12\x72\x74\x22\x64\xd1\x45\x03\x24\xdd\xec\x31\x86\x0c\x3f\xc7\xd2\x4b\x7f\xce\xc6\xbc\x9f\xf5\xe9\x6c\xb2\xee\x8e\x96\xf1\xe0\xd8\x22\x62\x6f\xb5\x30\x2f\xfd\x3c\x1b\xc3\x7f\xd6\xcf\x93\x8a\xfb\xfd\x7c\xd1\xc8\x5d\x9d\x67\xde\x92\x39\x7e\xc0\xde\x69\xd2\x4e\xa6\xbf\xd0\x10\x9d\x4d\x77\x7c\x01\x82\xa7\xf9\xda\xdf\xee\xa9\x87\x13\x8b\xde\x03\x62\xf1\x4a\x43\x73\x09\xc2\xd3\x3c\xf0\x85\xc6\x6b\x20\x2e\xac\xbd\x0a\xc6\x69\x8e\xe8\xd3\x60\x9c\x26\xc5\x7f\x3b\xc5\xed\xe5\xe0\xed\x46\x4c\xbd\x15\xdd\x67\x33\x5c\x9f\xf5\xea\x6c\x09\xe0\x33\xc3\xae\x7d\x8b\xff\x46\xa6\xb6\xa3\x28\x61\xe1\xfd\xaa\xa8\x6f\xde\x1c\x9d\xbe\x80\x25\x76\x6c\xd7\x7e\xa5\x47\xf1\xe6\x58\xf0\xdf\x39\xaa\x3a\x63\xe7\xd9\xaa\xca\xa7\x46\x51\xe7\xd7\x3f\x6a\x1c\x75\xa6\xf3\xf3\xe3\x9f\xb7\xb4\x1e\x2a\xed\x4a\xd3\xb1\x26\xff\xe7\x76\xe0\x5d\x4c\xf7\x7e\x9a\xe4\xe7\x6b\x68\x07\x9a\xc7\xeb\x8b\x54\x7c\xc7\x78\xe3\x9a\x80\xeb\xfd\x2a\xe5\xab\x67\xe9\x14\x7b\x16\xbb\x39\xb0\x3f\x07\xe7\x7c\xd9\xee\xf3\xb9\xfa\x34\x77\xfe\x79\x88\xfe\xc5\xf8\x10\xdf\xdc\xdc\x02\x27\x5e\x87\x2c\x4a\x9c\x9b\xd9\x3d\x5e\xbb\xec\xdd\xf1\xdc\x69\x89\xf5\xf3\x78\x5e\xad\x5b\x7c\x16\xd4\xab\x15\xe7\xdf\xee\x02\xee\x78\xd1\x5b\xe8\x1d\x45\x6e\x01\x71\x1f\xed\xae\x56\xb8\x3f\x03\x54\x7e\x37\xb2\xe6\x7e\xf8\xce\x64\x68\x2a\xaf\xf7\xf4\x77\x30\x7b\x5b\x65\xf4\x61\x7d\x95\x46\xb7\xd0\xe9\xa5\x2a\x8d\x5e\xf3\x34\xa9\x38\xd0\x8d\x7e\xa1\x9b\xfa\xed\x5b\x29\xdb\x69\x8d\xcb\x15\x43\xcc\x55\xa4\x62\xa3\x2d\x67\x47\x46\xb1\xde\xc8\x1b\xc5\x6a\xbf\xd1\xea\x8b\xe5\xb1\x34\xa9\x17\xbb\xe5\x66\xa3\x9f\x2b\x34\xf5\xee\x10\xb5\x73\xa8\x39\x12\xcb\xdf\xbe\xa7\xb4\xc3\x01\x8f\xff\x23\x41\xf8\x9e\x92\xbe\xa7\x84\xef\x07\x94\x53\xdf\xbe\x7d\x4f\x7d\xd3\xdb\xba\xae\xeb\x7f\xfd\xf5\x6d\x7f\x42\x7c\x3a\x77\xfa\xfb\x8f\x3f\xdf\xf3\x30\x37\xaa\x95\x60\xa7\x21\x37\x1b\x95\x42\x2b\x57\x6f\x14\xb3\x48\x12\x75\x59\x82\x13\xa5\xd5\xc8\x77\x3b\x46\x69\x58\x43\xa5\xac\x91\xab\xb7\x8d\x4a\xb1\x29\x77\x51\x61\x3c\x1c\xf4\x4f\x1e\x6a\x3b\xcf\x54\x45\xd5\x34\x49\x56\x34\xe9\x7b\x0a\xbc\xe1\xa2\xfc\x19\x17\xb3\xa3\x52\xbb\x3a\x1c\x18\xc3\xe6\xb8\x5c\x34\x06\xbd\xda\x70\xa0\x14\x4b\x65\x5d\x32\x1a\xe3\xb1\x58\x6d\xd7\xea\xa8\xa9\x57\xf5\x7e\xa1\x5d\xec\x43\xa3\x95\xeb\x16\x8a\x83\x51\xb3\xf1\x49\x17\x95\x4f\xa1\x28\x4a\xed\xa2\x58\xee\x17\x14\x51\xaf\x8f\xfa\xc5\x7e\x59\xd2\xc7\x55\x7d\x34\x2a\x8d\x46\x03\x71\x50\x1e\x8d\xc7\x1d\x58\x18\x8f\x0a\xbd\x56\x2d\x3f\x9a\x74\xf5\x21\x44\xa3\xa6\x7c\x72\x51\xb9\x70\x11\xbd\x51\xd1\xd2\xf7\x94\x7a\xd3\xc5\x57\xa8\x7d\x3d\x25\xf8\x85\x28\x79\x7d\xa2\xef\xa3\xa1\x72\x39\xd9\xf7\x8c\x23\x94\x4c\x4d\xe5\x8a\x04\x19\x83\xaa\x09\x88\x88\x88\x42\x54\x8d\x8b\x12\xe6\x8a\x04\x00\x41\x0a\xd4\xb0\x28\x73\xcc\x81\x2c\x48\xd8\x14\x88\x22\x12\x28\x49\x44\x40\x84\x69\xda\x0e\x2a\xe1\x8b\xc7\x4e\x87\x82\x44\x2c\x32\x49\xe4\x5c\x94\x55\x2c\x20\x22\x30\x24\x70\x13\x70\x68\x4a\x40\xa5\x80\x63\x6a\x8a\x02\x81\x94\x0a\x2a\x95\x24\x53\x41\x48\x11\x15\x4d\x85\x2a\x10\x15\x0c\xe0\xb7\x3d\xc5\x84\x5d\xc5\xfd\x6d\x8f\xec\xa8\x66\xcb\x9b\xcc\xa6\x5b\xcb\xa2\xbc\x97\xd7\xca\xa2\xb0\x9e\x65\xd3\x91\x60\xc5\xd1\xaa\xb2\xda\x82\x91\xd9\x1d\x8e\x71\xb6\x8a\x8b\xd6\x4e\xbe\xd0\x90\x0d\xbc\x0d\xc4\xf6\xbb\x9a\x27\xfa\x08\xc8\x7b\xb1\xec\xfc\x5f\x50\x90\x87\x1e\xdf\xae\x62\xfd\x35\xa2\x12\xcc\xa8\x6a\x8a\x88\x20\x6a\x42\x6e\x2a\x80\x2b\xa2\x29\x6a\x00\x21\x4c\x90\xa0\x01\x6c\x9a\x22\x94\x38\x96\x65\x13\x42\x11\x42\xce\x89\xa6\xc8\x4c\x60\x84\x03\xc4\xf6\x44\x7d\x04\xd9\x45\x89\x43\xae\x88\xb2\x84\x65\xa6\x98\x44\xe1\x14\x22\xa0\x41\x6e\x12\x24\x00\xa6\x52\x40\x45\x22\x4b\x12\x17\x39\x33\x15\x55\x14\x65\x41\x15\x44\x55\x46\xa2\xa9\xc9\x50\x36\x95\x6f\xfb\x56\x03\x28\x8a\xa6\x20\x0d\xc9\xda\x91\xb1\x39\xb1\x35\x99\x81\x46\xa2\xf8\x02\xa9\xa2\xa1\xec\x6d\x9a\xcb\xfe\xba\x24\x0d\x02\x7f\x9e\x5e\x16\xf5\x66\x9c\x03\x35\xb1\x8e\xb2\x08\x4e\xfa\xc8\x6b\x35\xfd\x0a\xea\xda\x61\xb9\xd0\x04\x5d\x0c\xd1\x30\x71\x57\xb5\x36\x14\x5b\x41\xbb\xe4\x2c\xab\xcb\xcd\xa6\xad\xb6\x4b\x85\xf1\x1e\xe1\x51\x6b\x50\x9f\xec\xd9\x51\x79\xfe\x73\x48\x6f\xd1\xe9\xfb\x4a\x6f\xb5\x8f\xdc\x99\xc1\x74\x90\xc6\x15\x54\x5d\x92\x2e\x2f\xdb\x11\xee\xf7\xf5\xd1\x74\x4b\x4b\xe9\x8c\x38\x1e\x56\x0b\x22\xf1\xb8\xbc\x4d\x06\xaa\x2d\xcf\xb4\x65\x7f\xde\x9c\x2b\x66\xcc\xd7\x5e\x69\x98\x21\x34\x0b\xeb\xe5\x5c\x9c\x6f\x6d\x32\xf1\x30\x57\xd5\xad\xdc\xb4\x6c\x4c\x3a\x73\x70\xb0\x7f\x83\xd1\x85\xe8\x16\x2b\x9e\x18\x9d\x17\xaa\x3f\x91\x7b\x3f\xe7\xb8\x93\xd1\x8a\x8c\x54\x46\x45\x59\x45\x5c\xe0\x40\x54\x55\x62\x0a\x50\x55\x15\x01\x29\x40\x45\x00\xaa\x26\x53\x29\xc3\x58\x24\x5c\xd6\x08\x04\x5c\x21\x82\x69\x02\xc8\x4d\xa0\x50\xd5\x94\xf6\x8c\x7e\x40\x54\x20\x2e\x20\x45\x04\xa2\x29\x61\x81\x33\x13\x50\x15\x98\x12\x53\x45\x09\x71\x45\x24\xa2\x8a\x45\x55\x01\x90\x31\x95\x60\xa6\x72\x99\x31\xaa\x29\x54\xe4\x9c\x0a\x2a\x50\x90\xc8\x0f\x2d\xe4\x13\xa3\x15\xe1\x99\xd1\x49\xb2\x69\x54\x11\x6f\x10\xad\xcf\xfb\x71\xad\x63\xc2\x78\x35\xc7\x52\x77\x9c\x09\x0a\xc0\xad\xba\x19\xe4\xf4\xe5\xe6\x72\xcd\x83\xe9\x30\xaf\x09\x46\xa3\x36\x28\x88\x68\x55\xf2\x46\x96\xe7\xaa\x4e\x7d\xd9\x2c\xf3\xbc\xc1\xb6\x69\x23\x0f\x1d\x36\x8f\xa6\x1d\x5c\x3f\x20\xbc\x67\xb4\x75\x42\xbc\xe7\x2c\x67\xd9\x21\x43\x75\xdb\xeb\x68\x1e\xea\xfb\x11\x9e\xe5\x6a\xeb\x7e\x60\xb5\xeb\xd9\x2c\x99\xba\x45\x48\xca\xfa\xb2\x55\x2e\x0d\x32\x59\x50\xe9\x0a\x30\x9f\x16\xa8\x65\xb6\xfc\x8a\xa4\x75\x23\xdf\xf7\xfb\x43\xe4\x27\xc9\x4c\x40\x91\x43\x8d\xcc\xaa\x52\x1c\x19\xab\x9d\xe6\xfa\x0d\xc6\x96\x85\x5b\xb5\xfe\x1f\xc0\x58\x81\x70\x09\x8b\x82\xc0\x24\x0a\x91\x2a\x98\x14\x6a\x8a\x86\x35\xa8\x42\x28\x71\xa0\x12\x41\x54\x29\xc1\x18\x52\x8d\x48\x26\x45\x0a\xa6\x26\x45\x2a\xc4\x26\x94\x34\x49\x41\xea\xbe\xa1\x7f\x00\xeb\x4d\xa4\x21\x88\x14\x4d\xa2\x5c\x55\x19\x84\x1c\x69\x02\x92\x81\x2c\x4b\x18\xaa\x84\x20\xa0\x0a\x92\x28\x31\x95\x08\x04\x6b\x90\xca\xc8\xa4\x12\x27\x40\x30\x45\x20\x03\x0a\xf0\xb7\x7d\xb7\xf8\x99\xb1\xe0\x89\xb1\xa0\x23\xa3\x5c\xb7\xac\xb6\x0a\xbe\xad\x65\xfd\x69\xdb\xec\x4c\xd7\xb8\x01\xeb\x70\x51\xcb\x74\xc9\x98\x0f\x57\x52\x87\x68\x45\x3a\xeb\xc9\xe2\x7a\xd3\x1d\x6d\x0b\xa3\xdc\xba\x91\x56\x57\x45\x61\x30\x10\xcc\xd9\xbc\x16\x68\xdb\x4c\x03\x76\xb6\x6c\xaa\x8e\xa5\xf5\x58\x8c\xda\x07\x9a\xee\x19\xbb\x3a\x21\x6e\x18\xb5\x16\xa9\xfb\xb3\x72\xba\xd3\x49\xf7\xba\xd9\x7c\xad\x94\xcd\xc4\x09\x2f\x8b\xae\x01\x44\x4a\x73\xe5\x10\x54\x3d\x11\x6d\x5a\xf9\x91\x23\x9a\x93\x56\xcb\x6e\x4e\x96\xac\x6d\x66\x3b\xf9\xc0\x4f\xa4\x92\x5e\x9f\x41\x23\x07\x9d\xa8\xa3\xad\x32\x51\x5b\x98\xb6\x69\x69\x6f\xaa\x7d\x83\xb1\xd5\xf1\xad\x5a\xff\x0f\x60\x2c\x50\xb1\x2c\x30\x45\xe1\x8a\x00\x04\xd1\x94\x4d\xc6\x14\x22\x68\x58\x14\xb9\xa2\xc8\x2a\x83\x8a\xa4\x88\x14\x31\x84\x25\x99\xaa\x9c\x41\x2e\xed\x08\xc1\x54\x0e\x64\x44\x21\xdc\x77\x6f\x1f\xc1\x7a\x41\x26\x26\x94\x10\x55\x76\x3e\x50\x4e\x89\xc9\x01\xc7\x40\x54\x31\x52\x98\x0c\x01\xa4\x98\x50\x2c\x29\x22\x91\x38\x53\x31\xd5\x34\x80\x21\x95\xb0\xc6\x91\x66\x52\xf0\x6d\x3f\x4a\x7a\x66\xac\xf8\xc4\xd8\xd5\x72\xeb\x5b\xf9\xd9\xda\xb3\x1a\xeb\x60\x88\x1d\x7f\x32\x53\xc7\x51\x6e\x66\x2c\xdc\x0d\x69\x51\x13\x6f\x29\x2b\x85\xc3\x66\x6f\x20\xf3\x9e\x3f\xf7\xeb\x5e\xd9\x14\x5d\xd2\x9b\x79\xe9\x42\x30\xab\x81\x02\x68\x4c\x37\x1a\xec\x65\xb5\x5e\x98\x08\x81\x26\xf6\xda\x52\xfe\xd0\x21\xd8\x31\x16\x9f\x21\xbe\x76\xaa\xc9\x66\x68\x33\xc1\x04\xc6\xb6\x9f\xeb\x80\x9a\x6c\xe4\x45\x2b\x2d\xd4\x12\xbd\xbc\x24\xd5\x74\xd7\x72\x4b\xe5\x8d\x95\x18\x83\x76\x57\x1b\x4b\x6b\xb3\xc7\xb6\xea\x92\x97\x61\xc1\x0f\x80\x52\x2a\x46\x0b\xd5\x07\xb5\x6d\xc6\x0f\xab\x73\x4c\xf2\x0b\xce\xcc\xd5\x9e\xa4\xfd\x1b\x8c\xad\xa9\xb7\x6a\xfd\x3f\x80\xb1\x0a\x97\x64\xc0\x4c\x93\x13\x81\x8b\x58\x86\x12\x40\x58\xd2\x34\x82\x09\x84\x44\x90\x18\x65\x48\x15\x54\x51\xd5\x00\x02\x90\x69\xe6\x8e\xdd\x92\x88\x81\x28\xc9\x94\x08\x02\xdd\xb1\xed\x11\xac\x47\x5c\x05\xb2\x44\x04\x51\x64\xaa\x22\x28\x22\x54\x44\x82\x55\x2c\x9b\x04\x00\x45\x55\x21\xc3\x1a\x07\x84\x43\x19\x52\x20\x48\x84\x9a\x10\x50\x59\x13\x90\x04\xb9\xc0\x64\xb0\xf3\x03\x9e\x31\x56\x7a\x62\xec\xda\x9e\xe7\x9d\x11\xd0\xdb\x46\x5f\x4a\x86\x2b\xd7\x36\xc0\xa0\xa2\x38\x8d\xee\x3a\xcd\x66\xbd\x4a\xc6\x55\x15\xb3\x03\x5b\xc5\xf2\xda\x4d\x46\xdb\xc6\x66\x5b\x56\xd9\x34\xe8\x8b\xeb\x6e\xa3\x97\x5e\x0c\xd3\xdb\xec\xb4\x03\x97\xcd\x1c\x9a\x2f\xac\xc0\x72\x17\xa3\x50\x10\xa5\x43\x62\xdd\x33\xf6\x8c\x44\xc5\x40\xe4\xcb\x79\xbd\x89\x9a\xc3\x74\x75\x01\xb6\xc5\xf1\x72\x53\x09\x84\xa0\x01\x6b\x75\x98\x67\x71\xdd\x5d\x37\x67\x93\x41\x33\x57\x33\x33\x56\xbf\xb9\xaa\x24\xd3\x76\xdf\xed\x87\x8b\x5a\x8f\x14\x06\x76\x09\x06\x2a\xd1\xe6\x24\xab\xa3\xed\xb0\x5c\x98\x97\x1b\xcb\xfc\xbc\xbc\xd7\x3c\xbe\xc1\xd8\xba\x75\xab\xd6\xff\x03\x18\x0b\x05\xcd\xd4\x4c\x0d\x11\x80\x77\xc9\xd0\x64\x44\x35\x15\xc6\x14\x55\x02\xa6\x46\x55\x2a\xc8\x58\x10\x54\x0d\x03\x6e\x4a\x32\xe3\x0a\xe5\x26\xd3\x28\x14\x64\x53\xe3\x0c\x01\x65\x9f\x1f\x1f\xc0\x7a\x51\x95\x77\x1d\x0b\xa4\x68\x1a\xa1\x94\x62\x86\xb1\xc0\x64\x41\x93\x4c\x59\x14\x15\xa4\x48\x5c\x51\x30\x93\x15\x82\xa1\x26\x22\x95\x03\x0a\x65\x28\x69\x9a\xc0\x35\x99\x43\xb6\x63\x3d\x3a\x63\xac\xfc\xdc\x2b\x50\x85\x72\x2c\xa1\xfc\x26\x28\xd5\x47\xbe\xe2\xc2\xd8\x8d\xf2\xa8\xc9\x74\xcb\x9f\x8f\x8a\x89\xd7\x56\x06\xf5\x45\x61\xd6\x33\xf4\x7a\x26\x1b\x0f\x89\xaa\x2b\xeb\x99\xd0\x93\xd9\x36\xc7\xfd\xf5\x12\xb6\x0b\xf6\x44\x2e\x78\xeb\x72\x6b\x63\xf7\x5b\xcb\x60\x91\x94\x3c\xe3\x30\xd4\xda\x33\xf6\x8c\x37\x62\x51\x58\x0f\x51\x0d\x3a\x8d\x71\x38\xea\x6c\x13\x64\x2a\xe5\x4d\xb6\xef\xb5\x9c\xc4\x6d\x14\xdb\x76\xd0\xc8\xae\xba\xed\x86\xbe\x06\x15\xbf\x17\x55\xcb\xc3\xc9\xb2\xbe\x49\x16\x96\xa2\xcf\xb5\xb6\x3d\x00\x2d\x30\x4c\x3a\x24\x08\xaa\xb2\x4a\x27\xa5\xe6\x24\xaf\xf4\x44\x65\xaf\x9f\xde\x60\x6c\xb3\x70\xab\xd6\xff\x03\x18\x2b\x72\x51\x51\xb8\x20\x2b\x0a\xe0\x10\x73\xc6\xb0\x08\xb0\xa0\x21\x59\x02\x92\x24\x48\x1c\x42\x28\x13\xc1\x94\x11\x06\x40\x52\x4c\x45\x62\x94\x52\x88\x81\x42\x14\x41\x92\xf8\x61\xe4\xf5\x00\xd6\x13\x53\x04\x84\x10\xa4\x32\x41\x61\x9c\x60\x51\x36\x05\x80\xc0\xee\x0b\x22\x9a\x4c\x55\x51\x94\x4d\x22\x29\x0a\xc7\x44\x02\x08\x51\x19\x10\x46\x64\x41\x81\x32\x10\x44\x75\xd7\x2b\x50\xcf\x18\xab\x3c\x8f\xbc\x72\xa6\x37\x61\xeb\x85\xa1\xc7\x50\x06\x4c\x19\xd7\x4d\xaf\xb2\x2a\xf8\xba\x8d\xcb\x5a\xa3\xa9\xd1\x0c\xf3\x4a\xd9\x86\x97\xa6\x83\x66\xa0\x96\xe7\x85\x65\x3d\x3d\x4f\xa7\x5d\x3c\xce\x8b\xdd\xb2\xdb\x5c\x4c\xd3\x53\x84\xc6\x9b\x16\x9a\x9a\x4a\x40\x15\x62\xe6\x93\xf5\xa9\x1f\x8b\xcf\xfa\xb1\x00\xc5\x9b\xb8\x59\xcb\xae\xad\x44\xdd\x30\x5f\x19\x65\xf0\x7c\x33\xf6\x36\x63\x67\x13\xf6\x09\xb2\xaa\xc3\x42\x7a\xcb\x73\x56\x4e\xcc\x69\x15\x92\x48\x33\x6b\xb4\x4c\xec\x5e\xbb\xb8\xce\x32\x0d\x39\x75\xcb\xee\x91\xc6\x20\x1d\xd6\x47\xbc\x50\x4a\xc7\xfa\x60\x5e\xc8\x59\x7b\x92\x5a\x37\x18\xdb\xf2\x6f\xd5\xfa\x7f\x00\x63\x99\xa8\x42\x49\x13\x25\x81\x28\xb2\xca\x35\x13\x43\x04\x05\x09\xab\x1a\x84\xca\x6e\x90\x44\x44\x89\x2b\x92\x00\x34\x24\x63\x45\x25\x54\x11\x38\xa6\xc8\xc4\x18\x4b\x88\x60\x49\xdc\xe7\xc7\x07\xb0\xfe\x01\x8c\xd5\xce\x18\x0b\x9f\x18\xbb\x51\x9d\xd1\xaa\x33\x28\x8b\x61\x1a\xda\x25\xcb\x11\xea\xbd\x7a\x5e\x73\x27\x46\xbe\xcf\xa6\x05\x00\x7a\xa8\xbe\x5e\x14\x49\x3f\xdf\xda\xea\xae\x67\x6e\xf3\xb8\xb6\x69\x26\x41\xbb\x87\xa0\x54\x02\xbd\x5e\x17\x48\xc0\x8c\x57\x8d\xc4\x2e\x74\xbb\xc3\x02\x46\xd9\x42\x63\x48\xf7\x08\xef\x18\x4b\xce\x10\x97\xb6\xda\xd4\xd5\xbb\x81\xa1\xc5\xfa\x60\x3d\x8f\xd7\x79\x69\xd4\x6d\x06\x92\x1d\xaf\xbb\xcb\x82\x5b\x87\x7a\x7f\xbe\xca\x76\xe5\x42\xc7\xfd\x20\x63\xe7\xff\x31\x8c\x7d\x65\xb5\xe2\xc6\xdd\xad\x5f\x58\xfb\x78\x79\x6b\xe4\x57\x94\xbd\x76\xef\xde\xd7\x74\x5e\xdf\x7e\xf7\x05\x6d\xaf\xdc\x3c\xf7\x05\x8d\xaf\xdc\xe6\xf6\xd1\x95\xa3\xb3\x5b\xdd\xce\x96\xdf\x26\x62\xa1\xd3\x98\xd4\x4b\xb5\x4e\xb7\x37\xae\xf4\xc7\xba\x2e\x4d\x46\xdd\x6e\x39\xdb\x46\xf5\xb2\x51\x2e\x56\xb3\xd9\x76\xa5\x5c\x86\xdd\xc1\x38\x5b\x1c\x35\x6b\x43\xd4\x29\x67\xd1\x61\xf6\xfb\xb0\x46\x63\x34\xed\x0e\x71\xa6\x4e\xc7\x69\xe5\x6a\x63\x3d\xcf\xc8\x66\x4e\xeb\xad\xa8\x19\x29\xfd\x69\x3e\x9b\xdd\xa6\x9d\x91\xde\x95\xe8\x42\x92\x4f\xec\xdb\x8f\x4d\x73\xfb\x8f\xbb\x30\x2b\x4c\x7b\x09\x55\xa1\x35\x8b\x6b\xb5\x88\xb6\xd1\xa0\x1a\x86\x31\x86\x44\x0f\xf2\xe1\x38\xed\xe8\x78\xa8\xba\x19\xa3\x9a\x5f\xeb\xe3\xce\xbe\x01\xcb\x52\xad\xbf\x76\xf6\xd7\x5b\xcf\x7f\xb2\x7b\xa5\xab\xe7\xef\x79\x5d\xd7\x72\x67\x51\x9c\x35\x6d\xda\x9f\x77\xb6\x76\xb6\x96\x6e\x6b\xa4\x37\xcd\xa6\x55\xb9\xd1\x25\x95\x2a\x18\x4c\xd2\x61\x59\xe9\xad\xe5\x45\x94\x9f\x64\xa7\x9e\xb0\x57\x27\xc8\x6a\xdd\xce\xab\x5b\x14\x40\xd1\x30\x8a\x93\x3c\x28\xf5\x7a\x69\x2a\x6c\x6a\x73\xaf\x1e\x45\xc6\xb4\x14\xf8\x52\xde\x36\x17\xdb\x96\xd2\xb7\xa2\xae\xb8\xcd\xc6\xed\x74\xb7\xbe\x6e\x8f\x56\x79\xae\x6a\x9d\x45\x8d\x86\x89\x5a\x55\x73\x23\x32\x30\x82\x4d\x6f\xa5\x85\x59\xfd\xaf\xbf\xae\x5b\x8b\x07\x57\x8d\xf4\xa5\xaa\xa9\x5f\x56\x4d\x3e\x57\x1c\xb7\xa4\x76\x24\x04\xfd\x1e\x59\xea\xd8\x64\x39\x46\x36\xfd\x8d\x2a\x9b\x6a\x3d\x46\x2d\x39\x6a\x2d\x06\xb0\xbb\x29\x16\xfd\x43\x7f\x62\x5f\x35\xee\x55\xb6\xf9\x30\xf4\x63\x73\xe4\x87\x25\x37\xc3\xb6\xf3\xd5\x6a\x50\x36\x86\x24\xc7\x25\xba\x18\x55\xcc\x6c\x30\xae\x1b\xe5\xb2\x93\x90\xb1\xd8\xc6\xbc\xe0\x6c\xcc\x74\xc3\xe5\xe2\x2c\xec\x0c\x5b\x72\x9c\x8c\xe7\xcd\xb5\xb5\x1c\xba\x54\x53\x63\x45\xd3\x94\xc5\x76\x9e\x1e\x74\x40\xad\x6c\x66\xdb\x3f\x1d\x7a\xf9\x4b\xd0\xb7\xaf\xa0\xcf\xcf\x48\xb9\x5a\xe5\xf5\x0e\x35\x0a\x12\xda\xea\xa3\xce\x60\xd4\x11\x9b\xed\x85\x27\xb5\x54\x29\x28\x37\x60\x79\x3d\xe3\xc5\x19\x5e\xe7\x4e\xd0\x7b\x5f\x85\xde\x1c\xb7\xf4\xc9\xa4\x3e\xed\x6c\xc5\xdc\xb8\xdb\x94\xa9\x98\xb3\xc3\xbe\x5c\x2b\x4d\x94\x19\x5b\xf4\x73\x82\xdc\x19\x0f\x3b\xad\x79\x4d\xda\x6c\x83\x4a\x7d\xb8\xed\xac\x26\x82\x40\x7b\x49\x54\x13\x65\x49\xb4\xb8\x32\xe8\x1a\xb4\x99\xf4\xc2\x7c\x10\x0d\x04\x77\x58\xf2\x6d\xfd\xe7\xb3\x5e\xf9\x12\xf4\xfd\x2b\xe8\xb3\x5a\xd3\xee\x5a\x1b\x6a\x4a\x78\x12\x37\x9b\x5c\xee\xba\xf5\xb0\xdf\xeb\x8b\x65\x43\x0a\xea\x65\xd0\x4c\x50\xd7\x93\x26\x8d\x3c\xad\x9f\x12\xd2\x75\x27\xe1\xc3\xd0\xcf\xea\xdc\x1c\x0f\x4a\x64\x55\x1c\x57\xad\x06\x5a\xb4\x16\xcb\x2e\xca\xac\xfa\x1d\x9a\x47\xb8\x98\x21\x49\xad\x81\x35\xb5\x0e\x88\xa5\x4e\x7b\xfe\x76\x2a\x99\x62\x79\x3d\x6c\xce\x8d\xb1\x53\x89\x4b\xd6\x02\x4c\x27\x9b\x65\xa7\x12\x75\xbb\x70\x30\x5b\x57\xd9\xa4\x5b\x2c\xe8\x3f\x9f\xf5\xf0\x4b\xd0\x8f\xaf\x13\x8e\xc2\xeb\x92\x51\xe7\x6b\x58\x72\x7a\xa4\x58\x01\x2d\x18\x10\x54\x2f\x15\xcb\x0b\x55\x36\x92\xee\x22\xe7\xe6\x70\xc0\x96\x3d\xc2\x4f\xac\x0f\xbe\x0a\xbd\x2d\x05\x30\x52\x05\x3b\x9e\x95\x7b\xc1\x72\x39\x11\xd5\xe1\x34\x19\x0b\xc5\xf9\x88\x78\xad\xa0\xec\xce\xca\xe3\x61\x6f\xee\x2b\x9d\xfc\x32\x1d\xc8\xa5\xaa\x20\xc2\x15\xac\x6c\x1d\x33\xcc\x81\x71\x84\xeb\xc5\x8c\xd1\xab\x15\x7a\x9d\xdc\x58\x21\x9d\x72\x8b\x26\x5d\xb7\xa9\x5b\x3f\x1d\x7a\xf4\x25\xe8\xe9\x75\xc2\x51\x4b\x60\xb2\x5c\xe5\xbd\x52\xab\xd3\x9a\xa2\x7a\x35\x3d\x2b\x65\x02\xbd\x5b\xf5\xac\x2e\x2f\xd0\x4c\xad\xda\x4e\xa7\xdd\x85\x8c\x69\xd2\x7e\x86\x7e\xf1\x55\xe8\x99\xd2\x13\x57\x74\xb0\x4c\x2f\xa3\xec\xac\x69\x8d\xb7\x5d\xbf\x60\xdb\xd6\x10\x96\x50\xb7\x5b\x9f\x3b\x13\x47\xe8\x34\x82\xa9\x18\x66\x63\xbb\x25\xb3\x71\xae\xba\xdc\xcc\xfd\x4a\x63\x3c\xe2\xd5\x4c\x69\x82\x3d\x7d\xb3\xd8\xac\x93\xb9\xdd\x1a\xc6\xa0\x3d\xf5\xe2\x79\xbb\x9d\xff\xf9\xac\x57\xbf\x04\xbd\x75\x05\xbd\x0e\xbd\x15\x6b\x77\xd5\x2d\xec\x21\x38\x09\xac\xd6\xa4\xc2\xc6\x70\x51\x86\xe5\x65\x3c\xab\x64\x92\xa2\xe4\x3a\x5b\x27\x16\x9a\xa8\x74\x62\x7d\xf8\x55\xe8\xf5\x85\x10\x96\x98\x32\xc9\x65\x9a\x95\x6a\xbb\xdd\x77\xe3\xd8\x49\x27\xa4\xe2\xc3\x46\x66\x2e\x41\x29\x2d\x3b\x5d\xab\xe8\x4f\xf3\x83\x60\x2d\xf7\xbb\x6d\xb6\xd2\x73\x55\x6f\xa5\xae\x68\x65\x56\x5e\x0c\x06\x43\xab\x55\x1b\x8c\xa3\x39\x2a\xb5\x57\xcb\x61\x92\xb7\xda\x34\xcc\xff\x7c\xd6\x6b\x5f\x82\x7e\x7e\x0d\x7d\x0e\x9b\x52\xbd\xe1\x87\x15\x08\x9d\x6c\x6b\x19\x52\x32\x68\x34\x8c\x11\x1f\x88\x92\x2e\xc2\x4a\xa7\x5a\x1d\x77\xc2\xa8\xd0\x06\x87\xa5\xbf\x3d\xf4\xd7\xb7\x3b\x7c\x9c\xf5\x84\x97\x03\xa1\x9f\x6f\xbb\x99\x34\xc9\x29\x45\x6d\xca\xb4\x4c\x71\xd5\x97\xd2\xc2\x44\x28\xe3\x41\x34\xc9\x05\xa5\x8e\x4a\x22\xdb\x2e\x67\xa8\x11\x8e\xb4\x69\xa5\xbf\x35\x6b\x79\x1e\x2d\x0b\xa4\x30\xa6\x68\xd8\x0d\xa6\xc2\xb2\x66\x60\x9c\x91\xbb\x5b\x65\x32\xb7\x9e\x12\xce\xeb\x23\x89\x5b\xbb\x45\x3e\x31\x92\x78\xda\x31\xf2\x5c\x99\x08\x8a\x08\xc8\x1a\x00\x94\x89\x82\x8c\xb9\x26\x70\x85\xc8\x0c\x08\x88\x71\x49\x95\x14\x11\x52\x55\x44\x8a\xa2\x68\x1c\x13\xc0\x35\x99\x03\x26\x62\x22\x48\x50\x06\x2a\x44\xe6\x79\xa5\xee\x53\xcb\x61\x52\x33\x82\xd5\x62\x32\x2c\x0d\x4a\x7d\xb5\x12\x58\x7a\x43\x59\xd6\x3a\xab\x55\x7a\x05\xb7\x4e\xb7\x50\x2f\x94\x5b\x70\x40\xb3\x86\xb9\x09\xf9\x61\x5e\xeb\xad\xc2\xdf\xde\x1d\xf2\xe1\xc2\x9f\x76\x88\x3c\x17\xfe\xe9\x91\x6c\x87\xe7\x3d\xa4\x5e\x1c\xfb\xc5\x1c\xe1\x45\x4c\xdc\xd0\xe4\xb1\x78\xe5\x87\xf3\x00\x47\x51\x30\x0d\x71\xc4\x6e\x68\xea\xb1\x28\x4e\x75\xf3\xc5\x54\xe3\x20\x9c\xfa\x33\xd5\x65\x41\xcc\x5c\xc2\xc2\x94\x28\x00\xe5\x1e\x43\xdc\x0f\x29\x8b\x68\xe0\x7b\x1e\x5b\xc7\x0e\x4e\x3c\x3a\xbd\x36\xb4\x7f\x9e\xc2\x3d\xca\x0e\xb3\x5d\xc7\xfb\x95\xa3\xdb\xe5\xff\xbf\xfb\xdb\x9b\x7f\x8d\x6d\x97\xfd\xfa\x47\x4a\x38\xdc\xed\xfc\xeb\xf1\x01\x75\xbf\xfe\x91\x3a\x9c\xdf\xff\x38\xc5\xd1\xaf\x7f\x1c\x9e\xe6\xb0\xff\xf1\x7f\x8f\xc2\x9c\xb1\xfb\x04\x5d\xbc\x8e\xd7\x91\xbd\xbd\x53\x3c\x64\x11\x0b\x97\xef\x09\xff\xf2\xbf\x77\x41\x81\xa3\x78\xbf\x0d\xd9\x3c\x6e\x07\xbc\x01\xc5\x97\x67\x01\xef\xf0\xe3\x98\x6d\x71\x48\xa7\xf6\xf2\x78\xf2\x95\x2a\x39\xd5\x01\x38\x02\xb2\x87\x23\xfc\xf5\x8f\xd4\xaf\x4b\x00\xfe\x09\xfe\x29\xfc\x7a\x3c\x41\x93\x30\x64\x5e\x6c\xec\x8b\xf6\xeb\x1f\x29\xed\xf2\xf7\xec\x7e\xa7\xf8\x0e\xb7\xff\xff\x19\xc8\x13\xa4\xcf\x92\x3b\xc5\xd0\x54\x09\x16\x00\x16\x00\x20\x4c\x92\x35\x48\x65\x91\xa9\xa2\xac\x62\x11\x63\x41\x90\x88\x28\x8a\x0a\xd6\x10\x33\x19\xa2\xa6\x26\xab\x50\x92\x24\x0d\x49\x50\x94\x4d\xac\x70\x7c\xf4\xe8\x59\xef\x8e\xc5\x17\x15\xf8\x7c\x66\x5f\xf6\x1d\xe5\x2e\x4e\xfd\xef\xd5\xf5\x91\x87\x83\x9d\x5f\x82\x8c\x88\x42\x29\xc7\x32\x13\x80\xa2\xaa\x18\x09\x26\x82\x08\x13\x01\xca\x12\x93\x31\x61\xa6\x26\x0a\x44\xd3\x18\x12\x09\x93\xa9\x24\x98\x14\xcb\x18\x03\x2e\x0b\x54\x55\xe1\xaf\xbf\xdc\xb0\xf0\x0a\x06\x02\x10\x89\xac\x60\x51\xe3\x32\x24\x9a\x29\x61\x2e\x49\x32\x94\x25\xa0\x60\x4c\x64\x40\x08\x84\x9a\x20\x21\x55\x44\x50\x52\x4c\x2a\x30\x85\x50\xa4\x40\x2c\x03\x2a\x13\x53\x82\x1f\xc7\x00\x7c\x7f\x79\xce\x4f\xe2\x20\xd9\x5d\xf7\x2b\x27\x8c\xca\x88\x2a\x9a\x09\xa0\x0a\xb1\xaa\x52\x55\x80\x18\x68\xaa\x49\xb8\xa4\x48\xaa\x80\x04\xae\x88\xc8\x44\x5c\x14\x35\x59\x34\x35\x49\xa1\x40\x41\x12\x27\x26\xe1\x54\xd5\x7e\xbd\x0b\x61\x4d\x94\x80\xaa\x71\x49\x05\x88\x63\x4c\x09\x23\x12\x51\x05\x99\x13\x41\xdd\x99\x16\x01\xa6\xd0\x44\x2a\xa7\x26\xa0\x22\x83\xaa\x2c\xcb\x84\x63\x48\x15\x46\x14\x93\x8a\xd2\x87\x10\xfe\xe2\xf1\x68\x84\x1f\x57\xf6\xb7\x10\xfe\x72\xa9\xff\xd6\x08\xdf\x19\xc7\xff\xc5\xe0\xbf\x18\xfc\x17\x83\xff\x62\xf0\x5f\x0c\xfe\x8b\xc1\x7f\x31\xf8\x59\x18\xec\x3f\xfd\x9f\xfb\x87\x46\x11\x0d\xf6\x4f\x7b\xba\x75\x7c\x7b\x1a\xff\x1f\xa6\xc6\xb6\xfe\x7c\xa8\x8c\x27\xfd\x49\x6f\x65\xbb\xba\x2e\xb9\x6a\x50\xce\xe7\x51\x3e\x6c\x0e\x2a\xed\x55\x9b\x66\x82\xc1\xaa\x10\x4b\xb5\x38\x7d\x9a\x84\x39\x2c\xc3\x4b\x63\xaf\x58\x2d\x50\xd9\xea\x2e\xe7\xad\xa1\x20\xb7\xf9\xb2\x99\xef\xbb\x9b\x9c\x39\x18\xf2\xc5\x3a\xdd\x57\x59\x2d\xd4\xc5\xf6\x78\xa2\x3d\xcf\x37\x54\xad\x2f\x4e\x02\x7d\x66\xbe\x22\xab\x27\xce\xd0\x0a\x81\x2a\xc3\x52\x6f\xae\xb2\x3e\x68\xd8\x6a\x37\x13\xa4\x0b\xac\xb9\x92\x83\x66\xc7\x18\x79\x28\x33\xa9\x63\xa2\x2f\xb6\x74\x18\x4c\xdc\x5e\xaf\x10\x32\xd9\x1d\x55\x8c\x51\xdc\x28\x54\xf3\x74\xd3\x8c\xc4\x62\x3d\xae\x8f\x96\x82\xbd\xad\xe5\x9b\x7d\x67\x79\xf2\x27\x37\xfe\xe2\x5d\x16\xd9\xcf\x4c\xb2\xb5\x8d\x60\xe0\xd7\x34\xde\x6c\x4e\xe7\x4a\xab\xec\x34\x7a\xe3\x65\x61\x09\xf9\xb4\x3c\x8b\x9a\xb5\xde\xbc\x0b\x94\x74\x46\xec\x95\xdc\x55\x2d\x92\x8a\x8b\xe1\x64\x2e\xac\x6b\x52\x52\x75\x36\x39\x80\x7a\x9d\x5c\x5b\xaa\xcf\xc2\xc6\xb4\x67\xf4\x8a\x48\xab\x44\x1b\x6b\xeb\x54\xc9\x01\x73\xbd\x39\x59\xb2\x08\x4c\x4b\xfd\x86\x6b\xb0\xee\x22\xd3\x21\xcd\x32\x0c\xa6\x2b\xad\x37\xdb\xd6\x62\x54\xca\x4c\xaa\xeb\x6d\xb3\x5a\xe9\x6d\x56\x95\x46\x6b\xa3\x17\xbd\x5e\x2b\x40\x4c\x46\xe1\x42\xeb\xaa\x53\x8e\xf8\x12\xe5\xd6\x66\xcb\xf5\x23\x3d\xb3\xe6\xa8\x20\xb6\xbd\xec\xea\x8b\x7c\xb3\x9e\xeb\x7f\xf5\xd5\xbb\x5a\x0e\x3f\x7e\x8c\xbf\xed\xb2\x2b\xad\xa1\x59\xd4\x85\xea\x32\xe3\xae\x92\x0e\x1f\x8f\x96\x7c\x4d\x8b\x8d\x4c\x5c\x32\xb3\xa2\x43\x4a\xed\x45\x67\xce\x4b\xa8\xe2\x4f\x33\x52\x0e\x82\xcc\xb8\x5b\xac\x4b\x5d\x4b\x42\xc6\xba\xb4\x2e\x95\x9b\x60\xbe\x18\x9b\xc6\xc6\x16\xdd\x65\xba\x10\xa5\x87\x93\xca\x61\x85\x3e\x6b\x6c\x06\x3c\x5b\xec\x73\xbc\x44\x8b\x0a\xce\x8d\xda\xeb\xfa\xaa\x25\x4e\xe6\x51\xa3\x03\x0b\xbd\xd1\xa0\x15\x6d\x4b\xfe\x20\x6e\xd7\x33\xf5\x93\xff\xa7\xf9\xbb\x4f\xf1\xe7\x69\xad\xf0\x95\x79\xbc\x57\x9e\xa7\xf2\xd1\x79\xbc\xb3\x67\xaa\x3c\x62\x4f\x37\xf8\x9e\xfa\xca\x66\xe6\x6f\xfd\x6e\xfe\xdb\xf7\x94\x26\x8a\x92\x84\x44\x41\x82\xaa\x22\x23\xa4\xa8\xc2\x61\x43\x33\xd8\xaf\xb1\xbd\xba\xaf\xfa\x66\x59\x3e\xbf\xf9\xfb\x31\x65\x91\x4f\x0d\xc6\xbe\x0c\xc2\xd5\xf6\xeb\x37\x6a\xf8\xb5\xc7\x89\x7c\xb8\x8e\xcf\x1f\x29\x72\x9a\xad\x25\x92\xa6\x32\x22\x63\xa6\x6a\x48\x81\x92\xa8\x40\x59\xa2\xd8\x14\x01\xd5\x64\x06\x24\xc2\xa9\x80\x64\x22\x89\x12\x63\xaa\xc4\x80\x0c\x08\x47\x02\xc0\x8a\xa9\x09\x32\x07\xe4\xb8\xf5\xf3\xa2\xb5\xaa\x9f\xd8\x7e\x48\x9c\x76\x26\x2b\x18\x42\xb5\xb4\x89\xa7\xab\x06\x70\xc6\x02\xde\x04\x3e\xd0\x1a\xe5\xf5\xd2\xc8\x6d\x9a\x4a\x9c\x2d\xd0\xdc\x60\xb9\x2a\x6a\x2b\xc9\x8a\xc3\xa6\x37\xb9\xce\x02\xb7\x8e\x57\xb7\x10\xef\xa3\x2d\xf7\x15\xfb\xe3\x4c\x9a\x5e\xe9\xbb\xd3\xfe\xcb\xd5\x9e\xdb\xb8\x73\x0d\x51\xcc\x39\x26\x2a\x05\x50\x10\x25\x2c\x21\x55\x95\x01\x54\x28\x11\x88\xc4\x39\xc0\x58\x34\x31\xdf\xf1\x86\x33\x2e\x6b\xa6\x08\x18\xa7\xaa\x8c\x4c\x93\x70\xc2\xf0\x01\x77\xf1\x25\xee\xff\xa6\x72\x3f\x0a\x77\xf5\xfa\xbe\xa8\x07\xe3\xae\x09\xaa\x2a\x60\xaa\x48\x2a\x50\x4c\x4c\x55\x59\x06\xd8\x34\x05\x51\x14\x30\x82\x12\x60\x5c\x61\x98\x4a\xa6\x82\xa8\xc8\x54\x0d\x4a\x32\xc3\x1a\x51\x44\x41\xe2\x10\x60\x95\xc9\x07\xdc\xa5\x87\xe3\xfe\xd9\x72\x3f\x0a\x77\xd4\x3f\x5d\x5f\xff\x09\xb8\x23\x8c\x04\x04\x54\x88\x15\x4a\x25\x88\x05\xa6\x88\x82\x22\xab\x98\x29\x00\x10\x45\x52\x35\x48\x05\x49\x03\x94\x01\x08\x4d\x59\x30\xb1\x2a\x28\xea\x7e\x0f\x1a\x83\x18\x8b\xf4\xb8\x21\xf7\x4d\xdc\x73\x20\xc9\x9a\x65\xbf\x97\x58\xf5\x65\x3b\xce\xa3\xec\xb4\x62\x48\x0d\xa6\x99\x83\x16\x2f\x55\xd2\x55\x5b\xa9\x2e\xfb\xcd\xf4\x44\x8f\xd1\xbe\x97\x53\xed\xe7\xd2\xc7\x42\xdd\xdc\xe7\x72\x17\xee\xf9\xaf\xd9\x6f\xd2\xcf\xd9\xbf\x17\x77\x0a\x09\x37\x4d\x4d\xe2\x40\x46\x82\xc9\x35\x93\x63\x89\x71\x4d\x31\x15\x44\xb0\xa8\x52\x46\x31\x65\x02\x54\x4d\x8d\x8b\x84\x08\xb2\x80\x91\xc6\x39\x45\x54\x31\x35\x48\x89\x76\xc0\xfd\x46\x9e\xf9\x37\x95\xfb\x51\xb8\xd7\xe5\x9f\x8b\x3b\x31\x65\x15\x9a\x64\x97\x5a\x4c\x19\x0a\x2a\x40\x10\x01\x2a\x63\x05\x23\xa6\x99\x90\xa9\x50\xa1\x58\xd4\x28\x91\x01\x83\xa2\x89\x30\xe6\x48\xc0\x22\x67\x4c\x21\x12\x34\xd9\x71\x3b\xef\xdb\x7c\x4f\x7c\xc9\x8f\x65\x65\x91\x6b\x15\xd6\x41\x3b\x23\xf9\xe5\x46\x7a\x0b\x50\x67\x63\x47\xc0\xe1\xf5\xe2\xd8\x6d\x0f\xad\x30\xe9\xa6\x7b\xba\xfe\x28\xbe\x17\xbe\x66\xff\x67\xf3\x9d\x28\x8a\x89\xa0\x8a\x65\xa6\x32\x04\x44\x13\x8b\x02\xe3\x26\x63\x02\x43\xa6\xaa\x70\x41\xd4\x64\x95\x6b\x04\x72\x53\x62\x5c\x34\x31\xe3\xa6\x84\x15\x0c\x64\xc4\xa8\x09\x25\xf3\xb8\x29\xf5\xed\xfc\x9e\xe0\x1c\x19\x8c\x26\x62\xde\x19\x0d\x71\x38\x80\xfd\xf5\x8a\x0c\xa5\x52\xa3\x6a\x05\x9e\xa4\x77\x73\xd3\x4a\x31\x50\xc8\xba\x5b\x19\x5a\x0f\xc3\xbd\xf8\x35\xfb\x3f\x1b\x77\x89\x40\x08\xb1\xa8\x48\x12\x90\x38\x45\x58\x30\x45\x19\x30\x26\xaa\x02\x94\x19\xa3\x48\xc5\x18\x2b\x8c\x98\x02\x46\x54\xc0\x0c\x71\x55\x11\x15\x8d\xa9\x02\xc7\xa6\x20\x6a\xfc\xb8\xb5\xf2\xe1\x79\xe6\x3c\xce\xaf\xdb\xd5\xfa\x3d\xb8\x97\xbe\x66\xdf\xe8\x7f\xce\xfe\xdd\xb8\xf3\xfd\x12\x31\xc1\x8a\xa4\x31\x51\x26\x58\xa3\x02\xc1\x50\xe4\x8a\x20\x01\xd5\x54\x29\x02\xaa\xc0\x45\x13\x22\x05\x51\x8a\x20\xd3\x34\x55\x16\x14\x85\x2a\x0c\x68\x9c\xcb\xc7\x0d\x82\x2f\x71\x7f\x60\xb9\xaf\xfb\x13\x77\xe1\x5e\xfe\x9a\xfd\xea\xea\x73\xf6\xef\xc6\x9d\x32\x8d\x53\x00\x14\x8d\x8a\x0a\x36\x29\x14\xa9\x06\x55\x88\x34\x91\x9a\x32\xe0\x02\xd4\x04\x55\x54\x05\xa2\x6a\x1a\x92\x65\x41\x41\xaa\x02\x4d\x22\x49\x04\x73\x86\x94\x7d\x7e\x57\x6f\xe2\xfe\xc0\x72\x5f\x17\xf0\x2e\xdc\x2b\x5f\xb3\x5f\xa9\x7f\xce\xfe\xdb\xb3\x1c\x37\x1f\x16\xf9\xf1\x01\xf0\xcf\x1e\xfd\x96\x0c\xb5\xdc\x5e\xb6\xe7\xa4\x26\x96\x75\x69\x38\x98\x75\xc2\x9a\x3b\x1b\x09\x02\x2f\xa9\x91\x51\x41\xae\x50\xe8\xac\xaa\xc3\x8c\x3e\x92\xf4\xfd\x8e\xa9\xe7\x23\x7b\x05\xc7\xf5\x77\x3d\x26\xd6\xa8\x03\x0b\xc8\xcf\x1b\x82\xd1\x4e\xaf\xc6\xdd\x9c\xb6\x1d\x2d\x47\x83\x9e\xb4\xb6\x5b\xf6\x38\xe9\x12\x90\x5f\xba\x6d\x83\xed\x1f\x32\x90\x1b\xe8\xcb\xf3\xa7\x66\x65\x0f\xbd\xfd\x7d\x25\x8f\x67\x6d\xda\xea\x89\x25\x65\xba\xf0\xb2\xae\x55\x2a\x31\x4b\xab\xaa\x8e\x4c\x41\xc1\xeb\x3b\xeb\xb9\x53\x70\xca\x5a\xb4\x98\x84\x82\x86\x40\x11\x36\x8d\x21\x67\x19\x57\x9e\x07\xc5\xb8\x92\x8e\x2a\x82\x0d\x16\x86\x1d\x2b\xba\x50\xdd\x0c\x3d\x32\x1d\x1b\x43\xc5\xcf\xef\x37\xe3\x6d\xdd\x66\x5c\x83\x55\x73\x58\x77\x26\xf9\x4d\x5c\xa1\x4e\xb3\x80\x32\xba\x69\xd4\x67\xc8\x6f\x4d\xdb\x44\x5b\x95\x1c\xb1\xdd\x3b\x9b\x2a\x7e\x03\x83\x13\x33\x2e\xee\x85\x3b\x93\x5d\xe9\x0f\x1a\x7d\x7d\x76\xf4\xa3\x3f\x60\xf4\x55\xec\x0d\xb3\xe1\x17\xec\xeb\xfa\xbf\x6f\x14\x74\x2b\x5b\xfe\xec\xa9\x8e\xcf\x07\x59\xee\xca\xfb\x17\x84\x0b\x17\x0d\x68\xb0\x26\xb6\x66\xeb\x3a\xee\xb7\x34\x98\xdd\xf2\x48\x63\x02\xf5\xc3\xc6\x64\xb4\xcd\x0e\xab\xf3\xa2\x5f\x43\xf3\xe5\xfc\x30\x4b\xfe\x7a\x90\x65\xdd\x5a\xd0\xb5\x96\xe1\xaa\xd6\x14\x85\x51\xae\xc9\xc7\x7c\x14\x95\x0a\x85\x7e\xbc\x1a\x63\x5c\xe0\x8b\x6e\x02\x37\x6e\xd5\x75\xf2\x2e\x4e\x57\x46\xb0\x82\x2a\x96\x45\xfa\x93\xba\x4f\xdb\xe6\x44\x93\x2b\x75\x9d\xd7\xcc\xb6\xde\x58\x8c\x48\xa5\x89\x36\xd1\x8a\xb1\x7a\x6e\x17\x08\xe9\xd1\x66\x99\x0e\x67\xd9\x71\xae\x39\x63\x95\xf6\x70\x64\xe4\xb6\x99\xf5\xc2\x16\x97\x6d\x3d\x9f\xd6\xaa\xc2\x14\xa9\xd3\xb2\x44\xd2\xe9\xd3\x06\x8c\x7f\x7f\x90\x7d\x95\xe4\x5f\x0c\xb2\x05\xca\xf4\xf2\xe4\x91\x41\xf6\x2f\x1c\x7a\xdd\x15\x64\x0f\x9e\xd7\xfa\x7c\x90\xe5\xaf\xbc\x7f\x41\x38\xe2\x5a\x2e\x18\x88\xa6\xa5\x0c\x80\xbb\x00\xcc\xa9\xd3\x12\x88\xd7\xb3\xee\xb8\x36\xd1\x56\x05\xcb\xef\x66\x31\x1b\xaa\x7d\xbb\xb8\x27\xf0\x5b\x41\x66\x8e\xe4\x4e\xa6\x34\xdd\x2e\xd4\x4c\x98\x4e\xd4\x96\x91\x8e\x1a\xa1\x5d\x8e\xba\x8a\x33\x04\x83\x38\xad\xb1\x1c\x13\x3c\x6f\x58\x6f\xf4\xb6\x75\x8b\xf6\x09\x0e\x59\x8b\x84\x41\x5e\xb4\x42\x35\x3f\x1b\x24\x2e\x75\x83\x41\x59\x5b\x95\xc4\xd2\x28\x1e\x2e\x57\xdb\x91\x6f\xec\x02\x61\x5e\xb1\x6a\xeb\x9e\x35\x10\xa3\x69\xa1\x14\x0b\xb9\x4a\xcd\x9c\x95\x97\xa3\xc5\x4a\x1b\xa8\x86\xef\xcc\x7a\x0b\x17\x54\xf2\xda\x74\xd1\x3c\xd5\xd8\xbf\x3d\xc8\xbe\x4c\xf2\xaf\x06\xd9\x26\x6c\x17\x8d\x07\x06\xd9\xbf\x72\x9c\x7d\x57\x90\x3d\x78\x12\xd3\x18\xca\x45\x81\x4d\x9b\x50\xdf\x68\x39\xa1\x15\x95\x0a\xd6\x92\x02\x04\x40\x5f\x53\xc7\x33\xd9\x35\xe6\xae\xd6\x46\xca\x3c\x27\xed\x97\xb1\x0f\x04\x3b\x2c\x45\x5e\x79\x7f\xf6\xbd\x7f\xab\xa0\xd9\x3b\x80\xbf\xd0\xf7\xdc\x3d\x28\xe4\xb3\xd3\x7c\x33\x2a\x0e\x5b\x62\x2d\xe7\x4f\x92\x6a\xbe\x33\x4a\xec\x86\x2b\xe4\x66\xd6\xa0\x66\x18\xb1\x39\xb1\x33\xba\xd4\xe4\x61\x2e\xb2\x96\x23\xd5\xde\x4e\x75\xc7\x19\xcd\x3b\x8b\x70\xb4\xb1\xe3\xee\xb2\xe4\x4b\xf3\xf6\x14\x0e\x32\xdd\x4c\xec\xb5\x49\x38\xb6\xca\xed\x76\x69\x7f\xe7\xb7\x97\x5d\x4f\x17\xa3\x7a\x63\x91\x77\x2a\xc5\x6e\x4d\xe9\x94\x40\xb3\x4a\xf4\x66\x67\x3b\x9d\xc4\xed\xc6\x42\x1f\x56\x36\x30\x74\x17\xf6\xe9\xd9\x1c\xb7\x83\xac\x7f\x59\x91\x17\x41\xb6\xc7\xeb\x90\x94\xce\x1e\xf1\xf1\x89\xee\xf4\xac\x79\xc2\xff\x95\xe3\x95\x05\x93\x8b\x20\x7f\x88\xfd\x57\x12\xcc\x3b\xf6\x7f\xca\xa4\xca\xa7\x16\x89\x7e\xa2\xfd\xc2\x1b\xf6\xef\x0a\xf2\x07\xcf\x98\x7f\x3e\xc8\xdf\xe8\xae\xbe\x11\xe4\x6f\x65\xbe\x2b\x7d\xa7\x20\xcf\x0e\xaa\xf3\x5e\xbb\x57\x74\x82\x62\xcd\xaf\x4f\xa9\x4d\xea\x81\x59\x55\xe6\xd3\x8e\x06\x8c\xb1\xb4\x6d\xb5\x57\xcb\x0c\x53\x9a\x4b\x34\xaa\xd0\x61\xad\x54\x59\x2a\x51\x9e\x5b\x9b\x29\xae\x65\xd6\xca\x70\x3c\xe4\x78\xd5\x18\x52\xaa\xf0\xba\x33\x44\x34\xd3\x5a\x97\x9a\xed\xea\x2e\x10\xd7\x61\xc6\x9c\x67\x8a\xe5\x3c\xf7\xb8\x9f\x4e\x0f\xc0\x28\xb1\x67\xcd\x4d\x24\x97\x66\x13\x35\x8c\x0a\x39\xcf\xcb\xac\xd5\xd1\x84\x18\xa7\x46\xfe\x6f\x12\xe4\xaf\x24\xd9\x7f\x59\x90\xbf\x52\xff\xff\x8e\x20\xbf\x4e\x7a\x6f\x05\x99\xfe\x13\x82\xfc\xab\x33\xa7\x3f\x7b\x79\xa6\x06\x67\xcc\x96\x66\xae\x5f\x51\x7b\x25\x27\x9f\x61\x16\x95\x50\x6b\x14\x97\x6b\xb5\xed\x70\xa0\xae\x06\xf6\x24\x8b\x73\x89\x62\x28\x7b\xcf\xef\x6b\xc9\xf7\x5b\xc1\xb3\x83\x41\xa3\xf0\x61\x10\xa5\xcc\xf3\x71\xd2\x57\x7a\xb6\xdf\xce\x6a\x73\xb7\x36\x14\x17\xd2\x12\xb5\xf9\x46\x6d\xd5\xd9\xbc\x40\x40\xaf\x57\x51\xec\xf5\x62\x5e\x11\xb2\xbe\x35\x0a\x9b\x31\xb2\x9a\x00\x8a\x6d\x32\x9f\x8a\x66\xb7\xd7\xe7\x2c\xef\x2f\xa9\xd0\xd2\x31\x9f\xe6\x47\xeb\x78\x3a\xd0\x9d\xc8\x48\x66\x4e\xd6\xdd\xcc\xb2\xfa\x78\x1f\x94\xcb\xfe\x34\x5e\x9a\x7a\xdc\xb1\xac\xd1\x64\xbd\xae\x0d\x3d\x68\x12\x7f\x42\xfd\x60\x23\x94\x5d\x63\xb4\x58\xd2\x9a\x91\x56\x48\x23\x3e\xad\x78\xdf\x0e\xf8\xf1\x65\xa5\xbe\x12\xf0\xe7\x00\x7e\x62\xfc\x3e\xf3\xf4\x5b\x04\x3b\x3f\xde\x0e\xb8\x07\xda\xff\x5c\xab\x7e\x1a\x3a\x3c\x70\x69\xee\x53\xad\xfa\xa3\xed\xbf\xc4\xe3\xed\x1e\x6c\xe1\x24\xf3\x51\xfb\xc5\x41\x5f\x38\x2a\xff\x60\x83\x7d\xac\x8a\x53\xc0\xad\xae\xdd\xba\x2f\x21\x3d\x76\xdd\xb2\xa4\xf8\xd5\x78\x60\x7a\xe3\xe6\xc0\x9c\x2c\xe2\x51\xd0\x2b\x67\x63\x42\xc7\x82\x9b\x73\x39\xcd\x56\x6a\x05\x6b\xe8\x39\xcb\x62\x65\xba\x7f\x1c\xee\x4f\x4f\x48\x7b\x50\x9c\xb6\xa1\x9c\xab\x2e\x3e\xdb\x6f\x67\x9d\xc0\xcd\xc0\x70\xa9\x54\x97\xa4\x21\xea\xb5\x7e\xd7\x29\xa7\x65\xdb\xac\x38\x23\x81\xd6\x21\x52\xdb\xa3\x75\x2d\x6d\x3b\x42\x82\xb6\x52\xcd\x68\x76\xcc\x6d\xad\x3b\x37\xbc\xae\x32\x34\x8d\x89\xa3\x67\xa1\x9d\x77\xfd\x5a\x45\x19\x92\x8d\xd9\x36\xe6\x71\x23\xce\xb7\xf5\x7d\xd2\x88\x07\x40\xb4\xe7\xb0\x49\xbb\xa2\x9d\x5f\x4a\x49\xde\x13\x8b\x6a\xce\xa9\xa4\x09\xd1\x5a\x4b\x03\x23\xad\xe9\xf8\x7d\x1e\x81\xd9\xe9\x11\xe8\x5f\x4a\x48\x67\x24\xfd\xc4\x5c\xc7\xd7\x13\xd2\xe3\xec\x7f\x35\x21\x3d\x70\xcd\xfa\x53\x09\xe9\xd1\xf6\x3f\x9a\x90\x8a\x27\x99\x8f\xda\xff\x6a\x42\xd2\xf5\xcb\x09\x91\xf3\xe3\xae\x84\xf4\xe0\x05\xfd\xcf\x0f\x83\xde\x98\x50\x3c\xd4\xcf\x07\x5b\xdd\xb3\x04\x76\x46\x2a\xfe\xd4\x0d\xcf\xea\x06\xa4\xdb\x71\x71\xd9\xcd\x4e\xcd\x01\xcb\xcb\x9c\x8c\x9a\xe5\x64\x54\xc4\x62\x2e\xbf\x30\x82\x22\xa7\xe9\x76\xd5\xf3\xed\x96\x11\x67\x44\x69\x3c\xb0\xfb\x9d\x92\xb1\xe1\x96\xa4\xaa\xc5\x5a\xbd\x16\x91\x46\xb5\x60\xb9\xc5\x28\x57\x9d\xc5\x96\x23\xf1\x19\x5a\x85\x19\x7d\x75\x48\x18\x4d\x71\xb2\xa8\xf6\xea\xbd\x4c\xd9\x6f\x54\xb3\xc8\xb6\x4a\xbd\x64\x2d\x2f\x16\xa3\x50\xa8\x71\x3d\xf4\xd2\xc5\xea\x04\xea\xe9\x58\x0f\x4e\xcf\x0a\xbf\x9d\x8c\xe8\x65\x85\xbe\x96\x8c\xce\x86\x83\x9f\x18\x8e\xd8\xe0\x54\x0f\xd7\xc3\x91\xfc\x0b\x0c\x6f\xd4\xd3\x03\xed\x5f\xf3\xe0\x2e\xfb\x67\xc3\xa1\xbf\x69\xef\x40\xbf\xbc\xd1\xe4\x6f\xe1\xdf\x39\xa6\xf7\x25\x8b\xc7\xde\x85\xf2\xf9\x64\x71\xcd\x86\x17\x01\xf3\xc1\x16\xf1\xdd\x64\x01\x7a\x7a\x3b\x9b\x64\x44\x8e\x46\xe5\x28\x43\x63\xbd\xaa\x0c\xd1\x38\x9e\xcb\xb3\x65\x3b\xeb\x07\x66\x53\x50\xb6\xf3\x6e\xdb\xef\xaa\x81\x9d\x00\x77\xe2\x66\xe2\xde\x32\xdf\x1b\x15\x16\x99\x76\x3f\xe1\x41\x9c\x29\xa8\x8d\xac\x55\x8b\x1b\x01\xad\x8e\x92\xfa\x52\xc1\xad\xdc\x31\x59\xb4\x36\x0b\x2b\x07\xfb\x8a\x3c\x4f\x82\x95\x11\xd8\x5a\xbb\x3e\x16\xeb\x74\x9c\xdf\x00\x6f\xa0\xae\x45\x38\x99\xea\x03\x3a\x9a\x7a\x99\xf7\x56\x21\xee\x4c\x16\x5f\x9b\xbb\xb0\xa9\xae\x7f\x29\x58\x1f\x68\xff\xda\xd0\x47\x93\xc5\xdf\xb4\xe5\xd6\x2f\xef\x8e\xfa\x5b\xf8\xf7\xf1\x64\xf1\xd8\x5b\xa7\x3e\x9f\x2c\x8a\x37\x49\xb0\x3f\xbe\x9a\x2c\xce\x8e\xb3\x64\xd1\xc5\xbc\x1c\x64\xb6\x01\x00\x71\x51\x05\xf5\xce\x92\xe8\xde\x5a\xb3\xda\x8d\xde\xc8\x34\x86\x72\xde\xf5\x2b\x3e\x9f\x5b\x7e\x29\x3d\xab\xae\x32\xa3\x59\x66\x9e\x6e\x28\xc3\x65\x77\xb6\x28\x85\xa5\xa2\x24\x25\x59\x58\xf3\xf2\xe9\x95\xce\xdb\x95\x29\x17\x32\x79\x67\x1d\xec\x9f\xe3\xb9\x4b\x16\x4d\x4f\x2d\x0c\xbc\xdc\x30\x5e\xdb\x9b\xe1\xd4\x9b\x47\x20\xab\x96\xe6\x95\x9a\x9e\x54\x1d\xa1\x5d\x64\x45\x42\xea\x28\x4c\x9b\xe6\x7b\xf3\x2e\xf7\x25\x8b\xf3\xee\xc0\x67\x82\x35\x7f\xaa\x87\x4f\x05\xeb\x03\xed\x5f\xf3\xe0\xa3\xc9\xe2\x6f\x1a\x8c\xfa\xe5\x2d\x7d\x7f\x0b\xff\xce\x8f\x37\x6f\xf9\x7b\xe3\x7d\xc6\x1f\xbd\xef\xef\xea\x9d\xc6\x4f\x79\xe8\xfc\xc6\xbd\xc3\x8b\x03\x4f\x5c\xbf\x91\xc8\x5e\xd7\xf2\xbc\xd4\x73\x78\xdd\xe0\x0b\x2d\x97\x2f\x6a\x3e\x7b\xed\xf0\xf9\xe7\x1f\xc1\x9c\x3d\x17\xf3\xf4\xde\xe3\x77\x8a\xa9\x1b\xbd\x42\xe7\x88\x4a\xb3\x61\x8c\xcf\x35\xee\x77\xa3\xeb\xf9\xfc\xf9\x5b\x94\xaf\x0d\xa6\x5a\x9d\x4a\x5d\xef\x8c\x53\xb5\xc2\x38\xf5\xdb\xf3\x8b\xf4\xbf\xa7\x76\x12\x1e\x76\xd9\x6b\xee\x47\xcf\x1f\x1e\xeb\x78\xf4\x86\xd7\xd1\x5b\x2e\xbf\x70\x94\x60\x6f\xf7\xef\x41\xee\x11\xec\xdd\xf2\xec\xc9\xc0\xa5\x53\x9e\x6f\xb2\x1b\x1e\x5d\xbe\x06\xe1\xe2\xdb\xd9\xfb\xac\x1f\xe2\xee\x85\xf2\x5b\x8e\xbf\x61\x3d\xd5\x6f\x54\xda\xfd\x42\xea\xf4\x2e\xed\x0f\x95\xe4\x31\x78\x7f\xb0\x00\x2f\xeb\xe0\x78\x1e\x47\xd3\x17\xde\x1f\x9e\xe8\x7f\xfc\xef\x41\xfe\x1e\x94\xdd\x72\xf4\xcc\xcc\xa5\x87\xfb\x13\x37\x68\xb2\x7f\x45\xc0\xe1\xef\x83\x9c\xdb\xeb\xba\xe5\xdb\xc9\xc8\xa5\x6b\x76\xf0\x3d\x15\xf8\x61\xfc\xd2\xb7\xb3\x37\x0e\x5c\x7c\x79\x94\xa7\x67\x2a\x6f\x3a\x7c\x6d\xf2\x56\xa5\xdf\xf2\x3a\x4a\xc8\xf1\xbf\xc7\x79\x1a\x25\xe4\x15\x1f\x9f\xcc\x5c\x7a\x17\xb2\xe8\x46\x75\x9f\x5e\x91\x70\xf6\xf1\x41\x4e\x9e\x14\xde\x72\xf4\xca\xdc\x5d\x39\xec\xec\x69\xa7\xa7\x8f\x0f\xf2\xf6\xa4\xf0\x96\xb7\x57\xe6\x2e\xbd\x5d\x44\x2c\xbe\x19\xeb\x67\x8f\x5e\x39\x7d\x7c\x94\xbf\xcf\x0a\x6f\xfa\x7b\x69\xee\xd2\xdf\xfd\xef\x37\xdb\xd7\xb3\xa7\x17\x9c\x3e\x3e\xc8\xe1\x93\xc2\x5b\x0e\x5f\x99\x7b\xb5\x6b\x60\x47\x51\xc2\xc2\xef\x29\x1c\x45\x2c\xa6\xbe\x79\xa3\x0c\xe7\x3b\x66\xce\xbf\x3c\xaa\x1c\x67\x2a\x6f\x96\xe4\xda\xe4\xad\x2c\x11\xb1\xc5\xf7\x54\xbc\xb6\x3d\x93\xad\x6f\x94\xe0\xe4\xfe\xa3\x7d\x7f\xd3\xf1\x2f\x79\x7d\xd5\x45\xbd\xfc\xfa\x20\xff\x2f\x95\xde\x2a\xc4\x0d\xb3\xaf\x96\xe4\x28\x7b\xbb\x38\x47\xce\x11\xec\x60\x8f\x9e\x1e\x70\x52\x69\xe4\x0b\xa3\x77\xdc\xce\x75\x0a\x7a\xaf\x70\x10\xbd\xd6\x93\x6a\x36\x4e\xbd\xd8\x7e\xb7\xd2\x28\xa5\x48\x1c\x32\x96\xfa\xed\x28\xf1\x8f\xd4\xb0\x5c\xe8\x14\x9e\xbf\xa7\xfe\xe7\xaf\x14\x78\x7e\x7c\xc7\xcb\x8e\x26\x8b\xe2\x43\x5b\xbe\x2b\xc5\xa7\xbd\xbc\x54\xb3\x73\xf2\xd8\x4f\xb9\x70\x31\x62\x8e\x63\x7b\xd6\x3e\xf6\xbe\xa7\x48\xb2\x39\x7d\x09\x42\x9b\xbe\x8c\xc5\x5d\x35\x90\x4d\xc4\x16\x9f\x76\xec\x59\xc3\xce\xa7\x53\x60\x5c\xb8\xf5\x7a\x57\x71\x27\xce\x19\xfb\xba\x0b\x4f\x4a\x0e\x5e\x9c\x25\x98\x3b\x1d\x39\x9e\xf9\x9a\x23\xe7\x4a\x76\x8e\x5c\x76\x84\xef\xf4\x24\xa2\x01\xf3\x96\x5f\xf4\xe4\x5c\xc9\xce\x93\xb3\x67\xca\xdf\xef\xc6\xb1\x41\xfd\xb2\x27\xe7\x7a\x8e\xce\x3c\xf5\x12\x2e\x9d\xc1\x51\xfc\xba\x43\x67\x89\xe3\x6b\x1e\x5d\x2b\xda\xb9\x74\x95\x1b\xdf\xc5\xa8\xe5\x47\xb1\x15\xb2\x6e\xdb\x48\x3d\x3d\xd0\x3c\x65\x26\x6e\x90\xa2\xbe\x1b\x38\x2c\x66\x7b\xb3\xff\x2f\x00\x00\xff\xff\x2e\xd5\x1b\xea\xb1\xaa\x00\x00") - -func allow_trustCoreSqlBytes() ([]byte, error) { - return bindataRead( - _allow_trustCoreSql, - "allow_trust-core.sql", - ) -} - -func allow_trustCoreSql() (*asset, error) { - bytes, err := allow_trustCoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "allow_trust-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x95, 0x9, 0x9e, 0x40, 0xdb, 0x1c, 0x6c, 0xe1, 0x6c, 0xe5, 0x85, 0x12, 0x74, 0xfd, 0x5a, 0x81, 0x43, 0xb9, 0xc1, 0x6a, 0xee, 0xd4, 0xa9, 0xc7, 0x13, 0x94, 0x39, 0x18, 0x1, 0x51, 0xb3, 0xc}} - return a, nil -} - -var _allow_trustHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x7d\xf9\x8e\xa3\xb8\xf6\xf0\xff\xf3\x14\xa8\x75\xa5\x9a\x51\xaa\x27\x98\xc5\x40\xcf\x37\x57\x22\x09\xd9\xf7\x3d\x75\x35\x8a\x0c\x98\x84\x2c\x40\x01\x59\xaf\x7e\xef\xfe\x29\x90\x54\x08\x15\x12\xb2\x74\x4f\x5f\x0d\x6a\xb5\x02\xb6\xcf\xe6\xb3\xf8\xd8\x07\xea\xeb\xd7\x5f\xbe\x7e\x25\xea\xa6\xe3\x8e\x6c\xdc\x6a\x94\x09\x15\xb9\x48\x46\x0e\x26\xd4\xc5\xdc\xfa\xe5\xeb\xd7\x5f\x76\xed\x99\xc5\xdc\xc2\x2a\xa1\xd9\xe6\xfc\xd8\x61\x89\x6d\x47\x37\x0d\x42\xf8\x1d\xfe\x0e\x02\xbd\xe4\x0d\x61\x8d\x86\xbb\xe1\xa1\x2e\xbf\xb4\xa4\x36\xe1\xb8\xc8\xc5\x73\x6c\xb8\x43\x57\x9f\x63\x73\xe1\x12\x7f\x12\xe4\x1f\x5e\xd3\xcc\x54\xa6\x9f\x9f\x2a\x33\x7d\xd7\x1b\x1b\x8a\xa9\xea\xc6\x88\xf8\x93\x78\xe9\xb4\xb3\xfc\xcb\x1f\x07\x70\x86\x8a\x6c\x75\xa8\x98\x86\x66\xda\x73\xdd\x18\x0d\x1d\xd7\xd6\x8d\x91\x43\xfc\x49\x98\xc6\x1e\xc6\x18\x2b\xd3\xa1\xb6\x30\x14\x57\x37\x8d\xa1\x6c\xaa\x3a\xde\xb5\x6b\x68\xe6\xe0\x13\x34\x73\xdd\x18\xce\xb1\xe3\xa0\x91\xd7\x61\x85\x6c\x43\x37\x46\x7f\xec\x69\xc7\xc8\x56\xc6\x43\x0b\xb9\x63\xe2\x4f\xc2\x5a\xc8\x33\x5d\x79\xdd\x31\xab\x20\x17\xcd\xcc\x5d\x37\xb1\xdc\x96\x9a\x44\x5b\x4c\x95\x25\xa2\x90\x25\xa4\x7e\xa1\xd5\x6e\x11\xb5\x6a\x79\xb0\xef\xff\xfb\x58\x77\x5c\xd3\xde\x0c\x5d\x1b\xa9\xd8\x21\x32\xcd\x5a\x9d\x48\xd7\xaa\xad\x76\x53\x2c\x54\xdb\x81\x41\xa7\x1d\x87\x8a\xb9\x30\x5c\x6c\x0f\x91\xe3\x60\x77\xa8\xab\x43\x6d\x8a\x37\x7f\xfc\x08\x84\x8a\xf7\xeb\x47\xa0\xdc\xe9\xd5\x8f\x63\xd0\xc7\x76\x3b\x77\x3e\x81\x3b\x45\xbe\x84\x2c\xd0\xeb\x08\xdc\xeb\x5e\xa8\x66\xa4\x7e\xa0\xe7\x1e\xac\x47\xd5\x10\x6b\x1a\x56\x5c\x67\x28\x6f\x86\xa6\xad\x62\x7b\x28\x9b\xe6\xf4\xf2\x40\xdd\x50\xf1\x7a\x18\x60\xce\x70\x90\xa7\xe8\xce\xd0\x34\x86\xba\x7a\xcb\x68\xd3\xc2\x36\xfa\x18\xeb\x6e\x2c\xfc\xc0\xe8\x23\x25\x0f\x51\x71\xdb\xd8\x19\x56\x47\xd8\xf6\x06\x3a\xf8\x7d\x81\x0d\xe5\x26\x16\x02\xc3\x2d\x1b\x2f\x75\x73\xe1\xec\x9f\x0d\xc7\xc8\x19\xdf\x09\xea\x71\x08\xfa\xdc\x32\xed\x9d\x39\xee\x7d\xea\xbd\x60\xee\x95\xa5\x32\x33\x1d\xac\x0e\x91\x7b\xcb\xf8\x83\x32\xdf\xa1\x4a\x7b\xbb\xbc\x83\xe8\xe0\x48\xa4\xaa\x36\x76\x9c\xcb\xc3\xc7\xae\xad\x7a\x71\x67\x38\x33\xcd\xe9\xc2\x8a\xd1\xdb\xba\x46\x92\xdf\x0b\xe9\xf6\x8d\x80\x0f\x4e\x37\xf6\x80\x9d\x9f\xd0\x34\x6c\xc7\xeb\x7a\x00\x7f\xc7\x90\xbd\x58\xe3\x0d\xf2\x5c\xeb\x0d\x48\x82\xae\xf8\xda\x08\x6b\x37\x60\xec\x5e\x9d\x01\xe7\xc4\x01\xc9\x9b\xab\x6a\x34\xfe\xb0\xf4\x38\x9d\x4d\x9f\x0e\xf3\x6a\x47\xdd\x71\x87\xee\x7a\x68\x5d\x07\xb9\xeb\x69\x5a\x71\x7b\xe2\xb8\xdd\x0e\xa1\xe4\x72\x67\xf9\x60\xee\x57\xbb\x5d\xf7\x62\xf2\x26\xde\x64\xfa\x31\x72\x27\x6d\xc7\x59\x5c\xc3\xfc\xd1\x59\x31\x55\x7c\xe3\xba\xe0\x43\x0d\x2c\x64\xbb\xba\xa2\x5b\xc8\xb8\x18\xbc\xaf\x0d\x1d\x5a\x37\xae\x4d\x3e\x22\xda\xad\x14\x9c\x1f\x78\x33\x7e\x4f\x78\x71\xf0\xf9\x1d\xbf\x3b\x7c\x7f\x32\x77\x33\xb9\xff\xb9\x8b\x0f\x87\xa5\x9f\xa7\x0c\xc3\x98\x14\x8c\x4c\xdb\x1a\xce\xf5\xd1\x7e\xc1\x70\x81\x84\x50\xcf\xd8\x3c\xde\xbe\xde\xbb\x04\x39\xae\x72\xfa\xa3\xd3\xb5\x72\xa7\x52\x25\x74\xd5\xc7\x9c\x91\xb2\x62\xa7\xdc\x8e\x09\x3b\x42\xe9\x9e\x00\x79\x3f\xdd\x97\x21\x79\x77\xf1\xd9\x3f\x44\xe9\x96\xd4\xe8\x48\xd5\xf4\x1d\x32\xdb\xad\xb3\x1d\xfc\x7e\x33\xe6\x13\x20\xb1\x47\xab\x38\x66\xdf\xe3\x6a\x36\x36\x87\x11\x56\x7f\x0b\x7f\xe7\x41\xc4\x1b\xbb\x5f\xf7\xc5\xeb\xbc\x5f\xe4\xc5\xe6\x6d\xef\x01\x6e\xe1\xc5\x1f\x12\xb3\xef\x7e\xf9\x17\x9f\x9e\xc3\x7a\x31\x0e\x45\x21\x1f\x72\xb9\x73\xc0\x25\xec\x3b\x8a\xb9\x5c\x53\xca\x89\xed\x33\x9d\xe7\xfa\x2e\xe3\xd0\x15\xfc\xab\xb1\x98\x63\x5b\x57\xfe\xf3\xd7\x6f\x31\x46\xa1\xf5\x1d\xa3\x66\xc8\x71\x7f\x45\xc6\x06\xcf\xbc\xad\x98\x18\x23\x34\xdd\x3e\x3b\x24\xdb\xa9\xa6\xdb\x85\x5a\xf5\x02\x3f\x43\x34\x1a\x1d\xa9\x7b\x25\x3e\x11\x7a\x01\xc6\x81\xbb\x07\x60\xec\x78\xf5\x86\x1f\x89\x7f\x25\x6e\x61\xc4\x63\x3d\x06\x04\xa9\xdf\x96\xaa\xad\x10\x88\x99\x35\x72\xde\x67\x07\x5d\x4c\xe7\xa5\x8a\xf8\x09\xc3\x1f\xbf\xf8\xbb\x70\x55\x34\xc7\xdf\x0e\xcf\x88\xf6\xc6\xc2\xdf\xf6\x43\xfe\x20\x5a\xca\x18\xcf\xd1\x37\xe2\xeb\x1f\x44\x6d\x65\x60\xfb\x1b\xf1\xd5\xdb\x9c\x4b\x37\xa5\xdd\x7c\xed\x21\x1f\xe0\xfd\x72\x02\xf1\xb4\x71\x0f\x38\x5d\xab\x54\xa4\x6a\xfb\x02\x64\xbf\x03\x51\xab\x9e\x02\x20\x0a\x2d\xe2\xe5\xb0\xed\x76\x78\xe6\x78\x40\x5e\xc2\x98\x0f\xec\xef\x71\x7e\x48\xe8\x2a\x3f\x27\xb2\xac\xd6\xda\x21\x79\x12\xbd\x42\x3b\xff\x41\x56\x70\xff\xed\x04\xfd\x11\x4a\x88\x90\x5b\x98\xff\x04\xc4\x13\x40\xbd\x9c\xb4\x46\xad\x46\x99\xb0\x6c\x53\xc1\xea\xc2\x46\x33\x62\x86\x8c\xd1\x02\x8d\xb0\x27\x86\x98\xfb\x85\x41\x72\xaf\x2b\xda\x9e\xfc\x83\xae\x1e\xe9\x3f\xcc\xed\x39\x59\x7e\x68\xf6\x55\xf8\x44\x53\x6a\x77\x9a\xd5\x56\xe0\xd9\x2f\x04\x41\x10\x65\xb1\x9a\xeb\x88\x39\x89\xf0\xb8\xaf\x54\x3a\xbe\xbf\x6b\xb5\x9b\x85\x74\xdb\xeb\x21\xb6\x88\x7f\x0d\xff\x45\xb4\xa4\xb2\x94\x6e\x13\xff\x02\xbb\xbb\xf0\x6c\x5c\x35\xc4\xc7\xb8\xbb\x06\xfe\x69\xcc\x51\xe7\x98\x8b\xe3\xa9\x1e\xe3\x2f\x06\x86\x0f\x16\x3f\x1e\xdd\xc5\xe1\xaf\xbf\x10\x44\x5a\x6c\x49\x44\x2f\x2f\x55\x89\x7f\x81\xff\x80\xbf\x92\xff\x02\xff\xa1\xfe\xfa\xf7\xbf\x28\xef\x37\xf5\x1f\xea\x2f\xa2\xed\x37\x12\x52\xb9\x25\xed\x84\x22\x55\x33\xbf\x9d\x95\x4c\x8c\x38\xf0\xa0\x64\xae\x63\xf8\xde\x92\xf9\x7f\xf7\x48\xe6\x73\x4c\xdd\xcb\xe1\x23\x0e\xc7\x13\xc4\x31\x6c\x7f\x82\xe8\x51\x4c\x10\xad\x9d\xac\x88\x3f\x8f\x1e\xe0\xd5\x7f\xdc\x1e\xd4\x25\xe2\xcf\xa0\x45\xfc\x76\xce\x6a\x9f\x4a\x63\x18\x60\x88\xc4\x83\x19\xc7\xa7\xf0\xec\x12\xe8\x51\x2a\xcf\x01\x0d\x51\x7a\x62\x90\xa7\xe4\x1e\xb5\xec\x33\xb5\xe7\x96\x79\x0f\x53\x7b\x06\x68\x98\xda\xa0\x91\x5c\xa4\x76\x17\xb9\x54\xac\xa1\xc5\xcc\x1d\xba\x48\x9e\x61\xc7\x42\x0a\x26\xfe\x24\x5e\x5e\xfe\x38\x6d\x5d\xe9\xee\x78\x68\xea\x6a\xe0\x28\xed\x84\xd7\xe0\xfa\x77\xcf\xa2\x67\x60\xf1\xd8\xf3\x6d\x31\x98\x7c\xfb\x1c\xe9\x2a\x21\xeb\x23\xdd\x70\xbd\x85\x41\xb5\x53\x2e\xfb\xec\xa0\xf9\x6e\x19\x4f\x28\x63\x64\x23\xc5\xc5\x36\xb1\x44\xf6\x46\x37\x46\xa1\x6e\xc6\x62\xfe\xb1\xe4\x27\x74\xc3\xc5\x23\x6c\x87\xba\x68\x33\x34\x72\x08\x67\x8e\x66\xb3\xcf\x68\x5c\x73\x3e\xfb\x8c\xe4\x57\x8a\x65\x7f\xfb\xe8\xf9\x79\xda\xc3\x79\xc3\xbd\xe2\x08\xef\x76\x7c\x88\xc4\xc5\xeb\x4f\x02\xb1\xac\x99\xee\xed\xd9\x13\xae\x3e\xc7\x8e\x8b\xe6\x16\xb1\x9b\x33\xef\x96\xd8\x9a\x06\xfe\x4c\x68\x54\x56\x74\x58\x8f\xee\xd3\xa9\x78\x34\x7f\x24\x5f\x11\x50\xf7\x6a\x28\x36\xdb\xfe\x8a\x0e\x78\x0f\x0a\xd5\x74\x53\xf2\x96\x5f\xa9\xc1\xfe\x51\xb5\x46\x54\x0a\xd5\xae\x58\xee\x48\x1f\xf7\x62\xff\x78\x9f\x16\xd3\x79\x89\x00\xd7\x98\xb9\x5b\xec\x61\x40\x9f\x54\x71\xbf\xe9\x41\x18\x78\xed\x2e\xd1\xec\xd7\x97\x08\x8e\x5f\xbe\x7d\xb3\xf1\x48\x99\x21\xc7\xf9\x2d\x3c\x5d\xfe\x59\xc5\x19\xdd\x82\xcc\x6f\x17\x26\xca\xcf\x8d\x1f\xe6\xcc\xdf\xd1\xf9\xe0\xeb\xbc\x65\x1c\xf7\xea\xce\x93\x79\xb6\xbb\x62\xaa\xe7\xba\x03\xea\x7c\x77\x7f\xfb\xef\xcc\x00\x16\x5e\xb2\xb0\xf3\xdb\x0b\x4f\x52\xdb\x20\xcc\x1f\xa6\xb4\x97\x18\x21\x6a\xbd\xaa\x94\x21\x52\x83\x2b\x1c\xf9\x3b\x74\x97\x19\xfa\x80\x15\x6a\xfe\x5d\x57\xa3\x68\x3b\xec\xf9\x3c\xaa\x75\x7b\x38\x7b\xb5\x0b\xd9\xcc\x30\xca\xd3\x7f\xde\xe2\x8a\xea\xf9\xc5\x3b\xf8\xf8\x12\xa1\xcd\x9e\x1e\x9f\x6f\x52\xb1\x8b\xf4\x99\x43\x4c\x1c\xd3\x90\xa3\x95\xed\xb0\x51\xf6\xa8\x1c\xf6\x70\xf6\x72\x38\x9c\x5b\x47\xd0\x16\x38\x4c\x8e\x65\x85\xe7\xce\xb1\xcf\x0f\xdc\x8b\x25\xb0\x33\xea\x4d\xc4\x07\x1d\x07\x2f\x47\x86\x30\x1c\x27\x22\x5e\xff\x8f\xc3\xe4\x50\x60\x32\x17\xee\x31\x36\x85\xc7\xd8\x18\xb9\x57\x07\xf9\x7d\x17\x96\x1a\xbb\xef\x87\xea\xec\x6f\x43\xe7\xec\x9f\x78\x01\x9f\xd6\x03\x2e\x9a\x0d\x15\x53\x37\x9c\xf3\x3a\xa8\x61\x3c\xb4\x4c\x73\x76\xbe\xd5\x3b\xf9\xd4\x70\xd4\x5c\x7b\xcd\x36\x76\xb0\xbd\x8c\xea\xb2\x5b\x87\xba\xeb\xa1\xb7\x4c\xd2\xb7\x51\xbd\x2c\xdb\x74\x4d\xc5\x9c\x45\xf2\x15\x9e\xa3\x83\xb2\x60\xa4\x62\xdb\x5b\x5e\xf8\xcf\x9d\x85\xa2\x60\xc7\xd1\x16\xb3\x61\xa4\xa2\xec\x19\x47\xfa\x0c\xab\xd1\xbd\xa2\xcd\x2a\x62\xef\xfa\x51\x2b\x8b\x38\x0f\xb9\x12\xf3\xe2\x7b\x9b\xeb\xfe\xeb\x56\x96\x9f\x1b\xc6\x2e\xe2\xf8\x51\x61\xed\x26\x46\x1f\x0c\x73\x17\x71\x7d\x0e\x7b\xe7\xbb\x5f\x08\x83\x81\x93\x9d\xa7\xe9\xe6\xb5\x34\xe7\xb4\xaa\x2a\x22\x15\xda\xad\xfc\x15\x9f\x15\x2f\x02\x3e\x18\x00\xf7\x96\x6f\x2e\x6c\xe5\xa3\x4c\x23\x22\xf4\x1c\xdc\xc9\xcb\xcb\xb7\x6f\xd1\xa9\x58\xb4\x1d\xec\x0f\xd6\x1e\x15\xe7\xbe\x16\xf0\xd7\xa7\xae\x17\xf6\x2e\xf1\x9e\xe8\xe5\xd5\xc2\x44\xa2\x0d\x55\x22\x5e\xea\xb4\x2f\x8e\xbc\xd4\xc5\xcf\x83\xcf\x76\xf8\x5c\xd3\x79\xa5\xdf\x45\x74\x1f\xbd\x2e\x60\xf4\x48\xd2\x9d\xa1\x83\x67\x33\x6c\x13\xb2\x69\xce\x30\x32\x0e\x31\x49\x57\xf0\xd0\x38\x89\xbf\xfe\xb3\xd3\x98\x7c\xac\x26\x1a\x86\xa2\xf5\x49\x3d\x53\xb8\x31\x70\x4c\x7f\xb6\xf2\xd3\xa3\x7a\xe8\xd5\x06\x13\xe9\xbc\x94\x2e\x11\xbf\xfe\x1a\x94\xe0\xbf\x09\xf2\xb7\xdf\xae\x81\x3a\x37\xfc\x20\xb4\xff\xf7\x49\x8e\x31\xe0\x9d\xc8\x34\x04\x3e\x24\x70\x8f\xc0\x8b\xa6\x74\xfe\x84\xfb\x09\xc6\x75\xbe\x66\x21\x66\x24\x8d\xe3\xc2\x1e\x89\xa5\xd7\xea\x03\x9e\x13\x4d\xaf\x60\xf9\x51\xf1\xf4\x46\x66\x1f\x8c\xa8\x57\xb0\x7d\x8e\xa9\x51\x03\x2e\x44\xd5\x93\x9a\x90\x27\xea\xea\x41\x3f\x83\x24\xc5\x4e\xa2\xf6\xbe\xff\x4a\x6a\x16\x37\xf0\x5e\x8e\xa1\x67\xfb\x1e\x51\x9f\xb5\x97\x5d\x16\x10\x9d\x46\x44\x25\x68\x7f\x4b\x8a\xe5\xae\x87\xd8\x58\xe2\x99\x69\xe1\x73\xdb\x96\xee\x7a\x97\xf0\x2c\x66\x6e\x44\xe3\x1c\xbb\x28\xa2\x69\x97\x6a\x45\x35\x3b\xfa\xc8\x40\xee\xc2\xc6\xe7\x76\xd8\x04\xf8\xdb\x7f\xfe\x3a\xae\x5d\xfe\xfb\x7f\xe7\x56\x2f\xff\xf9\x2b\x2c\x73\x3c\x37\x23\x36\xc3\x8e\xb0\x0c\xd3\xc0\x17\xd7\x42\x47\x58\x9f\xc1\xec\x39\xd3\xe7\x78\x28\x9b\x0b\x43\xf5\x76\xac\x79\x1b\x19\x23\x1c\xce\xc6\x4e\x43\xeb\x4e\x12\x3b\x68\x23\xac\x5e\x4f\xb7\xf6\x7b\x7f\xba\x7a\xb0\xb6\x43\x09\x57\x1c\x17\xe1\x9b\x9b\x57\x2f\x77\xa5\x3a\xac\x25\xb5\x2f\xec\x93\x06\x77\xa4\x82\xbb\xa4\xb7\xe5\x11\xcf\x63\x22\x66\xf1\xdc\x45\xa6\x2e\xe6\x1f\x71\x98\x8c\x8c\xb4\x4f\x63\x33\x76\xfd\xe1\x45\x46\xaf\x84\x85\xf3\xac\x66\x90\x8b\x08\xcd\xb4\xaf\x9c\x16\x11\x19\xb1\x2d\x5e\x61\xaf\x50\x6d\x49\xcd\x36\x51\xa8\xb6\x6b\x27\x27\x46\x5e\x14\x6d\x11\xbf\x82\x57\xe2\x85\x7c\x79\x25\xc0\x2b\x41\xbf\x12\x2f\x2f\xd1\x54\x5c\x3a\xa8\xb9\x95\x92\xf0\x61\xcd\x81\x9a\x17\x30\xd4\x0d\xdd\xd5\xd1\x6c\xe8\x17\xce\xfc\xee\xbc\xcf\x5e\x5e\x89\x17\x8a\x04\xc2\x57\x12\x7e\x25\x69\x02\xf0\xdf\x28\xfe\x1b\xc3\xfd\x4e\xd2\x14\x23\xc0\x04\x49\xed\x88\x8e\x05\x9d\x1a\xfa\x2f\x44\x9c\x4c\x84\xbc\x19\xba\xa6\xae\x5e\xc6\x24\x40\x96\xbb\x05\x13\x3d\x5c\x38\xf8\x23\x30\x0d\x75\xe3\xd3\x4b\x18\x17\xf1\x31\x0c\xc9\xf0\xb7\xe0\x63\x86\x48\x55\x87\xe1\xad\xac\x8b\x38\x58\x86\xa5\xa9\x5b\x70\xb0\x43\x3f\x0c\x1e\x16\xe4\xde\x11\xe8\x45\x14\x90\x26\xa9\x9b\xd8\x80\x07\x14\x7b\xa7\x17\x03\x05\xcf\x00\xf6\x16\x14\xdc\x70\x6e\xaa\xba\xb6\x89\xcf\x05\x0f\x20\x75\x13\x0a\xfe\x84\x8b\x7d\xe5\x73\x0c\x3c\x1c\x03\xe9\xdb\xf0\xec\x26\x1d\x8d\x46\x36\x1e\x21\xd7\xb4\x2f\xeb\x94\x40\x02\x52\xb8\x05\xbc\xe0\x81\xf7\xb7\x39\x87\x6b\xd5\xbe\x0c\x9d\xe2\xc0\x4d\x53\x0d\x48\x0f\xfc\x7e\x16\xbc\xe4\xf6\x32\x02\x56\xe0\x6e\x92\x0e\x00\x41\x04\x1f\xd9\xd2\xce\x01\x5c\x46\x24\x40\xe1\x36\x4e\xa8\x93\x89\xde\xe7\xa7\xfe\xbb\xb6\x97\x30\x01\x92\x63\x99\x9b\x66\x04\xd0\x3e\x3b\x1f\x59\xfd\xc5\x19\x07\x80\xe2\xe0\x6d\x9c\x30\x43\x4d\x5f\x1f\xde\x3b\x30\xe7\xb3\xa1\xa6\xe3\xd9\x45\xd7\x08\x00\x0b\xc0\x4d\x4e\x18\xb0\x87\xe3\x96\xc3\x36\xf8\xfa\x0a\x1b\x90\xbb\xcd\xcd\x03\x38\xd4\x8d\x11\x76\xdc\xe1\xe7\x8d\xf6\x2b\xa8\x38\x81\xbf\x6d\x46\xb8\x93\x08\xef\x9d\x68\xa0\xcb\xc1\x04\x50\x24\x49\x33\x7b\x24\x11\xb1\xf6\xe2\xf1\xfc\xad\xc1\xf6\xd3\x11\x7d\x30\xf6\xe7\xd2\x14\xdd\xc8\x52\xf9\x8e\xc4\x52\x62\xa5\xdf\xc9\x76\xf2\xb4\x38\x28\x8a\xfd\x7e\xae\xdf\xef\x52\xdd\x7c\x7f\x30\x68\x42\x69\xd0\x97\xda\xf5\x52\xa6\xff\xd6\x12\x7b\x90\xeb\xd7\x98\xb0\x84\x22\x91\x50\x3b\x24\xa9\x7e\xae\x51\xec\x75\xcb\xbd\xda\x20\x9f\x2d\x77\xdb\xa5\x5e\x97\xcd\xe6\xf2\x22\x5d\xae\x0e\x06\x54\xb1\x51\xaa\x70\x35\xb1\x28\x76\xa4\x46\xb6\x03\xcb\xf5\x74\x4b\xca\x76\xfb\xb5\x6a\x6c\x24\xb4\xc7\x49\xbf\x94\x83\xcd\x2a\x53\xab\x16\xa4\x7a\xba\x52\xcd\xa6\x38\x9a\x12\x19\x1a\xbe\xb1\xf5\x6a\xa6\xd5\x2c\xe7\x7a\x25\x2e\x97\x2a\xa7\x2b\x8d\x72\x21\x5b\x63\x5a\x9c\x34\xe8\x75\x3b\xb1\x91\x30\x1e\x27\xcd\xfa\x20\x5f\x28\x53\xe9\x02\x9d\xad\x36\x98\x54\xbf\x9c\xad\x54\x33\xe5\x6c\xb1\x53\xad\x77\xa8\xfc\x80\x7e\xab\x64\x5b\xf9\x5a\xb5\x93\x96\x6a\x62\xab\xc7\x35\xd2\x5c\xad\x4f\xe5\x5f\xee\x2d\x27\xd9\xad\x2e\xaf\xcc\xf5\xbe\x04\xef\x58\x3d\xfb\xbb\x83\x2f\x97\x5a\xbc\x12\xcc\x2b\xe1\xda\x0b\x1c\x43\x03\x3f\x17\x51\xdc\xad\x7f\x7e\xf2\x13\xd4\x3e\xc5\xc6\xaa\xee\x0e\xd1\xcc\x1a\x23\x63\x31\x67\x76\x36\xd3\x69\x65\x5e\x1e\x54\xcc\x7b\xca\x06\x9e\x22\xe7\x93\x54\xcd\x5b\x54\xc7\x93\xf2\xb9\xaa\x81\x7b\xc5\x7c\xa8\x1c\x08\xc8\x99\x66\x68\x56\xe0\x18\x8a\x81\xac\x47\x14\xb5\x53\xe5\xff\x7e\x71\xed\xc5\x6e\xc8\x97\x6f\xc4\x97\x7b\x2d\xf4\xcb\x2b\xf1\xe5\x58\xcb\xb2\x83\xd4\x69\x65\x8e\x0f\xdd\x8d\xe5\x3d\x0c\xcf\xf3\xb1\x87\x5f\xd3\xe2\x91\x70\xe7\x84\x7f\xf9\xbf\x28\x0b\x3e\x27\x09\x92\x84\x0c\xc7\xb1\x00\x0a\xbe\x24\xe8\x7f\xaa\x24\x28\x96\x83\x02\x4f\x72\x3c\x47\x47\x49\xe2\x4e\x87\xfa\x3f\x25\x09\xea\x95\xa0\x00\xc3\x31\x3c\x43\xb2\x1c\xe7\x4b\x82\xf4\x24\x31\xd3\xe7\xba\xbb\x23\x82\x21\x49\xf2\x77\xd2\xbf\xfe\xa7\x78\xdb\x4d\x2c\xb7\x5b\xd2\x70\x34\xc5\x83\xb3\xbc\x09\x14\x45\xd3\x1c\x45\xd2\x90\x67\x7f\xdf\x19\x06\x4f\x72\xff\x53\x3c\xee\xd8\xa2\x78\x9e\x11\x48\x56\xe0\x7d\xef\x06\x3d\x16\xd1\xc2\x1d\x0f\x6d\xfc\xbe\xd0\x6d\xac\x0e\xb5\x19\x1a\x7d\xf9\xe6\x79\xe3\xdb\x41\x03\x92\xdc\x8b\xef\x04\xf4\xd2\x54\x76\x39\xdd\xbd\xb0\x79\x96\x17\x04\x9a\x87\xbc\xef\x89\xfc\x89\x71\x5c\x64\xbb\xba\x31\x1a\xca\x68\x86\x0c\xc5\x13\x34\x08\xea\x5f\x6c\x0c\xcc\x29\x06\xca\xdf\xdf\xf9\xef\x17\x3f\x3d\xf9\x04\xf7\xd3\xf4\x1a\xc8\xd5\x97\xf8\xa6\x89\x08\xe2\xdb\xe9\x9e\xcf\xd2\x0a\xeb\xa3\xf1\x0e\x21\x78\x25\xbe\xf8\x51\x6c\x38\xc5\x9b\x1f\x66\x02\x1e\x55\x0c\xc5\xed\xb5\xe3\x7b\xc9\x79\x8f\xe1\xbb\xcb\x39\xc4\x51\x4c\x39\xdf\xe9\xc9\x6f\x71\xa3\x3e\x55\x90\xdf\x9b\xca\x77\x93\xb3\x8f\xe1\xbb\xcb\x39\xc4\x51\x3c\x39\xdf\xbb\x76\xf8\xbf\x18\xb9\xe0\xb9\x8a\xca\x7b\xd7\x88\x87\xaa\xca\x03\xb3\xc2\x2b\xf1\x82\x29\x1e\xd2\x02\x45\x93\x32\xcb\xf0\x9a\xa0\x22\xc8\x41\x92\x46\xbc\x00\x21\x2b\x43\xa0\xc9\x14\xad\xb1\x34\x09\x04\x8e\x41\x2c\x2f\x2b\x2c\xa9\x21\x85\x53\x11\x42\x34\x27\x23\x9a\xf2\xf2\x5d\x8d\x62\x59\x8d\x64\x58\x16\x68\x10\x69\x18\x23\x0a\x20\x52\xe0\x18\x1a\xd0\x34\x49\x6b\x10\x42\x46\x26\x55\x86\x43\x00\xd0\xac\xca\xd2\x58\x51\x14\x88\x00\x2b\xb3\x24\x4d\x6b\xf4\x8b\xa7\x37\x64\x28\x73\x86\xdf\x68\xf6\x1b\x0b\xc3\x09\xb5\xff\x98\xfa\x9d\x61\x69\xc8\x83\xab\xad\x34\x0f\x59\x86\x23\x59\x08\x99\x57\x02\xc0\xdd\x7c\x7e\xba\xfc\x87\xde\xff\x81\xf6\x8f\x9f\xaf\x04\xd8\x65\x2d\xa2\x28\x8a\xe9\x0d\x3f\xeb\xaf\x9a\xdd\x3c\x65\x27\xa0\x9e\x1b\xcd\xc8\x4a\xbb\x92\x11\xe6\x6f\xe5\x4c\x07\x8f\x25\x00\xda\x5c\x65\xfd\x9e\x95\x3b\x99\xfa\x56\x9c\x1b\xea\x36\x83\x4a\x9b\xda\xc2\x6a\xb4\x39\x48\xe7\x40\xbb\xdd\x02\x34\x50\xdd\x55\x75\xa1\x4b\xad\x56\x4f\x42\x5c\x4a\xaa\xf6\x94\x1d\x68\xb1\x5f\xef\x56\x64\xf1\x78\xd1\x5b\x61\x3c\x17\x5b\x56\x59\x70\xc5\xee\x7a\xea\xae\x33\x74\xbf\x55\xb3\x68\xdd\x5d\xb7\x96\xd2\xbc\x02\xc5\xce\x74\x95\x6a\x31\x52\x73\x2e\x14\xe4\x05\x3d\x19\xf5\x97\x0b\xbd\xdd\xc8\xae\x53\x58\xe0\x66\x95\x91\xde\x96\xab\xdd\x84\x5d\xe9\x6b\x52\x2e\xe1\x8a\xdd\xa9\x94\x1e\x35\x76\x90\xa7\x55\xa6\x8c\xb6\x16\xd5\x08\x60\xab\x9b\xe2\x99\xeb\x4d\xec\x03\xa6\x21\x8a\x19\xb2\x78\xae\xf9\xa7\xbe\xf6\x5a\x15\x61\xf8\x61\x5b\xe0\x9f\xa3\xc7\x2f\x90\x14\x54\x41\x15\x38\x19\x20\x5e\x26\x29\x15\xcb\xbc\xca\x62\xcc\xf2\x34\x50\x05\x85\x57\x48\x06\x91\x24\x2f\x20\xa0\xa9\x34\x83\x35\x56\xd1\x54\x2c\x28\x90\x64\x54\x41\xc3\x1c\x60\xfd\xfc\x11\x9c\x55\x6b\x36\x52\xdb\x21\x10\x04\xe6\x6a\xab\x9f\x10\xd2\x3c\x0d\xf9\x67\xd8\x02\x95\x56\x8d\x37\xbc\x7e\x2f\x8b\x2e\x64\x00\x66\x07\x15\xd5\x28\xac\x24\x53\xd4\x51\x5e\xa8\xd6\x04\x25\x89\x8d\x5c\xaa\x6a\x24\x94\x6e\xcd\xe2\xf3\x53\x69\x59\x49\x4c\x13\x89\x39\x1a\x64\xa8\x56\x7e\x5e\x7b\x1f\x27\xc6\x1c\x37\xd8\xd4\xb9\xb1\xca\x5a\x0a\x2b\xab\x99\xc5\x7a\xe4\xcd\xdd\xce\x16\xd0\xea\x38\x97\x80\x73\x37\x6e\xad\x94\x5a\x8f\x16\xfc\x06\x9b\x6c\x3f\x89\xa6\x9b\x81\xb1\x19\xcc\x36\x76\x47\xe6\x46\xc5\x9e\x94\xd8\x6a\xe9\x51\x9a\x4a\xdf\x68\x0b\xa3\x7f\x8a\x2d\x80\xf8\xb6\xc0\x3d\x47\x8f\x5f\x58\x8d\x66\x00\x56\x55\x4d\x26\x35\x0a\x31\x90\x06\x1c\xa2\x05\x41\x46\x32\x84\x32\x49\x63\x05\x73\x3c\xc9\x53\xbc\x00\x38\x00\xb1\xa0\x92\x98\x65\x69\x0a\x01\x8a\x66\x14\x99\x24\x95\x4b\xb6\x10\xad\xed\x1c\x27\x90\xd1\x96\x72\x68\xdd\x6f\x09\x00\x92\xa3\x2e\xd8\x82\x10\xd3\x14\x00\x4f\xe6\x5d\x9a\xcb\x6c\xac\x5c\xa5\x6f\xb2\x73\xe8\xce\x9d\x0c\x57\xc3\xe2\xc8\x9c\xf6\xb3\x0b\xa3\xc1\x76\x2b\xef\xd2\xa4\x5d\x16\x2b\xc9\x94\xdb\x93\x79\x91\x5d\x4f\xc8\x36\x83\xb7\x69\xcd\x5c\x2f\x61\x43\xd2\xdf\x18\xc9\x58\xe7\xeb\x1b\xbd\x53\x5f\x5a\xef\x8b\x9c\x51\x9e\x7a\x53\xe7\x99\xc2\xe8\x38\x95\x54\x96\x5c\xf7\xb8\x12\x9c\x55\x07\x76\xbf\xb9\x5d\x70\x2a\x9b\xdf\xa4\x3a\x46\x7d\xb6\x98\x57\xb3\x0d\xdd\xaa\xa6\x56\xad\x46\x55\x5c\x83\x82\xd9\x76\x8a\xf9\xde\xdb\xb2\xb2\x59\xbc\x8f\x58\x71\x2a\x34\xf4\x2e\xa8\x83\xde\xa2\x29\x5b\x56\x91\xe1\x95\xb7\x5c\xed\x2d\xc3\xb6\x29\xd6\x83\xaf\x9c\x31\x85\x9a\x74\x4e\x9d\xfe\x39\xa6\x00\x9f\xa3\xc6\x2f\x80\x47\xcc\xee\xb9\xc6\x92\x80\xa4\x54\x46\xc5\x98\x95\x49\x01\x51\x94\xc6\xb2\x0c\x8f\x21\x4b\xb3\x94\xc2\x61\x0e\xd1\x8c\xc2\x6b\x18\x6a\xb4\xc0\xb1\x00\xf3\x1a\x60\x38\x05\xc2\x4b\xa6\x40\x47\x2a\xbb\x40\x41\x18\xbd\x44\x3a\xb4\xee\xf7\x84\x68\x8e\x83\x17\x4c\x81\x8f\x69\x0a\x6b\x7d\x9a\x99\xf5\x81\xd8\x28\x77\xe8\x45\x6f\x35\xd7\xcb\xa0\x5b\x60\x67\xd5\xd6\x3a\x81\x27\xed\x42\x72\xce\xb3\x6a\x13\xd6\xb3\xf9\xf5\x7c\xd1\xdf\x56\x37\xdb\x3c\x8f\xc7\x56\x87\x5a\xb7\xaa\xed\xc4\x7b\x2f\xb1\x4d\x8d\x9b\x70\x59\x4b\x73\xd3\xf7\x91\x35\x9a\xbf\xf7\x6d\x92\xa2\xfd\x50\xe0\x99\x42\x40\x3b\xb3\x16\xa5\x2d\xa7\x95\x1a\x57\xeb\x25\x8a\xef\x60\x9b\x1d\x2c\x37\x05\x8b\xb4\xaa\xb0\x54\x81\x19\xec\x56\xe6\xeb\xda\xe4\xad\x5b\x4b\x97\xd4\xe4\xa8\x53\x5b\x15\x16\xe3\x46\x67\xde\xb1\xdf\x4b\x6d\x59\xea\xea\x39\x68\xf1\xb2\x30\x95\x53\x22\xb7\xed\xe5\xa5\x69\xbe\xba\xcc\x4c\xf3\x1e\xe4\xc1\x19\x53\xa8\x8c\xce\xa9\xd3\x3f\xc7\x14\xd8\xe7\xa8\xf1\x0b\x29\x6b\x34\xa2\x48\x12\xd3\x0a\xe4\x78\x52\x55\xa0\xc0\x0a\x48\x80\x3c\x84\xb4\x06\x76\xc1\x86\x57\x64\x84\xa0\x22\xc8\xb4\xaa\x70\x2c\x52\x54\x85\xe3\x21\x52\x21\x2d\xd0\x2c\xc7\x5f\x32\x05\x2a\x4a\xd9\x59\x92\xe5\x21\x7f\xb1\x55\x78\x39\x6c\x0a\xd2\x90\xe1\xc9\x0b\xa6\xc0\xc5\x34\x85\xd5\x72\x6b\x8e\x32\x93\xb5\x31\xaa\xae\xad\x1e\x9a\x99\x6f\x13\x7e\xe0\xa4\x27\xe5\xf7\xf9\x46\xae\x2b\x2a\xda\x2a\x38\x67\xf7\x6a\xed\x2e\xa3\xb5\xcd\xa9\x59\x31\xf2\x2a\x35\x97\xdb\x13\x23\x21\x59\x93\x12\x90\x40\x75\xbc\x11\x60\x3b\x25\xb4\xed\x05\x69\x09\x54\xbb\x41\x67\x0a\xde\xd4\x79\xa6\x10\x98\xca\xf5\xac\xb8\xd8\xf4\x74\x4c\xaa\xa0\xbc\xed\xa4\x9b\xa0\xc4\x94\x33\xd4\x28\x41\x96\x16\x62\x7e\x29\x17\x13\xad\xd1\x3c\x97\xdf\x8c\x16\xe5\x6e\xa3\x25\x0c\xe8\xb5\xda\xc6\x5b\x7e\xa9\xe5\xa1\x64\x5a\x80\xcd\x65\x9d\x77\xde\x04\xa5\x6d\xd2\xb4\x8b\x53\x24\x67\xde\x35\xac\xae\x3c\xed\xef\x9c\x31\x85\x12\x7f\x4e\x9d\xfe\x39\xa6\xc0\x3c\x47\x8d\x5f\x58\x86\xe3\xb1\x42\x31\x3c\xa7\x91\x1a\xa0\x78\x5e\x56\x49\xc8\xf3\x2c\xc9\xb1\x80\xe7\x00\xe4\x55\xcc\x2b\x18\x21\x4a\xd6\x18\x61\x97\x8d\xb3\x32\xa9\xaa\x00\x6a\x2a\x60\x15\x5e\xa5\x2f\x99\x42\xa4\xdf\x67\x29\x9a\xa6\xa3\x0d\xe5\xd0\xea\xef\x21\x43\x01\xf0\x97\x12\x67\x18\x77\x81\xd4\x64\xb8\x74\x2b\xcf\xd7\x25\x53\x17\x52\xe6\xb8\xa1\x36\xc7\x6b\x54\x85\x15\xf8\x5e\x4a\xb6\xe4\x81\xd6\x5b\xd1\x4d\x59\xc8\x2a\x93\x36\x43\xad\x37\xad\xfe\x56\xea\xa7\xd7\xd5\x04\xbf\xca\x92\xdd\x2e\xa9\x4e\xa6\x25\x4b\xd8\x26\xab\xb0\xb9\xc5\x63\x7e\x40\xaf\x07\x94\xd3\x38\xe6\x0a\x6f\x81\x5c\xa1\x5c\x2e\xd5\xe5\x8a\x39\xc9\x27\x9a\xcd\x44\xbb\x95\xca\x94\x72\xa9\xa4\xbb\xd0\xf2\xd4\xbc\x0c\x28\x45\x49\xe7\x6d\x50\x34\x28\x6e\x53\xcf\xf4\x67\x94\xfa\x56\xaf\xeb\xb5\xb7\x25\x6e\xa8\xa9\x66\xc6\x32\x17\x74\x4e\xac\x4c\x60\x39\x0d\x67\x4e\x53\x58\x25\x9d\x06\x39\x6e\x28\x39\x0f\x55\xe3\x8c\x29\x14\x07\xe7\xd4\xe9\x9f\x63\x0a\xf4\x73\xd4\xf8\x05\xca\x08\x2b\xbc\x4a\x71\x32\xa7\xa8\x50\x53\x59\xa0\xb1\x94\x4a\x09\x80\xe3\x90\xcc\x91\x02\x40\xaa\x4a\x41\x5a\x43\x0c\xa3\x42\x48\x41\xa8\x69\xb2\xc0\x32\x98\xc4\xb2\x06\x38\xec\x39\x6f\xef\xdf\x19\xad\x26\x23\x95\x9d\xe6\x29\x3e\x32\x57\xf8\x68\xdd\x1f\x35\x00\x9e\xbf\x94\x37\xb3\x71\xd3\xe6\xc5\x62\x53\x2d\x72\x5a\x55\x16\x3a\x5a\xc7\x2d\x35\x55\xe8\xae\xa6\x88\x6e\x0d\x92\x96\x04\xe6\xc5\x79\x92\x9b\x75\x98\xda\x72\xad\x59\xe3\x5e\x46\x20\xcb\xd5\x52\x57\xa2\xb8\x55\xce\xe8\x8f\x8c\x39\x3f\xab\x2c\x6b\x79\x2d\x53\xc6\xdb\x44\x39\x03\x67\x78\xea\x8c\x9b\xa8\xe2\x4f\x9d\x67\x0a\x81\x65\x4a\x7b\xb6\x9c\xa4\x7a\x98\xab\xe8\x46\x53\x30\xb8\x8e\xe9\xa0\x49\xba\xb4\xee\x58\xa3\x46\x25\x95\x92\xc7\xf3\x2c\x94\xf3\xe2\xb2\x9e\xcf\x75\x93\x29\x50\x68\x91\x30\x93\x20\x95\x91\x5a\x37\x0b\xb4\xd0\x72\x4c\xd3\xec\xf4\x38\x73\xb1\x98\x90\x9c\x33\x53\xca\xc9\x55\x21\xdb\x2f\x7b\xa6\x56\x39\x63\x0a\x79\xf2\x9c\x3a\xfd\x8f\x9b\x02\x15\xdf\x14\xa8\xe7\xa8\xf1\x0b\xa4\x55\x81\xd7\x58\x1a\x62\x0c\x79\x15\xc8\x14\x27\xb3\x32\x2f\x68\x14\x8d\x34\x96\x06\x40\xe6\x58\x28\x20\x8a\xd1\x90\x06\x18\x92\x46\x2a\x29\xb3\x94\x0c\x69\x5a\x26\x39\x19\x0b\x3b\x18\xb4\xbf\x4f\xfe\x49\xab\x19\x21\x52\xd9\x59\x92\x87\xd1\xa6\xb0\x6b\xdd\xad\xde\xfc\xc3\x1e\x86\x15\x2e\x65\xcd\x74\x5c\x4b\xa8\xbf\x4d\x40\x75\xc1\x9a\xa4\x5c\xe4\x7a\x8c\xb1\xa9\x2d\x3b\xeb\x1c\xdd\xb5\xcc\x69\x62\x99\x15\x6b\x6e\x1a\x94\xa8\x0a\x97\xe2\xe0\x5b\x87\x33\xea\x35\xb3\xc0\xb5\x74\x3b\x2f\xd5\x40\x0b\x41\xae\xb7\x98\xaf\x4a\x0d\x48\xd5\xad\x46\x6e\xb6\x2c\x2e\x37\x9b\x06\xdf\xc8\x49\xbe\x3f\xf6\x2c\xc1\x53\xce\xc2\xc7\x7f\xa2\x77\xef\x1c\xef\x57\x62\xbd\xe1\x27\xd9\xe2\x04\x26\xac\x04\x2a\x70\xc5\xa5\xdc\xd2\xf2\xba\x83\x3a\x1d\xb1\x3f\xde\x2a\xb9\x44\x92\x1a\xf4\x8a\x12\x25\x1b\x1a\xb3\x5d\x74\x79\x9d\x99\x08\xcb\xce\xb4\x36\x65\x55\x57\x5b\x1b\xb9\x5e\x52\x56\x52\xb0\x92\x4f\xbb\x99\xfa\x26\xe9\xf6\xd2\x45\x71\x94\x1e\xe7\xcb\x6f\xcd\x29\xf0\xf1\x9f\xb1\x14\xc9\x39\xa7\x6d\xff\xe3\x96\x42\xc7\xb7\x14\xf0\x1c\x2d\xf7\xde\x16\x39\x1c\x1d\x00\x81\x23\xbf\x92\xe0\x2b\x09\x08\x92\xfc\xe6\xfd\x8b\xd4\x66\x1e\xb0\x42\xb4\x25\xf0\x60\xa7\xe9\x0c\x25\x30\x02\xe4\x28\xe1\x52\x52\x7c\x5e\xcf\x7d\x82\xfe\xee\x29\x89\xbe\x52\xfd\x92\xce\x6c\x92\x9b\x56\x29\xc5\x65\x8c\x8c\x90\xa7\xc8\xf5\x24\x95\x70\xc8\x91\xeb\xac\x0a\xab\x2d\xe8\xab\xad\xde\x00\xa5\x8a\x28\xeb\x05\x13\xe9\x8c\x0a\x9f\xbf\x0e\x2a\x2c\x8a\xa9\xe9\x0f\x60\xe4\xa9\xd7\xf1\xbc\xe0\xca\x91\x5c\x8c\xaf\x31\xdc\x7b\x42\x17\xf1\x92\x4d\x64\x51\x57\x84\xbd\x5d\x01\x43\x85\xc0\x50\xf7\x81\xa1\xc3\x85\x55\xf7\x81\x61\x42\x60\xee\xa4\x86\x0d\x17\x37\xdd\x07\x06\x86\xc0\xd0\xf7\x81\xe1\x42\x05\x46\x77\x32\xc5\x87\x6a\x79\xee\xa4\x46\x08\x97\xcb\xdc\x07\x06\x90\xe1\xda\x98\x3b\xe1\x84\xaa\x46\x98\x3b\xc1\x50\xa1\x72\x9a\x3b\xc1\x84\x6a\x2b\xee\xa5\x26\x54\x12\x72\xe7\x54\x01\x36\x54\xf1\x70\x27\x18\x78\x0a\x86\x79\xce\x87\x56\x9e\x52\x2f\x7b\xf9\x2d\x40\x3f\xda\xc6\x2b\xa0\x8d\xf8\xde\xc8\xc3\xde\x37\xe0\xe3\x82\x7e\xf2\x78\xc3\x78\x39\x32\x77\xac\x9d\xc4\xf8\xa1\xca\xa6\x57\xe2\x69\xc5\xa8\x0b\x77\x6c\xda\xfa\x76\x47\x8f\xf7\x0d\xca\x9f\xa2\xac\xef\x3b\xbc\x72\x70\x6e\xb2\x82\x61\xe4\x78\xc3\xff\x4f\x4c\xd6\x4e\xe3\xff\x41\x73\x75\x12\x64\x8f\x37\xd4\xf7\x9d\xab\x47\x6a\x9b\xff\xc1\x73\x75\xb2\x92\xf9\xb8\x81\x81\xe2\xd8\xc8\xb2\xe9\x9f\xcc\xe0\x7e\x8a\x19\x7b\xf2\x7b\x51\x67\x66\xec\xb4\x00\xfc\xe3\x86\x3c\x37\x63\x51\xc5\xe0\x3f\x99\xf9\xfd\x14\x33\xf7\xe4\x97\xcd\xce\xcd\xdc\xc9\x3a\xfd\xe3\xc6\x5f\x70\xb0\x7e\x75\x2d\x76\xbd\xea\x73\xe7\xcb\x37\xe2\x3f\xe0\xaf\x57\xe2\xf8\x64\xe8\x3d\x3b\xad\x82\xff\xf2\xd7\x8f\xf2\x13\xa7\xb9\xc1\xc7\x0d\x19\x45\x3b\x75\x81\xf6\x7d\x99\xfd\x8f\x23\x3e\x98\x49\x7c\xfc\xe6\x03\x45\xcd\xda\xc2\x50\xf7\x4a\x74\xe7\xeb\x80\x9e\x42\xfa\x2f\xe5\x3d\x6a\x55\x31\x2a\xac\x1f\x7c\x6f\xf1\x16\xb1\xed\x53\x9e\x8f\xdf\xcc\xf7\x15\xdb\xfd\x5e\xe4\x27\x13\x9b\x9f\x9b\x7d\xfc\x26\xbf\xab\xd8\x1e\x08\x9b\xdf\x5f\x6c\x57\x12\xbd\x33\x5f\x41\x8c\x93\xe4\x5d\x87\x7a\xfd\x83\x70\xf7\x26\x93\x91\x1f\x92\x39\xbb\x99\xc7\x44\x67\xfa\x57\x01\x51\xe1\xcc\xf4\x5e\x40\x74\x38\x6b\xba\x17\x10\x13\x02\x74\x37\x6b\x6c\x38\x37\xb8\x17\x10\x0c\x01\x8a\xda\x9d\xb9\x0a\x28\xbc\x02\xbe\x9b\x35\x3e\xb4\x30\xbb\x9b\x22\x21\xbc\x4e\xb8\x17\xd0\xe9\xf6\x1e\xf9\x08\x24\x70\x1a\x43\xa3\xb6\xd4\xae\x03\xa2\x42\xc1\xf8\x6e\x40\xf4\x69\x78\xba\x9f\x22\xe6\x14\xd0\xdd\xd3\x76\xb2\xd1\x47\x3e\x42\x11\x3c\x05\x44\x3d\xeb\x3b\x90\x4f\xd9\xec\xbb\xf6\x25\xac\x5b\xb6\xfb\x22\x3f\x84\xf8\x04\x1f\x1d\xfc\x8a\x93\x82\x05\x4d\x01\x80\x15\x14\x8a\x45\xaa\x02\x29\x45\x80\x3c\xe4\x04\x4a\x51\x19\xa0\x91\x50\x20\x79\x8a\x27\x65\x5e\x10\x38\x66\xe7\x06\x78\x16\xaa\x32\x4d\xcb\x48\xc3\x1c\xab\xe2\x97\x57\xc2\x5f\x37\xde\xbf\x6c\x0d\x1c\xb4\x73\x87\x23\xc6\xc8\xb7\x3b\x28\x70\xa1\x1a\xfe\xd0\x7a\x12\x21\xfc\xb3\xc9\x72\x8f\xc9\x92\x78\x5c\x83\xe2\x46\x48\x93\x75\x27\x27\x8d\x96\x0a\xe0\x00\xe8\x08\xfc\x60\xc2\xcc\xcb\xd3\xb9\xd0\xe0\xd8\x69\x9a\x5e\x8a\xde\xd9\x9e\x78\x38\x39\xcf\x86\x8e\xce\x52\xc7\x9f\xfe\xbb\x4c\xf2\x7c\x34\x07\x5d\x4a\x1d\xb1\x5d\x30\x7f\x07\x78\x56\x51\x72\xc0\x5d\x4f\x5a\x83\xd2\x9b\xb0\x92\x46\x66\x2b\x85\x70\x8f\xef\xe8\x59\xef\x55\x8b\x54\xb7\x5b\xfd\x5c\x68\xae\xcd\x1b\x65\xcc\x7b\xe0\x5b\x48\xcb\x5b\xc9\xad\x05\x80\x9b\xe5\x41\xa5\xb9\x94\x45\x63\x2d\x8c\x1a\xd5\x76\x5f\x2d\xf7\x98\xcc\xdc\x2c\x98\xda\x74\x64\xe6\x12\x93\xe2\x2a\xd9\x9f\x24\xa7\x89\x2a\xdb\x5b\xb6\x26\xef\x39\x3b\x97\xa5\xe9\x45\x0a\x96\x8c\x4c\x62\x25\x6a\x8d\xc2\x58\x23\x93\x99\xd9\xda\x4a\x35\xfe\xfc\xf3\x25\x78\x4e\x9b\x0b\x9c\x6f\x1e\x7f\xe6\x03\x14\x1d\xfb\x1f\x4b\x0b\x32\xbb\xff\xd2\x81\x4e\xae\x3c\xea\x37\xa1\xc4\x99\x99\x32\x59\x6e\x24\x56\x83\x56\x5a\xd8\xf6\x97\xfd\x6e\x9b\x5e\xeb\x75\x7d\xb0\x68\xc9\x20\xb3\x3c\xf0\x26\xa6\xbb\xe2\x52\xcf\x1c\x65\x1b\x96\x83\xdf\xf4\xe9\xf1\xa9\xec\x9f\x88\x3f\x3c\xb7\xb1\xf0\x8b\xde\x39\x71\xe5\x28\x2f\xff\x0c\x78\x81\xd2\x72\xb7\xff\x46\x65\x66\xfd\x1e\xb2\xbb\xb0\xb3\x5e\xc9\x3d\x3a\x57\x2d\x8e\x2c\x83\x16\x5b\xe9\x71\x21\x6b\xb1\xf2\xba\x55\xe8\x79\xe3\xb3\xdd\x0e\xb9\x17\xfc\x8d\xba\x19\xb8\x8a\x9d\x74\xa2\x71\x9e\x66\x49\x3c\x2d\x05\xf9\xbb\xe9\x0b\x5e\x01\x5d\x0c\xcb\xd2\xbb\xd2\x60\x91\x52\xf3\x66\x7b\x31\xaa\x2c\x1b\x6e\x86\x4b\x8d\x0b\x65\xba\x8a\x05\xb5\x5b\xd7\x72\x85\x44\x51\x67\x8b\xcb\x4e\x2d\xf1\x26\xba\xdc\xea\x80\xa6\xb8\x3a\xc2\x0b\xa3\xdc\x57\x8c\x45\x1e\xe9\x07\x64\x75\x37\xfe\x42\xe5\x3e\xfc\xbe\x2c\xfe\xfb\xbd\x8c\xde\x4b\x56\xbc\xcf\x90\x1e\x4a\x48\xfc\xff\xfd\x5d\x5d\x40\x46\x55\xb1\x44\x44\x0b\x8d\x42\x88\x24\x65\xc4\xd2\x02\xa6\x18\x19\x09\x0a\x29\x23\x48\x69\x2c\x49\x03\x5e\xe5\x15\x0e\xf0\xa4\x46\xa9\x90\x63\x39\x45\xe1\x20\x16\x84\xdd\xda\x91\x55\x58\x0c\x04\x4d\xdb\xf9\x66\xee\x79\xd1\x02\x5e\x8b\x16\x1c\x0f\xe8\xe8\x57\x42\x76\xad\xd4\x4b\x68\xf5\xfe\x68\xb4\x08\x9b\xe1\x13\xa3\x45\x00\x74\x20\x5a\x80\xb6\xd8\x48\x2d\x92\x94\xc6\xf5\xf3\x4e\x52\x71\xc5\x22\xdb\xe3\x06\xee\x94\x99\x2c\x1b\x29\xd3\x52\x6b\x24\xbb\x9d\xb6\x1a\x66\x8b\xb7\xf4\x05\x98\xbf\xcd\x93\x6e\x7b\x99\x69\xf7\xa5\xf7\x64\xa3\xb3\xd0\x2c\x37\x29\xf1\xd5\xd4\xa8\xe4\x56\x2d\xa5\xd8\x5f\x54\x96\x2c\xaa\xa7\x57\xcf\x8b\x16\xa9\x40\xb5\xf2\x3d\xde\x5a\x11\x4f\xe1\x05\xae\x58\xde\xfa\x89\xf8\xef\x8a\x56\x01\x0f\x97\x3d\xca\xe7\x67\xf2\xc6\x1f\x3c\xfc\xa4\xd1\xec\x6c\xb4\xc8\x1d\xdb\xef\xf1\xd6\xe5\x4e\x08\x5e\xe0\x8a\x15\x2d\x9e\x18\xad\x6e\xc1\xbf\x8f\x16\xdf\xcb\xe8\x9f\x1c\x2d\x64\x08\x21\xa2\x58\x9a\x06\xb4\xa6\x70\x88\x54\x29\x06\x60\x4c\xf1\x24\x64\x30\x56\x38\x1e\x21\xc4\x62\x59\x25\x11\xa7\x90\x08\x73\x1a\xcf\x52\xac\x80\x79\x52\x43\x2a\x49\x09\xda\x8b\x77\x7c\xf3\xac\x68\xc1\x5e\x8b\x16\x02\x75\xa1\x28\xf8\xa3\xf5\x64\x67\xe5\xd1\x68\x11\xf6\x68\x9f\xa2\x85\xfd\x5e\x85\x65\x5c\x43\xa3\xc9\xba\x82\x3a\x75\x01\xa6\xb6\x9a\x23\x60\x52\x31\xed\xea\x5b\x7f\x9b\xea\x15\xa7\x59\xb3\xc4\x4d\x97\x53\x4f\xa1\xae\x46\x8b\x32\x54\xb6\x83\xec\xb2\x95\x1a\xab\x5d\x9c\x61\x34\xb9\x5f\xcb\x2f\xfa\x59\x44\xa5\x33\xef\x65\x2b\xab\x29\x89\x46\xd1\x30\xf5\x7a\xd9\x4d\x52\xf4\xa0\xab\x77\x9a\xb9\xf2\x46\x1b\xd1\x3c\x9f\x2d\x55\x4a\x8e\x5c\x2d\x4a\xa3\x79\xd6\x49\x17\x27\xee\x68\x46\x6b\x13\x6e\x65\x27\xc5\x67\x46\x8b\x40\x41\xff\x3d\xde\x1a\x1c\x65\x9b\x0e\xc9\x36\x5e\xb4\x78\x1e\xfe\xbb\xa2\x55\xc0\x23\x48\x47\xf9\xa4\x17\x26\x6d\xba\x0c\xfb\x9e\xae\x4b\x6b\xab\x91\xa4\xcd\x7c\x35\xb1\x05\x5c\x73\xa3\x3b\x60\xa6\x55\xb2\x83\x79\xa3\x37\xb2\x17\xad\x44\xdb\x1b\xf4\xa8\x37\x4e\x25\x3f\xae\xd5\x39\x52\x3d\xd2\x72\x3f\x0f\x7d\x57\xa3\x45\x60\x2e\xee\xf1\xd6\x15\xe6\x08\xaf\x10\x92\x45\xac\x68\xf1\xc4\x68\x75\x0b\xfe\x7d\xb4\xf8\x5e\x46\xff\xdc\x68\x21\xb3\xac\xca\x41\x1e\x31\x98\xc7\x1c\xa0\x54\x44\x91\x58\x53\x31\x26\x31\xa7\xf2\xac\x46\x52\x02\xc3\x6b\x82\x0c\x35\x95\xc6\x1a\xa5\x22\xac\xa9\x34\x62\x11\x60\x38\xac\xa8\x90\x56\x5f\xbc\x63\x57\xf0\x48\xcd\x41\x20\x5a\xd0\x57\xa2\x05\x4b\x42\xc0\x5c\x78\xc7\x16\x02\xe6\xf8\x8e\xed\x7e\xfb\xdc\xd7\xca\x1c\x6b\x16\xdd\xae\x6a\x0c\x6a\x5d\xf5\xed\xdd\xed\x5b\xed\x7c\xca\x95\x95\x01\x39\x4f\xcf\x35\x25\x55\x28\x49\xa3\x9e\x31\x5b\x66\x0b\x63\xef\x9d\xd7\x40\xb4\x48\x85\xa6\x37\x70\xef\xbd\x08\x12\xf0\xfe\xb7\x6a\xd9\xac\x51\x66\x83\xa0\xb3\x1f\xf8\x1b\xa9\x99\x35\x4f\x42\x7b\xc9\x16\x97\x72\x95\x12\x4b\x9d\xd6\x2c\x9f\x60\x74\xb5\x30\xeb\x93\x4a\x05\x72\x7c\xa3\xbf\x2e\x25\xf4\x19\xb9\xe0\xb6\x74\xa9\x5c\x6b\xaa\xdb\x52\x6b\x5a\x36\x5a\x6c\x4f\x2d\xbf\xcd\xc4\x14\xd4\x33\x73\xb3\x54\x60\x7b\xf2\x46\x6d\x94\xa7\x6e\xd5\xcd\x34\xc4\x38\x11\x23\x17\x54\xe5\xc8\x88\x11\x18\x7a\x63\x6e\xb5\xf3\xd8\x13\x43\x3c\x67\x55\xc1\xeb\x4a\xc4\x78\x1e\xfe\xf0\xfc\xc6\xc2\x2f\xfa\xaf\xa8\x89\xa7\xbb\x59\xb7\xae\xdf\x77\x5e\xa6\xe6\x2f\x39\x46\x17\x70\x5e\xf6\x72\xcf\xc6\xff\x59\x1e\x97\x5f\xca\xf8\x49\xf3\xab\xb3\x11\x29\xfd\x98\xac\xf6\x68\xce\x7e\xa5\xe1\x9a\xac\x9e\x3d\x57\xb7\xe0\xdf\x47\xa4\x5c\x6f\x2e\x27\xdf\x17\xc9\xe9\x5c\x70\xe8\x81\x68\x35\x4b\x1d\x8d\xd3\x8b\xa4\xde\xd5\x9a\xab\xad\xbd\x5c\xa7\x34\xc9\x86\xa5\x7e\x8b\x5b\xd6\x15\xd3\x61\xb3\x74\xc5\x2a\x35\x16\x6a\x79\xf6\x46\xba\xf3\x8e\x98\x7f\x2f\xd4\xd0\xc8\x9c\xcc\xde\x96\x45\x20\x2e\x5a\x24\x45\x56\x77\xc0\x9f\x1c\x91\x54\x86\x87\xaa\xac\xaa\x24\xa5\x32\x90\xe4\x01\x07\x39\xa0\x30\x88\x45\x1c\x16\x54\x88\x79\xc8\x2a\x88\x12\x14\x99\x01\x18\x52\x2a\x87\x90\xc6\x91\x88\xd2\x30\x66\x65\x1a\x7a\x67\x23\xcc\x21\x7f\xb9\xb3\x96\xea\x96\x88\x44\xd1\xac\x70\xe9\x45\x78\x56\x38\xbe\xea\xbe\x3f\x87\xf5\xb5\xb2\x04\x27\x58\xa7\x27\x73\xb3\xc0\xb7\x73\xb3\x4c\x12\x8f\x14\x9a\xab\xf7\xdd\x7c\xa9\xb4\xed\x75\xf9\x55\x57\x7f\x4b\xa1\xf4\x82\x2d\xb3\x9e\xea\x7e\xf7\x88\x44\x1f\x97\x77\x47\x78\xb9\x0f\xfc\x8d\x94\x30\x9d\x97\x7a\xd4\x3b\xbd\xe4\x1a\xda\x86\xaf\x57\xf0\x54\x92\x41\xbb\x5d\x60\xf5\xf5\xfb\xb4\x40\xa6\xcc\x51\xdf\xae\xb9\xdc\xa8\x06\x20\xd5\x90\xa7\x63\x4a\x6d\xb5\x3b\x1a\xce\x98\x4b\x85\xac\x8b\x48\x1b\x67\xfa\x6b\x77\xdc\x15\x67\x4e\x79\x31\x99\xa5\xe6\x9b\x49\x4a\x1c\x3c\x2f\x22\x05\x3a\xdd\x98\xbf\x3d\x27\x22\x3d\x0f\xff\xa3\x11\x29\xd0\xf1\xd6\x1c\xe1\x29\x11\xe9\xd9\xf8\x6f\x8d\x48\x3f\x69\x0e\x77\x2d\x22\xdd\x23\xab\x87\x23\xd2\x13\xe7\xea\x16\xfc\xfb\x88\x94\xa7\x5a\x03\x4b\x46\x36\x4e\xba\xa9\x64\x79\xc5\xaf\x61\xa3\xb9\xec\x56\x2b\x93\x79\x39\xf7\xde\x98\x34\x72\x7a\x0a\x3b\x90\x5e\x88\x5c\xdf\x7e\x4b\x2d\x5a\xf9\x37\x50\xac\x36\x05\xa6\xa6\x0b\xdb\x06\x9f\xb2\x12\x52\x55\xcb\x51\xd9\x4e\xba\xb7\x5a\xc0\x5a\x27\x27\x97\x2a\x52\x6a\xf4\xec\x88\xc4\x21\x8e\xe4\x00\x0f\x11\xab\x28\x34\x44\x24\x66\x29\x92\x65\x78\x84\x59\x00\x64\x96\xe6\x05\xa8\x90\xb4\x00\x14\x0c\x20\x54\x19\x52\x45\x3c\xc9\xf2\xde\xa7\x59\x30\x44\x88\x52\xfc\x37\x97\x9f\xb5\xa3\x76\x35\x22\xd1\x3c\xc3\x5c\xfa\xe2\x04\xc3\xc0\x97\x50\x41\xcf\xa3\x3b\x6a\x17\x22\x52\xe7\x9c\x26\xa4\x2e\x6b\xe6\xa7\x2b\xf5\x91\x33\x49\x99\xd4\x38\x53\x73\xb2\xbd\x3a\x55\x4a\x9b\x6f\x8b\x62\xa6\xd9\x5f\xe8\xd5\x39\x99\x9e\x8c\xba\xa5\x72\xd9\x55\xdf\xf4\xa4\x48\xd7\x34\x3b\xed\x8c\x96\x7d\x5e\xdf\x8e\xc5\xd9\xac\x3f\x6d\xbe\xdb\xfd\x8d\xee\xb6\x96\x39\x93\x9e\x36\xc6\xb0\x9b\x6c\x25\x5d\xa3\x21\xdb\x83\x51\xbe\xd1\xc8\xc5\x88\x42\xc1\x53\xeb\xc8\x28\x24\x3e\x76\xee\x31\xa9\x1d\x65\x1a\x71\xc5\x89\x02\x4f\xc1\x7f\x5f\x14\xfa\x2e\xbb\x3f\x77\x45\xa1\xef\x88\x5f\xba\x80\xff\xaa\x97\xbf\x83\x96\x87\xbd\xfc\x83\xb2\x78\xd0\xcb\xaf\x06\x8d\xad\x9d\xea\x4e\x04\x7d\xf4\x9e\x93\xf5\x06\xd9\xe5\xcc\xc9\x9b\x2b\x9a\x4c\xb6\xa5\x6f\xb8\x7e\x6f\xb0\x5c\x55\xb7\x06\x5c\xd9\x85\x32\x48\x16\x1c\xa6\x51\x7c\xeb\xb2\x12\x7a\x07\xbc\x69\x77\xec\xf5\x7b\x95\x95\x0a\x78\xa6\x91\x4b\xee\x8d\xcc\x41\xaa\x90\x22\xbf\x83\x97\x57\xa0\xac\xa9\xaa\x40\x6b\x80\xe1\x48\x55\x13\x54\x0d\xd1\x58\x13\x58\x95\xe5\x64\x44\xf1\x0a\x56\x90\x82\x49\xc8\xab\x82\x46\xc9\x32\xc9\x90\x88\x13\x34\x4d\xe1\x14\x56\x15\xa0\x22\xef\xbf\x89\x42\x3d\xc9\xcb\x33\xd7\xbd\x3c\xa4\xa2\x3f\x30\x71\x68\x3d\x29\xb6\x7c\xd4\xcb\x87\xf7\xf6\xe3\x79\xf9\x4b\x5a\x13\x82\x77\xf4\xf2\xa9\x6e\x71\xda\x6e\xb4\xb3\x33\x2b\x5b\x32\x2b\x63\x45\x97\x2b\x96\x5a\x64\xa7\xe3\xa6\x00\xca\x03\x7a\x5b\x6f\xac\x96\x49\xcc\xd6\x96\x5c\xbf\xa0\xf4\x4a\xb9\xc2\x92\x75\x32\xda\x68\x33\x46\xa5\xe4\x9a\xed\x0d\x7a\x1a\x5a\x55\x7b\x8a\xc2\x6a\x95\x59\x8f\x53\x92\xf5\x75\xae\xd6\x28\xfe\x84\x5e\x3e\x22\x72\xfe\x30\x2f\x1f\x31\xa7\x7f\x87\x97\x0f\x47\xbd\x4b\x5e\x56\xfc\x0e\x5e\xfe\xf6\x3d\xfe\xe7\xca\xe2\x5e\x2f\xfb\x3d\x64\x71\x0b\xfe\xbd\x97\xef\xb6\xde\x24\x52\x5a\xbf\xa1\x66\xeb\x3d\x53\xe8\x17\xe6\xdb\x52\xbf\x85\xdf\x0a\x1d\x4d\x6d\x51\x55\x7e\x4b\x56\xca\x49\x7a\xd1\xb6\x13\x60\x93\xcf\xea\x63\xbd\x9c\x90\x45\x9a\xa9\x98\x3d\x7d\xc9\xe3\xee\x3c\x6b\x50\x4e\xa6\x6b\xe4\x6b\xfd\x6d\xb1\xbb\xa0\xeb\x5b\xbe\x39\x99\xa6\x9f\x5e\x4b\xa5\xca\xb4\xc0\x63\x99\x41\x98\x17\x38\x16\xd2\x14\x0b\x19\x5a\x41\x2a\x05\x14\x81\xc1\x80\x96\x35\x85\xe4\x18\x99\xa6\x68\x8c\x79\x1a\x03\x06\xc8\x1a\x47\x02\xc4\xaa\x02\xc9\x68\x40\xf6\xbf\xd7\x05\x1e\x79\x17\xc5\xff\xa2\xe2\x45\xe7\xce\x02\xf2\xc2\x12\x7e\xd7\x7a\xfc\x52\x96\x5f\xb6\xbe\x3f\xe5\x28\xf3\xf9\xc6\xb2\x31\x95\x4b\x54\x5e\xa4\x7b\xdd\x49\xd3\x2e\xcd\x27\x7d\x92\xd4\x72\xbc\x53\x2e\x70\x73\x52\x6a\xae\x8a\xbd\xa4\xd8\xa7\xc5\x0f\xdf\xee\x5d\x17\x56\xf0\xfe\x75\x87\x9f\x09\x7e\x9f\x27\xd5\x5d\xae\xb2\x82\xe7\xdb\xc5\xc1\xa4\xa1\xd4\xdb\x54\x8e\x1d\xbf\x1b\xa9\xf9\x28\x97\xc3\x23\xa1\xc8\xcf\x18\x05\x48\x46\x67\xb6\x9e\xce\xa4\x59\x5e\x70\xde\xdf\x6c\x52\xe0\x40\x16\xd6\xca\x3d\x0d\x27\xe7\xcc\xd4\xca\xba\x85\x84\x53\x20\x75\xf0\x5e\xd6\x5d\x56\x24\x8b\x9b\x9e\x21\x8f\x07\xe5\x1e\x6b\x66\x62\xf8\xf6\x13\xa5\x3d\xf5\xed\x01\x9e\x8f\xfb\x28\xc1\xdd\x62\x3d\x99\x22\xcb\x64\x31\xb7\x71\xc7\xab\x2a\x98\x0d\x48\xb4\xb1\x4c\x20\x54\xf3\xeb\x65\x39\xbd\xa9\xb1\x6e\x4a\x52\xd2\x3e\x8f\xf4\xc8\xb5\x6b\xc6\x20\xc9\x05\x82\x62\xb8\xda\xe4\x22\x6d\x07\x7b\x7e\x00\x7f\xb6\xdd\x4b\xd9\x0f\xe0\x17\xc5\xbf\x6f\xd5\x7a\xd6\xb7\xa6\xee\x97\x45\xcd\x78\xbb\xc8\xe6\x35\x59\x3c\x3a\x17\x3b\x5d\x48\x28\x21\x78\x37\xc9\xe2\xbf\xb9\x02\x99\xcf\x90\xc2\x78\x31\x40\xd6\xea\xcd\x4c\x8d\x0d\xb3\xde\xd2\x8a\x38\x5f\x6d\x16\x41\x51\x79\x2b\x36\x8b\xcd\xa4\x5c\x9a\x23\xa1\x8e\x85\x26\x9e\xe8\xc0\xa0\x97\xec\xa2\x58\x6a\xca\xad\xba\x9d\xae\x16\x5c\xa4\x33\x36\x6e\x54\xd3\xca\xcc\xa2\x98\x5e\x1a\x2c\xd0\xf3\xcf\x92\x35\x81\x53\x90\xa6\x21\x99\x57\x00\x24\x29\x1a\xd1\x1c\xcf\x33\x00\xb2\x8a\x4c\xca\xb4\xa6\x01\x84\x28\x15\x69\x0c\x49\x92\x1a\xd6\x18\x41\xa5\x00\xd6\x14\x9e\xe1\x54\x55\xd6\x64\x8c\x8e\x1f\xd8\x7c\xc0\xb7\x52\xd7\x7d\x2b\xc5\x45\xbe\xcc\xe0\xb5\xb2\x2f\xa7\x2f\xe0\x3c\xea\x5b\x2f\xac\x9b\xfd\xeb\x8e\xfd\xe2\x08\xdf\x9a\x9a\x97\xac\xd6\x68\x69\xaf\x4a\x35\x8a\xec\xa7\x6b\xda\x40\xeb\x3b\x39\x49\xea\xb8\xab\x01\x42\x92\xf6\xde\x5a\xc0\xcd\xbc\x38\x9f\x65\xe6\x28\x51\xe8\xc3\x02\x57\x18\x8d\xe4\xce\x5b\xc5\x54\x1a\xea\x9b\xc0\x14\x2a\xa2\x56\x52\x1b\x62\xf5\xbd\x2f\x17\x6a\xdc\xc6\x59\x61\x5c\x49\xff\x5c\xbe\xf5\x51\xdf\xf6\xa0\x3d\xbf\x73\xc9\x76\x46\x7e\xa6\x6f\xfd\x81\xfb\xbe\x57\x4f\x45\x7f\xa0\x6f\x13\x9f\xe4\x5b\x79\xe6\x38\x3e\x62\xe7\xec\x92\x6f\x7d\xd3\xdf\x3b\x66\x19\xf2\xe9\x89\xeb\x66\x57\x13\x83\xca\x03\x2e\x35\x4e\x65\xcb\x4a\x2e\x37\x1f\xe7\xe1\xd4\x5e\x38\x96\xfe\x66\x35\xd8\xf9\x52\xcf\x26\xf4\xda\xa6\x50\xc8\x81\x5c\xbb\x94\x97\xf2\x3d\x0d\xa7\x33\x62\x7e\x63\x74\xc4\x0c\x9a\x51\x9b\xcc\x82\xb7\x2b\x79\x63\x22\x3e\x7d\x77\x42\x20\x79\x9e\x44\x0a\x4b\xf3\x80\x55\x91\xc2\x33\x0c\x40\xaa\x4a\x52\x14\x89\x38\x48\x03\xac\xb1\x18\x29\xb4\xca\x72\x0a\x85\x79\x01\xd2\x0c\x46\x82\xcc\x52\x24\xad\x41\x80\x78\xcc\xbc\x7c\xfc\x65\xb3\x07\x7c\xeb\xd5\xad\x67\x16\xb0\x54\xe4\x9f\xd3\xf2\x5a\xb9\x97\xd3\x57\x09\x1f\xf5\xad\x17\x6a\x39\xfd\xeb\x8e\xea\x90\x28\xdf\xaa\xf6\x99\x66\x32\x37\xde\xbe\xf3\x49\x3b\xb1\xe0\xeb\xe5\x84\x53\xb5\xf5\xbc\xd3\x62\x67\x3d\xd0\x75\x13\x02\x4e\x63\xd2\x30\x7a\x95\x6a\x7b\x5b\x19\x29\x1d\x19\xd9\xb8\x2e\xdb\x56\x86\x1a\xd9\x7c\x66\xd2\x5d\xcc\x95\xb9\xd5\xcd\x0b\xab\x1c\x95\xeb\xbb\xbd\xe5\x6a\xdb\x37\xcb\x3f\x95\x6f\x7d\xd8\xb7\x3d\xea\x5b\x37\x76\x23\x5b\x7e\xa2\x6f\xfd\x91\x55\x1e\xdf\xc3\xb7\xde\xeb\xdb\xc4\x27\xf9\xd6\x7b\x73\x98\xbd\x6f\xed\x77\x13\x92\xb6\x36\x15\xb8\xac\xc3\xa4\xbd\xcc\x6c\x92\x76\x06\x31\x63\x4e\x5a\xbc\x75\xdd\xae\xac\x2d\xfb\x23\xc3\x2d\xb2\x60\x92\xe9\xf0\xdb\x42\x3e\x9b\xa3\xde\xe9\x09\x05\x61\x43\x30\x4b\x49\x91\x01\xb2\x65\x14\xdf\xbb\xcd\xa4\x92\x72\xc7\x33\xae\x6b\xf3\x15\x00\xe3\x56\xcc\x9f\xbe\xa0\xec\x7f\xa5\xc7\x71\x91\xeb\x04\x7f\x0f\xad\x29\xde\x1c\x5e\xf4\x4d\xd7\xaa\xad\x76\x53\x2c\x54\xaf\xbd\x93\x2c\x96\xdb\x52\x73\xff\x5e\x70\xad\x5a\x1e\x04\x21\xfe\x42\x10\x04\x21\x66\x32\x01\x68\x9f\x10\x12\xf5\x66\xa1\x22\x36\x07\x44\x49\x1a\x10\xbf\xea\xea\x27\x6a\x47\xa6\x6d\x0d\xe7\xfa\xe8\xf0\x4d\x8f\xd0\xfd\x93\xa8\x0e\x41\x3d\x47\xf9\x39\xc4\x57\xa9\x0f\xfd\x5d\xf6\xd0\x1f\x31\x3f\x7e\x66\x69\x78\xfc\xb8\xd2\x30\xf8\x15\xa5\xe1\x53\xb8\x3b\x45\x7b\x8e\xb9\xbb\x08\x23\x3a\xd5\x42\xa3\x23\x11\xbf\x1e\xbb\xbf\x12\xc7\xfe\x87\xdf\xfe\x80\x1b\x45\xf3\x9c\x69\xbd\x99\xf1\x9b\x26\x35\xe2\xab\xa0\x57\xbe\xbc\xf9\x5c\xce\xce\x23\xb9\xc4\xe9\x05\xb2\x62\x73\x1e\xf9\x99\x84\xab\x1f\x22\x78\x2e\xf7\x51\x68\x2e\xf1\x7f\x91\xb4\xab\x12\xf0\x55\x5a\xde\x78\xda\x7e\x60\xa4\x50\xcd\x48\xfd\x2b\x3c\xa4\x9b\x92\xd8\x96\xfc\xae\xa7\x50\x88\x5a\x35\x6c\x0c\x9d\x56\xa1\x9a\x23\x64\xd7\xc6\x38\x68\x5d\xd1\xd4\xf8\x36\xf6\x38\x3d\x3e\x9c\x78\x14\x45\xd8\xb5\xbc\x19\xee\x3f\x84\x74\x37\x39\x47\x10\x41\x4a\x4e\xb2\x81\x53\x7a\xfc\xce\xaf\xc4\xfe\xc7\xd0\xc1\xef\x0b\x6c\x28\x9f\x05\x26\x6f\x86\x63\xe4\x8c\x1f\xa1\x6c\x37\x3e\x1e\x59\x41\x4d\xdb\x8d\x3a\x47\x8d\xff\xb1\xfe\x47\xe8\xf1\x21\xc4\xa3\xc8\xef\xfb\x21\x9e\x57\x02\x59\xd6\x4c\x57\x7c\x77\x60\xda\x6a\x84\x9b\x1e\xe2\x9d\x6e\x78\xed\x77\x50\xba\x8f\x12\x3e\xc1\x21\x70\x41\xb2\x0f\x7f\x1d\xfa\x84\xe2\xcf\x5e\x4b\x57\x5f\x89\x2f\xde\xe0\x2f\x51\xc4\xea\xea\x93\xc8\xd4\xd5\xd8\x04\x1e\x54\x6f\x47\xde\x1d\x44\x9b\xd6\xd0\x7a\x16\xdd\x7b\x58\x41\xd2\x23\x42\xd5\x5d\x9c\x9c\x67\xc0\x5d\x3f\x8f\x81\x3d\xac\x08\x9d\xbe\x93\x85\x20\x84\x73\x4c\x98\xd6\x4e\x2b\xc7\xe6\x5d\x3c\xec\x89\x3f\xc2\xb8\x57\xf8\x97\x05\xed\xec\xad\xdd\x73\xd5\x8f\xcb\xfa\x14\x5c\x90\xe4\xc3\xdf\x10\x39\xa1\xf1\x3c\x45\x41\xb9\x3e\x8b\xac\x4f\x30\xe3\xb9\xb7\x73\x04\xba\xfe\x94\xb8\x8f\x4c\xeb\x11\xc6\xfd\x2a\x79\x4d\xfd\x5c\x5b\xdd\x21\x91\x91\x83\x1f\x8e\x9f\xe7\x80\x85\x28\x57\x71\x88\xce\x60\xdf\xab\x04\x9a\x9a\xf6\x40\xd0\xfa\x0c\x2a\x16\x71\x5e\xcf\x4b\xa4\x79\xb4\x63\xfb\x69\xe2\x0b\xc1\xbb\x46\x64\xa8\x7b\x1c\x4a\x9f\x23\xc7\x13\x68\x71\xa9\xbc\x2a\xcd\xe7\xd0\x16\x8b\xa6\xcb\xb4\x1c\x28\x9e\x99\xe6\x74\x61\x3d\x46\xd1\x29\xac\xd8\x33\xea\xaf\x77\x23\xe8\xb3\x90\x6e\x0f\x5d\x7d\x8e\x9f\x42\x61\x18\x5a\x3c\xbb\xdd\x13\xf8\x4a\x84\x49\x7e\x25\xf6\x2e\x5e\x99\x99\x0e\x56\x87\xc8\x8d\x60\xe2\x09\x7e\x7b\x0f\xe7\x1a\xc5\x37\xae\x8e\x76\x50\x9f\x26\xdd\x1b\x04\x7b\x55\x6e\xba\xa1\xe2\xf5\x30\xb4\xe4\x70\x86\xa6\x31\x44\xaa\x6a\x63\xc7\x79\x54\xa0\x57\x11\x9c\xe4\x69\xfb\xe6\x50\x66\xe4\x77\xbc\x81\xf6\xc7\xf5\xe0\x12\xec\xeb\x14\x9f\xb1\xb2\x53\x80\xfb\x55\xf8\x0e\x9e\xbb\xb1\xee\xcf\xc1\x2f\x42\xbd\xba\xec\xdf\x75\xba\x42\xe8\x7e\x0d\xb5\x03\xf9\xa1\x44\x4f\xa2\xf6\x1c\xe8\xab\xcb\xb7\xb8\x9a\x1c\x00\xfe\x6c\x65\x38\x01\x7d\xcf\x7a\x33\x1a\xdc\xdc\x32\xed\x9d\xe3\x5b\x62\xdb\xd1\x4d\xe3\xf9\x82\x0e\x63\xb8\x4e\x7e\x68\x40\x7c\x66\xf6\xae\xe7\xce\x9d\x8a\x78\xf2\x0f\xe0\xb8\xca\x49\xa0\x6f\x7c\x26\x2c\x1b\x2f\x75\x73\xe1\xfc\x10\x6e\xce\x21\xbb\xca\xd6\xb9\x41\xf1\xf9\x3b\x6c\xa2\x7c\x37\x9e\x0e\x08\xae\xf2\x11\xb9\xdb\x75\x0a\xfa\xf8\x61\xf4\xef\x61\xda\x61\xe8\x67\x13\xe0\x5b\x0d\xfc\x14\xe8\x69\x0a\xf5\x24\x0b\xbf\x84\x22\x0e\x0f\x57\xf2\xba\x8b\xc8\x9e\x17\xbe\x3e\x03\x8e\x45\xfb\xf5\x20\x16\x4c\xb6\xbf\x87\xda\x7c\x86\x7f\x77\xaa\xef\x2d\xe2\x3e\x02\xf9\x61\x87\x71\x28\x9b\xe6\xf4\x6e\x29\x5f\x80\x79\x75\x89\xf0\xeb\xaf\x2a\x76\x91\x3e\x73\x88\xaf\xff\xfe\x37\xf1\xe2\x98\x33\x35\x70\x9a\xf6\xf2\xed\x9b\x8b\xd7\xee\x6f\xbf\xbd\x12\xd1\x1d\x15\x53\x8d\xd7\xd1\xdf\x8b\x8f\xee\x2a\x9b\x8b\xd1\xd8\x8d\x85\xfe\xa4\xeb\x65\x02\x4e\xba\x86\x48\xf8\x8d\xe8\xe5\xa5\xa6\xe4\x2b\x19\xf1\x27\x41\xd3\xb1\x0f\xa2\x75\x75\xa8\x05\x8e\x89\xb2\xa5\x1f\x73\x1c\xbd\x47\x4b\x64\x6b\x4d\xa9\x90\xab\x7e\x1c\x01\x11\x4d\x29\x2b\x35\xa5\x6a\x5a\x6a\x85\x4e\x45\xbc\xd6\x5a\x95\xe8\xd4\x33\x3b\x95\x69\x4a\xad\x76\xb3\x90\x6e\xef\x1e\x65\xa4\xb2\xd4\x96\x88\xb4\xd8\x4a\x8b\x19\xe9\xc2\x39\xda\x2e\xef\x38\xbd\x1d\x86\xb6\x62\x9e\x27\x8c\x53\x3c\x57\x0e\xc9\xa2\x28\x39\x95\x4f\x78\xdb\xe8\xac\xb0\xf6\x0b\xfd\x2b\x27\x8a\x91\x92\xd8\xa7\xb2\x7f\xbb\x1c\x82\x74\x9c\x93\xc2\x61\x97\xe0\xb2\xc2\xdc\x26\x81\xcf\x9b\x4a\x7f\xa3\x18\x22\x88\x39\x95\xc5\x99\x6d\xb0\xe7\x2a\x45\x78\x8b\xe3\x67\x10\x48\xb4\x6a\x7c\xda\x43\x8a\xab\x1d\x75\xd3\x71\x47\x36\x6e\x35\xca\x84\x8a\x5c\xb4\x53\x31\x42\x5d\xcc\x2d\x42\x31\xe7\xd6\x0c\xbb\xd8\xe3\xe1\xff\x07\x00\x00\xff\xff\x06\x23\x89\x36\x43\xe1\x00\x00") - -func allow_trustHorizonSqlBytes() ([]byte, error) { - return bindataRead( - _allow_trustHorizonSql, - "allow_trust-horizon.sql", - ) -} - -func allow_trustHorizonSql() (*asset, error) { - bytes, err := allow_trustHorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "allow_trust-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcd, 0xf5, 0x95, 0x37, 0xf8, 0x65, 0x80, 0x8d, 0x5d, 0x12, 0xee, 0xb2, 0xa8, 0x5d, 0x1f, 0xf3, 0x93, 0x52, 0x51, 0x6, 0xb6, 0x3, 0x26, 0xa9, 0xae, 0x21, 0x9, 0xe8, 0x9f, 0xd5, 0x53, 0xb}} - return a, nil -} - -var _asset_stat_accountCoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xf9\xb3\xa2\xc8\xf2\xef\xef\xfd\x57\x10\xf3\x4b\xf7\x84\x3d\x57\xf6\x65\xfa\xcd\x37\x02\x10\xdc\x10\x50\xc4\xed\xc5\x8b\x8e\xa2\x28\x14\x45\x50\x16\xb7\x17\xf7\x7f\x7f\xe1\x72\xdc\x8e\x7a\x6c\xb5\xa7\xef\x8b\x3b\xc4\x44\x8f\x47\xd2\xcc\x4f\x7d\x2a\xb3\xc8\xaa\x02\xf2\x8f\x3f\x3e\xfd\xf1\x07\x66\x46\x49\xda\x8f\x91\x55\xd7\x30\x17\xa4\xc0\x01\x09\xc2\xdc\x6c\x3c\xf9\xf4\xc7\x1f\x9f\xd6\xe7\x0b\xd9\x78\x82\x5c\xcc\x8b\xa3\xf1\x41\x60\x86\xe2\xc4\x8f\x42\x4c\xf8\x17\xfb\x2f\xe2\x48\xca\x59\x62\x93\xfe\xf7\xf5\xcf\xcf\x44\x3e\x59\x4a\x13\x4b\x52\x90\xa2\x31\x0a\xd3\xef\xa9\x3f\x46\x51\x96\x62\x7f\x61\xf8\xb7\xcd\xa9\x20\x82\xa3\xf7\xdf\xfa\x6e\x80\xbe\xfb\xe1\xf7\x34\x06\x61\x02\x60\xea\x47\xe1\xf7\x04\x25\x6b\xbd\xef\x85\x61\xe0\xaf\x55\xa3\x10\x46\xae\x1f\xf6\xb1\xbf\xb0\xcf\x76\x53\xe5\x3f\x7f\x7b\xb3\x1d\xba\x20\x76\xbf\xc3\x28\xf4\xa2\x78\xec\x87\xfd\xef\x49\x1a\xfb\x61\x3f\xc1\xfe\xc2\xa2\x70\xa7\x63\x80\xe0\xe8\xbb\x97\x85\x5b\x5b\x4e\xe4\xfa\x68\x7d\xde\x03\x41\x82\x4e\xcc\x8c\xfd\xf0\xfb\x18\x25\x09\xe8\x6f\x04\xe6\x20\x0e\xfd\xb0\xbf\x15\x89\xa3\xf9\xf7\x04\xc1\x2c\xf6\xd3\xe5\x5a\xb9\xe7\x7d\xdb\x11\x80\x40\x0c\x07\xdf\x27\x20\x1d\x60\x7f\x61\x93\xcc\x09\x7c\xf8\x75\xcd\x18\x04\x29\x08\xa2\xfe\xb7\x4f\x9f\x0a\x0d\xc3\xc4\xca\x7a\x41\xe9\x60\x65\x15\x53\x3a\x65\xab\x69\xed\x24\xff\x95\x4d\xfa\x31\x70\xd1\xc0\x4f\x52\x67\x99\xa0\xe9\xb7\x9b\xd2\x09\x9c\x4c\xb3\x28\xce\xc6\xc9\x7d\xc2\x28\x9c\xdd\x23\x19\x20\xb7\x8f\xe2\x7b\x24\xd7\x38\x3d\x84\xee\x94\xbc\x43\xcc\x41\x49\x1a\x79\x1e\x8a\xfd\xd0\x45\x8b\xdb\xb2\x00\xc2\x28\x0b\x53\x07\x04\x20\x84\x28\xf9\xf6\x49\xd4\x9a\x4a\x03\x6b\x8a\x92\xa6\x1c\x49\x1b\xba\xd6\xbd\x40\x6f\x14\x2f\xb1\x8d\x76\xd9\xd0\xad\x66\x43\x2c\xeb\xcd\xa3\x1f\x9d\x0a\x7e\x9f\x8c\xd0\xf2\x1e\xfd\xe9\xe2\x63\xd5\x7b\x99\x1f\xd0\xea\xa1\x3b\x30\x1f\x8b\xdd\xaf\x3b\xce\x92\x34\xf0\x43\x94\xdc\xd2\xbc\x17\xba\x5b\xef\x1a\x05\xda\x8c\x06\x37\xf4\x1e\x84\xee\xd7\xbb\x77\xf9\x5b\x7a\xf7\x42\x77\xeb\xdd\xca\xfb\xa1\x17\xdd\xd0\x7b\x10\xba\x5b\xef\x24\x73\x92\xcc\xb9\xa1\x73\x2b\xf0\x23\xfa\x02\x3f\x19\x4c\x33\x94\xdd\x62\xf6\x58\xec\x7e\xdd\x08\xc5\xb7\x68\xdd\x9c\xbf\x5b\xdb\x26\x8c\x6f\xa9\xdb\x0a\xdc\xad\x6f\x3b\x2a\x0d\x10\x70\x6f\xab\x3d\x91\xfb\xc9\xda\x77\x23\x25\x9a\x7e\xbf\xd3\x8c\x03\xc2\x1b\xca\x1d\x10\xde\x0d\x78\x37\xfa\xdd\xc2\xfa\x26\xf2\xa3\x3a\xd7\x39\xc0\xc7\x6a\xd7\x52\x3b\xcd\x1b\xd9\x73\xc5\x17\x87\xdc\xdb\xb2\xfb\xa1\xf1\x23\xb1\xc3\x40\xf7\x81\xe4\x7e\xe0\xba\x2d\x77\x18\x88\x3e\x90\xdb\x0f\x2c\x1f\xca\xdd\x85\xef\x30\xa0\xdc\x96\xdb\x0e\x12\x1f\xca\xec\x43\xfe\x03\xc9\x75\x1c\xdf\x16\xd9\xc6\xe6\x6d\x99\x93\x50\xb8\x2d\xea\x80\xf0\xb6\xc0\x9b\xab\xde\x25\xb5\xf6\xbc\x9d\xa0\xd2\x69\x2a\xba\x55\x36\xf4\x63\xe1\x60\xd2\x4f\xa6\xc1\x4e\xc2\x92\x4b\x4a\x4d\x7c\xa7\xeb\xdb\xa7\x6d\x6e\xac\x83\x31\xfa\xf3\xed\x3b\xac\xb9\x9c\xa0\x3f\x77\x3f\xf9\x86\x59\x70\x80\xc6\xe0\x4f\xec\x8f\x6f\x98\x31\x0f\x51\xfc\x27\xf6\xc7\x26\x65\x96\x1b\x8a\xd8\x54\xde\x34\xbf\xe9\xfb\x74\xa2\xf1\xf4\xe4\x4e\xb1\x6c\xd4\x6a\x8a\xde\xbc\xa1\x79\x2b\x80\x19\xfa\xa9\x02\xac\x6c\x61\x9f\xdf\xf2\xdb\xb7\xef\x92\x8d\x92\xcf\xe7\x96\xdf\x9a\xbf\xb3\xb9\x67\xe8\xc3\xf6\x9c\x70\xa9\x1b\xcd\x33\x3e\xb1\x76\xb9\x59\xda\xc3\x3a\x4e\x68\x4f\xcc\x1f\xb4\x9c\x01\xf9\x91\xc6\xbf\x53\xb2\x21\xc0\xd4\xf2\x93\xfe\x7a\x16\x33\x89\x23\x88\xdc\x2c\x06\x01\x16\x80\xb0\x9f\x81\x3e\xda\xd0\x70\x67\x02\xbe\x16\x73\x91\x07\xb2\x20\xfd\x9e\x02\x27\x40\xc9\x04\x40\xb4\x9e\x4d\x7c\x3e\x3b\x3b\xf7\xd3\xc1\xf7\xc8\x77\x8f\x26\x08\x27\x8d\x3d\x76\xc8\x5d\x33\x37\xae\x7b\x68\xe4\x9b\x03\x5c\x22\x7c\xeb\xe5\xc7\x83\xee\x97\x4f\x18\x86\xbd\x7d\xe3\xbb\x18\x1c\x80\x18\xc0\x14\xc5\xd8\x0c\xc4\x4b\x3f\xec\x7f\x61\xd8\xdf\x37\x7d\xa3\xdb\x9a\xf6\x75\x23\xbd\xfe\x61\x08\xc6\xe8\x82\x30\xcf\x5f\x12\x9e\x81\x20\xbb\x24\x4d\x10\xe4\xb9\x78\x00\x92\x74\x1c\xb9\xbe\xe7\x23\x17\xf3\xc3\x14\xf5\x51\xbc\x17\xf9\xf4\xfb\x79\xdf\xef\xa3\xf8\x49\x2e\x92\x87\x88\xd8\x4d\x04\x30\xc7\xef\xfb\x61\x7a\x76\x32\x41\xd3\x30\x1b\x5f\x3e\x17\x66\xe3\x24\x73\x50\x98\xc6\xeb\xa9\xe0\x79\x33\xb7\x32\x7e\xe8\x05\x60\x3d\x63\x74\x51\x92\x5e\x86\xb3\x15\x1c\x44\x63\xe4\x46\x63\xe0\x87\x17\xa4\x68\xfa\x1c\x74\x3a\x88\x51\x32\x88\x02\x37\xc1\x52\xb4\x38\x47\xe6\x05\xa0\x7f\x0d\xd1\xcd\xbe\xd9\x31\x92\xad\xad\x06\x3e\x70\xfc\xc0\x4f\xd7\x8d\xdb\xb6\xff\x8d\x92\x20\xb8\x75\xda\xef\x87\xeb\x5c\x68\x0d\x6b\xfb\xcd\x51\x36\xb0\x4f\x2d\x76\xa4\x7f\xdf\x4c\xab\x31\xb9\xa4\xc8\x55\xec\xcb\x97\xb7\xae\xf8\x9f\xbf\x30\xfc\xf7\xdf\x6f\xfc\xfa\x1c\xe0\xb9\x9e\x77\x0d\xf8\x48\xe3\x49\x5f\x9e\x69\x3b\xed\xe7\x8f\x34\xbd\xa7\xe7\x4c\xdd\x05\xfe\xb6\x3a\xdf\x07\xc6\xfa\xfa\xf7\x68\x4c\xac\x53\xc6\x6d\x38\x84\x91\x8b\x8e\x63\xe1\x24\x06\xde\x1b\x3d\xbd\x3e\x3f\x6a\xfe\x34\x31\xde\x02\xd9\x7d\x07\x92\xc1\x11\x18\xf6\x9d\x6f\x4f\x62\x34\xfb\x50\xc8\xc9\xe0\x08\xa5\x81\x9f\xa4\x1f\x8a\xee\xb3\xed\x37\x77\xdf\x7e\x0d\x83\x28\x41\xa9\x3f\xbe\x12\xf9\x9b\x81\xf5\x42\x6c\x1d\xf5\xf9\x69\x52\xbf\xd7\x77\xd6\xdf\x07\x3b\x57\x5c\xe7\xda\xdc\xe0\x54\xcd\xa1\x15\xd7\xbc\x65\x97\x7c\x3d\xda\x63\xbb\x89\xd7\x97\x7d\x90\xa3\xf8\xce\x11\x74\xbb\xf2\xe2\x5e\x1b\x41\x37\xee\x0e\x92\x04\xa5\x97\xf8\xdc\xc6\xea\xd5\xd3\x60\xbc\x0e\xab\xcb\xaa\x27\xb1\x0f\x51\x78\x65\x10\xdb\x9c\xbc\x36\xc2\x6d\x4e\x62\x6e\x94\x39\x01\x5a\xfb\x1b\xf4\x37\x2b\x92\x2f\x1d\x45\x8f\x7a\x78\x37\x65\xdd\xb6\xe5\xac\x5f\x77\x0d\xbc\xe2\x1b\xbb\x5f\xee\x18\x3e\xfb\xe9\x1b\xef\xd7\x1c\x62\x9b\xb0\x3f\xea\x0f\xdb\x69\xfd\xd6\x1d\xfc\xc9\xa5\x0b\x3f\xf3\x2e\x72\xa3\x38\xdd\xb3\x51\x50\x54\xd1\xd6\x9a\x18\x7e\x7e\xd9\x44\x8b\x14\xa4\x29\x1a\x4f\x52\x6c\x1d\x16\x49\x0a\xc6\x13\x6c\x9d\x32\x45\xd9\xf6\x1b\x6c\x15\x85\xe8\xfd\xc5\xd6\x03\x7e\x90\xc5\x47\x97\xda\x6b\x16\xd2\xe5\x04\x7d\xdc\x29\xdb\x65\x89\x23\xbd\xef\x87\xfd\xbd\xc5\x2b\xbd\xb3\x5b\xd9\x88\xe2\xf3\x4e\xfd\xb2\x61\xe2\x7f\x30\xfc\x77\x4c\xd4\x0b\xd8\xf6\xcf\xff\xf5\x17\xc6\x32\x0c\xc5\xfc\x7e\xb1\xaf\x8e\xa7\x61\x0f\x77\xd9\xf1\x2a\xcf\xf1\x98\x7b\x85\x8d\xed\x42\xdb\x3a\xea\x2e\x02\x5a\xcf\x1d\x9f\x80\x92\x64\xce\x0e\x44\x8c\x92\x93\x0b\x10\x75\x31\x63\x8c\x11\xd8\xc7\xd2\x7b\x3c\x47\x73\xde\x47\x31\x1d\x2d\xd6\xdd\x71\x65\xdc\x02\x9b\x26\xe8\xd6\x15\xe6\x3d\xce\xa3\x39\xfc\xa3\x38\x0f\x2a\xee\xc7\xf9\xee\x22\x77\x76\x1e\x85\x33\x14\x44\x13\xf4\xc1\x25\xed\x60\xfa\x89\x0b\xd1\xd1\x72\xc7\x13\x14\xbc\xad\xd7\x7e\xb9\xa7\x1f\x0e\x5e\xf4\x11\x11\xd3\x2b\x17\x9a\x53\x12\xde\xd6\x81\x4f\x34\x9e\x13\x71\x62\xed\x2a\x19\x87\x35\xa2\x87\xc9\x38\x2c\x8a\x7f\x39\xc4\xed\xe9\xe4\xed\x42\x4c\xdd\x8a\xee\xa3\x15\xae\x47\x51\x1d\x6d\x01\x3c\x32\xed\xda\x5c\xf1\x6f\x8c\xd4\x7e\x92\x64\x28\xbe\x5f\x15\x8c\xdc\x8b\xb3\xd3\x77\xb4\xa4\x81\x3f\xf6\xaf\x64\x14\x37\xe7\x82\xbf\x72\x56\x75\xe4\x9d\x47\xbb\x2a\x0f\xcd\xa2\x8e\x7f\xff\xaa\x79\xd4\x91\xce\xc7\xe7\x3f\xb7\xb4\x6e\x3b\xed\x4c\xd3\xae\x27\xff\xe7\x72\xe0\x9d\x2c\xf7\x3e\xec\xe4\xc7\x7b\x68\x5b\x37\x4f\x17\x27\x43\xf1\x1d\xf3\x8d\x73\x07\x5c\x6c\x76\x29\xaf\x9e\x85\x03\x10\xf6\xd1\xc5\x89\xfd\x31\x39\xc7\xdb\x76\x8f\x8f\xd5\x87\xb5\xf3\xc7\x29\xfa\x9b\xf9\x71\x22\x77\x79\x89\x9c\x74\x11\xa3\x24\x0b\x2e\x8e\xee\xe9\x62\x8c\x3e\x9c\xcf\x1d\xb6\x58\x1f\xe7\xf3\x6c\xdf\xe2\x51\x52\xcf\x76\x9c\xbf\xdc\x45\xdc\xee\x47\xb7\xd8\xdb\x89\x5c\x22\xe2\x3e\xb7\x3b\xdb\xe1\x7e\x84\xa8\xc2\x7a\x66\xed\x45\xf1\x07\x8b\xa1\x58\x41\x6c\x8a\x1f\x70\x76\x5b\x65\xf2\xc3\xfa\xca\xba\xa5\x34\x9a\x58\x59\x6f\x1a\x87\x45\xc5\x96\xa8\xd9\x8a\x85\x7d\xf9\x5c\x94\x1a\x66\xb7\x54\xd6\x48\xb9\x4c\xa9\x7a\x9d\x96\x3a\x9a\x5a\xd3\x0b\x9a\x5a\xb1\x75\xd3\x26\x4b\x5d\xaa\x57\x53\xad\x92\xa1\xdb\xb2\x62\x88\x56\x9b\xab\xcb\x9c\xd1\x21\x4b\x9f\xbf\x62\xc2\xf6\x60\x76\xff\x67\x71\xfc\x2b\x46\x7f\xc5\xf0\xaf\x5b\x96\xb1\xcf\x9f\xbf\x62\x9f\xc5\xba\x28\x8a\xe2\x5f\x7f\x7d\xde\x9c\x20\xdf\xce\x1d\xfe\xfd\xfd\xdb\x47\x08\x65\x92\xaa\xab\x64\xc9\x56\x18\x52\xac\x75\x6c\xd5\x2e\x51\x62\xb7\x22\x76\x3a\xc5\x4e\xa7\x45\xb6\x4a\x9d\x6e\xb7\xc1\x2a\xdd\x8e\xd2\x34\xab\x85\x4e\xcf\x12\xdb\x2c\xd7\x31\xe8\x03\x42\x61\x8d\x8c\x67\x78\x41\xa0\x68\x46\xa0\x6e\x40\xa4\x36\xff\xfd\x38\x44\xa9\x53\xac\x57\xda\x2d\xad\x6d\x74\x4b\xaa\xd6\x6a\x56\xdb\x2d\x46\x2d\x96\x44\x4a\xd3\xbb\x5d\xb2\x52\xaf\xd6\x38\x43\xac\x88\xb6\x52\x57\x6d\x56\x33\x65\x4b\x51\x5b\x1d\x43\x3f\x40\xe4\x4f\x20\xde\x62\x91\x7c\x10\xa2\xc8\xb4\x25\xb3\x2b\x32\x5d\xba\x2d\x2a\xa5\x4e\xbb\x41\xda\x55\x83\xb4\x0d\x5a\xb2\x8b\x25\xbb\xce\xd1\x8a\x6d\x56\x0d\x9d\xac\x97\x5a\x74\xbb\x51\x32\xca\x0d\xbd\x5a\x2d\x91\x77\x41\xec\xb6\x2b\x43\x6d\xac\xcf\x9c\xfa\x06\xe2\x31\x5c\xe2\x41\xb8\x72\xa7\x5a\x64\x1b\x3a\x6d\xe8\x65\xc5\x94\x6b\xba\x2a\x71\x14\x29\xd2\x14\xdb\x63\x4c\xbd\x60\x35\xb4\x62\xbb\xca\x15\x25\x4d\xae\xd5\xb5\xb2\x6a\xd0\x16\xa7\x74\xdb\x2d\xfb\xae\x4e\xef\x75\x06\x03\xa7\x23\x25\x3d\x8b\x19\x3a\x24\x7e\x0e\x19\xbf\x06\xf9\x4a\x64\x9e\xaf\x68\x3e\x11\xe4\xd7\xd7\x29\x7f\x34\xd2\x4f\xd7\x2a\xf7\xbc\xb2\x94\x2b\xf0\x1e\x43\xb1\x08\xb1\xbc\x4b\x38\x24\xe7\x30\x0e\x2f\x78\x24\x05\x3c\x86\x22\x08\x87\x63\x58\x01\x90\xb4\x07\x3c\x82\xc6\x29\xe0\xe2\x0e\x43\x3a\x2c\x45\x39\x38\xe7\x20\x41\x58\x53\x85\x3f\x79\xac\x75\x30\x1c\x09\x48\x44\x91\x9e\x47\xd2\x3c\xc0\x39\x07\x47\x1c\xee\xb9\x84\xc7\xba\x14\xc1\x43\xc2\x03\xd0\x25\x71\x87\x85\x10\xe7\x21\x45\xb9\x0c\xc7\x31\x24\x23\xf0\x2c\x4f\x90\x0c\x20\xd8\xad\x67\xe1\xeb\x8e\xfb\x8f\x3d\xa4\x4e\xd5\xa7\x97\xf9\xa5\x55\x95\xb8\x42\x58\x10\x4a\x24\xbe\x18\x4a\xb9\x04\xef\xa7\xc9\xbc\x3c\x5f\x11\x1d\xd7\x6a\x77\x81\x54\x01\x6a\x7f\x2d\xaf\xe8\xb4\x06\x56\x13\xb2\xfe\xa1\xe6\x9e\xd8\x21\xe8\x8d\x98\x34\xfa\x1b\x1a\xf2\xd2\xe3\xf3\x59\xec\x5f\x71\x54\x84\x28\x8e\x74\x1d\x1e\x67\x20\xcd\xd2\x82\x4b\x90\x2e\xc0\x5d\x87\xf1\x38\x80\x04\x8f\xf5\x18\xcf\xe5\x28\x8f\xf5\x20\x0b\x09\x5a\x20\x3d\x1c\xe7\x10\xe0\x18\x8f\xf3\x08\x16\xa7\x05\x67\xed\x64\xaf\x70\x76\x02\x87\x02\x29\x40\x1a\xa7\x3d\x87\x24\x09\x92\xc0\x5d\xc7\x41\x24\xa2\x70\x87\xc2\x01\x4e\x91\x02\xef\x00\x12\x27\x1c\x82\x06\x2e\x00\x1e\x45\x21\x8e\x40\xd0\x23\x69\x9a\xc6\x69\x84\x6f\x47\x6c\x82\x61\x04\x86\x13\x78\xfe\xcd\x63\x65\xd2\xec\x0d\x09\x3d\x63\x22\xdc\xa9\x70\x6d\x3a\x5c\x1a\x33\x7b\x51\xa4\x5a\x93\x68\x94\x9b\xa9\xa2\x91\xca\x44\x95\xac\x71\x12\xc7\xf6\x12\x58\x2c\x12\xc6\x68\x99\x44\xf5\xa9\x5a\x62\xf2\x0a\xef\x17\x50\x1d\xc5\xf1\xd4\xe9\x0b\x61\x6f\xa9\x16\x52\x20\xae\x22\xb7\xc5\x6e\xdc\x48\xec\x98\xad\x1a\xbb\xf9\x54\xde\xff\xb3\x1d\xde\x92\xc3\xdf\x73\xd1\xac\xef\x7c\xc7\xa4\x72\x4b\xb2\x1b\x11\x8e\x1a\xce\x5d\x67\xca\x58\xa3\x36\xdb\x2b\x15\x97\x6a\xd3\x96\x8d\x1a\x3e\x74\x71\x23\x56\x42\x9e\xa2\x47\xb0\xbe\xb4\x42\x45\x32\x13\x5f\x19\x14\x9c\x99\x4f\xcf\x93\x79\x54\xa8\x76\x33\x5f\x74\xd4\x2a\x39\xe5\x57\xcc\x82\x33\x2b\x4a\x5d\xa1\xb7\xf6\x2f\x78\x74\xf1\xa2\x7b\xbf\x79\x74\x01\xaf\xfc\x34\xcf\xfb\x59\xc7\x9d\x1e\xed\xf0\x34\xee\xd0\x24\x49\x0b\x1c\xf2\x08\x9c\x25\x05\x07\xd2\x1c\xf0\x48\xc8\xe3\x88\x01\x0e\xce\xe1\x02\x4e\xb0\x34\xc7\x03\x0e\x09\x04\xe1\x79\x1e\x82\x10\x30\x10\x38\x00\x71\xcc\x3a\x9f\x79\x49\x54\x70\x34\x41\x90\x3c\xe5\xd2\x14\xeb\x51\x9e\x4b\xb3\x0c\x8e\x5c\x9c\x16\x5c\x97\x03\x82\x20\x10\x2e\xcd\x38\xb4\x0b\x38\xd7\x63\x59\x4a\x40\x38\x10\x70\x96\x76\x69\x1e\x67\x58\x96\x75\x19\x6a\x9b\x26\xed\x3d\x9a\x78\xf3\xe8\x1c\x4d\x69\x4e\x5f\x5d\x14\x2d\x57\x49\x23\x3d\xf5\x50\x16\x92\x82\x47\xac\x84\xd9\x22\x51\x2b\xda\x5c\xca\x4d\x08\x21\xaf\xf6\x2d\xa7\x85\xd7\x26\x5c\x3d\x69\xe1\x9c\x51\x1e\x2e\x6b\x6a\x89\x5b\xaa\x7c\x36\x85\xdd\x5a\x44\x31\x35\x9c\xca\x2f\x69\x2a\x5d\x3a\xb1\xb2\xd8\x3a\xcb\xc6\xa3\x8f\xfc\xa6\xcb\x4b\xf9\x4a\xc3\x1f\x7b\xb5\x96\x33\x00\x2d\xb6\x80\x07\x49\xd7\x5c\xf4\x67\x75\xab\x44\x74\x0a\x75\xda\xaa\x0c\xf3\x1c\xf4\x16\xd3\x14\x57\xac\xbe\x50\x27\xf9\x3c\x51\xb4\x0d\x5c\x09\x5d\x34\x19\x37\x08\x35\xd5\x27\x82\x30\x36\x90\x3c\x91\x46\x44\x59\x6a\xf7\x52\x7b\xbe\xd6\x5c\xbb\xe0\xb1\x66\x74\xa9\xd7\xff\x7f\xf7\xd8\x2b\x19\xc8\x85\x0d\xb7\x27\xf2\x99\xf7\xbb\x35\xcf\x28\xbb\xb6\x9d\xf0\x9c\xce\xf3\x1d\x81\x27\xb4\x5d\x59\xcf\x7f\x42\xe3\x95\x95\xf7\x1f\xcd\x06\x8f\x56\xdf\x8f\x52\x6c\xa9\x5d\xe8\x59\x0d\x85\x2d\x58\x85\x8a\xa8\xc8\x9d\x06\x23\x17\x74\x56\x65\x6a\xdd\x6a\xa1\x62\x19\xdd\x8a\xd4\xeb\x52\xd5\x5a\xa7\x44\x16\x6b\x55\xa6\xd5\x52\x2d\xb9\x54\x2f\x6d\xaf\x68\xdb\xbc\xab\xac\x0f\x98\x40\x09\x07\xcb\xe2\x48\x92\x3a\x43\xbc\x4e\xe6\x34\x62\xac\x16\x9a\x15\x52\x19\xac\x86\x60\xdc\x31\xa3\x95\xea\xc6\x76\x32\x38\x78\xdf\xe6\x02\x24\x6f\x3e\xae\xc3\x4c\xf1\x17\xf3\xae\x63\xb3\xcd\xea\x72\x20\x47\xb6\x17\xf2\xcd\x65\x59\x67\x24\x36\xcb\x26\x59\x81\x74\xc3\xb2\x6d\x10\x51\xc1\x18\x10\x9d\xe9\xe6\x47\x12\x14\xec\xd5\x36\x26\xfb\xfb\x7f\xa4\x8d\xd2\xf9\xfe\xef\x82\x28\x0a\xf2\x51\x14\x4b\xdd\xc9\x92\xcb\x4d\xbb\x13\x94\xcf\xcc\x45\xc1\x36\xe2\x95\x5d\x4f\x29\x5b\x64\x60\xcb\xa4\xdb\xad\x5a\x1b\x68\x0e\xeb\x48\x30\x1c\x8e\x36\xea\x28\x5f\xd3\x82\x5a\x57\xe9\x36\x27\x12\x3f\xa7\xeb\x9c\xd1\x29\x1a\x19\xd9\x2f\x17\x6b\x56\xb7\x4d\xd1\x46\xd6\x15\xe3\xae\xd4\x64\xe8\x1c\x53\x1a\x39\x0d\x40\x6a\x4c\xd9\x28\x94\x73\x93\xa2\xc9\x8b\x22\xa1\x0e\xe2\x6a\x73\x06\xcc\x64\x49\x51\xb6\x94\x2f\x8a\x76\xb1\x2d\xf7\xff\xfa\xeb\xfc\x6a\xf1\xe2\xae\xa1\x9e\xea\x9a\xda\x69\xd7\x14\xa4\x4e\x7d\x19\xa6\xf2\xa2\xd3\x4c\x68\xdf\x2c\xcf\x6d\x6f\x56\xee\x2c\xd9\xc9\xa2\xbf\x1c\x7a\xa3\x55\xd3\xcb\x6b\x43\x44\x55\xb2\xa4\xa9\x1e\xba\x66\x72\x36\xda\xfc\x30\xf5\xc2\xcc\x36\x13\x4d\xaa\xda\x2b\x8e\xe2\xc3\xee\x9c\x5a\x0c\x3c\xa1\x96\xb5\x89\x26\x3f\x2b\x07\xa3\xc2\x90\xe0\x96\x4c\xb0\x28\xe5\xc8\xdc\xb4\x62\xb9\xda\x28\x91\xe8\x59\x9e\xe3\x6a\x71\x51\xb7\x1a\x81\xbf\x98\x32\x2d\x59\x5f\xb1\x7c\x8e\x6d\x47\xf9\xc0\xb0\x93\xbe\x27\xed\xa8\xbf\x1e\x67\x97\xb6\x77\x1e\x88\xb3\xb7\x2d\x9e\xc3\x94\x8b\x14\xa0\xe3\x78\x00\xb0\xa4\xc0\x39\x9e\xc3\x7b\x90\xa6\x18\x1c\x01\x8f\x62\x08\xdc\xe1\x38\x06\xc7\x11\x03\x19\xda\x43\x04\xcb\xd0\x90\x11\x00\xe9\x3a\x48\x70\x70\x06\x0a\x88\x12\x8e\x3b\x75\xe3\xd0\xca\xd6\xf5\xc9\xd2\xd8\xb6\x50\xa9\x0c\xea\x8a\x8a\xcc\x46\xc1\xa1\x67\xed\xae\xad\xd7\xc2\xae\x55\x32\xf4\x69\x0f\xe6\x86\xb5\x16\x99\x5a\x4b\xe5\xa3\x31\xff\xca\x76\xce\x0f\x37\xfe\xb0\xa5\xb3\x6f\x7c\x00\x92\x34\x81\x93\xcd\x8d\x27\x97\x8e\xcf\x6f\x2d\xdb\x04\xad\x5c\xe8\xa2\x5e\xa3\x42\xc3\xc1\x44\xac\xb7\x68\x41\xd1\x67\xbe\xd0\x1b\xd4\xf1\xa5\x3b\x28\x43\x9a\x9c\x04\x2b\xb6\xb6\xe8\x00\x42\x2b\x1f\x42\xbb\xb0\xf9\x97\xac\xc2\x2c\x3f\x1d\x57\x3b\x33\x6e\xc8\xd7\x89\xc2\x94\x27\x14\xcd\x25\x44\xa3\xa3\x36\x73\x6a\xd0\x54\xc7\x3e\x99\x1b\xcf\x3b\x15\x9a\xd9\x33\x59\x19\x3c\xe9\xde\x8f\xf4\x84\x24\xd2\x02\xdd\x1b\xc4\x74\x8e\x6a\x4c\xa3\xea\xbc\x9d\xcb\x1b\x6d\x8e\x51\xaa\xb5\xba\x6d\x58\x85\x29\x9c\x99\xd1\x3c\x08\x46\x96\xa2\xcd\xc2\xbc\xd4\x24\x92\x79\x73\x66\x44\x86\xb1\x10\x35\x22\xa9\xa8\x69\x27\xb0\x07\x1d\xb6\x57\xa2\xf1\x95\x3f\x67\xec\x7e\xb1\xdb\x27\xcb\x85\xbd\x67\xc8\xdd\x27\xb3\x2b\xe9\x91\xe1\xa3\x6e\x98\xa8\xd8\x05\x39\x33\xc5\xc1\x54\x4e\xd4\xd9\x6c\x15\x64\xb9\x86\x3c\x54\xd4\xc2\xa8\xcf\x86\xda\x8a\xad\x55\x7a\x3d\x65\x20\x73\x4c\x7e\x6e\x0b\x4e\x4d\xe1\x56\xd3\xc2\x30\xa9\xcb\x82\x23\x37\x9c\x16\xd3\x2a\xb7\x72\xe3\x46\x4e\xaf\xd1\x89\xd1\x2a\x4b\xe3\xb2\xee\x8b\xf8\x96\x2f\x75\xd6\x68\x8a\x40\x89\xa9\x59\xac\x28\x42\x51\xa9\x34\xd1\x12\xe9\xed\x5e\x15\xd5\xbd\xd8\xd7\x85\x92\xd0\x1b\xb3\x0a\xeb\xb8\x33\x5c\xe9\xc1\x71\x41\x18\x01\xaa\x18\x2f\x69\xa1\x2b\xdb\x73\x98\x63\x4a\x74\xbe\x37\x37\xaa\x66\xb5\x17\x69\xe5\x4e\x30\xf1\x04\x62\xcb\xd7\x13\xfe\xd6\xdf\xf7\xff\xfc\xd9\x6c\x76\x73\xb4\x7f\xcc\x7f\xeb\xa6\x43\x14\x38\x79\x6e\x05\xb5\x9c\x90\xaf\x90\x35\x9d\xef\x76\xf2\x4d\x2d\x48\xed\xbc\xb6\xac\xf4\x44\x5a\x40\x7c\xd6\x83\x8d\x7c\x3a\x9b\xfa\x76\x68\x31\x9a\x88\xb4\x7c\x2e\xb7\xaa\x2e\x86\xf6\xa8\xd7\x4d\x40\xd6\xaa\x0f\x61\x6e\x66\x66\xc1\xd4\x64\x9a\x81\x56\x2e\xcd\xbb\x9b\xfe\xe7\x86\x30\xcd\xc4\x8e\xd2\xab\xe0\x16\xd9\x27\x09\x81\x65\x3d\x87\xc8\x77\x4c\x32\x5f\x9c\xdb\xa3\x99\x58\x62\xc3\x0e\xc5\xb7\xa5\xca\x66\x3e\x59\xdc\xe0\x2f\x32\x51\x25\x6d\xb9\x61\xd7\x68\xb9\xbd\x69\xda\x99\x34\x4b\x52\xea\xc0\x2e\x3e\x96\xc7\x1e\x94\xca\x55\xa5\xdf\x0e\x83\x99\x5a\x1e\x00\x71\x93\x3d\xef\x33\x01\xe9\xfc\x72\x71\xf8\x68\x1f\x3e\x9e\xfb\x67\x5f\xbc\xf7\x90\x9c\x85\x55\x6e\xaf\xe5\x15\xa9\xa9\x93\x1e\xd5\x43\xf9\x4e\x89\x6a\xb6\x87\x5c\x5d\x98\x7b\x54\x2c\xd4\xb8\x1c\xef\xa5\x66\xbc\x1c\x2c\x54\x29\x2f\xb2\xc1\xbc\xc1\x94\x65\xdf\x77\xe5\x80\xa4\xed\x69\xc1\x31\x08\x86\x82\xb0\x3f\x75\x29\x58\x4b\x8a\x53\x39\x55\xd8\x4a\x6f\x39\x97\xaa\x75\x87\xe7\xb5\x8d\x15\xad\x4d\xab\x38\x1a\x18\xac\xb8\x14\x64\xdc\x4c\x8a\x4a\x7f\x06\x09\x8e\x20\x6c\x81\xef\x0e\xe9\xb1\x36\x1a\x0b\x75\x8e\x19\xc9\xd4\xec\x25\xed\x9f\xdf\xdf\xfe\x5c\x4f\x4c\xb9\xf9\xa6\xfd\xab\xd5\xcc\x9d\xf4\x9a\xd3\x85\xd9\x6d\x75\x40\x30\x63\x6a\x0b\xc7\x9b\x13\xd5\xba\x93\x96\x46\xc6\x1c\x55\xba\x36\xe9\x2b\xb6\x30\xed\xe4\x85\x49\x5b\xc7\x09\x58\x94\xa0\x48\xf5\xb5\x22\x35\xa9\x2c\x23\x82\x98\x3b\xca\x92\x9d\x92\xac\x14\xd1\xda\x94\xad\x8d\x96\x39\x58\xdd\x58\x79\xbc\xff\xe5\x87\xda\x7f\xff\x71\xd4\xff\xe2\xa0\x3e\xf6\x6b\x56\x54\xa5\x1c\xb7\xc8\xe7\x61\xcd\xa0\x40\x77\x50\xe9\xb5\x8b\x83\xc6\xca\x14\x74\xb9\x35\x56\xad\x1e\x68\xf7\xb8\x48\x99\x70\x8d\x65\xa2\x56\xac\x41\x59\x23\xe7\xe2\x3c\x27\x77\xbb\x68\x06\x2c\xaa\x55\xa7\xcd\xa0\x28\x58\x4e\xa0\x37\x35\xc3\x18\xf0\x5b\x2b\x55\x76\x88\x7c\x6a\x38\x8e\xca\x7c\xb3\x18\x14\xf2\xa8\x0f\x29\xce\xec\xa4\xa5\x6a\x75\xd5\x6e\xf1\xf3\x96\xdf\x93\x80\x9c\x31\x1a\x53\x13\x5f\xd1\xff\x37\xda\x2b\x6e\xd6\x97\x5a\x74\xb7\x4d\xcc\x9d\xa2\x9d\x75\x49\x21\x7d\x27\x05\xb8\xd1\x6c\x34\xdf\x88\x2f\x3d\x85\x90\xa6\xb9\x68\xd8\x53\x43\x0f\xae\x92\x56\x9e\xe9\x99\xaa\xde\x14\xd4\xc6\x04\xb5\xdc\xa1\xd7\xe0\xab\x4a\x87\xaf\xc1\x59\xa6\xab\x66\xbf\xda\x68\x51\xe4\x84\x9f\x30\x0d\x6f\x9e\x0b\x16\x54\x45\xce\xb7\x23\x5a\x9c\x30\x4e\x3d\x0a\x2a\xc5\xa9\x1e\x15\x51\x55\xda\xfa\x27\xd7\xd5\x78\x91\x1b\x06\x7d\xc5\x44\xb8\x6b\xdb\x5c\xab\x04\x0b\xf5\x05\x5b\xcf\xcf\x83\xd2\x14\x52\x76\x81\x60\x40\x85\x2a\xfb\x44\x7d\xbf\x34\xb4\xf5\x87\xf3\xf8\x3e\xb4\x5f\x3d\x7c\xa9\x5c\x3a\x7f\xf9\xd8\x9c\x77\x07\xdd\x71\xed\x32\x1f\x96\xbb\x2c\xa7\xf6\x86\x0f\x6e\x6c\xf6\xaa\x39\x11\xf0\x4b\x2d\xc7\x8f\x19\xb3\x95\xb9\xd0\xce\x34\x8f\x5c\x89\xab\x9c\x49\x31\x4d\x56\x02\x41\xdb\x63\xc2\x24\x75\x57\xf6\x8c\x99\xcb\xc8\x4a\x2b\x39\x43\xb2\x20\x44\x1a\x17\xe5\x5b\x19\xac\xe3\x26\xe2\x96\x88\x13\x2b\xd4\xc8\x18\xb6\xeb\xf2\xb3\x7c\x9c\xb7\xef\x2e\x3e\x94\x0f\x48\xb9\xdc\xfe\x44\x6d\x19\xab\x88\x15\x08\x95\x1e\x25\x89\x59\x0e\x4a\x79\x3d\xe9\x69\xd3\xd2\x44\x06\x4a\xbb\x49\x34\x79\x5c\xcc\x2d\x8d\xe6\xb4\x66\xc5\x25\xa9\x39\xaa\xb5\xdc\xb2\xcc\x9a\x26\x4d\x2f\x96\x5e\xbe\xe5\x47\x83\x7e\x6b\x34\xb6\x02\x76\x3c\x1e\xe0\xf9\x84\xf6\x33\x53\x29\x1c\xf0\x49\x07\x7c\x3f\x7c\xfd\x7d\x3f\x7b\xba\x90\x73\xbe\x3d\xb7\xbf\x7d\x28\xe8\x72\xce\x49\xe0\xf7\x68\x0a\x51\x3a\x8f\xe2\xd1\x04\x24\xc9\x64\x10\x83\x04\x5d\xd0\xd4\x44\x49\x8a\x59\x05\x15\xd3\xb7\xc2\xd8\x37\xcc\x42\x93\x14\x8d\x1d\x14\x63\x24\x4e\x30\xf7\x18\xf2\xa2\x18\xa2\x04\x4e\xa2\x30\x44\x8b\x34\x00\x59\x08\x07\xe7\x86\x36\x0f\xdd\xdc\xa3\x6c\xbb\xfe\xb8\xdb\xd4\x4e\x2e\xb7\xff\xff\x6e\xf6\xc0\x7f\x4b\xfd\x31\xfa\xed\x4f\x0c\xdf\x6e\x89\xff\xb6\x7b\x8b\xc1\x6f\x7f\x62\xdb\xf3\x9b\x2f\x07\x20\xf9\xed\xcf\xed\x23\x3f\x9b\x2f\xff\xbd\x13\xf6\x10\xba\x4f\x70\x0c\x16\xe9\x22\xf1\x57\x77\x8a\xc7\x28\x41\xf1\xec\x23\xe1\x4f\xff\xbe\x8b\x0a\x90\xa4\x9b\x7b\xd5\xdd\xdd\x3d\xa3\x17\xa8\x78\x7a\x5d\xf6\x0e\x1c\xbb\x19\x3e\x88\xe1\xc0\x9f\xed\x4e\x5e\xe9\x92\x43\x1f\x10\x3b\x42\x36\x74\xc4\xbf\xfd\x89\xfd\x36\x23\x88\x7f\x11\xff\xc2\x7f\xdb\x9d\x80\x59\x1c\xa3\x30\xd5\x36\x4d\xfb\xed\x4f\x8c\x3a\xfd\x5e\xda\x3c\x4e\xb0\xe6\xed\x7f\xef\x89\x3c\x50\xba\x97\x5c\x2b\xc6\x49\x24\x90\x24\x45\xf1\x04\x41\xe2\x24\xcf\x51\x24\x2b\x40\x9c\x75\x70\x92\x46\x34\x2e\xb8\x2c\x47\xd3\x14\xc1\xe2\x9e\x07\x1c\x17\x21\x92\x87\x3c\xa4\x79\xc0\x31\x24\x81\xe3\x38\x09\x77\x88\xf6\x7a\xd7\x5e\x7c\xd2\x81\xfb\x33\x9b\xb6\xaf\x5d\xee\xe4\xd4\xbf\xcf\x7e\x9f\x84\x60\xb2\xc6\x85\x3c\x8a\x00\x24\x0e\x28\x81\x47\x88\xa3\x20\x22\x49\x92\x63\x10\xe0\x09\x8e\xe3\x78\xd6\x01\x90\xa1\x59\x86\xf5\x28\xca\x85\x90\xf6\x28\x0f\x41\x16\x77\x19\xc6\x75\x3d\x82\xa5\x5c\xe1\xb7\x4f\x17\x2c\x5c\xe3\xe0\xc9\xe3\xc7\x39\x20\xbe\xbe\x3f\x17\x65\xe9\x24\x4b\x5f\xdb\xf6\x5b\x0c\x3f\xdd\xea\xff\x68\x86\xef\xf3\xb2\x7f\x38\xf8\x87\x83\x7f\x38\xf8\x87\x83\x7f\x38\xf8\x87\x83\x7f\x38\xf8\x87\x83\x9f\xc8\xc1\xe6\xd3\xff\xd9\x4e\x5e\xae\xec\xc6\x5c\x79\x8c\xe5\x89\x4d\xe4\xab\x4f\x0d\xfc\xe8\x0e\xcf\xc9\x93\x03\x87\x1b\x5b\x48\x40\x92\x1c\xa4\x04\xc8\xd2\x80\xa6\x3d\xc8\x01\xc7\xa5\xa1\xc0\xf2\x84\x40\x33\xac\x87\x53\x82\x20\xe0\xac\x4b\x90\x90\xe6\x58\x97\xc3\x1d\x1a\x27\x1d\xcf\x75\x48\x81\x75\x59\x40\xed\x6e\x91\x3a\xd9\x09\xaa\x89\xa7\x2b\x5d\x92\x9f\x97\x70\x0d\xaf\x14\x97\xe9\x60\xae\x13\x41\x17\x07\xcb\x49\x44\x08\x7a\x69\x31\xd3\xe4\xa5\xc1\xa4\x92\x02\xe5\xd6\x6c\xae\x0a\x73\xaa\x9f\xc6\x46\xd8\xbb\x67\xd5\xe3\xea\xaa\xd1\x66\xa5\x42\x7e\xc6\x7e\x37\x9f\x83\x67\xfa\xee\xb4\xff\x7e\x8f\xf8\x32\xef\x14\xeb\x20\x0e\xf7\x1c\x8e\xe3\x49\x4f\xe0\x71\x02\xba\x10\xb9\x90\x20\x71\x16\x91\x84\x27\x08\xa4\x40\x41\x41\xe0\x59\x1c\x10\x0c\xa2\x69\xc2\xa3\x39\x5a\xe0\x68\x0e\xe0\x80\xe2\x80\xb3\xe5\x9d\x7c\xcf\xfb\x2f\x6a\xf7\xab\x78\xe7\xe9\xc3\xef\xcb\x3f\x81\x77\x01\xe7\x79\x1c\x40\x86\xe2\x09\xc6\x05\x90\xa7\x69\x02\xb8\x2e\x4e\x92\x38\xe0\x58\x8a\x40\x1e\x83\x00\xa4\x5c\x86\x83\x24\xe2\x05\x96\xa2\x11\x10\x1c\x86\xc4\x29\x8f\x25\x00\x8f\xe8\xfd\x4d\xdc\x2f\xe6\xfd\xd1\x76\xbf\x8a\x77\xee\x68\xb9\xba\xf6\x13\x78\x77\x19\xc6\x41\xa4\xc0\x42\x96\x22\x01\xee\x02\x82\x64\x05\x9a\x64\x71\x84\x18\xc1\x45\x94\x43\xe1\x0c\x4b\x10\xac\x47\xe1\xbc\xeb\x11\x0e\xe5\xf2\x2c\x47\xf1\xb4\x03\x68\x07\x32\x38\xe1\x6d\x79\xa7\x5f\xce\xfb\xa3\xed\x7e\x15\xef\xcc\xfc\x43\x43\xcf\x8d\x33\x38\xe5\xf1\x38\x10\x28\x57\x58\xbb\x3d\xed\xb1\x90\x10\xa0\x03\x08\x9c\x84\x04\xc3\x0a\x04\x64\x70\x8e\x76\x71\x40\x33\x8e\xe7\x02\x81\x76\x28\x08\x09\x9a\xa7\x09\x80\x3c\x07\xd0\xbb\x1b\x06\x6f\xf2\x2e\x13\x99\xe4\x96\xa2\x66\xd6\xaf\xcd\xea\x69\x81\x93\x06\x65\x8d\xd2\x91\xe0\xb6\x4c\xaf\x58\xce\x55\x7c\xa6\x32\xb3\x8d\xfd\x4e\x96\x58\xb1\xe5\xdc\xae\x51\xb7\x76\x02\x6f\xf3\x5e\x78\xce\xbe\x01\x1f\xb3\x7f\xf7\x38\xc3\xf0\x14\x49\xf1\x1e\x14\x04\x97\xe4\x3c\x9a\xf6\x58\x87\xc5\x11\xc5\x12\x04\xee\x70\x2c\xeb\x31\x24\xe1\x39\x10\x38\x0e\xcb\x7b\xb8\x80\x08\x17\x38\x02\x01\x69\x9c\x44\x14\xce\x32\xfc\x96\xf7\x0f\xc6\xf7\x0c\xc8\x4e\xab\xd3\x23\x0b\x41\xa7\x0d\xe2\x16\x6b\x2f\xe6\x4e\x9b\x2a\xea\x95\xfe\x24\xa4\x44\x4b\x1e\x94\xd5\x09\xb3\xdf\x41\x7b\x39\xef\x8f\xd8\xff\xd9\xbc\x43\x86\xe6\x08\xca\x63\x70\x88\x68\x8e\xf2\x78\x96\x20\x18\x86\xe6\x49\x48\x02\x9c\xe5\x11\xeb\x12\x38\x2d\x10\x80\x75\x3c\x81\xa3\x70\x92\x74\x18\x0f\x72\x82\x80\x68\x8a\x65\x79\x9a\xa4\xf7\xcf\x11\xdd\xe0\xfd\x07\x77\x82\x5e\xce\xfb\x23\xf6\x7f\x36\xef\x1c\xc3\xb2\x8e\xcb\x3b\x34\xef\x32\x0e\xf0\x58\x9e\x85\xbc\x20\xb8\xb4\xc7\x23\x8e\x22\x21\x22\x58\xe0\x12\x80\x06\xb4\xe7\x7a\x8c\x03\x19\x1a\x32\x80\xf1\x58\x8a\x75\x1d\xe0\xe1\xc2\xee\xc6\xe4\xdb\xe3\xbb\x9c\x45\x54\x94\xd2\xcc\x54\x36\x95\xc5\xa4\x9e\xa7\xa2\x92\x9e\x5b\x11\x5c\x63\xe9\x27\x44\xe0\xd5\xd4\xee\xb8\xde\xee\xc7\x99\x95\x6b\x8a\x3f\x83\xf7\x47\xec\xff\x6c\xde\x11\xc3\x00\x86\xa3\x20\xc9\x39\x88\xe2\x3d\x16\x21\x8f\x86\x80\x66\x48\x92\xa1\x71\x44\xb3\x02\x4b\x78\xa4\xeb\x42\xc1\xc1\x11\x58\xff\x45\xd0\x14\x8f\x43\x57\x60\x1c\x40\xe3\x1c\xb9\xe5\x9d\x79\xcf\xfb\x2f\x8a\xf3\x4b\xbc\x3f\x62\xbf\x46\xff\x5c\xde\x69\x0a\x22\x06\xd2\x02\xe5\xb0\x2c\xce\x13\x02\x21\x38\x90\x81\xb4\x27\x00\x1e\x07\x34\x24\x59\x8e\x61\x09\x52\xf0\x20\x8e\x38\xc7\xa5\x1c\xca\x65\x1d\x00\x08\x04\x10\x20\x58\x8e\xc4\xb7\xbc\xb3\x37\x79\xff\x3b\xe3\xfc\x12\xef\x8f\xd8\x7f\x8e\xf7\xab\x73\xe0\xd7\x4c\x80\x7f\xf6\xec\xb7\xa8\xf1\xa5\xfa\xac\x3e\x72\xaa\x64\x49\xa4\xda\xad\x61\x23\xae\x8e\x87\x1d\x1c\xf7\x8a\x7c\xa2\x95\xb9\x31\xae\x34\xe6\x95\x76\x5e\xec\x50\xe2\xfe\x3e\x92\xcd\x71\xe3\x3e\x92\xed\x11\x4f\x75\x56\x43\x06\xe8\x0f\x17\x35\x60\x9b\x02\x2b\xad\xbc\x44\x40\x38\x8c\x62\xbd\xd7\x59\x49\xed\xca\x48\x8d\xaa\x6f\xf7\x85\x88\x72\x4b\x9c\x1d\x3f\x5d\x26\x6d\xb3\xce\x75\x27\x17\x52\xaa\x3a\x1f\x03\x33\x33\x5d\xd5\xb2\x17\xae\xa8\x22\x87\x35\xea\x28\x5d\xd6\xab\xe5\x36\x58\x05\x8e\x55\xab\x0d\xc6\xa5\xaa\xae\x15\xe8\x64\x3a\x50\xa6\x76\x0f\xd6\x4d\x3c\xc8\x75\xf2\xc6\x24\x17\x25\xed\xb1\xce\xe6\x54\xbb\xeb\x24\x2b\x8e\xa9\x93\xc3\x22\x3d\xab\xd5\x3e\x7f\xc5\x3e\x27\xd3\x72\x38\x67\x16\xa3\x89\x92\x2f\x4d\x85\x66\x05\x48\x81\xea\xcc\x8d\xde\xa8\x88\x5b\x8b\x92\xd3\x91\x71\x31\xce\x3b\xd5\x36\x31\x3d\x64\xda\x37\x38\x38\x78\xc6\xc9\x1d\xb4\x47\xb2\xdb\xa7\x3e\xc4\x5f\x97\x85\x8b\x2f\x98\x05\xa8\xcd\xb6\x34\x79\xc2\xbe\x28\xfe\xba\xab\xe4\xa5\xd1\xf2\x67\x2f\x75\x3c\x1e\x64\x37\x6e\x56\xdb\x1e\x06\x29\xe7\x45\x83\x66\xba\x52\x81\x4a\x4b\x2d\xd5\x20\x1a\x94\x88\xd7\xd0\xc8\xe4\x2b\x0d\x36\xd4\x09\x51\x40\x6d\xff\xed\x66\x9b\x5b\x41\x26\x52\x8b\xb6\xb3\x30\x0d\x27\xec\xd5\x7c\xa9\xa8\x56\xb5\x4a\x3d\xf3\x2a\x5a\x3f\x6b\x26\xa5\xca\x62\x29\x26\xa6\xc9\xa8\x42\x6f\xc8\xb0\x04\xe8\x84\x33\x3d\x5f\x6a\x35\x2a\x8e\x9a\x28\xd0\x4f\x8b\x4e\xdf\x17\xdc\x76\xcb\xad\x36\xba\xb3\x71\xab\x2d\xfb\xab\xb2\x3b\xd6\xca\x85\x75\x20\xe8\x31\x33\xcf\x51\x48\xce\x75\x45\x48\x19\x94\x54\x2e\xd2\x83\x5c\xaf\xda\x5c\xf6\x06\xfd\xa8\xc5\x28\x25\xdc\xad\xb8\xa5\xa8\xaa\xb3\xc9\x1e\xd8\xaf\x0f\xb2\x67\x9d\xfc\xc9\x20\x9b\x72\xf9\x66\xa1\xf7\xc2\x20\xfb\x3b\xa7\x00\x77\x05\xd9\x8b\xd7\xb5\x1e\x0f\xb2\xc2\x19\xfa\x77\x0e\xe7\x8c\xfb\x63\xa2\x45\xba\x7d\xa6\x45\x8c\xa7\x04\x0a\x6a\xb0\x48\xa4\x8b\xa1\xd5\xad\xf6\x84\xb9\xd2\x8f\x2c\x09\xa0\x36\x6f\xfb\xea\xe6\x31\xa1\x1b\x41\x26\xb9\x1d\xba\x91\x2f\x0e\x56\x53\x3e\x1f\xe7\x32\xde\xd4\x72\x89\x1e\xfb\xa5\xc4\x62\x82\x36\xd1\x4a\x73\x02\x92\x11\x1e\x86\xed\x9a\xde\x5c\xd5\xfa\xd0\x76\x40\x8c\x4c\x27\x9e\x14\xc8\x7e\xcc\x17\x86\xad\x6c\x0c\xc7\x93\x56\x49\x98\x17\xc9\x62\x27\x6d\xcf\xe6\xab\x4e\xa4\xad\x03\x61\x54\xee\x57\x17\xcd\x7e\x8b\x4c\x06\x4a\x31\xc5\xe5\x72\xd5\x1d\x96\x66\x9d\xe9\x5c\x68\xf1\x5a\x14\x0c\x9b\xd3\x31\x51\x2e\x08\x83\xa9\x71\xe8\xb1\x5f\x1e\x64\x4f\x3b\xf9\xb3\x41\xb6\x8c\xeb\x6a\xe5\x85\x41\xf6\x77\xae\x6f\xdc\x15\x64\x2f\x5e\xc4\x7c\x3c\xc8\xce\x57\xe6\xdf\x39\x5c\xea\xf4\x3b\x0d\x56\xe1\xa2\x82\x86\x6b\xf5\xdc\xbc\x6b\xc9\xc2\xaa\x33\xeb\xb4\x9a\xd4\xc2\x37\xfd\x6e\x66\x39\x44\x61\x36\xae\x6b\x68\x73\x0b\xf4\x8d\x20\x93\x65\xad\xbd\x98\x6a\xae\x3b\x1c\xa9\xa3\x45\x71\x65\x2e\xcb\xed\xc6\x94\x2a\x24\x0b\x95\x63\x5c\x2e\x0b\x2a\x11\xd9\xab\x2c\x2c\x8e\x12\x6a\xdc\xac\xd5\xaa\x99\xb2\x5a\xe8\x2f\xb9\xb2\xc5\xfb\xf2\xb8\xd1\x63\xf3\x2c\xb3\xe4\xca\xcb\xb8\x12\x28\x8a\xb7\xaa\xf8\x60\xd6\x55\x8a\x9b\xdb\x38\x5b\x33\x3f\x48\xba\xcb\x48\x8f\x2c\x60\x57\xfa\x5c\x10\x22\x63\x25\xb5\x95\x36\x3f\x1f\x7a\xc5\x15\x59\x84\xb4\xc5\x5a\xbc\x2d\xf1\x7b\x60\xbf\x3e\xc8\x9e\x75\xf2\x67\x83\x6c\xd2\xd1\x8b\xcf\xa4\xab\xa2\xf8\xeb\x16\x6f\xef\x4b\x17\x5f\xbb\x62\xfd\x5f\xfc\x6c\xc7\x3a\x10\x6a\x85\x9c\x38\x6d\x92\xf5\x58\x6d\x92\xf3\xde\x92\x55\xe4\x79\x0b\x34\x16\x75\x57\x97\x47\xed\x3c\x39\xb1\x56\x2b\xc9\x52\x8a\x59\x8e\xfd\xe8\x4a\x66\x9f\x76\xe4\x49\x90\x6d\xf8\x2a\x9c\xb7\xff\x81\x41\x68\x18\x1e\xf8\xbf\x72\x5c\xbd\x2f\xfe\x1d\xff\x4f\xda\xbf\x32\xc0\x7c\x60\xff\xe2\x4a\xce\xb3\x3b\x14\x0f\xed\xc4\xfe\x44\xfb\xb5\x1b\xf6\xef\x4b\x57\x5f\xbb\x3d\xf2\x5f\xfc\x00\xdb\x3a\x10\x83\x6e\x6d\x38\xe4\xc7\x6e\x25\xdf\x30\x01\x59\x18\x76\x1b\x32\xd5\x9b\xd9\x83\x1c\x3f\xe5\x80\x29\xa3\x12\xc8\x1a\x0b\x51\x1b\x4a\xc1\x01\xf8\xab\x82\xfc\x81\x74\x7e\x68\x1c\xf8\xbf\x72\xdc\x1f\xe4\x4f\xda\x7f\x61\x90\x3f\xbb\x4c\xfd\x6c\x90\xbf\xda\x7e\xf9\x86\xfd\xbb\x82\xfc\xc5\x7b\x71\x85\xb4\x3f\x9b\x17\x32\xa3\x2d\xd6\x05\xae\x41\x34\x9a\xa9\xed\xce\xf5\x42\x69\x52\xc8\xcb\x36\x9a\xac\xdc\xba\xd9\x09\xa2\x10\xfa\x5a\x4b\x7c\x45\x90\x7f\xfc\x2a\xaf\xbd\xfc\x7e\xa2\xbf\xbe\xbc\xda\x9c\x31\x8c\x29\xbb\xe3\x5b\xcb\x39\xef\xdb\x1e\x4f\x2e\x46\x59\x84\x46\x95\xa8\xd1\x33\x5b\xe6\xaa\x5e\xe0\xca\x8c\x11\x2d\xaa\x09\x54\x8d\xfa\xa2\x85\xf7\xb5\x88\xcf\x0f\x87\xa5\x4a\x5e\x68\x57\xfd\xa2\xd4\xb6\x7a\xd5\xce\x14\x80\x52\x33\xb7\xf2\xab\x34\x5f\xdf\xac\xae\x2e\x6c\xd8\x14\xea\xab\x11\xcc\x0f\x06\x6a\xcb\x92\xe7\x53\x29\x62\x52\x45\x19\x01\x90\x0f\x56\xa2\x9f\x7a\x0b\x26\x1c\xe9\xe3\x81\xfc\xfa\x2b\xf9\x03\x0b\x63\x2f\x0d\xf2\x27\xed\xbf\x30\xc8\x9f\xdd\x13\x79\x36\xc8\x5f\x6d\x5f\xb9\x61\xff\xae\x20\x7f\xf1\xc6\xef\x3f\x8f\xe2\x9e\x3d\x8a\xbb\x0d\x50\xb7\x0d\x04\x1f\x1f\xb6\xb2\x19\x28\x2e\x2b\xa1\x9d\x33\xe0\x72\x35\x00\x69\x71\x34\x31\x29\x62\xa6\x36\xd5\x89\xd7\x25\x49\x96\xaf\x7c\xb4\xb5\xf2\xe3\xc1\xff\xc0\xd6\xd3\x4b\xd3\xf8\x27\xed\xbf\x32\x8d\x7f\xf2\x06\x80\xa7\xd3\xf8\x9f\x61\x5f\x3b\x7b\xa3\xea\x33\x83\xc1\x8b\xef\x46\xf8\x2f\x7e\x2f\xc1\xe6\x3d\xab\xad\x49\xc7\x94\x51\xce\x30\x9d\x4c\xa8\x4d\xd4\x72\x50\x37\x1a\x93\xae\xa7\xb9\x4b\xa7\x30\x05\x6d\xc5\x36\xc4\x55\xaf\xcd\xd6\x4b\x87\x40\xfb\x0f\x49\xeb\xcf\xf9\xdc\xf5\xc7\xdf\x96\xd6\x9f\xf7\xff\x7d\xf6\x7f\x4a\x5a\x7f\x3e\x08\xde\x4a\xab\xc5\x9f\x90\xd6\xff\x88\xfd\xbb\x82\xfc\xc5\xb7\xbe\x3c\x9e\xd6\xbf\x3a\xc8\x37\xe7\x25\x52\xf5\xbb\xcb\xdd\x48\x78\x76\xfe\x90\xe6\x17\xb2\xae\x30\x8a\x69\x29\x5e\x95\x67\xdc\xd2\x19\x09\x6d\x86\x58\x58\x74\x9a\x77\x6a\x05\x93\xce\x7b\x81\x19\xa9\xd3\x56\x2f\x3f\x46\x4b\x82\xd2\xad\x7c\x28\x56\x98\x2a\x1e\xd2\xb4\x5a\x59\x2c\xe8\x59\x36\x14\xda\xcc\xa2\x50\x17\xb8\x59\x85\x4b\xc4\x10\xd5\x59\xbd\x27\x6e\xe6\xf2\x75\x9e\x81\x56\x33\x1d\xcb\xd2\xa8\x37\x53\x17\xe6\x38\x92\x47\xf3\xb1\xdb\x56\x26\x79\x91\xe1\x70\xce\x6c\x67\xd3\xd2\x94\x1d\xf4\x96\x07\x60\xff\x21\x69\xfe\x95\x0c\xec\x6f\x4b\xf3\xaf\xf8\xc3\xaf\x48\xf3\xcf\x83\xee\x56\x9a\x2d\xfe\x84\x34\xff\xa2\xfd\xd2\xe1\x55\xef\x97\x63\xe1\xc6\x2d\x58\x37\xca\x48\xfc\xe8\x7d\x58\x67\xa5\x24\xde\xc6\x95\xe3\x1b\xa9\xb6\x2f\x3c\x3e\xf8\xec\x85\x81\xe9\xba\x96\xfd\xaa\xe0\xf6\x35\xc9\xef\xb4\x5c\x2d\x7d\xfb\xbe\x22\xf8\xbe\xe4\xef\x5b\xb9\x89\x0f\x9a\x79\x5c\x9a\x7c\x53\x90\xfc\x48\xe3\xe6\xe9\x31\xb1\x50\xb8\x50\xa4\x73\x6f\x10\x33\x1b\xe5\x9a\xd8\xe8\x62\x55\xa5\x8b\x7d\xd9\xd7\x2f\xfa\xba\x2f\x8e\x7b\xb5\x54\xed\x59\x91\xf4\x57\x01\x4f\x6e\xa0\x4e\x6e\x41\xbe\x54\x3a\xf4\x50\x17\xfe\x69\x78\x0e\x08\x2f\x21\x7b\x33\x70\x0a\x6a\x5b\xad\xec\x76\x5d\xd1\x9b\x05\xf1\x9f\x86\x7b\xa2\xfc\x12\xf0\x1b\xd6\x31\x5b\x2f\xd7\x6d\x05\x3b\x94\x30\xf9\xa1\x96\xbc\x86\xef\x1f\x6c\xc0\xfb\x3e\x38\x94\x5a\xbd\x52\x26\xf4\xad\xb2\xe4\x6b\xf0\x6e\x95\x5d\x02\x7a\x64\xe6\x14\xe1\xae\x78\xe5\xe5\xa2\x95\x6f\x95\x15\x5f\x02\x6e\xa3\xeb\x12\xb6\x83\x91\x53\x68\xfe\xe4\xeb\xa6\x94\xe5\xcd\x22\x8d\x27\x7f\xbc\x0a\xe9\x91\xca\x8b\x80\xcf\x4d\x5e\xea\xf4\x2b\x95\x1c\x77\xff\x7b\x1d\xd2\x24\x73\xae\x60\x7c\x33\x73\x8a\x6e\x53\x04\xf2\x46\x59\xc7\xa3\x8f\x2f\x02\x79\x50\x78\x09\xe8\x99\xb9\xbb\xc6\xb0\xa3\x77\xd6\x1e\x15\x09\x7c\x0d\xda\x83\xc2\x4b\x68\xcf\xcc\x9d\xa2\x7d\x2b\x8e\x78\xa3\xf8\xe0\xd1\xc7\x57\xe1\xdd\x2b\xbc\x88\xf7\xd4\xdc\x29\xde\x7d\xfd\xc2\x1b\x75\x09\x8f\xab\xbf\xbd\x06\xf0\x41\xe1\x25\xc0\x67\xe6\xae\xa6\x06\xdb\xba\x84\x5f\x0f\x45\x07\x6f\x16\x9e\x3b\x2d\xd3\xf6\xa2\x76\x1c\xa9\xbc\xd8\x92\x73\x93\x97\x46\x89\x04\x4d\xbf\xbe\x55\x5a\xbb\x5e\x14\xee\xa8\x24\xda\xab\xb0\xdf\x04\xfe\x14\xea\xb3\x14\xf5\xac\x52\xd9\x6b\xf0\x9f\x2a\xbd\xd4\x88\x0b\x66\xaf\xb6\xe4\xb8\x60\xdb\xb5\x54\x73\x57\xcd\x71\xff\x82\x83\xb2\x5e\x50\x3a\xf7\x95\x92\xdb\x88\x9e\xeb\xc1\x0c\xfd\x90\xc5\xda\x56\x59\x2f\x62\x4e\x1a\x23\x84\xbd\xd5\x8d\xfc\x1d\x6b\x97\x94\x86\x82\x1d\xd7\x91\x24\xf6\xef\x67\x78\x9f\x68\xa2\x24\xdd\x5e\xcb\xd7\xad\x78\x18\xe5\xa9\x9a\x35\xc8\x5d\x9e\x72\x02\xf1\xb8\x98\xf8\xd7\xe3\xd2\xe1\x5f\xb7\x25\xbd\xdf\xa1\x5b\x77\x83\xb3\x4c\xd0\xf4\x61\x60\x7b\x0d\x6b\x4c\x87\xc0\x38\x81\x75\x3d\x55\x5c\x8b\x7b\x08\x3d\x0f\xe1\x4d\xc9\x16\xc5\xd1\x00\x73\x27\x90\xdd\x99\xe7\x80\x1c\x2b\x59\x03\x39\x4d\x84\xef\x44\x92\xc0\x09\x0a\x67\x4f\x22\x39\x56\xb2\x46\x72\x54\x19\xe0\x7e\x18\xbb\x0b\xea\xd3\x48\x8e\xf5\xec\xc0\xbc\x65\x09\xa7\x60\x8e\x0b\x06\xdf\x1a\xbe\x9e\x43\x74\xae\x68\x0d\xe9\x6c\x6c\xfc\x90\x23\x33\x4a\xd2\x7e\x8c\xac\xba\x86\xbd\xbd\x22\x14\x73\xb3\xf1\x04\x83\xd1\x78\x12\xa0\x14\x6d\xcc\xfe\xbf\x00\x00\x00\xff\xff\xb6\x37\xc2\x05\x28\x94\x00\x00") - -func asset_stat_accountCoreSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_accountCoreSql, - "asset_stat_account-core.sql", - ) -} - -func asset_stat_accountCoreSql() (*asset, error) { - bytes, err := asset_stat_accountCoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_account-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x45, 0x9, 0xf5, 0x53, 0xcf, 0x8, 0xd0, 0xf8, 0x6, 0xf8, 0x22, 0xdb, 0x18, 0x2b, 0xef, 0x3a, 0xba, 0xd2, 0x49, 0xcf, 0x20, 0xd0, 0xd2, 0x2, 0x31, 0x7a, 0xb0, 0x4a, 0x3e, 0xaa, 0x84, 0x12}} - return a, nil -} - -var _asset_stat_accountHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x7d\x79\xaf\xa2\x48\xf7\xf0\xff\xf3\x29\x48\x67\x92\xdb\x9d\x7b\x7b\x64\x5f\x7a\x7e\xfd\x24\xa8\xb8\xef\xbb\x4e\x26\xa6\x80\x42\x51\x04\x05\x5c\x9f\x3c\xdf\xfd\x8d\x80\x1b\xca\xe2\x72\x7b\xe6\x25\x9d\x8e\x50\xa7\xce\x56\xa7\xce\x39\x75\xaa\xb8\x7c\xff\xfe\xdb\xf7\xef\x48\xcd\xb0\xec\x91\x09\x9b\xf5\x12\x22\x03\x1b\x88\xc0\x82\x88\xbc\x9c\xcd\x7f\xfb\xfe\xfd\xb7\x7d\x7b\x7a\x39\x9b\x43\x19\x51\x4c\x63\x76\x02\x58\x41\xd3\x52\x0d\x1d\xe1\xfe\xa0\xff\xc0\xce\xa0\xc4\x2d\x32\x1f\x0d\xf7\xdd\x7d\x20\xbf\x35\x85\x16\x62\xd9\xc0\x86\x33\xa8\xdb\x43\x5b\x9d\x41\x63\x69\x23\x3f\x11\xf4\x4f\xa7\x49\x33\xa4\xe9\xf5\x53\x49\x53\xf7\xd0\x50\x97\x0c\x59\xd5\x47\xc8\x4f\xe4\xad\xdd\xca\xb0\x6f\x7f\x1e\xd0\xe9\x32\x30\xe5\xa1\x64\xe8\x8a\x61\xce\x54\x7d\x34\xb4\x6c\x53\xd5\x47\x16\xf2\x13\x31\x74\x0f\xc7\x18\x4a\xd3\xa1\xb2\xd4\x25\x5b\x35\xf4\xa1\x68\xc8\x2a\xdc\xb7\x2b\x40\xb3\xe0\x05\x99\x99\xaa\x0f\x67\xd0\xb2\xc0\xc8\x01\x58\x03\x53\x57\xf5\xd1\x9f\x1e\xef\x10\x98\xd2\x78\x38\x07\xf6\x18\xf9\x89\xcc\x97\xa2\xa6\x4a\x1f\x7b\x61\x25\x60\x03\xcd\xd8\x83\xf1\xa5\x96\xd0\x40\x5a\x7c\xb2\x24\x20\xf9\x0c\x22\xf4\xf2\xcd\x56\x13\xa9\x56\x4a\x7d\x0f\xfe\x8f\xb1\x6a\xd9\x86\xb9\x1d\xda\x26\x90\xa1\x85\xa4\x1b\xd5\x1a\x92\xaa\x56\x9a\xad\x06\x9f\xaf\xb4\xce\x3a\x5d\x02\x0e\x25\x63\xa9\xdb\xd0\x1c\x02\xcb\x82\xf6\x50\x95\x87\xca\x14\x6e\xff\xfc\x15\x04\x25\xe7\xd7\xaf\x20\xb9\xb7\xab\x5f\x27\xa0\x4b\xed\x7e\xe9\x5c\x06\xf7\x86\x1c\x46\xec\x0c\xea\x84\xdc\x01\xcf\x57\xd2\x42\xef\x0c\xd2\x43\xeb\x70\x35\x84\x8a\x02\x25\xdb\x1a\x8a\xdb\xa1\x61\xca\xd0\x1c\x8a\x86\x31\x0d\xef\xa8\xea\x32\xdc\x0c\xcf\x84\xd3\x2d\xe0\x18\xba\x35\x34\xf4\xa1\x2a\xdf\xd3\xdb\x98\x43\x13\x1c\xfb\xda\xdb\x39\x7c\xa2\xf7\x89\x93\xa7\xb8\xb8\xaf\xaf\x06\xe5\x11\x34\x9d\x8e\x16\x5c\x2c\xa1\x2e\xdd\x25\xc2\x59\xf7\xb9\x09\x57\xaa\xb1\xb4\xbc\x67\xc3\x31\xb0\xc6\x0f\xa2\x7a\x1e\x83\x3a\x9b\x1b\xe6\x7e\x3a\x7a\x3e\xf5\x51\x34\x8f\xea\x52\xd2\x0c\x0b\xca\x43\x60\xdf\xd3\xff\x60\xcc\x0f\x98\x92\x37\x2f\x1f\x60\xfa\xbc\x27\x90\x65\x13\x5a\x56\x78\xf7\xb1\x6d\xca\x4e\xdc\x19\x6a\x86\x31\x5d\xce\x63\x40\xcf\xa3\x58\x72\xa1\x80\x6a\xde\x89\xf8\xe0\x74\x63\x77\xd8\xfb\x09\x45\x81\x66\x3c\xd0\x03\xfa\x07\xba\x78\x6a\x8d\xd7\xc9\x71\xad\x77\x10\x39\x77\xc5\x51\x3d\xe6\xfb\x0e\x63\x3b\x72\x04\xac\x0b\x07\x24\x6e\x23\xcd\x68\x7c\x9c\xe9\x71\x80\x0d\x97\x0f\x23\x12\x50\xb5\xec\xa1\xbd\x19\xce\xa3\x51\xee\x21\x8d\x79\x5c\x48\x18\x17\xec\x10\x4a\xc2\x81\xc5\xc3\x74\x8f\x04\x8b\xf6\x62\xe2\x36\xde\x60\xba\x31\x72\xaf\x6d\xcb\x5a\x46\x51\x3e\x02\x4b\x86\x0c\xef\xcc\x0b\x8e\x66\x30\x07\xa6\xad\x4a\xea\x1c\xe8\xa1\xc1\x3b\xaa\xeb\x70\x7e\x67\x6e\x72\x8c\x68\xf7\x72\x70\xbb\xe3\xdd\xf4\x1d\xe5\xc5\xa1\xe7\x02\x7e\x3a\x7e\x77\x30\xf7\x23\xe9\xfd\xdc\xc7\x87\x43\xea\xe7\x18\xc3\x30\x26\x07\x23\xc3\x9c\x0f\x67\xea\xc8\x4b\x18\x42\x58\xf0\x41\xc6\x96\xf1\xfe\x7c\x2f\x0c\x73\x5c\xe3\x74\x7b\xa7\xaa\xa5\x76\xb9\x82\xa8\xb2\x4b\x39\x2d\x64\xf8\x76\xa9\x15\x13\x77\x80\xd1\xbd\x00\xb3\x37\xdc\xe1\x98\x9c\xbb\xf8\xe2\x1f\xa2\x74\x53\xa8\xb7\x85\x4a\xea\x01\x9d\xed\xf3\x6c\x0b\x2e\xee\xa6\x7c\x81\x24\x76\x6f\x19\xc6\x84\x3d\x65\xb3\xb1\x25\x0c\x98\xf5\xf7\xc8\x77\x1b\x45\xbc\xbe\x5e\xde\x17\x0f\xd8\x4b\xf2\x62\xcb\xe6\x79\x80\x7b\x64\x71\xbb\xc4\x84\xf5\xd2\xbf\xf8\xfc\x1c\xf2\xc5\x38\x1c\xf9\x7c\x48\x38\xf0\x99\x4b\xf0\x00\xf9\x6c\xb6\x21\x64\xf9\xd6\x0d\xe0\x99\xba\x5f\x71\xa8\x12\xfc\xaa\x2f\x67\xd0\x54\xa5\xbf\xfe\xfe\x16\xa3\x17\xd8\x3c\xd0\x4b\x03\x96\xfd\x15\xe8\x5b\xa8\x39\xa5\x98\x18\x3d\x14\xd5\xbc\xd9\x25\xd3\xae\xa4\x5a\xf9\x6a\x25\x44\x9e\x21\x18\x8d\x4e\xdc\x7d\x20\x57\x8c\x86\xe0\x38\x48\xf7\x04\x8e\xbd\xac\x4e\xf7\x13\xf3\x1f\xc8\x3d\x82\x38\xa2\xc7\xc0\x20\xf4\x5a\x42\xa5\xe9\x43\xa1\xcd\x47\xd6\x42\x3b\xd8\x62\x2a\x27\x94\xf9\x2b\x0a\x7f\xfe\xe6\x56\xe1\x2a\x60\x06\x7f\x1c\x9e\x21\xad\xed\x1c\xfe\xf0\xba\xfc\x89\x34\xa5\x31\x9c\x81\x1f\xc8\xf7\x3f\x91\xea\x5a\x87\xe6\x0f\xe4\xbb\x53\x9c\x4b\x35\x84\xfd\x78\x79\x98\x0f\xf8\x7e\xbb\xc0\x78\xd9\xe8\x21\x4e\x55\xcb\x65\xa1\xd2\x0a\xc1\xec\x02\x20\xd5\xca\x25\x02\x24\xdf\x44\xde\x0e\x65\xb7\xc3\x33\xcb\x41\xf2\xe6\xa7\x7c\x10\xdf\xa3\x79\xd4\x50\xa4\x3c\x17\xba\xac\x54\x5b\x3e\x7d\x22\xdd\x7c\x2b\x77\x64\xeb\xbc\xfe\x76\x41\xfe\x84\xc5\xc7\xc8\x3d\xc2\x5f\x21\x71\x14\x50\x2b\x25\xe6\xa3\x66\xbd\x84\xcc\x4d\x43\x82\xf2\xd2\x04\x1a\xa2\x01\x7d\xb4\x04\x23\xe8\xa8\x21\x66\xbd\xf0\x9c\xdd\x68\x43\xf3\xd8\x3f\xd8\xea\x89\xff\xc3\xd8\xde\xd2\xe5\xd1\xb2\x23\xf1\x23\x0d\xa1\xd5\x6e\x54\x9a\x67\xcf\x7e\x43\x10\x04\x29\xf1\x95\x6c\x9b\xcf\x0a\x88\x23\x7d\xb9\xdc\x76\xfd\x5d\xb3\xd5\xc8\xa7\x5a\x0e\x04\xdf\x44\x7e\x1f\xfe\x8e\x34\x85\x92\x90\x6a\x21\xbf\x63\xfb\x3b\xff\x68\x44\x4e\xc4\xe7\xa4\x8b\x42\xff\x32\xe1\xf0\x5b\xc2\xc5\xf1\x54\xcf\xc9\x17\x83\xc2\x51\xc4\xe3\xa3\x87\x24\xfc\xfa\x1b\x82\xa4\xf8\xa6\x80\x74\x73\x42\x05\xf9\x1d\xfb\x0b\xfb\x3b\xf1\x3b\xf6\x17\xfe\xf7\x7f\x7e\xc7\x9d\xdf\xf8\x5f\xf8\xdf\x48\xcb\x6d\x44\x84\x52\x53\xd8\x2b\x45\xa8\xa4\xbf\xdd\xd4\x4c\x8c\x38\xf0\xa4\x66\xa2\x29\x7c\xb6\x66\xfe\xef\x11\xcd\x5c\xc7\x54\x4f\x0f\xc7\x38\x1c\x4f\x11\xa7\xb0\x7d\x85\xd1\xe1\x18\x41\x9a\x7b\x5d\x21\x3f\x4f\x1e\xe0\xc3\x7d\xdc\xea\xd7\x04\xe4\xe7\xf9\x8c\xf8\x76\x6b\xd6\xbe\x94\x47\x3f\x42\x1f\x8b\x87\x69\x1c\x9f\xc3\x9b\x29\xd0\xb3\x5c\xde\x42\xea\xe3\xf4\x62\x42\x5e\xb2\x7b\xb2\xb2\x6b\x6e\x6f\xa5\x79\x4f\x73\x7b\x03\xa9\x9f\xdb\xf3\x49\x12\xca\xed\x3e\x72\xc9\x50\x01\x4b\xcd\x1e\xda\x40\xd4\xa0\x35\x07\x12\x44\x7e\x22\x6f\x6f\x7f\x5e\xb6\xae\x55\x7b\x3c\x34\x54\xf9\x6c\x2b\xed\x42\xd6\xf3\xfc\xd7\x13\xd1\x99\x60\xf1\xc4\x73\xe7\xe2\xf9\xe2\xdb\x95\x48\x95\x11\x51\x1d\xa9\xba\xed\x24\x06\x95\x76\xa9\xe4\x8a\x03\x66\xfb\x34\x1e\x91\xc6\xc0\x04\x92\x0d\x4d\x64\x05\xcc\xad\xaa\x8f\x7c\x60\xfa\x72\x76\x4c\xf9\x11\x55\xb7\xe1\x08\x9a\x3e\x10\x45\x03\x23\x0b\xb1\x66\x40\xd3\xae\xc9\xd8\xc6\x4c\xbb\x26\xf2\x15\xa7\xa8\x6f\x47\xc8\xeb\x61\xf7\xaf\x1b\x1e\x55\x87\xbf\xda\x71\x54\x89\x0d\x37\x57\x0a\x99\xcf\x35\xd5\xa9\xd9\x23\xb6\x3a\x83\x96\x0d\x66\x73\x64\x3f\x66\xce\x2d\xb2\x33\x74\x78\xcd\x68\xd0\xaa\xe8\x90\x8f\x7a\xcb\xa9\x78\x3c\x1f\x17\x5f\x01\x58\x3d\x33\xe4\x1b\x2d\x37\xa3\xc3\x9c\x07\xf9\x4a\xaa\x21\x38\xe9\x57\xb2\xef\x3d\xaa\x54\x91\x72\xbe\xd2\xe1\x4b\x6d\xe1\x78\xcf\xf7\x4e\xf7\x29\x3e\x95\x13\x10\x2c\x4a\x98\x87\xd5\xee\x47\x74\x65\x8a\x5e\xd1\x03\xd1\xe1\xc6\x5e\x01\xed\xeb\x5b\x80\xc4\x6f\x3f\x7e\x98\x70\x24\x69\xc0\xb2\xbe\xf9\x87\xcb\xdd\xab\xb8\x61\x5b\x34\xf9\x2d\x64\xa0\xdc\xb5\xf1\xd3\x92\xb9\x15\x9d\xa3\x5c\xb7\x67\xc6\xa9\x56\x77\x9b\xcd\x9b\xe0\x92\x21\xdf\x02\xc7\xf0\xdb\xe0\x6e\xf9\xef\x46\x07\x8a\x0e\x9b\x61\xb7\xcb\x0b\x2f\x32\xdb\x73\x9c\xbf\xcc\x68\xc3\x04\x41\xaa\xdd\x8a\x90\x46\x92\xfd\x08\x89\xdc\x0a\x5d\xb8\x40\x47\x5c\xbe\xe6\x3f\x54\x39\x88\xb7\x43\xcd\xe7\x59\xab\xf3\xf0\x78\x66\xe7\x9b\x33\xc3\x20\x4f\x7f\x5d\xe2\x0a\x82\xfc\xe2\x6c\x7c\x7c\x09\xb0\x66\xc7\x8e\x6f\x37\xc9\xd0\x06\xaa\x66\x21\x13\xcb\xd0\xc5\x60\x63\x3b\x14\xca\x9e\xd5\x83\x87\xc7\xd3\xc3\x61\xdf\x3a\x80\xb7\xb3\xcd\xe4\x58\xb3\xf0\xd6\x3e\xf6\xed\x8e\x9e\x5a\xce\x2a\xa3\xce\x40\x1c\xf9\x38\x78\x39\xd4\x47\xe1\x34\x10\xf1\xe0\x8f\x9b\xc9\xbe\xc0\x64\x2c\xed\x53\x6c\xf2\xf7\x31\x21\xb0\x23\x3b\xb9\xb0\xcb\xb9\x1c\x1b\xf6\x68\x3a\xde\xad\x6f\x9f\xfd\x4a\x16\xec\x2a\x1f\xb0\x81\x36\x94\x0c\x55\xb7\x6e\xdb\xa0\x02\xe1\x70\x6e\x18\xda\xed\x56\x67\xe7\x53\x81\x41\x63\xed\x34\x9b\xd0\x82\xe6\x2a\x08\x64\x9f\x87\xda\x9b\xa1\x93\x26\xa9\xbb\x20\xa8\xb9\x69\xd8\x86\x64\x68\x81\x72\xf9\xc7\xe8\x60\x2c\x10\xc8\xd0\x74\xd2\x0b\xf7\xb9\xb5\x94\x24\x68\x59\xca\x52\x1b\x06\x1a\x8a\x27\x38\x50\x35\x28\x07\x43\x05\x4f\xab\x80\xda\xf5\xb3\xb3\x2c\x60\x3f\x24\x22\xe6\xc5\xf7\x36\xd1\xfe\xeb\x5e\x91\x5f\x1b\xc6\x42\x69\xfc\xaa\xb0\x76\x97\xa0\x4f\x86\xb9\x50\x5a\xd7\x61\xef\x36\x78\x48\x18\x3c\xdb\xd9\x79\x99\x6d\x46\x2d\x73\x2e\x4f\x55\x05\x2c\x85\xf6\x99\xbf\xe4\x8a\xe2\x44\xc0\x27\x03\xa0\x37\xf3\x8d\xa5\x29\x1d\x8f\x69\x04\x84\x9e\x83\x3b\x79\x7b\xfb\xf1\x23\x78\x29\x16\x3c\x0f\xbc\x8d\xb5\x67\xd5\xe9\x9d\x05\xfc\xfa\xd2\x7c\xc1\x73\x89\x8f\x44\x2f\xe7\x2c\x4c\x20\x59\xdf\x49\xc4\x30\x20\xef\x70\x64\x18\x88\xbb\x0e\xbe\x09\x70\x7d\xa6\x33\x02\x2e\x94\xdc\x11\x2a\x84\xa2\xc3\x92\x6a\x0d\x2d\xa8\x69\xd0\x44\x44\xc3\xd0\x20\xd0\x0f\x31\x49\x95\xe0\x50\xbf\x88\xbf\xee\xb3\xcb\x98\x7c\x3a\x4d\x34\xf4\x45\xeb\x8b\xf3\x4c\xfe\xc6\xb3\x6d\xfa\x9b\x27\x3f\x1d\xae\x87\xce\xd9\x60\x24\x95\x13\x52\x45\xe4\xeb\xd7\x73\x0d\xfe\x07\x41\xbf\x7d\x8b\x42\x75\xab\xfb\x41\x69\xff\x77\xa5\xc7\x18\xf8\x2e\x74\xea\x43\xef\x53\xb8\xc3\x60\xe8\x54\xba\xbd\xc3\xfd\x82\xc9\x75\xfb\xcc\x42\xcc\x48\x1a\xc7\x85\x3d\x13\x4b\xa3\xce\x07\xbc\x26\x9a\x46\x50\xf9\x55\xf1\xf4\x4e\x61\x9f\x8c\xa8\x11\xd4\xae\x63\x6a\x50\x87\x90\xa8\x7a\x71\x26\xe4\x85\xb6\x7a\xb0\xcf\x73\x96\x62\x2f\xa2\x3c\xdf\x1f\xb1\x34\x8b\x1b\x78\xc3\x63\xe8\x4d\xd8\x13\xe9\x9b\xf3\x65\xbf\x0a\x08\x5e\x46\x04\x2d\xd0\xfe\x91\x25\x96\xbd\x19\x42\x7d\x05\x35\x63\x0e\x6f\x95\x2d\xed\xcd\x7e\xc1\xb3\xd4\xec\x80\xc6\x19\xb4\x41\x40\xd3\x7e\xa9\x15\xd4\x6c\xa9\x23\x1d\xd8\x4b\x13\xde\xaa\xb0\x71\xf4\xb7\xbf\xfe\x3e\xe5\x2e\xff\xfd\xdf\xad\xec\xe5\xaf\xbf\xfd\x3a\x87\x33\x23\xa0\x18\x76\xc2\xa5\x1b\x3a\x0c\xcd\x85\x4e\xb8\xae\xd1\x78\x92\xa9\x33\x38\x14\x8d\xa5\x2e\x3b\x15\x6b\xd6\x04\xfa\x08\xfa\x57\x63\x97\xa1\x75\xaf\x89\x3d\xb6\x11\x94\xa3\x97\x5b\x5e\xed\x4f\x95\x0f\xb3\xed\x70\x84\x2b\x8e\x8b\x70\xa7\x9b\x73\x5e\x2e\xe2\x74\x58\x53\x68\x85\xd4\x49\xcf\x2b\x52\xe7\x55\xd2\xfb\xd6\x11\xaf\x13\x22\xe6\xe1\xb9\x50\xa1\x42\xd7\x1f\x71\x84\x0c\x8c\xb4\x2f\x13\x33\xf6\xf9\xc3\x50\x41\x23\xc2\xc2\x6d\x51\xd3\xc0\x06\x88\x62\x98\x11\xbb\x45\x48\x9a\x6f\xf1\x11\xe2\x05\xa0\x0c\xdb\x75\x89\x83\x36\x5f\x69\x0a\x8d\x16\x92\xaf\xb4\xaa\x57\x3b\x2f\x4e\x80\x6e\x22\x5f\xdf\xb0\xa1\xaa\xab\xb6\x0a\xb4\xa1\x7b\x0a\xe6\x0f\x6b\xa1\xbd\x7d\x20\x6f\x38\x8a\x71\xdf\x51\xfa\x3b\x4a\x20\x18\xfb\x03\x67\x7f\x90\xcc\x1f\x28\x81\x93\x1c\xfd\x8e\xe2\x6f\xdf\xfe\x8c\x87\x1d\x1f\xba\x6f\x37\x5c\x68\x55\xdc\x0e\x6d\x43\x95\xc3\x29\x71\x34\xc5\xdc\x43\x89\x18\x2e\x2d\x78\x8c\x32\x43\x55\xbf\x7a\xa3\x22\x94\x1e\x49\xa2\x24\x7b\x0f\x3d\x72\x08\x64\x79\xe8\xaf\x4b\x85\xd2\xa0\x48\x8a\xc0\xef\xa1\x41\x0d\xdd\x98\x76\xc8\xae\x9d\xfd\xcc\x50\x12\x34\x81\xe2\x77\x89\x41\x1f\x48\x78\x1e\x2c\x06\x09\x96\xc4\xa8\x7b\x48\x30\xc3\x99\x21\xab\xca\x36\xbe\x14\x2c\x46\xe3\x77\x91\x60\x2f\xa4\xf0\x8e\x31\xc7\xa0\xc3\x90\x34\x71\x1f\x9d\xfd\xa0\x83\xd1\xc8\x84\x23\x60\x1b\x66\xb8\x4d\x71\x28\x86\x72\xf7\xa0\xe7\x1c\xf4\x6e\xcd\x72\xb8\x91\xcd\x70\xec\x38\x83\xdd\x35\xd4\x18\xea\xa0\xf7\x46\xc1\x59\xa9\x86\x13\xa0\x38\xe6\x2e\xed\x60\xd8\x39\x81\xe3\xd2\x67\xef\x00\xc2\x09\x71\x34\x77\x9f\x24\xf8\xc5\x40\x7b\x8b\x4d\xf7\xc5\xd9\x30\x4a\x18\xca\x50\xe4\x5d\x23\x82\x11\xae\x38\xc7\x25\x7a\xe8\x88\x63\x18\xce\xd0\xf7\x49\x42\x0e\x15\x75\x73\x78\x89\xc0\x98\x69\x43\x45\x85\x5a\xa8\x6b\xc4\x30\x0a\xc3\xee\x72\xc2\x18\x75\xd8\x3b\x39\xd4\xb4\x37\x11\x62\xd0\xcc\x7d\x6e\x1e\xa3\x87\xaa\x3e\x82\x96\x3d\xbc\xae\x9a\x47\x90\x62\x38\xf6\xbe\x11\x61\x2e\xc2\xb5\xb3\x3d\x01\xc2\x83\x09\x86\xa3\x28\x41\x7a\x44\x02\x62\x6d\xe8\x5e\xfb\xbd\xc1\xf6\x6a\xbf\xfd\xc0\x3d\xf6\x81\xbc\x65\x53\x38\x51\xcf\xe0\xb9\xb6\x40\xe1\x7c\xb9\xd7\xce\xb4\x73\x04\xdf\x2f\xf0\xbd\x5e\xb6\xd7\xeb\xe0\x9d\x5c\xaf\xdf\x6f\xd0\x42\xbf\x27\xb4\x6a\xc5\x74\x6f\xd0\xe4\xbb\x34\xd3\xab\x92\x7e\x0d\x05\x12\xc1\xf7\x44\x92\xbd\x6c\xbd\xd0\xed\x94\xba\xd5\x7e\x2e\x53\xea\xb4\x8a\xdd\x0e\x95\xc9\xe6\x78\xa2\x54\xe9\xf7\xf1\x42\xbd\x58\x66\xaa\x7c\x81\x6f\x0b\xf5\x4c\x9b\x2e\xd5\x52\x4d\x21\xd3\xe9\x55\x2b\xb1\x89\x10\x7b\x22\x3c\xd5\x4d\xd6\xfa\x3c\xd5\x27\xbb\xbc\x90\xeb\x75\x1b\x78\xbb\x58\xc5\xdb\x55\x32\xd9\xce\xe6\xda\x75\x86\x14\xda\xb5\x62\xb5\x82\xd7\x73\x1d\xb2\xdb\xc8\x55\xf3\x8d\x4a\xb1\x98\xbb\x1a\xeb\x40\x22\xa4\xa3\xae\x5e\x31\x4b\x37\x2a\x64\xb5\x92\x17\x6a\xa9\x72\x25\x93\x64\x08\x9c\x27\x09\x7a\x40\xd5\x2a\xe9\x66\xa3\x94\xed\x16\x99\x6c\xb2\x94\x2a\xd7\x4b\xf9\x4c\x95\x6c\x32\x42\xbf\xdb\x69\xc7\x26\x42\x39\xea\x6a\xd4\xfa\xb9\x7c\x09\x4f\xe5\x89\x4c\xa5\x4e\x26\x7b\xa5\x4c\xb9\x92\x2e\x65\x0a\xed\x4a\xad\x8d\xe7\xfa\xc4\xa0\x9c\x69\xe6\xaa\x95\x76\x4a\xa8\xf2\xcd\x2e\x53\x4f\x31\xd5\x1e\x9e\x7b\x7b\xf4\x00\xca\x3e\x1f\x8d\x30\x28\xef\xd0\xde\xe9\xbc\xed\x1f\x16\x0c\x3f\x9c\xf1\x81\x50\x1f\x88\x6d\x2e\x61\x0c\x33\xbf\x3e\x76\x71\x4f\xa2\x7a\xcf\x56\xff\x4b\x24\xbd\x58\x5e\x7d\x20\xd8\x87\x7b\x62\x2b\x5a\xd0\x5b\x5b\xfd\x8f\x4e\xe7\xc3\x76\xff\xd9\x6c\xc6\x70\x96\x25\x39\x94\xe2\x58\xca\xe1\x8a\xfe\x40\xde\xfe\xfb\x05\x2c\xed\xf1\xd0\x84\x8b\xa5\x6a\x42\x79\xa8\x68\x60\xf4\xe5\x87\x33\x30\x1f\xc8\xa1\x6d\x65\x48\xfb\xf4\xe4\xbc\xf1\x7f\x41\x26\xeb\xa7\x8b\x1f\xe8\x62\x28\xca\x62\xd7\x74\x9f\xc1\x4d\x1c\x71\x93\x18\xc3\xc4\x91\x29\x36\x6a\xf2\x88\x9a\xc5\x19\xc2\x41\x4d\x39\xa8\xc7\xc6\x0c\x0e\x65\x63\x06\x54\xfd\xcb\x0f\xe4\x0b\xdc\x80\xd9\x5c\x83\x7f\x48\xc6\xec\xcb\xfd\x7c\xe3\x34\x49\x53\xc1\xc8\x81\x28\xdd\x87\x98\xfc\x40\x58\x8a\xe5\x38\x82\xa5\x59\xce\xc1\x8b\x3a\x78\x2d\x7b\xbf\xa4\xd1\x47\x43\x11\x68\x40\x97\xe0\x1e\x39\x86\xa2\xe8\x1f\xa8\x7b\xc5\xa7\x40\x5d\x52\xc0\x3f\x10\xc2\xd5\xb8\x93\xd6\x5c\xe1\xdd\xdb\xd0\xf1\x1c\xd3\xbe\x55\x07\xb6\xba\x82\x0f\x4b\xb4\xd7\x9c\x2b\xd2\x1a\xaa\xa3\xf1\x9e\x20\xf6\x81\x7c\x71\x67\xc5\x70\x0a\xb7\x7b\x1a\x8f\x7a\xe1\xbb\x06\xd0\xe1\x8a\xc4\x19\x6f\x2e\x7d\x96\x9e\x3d\x0a\x9f\xae\x67\x9f\x44\xf1\xf4\xfc\x60\x48\x8d\xcf\x15\x7e\xe0\x8a\x66\x3d\xdf\xf1\x69\x7a\x76\x29\x7c\xba\x9e\x7d\x12\xc5\xd3\xf3\x83\xf9\x51\x7c\xae\x30\x8f\x2b\x0a\xe5\x3c\x3f\xfa\x59\x7a\xf6\x28\x7c\xba\x9e\x7d\x12\xc5\xf4\x1b\x8f\x25\xbb\x2e\x57\x11\xb1\xfd\xd6\xf1\xb5\x47\x63\xfb\xe1\x08\xdb\x79\x7e\x2b\xb2\x24\x2a\x92\x38\x4e\x72\x0c\x54\x30\x94\xc6\x39\x51\x22\x19\xa0\xe0\x12\x8b\x42\x0a\x88\x28\xb3\x5f\xe2\xd3\x24\xc3\x02\x06\x72\x18\xa6\xec\x15\x26\x01\x4a\x02\x22\x80\x0c\x45\xee\xd7\x23\x10\x12\x0c\x2e\x8b\x2c\x4a\x49\x24\x4d\x72\x32\x86\xcb\x00\x95\x45\x4a\x61\x00\xe4\x14\x5a\xa1\x14\x99\x21\x14\x5a\x91\x68\x09\x23\x39\x5c\x41\x51\x06\x02\x86\x52\x18\x05\xa3\x51\x92\x13\xdf\x9c\xf8\x4b\xfb\x56\x36\xf4\x0f\x82\xfd\x81\x62\xfe\x05\x8f\xfb\x98\xf8\x03\xa5\x08\x94\xa0\x22\x5b\xbd\xe4\x05\x63\x59\xf6\x03\xc1\xe8\xfd\x78\x5e\x5d\xee\x43\xe7\xff\xb3\xf6\xe3\xcf\x0f\x04\xdb\xaf\x69\x78\x9e\xe7\x53\xef\x24\x51\x12\x47\x99\x4d\xb6\x29\x0b\xb6\x51\xb1\x15\xb8\xd4\x71\x4e\xc1\x76\xdc\x6a\x63\x65\x0a\xa5\x75\xf2\x7d\x8e\x71\x89\xcc\xa8\x29\x76\xd0\xf2\x9c\xa9\x5b\x1d\x94\xa9\xe6\x27\xdb\x72\x26\xc7\x6c\x33\xec\x72\x21\xf5\xcb\x06\x41\x95\x51\x22\xb1\x25\x09\x7b\x2b\x9a\xc2\xa6\xbe\x47\xcd\xf7\x6a\x9d\x32\xed\xfe\x74\xae\x3e\x9b\x4c\x14\x1a\xea\x4c\x29\x77\xc4\x31\xe8\xd0\x69\x54\xb3\xfa\xb5\xcd\x68\x55\x6f\xe6\xb0\x5e\xba\x4e\x36\x0b\x93\x04\x23\x29\x9b\x85\x8d\x0a\xcd\x11\x57\xc7\xd9\x04\x96\x6d\x57\x51\x41\x97\xe1\x7c\xd6\xc0\x32\x76\x65\xce\x71\xb3\x2a\x4c\xcd\x93\x53\x2c\x9f\xec\x0e\xec\xf6\x7a\x8f\xb9\x5c\x21\x4b\x60\x37\xc7\xcf\x88\xf1\x35\x83\xbf\x71\x0d\xf8\x1e\x46\xd6\x79\x3e\x8d\x16\x6e\x35\xff\xab\x2f\xd7\xaa\xd0\x80\x89\xef\x9f\x0b\xf8\x6b\xec\xf8\x8d\x26\x64\x8e\x55\x28\x82\x86\x90\x66\x65\x4c\xc4\x19\x91\x12\x59\x4e\xc1\x09\xa0\x50\x04\x86\x89\x0c\x45\x73\x00\x27\x15\xa0\x60\x24\x4a\x00\x19\x15\x29\x5c\xa4\x09\x42\x44\x19\x11\x72\xdc\xdb\x07\x42\x3a\xff\x6e\x98\x35\x1a\x68\xed\x0c\x4e\x92\x6c\x64\xab\x9b\x11\x91\x14\x87\x87\x4c\x05\x32\xe6\x4c\xc0\x6b\x83\x09\x56\x59\x52\x06\x2a\x16\x98\x2e\xa9\x6f\xab\xab\xf6\x26\x4b\x74\xe6\xc6\xf4\x7d\x95\xe1\xab\x76\x0a\x2b\xe2\x65\x26\xc9\xd0\x03\x4b\xca\x66\xb1\xea\x74\x6b\x19\xf5\x45\x26\x47\x25\x04\x56\x4d\xc3\x3a\x34\xcd\x85\x38\xe2\xf4\xc1\x36\x93\xb6\x01\xbf\x33\xe4\x0e\x3d\x72\x46\xce\x99\x09\xce\xaf\xfc\xf1\x3f\xde\x31\x56\xeb\x74\xbf\xe6\x6b\xf5\xa9\x3b\xd2\x35\xe2\x7d\x8b\xf7\x0d\x4c\xcc\xe8\x6b\x59\x5c\x50\xcd\x69\x97\x1e\xe4\xb2\xdb\x4c\xab\x9d\xaa\x96\xd1\x89\x8c\x56\x4d\x41\x67\x09\x72\x2a\xd5\xb7\x4d\x5d\x48\xd6\x2c\x55\x18\xa7\xc5\x95\x4a\xae\xad\xb5\x91\x2e\xf6\x97\x2a\x2f\x66\x8a\xf8\x82\xdd\x51\x1b\xa6\x56\x10\xea\x02\xe9\xd2\xbf\x31\x53\xb2\xf5\x5b\xd6\xf6\xff\xf9\x4c\x21\xe3\xcf\x14\xec\x35\x56\xee\xec\xab\xee\xf3\x85\x7d\x7c\xc5\x38\x06\xfd\x8e\x62\xdf\x51\x0c\x41\xd1\x1f\xce\xbf\x40\x6b\x66\x59\x14\x23\x22\x5b\x49\x9c\x23\x39\x9a\xc1\x39\x3a\xc4\xd6\x6f\x5b\xba\xcb\xd2\x3f\x3d\x28\xc1\x57\xb2\x57\x54\xc9\x6d\x62\xdb\x2c\x26\x99\xb4\x9e\xe6\x72\x38\xba\x99\x24\xdf\x2d\x74\x64\x5b\xeb\xfc\x7a\x87\xf5\xe4\x66\xb7\x0f\x92\x05\x90\x71\xe6\x93\x70\xc3\x88\x6f\x5f\x07\x23\xe6\xf9\xe4\xf4\x17\x08\xf2\xd2\xeb\xcd\x35\xa6\xe8\x8c\x2a\xc6\xc9\xe5\x47\x13\xac\x80\x0d\xe9\xc0\x5a\x4a\xc0\x8c\x8b\x40\xe3\x2f\x8d\xe0\x8f\xa1\xf1\x57\x41\x88\xc7\xd0\xf8\x2b\x1e\xe4\x63\x68\xa8\x63\x6d\x03\x27\x68\xee\x61\xa1\x68\x5f\x89\xe4\x41\xa1\x98\xcb\xf2\x01\xf5\x18\x16\xf6\x12\xcb\x83\x9a\xe1\x2e\x97\xd8\x0f\xf2\xb2\x5f\xc6\x5c\xac\xd4\x1f\x44\x83\x5d\x2e\x44\x1f\xe5\xc6\xb7\x9e\x7d\x70\xb4\x31\xe2\x72\xb9\xf6\x28\x37\xa4\x6f\x1d\xfb\x9a\x57\x00\x5e\x52\x15\x0e\x3f\x9f\xf2\x81\xec\x79\x8f\x57\x0e\x0f\x38\x09\xff\xb4\xaf\x3b\x1f\xd5\x73\xe7\x76\xbc\x21\xcf\x2a\x95\xfb\xb5\xb9\xf3\xee\xee\x97\x1f\xc8\x5f\xfb\x81\xff\xfb\x03\x39\x3d\x1c\x3a\x8f\x2f\xcb\xb0\x5f\xae\xea\xc9\x5f\xfe\xfe\xdf\xdb\x27\xec\x31\x05\x0a\x74\xa8\x40\x1f\x6f\xd0\x20\x81\xc2\xa4\xf1\x31\xff\xe2\xbd\xab\x60\xe6\xbd\x12\xf7\xf1\x86\x0e\x1c\x8d\xe8\xa1\xf0\x78\x7f\xf1\x96\x58\x30\xef\x5e\x0d\xfd\x78\x83\xc7\x2d\xa8\x7f\xc2\x9e\x5a\x20\x97\x5e\xc0\x3a\xdd\xb0\x27\x2e\x7f\xed\x58\x1f\xb6\x05\x8e\x37\x64\x9c\x3d\x82\x5f\x33\xa2\xe7\x81\xf0\xf8\x9b\x3d\xab\x19\x2a\x4b\x5d\x86\xa6\x5b\xb7\x7c\x6c\xa3\xd2\xf1\x14\xee\x76\xe1\x53\xe5\xfc\xfd\x34\x88\x2e\x60\x3e\xb9\xa3\x7a\x8f\xda\xbc\x90\x7d\xfc\x4d\x7e\xaa\xda\x1e\xad\xce\xff\xfb\xd4\xe6\xe6\x16\xc7\xdf\xe8\xa7\xaa\xed\xd1\x62\xfb\xbf\x4e\x6d\x5e\x12\x74\xfc\x4d\x7f\xee\x24\x7d\xb0\x76\xfe\x4b\xd4\x16\x91\x51\xdd\x78\x11\xee\x89\x93\xb0\x77\xbd\x13\xf4\x68\xd6\x16\x78\x96\xf8\xe6\x1a\x95\x0c\x5e\xa3\x46\x22\xc2\x7d\x19\x53\x50\x8a\x1f\x89\x88\xf0\x65\x2f\x41\x2b\x97\x48\x44\xa4\x2f\x95\x08\x5a\x8f\x45\x22\xa2\x7c\xd1\xfe\x61\xd1\x68\x5f\xb0\x7e\x58\x34\xe6\x32\xa8\x06\xad\x83\x22\xf1\xb0\x97\x78\x1e\xd6\x10\x77\x19\xad\x1e\xe6\xe7\x62\xd5\xfa\x8c\x82\x30\x5f\x20\x78\x9c\x23\xfc\x12\xd1\xc3\x63\x7f\xb1\x76\xa5\x9f\xe1\x88\xf4\x39\xeb\x57\xbd\x74\xf7\x92\xf5\x6b\xd4\x6b\x07\xf7\xac\x60\x03\xdf\x3a\x7b\x81\x37\x3c\x3f\x65\x8f\x12\x0a\x8b\x02\x8e\x90\x39\x14\x48\x14\xa9\xd0\x12\xc6\x49\x22\xc0\x50\x5c\xc2\x28\x9a\xc3\x24\x0a\x65\x48\x19\x05\x24\x25\x2a\x32\xe0\x48\x91\x90\x24\x8c\x64\x49\x0c\x40\x45\x04\xe4\x9b\xbb\x6f\xfc\xcc\x12\xf5\x6c\xaf\x86\x38\xd4\xa8\x83\x77\x3a\xf1\xd0\x5d\x52\xb7\xf5\xc2\xa9\xbb\xc5\xed\x52\x97\xcc\xa0\x70\x5c\xa5\xf9\x2d\x97\x42\x6b\x56\x56\x18\xad\x24\x8c\xc1\xb0\x36\xc7\xf6\x27\xe4\xac\x34\x9d\x71\x75\x86\x9a\xa6\x88\x15\xef\x14\x87\xf9\xc3\xe6\x4b\xd2\x57\x7b\x3d\xbb\x6f\x9f\x7e\xd6\x7d\xed\xeb\xd8\xb5\xdc\xe4\xfb\x80\xb7\x99\x3d\xbc\x90\xdc\xed\x56\xf2\x7c\xd0\x5a\x6c\x6a\xfd\x4e\x0f\x68\x2b\xaa\xbc\x11\x95\x35\x56\xac\x8b\x76\x6e\x5a\x5d\xc3\x42\xbf\x8d\xab\x42\x9b\x5b\xf4\x12\xdc\xbc\x5b\x41\x31\x29\x9b\x94\x78\x62\x54\xca\x12\xf3\xc2\xd6\xc0\xb0\xb5\x28\x6c\xe9\x05\x4e\x27\x0d\xb2\xb4\xa0\xcb\xd3\xed\xbb\x54\x7c\x3b\x2f\xf0\x9f\x6f\xe8\x9c\x7e\x66\xce\xf8\xf9\x79\x84\xaf\x1f\x75\x90\xf6\xcb\x64\x8b\xa3\x5e\x83\x16\x18\x23\x5d\x42\x4b\xf5\xf7\x75\xbf\x99\xe2\x76\xbd\x55\xaf\xd3\x22\x36\x6a\x4d\xed\x2f\x9b\x22\x96\x5e\xcd\xea\x25\xc8\xee\xc1\x53\x1d\x7e\x35\xd1\x4f\x3a\x0d\xb8\x84\x40\x1d\xbd\x98\xbe\x7f\x4c\xe3\xd1\x77\x36\x18\xca\x27\x7d\x38\x57\x0a\x5b\x26\xe5\x9c\xd1\x5a\x8e\xca\xab\xba\x9d\x66\x92\xe3\x7c\x89\xa8\x40\x4e\xee\xd4\x94\x6c\xfe\xbd\xa0\x52\x85\x55\xbb\x7a\x1c\x63\xbe\xd0\x4e\xbd\x57\xa5\x13\xbe\x00\x9a\x81\xfb\x17\xc2\x27\xd3\x2f\x87\xd0\xff\x79\xb2\x8d\x93\x2e\x52\xcf\xf1\xe2\x11\x1a\x05\xc9\xfb\x2b\x75\x71\x0f\x7d\x57\x17\xff\x95\x58\x86\x00\xdd\x36\x6d\xb5\xf0\x4c\x07\x9f\x8b\xef\xad\x72\x97\x60\x2b\xcd\x69\x96\x69\x50\x69\x2b\xa7\x76\x33\x15\x63\x9c\xa9\x01\x2d\x91\x00\x9d\x89\x5c\xe9\x25\x47\x3d\xbe\x42\xa6\x36\x36\xdd\x94\x16\x15\x59\xca\x6e\xca\xcb\x85\xbd\x1c\x81\x6a\x8a\x5e\x4e\x0a\xe5\x95\x9e\x1a\xfd\xfc\xe9\xa4\xf3\xce\xbb\x9a\x87\xdd\x43\xf7\x7f\xf7\xd0\x29\x86\x06\x6d\x60\xde\xf6\xf2\x1c\xc5\x12\x38\xc1\x2a\x12\xc7\xc9\x38\xa3\x90\xa4\x42\x8b\x34\x0a\x09\x1a\xc3\x50\x91\xa1\x69\x85\xc2\x31\x45\x94\x80\x28\xd2\xac\x82\x72\x10\x93\x81\xc8\x61\x12\x89\xe2\x90\x40\x69\x8a\x75\xbd\xfc\x53\xe7\xd0\xef\xf3\xf2\x24\x15\xbc\xc3\x7f\x68\xbd\xc8\xb8\x5d\xab\xcc\x52\x46\xc1\xee\xc8\x7a\xbf\xda\x91\x07\x0b\xbb\x37\x6f\xe5\x92\xb6\x28\xf5\xd1\x59\x6a\xa6\x48\xc9\x7c\x51\x18\x75\x75\x6d\x95\xc9\x8f\x01\xff\x0a\x2f\x1f\x66\x35\x3e\x7c\xe2\xa6\x99\xef\x8e\x1c\x2f\xdf\xaa\xe0\x0a\x31\x80\x89\x5e\x8e\x68\x75\x27\x4c\x9d\x5b\x2b\x84\xc9\x95\x99\x77\x56\xb1\x6b\xe6\x76\xbc\xc9\x24\x13\x3c\xad\xad\x1b\x54\x3e\xa5\xaa\x72\x4a\xc3\xc9\xf6\x22\x2d\x56\x31\x8a\x90\xa4\xd1\x42\x26\xa4\xb2\x95\x5d\xa4\x6c\x81\x2e\x0c\xb6\xeb\x64\xb1\x2e\xb2\x6c\xe9\x33\xbc\xbc\x38\x1b\xcd\xb0\x0e\x2e\x8f\xa8\x0e\x36\x5b\x60\x50\x2b\x4b\x59\xcc\xde\x4c\x9a\xfd\xe2\x80\x5b\x0b\x23\xa3\x99\x04\xb0\xcb\xb6\xd5\x8c\x73\xa0\xc6\xf1\xb2\xd5\x93\x4e\x03\xae\xf8\x5e\xfe\x49\xfa\x2f\xf4\xf2\xc9\x25\x48\x89\x9d\xde\x00\x4f\x6b\xbd\x2e\x30\x3b\x74\x7b\xb3\x16\xbb\x44\xb6\x52\x18\xcd\x75\x82\x6f\xa6\xc6\xf9\xcc\x9c\x3a\x8e\xb1\xe3\x59\xca\xe4\x09\xdf\xb3\x5e\xfe\xd5\xf4\xf3\x21\xf4\xa3\xbc\xfc\x23\xbc\xbc\xd2\xcb\x3f\x42\xff\x49\x2f\xdf\xde\xc9\x3a\x87\xf7\x56\xd8\x86\x43\x31\xe3\x1d\xad\x49\x39\x8e\x4e\xb4\xaa\x89\x55\x8e\x69\xd1\xac\x21\x35\xea\xca\xba\x3a\x97\x04\xd8\xe4\x0d\x43\xaf\xcf\xe5\x65\xa6\x38\xc2\x77\x36\x94\x89\x5c\xbe\xa8\xcb\x44\xba\x94\x5c\x8c\xcc\x46\x55\xed\x4a\x16\xdf\x9c\x66\x13\xb5\xd4\xfa\xd5\x5e\x5e\xa2\x48\x06\x23\x14\x0a\x95\x20\xc9\x10\x0a\x4b\x63\x18\x45\x91\x2c\x2e\xe1\x00\xa5\x59\x48\xcb\x18\x4a\x72\x18\xa0\x45\x85\x63\x08\x14\xc7\x45\x4a\x91\x18\x8e\x83\x24\x41\xd3\x2c\x89\x7b\xb9\xfc\x53\x2f\x02\xdd\xe7\xe5\x29\x86\x09\xf1\xf2\x6e\xeb\x45\x39\xc4\xb5\xca\xb4\x3d\x5a\xad\xd3\xcb\x6a\x97\xaf\x73\x4c\x03\x6b\xb4\xec\xb6\xbc\xae\xa4\x73\xf3\x74\x22\xd5\x86\xf3\x9d\x5c\xaf\xf5\x34\x43\x97\xd4\x52\x87\x7f\x85\x97\x8f\x3e\x4b\x72\x84\x2f\x10\x79\x15\xdb\xc3\x0b\xa9\x75\xa7\xcd\x54\x27\x26\xd1\xee\xa9\xcd\xed\x9a\x55\xdb\x0a\x8b\x6f\xa6\x4b\x03\x4e\x0b\x46\x63\x50\xeb\xd4\x76\xf5\x34\x93\xa7\xaa\xc6\xa6\x68\x49\x99\x6a\x7d\xd3\x41\x47\x25\x83\x4d\x4c\x26\xb9\x42\x82\xeb\x16\xd5\x6c\xb2\xdb\x1c\x14\x7b\x0b\x00\x72\xad\xf7\x9d\x5a\x24\xd9\x7a\xf9\x33\xbc\x7c\x15\x4f\x25\xf8\x2a\x49\xf5\x93\x69\xc2\xce\x75\x32\x55\xac\x41\xf0\x68\x19\x4e\x6b\x6c\xa1\x41\xeb\x15\x8c\xe7\x60\x57\x95\xb7\x79\xdb\xd1\xd1\xcb\xbd\xfc\x93\xf4\x5f\xe8\xe5\x79\xa6\x5f\x62\x79\x66\xa2\x8d\x84\x1a\x44\xe5\x76\x9b\xe9\xe4\xa4\x74\x7d\x43\xd7\x13\x6b\x2d\xb7\x90\x88\x76\x1a\xa3\xc0\x71\x8c\x5f\xee\xe5\x5f\x4d\x5f\x08\xa1\x1f\xe5\xe5\x1f\xe1\xe5\x95\x5e\xfe\x11\xfa\x4f\x7a\x79\x2b\xd3\xa9\xee\x0c\x9a\xc3\x32\xe4\xd4\xb2\x6a\x79\x2d\x97\xa8\x58\x83\xd2\x22\x37\x4f\x01\xa1\xdb\xc2\x5a\x2c\xca\xbf\x6f\xab\xad\x45\xb9\x69\xe6\x92\xad\x69\xb9\x23\xe7\x53\x74\xad\x46\x92\x9b\xad\x92\xe8\xa8\xc6\x78\xd4\x99\xce\x9a\x1a\x3d\x9b\x8d\xd1\x84\x45\xaa\xcb\x9a\x90\xe6\x5f\xed\xe5\x19\x8a\xa6\x45\x99\x15\x49\x56\xa6\x44\xa0\xd0\x2c\x2d\xb1\x1c\x27\x93\x0a\x0b\x19\x02\x97\x20\x46\x03\x19\x03\x24\x20\x15\x59\xa1\x44\x89\x22\x25\x0a\x50\x0a\x4d\xd0\xb2\x08\x14\x94\x23\x5c\x2f\xff\xd4\x9b\x98\xf7\x79\x79\x9a\x0b\x3b\xb9\xee\xb6\x5e\xd4\xaa\x5d\xab\x2c\xd2\x13\xa8\x12\x93\x99\x91\x67\x5b\x59\x2d\x9d\x80\x23\x89\x60\x6a\x3d\x3b\x57\x2c\xee\xba\x1d\x76\xdd\x51\x07\x49\x90\x5a\x52\x25\xca\x31\xdd\xa7\xbd\x7c\xf0\xe5\xb4\xa7\xf0\x0e\xd9\xef\x62\x6b\x31\xdb\x5e\xf6\x71\xce\xbe\x82\x02\xcc\x74\x35\x5d\x3b\xe0\x5b\x45\xc0\x92\x8b\x77\x63\x32\xc8\xe8\x8a\xb4\xb3\x3a\x09\x6a\x50\xcb\x54\x5a\x5c\xa6\x31\x87\x1d\x79\xa2\x34\xd8\xa2\xd0\x63\xcb\xd2\x6a\x59\xc9\xd4\x46\xc5\x46\x87\xc0\xe7\xec\x9c\x6a\x28\xeb\x77\x6d\x43\x14\x52\x89\xae\x41\xf2\x73\x4a\xac\x1b\x5a\x21\xbb\xa8\x18\x59\x58\x4c\xae\xcf\x66\x2c\xff\x3a\xef\x6f\x2e\x2a\x74\x09\x56\xc1\x68\xb2\x29\x83\x76\x8d\xa3\x93\x3b\xc5\xe2\x20\x2a\x19\x66\x65\xd0\xdb\x25\xbb\x85\x69\xc6\x28\x1e\x64\x7b\x7d\x25\xe7\x49\xfa\xaf\xac\xe4\x2c\x0d\xc2\xb0\x49\x6a\x91\xaa\x09\x9b\x79\x3d\x41\x18\xb9\xca\xfb\x0e\x63\x1a\x5b\xd5\xc2\x34\xa5\x9c\xe9\xcf\xea\xdd\x91\xb9\x6c\xbe\xb7\x1c\xf8\x97\x57\x72\x3e\x83\x7e\x69\xd0\x1b\x8f\xc5\x5e\xd2\x1a\x34\xa9\x89\x88\xa3\x8f\x56\x76\x1e\xe0\xed\xa5\x95\x9d\x27\x75\x73\x0f\x7d\x2f\x1a\x7c\xd6\x24\x7e\x6d\x34\x80\x14\x05\x28\x86\x90\x70\x46\x84\x04\xab\xd0\x10\x2a\xa4\x04\x48\x0a\xc7\x29\x12\x85\x24\xcd\xd1\x98\x82\xcb\xb2\xc4\x89\x28\x04\xfb\x3b\x8c\x24\x58\x54\x92\x39\x4a\x04\x24\xca\xe0\x6e\x34\xa0\x5e\x54\xd9\x21\xa3\xa3\x01\x8b\x85\x55\x76\xdc\xd6\x8b\x0d\xc7\x67\x2b\x3b\x29\xdf\xf0\x3e\x1b\x0d\xfc\xd7\x59\x65\x87\x1f\xd7\x67\x6a\xb9\x69\x14\x09\x51\xce\xb2\x09\xa9\x5c\x25\x40\x7f\x5c\x18\x74\xb3\xe3\xc6\xae\xc6\x55\x52\x9d\x59\xa6\x39\x00\xdd\x01\x63\x08\x73\xa6\xb1\xb5\x32\x85\xe6\x38\x5f\xc2\xd7\xfc\xfa\x3d\xd5\xef\xc3\x15\x68\x12\x9d\x3a\x59\xd3\xb2\x5c\x53\xd4\x2a\xad\x52\xb5\x3a\x66\xf9\x7f\x61\x65\xc7\xaf\x23\x4f\xc7\xbf\xac\xb2\xe3\x1f\xd3\x78\xf4\x3f\xa5\xb2\xe3\x8f\x82\x61\x95\x15\xfe\x13\x2a\x3b\xf7\xd0\xbf\xe9\xe5\xff\xa1\xca\xca\x67\xe8\xe2\x1e\xfa\x9e\x97\xcf\xb7\x0b\xc6\x44\x58\xa4\x6c\x9c\x68\xac\x6a\x44\x3a\x6d\xe3\xb3\x7c\xb3\xdb\x19\x1b\x6d\x69\x97\x68\xd5\xb5\xc1\xb8\x3d\xeb\x6a\x33\x48\x27\x8b\x10\x95\xcc\x64\xb3\x6d\x34\x53\x9c\xc5\x97\x6b\xa3\x59\x36\x67\xe2\x53\x1b\x6b\x57\xd3\x54\x63\xd5\x9e\x51\xad\xf6\x76\x37\x31\x14\xfe\xe5\x39\x3f\x49\x48\x90\x92\x48\x8e\x10\x69\x1a\x65\x31\x0e\xe3\x44\x89\x92\x48\x85\x03\x2c\x0a\x48\x09\xa7\x19\x8a\xc6\x70\x4e\x91\x50\xc8\x88\x32\x21\x12\x32\x2d\x02\x80\x41\x00\x01\x46\x33\x38\xea\x7a\x79\xfa\x45\x95\x9d\x18\x5e\x9e\xc3\xc3\x72\x7e\xb7\xf5\xe2\x34\xc8\xb3\x95\x9d\x57\x7b\x79\xa7\x3d\x89\x67\xd4\xfe\xd6\xcb\x9b\x7c\xed\xa7\x4a\x4f\x7a\xd9\xe7\xa6\x26\x99\x34\x77\xf9\x15\xb3\x15\xa7\x5c\x97\xc2\x36\x4d\xd2\x4e\x88\xe5\x74\x8d\x4c\x28\x5a\xcd\xc8\x2c\x3a\x83\xc4\x0c\x6e\x31\xa2\xd2\x4c\xe8\x7c\x81\x2a\xa2\x3a\x49\x66\x0a\x9b\x0d\xb9\x5a\x4e\xb8\x2e\xb5\x49\xd7\x39\x66\x55\x60\x2c\x5e\x87\x75\xba\x32\xe0\x3f\xa5\x9e\xff\xe2\x4a\x8b\x77\xff\xcb\x2a\x3d\x01\x63\xfc\x4f\x54\x7a\xfc\x5e\x37\xac\xd2\xc2\x7f\x42\xa5\xe7\x26\xfd\x5c\xbf\x5b\x98\x94\x66\x95\x95\x58\xbf\x6d\xdf\xe1\xde\xff\x57\x56\x5c\x3e\x43\x27\xf7\xd0\xf7\xbc\x3f\x33\xab\x0d\x8a\xef\x3c\x60\xb7\xa5\x77\x76\x46\xd5\x3a\x4b\x59\x6a\x2f\x4b\x0a\xbe\xe3\x77\xef\x35\x82\x6a\xd1\x49\xa0\x75\x15\x4a\xb7\x6c\x79\xd7\x5e\x51\xeb\x14\x6c\xda\x85\xf7\x6a\xb2\x29\x49\xb0\xc4\x18\x89\xce\x52\xaa\xa3\x35\xc8\x6c\x21\xc3\x17\x88\x69\x75\xd2\xad\xbf\xbe\xae\x2f\xe2\x00\xc7\x19\x89\xe0\x24\x9a\x04\x24\xa9\x48\x0c\x10\x65\x52\xe2\x68\x16\xe3\x48\x8a\x56\x50\x82\xe3\x38\x94\x96\x31\x5c\x22\x19\x5a\x66\x50\x91\x44\x71\x51\x91\x45\x9c\xa3\x65\x1a\x10\x6f\xce\xd6\x2d\xf6\xcc\xf9\x50\xa7\x7b\xb8\xd3\x67\x70\x9a\x24\x43\x5e\xcb\xa6\x49\xea\xed\xf2\xc4\x9d\x97\xd9\x97\xd8\x5c\x7d\x55\x9f\x8a\x45\x3c\xc7\x13\xdd\xce\xa4\x61\x16\x67\x93\x1e\x8a\x2a\x59\xd6\x2a\xe5\x99\x19\x2a\x34\xd6\x85\x6e\x82\xef\x11\xfc\xd1\xe7\x3b\x57\x48\x9d\xc7\xbd\x1e\xa8\x2d\x9c\xbf\x0a\x9a\xec\xac\xd6\x19\xce\x39\x99\x93\xb6\x89\xe2\x7a\x06\x6a\xcb\x9a\x9c\x69\xb6\x37\x32\x9f\x81\x22\x5d\xad\x43\x7b\x5b\x2f\xe6\xbb\x60\xa7\x89\xcd\x72\x79\x3c\xcb\x15\x2b\xa5\x34\x69\x2d\xc6\xc2\xa2\x3d\x90\xea\x35\x54\x7b\xef\x25\xaa\xf3\x77\xc3\xea\xce\x2a\xf4\x7b\xa6\xdd\x17\xad\x1d\x43\xd5\xf1\x49\x96\x5c\x95\xe3\x54\xf3\x2f\x8c\xf6\xd2\xc7\x9f\xc9\xec\xfe\xa5\x03\xde\xb7\x4f\xa7\x26\x92\x68\x09\x2d\x64\xb7\xf6\x78\x5d\xc1\xb4\x3e\x0a\xb6\x73\x03\xe3\x2a\xb9\xcd\xaa\x94\xda\x56\x29\x3b\x29\x48\x29\x57\x46\x62\x64\x9b\x55\xbd\x9f\xa0\xd6\x51\x4c\x44\xcc\xe7\x27\xe8\x67\x5a\xdd\xe4\xfc\x09\xfa\x3c\xff\xcf\xd5\x2c\x6e\x66\xd6\xc9\xc7\x75\x51\xd5\x07\xa1\x62\x46\xe9\xe2\xd9\xb1\xd8\xdb\xc2\xbb\xe4\xc3\x77\x97\x2e\xfe\xcb\xc8\x5b\xab\x30\x9b\x30\x13\xa2\xd1\xd6\xca\xbd\x7a\xb2\x37\x7b\x9f\x4c\x73\xa6\x34\x4d\xa9\x99\x99\x45\x75\xd1\x49\x3a\x3f\x18\x6f\x27\xcd\xf5\x7b\xa9\x68\x34\x8a\x5a\xb6\x27\xa4\xb9\x82\xa2\x25\x76\x0b\x65\x51\xca\xcc\x27\x70\x35\xee\x64\xb3\x4c\xf9\xfd\xbd\x5d\x31\x36\xcb\xd2\xee\xf5\xd5\x74\x82\x16\x21\x83\x2a\x22\xc3\xb0\xb8\xc2\xb1\x28\x26\xc9\x12\x94\x25\x0c\x47\x69\x88\x63\x0a\xc7\xe1\x1c\x21\x71\x1c\x4b\xa3\x00\xa3\x20\x49\x62\x0a\xc9\x90\x1c\x43\x32\x00\x05\x04\x03\x44\xd7\xb7\xe2\xcf\xf9\x56\x3c\xda\xb7\xb2\x44\xd8\x9f\xbc\x60\x09\xee\xed\xf2\xf0\xf0\xb3\xbe\x35\x24\x9f\x76\xaf\x07\x72\xb9\x00\xdf\xca\x13\x9b\xae\xb8\xa9\x55\x45\x7d\x50\x56\x93\xd9\x4c\xb1\x54\xa8\x2f\x95\x42\x69\xb4\x6c\x59\xb9\xc2\x66\xcb\x5b\xb5\x1a\x95\xe1\x06\x13\x8a\xc6\x40\x4f\x5f\x55\x12\xb9\x4e\xa3\x20\x66\x2c\x41\x52\xed\xac\x38\x52\x39\xb9\xdb\x91\x8b\x8d\xfe\x6a\xd6\xe9\xa6\xd4\x5d\x5e\x9e\x95\xf2\xe9\x7f\x97\x6f\x7d\xd6\xb7\x3d\x39\x9f\x17\x4c\xa2\x95\x1e\xbc\xd0\xb7\xfe\xca\xdd\xc1\xc8\xf3\x28\xbf\xd0\xb7\xf1\x2f\xf2\xad\x2c\x79\xea\x1f\xb0\x8f\x12\xe6\x5b\x2b\x6c\x67\xc6\xb6\x76\x33\x0a\x6f\xe5\x47\x8d\x71\x53\xdd\xb6\x4b\xfa\xb6\x49\x96\xa6\x4c\x72\x2b\x49\xa3\x52\x7a\xf7\xde\x50\xba\xfd\x77\x68\x77\x35\x8a\xd9\x29\x1b\xac\xdd\xec\x6e\xc4\x64\x2e\x6f\x36\x66\x64\x7e\xd5\xeb\x68\xbd\xe6\xb4\x5b\xa2\xb4\xce\xc8\xb0\xb6\xb9\x81\xba\xe5\x5f\x9e\xb7\x72\x28\xcb\xa2\x40\xa2\x08\x16\xa3\x64\x20\xb1\x24\x89\x01\x59\x46\x71\x1c\x05\x0c\x4d\x60\x50\xa1\x20\x90\x08\x99\x62\x24\x1c\xb2\x1c\x4d\x90\x10\x70\x22\x85\xa3\x84\x42\x63\x80\x85\xe4\xdb\xf1\x6f\xa0\x3d\xe1\x5b\x23\x37\x28\x19\x9c\xa3\xe9\x10\xdf\xea\xb6\x9e\xbf\x06\xf1\xac\x6f\x4d\xfb\x06\xf5\xca\xb7\x3e\x50\x1d\x0d\xf0\xad\x49\xb9\x47\x36\x12\xd9\xf1\x6e\xc1\x26\xcc\xf7\x25\x5b\x2b\xbd\x5b\x15\x53\xcd\x59\x4d\x4a\xeb\x62\x1d\xfb\x9d\x83\x29\x88\xea\x7a\xb7\x5c\x69\xed\xca\x23\xa9\x2d\x02\x13\xd6\x44\x73\x9e\xc6\x47\x26\x9b\x9e\x74\x96\x33\x69\x36\xef\xe4\xb8\x75\x16\xcf\xf6\xec\xee\x6a\xbd\xeb\x19\x71\x6a\x13\x17\x46\xfb\xa9\xbe\xf5\x69\xdf\xf6\xac\x6f\xdd\x9a\xf5\x4c\xe1\x85\xbe\xf5\x57\x9e\xaf\xfb\x0c\xdf\xfa\xa8\x6f\xe3\x5f\xe4\x5b\x99\xb3\x82\x5f\xf9\x6e\x5d\xfc\xb7\xd7\x79\x17\x94\x8d\x21\xd1\xab\x1a\x9d\x30\x57\xe9\x6d\xc2\x4c\x03\x72\xcc\x08\xcb\x41\xc7\xee\x88\xca\xaa\x37\xd2\xed\x02\x85\x4d\xd2\x6d\x76\x97\xcf\x65\xb2\xf8\x82\x98\xe0\x34\x5d\xe7\x8c\x62\x82\x27\x31\x71\xae\x17\x16\x9d\x46\x42\x4a\xda\x63\x8d\xe9\x98\x6c\x19\xa3\x5f\x5f\x13\x90\x29\x4a\x84\x38\x47\x4b\x34\x81\x03\x54\x06\x18\x4e\x73\x24\x4e\xa3\x10\x52\x9c\x0c\x09\x91\x40\x29\x1a\xc3\x68\x85\x40\x59\x59\xc1\x44\x42\x66\x69\x86\x60\x49\x11\x90\xa2\x44\xa1\x98\xe2\xfa\x56\xf2\x39\xdf\x1a\x59\x08\x66\x08\x94\x0d\xf1\xad\x5e\xeb\xf9\x0b\x5d\xcf\xfa\x56\x7f\x30\xbf\xf2\xad\x0f\xbc\x39\x12\xe0\x5b\x53\xa9\x52\x77\xb3\x28\xc9\xf2\x64\x9a\x99\x6e\xb2\xbb\xda\x36\xdf\x6d\x2c\x88\xb4\xb5\xc9\x30\x94\xcc\x2c\xb5\x82\x81\x0f\x0a\x9b\x26\x43\x70\x65\x66\xd5\xe9\x94\x6b\xa9\x4c\x7a\xb4\x65\xf2\x4d\x56\x4d\xcd\x1a\x03\x3a\x41\x53\x5b\x26\xbf\x35\x0b\x9a\x20\x28\xbb\x82\x0a\x56\x7d\x21\xfb\xef\xf2\xad\xcf\xfa\xb6\x67\x7d\xeb\xbc\x57\xc9\x3e\x53\x93\xe0\xf9\x7f\xee\x0d\x95\xcf\xf0\xad\x8f\xfa\x36\xfe\x45\xbe\xf5\xd1\xb1\xf0\x7c\xeb\x48\xc5\x2c\xa0\x12\xbd\x3e\x95\x1c\x94\x1b\xd6\x8e\x55\x33\x53\x60\xaf\x99\x72\x03\xbe\xf7\x20\x33\x6f\x82\xca\xac\x29\xb5\x97\x5c\xa2\x55\x65\xb0\x4e\x2b\xbd\x1e\xd7\xc9\xf2\x72\x2b\xac\xf2\xa3\xf9\xb4\x0b\x57\xef\x4b\x69\xb9\x2d\x2f\xb6\x83\x46\x32\xc7\x6e\xfb\x33\x13\x4f\x26\x63\xbe\x2d\x73\xf9\x9a\xe8\xd9\xe7\x46\xce\x7f\x0f\xe7\x53\xb8\x3d\xbc\x6e\x79\xfa\x2a\xe6\xbd\x5f\xb3\x3a\xc3\xe8\x7c\xfe\x8c\x4f\xa7\xcf\xbf\xb1\xe9\x27\x88\xd4\x1a\xf9\x32\xdf\xe8\x23\x45\xa1\x8f\x7c\x55\xe5\x2b\x6e\xfd\x1f\xcf\xf0\xdd\xbf\x88\x6b\x1f\xd6\x5b\x9c\xdf\x22\x1c\xc9\xbd\xef\x3b\x6c\xbe\x6f\x00\xb8\xca\x90\x0c\xf9\xf0\xb1\x1f\x7b\x3b\x3f\x7e\xb4\xd4\xb2\x96\xd0\x1c\xbe\x44\xba\x4b\xb2\xb7\x84\x7b\x88\x31\xa4\x5d\xc9\xd7\xdb\x02\xf2\xf5\x04\xfe\x81\x9c\xe0\x0f\xbf\xdd\x0e\x77\xaa\xe6\x35\xc3\x7a\xb7\xe0\x77\x0d\x6a\xc0\x9f\x1b\x8b\xf8\x93\x5e\xaf\x95\xec\x36\x91\x30\x49\x43\xd8\x8a\x2d\x79\xe0\xcb\xea\x91\xaf\x83\xbf\x56\xfa\x20\x32\x61\xf2\x87\xb2\x16\xa9\x01\xd7\xa4\xc5\xad\x63\xed\x07\x41\xf2\x95\xb4\xd0\x8b\xf7\x49\x54\x07\xf4\x12\x0b\x52\xad\xf8\x27\x43\xbb\x99\xaf\x64\x11\xd1\x36\x21\x3c\x9f\x5d\xc1\xdc\xb8\x73\xec\x79\x7e\x5c\x3c\xf1\x38\x0a\x98\xd7\xe2\xf1\x63\x2e\x0f\xb3\x73\x42\x71\xce\xc9\xc5\x6a\xe0\x92\x1f\x17\xf8\xe3\xea\x03\xad\xb7\x98\x1b\x03\x6b\xfc\x0c\x67\xce\x77\x6a\x63\xb1\xe5\xff\xba\xed\x2d\x6e\xdc\xbf\xba\xfb\x0c\x3f\x2e\x86\x78\x1c\xf9\x3e\x9d\xfb\x71\xfd\x95\xdc\x9b\x53\x7e\x08\xf7\xb6\xe1\xb4\x3f\xc0\xa9\x17\x25\x5c\x86\x7d\xe8\xce\xd9\x3e\xfc\x8d\xfe\x0b\x8e\xaf\xbd\x96\x2a\x7f\x1c\x3e\x0e\x1f\xc4\xec\xe9\x93\x9c\x4f\xb2\xa9\xca\xb1\x19\x3c\x7d\x1d\xfb\xe3\x86\xab\x8d\x64\xda\x98\x0f\xe7\xaf\xe2\xdb\xc3\x75\xce\x7a\x40\xa8\x7a\x48\x92\xdb\x02\xd8\x9b\xd7\x09\xe0\xe1\x0a\xb0\xe9\x07\x45\xb8\xfc\xd4\xf9\xb5\x10\xc6\x7c\x6f\x95\x63\xe3\x21\x19\x3c\xe6\x4f\x38\x1e\x55\x7e\xb8\xa2\xad\xc3\xc7\xef\xf6\xae\xfa\x79\x5d\x5f\xa2\x3b\x67\xf9\xf0\xc7\xc0\x2f\x78\xbc\xcd\xd1\xb9\x5e\x5f\xc5\xd6\x15\xce\x78\xee\xed\x16\x83\xb6\x3b\x24\xf6\x33\xc3\x7a\xc2\xf1\xb8\x49\x46\x99\x9f\x6d\xca\x7b\x22\x22\xb0\xe0\xd3\xf1\xf3\x16\x32\x1f\xe7\x32\xf4\xf1\x79\x0e\x1b\xc9\xa0\xf3\x05\xc9\xd7\xb0\xe7\xa0\x8a\xc5\xdc\xe1\xb3\x95\x81\xac\x39\xbc\x43\xf3\x65\xea\xf3\xe1\x8b\x62\xd2\x07\x1e\x87\xd3\xd7\xe8\xf1\x02\x5b\x5c\x2e\x23\xb5\xf9\x1a\xde\x62\xf1\x14\xce\xcb\x81\x63\xcd\x30\xa6\xcb\xf9\x73\x1c\x5d\xe2\x8a\x3d\xa2\x6e\xbe\x1b\xc0\xdf\x1c\xa8\xe6\xd0\xf9\x30\xfc\x2b\x38\xf4\x63\x8b\x37\x6f\x3d\x06\x3f\x10\x3f\xcb\x1f\x88\xe7\xe2\x25\xcd\xb0\xa0\x3c\x04\x76\x80\x10\x2f\xf0\xdb\x1e\x9e\x28\x8e\xef\xcc\x8e\xf6\x58\x5f\xa6\xdd\x3b\x14\x1b\xa9\x37\xf7\x6b\xe0\xbe\x94\xc3\x1a\x1a\xfa\x10\xc8\xb2\x09\x2d\xeb\x59\x85\x46\x12\xb8\x58\xa7\x1d\xbe\x05\x7a\xb9\x32\x72\x01\xef\xe0\xfd\x79\x3b\x08\xc3\x1d\xcd\xf1\x8d\x59\x76\x89\xd0\xcb\xc2\xf7\xf8\xec\xed\xfc\xf1\x35\x78\x28\xd6\xc8\xb4\x7f\x0f\x14\xc1\xa8\x97\x43\xed\x51\x1e\x8d\xe8\x45\xdc\xde\x42\x1d\x99\xbe\xc5\xb5\xe4\x33\xe4\xaf\x36\x86\x0b\xd4\x8f\xe4\x9b\xc1\xe8\x66\x73\xc3\xdc\x3b\x3e\xef\xe3\xf5\xaf\x57\xb4\x9f\x42\x34\xfb\xbe\x0e\xf1\x85\xf1\x5c\xcf\x83\x95\x8a\x78\xfa\x3f\xa3\x11\x29\xc9\x19\x6c\x7c\x21\xe6\x26\x5c\xa9\xc6\xd2\xfa\x25\xd2\xdc\x22\x16\x29\xd6\xad\x4e\xf1\xe5\x3b\x14\x51\x3e\x4d\xa6\x03\x81\x48\x39\x02\xab\x5d\x97\xa8\x4f\x7f\x08\xfa\x33\xa6\xb6\x1f\xfb\xcd\x05\xf0\xbd\x13\xfc\x12\xe9\xe5\x12\xea\x45\x33\x3c\x8c\x44\x1c\x19\x22\xd6\x75\xa1\xc4\x5e\x17\xbe\xae\x11\xc7\xe2\x3d\x3a\x88\x9d\x2f\xb6\x3f\xc3\x6c\xae\xf1\x3f\xbc\xd4\x77\x92\xb8\x63\x20\x3f\x54\x18\x87\xa2\x61\x4c\x1f\xd6\x72\x08\xce\xc8\x14\xe1\xeb\x57\x19\xda\x40\xd5\x2c\xe4\xfb\x7f\xfe\x83\xbc\x59\x86\x26\x9f\xed\xa6\xbd\xfd\xf8\x61\xc3\x8d\xfd\xed\xdb\x07\x12\x0c\x28\x19\x72\x3c\x40\xb7\x16\x1f\x0c\x2a\x1a\xcb\xd1\xd8\x8e\x45\xfe\x02\x34\x9c\x81\x0b\x50\x1f\x0b\xdf\x90\x6e\x4e\x68\x08\xae\x91\x21\x3f\x11\x82\x88\xbd\x11\xad\xca\x43\xe5\x6c\x9b\x28\x53\xfc\x35\xdb\xd1\x1e\x59\x24\x53\x6d\x08\xf9\x6c\xe5\xb8\x05\x84\x34\x84\x8c\xd0\x10\x2a\x29\xa1\xe9\xdb\x15\x71\x5a\xab\x15\xa4\x5d\x4b\xef\x4d\xa6\x21\x34\x5b\x8d\x7c\xaa\xb5\x7f\x94\x16\x4a\x42\x4b\x40\x52\x7c\x33\xc5\xa7\x85\x90\x7d\xb4\xfd\xba\xe3\xf2\x76\xe8\x2b\xc5\xbc\x4e\x19\x97\x74\x22\x36\xc9\x82\x38\xb9\xd4\x8f\xbf\x6c\x74\x53\x59\x5e\xa2\x1f\xb1\xa3\x18\xa8\x09\x6f\x29\xfb\x8f\xeb\xe1\x9c\x8f\x5b\x5a\x38\x54\x09\xc2\x0d\xe6\x3e\x0d\x5c\x17\x95\xfe\x41\x35\x04\x30\x73\xa9\x8b\x1b\x65\xb0\xd7\x1a\x85\xbf\xc4\xf1\x6f\x50\x48\xb0\x69\x5c\xd5\x90\xe2\x5a\x47\xcd\xb0\xec\x91\x09\x9b\xf5\x12\x22\x03\x1b\xec\x4d\x0c\x91\x97\xb3\x39\x22\x19\xb3\xb9\x06\x6d\xe8\xc8\xf0\xff\x02\x00\x00\xff\xff\x2b\xd9\xc0\xec\x36\xc4\x00\x00") - -func asset_stat_accountHorizonSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_accountHorizonSql, - "asset_stat_account-horizon.sql", - ) -} - -func asset_stat_accountHorizonSql() (*asset, error) { - bytes, err := asset_stat_accountHorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_account-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf7, 0xa8, 0xb, 0x52, 0x14, 0xea, 0x72, 0xb1, 0x31, 0x42, 0x61, 0x8, 0x11, 0x47, 0xa4, 0x23, 0xe8, 0x40, 0xb, 0xa8, 0x7c, 0xce, 0x5c, 0x49, 0x48, 0x16, 0xe2, 0xa7, 0x84, 0x5b, 0x61, 0xaa}} - return a, nil -} - -var _asset_stat_operationsCoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x59\x93\xe2\xb8\xf2\xef\x7b\x7f\x0a\x47\xbf\x54\x4f\x50\x33\x78\x5f\xba\xef\x9c\x08\x1b\x0c\x18\x8c\xcd\x62\xd6\x1b\x37\x3a\x64\x4b\x06\x83\xb1\xc1\x0b\xdb\x8d\xf3\xdd\xff\x81\xa1\xc0\xac\x45\x41\xf5\x99\xf3\x8f\x68\x3f\x54\x57\x5b\xe9\xcc\xd4\x4f\x99\x29\x29\xa5\x92\xfe\xfc\xf3\xcb\x9f\x7f\x62\x35\x3f\x8c\x06\x01\x6a\xd6\x55\x0c\x82\x08\x98\x20\x44\x18\x8c\x27\xd3\x2f\x7f\xfe\xf9\x65\x53\x9e\x8f\x27\x53\x04\x31\x3b\xf0\x27\x07\x82\x39\x0a\x42\xc7\xf7\x30\xe1\x2f\xf6\x2f\x22\x45\x65\xae\xb0\xe9\xe0\xe7\xe6\xf3\x13\x92\x2f\x4d\xd9\xc0\xc2\x08\x44\x68\x82\xbc\xe8\x67\xe4\x4c\x90\x1f\x47\xd8\xdf\x18\xfe\x23\x29\x72\x7d\x6b\x7c\xfe\xd6\x81\x2e\xfa\xe9\x78\x3f\xa3\x00\x78\x21\xb0\x22\xc7\xf7\x7e\x86\x28\xdc\xf0\x3d\x27\xb6\x5c\x67\xc3\x1a\x79\x96\x0f\x1d\x6f\x80\xfd\x8d\xbd\xb4\x8c\x02\xff\xf2\xe3\x4d\xb6\x07\x41\x00\x7f\x5a\xbe\x67\xfb\xc1\xc4\xf1\x06\x3f\xc3\x28\x70\xbc\x41\x88\xfd\x8d\xf9\xde\x8e\xc7\x10\x59\xe3\x9f\x76\xec\x6d\x65\x99\x3e\x74\xd0\xa6\xdc\x06\x6e\x88\x8e\xc4\x4c\x1c\xef\xe7\x04\x85\x21\x18\x24\x04\x0b\x10\x78\x8e\x37\xd8\x92\x04\xfe\xe2\x67\x88\xac\x38\x70\xa2\xd5\x86\xb9\x6d\xff\xd8\x01\x80\x40\x60\x0d\x7f\x4e\x41\x34\xc4\xfe\xc6\xa6\xb1\xe9\x3a\xd6\xeb\x06\x31\x0b\x44\xc0\xf5\x07\x3f\xbe\x7c\xc9\x37\xf4\x1a\xa6\x68\x79\xb9\x8b\x29\x05\x4c\xee\x2a\x4d\xa3\xb9\xa3\xfc\x2b\x9e\x0e\x02\x00\xd1\xd0\x09\x23\x73\x15\xa2\xd9\x8f\x9b\xd4\xa1\x35\x9d\xc5\x7e\x10\x4f\xc2\xfb\x88\x91\x37\xbf\x87\xd2\x45\x70\x80\x82\x7b\x28\x37\x7a\xda\x08\xdd\x49\x79\x07\x99\x89\xc2\xc8\xb7\x6d\x14\x38\x1e\x44\xcb\xdb\xb4\xc0\xb2\xfc\xd8\x8b\x4c\xe0\x02\xcf\x42\xe1\x8f\x2f\xa2\x6a\xc8\x0d\xcc\x10\x25\x55\x4e\x51\xeb\x9a\xda\xbb\x00\xaf\x1f\xac\xb0\x84\x7b\x4e\xd7\x9a\x46\x43\x54\x34\x23\xf5\xd1\x31\xe1\xcf\xe9\x18\xad\xee\xe1\x1f\x2d\xdf\x67\xbd\xa7\xf9\x00\x57\x1b\xdd\xa1\x73\x9a\xec\x7e\xde\x41\x1c\x46\xae\xe3\xa1\xf0\x16\xe7\x3d\xd1\xdd\x7c\x37\x5a\xa0\x24\x1a\xdc\xe0\x7b\x20\xba\x9f\xef\xde\xe4\x6f\xf1\xdd\x13\xdd\xcd\x77\x4b\xef\x78\xb6\x7f\x83\xef\x81\xe8\x6e\xbe\xd3\xd8\x0c\x63\xf3\x06\xcf\x2d\xc1\x47\xf8\xb9\x4e\x38\x9c\xc5\x28\xbe\x85\x6c\x9a\xec\x7e\xde\x08\x05\xb7\x60\x4d\xca\xef\xe6\x96\xb8\xf1\x2d\x76\x5b\x82\xbb\xf9\x6d\xa3\xd2\x10\x01\x78\x9b\xed\x11\xdd\x2f\xe6\xbe\x8b\x94\x68\xf6\xf3\x4e\x31\x26\xf0\x6e\x30\x37\x81\x77\xb7\xc2\xbb\xe8\x77\x4b\xd7\x37\x92\x8f\xf2\xdc\x8c\x01\xde\x67\xbb\xa1\xda\x71\x4e\x68\x4f\x19\x5f\x0c\xb9\xb7\x69\xf7\xa1\xf1\x3d\xb2\x43\xa0\x7b\x87\x72\x1f\xb8\x6e\xd3\x1d\x02\xd1\x3b\x74\xfb\xc0\xf2\x2e\xdd\x5d\xfa\x1d\x02\xca\x6d\xba\x6d\x90\x78\x97\x66\xef\xf2\xef\x50\x6e\xfc\xf8\x36\xc9\xd6\x37\x6f\xd3\x1c\xb9\xc2\x6d\x52\x13\x78\xb7\x09\xde\x4c\xf5\x2e\xaa\x8d\xe5\xed\x08\xe5\xae\x21\x6b\x4d\x45\xd7\xd2\xc4\xee\x74\x10\xce\xdc\x1d\x45\x33\x57\x92\xab\xe2\x19\xaf\x1f\x5f\xb6\x63\x63\x0d\x4c\xd0\xf7\xb7\x77\x98\xb1\x9a\xa2\xef\xbb\x4f\x7e\x60\x4d\x6b\x88\x26\xe0\x3b\xf6\xe7\x0f\x4c\x5f\x78\x28\xf8\x8e\xfd\x99\x0c\x99\x73\x0d\x59\x34\xe4\x37\xce\x6f\xfc\xbe\x1c\x71\x3c\x2e\xdc\x31\xce\xe9\xd5\xaa\xac\x19\x37\x38\x6f\x09\x30\x5d\x3b\x66\x80\x29\x4d\xec\xe5\x6d\x7c\xfb\xf6\x2e\x4c\x98\xbc\x9c\x4a\x7e\xab\xfe\x4e\xe6\x1e\xa1\x77\xeb\x73\x84\xa5\xa6\x1b\x27\x78\x62\x1d\xc5\x28\xed\xd5\x4a\x0f\x68\x8f\xc4\x1f\xb8\x9c\x28\xf2\x91\xca\x9f\x31\x49\x00\xa8\xa9\xd9\xe9\x60\x33\x8b\x99\x06\xbe\x85\x60\x1c\x00\x17\x73\x81\x37\x88\xc1\x00\x25\x30\xdc\x39\x00\xdf\x90\x41\x64\x83\xd8\x8d\x7e\x46\xc0\x74\x51\x38\x05\x16\xda\xcc\x26\x5e\x4e\x4a\x17\x4e\x34\xfc\xe9\x3b\x30\x35\x41\x38\xaa\x6c\xda\x20\x77\xd5\x4c\x4c\xf7\x50\xc9\x37\x03\xb8\x04\xf8\xd6\xca\xd3\x41\xf7\xdb\x17\x0c\xc3\xde\xde\x38\x10\xb3\x86\x20\x00\x56\x84\x02\x6c\x0e\x82\x95\xe3\x0d\xbe\x31\xec\x1f\x49\xdb\x68\x2d\x55\x7d\x4d\xa8\x37\x1f\x7a\x60\x82\x2e\x10\xf3\xfc\x25\xe2\x39\x70\xe3\x4b\xd4\x04\x41\x9e\x92\xbb\x20\x8c\x26\x3e\x74\x6c\x07\x41\xcc\xf1\x22\x34\x40\xc1\x9e\xe4\xcb\x1f\xa7\x6d\xbf\xf7\xe2\x27\xb1\x08\x1f\x02\x62\x37\x11\xc0\x4c\x67\xe0\x78\xd1\x49\x61\x88\x66\x5e\x3c\xb9\x5c\xe6\xc5\x93\x30\x36\x91\x17\x05\x9b\xa9\xe0\x69\x35\xb7\x34\x8e\x67\xbb\x60\x33\x63\x84\x28\x8c\x2e\xab\xb3\x25\x1c\xfa\x13\x04\xfd\x09\x70\xbc\x0b\x54\x34\x7d\xaa\x74\x34\x0c\x50\x38\xf4\x5d\x18\x62\x11\x5a\x9e\x6a\x66\xbb\x60\x70\x4d\xa3\x9b\x6d\xb3\x43\x24\xde\x48\x75\x1d\x60\x3a\xae\x13\x6d\x2a\xb7\xad\xff\x1b\x24\xae\x7b\xab\xd8\x19\x78\x9b\xb1\xd0\x46\xad\xed\x9b\xd4\x68\x60\x3f\xb4\xd8\x81\xfe\x33\x99\x56\x63\xb9\x92\x9c\xab\x60\xdf\xbe\xbd\x35\xc5\xbf\xfe\xc6\xf0\x3f\xfe\xb8\xf1\xf5\xa9\x82\xa7\x7c\xce\x2a\xf0\x1e\xc7\xa3\xb6\x3c\xe1\x76\xdc\xce\xef\x71\x3a\x87\xe7\x84\xdd\x05\xfc\xb6\x3c\xcf\x1d\x63\xd3\xff\x3d\xea\x13\x9b\x21\xe3\xd6\x1d\x3c\x1f\xa2\xb4\x2f\x1c\xf9\xc0\xb9\xd0\xe3\xfe\xf9\x51\xf1\xc7\x03\xe3\xad\x22\xbb\x77\x20\x1c\xa6\x94\x61\xcf\x6c\x7b\x1a\xa0\xf9\xbb\x44\x66\x6c\x8d\x51\xe4\x3a\x61\xf4\x2e\xe9\x7e\xb4\xfd\x66\xee\xdb\xd7\x96\xeb\x87\x28\x72\x26\x57\x3c\x3f\x09\xac\x17\x7c\x2b\xd5\xe6\xc7\x83\xfa\x3d\xbf\x93\xf6\x3e\xc8\xb9\x62\x3a\xd7\xe6\x06\xc7\x6c\x0e\xb5\xb8\x66\x2d\xbb\xc1\xd7\xa3\x2d\xb6\x9b\x78\x7d\xdb\x3b\x39\x0a\xee\x8c\xa0\xdb\xcc\x0b\xbc\x16\x41\x13\x73\x07\x61\x88\xa2\x4b\x78\x6e\x7d\xf5\x6a\x31\x98\x6c\xdc\xea\x32\xeb\x69\xe0\x58\xc8\xbb\x12\xc4\x92\xc2\x6b\x11\x2e\x29\xc4\xa0\x1f\x9b\x2e\xda\xd8\x9b\xe5\x24\x19\xc9\x4f\x8d\xa2\xa9\x16\xde\x4d\x59\xb7\x75\x39\x69\xd7\x5d\x05\xaf\xd8\xc6\xee\xcb\x1d\xc2\x27\x9f\xbe\xe1\x7e\xcd\x20\xb6\x03\xf6\x47\xed\x61\x3b\xad\xdf\x9a\x83\x33\xbd\xd4\xf1\x33\x67\x9e\xeb\x07\xd1\x1e\x8d\xbc\x5c\x10\x5b\xaa\x81\xe1\xa7\xdd\x26\x5a\x46\x20\x8a\xd0\x64\x1a\x61\x1b\xb7\x08\x23\x30\x99\x62\x9b\x21\x93\x1f\x6f\xdf\x60\x6b\xdf\x43\xe7\x9d\xad\x0d\x1c\x37\x0e\x52\x5d\xed\x35\x09\xd1\x6a\x8a\xde\x6f\x94\x6d\x5a\x22\xc5\xf7\x3c\xec\xef\x25\x5e\x69\x9d\x5d\x66\xc3\x0f\x4e\x1b\xf5\x5b\x82\xc4\xbf\x30\xfc\x0f\x4c\xd4\xf2\xd8\xf6\xbf\xff\xe7\x6f\x8c\x65\x18\x8a\xf9\xe3\x62\x5b\xa5\xa7\x61\x0f\x37\x59\x3a\xcb\x93\x8e\xb9\x57\xd0\xd8\x26\xda\x36\x5e\x77\x51\xa1\xcd\xdc\xf1\x09\x55\xc2\xd8\xdc\x29\x11\xa0\xf0\xa8\x03\xa2\x2e\x8e\x18\x03\x04\xf6\xbe\x74\xae\x4f\x6a\xce\xfb\xa8\x4e\xa9\x64\xdd\x1d\x3d\xe3\x56\xb1\x59\x88\x6e\xf5\x30\xe7\x7a\xa6\xe6\xf0\x8f\xea\x79\x60\x71\xbf\x9e\x67\x9d\xdc\x49\x39\xf2\xe6\xc8\xf5\xa7\xe8\x9d\x2e\xed\x20\xfa\x89\x8e\x28\x95\xee\x78\x02\x82\xb7\x7c\xed\xb7\x7b\xda\xe1\x60\x45\xef\x01\x31\xbb\xd2\xd1\x1c\x83\xf0\x96\x07\x3e\xe2\x78\x0a\xc4\x91\xb4\xab\x60\x1c\x72\x44\x0f\x83\x71\x48\x8a\x7f\x3b\xf8\xed\xf1\xe4\xed\x82\x4f\xdd\xf2\xee\x54\x86\xeb\x51\xad\x52\x4b\x00\x8f\x4c\xbb\x92\x1e\xff\x46\xa4\x76\xc2\x30\x46\xc1\xfd\xac\x2c\x1f\x5e\x9c\x9d\x9e\xc1\x12\xb9\xce\xc4\xb9\x32\xa2\xb8\x39\x17\xfc\x27\x67\x55\x29\xeb\x4c\xad\xaa\x3c\x34\x8b\x4a\x7f\xff\x59\xf3\xa8\x14\xcf\xc7\xe7\x3f\xb7\xb8\x6e\x1b\xed\x84\xd3\xae\x25\xff\x75\xd9\xf1\x8e\xd2\xbd\x0f\x1b\x79\x7a\x0d\x6d\x6b\xe6\xd1\xf2\x28\x14\xdf\x31\xdf\x38\x35\xc0\x65\xb2\x4a\x79\xb5\xd4\x1a\x02\x6f\x80\x2e\x4e\xec\xd3\xe0\xa4\x97\xed\x1e\x8f\xd5\x87\xdc\xf9\xe3\x10\xfd\x87\xf1\x31\x7d\xb8\xba\x04\x4e\xb4\x0c\x50\x18\xbb\x17\xa3\x7b\xb4\x9c\xa0\x77\xe7\x73\x87\x25\xd6\xc7\xf1\x3c\x59\xb7\x78\x14\xd4\x93\x15\xe7\x6f\x77\x01\xb7\xfb\xe8\x16\x7a\x3b\x92\x4b\x40\xdc\x67\x76\x27\x2b\xdc\x8f\x00\x95\xdf\xcc\xac\x6d\x3f\x78\x27\x19\x8a\xe5\x45\x43\x7c\x07\xb3\xdb\x2c\xc3\x0f\xf3\x53\xb4\xa6\xdc\x30\x30\x45\x33\xf4\x43\x52\xb1\x2d\xaa\x2d\xb9\x89\x7d\x7b\x29\x4a\x8d\x5a\xaf\xa4\xa8\x64\x4e\xa1\x0a\x5a\x9d\x96\xba\x6a\xa1\xaa\xe5\xd5\x42\xb9\xa5\xd5\x5a\x64\xa9\x47\xf5\xab\x85\x66\x49\xd7\x5a\x39\x59\x17\x9b\x1d\xae\x9e\xe3\xf4\x2e\x59\x7a\x79\xc5\x84\xed\xc3\xec\xfe\x65\x71\xfc\x15\xa3\x5f\x31\xfc\x75\x8b\x32\xf6\xf2\xf2\x8a\xbd\x88\x75\x51\x14\xc5\xbf\xff\x7e\x49\x0a\xc8\xb7\xb2\xc3\xcf\x3f\x7e\xbc\xa7\x61\xae\xd0\xef\x68\x94\xa8\xb7\x0b\xf5\x2a\x29\xf5\x8d\x7e\x97\xab\xd1\x5c\xa7\xa9\xd0\xf5\x6a\xb1\x9c\x63\x49\x55\x51\x6b\x15\x3d\x6f\x68\x79\xb5\x5d\xe9\xf7\x35\x91\x91\xea\x65\xea\xe5\x15\x23\xf0\xfd\xf3\x8a\xf1\x0c\x2f\x08\x14\xcd\x08\xe4\x2f\xd0\x51\x94\xb8\x62\xb5\x5e\x2b\x33\xbd\x1e\x29\xd3\xad\x72\x55\xd5\xc4\x7e\x2d\x2f\xb7\x2a\xb5\x0a\x2d\x8a\x4a\xad\xd1\x55\xfa\xa5\x4a\xbf\xd8\x52\x1a\x39\xb6\x50\x23\x55\xb1\xde\xcc\x6b\xff\x51\x1d\x73\xcd\x2e\x5d\xcb\xb7\xfa\x35\x4a\x52\x19\x92\xec\xb7\xab\x85\x6e\x4e\x2e\x33\x8c\x56\x91\xf5\x92\x5c\x55\x14\xae\xd6\xac\x96\xfb\x9a\x28\xca\xcd\x32\x4d\xd3\xc5\x66\xb3\x5c\xd5\x0f\x2d\x2d\x1c\xa9\x48\xbd\x62\xc4\x0d\x15\xa9\x87\x54\xec\xa9\x46\x4d\x6f\x71\x4a\xbb\x57\x2a\x89\x54\xb7\x52\x2f\xd0\x3d\x89\xee\xd0\xfd\x4e\xa9\x20\x37\xaa\x7a\x9d\xab\xd0\x9c\xd2\x11\xb5\x8a\x26\x15\x24\xad\x5c\xd6\x64\xbd\xc8\x7c\xaa\x8a\x57\xfc\xef\x34\x6f\xf9\x84\x2b\x5f\xcf\x46\x7e\xd4\x9f\x8f\x33\x92\x7b\x1c\x59\x0a\x0a\xbc\xcd\x50\x2c\x42\x2c\x0f\x09\x93\xe4\x4c\xc6\xe4\x05\x9b\xa4\x80\xcd\x50\x04\x61\x72\x0c\x2b\x00\x92\xb6\x81\x4d\xd0\x38\x05\x20\x6e\x32\xa4\xc9\x52\x94\x89\x73\x26\x12\x84\x0d\x54\xf8\x93\xcf\x86\x07\xc3\x91\x80\x44\x14\x69\xdb\x24\xcd\x03\x9c\x33\x71\xc4\xe1\x36\x24\x6c\x16\x52\x04\x6f\x11\x36\xb0\x20\x89\x9b\xac\x65\xe1\xbc\x45\x51\x90\xe1\x38\x86\x64\x04\x9e\xe5\x09\x92\x01\x04\xfb\x92\xb4\x1f\xbe\x69\xb8\xff\xda\x47\xea\x56\x1c\x7a\x95\x5d\x35\x2b\x12\x97\xf7\xf2\x42\x89\xc4\x97\x23\x29\x13\xe2\x83\x28\x5c\x28\x8b\x35\xd1\x85\xcd\x4e\x0f\x48\x65\x50\x18\x6c\xe8\x65\x8d\x56\xc1\x7a\x4a\xd6\xdf\xe5\xdc\x17\xbb\x04\x9d\x90\x49\xe3\xff\x40\x45\x3e\xf5\x79\x39\xf1\xf5\x2b\x86\x8a\x43\x8b\x63\x38\x9c\x35\x6d\x41\x60\x78\x1b\x42\x92\x22\x59\x68\x01\x8e\xb2\x68\x52\x30\x01\x4f\x09\x26\xc5\xb0\x8c\x69\xd3\x94\xc0\x08\x96\xc0\x91\x34\x8b\x23\x12\x71\x34\x01\x19\xd2\xdc\x18\xd9\x67\x18\x3b\x0d\x68\x13\x58\x36\x87\x23\xc4\xb3\x34\xc3\x73\x9c\x60\x93\xb6\x4d\x23\x86\xb6\x21\xcf\x11\x38\x60\x68\x8a\x36\x6d\x1c\x32\x3c\x85\x73\x88\xe7\xa1\x6d\x11\x38\x03\x05\x9c\xe2\x69\x62\xc3\x83\x7c\xc5\x08\x86\x11\x18\x4e\x60\x59\x6e\x67\xb1\x39\xb2\xd6\x1f\x11\x5a\xcc\xf8\xb8\x59\xe6\x3a\xb4\xb7\xd2\xe7\xad\x65\x91\x6a\x4f\xfd\x71\x66\x5e\x10\xf5\x28\x47\x54\xc8\x2a\x27\x71\x6c\x5f\x74\xe9\x65\x3b\xe4\xa6\x59\x58\x6a\x3b\xb5\xd1\x78\xee\x90\xa3\x85\xc1\x11\xa2\xc0\x56\xda\x4b\xa9\x60\x38\x6d\x7b\x0c\x6a\x95\x5a\xad\x9a\x20\xdc\xad\xb5\xab\xf2\x62\xf3\x9b\xb2\xff\xb1\x0d\x6f\xe1\xe1\xff\x0b\xb1\x56\xdf\xd9\x8e\x43\xb7\x10\x89\xcf\x35\x1f\xb7\x26\xda\x6a\x2c\xa9\x7e\x81\x98\xb0\xab\x9a\x3c\x37\xe0\x9c\xaa\xda\xb9\x59\xdc\xe9\x2e\x2c\x4e\x9b\x2e\x2b\x4d\x76\x4d\xe5\xe3\xe1\xb8\x53\x42\xb6\x9a\x35\x5c\x43\x18\x2e\x73\x6e\x1d\x9f\x2f\x88\x5e\xb5\xc4\x2a\x14\x2f\x17\xc8\xba\x2e\x17\x13\x79\xca\x05\x8b\x2e\x5e\x34\xef\x37\x8b\xce\xe3\xe5\x5f\x68\x7b\xbf\xe6\xb9\xd3\xa2\x09\xde\x32\x4d\x8a\x03\x26\xc5\x11\xd0\x32\x05\x1c\xb7\x78\x9a\x05\x84\x0d\x79\x1c\xc7\x2d\x12\xe0\x82\xc5\xf2\x08\x90\x94\x09\x68\x8a\x67\x78\x0b\x87\x08\x41\x9c\x81\x36\x09\x05\x0b\x26\xa1\xf7\x13\xbc\x82\x64\x18\x28\xb0\x34\x41\x9b\x2c\x8b\x10\x4e\x11\xb6\xc0\x02\x8b\x26\x79\x1b\x92\x1c\xb4\x11\x02\x0c\x41\x71\x08\x98\x34\x6d\x41\x01\xf1\x1c\x4f\xf0\x38\x14\x4c\x60\xb1\x16\x01\x18\xee\x25\xe9\x1e\xf7\x16\xcd\xbf\x59\xf4\x82\x2a\xb5\x17\x20\x3b\x69\x8f\x04\x7c\x54\x8e\x56\x5e\x4d\xae\x98\xb3\xfc\x64\xdd\x76\xe7\xb8\xde\xf6\xca\xd6\xb8\xa7\xab\x5e\x1d\xb6\x02\xd9\x16\x7b\xa5\x8e\x2d\x7a\x3c\xed\x8d\x86\x7d\x1f\x28\x85\xbe\xab\x10\x95\x50\x8b\x1b\x79\xdb\x42\x82\xcd\xce\xdb\x26\x4b\x77\xcb\x78\x82\xf0\xc6\xa2\x0b\x29\xc4\x87\xcd\x3c\xcb\xaa\xc3\xb5\xc9\xf5\x35\x3f\x68\xad\xd6\x46\x7d\x26\x11\x84\x07\xf1\x30\xa8\x96\x6a\x73\x7e\x0c\x9c\xba\x6a\x30\x43\x67\xe0\x76\xfb\x7d\xa9\x49\x9a\xb1\xb8\xcc\x74\x02\xb9\x52\xc3\x3d\x2a\xc3\xba\x32\xc5\x06\x8d\x2a\x89\x86\x74\x51\x24\xcd\xa0\xb8\x00\xed\xc4\x63\xaa\x17\x2c\xb6\xdc\xbb\xd4\xea\xff\xdb\x2d\xf6\xca\x08\xe4\xc2\xb2\xda\x13\xe3\x99\xf3\x35\x99\x67\x98\x5d\x5b\x34\x78\x8e\xe7\x69\xde\xff\x09\x6e\x57\xb2\xf6\x4f\x70\xbc\x92\x5f\xff\xe8\x68\x30\x95\x63\x4f\x0d\xa9\x4b\xcd\x9a\xd8\xd1\xd4\x76\x4f\xd6\xcb\x4c\x5d\xe9\x68\x4c\xbe\x61\x90\x95\x42\x51\x2f\x34\x1a\xdd\x9a\x54\x2d\x16\xf3\x64\x8e\xec\x92\xfd\x5c\xa1\x2b\x75\x15\x8d\x22\xbb\x86\xb2\xed\xd1\xb6\xe3\x2e\x85\xf7\x06\x21\x01\x2d\xd9\xf2\x42\xb9\x63\xe2\x56\x9f\x6d\xb5\xd6\xce\x72\x04\xe9\x4e\xb1\x5a\xab\x47\x5d\x62\xdc\x30\x87\xf1\x30\x16\x0e\xd6\x97\x74\x40\xb9\xe4\xd7\x8d\x9b\xc9\x83\x5c\x77\x54\xe8\xac\x63\x4f\xc0\x61\x47\xc9\xe8\xcd\x8c\x0a\x6a\x52\x6d\xde\xca\x53\xfe\xb4\x2b\xcb\x6d\xbd\xdc\xce\x34\x7c\xde\xe7\xf9\xc4\x47\x25\x4b\x68\x2d\x8c\xe4\xfb\xc1\xfe\x87\x94\x30\x5d\xec\xff\x9f\x17\x45\x21\x97\xf2\x62\xa9\x3f\xb0\x16\xb0\x66\x22\xae\x0b\xab\x85\x5a\x9f\x1f\xf1\x5c\x19\x5f\xcb\xb3\x5c\x2d\x93\xe9\xca\xe5\x71\x09\xcf\xc3\xb9\x2d\xf4\x27\xaa\x92\xb0\xe3\x63\x73\x6d\x52\x6e\x66\xb8\x14\xa8\xee\x30\x6e\x7a\xc5\x9e\x16\x97\x6a\x71\x65\xd1\x93\x7d\x9a\x55\xd7\xd9\x7e\x50\x21\x06\x43\xb3\x94\x17\x04\x89\xc9\x94\xd7\xba\x3f\x5e\xdb\xbc\x94\xcf\xcc\xf8\xae\x14\x48\x6b\x5e\xc4\xc7\xf4\xb2\xc0\x95\x38\x41\xf6\xf5\x7e\xb6\xee\xe6\x37\x13\x8c\x93\xde\xe2\x93\x9b\x86\x7a\xaa\x69\xaa\xc7\x4d\x93\x17\x1b\xbc\x34\x80\x7d\x3e\x67\xaf\x1d\xa4\x17\x26\x43\x7f\xd0\x9e\xb4\x46\xad\xd9\x82\x64\x64\x4d\x58\x72\x44\x76\x26\xb4\xe7\xc1\xd0\xf2\xea\xfb\xa6\x69\x9d\x44\x9b\x0f\x43\x0f\xe4\x3c\xc1\xbb\x6a\x63\x5c\xf0\x1d\x6f\x54\x98\x89\x32\x37\x64\x48\x6d\xdc\xaf\x57\x96\x7a\x45\xe4\x69\xc0\x0d\x4b\xe1\x48\x68\x53\x4b\x69\x64\xb1\x83\x4c\xb5\xb8\x66\xb9\xbc\xc9\xe5\x96\x3e\xb7\x28\xd4\xcc\x86\xb1\x10\x3d\xa9\xac\x65\x3c\x21\xdf\x13\x22\x81\x42\x92\x34\xd8\x42\x7f\xdd\xcf\x2e\x2d\xe2\x3c\xe0\x67\x6f\x0b\x39\x87\x29\x17\x8b\x73\x14\xce\xd1\x36\xbb\xe9\xce\x39\x8e\xb6\x08\xda\x66\x39\x8b\xb7\x2d\x64\x09\x90\xa2\x08\x12\xe0\xbc\x6d\x9b\x88\xb1\x68\x92\xa5\x09\x9b\xc6\x21\x34\xa1\x6d\x33\x82\xc0\x9b\x64\xba\x51\x13\x90\xe5\xe4\xd7\xd1\x0a\xe5\xd6\x6d\x62\xd1\x58\xa1\x45\xa3\x3f\x6f\x2c\xbd\x69\xc3\xd0\xd5\xa2\x46\x0d\x7b\xbd\x85\x90\x23\xec\x4e\xa3\x10\x17\xd9\x22\x87\xbf\x17\xf3\xaf\x2c\xda\x7c\xb8\xf2\x87\x85\x9b\x7d\xe5\xdf\xfe\x52\x6a\xbb\x0d\x13\x3b\x7b\x36\x03\x12\x02\x3f\xf3\x89\x0b\x9c\x3c\x14\x2d\xfc\x60\x3c\x05\x61\x38\x1d\x06\x20\x44\x17\x38\x19\x28\x8c\xb0\x66\xbe\x80\x69\x5b\x62\xec\x07\xd6\x44\xd3\x08\x4d\x4c\x14\x60\x24\x4e\x30\xf7\x08\xb2\xfd\xc0\x42\xa1\x35\xf5\x3d\x0f\x2d\x23\x17\xc4\x9e\x35\x3c\x15\x94\x6c\x73\xbc\x87\xd9\x76\x2c\xb8\x4b\x23\x86\x97\xeb\xff\xff\x93\xac\xe3\xd7\xc8\x99\xa0\xaf\xdf\x31\x7c\x9b\x84\xfc\xba\xfb\xbb\xb1\xaf\xdf\xb1\x6d\x79\xf2\x72\x08\xc2\xaf\xdf\xb7\x9b\x2c\x93\x97\xff\xde\x11\xdb\x08\xdd\x47\x38\x01\xcb\x68\x19\x3a\xeb\x3b\xc9\x03\x14\xa2\x60\xfe\x1e\xf1\x97\x7f\xdf\x05\x05\x08\xa3\x64\x77\x10\xdc\xad\xd2\x5f\x32\x85\x67\xc7\xc8\x77\xe8\xb1\x8b\xb6\x20\xb0\x86\xce\x7c\x57\x78\xa5\x49\x0e\x6d\x40\xec\x00\x49\xe0\x08\xbe\x7e\xc7\xbe\xce\x09\xe2\x2f\xe2\x2f\xfc\xeb\xae\xc0\x8a\x83\x00\x79\x91\x9a\x54\xed\xeb\x77\x8c\x3a\x7e\x2f\x25\x1b\xb8\x36\xb8\xfd\xdf\x3d\x90\x07\x48\xf7\x94\x1b\xc6\x36\x49\xd8\x2c\x34\x05\xc1\xe2\x81\x45\x32\x26\x6f\xda\x2c\x47\x22\xde\xe6\x18\x8a\xc5\x49\x0a\x07\x02\xcf\xd2\x80\x21\x19\x5c\x60\x05\x01\x11\x26\xc0\x29\x40\x12\x90\x83\x3c\x4f\x9b\x70\xa7\xd1\x9e\xef\xc6\x8a\x8f\x1a\x70\x5f\x92\xd4\x7d\x63\x72\x47\x45\xff\x3e\xf9\x3e\xf4\xc0\x74\xa3\x17\xb2\x29\x02\x90\x38\xa0\x04\x1e\x21\x8e\xb2\x10\x49\x92\x1c\x83\x00\x4f\x70\x1c\xc7\xb3\x26\xb0\x18\x9a\x65\x58\x9b\xa2\xa0\x65\xd1\x36\x65\x23\x8b\xc5\x21\xc3\x40\x68\x13\x9b\x99\xf8\xd7\x2f\x17\x24\x5c\xc1\xe0\xd9\x14\xd3\xc7\x31\x20\x5e\xcf\xcb\xfc\x38\x9a\xc6\xd1\xe7\xd6\xfd\x16\xc2\x4f\xd7\xfa\xbf\x1a\xe1\xfb\xac\xec\x37\x06\xbf\x31\xf8\x8d\xc1\x6f\x0c\x7e\x63\xf0\x1b\x83\xdf\x18\xfc\xc6\xe0\x17\x62\x90\xfc\xf6\xff\xee\x9f\xbc\x84\xd6\x34\xf9\x33\x89\x4b\xcf\xcb\xdb\x0c\x3d\x49\x3e\xe5\x6a\x65\x5a\xd5\xba\x5d\xa9\x54\xe6\xa4\xc2\x44\x28\x15\x91\x5b\xa8\xd2\x61\x8f\x42\x85\xe1\x28\x8f\xab\x6d\xa1\x2f\x77\x68\xd3\x37\xe7\x87\x14\x55\x3e\xf9\x49\xf6\x4a\xd5\x92\x41\x52\x31\x41\x19\x92\x41\xda\x4a\x56\x5f\xc1\xea\xb2\x32\x18\x65\xe7\xee\x32\xd7\x97\x04\x91\x32\xa9\x6c\xa7\xef\xac\xf6\x19\x81\xf2\xe0\xc9\x34\xcd\x23\x19\x05\x49\x0c\x69\x14\x35\xa5\x41\x20\xcd\x9b\x64\x97\x2e\x57\x07\x28\x5b\x22\x2b\x78\x49\xa2\x4a\x7e\x2b\x8b\xf8\x86\xe6\xcd\x6a\x93\x92\x36\x5a\xd5\xa5\xe9\xb2\xd1\xd4\x42\xad\x35\xe6\x81\xab\x18\xb5\xf9\xc4\xa7\x3c\x91\xb6\x57\xf3\x72\x8e\xae\xbb\xed\xd6\xaa\x59\xe8\x65\x82\x79\x29\x37\x78\xd3\x27\xd7\x7b\x72\x95\x40\x7a\x24\x0d\x56\x57\xf5\x52\xd0\x1a\xf4\x2a\x0b\x13\x8f\xdc\x4c\xce\x50\x4a\xf3\xa5\xe0\x44\xd2\x02\x2e\xd9\x42\x8d\x9a\xcb\x46\x9f\x1d\x31\xc3\x75\x8f\x1f\x8b\xc0\x6a\xb5\x46\x66\xbe\x5d\xae\x15\xa7\x4d\x79\xcd\x31\x33\x8d\x59\xe8\x25\x3e\x58\xd5\x63\xb9\xdc\x6e\x57\xc7\xc3\x4e\x6d\xc6\x2d\x17\x7e\xa2\x4e\x46\x91\x90\x8d\xaa\xc2\x3c\x3f\x09\x43\x4d\x41\xd5\x36\xf4\xe7\x96\xd3\x28\xf1\x22\xe5\xb8\x4d\x9a\x94\x1a\x5e\x09\x5f\x5b\x63\xbe\xbf\xe8\x53\x6a\x54\x18\x96\xdd\x1e\xcd\x94\x94\x7c\x2e\x6b\xb4\xab\x52\x5f\x64\x3a\x9a\x51\x6f\x75\x26\x7e\xab\x97\xd5\xd5\x5c\x4e\x61\xf2\xcf\xda\xdb\x1e\x6f\x71\xf1\xec\xaa\x4c\xf2\x74\x3e\x66\xbf\xf5\xe2\x50\x14\xec\x72\x13\xef\x4b\x40\x99\xd2\x4b\x30\x90\x74\x1a\xc1\x51\xbf\xd8\xca\x85\x86\x33\xa8\xe9\xc5\x98\x6e\x70\x4a\xb6\x0d\xf9\x7a\x8f\xd2\xfd\xda\x48\x0a\x33\xf1\x82\xcc\x2c\x42\xa0\xf3\x92\x41\xe2\x2d\x5e\x2c\x2f\x9a\x86\x3d\xcd\xd6\xc9\x9a\x69\x43\x6a\x50\x4f\x16\x6c\xa4\xbc\x05\xbb\x52\x90\xe9\x77\x6a\x54\xb3\x3a\xa1\x2a\x16\x5f\x9f\xc6\xbe\x6e\x6a\x9d\x4e\xb6\xce\x74\x2c\x77\xd5\x18\xd0\x31\x94\x88\x66\x78\x48\x7b\xaa\x39\x66\x0e\x0d\xb6\x42\xeb\x56\x91\x9b\x0d\xba\x13\x91\x8f\xd6\xda\xc8\x2d\x17\x46\xbe\xdd\x5e\xb3\xaa\x08\xa6\x7e\x73\x08\x5c\xb5\x29\x26\xab\x40\xfb\x8c\xb6\x74\x9a\xf6\x3c\xfc\xba\xd5\xa7\xdd\xd6\xb6\x8e\x26\xe6\xd4\xc9\x1a\x0e\x60\x2b\x2c\x82\xfc\x04\x99\x59\x7b\x2d\x4c\x15\x46\x1a\x8e\x1d\x61\x0a\x0a\xf3\x16\x6d\x91\xa3\x6e\xbb\x63\x45\x12\x5e\xca\xee\x9f\x03\xbf\xe2\x5e\x7e\x3d\xe7\xf5\xdd\xb9\xac\x18\x2e\x0a\xe3\x8e\x15\xe5\xb3\x6b\xa1\x5b\x9d\x97\x9b\xf1\xa8\x33\xcb\xf5\xa4\x06\x53\x60\xa3\x35\x5a\x35\xa3\xa9\x3c\x73\xea\x5d\xb4\xd2\xe5\xa8\x1c\x14\x75\x2a\x76\x63\xb3\x67\x3b\xf4\x38\x5e\x2c\x65\xa3\xc0\x64\x72\x7a\xa3\x91\x25\x33\xb8\x52\x11\xe9\x44\xca\xb4\x4b\xf3\xb0\x3a\x27\x0b\x36\x04\xeb\xf6\xd0\x74\x14\x6f\xde\x99\x29\x34\x53\x54\x1a\x02\x3f\x29\xaf\x70\x31\xd7\x34\xd6\x5e\xbe\x39\x3e\xec\x44\x38\xd8\x93\x78\x1a\x5f\x12\x10\x92\xf2\x42\xbb\x85\xbf\x19\x62\x6d\x5d\x1d\x08\x35\xab\x87\x1b\xae\x1c\x76\xf0\x62\x77\x54\x6e\x18\x84\x25\x4a\x79\x9a\x6a\x8c\xd9\x70\xe2\x3b\xca\xbc\x60\x4f\x7b\x8a\xbd\x47\x82\x3f\xb0\x3e\xc8\x17\x73\x79\xa2\x4e\x28\x9d\x39\xdf\xf2\xa4\x11\xd7\x93\x16\x06\xca\x9a\xaa\x60\x38\x11\xb9\xb6\x27\x74\xd5\x5b\xaf\xf8\xec\x9a\x9b\xb5\xfb\x25\x39\xd2\xdc\xb1\x2b\x4c\x9a\x75\x21\x57\x24\x14\xb3\xd1\xf6\x46\x03\x8b\xb3\xe8\x30\x5c\xcc\x07\xab\x2c\x3b\xee\xc5\x45\x09\x39\x20\xa5\xff\xb6\x3d\xeb\x0f\xf9\xdb\xad\xd4\xf3\x95\xcd\xe9\x1f\xcd\xbe\xa6\x36\xa8\x7f\xc6\xc6\x2e\xe2\x15\x7b\x66\xef\xda\x4b\xab\x99\x7f\x79\xc5\x04\x92\xa4\x28\x8e\xc4\x29\x96\x67\x68\x8e\x63\x78\x9c\x4b\x76\xed\x10\x27\x5b\xac\x4e\x7a\xe0\xcb\x75\x79\x78\x07\x58\x52\x97\xc7\xf7\x0a\x7e\xbc\x2e\xd7\x5a\xfa\xda\x1e\xed\x0f\xb7\x75\x7a\x9f\xf6\x1e\x21\x8b\xb5\x58\x8e\x82\x90\xb2\x71\x9b\x21\x69\xde\x26\x10\x69\xf1\x8c\x69\xf1\x3c\x04\xc8\x44\x10\xd8\x80\x86\x88\x23\x48\x9c\x34\x11\x44\xb4\xc0\xe3\x2c\xcb\x59\x04\x4e\x0a\x24\x4f\x12\xbb\xad\x2a\x47\x23\x99\xea\x49\x24\x93\x9c\xac\x84\xab\x78\xb9\xb8\x8a\x86\x0b\x8d\x70\x7b\x38\x58\x4d\x7d\x42\xd0\x4a\xcb\xb9\x9a\x5b\xe9\x4c\x24\xc9\x56\xae\x3d\x5f\x14\x84\x05\x35\x88\x02\xdd\xeb\x9f\xf6\x10\x97\x9e\xab\x5b\x9e\x12\xcf\xcb\x3d\x23\xbf\x97\xcd\x58\x97\x22\xd1\xfb\xf2\xcf\xd7\xea\x2e\xe3\xce\x09\xb8\xc5\xd9\x90\xc1\x49\x1a\x30\x10\x08\x14\x6e\x72\x16\x64\x18\x04\x29\xc2\xb4\x6d\x1a\x42\x1a\x90\x9c\x80\x10\x89\x03\xd2\x22\x6c\x0b\xe7\x05\x24\x70\x0c\xc3\x31\x1c\x45\x93\xf4\x16\x77\xf2\x1c\xf7\x7f\xa8\xde\x9f\x85\x3b\x4f\x1f\xbe\x57\x7e\x01\xee\x3c\x45\xdb\x2c\xce\xb1\x80\xe3\x39\xdc\xa4\x05\x92\xa0\x68\xce\x44\x38\x60\x09\x92\xa7\x79\x0e\x0a\x38\x6e\x03\xd3\x22\x70\x8e\x37\x11\x4d\x51\x36\xcd\x51\x26\x69\x53\x04\x25\xf0\x14\x67\x6f\x71\xa7\x3e\x1d\xf7\x47\xeb\xfd\x59\xb8\x73\xa9\x91\x7d\xf5\x17\xe0\x6e\xdb\x3c\xcf\xd1\xa6\x09\x69\x16\xe1\x24\xb4\x91\x60\xd2\x1c\x00\x36\xa4\x18\x93\x27\x38\x48\xd9\x34\x6d\xda\x1c\x2b\x00\x1c\xda\x36\x6e\xda\x1c\x65\x12\x2c\x62\x4d\x0b\x07\x14\x85\x76\xb8\xd3\x9f\x8e\xfb\xa3\xf5\xfe\x2c\xdc\x99\xc5\xbb\x82\x9e\xc2\x1d\xd0\x38\x07\x09\xc4\x08\x80\xe5\x09\x5a\x10\x20\x67\x12\xc0\xa6\x39\x86\x84\x36\x67\x72\x94\xc0\x50\x16\x4b\x11\x1c\x47\x22\x93\xc6\x2d\xc0\x31\xbc\xc0\x0b\xa6\xc0\xe2\x04\x0f\x59\x61\xb7\x90\x7c\x21\xbe\xa7\xea\x9d\x5b\xc4\x26\xd5\xca\x38\x71\xde\x93\x62\xd6\x2f\x30\x83\x9a\x6a\xad\x7b\x4c\xb3\xd1\x63\x4b\x84\x95\x71\x16\xc5\x19\x90\xfd\xce\xb4\x89\x27\xdf\x97\x5b\xb9\xcc\xae\x52\x83\x6b\xd8\xbe\x8b\x7b\xfe\x39\xf9\xba\xf5\x98\xfc\x7b\x71\xa7\x2c\x13\xb7\x59\x93\x22\x10\x0e\x38\xca\x66\x2d\x0a\x50\x04\x0b\x05\x0a\xb7\x19\x88\x4c\x1a\x0a\x80\x27\x19\x60\x42\x1e\xa7\x08\x1c\x5a\x36\x6e\x31\x3c\x07\x39\x44\x90\x16\xc7\x26\xf1\x9d\x7a\x2f\xbe\xe7\x5c\x7b\xb4\xc4\x57\xd9\x5e\x5b\x20\x02\xad\x53\x88\x15\x07\x09\xc0\x1f\x8d\xc6\xbd\x61\x89\x5a\xf5\x3c\xb5\x2e\x96\xcb\x35\xdd\xd2\x2a\xf5\x5f\x82\xfb\x03\xf2\x9f\xc3\xfd\xea\x18\xe9\x73\x06\x48\xbf\x7a\x74\x54\x54\xf9\x52\x7d\x5e\x1f\x9b\x15\xb2\x24\x52\x9d\xf6\xa8\x11\x54\x26\xa3\x2e\x8e\xdb\x45\x3e\x54\x15\x6e\x82\xcb\x8d\x45\xb9\x93\x15\xbb\x94\xb8\x9f\x27\x26\xcf\x8d\x79\xe2\xf6\x09\xd5\x89\x40\xd4\xfc\x60\xc0\x2c\xcc\x78\x26\xa1\x5e\x7e\x45\x55\x49\xbd\x35\xee\xe8\x43\xa1\x5b\xf3\x43\x69\x36\x19\x56\x0a\xb3\x56\xb4\xdd\x49\xd5\x16\xe7\xe9\x5d\xe0\xd2\x36\x2a\x6d\x1a\x39\x1f\x70\x45\x5c\x10\x66\x8a\xca\x79\x35\x73\xb9\x46\xe4\x32\x37\x28\x17\xcd\x56\xbb\x4f\x07\xf3\xdc\xc0\x58\xad\x33\xeb\xb0\x62\x96\x66\x3d\xbb\x59\x16\xdd\xd9\x2c\x43\xa8\x65\xb1\xa5\x94\x04\xdb\x1c\x19\x23\x53\xd3\xcd\x36\x72\x2b\x0d\x20\xe0\x81\x93\x9d\x92\x8d\x52\x57\x29\x6f\x86\xc4\xcb\xb0\xbf\xa6\x0c\xbe\xd6\x1a\x8f\x96\x74\x38\x34\x57\x0a\x19\xcf\xa3\x80\x35\x90\xd5\x14\x03\x0e\x35\x7b\xd2\xc4\x96\xc4\x69\x25\x77\x18\x79\xdc\xc0\xe0\x60\x19\x47\x3b\x5d\x52\xb4\xdb\xdd\x99\xe2\x3f\x17\xa5\xc5\x4f\xe8\x25\x0a\x46\x47\x9a\x3e\x21\x5f\x14\xff\xb9\x68\x7d\x29\x5a\xfe\xea\xa1\xf0\xe3\x4e\x96\x3b\xd1\xfe\xcc\xe0\x3e\x96\xdc\xb8\xe5\x64\xe2\x2c\x6e\xea\xca\x2a\xaa\x88\x4b\x22\x0b\x65\x37\xe8\xf9\xcd\xb8\x01\x0d\xb3\x11\xb5\xab\xf5\x79\x24\x0b\x03\x11\xd0\x71\x35\x8b\xdc\x41\x55\xed\x86\x70\xd9\x0c\x41\xc0\x35\xfb\x6a\x66\xca\x29\xd9\x4c\x99\xef\x2b\x0b\x67\xde\x5b\x7a\xc5\x91\xde\x75\xa6\x11\x63\xd3\xad\xc4\xc9\x50\x7d\x99\x25\xea\xe5\x4a\x17\x8c\x17\x11\x4f\xb4\x39\xa3\x98\x15\x34\xa2\x52\x66\x38\x27\xe7\x2c\xec\x85\xe2\x4d\x61\x1b\x76\xb5\xd4\x46\xc7\x7f\xde\xc9\x9e\x35\xf2\x27\x9d\x6c\xc6\x65\x8d\x7c\xff\x33\x9d\xec\x3f\xd8\x35\xdf\xe5\x64\x9f\x3c\xef\x79\xdc\xc9\xf2\x27\xda\x9f\x19\x9c\xc3\x84\x54\xaf\xd4\x56\xa5\xc9\x80\xf1\x26\x59\x8a\xcf\x82\xa6\x5e\xef\xf5\x95\x39\xe8\x0c\x4d\x42\x2f\x69\x3e\x41\xb4\x3d\xb5\x0e\xb7\x48\xdf\xe8\xc9\x9a\x8d\x25\x19\x8d\x41\x6d\xe2\x2f\x74\x26\x53\xd4\x69\xc0\xcc\xe4\x3e\x9b\x65\xa5\x85\x39\xf6\xc5\x4a\x46\x13\x44\x48\x2b\x88\x2f\xc6\xac\x4d\x77\x3b\x31\xd7\x18\x2d\xeb\x9c\x6d\xc6\xaa\xda\x61\xc7\xce\xd4\x9f\x2c\xdb\x8a\x5d\x28\xf3\x19\xc3\x99\x33\x7d\x48\xb7\xaa\xf2\xc6\x11\x06\xb8\x30\x80\x33\x54\xca\xe1\xe3\xa1\x56\x9a\x0f\xa6\xc3\x8a\x3c\x14\xc6\x62\x26\x58\xd4\x91\xca\xe4\x6b\xb8\xc5\xa9\x6b\x99\x19\x50\x87\xac\xe3\x3f\xee\x64\x4f\x1b\xf9\xb3\x4e\xb6\x0a\xea\x85\xf2\x67\x3a\xd9\xfd\x19\xf1\x84\xfe\x97\x3b\xd9\x27\x4f\x72\x1f\x77\xb2\xd3\xcc\xcd\xb9\xc1\x65\xab\xab\x3c\x2e\x2c\x47\x0d\xbd\xd5\x5c\x9a\xf5\x3e\xaa\xba\x85\x5a\x7b\x21\xca\xb5\x11\x2c\x1a\xb3\x15\x70\x14\x87\x6f\x67\xdc\xc1\x76\xad\xe8\x46\x4f\x26\x29\x99\x86\x22\x19\xa2\xa0\x4b\x7a\xa9\x16\x89\x53\x03\xf6\x7a\xa4\x28\x49\x0d\xbf\xc1\x30\x2e\x0d\x17\x72\x2f\x5c\x7b\xbc\x0b\xda\x11\x43\x9a\x7d\x0d\x64\x08\xcd\x96\xda\x71\xdf\xb6\xdb\xc6\xaa\x64\x82\xc5\x82\xad\xe3\xd9\xd0\xf6\x49\xdd\x2e\x30\x16\x5e\x5a\x24\xd9\xe0\x2c\x3d\xc4\x63\xa1\x11\x8b\x51\x76\x1a\x95\x66\x73\x9c\x88\x25\xdb\x10\xe4\x39\x05\x40\xde\xe6\x55\x61\x1d\x76\x98\x60\x51\xa9\x66\xfe\x9b\x9c\xec\x59\x23\x7f\xd6\xc9\xa6\x5d\xad\xf8\xcc\x70\x55\x3c\x91\x2f\xe6\xf9\xb5\x52\x33\xa8\xa2\x26\x33\x0d\xb5\x10\x49\x2e\xbd\x6a\xb5\x84\xae\x28\xd6\x33\x1a\xde\xd7\x83\xf2\x4c\x71\xd4\x65\x97\xed\x6c\x3f\xfa\xe5\x4e\xf6\xc9\x19\x8d\xdf\x6b\x77\x4a\x45\xa4\x13\xa7\x98\x8a\x76\x83\xe9\x4f\xfd\x42\xd9\xeb\x86\x40\x28\xb5\x22\x81\xb3\x98\x16\xdf\x5b\xc2\x15\x8b\xe7\x2b\xb0\x37\x29\xc7\x1d\xb1\x47\x4c\x0f\x19\xca\xcb\x0e\xd7\x3b\x6e\xd4\x23\x87\x4b\xbe\xdd\x8e\x02\x52\x66\xfa\xc0\xfc\x75\xe4\x1d\xda\xe2\xca\x73\x25\x83\x7d\xe4\xf0\x9f\x22\xff\x4a\xb0\xb9\x47\x7e\x55\xfc\xdc\x6c\xd6\x43\x59\xfb\xcf\x96\x7f\x8e\xc7\xed\x80\x93\x3f\xd0\x7c\x54\x7e\x6a\x5d\x58\x89\x4d\x8d\x94\x88\xe6\xa2\xef\xeb\x7d\x66\x2e\x64\x6b\xe4\x78\x34\x2e\x16\x9b\x2a\xe9\xfa\x1d\xc1\x18\xae\x81\x06\xdb\xfd\x15\x5e\x4a\xff\x91\xd7\xc1\xe1\x16\xa7\xf8\xdd\x15\x90\x3e\x39\xd5\x57\x69\x67\x6a\x25\x43\x15\x86\x5d\xaa\x13\x12\xbd\x0e\xed\x94\x39\x62\xe6\xe8\x7a\xc3\x91\x6d\xbb\xec\x58\x91\x28\x8e\xc7\x3c\xb3\xc0\xa7\xe2\xc3\x01\xe9\x03\x51\xfd\x62\x40\x92\xf7\xf2\xeb\xe2\x40\x68\x69\xcd\x42\x90\x2d\x94\x17\xbd\x0c\x29\x5a\x32\x35\x27\x57\xd9\x16\x1d\xc0\x90\x62\xe2\x7c\x99\xe7\xe7\x35\x3e\xc3\xba\x9d\xc6\x52\x35\xfa\xfd\xb2\xdd\x1f\x8f\x6b\xf5\x61\xd4\x2c\xe2\xed\x3e\x4d\x97\x74\x4a\x57\xd5\xaa\x4a\x57\xe7\x99\x69\x51\x1d\x0e\xba\xfe\x64\x20\x26\x41\xa3\xa6\xe6\xc9\x70\x49\x57\xac\xac\x99\xf7\x97\x66\xbf\x5a\xeb\xa2\x48\x9b\xf8\x65\x30\xef\x89\xcb\xbc\xc5\x57\x3b\x25\x22\x23\x87\xd0\x79\x6f\x2e\xfb\xf1\x80\xf4\xc0\x5c\xff\x53\x03\xd2\x93\xf2\x3f\x33\x20\x3d\x99\xe6\x7d\x3a\x20\x7d\x86\xfc\x67\x02\xd2\x07\xe5\x3f\xb6\x51\x25\xd5\x14\xef\x06\xa4\x2b\x69\xf0\x1b\x07\x6b\x7d\x34\x17\x7e\x72\xb8\xd6\x5b\xac\x4b\x27\xb3\xb7\x87\x43\x1c\x7c\xe9\x42\xb0\xbc\xce\x65\x1f\xed\xb6\x47\x4a\x9c\x71\xb9\x7a\x19\xc0\xf9\x1d\x29\xfb\x4b\x10\xde\x0e\xe0\x7a\xa7\x9a\xe9\xcb\x5a\x92\x2b\x5a\x52\x1c\x93\xdd\x9d\x62\x3e\x7f\xe1\xd8\xf2\xbd\x40\xac\xd6\x50\xaa\x62\xa3\x87\x55\xe4\x1e\xf6\x6d\x7f\xa2\xe3\xeb\xfe\xba\x80\xab\x87\xf7\x9f\x5c\x1b\xf3\x59\x8a\x87\x37\xb4\x0e\x6f\xa9\x7c\xe9\x30\xf5\xc3\x4d\x39\x4f\xab\x67\x02\xef\x92\x66\x6f\x02\x8e\x95\xda\x9e\xdf\x7a\xfb\xa4\xf5\x9b\x57\x04\x3d\xad\xee\x11\xf3\x4b\x8a\xdf\x90\x8e\xb5\x34\xa5\xde\x92\xb1\xc3\xa1\x6e\x1f\xaa\xc9\xe7\xe0\xfd\xc1\x0a\x9c\xb7\xc1\xe1\xf0\xf9\x2b\x07\xa7\x1f\x5d\x2c\xf5\xb4\xbe\x5b\x66\x97\x14\x4d\x89\x39\xd6\x70\x77\x9c\xf7\xe5\x63\xbc\xd3\xb7\x68\x3d\xad\x5c\xc2\xeb\x92\x6e\x07\x21\xc7\xaa\x39\xd3\xd7\xe4\x70\xef\x9b\xc7\x56\x5f\xb8\x3d\xec\x79\x4d\x53\x2c\x2f\x2a\x7c\x2a\xf2\x52\xa3\x5f\x39\xdb\xfa\xe8\x0e\xb5\xcf\xd0\x34\x8c\xcd\x2b\x3a\xbe\x89\x39\xd6\x2e\x39\x16\xfb\xc6\x41\xd7\x67\x17\xc7\x3d\xad\xe4\x81\xe1\x25\x45\x4f\xc4\xdd\x15\xc3\x52\x7f\xdf\x7f\x7a\x7d\xde\xd3\xda\x1e\x18\x5e\xd2\xf6\x44\xdc\xb1\xb6\x6f\xc7\x45\xdf\x38\x8e\xf9\xec\x1a\xc1\xe7\xf5\xdd\x33\xbc\xa8\xef\xb1\xb8\x63\x7d\xf7\x27\x3a\xdf\x38\xa9\xf9\xec\x3e\xc5\xa7\x15\x3e\x30\xbc\xa4\xf0\x89\xb8\xab\x43\x83\xed\x49\xcd\xaf\x87\x63\x98\x6f\x1e\xc5\x7b\xe1\xbe\xc9\xe7\xeb\x91\x62\x79\xb1\x26\xa7\x22\x2f\x45\x89\x10\xcd\x5e\xdf\xce\x9e\xbd\x7e\x4c\xee\xe9\x3d\x9c\x9f\xa0\xfb\x4d\xc5\x9f\xd2\xfa\x64\x88\x7a\xe9\x76\xd2\xa7\xf5\x3f\x66\x7a\xa9\x12\x17\xc4\x5e\xad\x49\xfa\x08\xdb\x6b\x43\xcd\xfd\xcd\xad\x3b\xdd\x93\x7b\x5e\xef\x3b\x5c\x77\x7b\x25\xec\x09\x1f\x4c\xd7\x0e\xa3\xd8\x56\x53\xd1\x8a\x98\x19\x05\x08\x61\x6f\x27\x69\xff\x81\x75\x4a\x72\x43\xc6\xd2\x27\x6b\x1f\x8e\x22\x3d\x1f\x68\x1e\x5f\x46\xfb\xa8\x96\xc7\x6c\x36\x4a\xee\xc6\x29\x47\x2a\xa6\xaf\x57\x79\x4d\x5f\xa6\xf2\xba\xbd\xe4\xe4\x4c\xbb\xc3\x8d\xba\x8f\x2a\xb6\xe7\xb0\xd1\xe9\xe0\x18\x47\x6a\x5d\x1f\x2a\x1e\xdd\xfd\xfb\x8c\x0a\x6f\x4c\xb6\x5a\xa4\x02\xcc\x9d\x8a\x1c\x5d\x57\xfc\xa8\x22\x69\x26\x1b\x45\x8e\x07\xc2\x77\x6a\x72\x74\xc5\xf2\xa3\x9a\xa4\x99\x6c\x34\x49\x9d\xa2\x74\xbf\x1a\x47\xd7\x42\x3f\xa1\x49\x9a\xcf\x4e\x99\xb7\x51\xc2\xb1\x32\xe9\x2b\x14\x6e\x85\xaf\xe7\x34\x3a\x65\xb4\x51\xe9\x24\x36\xbe\x8b\xd1\xb5\xdb\xd0\x31\xcb\x9f\x4c\x5d\x14\xa1\x44\xec\xff\x04\x00\x00\xff\xff\x15\x48\x69\x0b\x3a\x7d\x00\x00") - -func asset_stat_operationsCoreSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_operationsCoreSql, - "asset_stat_operations-core.sql", - ) -} - -func asset_stat_operationsCoreSql() (*asset, error) { - bytes, err := asset_stat_operationsCoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_operations-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfb, 0xa6, 0x32, 0xd9, 0xbd, 0x47, 0xfe, 0x7a, 0x51, 0x7f, 0x70, 0xfd, 0xd9, 0x48, 0x97, 0xb7, 0x6c, 0xc2, 0xc1, 0x8d, 0xda, 0x1, 0x75, 0x3b, 0xb0, 0xf5, 0x58, 0x7b, 0x65, 0xcf, 0xe, 0x6e}} - return a, nil -} - -var _asset_stat_operationsHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x7d\x67\x8f\xa3\xc8\xf3\xf0\xfb\xfb\x14\x68\x75\xd2\xec\x6a\x66\xd7\xe4\xb0\xfb\xdf\x93\xb0\x8d\xb3\x71\xc0\xf9\x74\xb2\x08\x8d\xcd\x18\x83\x07\x70\x9a\xd3\xef\xbb\x3f\x32\xe0\x84\x49\x0e\xb3\xb7\x8f\x35\x1a\xd9\x50\x5d\xa9\xab\xab\xaa\xab\x1b\xfa\xeb\xd7\x3f\xbe\x7e\x85\x9a\xa6\xed\x4c\x2c\x20\xb4\x6a\x90\x22\x3a\xa2\x24\xda\x00\x52\x96\xf3\xc5\x1f\x5f\xbf\xfe\xb1\xbb\x9f\x5f\xce\x17\x40\x81\x54\xcb\x9c\x1f\x01\x56\xc0\xb2\x35\xd3\x80\x98\x6f\xe4\x37\xe4\x04\x4a\xda\x42\x8b\xc9\x78\xd7\x3c\x00\xf2\x87\xc0\x75\x20\xdb\x11\x1d\x30\x07\x86\x33\x76\xb4\x39\x30\x97\x0e\xf4\x13\x82\x7f\xb8\xb7\x74\x53\x9e\x5d\x5e\x95\x75\x6d\x07\x0d\x0c\xd9\x54\x34\x63\x02\xfd\x84\x9e\xba\x9d\x02\xfd\xf4\x63\x8f\xce\x50\x44\x4b\x19\xcb\xa6\xa1\x9a\xd6\x5c\x33\x26\x63\xdb\xb1\x34\x63\x62\x43\x3f\x21\xd3\xf0\x71\x4c\x81\x3c\x1b\xab\x4b\x43\x76\x34\xd3\x18\x4b\xa6\xa2\x81\xdd\x7d\x55\xd4\x6d\x70\x46\x66\xae\x19\xe3\x39\xb0\x6d\x71\xe2\x02\xac\x45\xcb\xd0\x8c\xc9\x0f\x9f\x77\x20\x5a\xf2\x74\xbc\x10\x9d\x29\xf4\x13\x5a\x2c\x25\x5d\x93\x5f\x76\xc2\xca\xa2\x23\xea\xe6\x0e\x8c\xad\x75\xb8\x36\xd4\x61\xb3\x35\x0e\x2a\x17\x20\x6e\x50\x16\x3a\x02\xd4\xe0\x6b\x43\x1f\xfe\xdb\x54\xb3\x1d\xd3\xda\x8e\x1d\x4b\x54\x80\x0d\xe5\xdb\x8d\x26\x94\x6b\xf0\x42\xa7\xcd\x96\xf9\xce\x49\xa3\x73\xc0\xb1\x6c\x2e\x0d\x07\x58\x63\xd1\xb6\x81\x33\xd6\x94\xb1\x3a\x03\xdb\x1f\xbf\x82\xa0\xec\x7e\xfb\x15\x24\x77\x76\xf5\xeb\x04\xf4\xa8\x5d\x2f\x9d\xc7\xe0\xce\x90\xe3\x88\x9d\x40\x1d\x91\xbb\xe0\x65\x3e\xcf\x0d\x4e\x20\x7d\xb4\x2e\x57\x63\xa0\xaa\x40\x76\xec\xb1\xb4\x1d\x9b\x96\x02\xac\xb1\x64\x9a\xb3\xf8\x86\x9a\xa1\x80\xcd\xf8\x44\x38\xc3\x16\x5d\x43\xb7\xc7\xa6\x31\xd6\x94\x6b\x5a\x9b\x0b\x60\x89\x87\xb6\xce\x76\x01\xee\x68\x7d\xe4\xe4\x2e\x2e\xae\x6b\xab\x03\x65\x02\x2c\xb7\xa1\x0d\xde\x96\xc0\x90\xaf\x12\xe1\xa4\xf9\xc2\x02\x2b\xcd\x5c\xda\xfe\xb5\xf1\x54\xb4\xa7\x37\xa2\xba\x1f\x83\x36\x5f\x98\xd6\x6e\x38\xfa\x3e\xf5\x56\x34\xb7\xea\x52\xd6\x4d\x1b\x28\x63\xd1\xb9\xa6\xfd\xde\x98\x6f\x30\x25\x7f\x5c\xde\xc0\xf4\x69\x4b\x51\x51\x2c\x60\xdb\xf1\xcd\xa7\x8e\xa5\xb8\x71\x67\xac\x9b\xe6\x6c\xb9\x48\x01\xbd\x48\x62\xc9\x83\x12\x35\xeb\x4a\xc4\x7b\xa7\x9b\xba\xc1\xce\x4f\xa8\x2a\xb0\xd2\x81\xee\xd1\xdf\xd0\xc4\x57\x6b\xba\x46\xae\x6b\xbd\x82\xc8\xa9\x2b\x4e\x6a\xb1\xd8\x35\x98\x3a\x89\x3d\x60\x9f\x39\x20\x69\x9b\x68\x46\xd3\xc3\x48\x4f\x03\x6c\x7a\x7c\x98\x89\x80\x9a\xed\x8c\x9d\xcd\x78\x91\x8c\x72\x07\x69\x2e\xd2\x42\x82\xb4\x60\xfb\x50\x12\x0f\x2c\xed\x87\x7b\x22\x58\xb2\x17\x93\xb6\xe9\x3a\xd3\x8b\x91\x3b\x6d\xdb\xf6\x32\x89\xf2\x01\x58\x36\x15\x70\x65\x5e\x70\x30\x83\x85\x68\x39\x9a\xac\x2d\x44\x23\x36\x78\x27\x35\x1d\x2f\xae\xcc\x4d\x0e\x11\xed\x5a\x0e\xc2\x1b\x5e\x4d\xdf\x55\x5e\x1a\x7a\x1e\xe0\x87\xe3\xf7\x3a\x73\xd7\x93\xfe\xd7\x5d\x7c\xd8\xa7\x7e\xae\x31\x8c\x53\x72\x30\x31\xad\xc5\x78\xae\x4d\xfc\x84\x21\x86\x85\x00\x64\x6a\x19\xaf\xcf\xf7\xe2\x30\xa7\x35\x4e\xaf\x75\xae\x51\xeb\xd6\x79\x48\x53\x3c\xca\x79\xae\xc0\x76\x6b\x9d\x94\xb8\x23\x8c\xee\x01\x98\xfd\xee\x8e\xc7\xe4\xfe\x4a\x2f\xfe\x3e\x4a\x0b\x5c\xab\xcb\xf1\xb9\x1b\x74\xb6\xcb\xb3\x6d\xf0\x76\x35\xe5\x33\x24\xa9\x5b\x2b\x20\x25\xec\x31\x9b\x4d\x2d\x61\xc4\xa8\xbf\x46\xbe\x70\x14\xe9\xda\xfa\x79\x5f\x3a\x60\x3f\xc9\x4b\x2d\x9b\xef\x01\xae\x91\xc5\x6b\x92\x12\xd6\x4f\xff\xd2\xf3\xb3\xcf\x17\xd3\x70\x14\xf0\x21\xf1\xc0\x27\x2e\xc1\x07\x64\x8b\xc5\x36\x57\x64\x3b\x21\xc0\x73\x6d\x37\xe3\xd0\x64\xf0\xd9\x58\xce\x81\xa5\xc9\x7f\xff\xf3\x25\x45\x2b\x71\x73\x43\x2b\x5d\xb4\x9d\xcf\xa2\xb1\x05\xba\x5b\x8a\x49\xd1\x42\xd5\xac\xd0\x26\x85\x2e\x9f\xeb\x94\x1b\x7c\x8c\x3c\x63\x71\x32\x39\x72\xf7\x02\x5d\x30\x1a\x83\x63\x2f\xdd\x1d\x38\x76\xb2\xba\xcd\x8f\xcc\xbf\x40\xd7\x08\xe2\x8a\x9e\x02\x03\x37\xe8\x70\xbc\x10\x40\xa1\x2f\x26\xf6\x9b\xbe\xb7\xc5\x5c\x89\xab\xb3\x17\x14\x7e\xfc\xe1\x55\xe1\x78\x71\x0e\xbe\xef\xaf\x41\x9d\xed\x02\x7c\xf7\x9b\xfc\x80\x04\x79\x0a\xe6\xe2\x77\xe8\xeb\x0f\xa8\xb1\x36\x80\xf5\x1d\xfa\xea\x16\xe7\x72\x6d\x6e\xd7\x5f\x3e\xe6\x3d\xbe\x3f\xce\x30\x9e\xdf\xf4\x11\xe7\x1a\xf5\x3a\xc7\x77\x62\x30\x7b\x00\x50\x83\x3f\x47\x00\x95\x05\xe8\x69\x5f\x76\xdb\x5f\xb3\x5d\x24\x4f\x41\xca\x7b\xf1\x7d\x9a\x07\x0d\x25\xca\x73\xa6\x4b\xbe\xd1\x09\xe8\x13\xea\x97\x3b\xa5\x03\x5b\xa7\xf5\xb7\x33\xf2\x47\x2c\x01\x46\xae\x11\xfe\x02\x89\xab\x80\x66\x2d\xb3\x98\x08\xad\x1a\xb4\xb0\x4c\x19\x28\x4b\x4b\xd4\x21\x5d\x34\x26\x4b\x71\x02\x5c\x35\xa4\xac\x17\x9e\xb2\x9b\x6c\x68\x3e\xfb\x7b\x5b\x3d\xf2\xbf\xef\xdb\x30\x5d\x1e\x2c\x3b\x11\x3f\xd4\xe6\x3a\xdd\x36\x2f\x9c\x5c\xfb\x03\x82\x20\xa8\xc6\xf2\xc5\x2e\x5b\xe4\x20\x57\xfa\x7a\xbd\xeb\xf9\x3b\xa1\xd3\x2e\xe7\x3a\x2e\x04\x2b\x40\x7f\x8e\xff\x84\x04\xae\xc6\xe5\x3a\xd0\x9f\xc8\xee\x57\xb0\x37\x12\x07\xe2\x7d\xd2\x25\xa1\x7f\x98\x70\x68\x98\x70\x69\x3c\xd5\x7d\xf2\xa5\xa0\x70\x10\xf1\x70\xe9\x26\x09\x3f\xff\x01\x41\x39\x56\xe0\xa0\x7e\x89\xe3\xa1\x3f\x91\xbf\x91\x7f\x32\x7f\x22\x7f\xa3\xff\xfc\xf5\x27\xea\x7e\x47\xff\x46\xff\x81\x3a\xde\x4d\x88\xab\x09\xdc\x4e\x29\x1c\x9f\xff\x12\xaa\x99\x14\x71\xe0\x4e\xcd\x24\x53\xf8\x68\xcd\xfc\xdf\x2d\x9a\xb9\x8c\xa9\xbe\x1e\x0e\x71\x38\x9d\x22\x8e\x61\xfb\x02\xa3\xcb\x31\x04\x09\x3b\x5d\x41\x3f\x8f\x1e\xe0\xc5\xbb\xdc\x19\x36\x39\xe8\xe7\xe9\x88\xf8\x12\x36\x6a\x1f\xca\x63\x10\x61\x80\xc5\xfd\x30\x4e\xcf\x61\x68\x0a\x74\x2f\x97\x61\x48\x03\x9c\x9e\x0d\xc8\x73\x76\x8f\x56\x76\xc9\x6d\x58\x9a\x77\x37\xb7\x21\x48\x83\xdc\x9e\x0e\x92\x58\x6e\x77\x91\x4b\x01\xaa\xb8\xd4\x9d\xb1\x23\x4a\x3a\xb0\x17\xa2\x0c\xa0\x9f\xd0\xd3\xd3\x8f\xf3\xbb\x6b\xcd\x99\x8e\x4d\x4d\x39\x59\x4a\x3b\x93\xf5\x34\xff\xf5\x45\x74\x07\x58\x3a\xf1\xbc\xb1\x78\x3a\xf9\xf6\x24\xd2\x14\x48\xd2\x26\x9a\xe1\xb8\x89\x01\xdf\xad\xd5\x3c\x71\xc4\xf9\x2e\x8d\x87\xe4\xa9\x68\x89\xb2\x03\x2c\x68\x25\x5a\x5b\xcd\x98\x04\xc0\x8c\xe5\xfc\x90\xf2\x43\x9a\xe1\x80\x09\xb0\x02\x20\xaa\x2e\x4e\x6c\xc8\x9e\x8b\xba\x7e\x49\xc6\x31\xe7\xfa\x25\x91\xcf\x28\x41\x7c\x39\x40\x5e\x76\x7b\x70\xde\x70\xab\x3a\x82\xd5\x8e\x83\x4a\x1c\xb0\xb9\x50\xc8\x62\xa1\x6b\x6e\xcd\x1e\x72\xb4\x39\xb0\x1d\x71\xbe\x80\x76\x7d\xe6\xfe\x84\xde\x4d\x03\x5c\x32\x1a\x35\x2b\xda\xe7\xa3\xfe\x74\x2a\x1d\xcf\x87\xc9\x57\x04\x56\xdf\x0c\xd9\x76\xc7\xcb\xe8\x10\xf7\x42\x99\xcf\xb5\x39\x37\xfd\xca\x0e\xfd\x4b\x7c\x03\xaa\x97\xf9\x1e\x5b\xeb\x72\x87\xdf\xec\xe0\xf8\x3b\xc7\xe6\x4a\x1c\x84\x24\x09\x73\xb3\xda\x83\x88\x2e\x4c\xd1\x2f\x7a\x40\x06\xd8\x38\x2b\x51\xff\xfc\x14\x21\xf1\xd3\xf7\xef\x16\x98\xc8\xba\x68\xdb\x5f\x82\xdd\xe5\xad\x55\x84\xd8\x16\x89\x7f\x89\xe9\x28\x6f\x6e\x7c\xb7\x64\x5e\x45\xe7\x20\x57\xf8\xc8\x38\xd6\xea\xc2\xd9\x0c\x05\x97\x4d\x25\x0c\x1c\x41\xc3\xc1\xbd\xf2\x5f\x48\x03\x82\x8c\x1b\x61\xe1\xe5\x85\x07\x99\xed\x29\xce\x5f\x66\xb4\x71\x82\x40\x8d\x3e\xcf\xe5\xa1\xec\x30\x41\x22\xaf\x42\x17\x2f\xd0\x01\x57\xe0\xf6\x37\x4d\x89\xe2\x6d\x5f\xf3\xb9\xd7\xea\x7c\x3c\xbe\xd9\x05\xc6\xcc\x38\xca\xd3\x5f\x96\xb8\xa2\x20\x3f\xb9\x0b\x1f\x9f\x22\xac\xd9\xb5\xe3\xf0\x5b\x0a\x70\x44\x4d\xb7\xa1\x57\xdb\x34\xa4\x68\x63\xdb\x17\xca\xee\xd5\x83\x8f\xc7\xd7\xc3\x7e\xdd\x3a\x82\xb7\x93\xc5\xe4\x54\xa3\x30\x6c\x1d\x3b\xbc\xa1\xaf\x96\x93\xca\xa8\xdb\x11\x07\x3e\xf6\x5e\x0e\x0e\x50\x38\x76\x44\x3a\xf8\xc3\x62\x72\x20\x30\x99\x4b\xe7\x18\x9b\x82\x6d\x2c\x20\x3a\x89\x8d\x3c\xd8\xe5\x42\x49\x0d\x7b\x30\x1d\xff\x67\x60\x9d\xfd\x42\x16\xe4\x22\x1f\x70\x44\x7d\x2c\x9b\x9a\x61\x87\xdb\xa0\x0a\xc0\x78\x61\x9a\x7a\xf8\x5d\x77\xe5\x53\x05\x51\x7d\xed\xde\xb6\x80\x0d\xac\x55\x14\xc8\x2e\x0f\x75\x36\x63\x37\x4d\xd2\xde\xa3\xa0\x16\x96\xe9\x98\xb2\xa9\x47\xca\x15\xec\xa3\xbd\xb1\x00\x51\x01\x96\x9b\x5e\x78\xd7\xed\xa5\x2c\x03\xdb\x56\x97\xfa\x38\xd2\x50\x7c\xc1\x45\x4d\x07\x4a\x34\x54\xf4\xb0\x8a\xa8\x5d\xdf\x3b\xca\x22\xd6\x43\x12\x62\x5e\x7a\x6f\x93\xec\xbf\xae\x15\xf9\xb1\x61\x2c\x96\xc6\xaf\x0a\x6b\x57\x09\x7a\x67\x98\x8b\xa5\x75\x19\xf6\xc2\xc1\x63\xc2\xe0\xc9\xca\xce\xc3\x6c\x33\x69\x9a\x73\xbe\xab\x2a\x62\x2a\xb4\xcb\xfc\x65\x4f\x14\x37\x02\xde\x19\x00\xfd\x91\x6f\x2e\x2d\xf9\xb0\x4d\x23\x22\xf4\xec\xdd\xc9\xd3\xd3\xf7\xef\xd1\x53\xb1\xe8\x71\xe0\x2f\xac\xdd\xab\x4e\x7f\x2f\xe0\xe7\x87\xe6\x0b\xbe\x4b\xbc\x25\x7a\xb9\x7b\x61\x22\xc9\x06\x76\x22\xc6\x01\xf9\x9b\x23\xe3\x40\xbc\x79\x70\x28\xc0\xe5\x9e\xce\x04\xb8\x58\x72\x07\xa8\x18\x8a\x2e\x4b\x9a\x3d\xb6\x81\xae\x03\x0b\x92\x4c\x53\x07\xa2\xb1\x8f\x49\x9a\x0c\xc6\xc6\x59\xfc\xf5\xae\x9d\xc7\xe4\xe3\x6e\xa2\x71\x20\x5a\x9f\xed\x67\x0a\xde\x3c\x59\xa6\x0f\xdd\xf9\xe9\x72\x3d\x76\xf7\x06\x43\xb9\x12\x97\xab\x42\x9f\x3f\x9f\x6a\xf0\x2f\x08\xfe\xf2\x25\x09\x55\x58\xf3\xbd\xd2\xfe\xef\x42\x8f\x29\xf0\x9d\xe9\x34\x80\x3e\xa0\x70\x97\xc1\xd8\xa1\x14\xbe\xc2\xfd\x80\xc1\x15\xbe\x67\x21\x65\x24\x4d\xe3\xc2\xee\x89\xa5\x49\xfb\x03\x1e\x13\x4d\x13\xa8\xfc\xaa\x78\x7a\xa5\xb0\x77\x46\xd4\x04\x6a\x97\x31\x35\xaa\x41\x4c\x54\x3d\xdb\x13\xf2\x40\x5b\xdd\xdb\xe7\x29\x4b\xa9\x27\x51\xbe\xef\x4f\x98\x9a\xa5\x0d\xbc\xf1\x31\x34\x14\xf6\x48\x3a\x74\xbc\xec\x66\x01\xd1\xd3\x88\xa8\x09\xda\x7f\x32\xc5\x72\x36\x63\x60\xac\x80\x6e\x2e\x40\x58\xd9\xd2\xd9\xec\x26\x3c\x4b\xdd\x89\xb8\x39\x07\x8e\x18\x71\x6b\x37\xd5\x8a\xba\x6d\x6b\x13\x43\x74\x96\x16\x08\xab\xb0\x31\xe4\x97\xbf\xff\x39\xe6\x2e\xff\xfe\x2f\x2c\x7b\xf9\xfb\x9f\xa0\xce\xc1\xdc\x8c\x28\x86\x1d\x71\x19\xa6\x01\x62\x73\xa1\x23\xae\x4b\x34\xbe\x64\xda\x1c\x8c\x25\x73\x69\x28\x6e\xc5\x9a\xb6\x44\x63\x02\x82\xb3\xb1\xf3\xd0\xba\xd3\xc4\x0e\xdb\x04\x28\xc9\xd3\x2d\xbf\xf6\xa7\x29\xfb\xd1\xb6\xdf\xc2\x95\xc6\x45\x78\xc3\xcd\xdd\x2f\x97\xb0\x3b\x4c\xe0\x3a\x31\x75\xd2\xd3\x8a\xd4\x69\x95\xf4\xba\x79\xc4\xe3\x84\x48\xb9\x79\x2e\x56\xa8\xd8\xf9\x47\x1a\x21\x23\x23\xed\xc3\xc4\x4c\xbd\xff\x30\x56\xd0\x84\xb0\x10\x2e\x6a\x5e\x74\x44\x48\x35\xad\x84\xd5\x22\x28\xcf\x76\xd8\x04\xf1\xca\xbc\xc0\xb5\x3b\x50\x99\xef\x34\xce\x56\x8c\xdc\x28\x2a\x40\x9f\x91\x17\xe8\x09\x7e\x7a\x81\x90\x17\x08\x7e\x81\x9e\x9e\xbe\xfc\x48\x6c\x82\x5e\x36\x89\x60\x3c\x6e\x6d\xe7\x5a\xe6\x83\xeb\x3b\x7b\x6e\x9e\x90\xb1\x66\x68\x8e\x26\xea\x63\x6f\xaf\xcd\x37\xfb\x4d\x7f\x7a\x81\x9e\x50\x18\x61\xbe\xc2\xe4\x57\x18\x83\x10\xfa\x3b\x4a\x7f\xc7\xa9\x6f\x30\x86\xe2\x0c\xf9\x0c\xa3\x41\x39\x23\xb1\xa3\x63\xef\x19\x8a\xb3\xbe\x93\xb6\x63\xc7\xd4\x94\x78\x4a\x0c\x49\x50\xd7\x50\xc2\xc6\x4b\x1b\x1c\x62\xd9\x58\x33\x2e\x9e\xdb\x88\xa5\x87\xe3\x30\x4e\x5f\x43\x0f\x1f\x8b\x8a\x32\x0e\x56\xbf\x62\x69\x10\x38\x81\xa1\xd7\xd0\x20\xc6\x5e\xe4\xdc\xe7\xf0\xee\xaa\x69\x2c\x09\x12\x83\xd1\xab\xc4\x20\xf7\x24\x7c\x3f\x99\x82\x04\x8d\x23\xc4\x35\x24\xa8\xf1\xdc\x54\x34\x75\x9b\x5e\x0a\x1a\x21\xd1\xab\x48\xd0\x67\x52\xf8\x9b\xa5\x53\xd0\xa1\x70\x12\xbb\x8e\xce\xae\xd3\xc5\xc9\xc4\x02\x13\xd1\x31\xad\x78\x9b\x62\x60\x04\x66\xae\x41\xcf\xb8\xe8\xbd\xca\xe8\x78\xa3\x58\xf1\xd8\x51\x0a\xb9\xaa\xab\x11\xd8\x45\xef\xf7\x82\x3b\x1f\x8e\x27\x40\x30\xd4\x55\xda\x41\x90\x53\x02\x87\x09\xd6\xce\x01\xc4\x13\x62\x48\xe6\x3a\x49\xd0\xb3\x8e\xf6\xa7\xb4\xde\xe3\xb9\x71\x94\x10\x98\x22\xf0\xab\x7a\x04\xc1\x3c\x71\x0e\x85\x80\xd8\x1e\x47\x10\x94\x22\xaf\x93\x04\x1f\xab\xda\x66\xff\xa8\x82\x39\xd7\xc7\xaa\x06\xf4\x58\xd7\x88\x20\x04\x82\x5c\xe5\x84\x11\x62\xbf\x42\xb3\xaf\x9c\x6f\x12\xc4\x20\xa9\xeb\xdc\x3c\x42\x8e\x35\x63\x02\x6c\x67\x7c\x59\x9b\x4f\x20\x45\x31\xf4\x75\x3d\x42\x9d\x25\x05\xee\x22\x88\x18\x1f\x4c\x10\x14\x86\x31\xdc\x27\x12\x11\x6b\x63\x57\xf4\xaf\x0d\xb6\x17\xab\xfa\xa7\xe9\x42\x31\x37\xac\x75\x9a\x8d\x2e\x55\xee\x0d\x4b\x25\x16\x1b\x54\x5b\x05\x7c\x98\xc5\xfb\xf8\xa8\x5f\x2a\x70\xed\x7a\xa3\x45\x55\x71\xaa\xdc\x67\xf9\x2a\x9f\x2d\x64\xf9\x4a\x85\xe7\x1a\x45\x22\xa8\xa1\x48\x22\xa8\x4b\x44\x18\xe0\xcd\x7c\x77\xd4\xc4\xb2\x35\x02\x45\x47\xbd\x7a\x61\x90\xe3\x2a\x04\xc1\x57\xb9\x46\x89\xab\x97\xcb\x54\x53\xa8\x57\x46\x3c\xcb\x72\x42\x05\xc7\xf1\xa2\x20\x54\xea\x8d\xd4\x44\x30\x97\x48\x61\xd4\xe7\x31\xb6\xd1\x2b\xb4\xea\x68\x76\xd4\x19\x0d\xa8\x26\x4e\xf5\x85\x32\xde\xaa\x17\x2b\x39\x12\xad\x95\x6b\xcd\x6a\x23\xdf\xe1\xf3\xb5\x5e\x75\x34\xe2\x59\x22\xdb\xaa\x60\xa9\x89\xe0\x3b\x22\x6c\x96\x2a\xd6\x5b\xcd\x0a\x31\x1c\xa2\x1c\xde\xad\xd4\x6b\x3c\x3b\x6a\xe6\xb9\x6e\xb5\x59\xc5\x59\xb6\xdc\x6c\x0f\xca\xa3\x52\x75\x54\xec\x96\xdb\x39\xb2\xd0\x44\x6b\x6c\x4b\xc8\xf3\xa9\x89\x10\x3b\x22\xd9\x76\x73\x58\x2a\xd7\xd0\x5c\x19\x2b\xf0\x2d\x3c\x3b\xa8\x15\xea\x7c\xbe\x56\xa8\x74\xf9\x66\x17\x2d\x0d\xb1\x51\xbd\x20\x94\x1a\x7c\x37\xc7\x35\x58\xa1\x4f\xb5\x72\x54\x63\x80\x96\x9e\x6e\xdd\xe6\xb2\xcb\x7a\x13\x0c\xca\xdf\x1a\x78\xdc\xd5\xfb\xcd\x06\xf1\x5b\x40\x5e\x20\xe2\x05\x72\xac\x25\x48\x61\xe6\x97\x9b\x3b\x6e\x36\x72\x6f\x52\x76\x6a\xe2\xb2\x05\x14\xcd\x19\x8b\xfa\x62\x2a\x1a\xcb\x39\xbe\x1b\x98\x5d\x21\xff\xf4\x11\xdd\x79\x4e\x1d\x4d\xa0\x7e\x87\xc5\xde\xb2\x99\xe2\x21\xbd\x7c\x36\x81\x7d\x81\xd0\xb4\x7d\x1c\xb6\x97\xe2\xd6\x4e\xde\xef\xa7\x38\xe9\x65\x04\xa5\x69\x9c\x81\x09\x86\x26\xdc\xc9\x0c\xba\x9b\xcd\xfc\xfb\x49\xd7\xe6\x9a\xf3\xe9\x3b\xf4\x89\x41\x51\x0c\xa3\x50\x18\x23\x69\xe2\x1b\x4e\x51\x04\x0d\x53\x9f\x5e\xa0\x4f\xc7\xbd\x3b\x3b\xa8\xae\x90\x3f\x5e\x74\xb6\x0b\xf7\x62\xb0\x07\x8f\x10\xde\x1e\x9e\x1d\xcc\xad\x5d\xf9\xe9\x7f\x51\xa6\x14\x94\x11\xdd\xcb\x88\xc0\x30\x8d\xfc\x27\x32\xde\x38\x58\xd2\xcb\x88\xbc\x40\x34\x41\x33\x0c\x46\x93\x34\x73\x98\x93\xfe\xfb\xc9\x76\x76\x13\x36\x63\x32\x96\x44\x5d\x34\x64\x97\x63\x04\x86\xe1\x6f\xb0\xf7\x49\x4f\x81\x38\xa7\x80\xbe\x40\x98\x4b\xc1\x4b\xda\x2e\xf0\x5e\xe8\xc9\x10\x1d\x6d\x05\x6e\x96\x08\x7b\x81\x10\x4f\xa4\x35\xd0\x26\xd3\x1d\x41\xe4\x05\xfa\xe4\x19\xfe\x78\x06\xb6\x9e\x2d\xdd\x16\x92\xaf\xb2\x25\x97\x2b\x1c\xa5\xfc\xe1\xf2\x51\x7a\xf6\x29\x7c\xb8\x9e\x03\x12\xa5\xd4\xf3\x6d\x59\x49\x7a\xae\xb0\x3d\x57\x24\xed\x0f\xd9\x0f\xd3\xb3\x47\xe1\xc3\xf5\x1c\x90\x28\xa5\x9e\x3f\xda\x37\xe2\x3e\x57\x04\xcc\x50\xd4\x87\xea\xd9\xa7\xf0\xe1\x7a\x0e\x48\x94\x4e\xcf\x77\xf9\xe7\x84\xf0\x1d\xb6\x05\xf0\xd6\xf0\xbd\xdf\x06\x78\x9a\xbd\x23\xb4\x2c\x49\x18\x25\x4a\x18\x85\x28\xb2\xc4\xc0\xb0\x4c\xe3\xa4\x88\xa8\x0a\x0d\xc3\xb0\x8c\x8a\x30\x23\x93\x34\x10\x51\x4c\x12\x71\x8c\x26\x68\x19\x56\x00\x50\x60\x42\x51\x51\x85\x91\x95\x5d\x3e\x05\x2b\x32\x45\x50\x30\x29\xa9\x0c\x43\xd0\xaa\xa2\xa0\x18\x4a\x2a\xb2\x48\x61\x32\x8e\x32\x92\x48\x63\x8c\x84\x11\x24\x21\xa9\x38\xc6\x10\x8c\xcc\x50\x28\x4e\xc2\x00\x05\x14\x8e\x28\x04\x2a\x79\xe9\x0c\x1a\x98\xb7\x91\xdf\x31\xfc\x3b\x4a\x07\xa7\x73\xee\x65\x0c\xfe\x46\xd1\x24\x03\x63\x89\x77\xfd\xfc\x04\xa1\x69\xfa\x05\x42\xc8\x5d\x7f\x5e\x7c\x5e\x20\x72\xf7\x0f\xf1\xff\xed\x2f\x22\x87\x2f\xbb\x6c\x96\x65\x59\x36\xb7\xc6\x4a\xbd\xb5\x98\x99\xf7\x5e\x19\xf8\xb5\xe2\x6c\x8d\x26\x57\x95\xde\xf2\xf3\xf7\x9e\xbe\x82\x1b\x3d\xa3\x22\xcf\x86\x8d\x9a\xd1\x52\xba\x16\xa7\xb2\xc3\x52\x5f\x65\x0d\x1a\x37\x5e\xa7\x23\x53\x2c\x17\x46\x7a\x19\xa9\xda\xfc\xb2\x9d\x57\x65\xc0\xa8\xe4\xaa\x27\x91\xf8\xa0\x02\xef\x50\xb3\x83\x66\xaf\x5e\x60\x8f\x9f\xa9\x90\x27\xc9\xda\xf4\x5d\xa2\x46\xbc\x69\x75\xb7\xef\x9d\xd6\x5b\x16\x41\x0c\x05\xb6\xad\x7a\xa9\xb9\xa2\x67\xa2\xd6\xaa\x75\x88\xa9\x36\xd1\x07\xa3\x51\x56\x40\xa5\x25\xbb\x79\xee\x5b\x5c\xb5\x09\x1b\xd8\x33\xa9\x73\x18\x69\xb5\xeb\x28\x98\xe2\x45\x16\x95\xac\xe2\x5a\xec\xad\x77\x98\xeb\x3c\x5e\x13\xdf\x17\x68\xeb\x84\x5a\x65\xc8\x86\x7c\x46\xec\x00\xc1\x5b\x2c\x9b\x87\x2b\x61\xb7\x7f\xeb\x8f\x67\x54\x70\xc4\xb8\x0f\x0e\x05\xf4\x31\x66\xfc\x44\x62\x0a\x43\xab\x04\x46\x02\x40\xd2\x0a\x22\xa1\x94\x44\x48\x34\xa3\xa2\x98\xa8\x12\x18\x82\x48\x14\x41\x32\x22\x8a\xab\xa2\x8a\xe0\x30\x26\x2a\xb0\x44\xa0\x12\x89\x61\x12\x4c\x49\x80\x61\x9e\x5e\x20\xdc\xfd\x0b\x19\x0a\x54\x94\xb1\xd3\x30\x8e\x33\x91\x43\xe1\x70\xd7\x4b\x88\x70\x82\x41\x63\x46\x02\x9e\x72\x24\xa0\xcd\xd1\x2b\xc2\x2f\x09\x13\x96\x2a\x54\x1f\x37\xb6\x8d\x55\x77\x53\xc4\x7a\x0b\x73\xf6\xbc\x2a\xb0\x0d\x27\x87\x54\xd1\x3a\x95\xa5\xc8\x11\xab\xe3\x9b\x9e\x4d\x2d\x32\x4a\xa9\xa7\x35\x5f\x67\x2b\x0d\x7d\x5d\x77\x28\x84\x65\xc8\x6a\x6f\x93\x2d\x74\xb4\x9e\x3a\x13\x9b\xd5\x66\xb3\xee\xf6\xdc\x6e\x24\x70\xae\xa5\x96\x0f\xff\x58\xd7\x58\xed\xe3\xef\x35\xdb\x6c\xcd\xbc\x9e\xd6\xf0\x2e\x40\xe1\x15\x6f\xc2\xf2\x9c\xdf\xce\xb2\x35\xb3\x80\xcc\xc9\x6d\x93\x5b\x75\x94\x15\x56\x57\x73\x6f\xcb\xfe\x60\x2d\x53\xfc\x62\x53\x15\xc8\x77\x2c\xbf\x9c\xce\xfa\x25\xa0\xd6\x32\x1d\xbd\xc3\x4c\x37\x39\xbd\x05\xaf\xd6\xc8\xb0\x5e\x22\xcb\x18\xcd\x15\xd0\x56\x83\x2b\xba\xf4\xca\x21\x23\xa5\xd8\x0a\xb3\xb6\xff\xcf\x47\x0a\x9e\x7e\xa4\x20\x8f\xb1\x72\x77\x69\x7a\x97\x2e\xec\xc2\x2b\xc2\x50\xf0\x57\x18\xf9\x0a\x23\x10\x0c\x7f\x77\xff\x22\xad\x19\xa1\x70\x8c\x89\xbb\xbb\x9b\xe9\xe3\x28\x83\x33\x24\x85\x32\x64\x8c\xa9\x87\x1b\xba\xc7\xd1\x7f\xdd\x27\xd1\x9f\xec\xa0\xaa\xe1\xdb\xcc\x56\xa8\x66\xa9\xbc\x91\x67\x4a\x28\xbc\x79\xcd\x3e\xdb\xf0\xc4\xb1\xd7\xe5\xf5\x3b\x32\x50\x84\xfe\x50\xcc\x56\xc4\xc2\x64\x07\xcf\x85\xd8\x70\xf8\x67\x6f\xc3\x2c\x9b\x9d\xfd\x02\x41\x1e\xfa\x79\xf2\x6c\x29\x39\x9f\x4a\xb1\xf7\xfb\xd6\xf4\x2a\x62\x49\x3f\xb2\x58\x12\x31\xe0\x12\xd0\x04\xeb\x11\xe8\x6d\x68\xb0\xf3\x09\x32\x71\x1b\x16\x3c\x50\x38\xb8\x0d\x4b\x60\xd2\x7a\x23\x2f\x64\x60\xea\x7b\x1b\x16\xea\x7c\xa2\x75\x23\x2f\x74\x60\xba\x76\x1b\x16\xe6\x7c\x32\x72\x23\x2f\xbb\x09\xcc\x29\x1a\xfc\x31\x0f\x09\x3c\xa4\xaa\x19\xbf\x83\xc5\x9b\x7c\xa5\x2b\x73\x46\xec\x95\xbf\x7b\x2c\x9f\xe8\xf1\x6c\xf0\x1e\x7e\xe0\xee\xbc\x97\x4c\x57\x11\x74\xac\xa5\xed\x00\x70\xd7\xec\x7c\x8f\xc6\xb4\xee\x2a\x5a\xfd\x16\x35\xd8\x0f\x58\x08\x8b\xec\xb9\x7d\xfd\xf6\xf0\x03\xbe\xb5\xe7\x6e\x9d\xef\x07\x7b\xee\xc6\x32\xd8\x6f\x51\x59\xfe\x80\xd5\xc5\x90\x9e\x3b\x0d\x2e\x87\xef\xf4\x49\xa5\x49\x5d\x1a\x8a\x2f\xcb\x8d\x8b\x77\xae\x5e\xbc\x25\xb4\x7b\xc7\x53\x8a\xb2\xd7\x9d\xab\x8c\xd7\xa8\xcd\x8f\x83\x87\xef\xf8\xc7\xaa\xed\x76\x63\xfe\xcd\xd4\xe6\x85\xec\xc3\x77\xf8\x63\xd5\x76\x7b\x10\xf8\xbd\xd4\xe6\x27\x17\x87\xef\xe4\x87\xaa\xed\x0e\x0f\xfc\xf1\x6a\x4b\xc8\x54\x42\x1e\x41\x4b\x93\xa5\x24\x63\x4d\x7e\x1a\xe7\xd6\x6c\x28\x72\x17\x6f\xe8\xdc\x06\x8f\x9e\x08\x24\x22\x42\x03\x01\x3a\x2a\x8b\x4f\x44\x84\x9d\x07\x8c\xa8\xdc\x39\x11\x0f\x1e\x08\x3c\xb7\xe2\x09\x78\xe2\x9b\xf9\x21\xcf\xf1\xdc\xac\x1f\xea\xdc\xc5\xdd\xcc\x0f\x7d\x8e\x27\x6a\xa6\x93\x88\x87\x39\xf7\x1d\x37\xf3\x73\x36\xdb\x21\xe3\x66\x3b\xd7\x3e\xd9\xf4\x88\xf9\x4e\xd2\x46\xf6\x6b\x66\x3c\x91\xcf\x31\x3d\x60\x94\x9f\xec\xb4\x13\x71\x98\x52\x10\x40\x30\x22\x49\x23\x38\xc3\x28\x94\x84\x88\x2a\x4e\x11\xa8\xa2\x52\x12\x85\x31\x04\x26\x93\x18\x42\x51\x28\x90\x70\x58\x16\x29\x82\x66\x68\x46\x62\x48\x18\xa1\x15\x92\x41\x9f\xbc\x55\xb4\x7b\x32\xfd\x93\xd2\x35\xb6\xaf\xd9\x45\xae\xfb\x50\x30\x1d\x59\x28\x3f\xdc\x3d\x73\x56\x5e\xb1\xaf\x96\x23\x56\x4a\x87\xac\xe2\x0d\xb9\x48\xbd\x4d\x06\x73\x96\x76\xde\xf9\x57\xbd\x52\x78\x35\xd5\xde\x3b\x59\x63\xc5\x85\x29\x4c\x45\xbd\x26\xb0\x6e\xb1\x8c\xdd\xd7\xa2\xb3\x81\x5a\xd4\xc9\x6f\x77\x55\x25\xdb\xeb\xf1\x9c\xf7\x3b\x57\x9b\xbf\x2b\x13\xa5\x6b\x17\xc5\xfc\x1c\x48\x19\xf5\x9d\x59\x94\x89\xec\x74\xa6\x31\x0b\xb1\xb0\xea\xe2\x32\xfa\x3a\xe8\xf5\x65\x27\x0b\x97\x32\x87\xcf\x11\x5f\xf1\x40\xbf\x95\x33\x46\xfa\x8a\x2b\x77\x74\x60\x2f\xfb\xb2\x93\xcf\xbc\x33\x83\xfa\xaa\x22\x2c\x5f\xfb\x6f\xb9\x61\xb6\x4d\x14\x48\xe7\x1d\x6c\x05\x67\xc1\xbd\x69\xad\x01\xd8\x36\x38\xa7\x62\x15\x1b\xd8\x52\x5f\x4a\x43\x55\xc3\x67\xcb\xf5\x86\xeb\x14\x88\xe7\x5c\xa3\xdd\xce\xa0\xcf\x70\xb9\xca\xe2\x3f\x9f\x4e\x8b\x9f\xa7\xb5\xee\xe3\xd7\xe2\x89\xac\x47\xf8\xd6\x41\x1f\x79\xf7\xf7\xfa\x08\x64\xd7\xe6\x0c\xd2\x34\xad\x09\xb1\x96\x96\x6f\x59\x30\xcc\x6f\xb1\x3a\xda\xe8\xce\xfa\x8d\x29\x33\x68\x9a\x76\xf6\x6d\x3e\xad\x16\xde\xba\x8e\xdb\x3e\xd7\x63\x57\xaf\xc6\x51\xbf\x11\x1f\x2e\xea\x46\xf6\xc1\xf4\x83\xfd\x7b\x05\xfd\xfa\x51\x1f\xee\x27\xb7\x5e\x4a\x58\xf7\x59\x5b\xe6\x8d\xec\x92\x34\x0b\xc4\xa4\x59\x93\xdf\x87\x84\xd0\x1e\x92\x25\x44\x7e\xd6\xd6\xc5\x37\x91\x33\xfb\x0b\x01\x76\x8b\xb7\x95\x6e\xee\xb9\x21\xbb\x4d\x27\x31\x34\x23\x6b\xbb\xdc\x47\xd0\xbf\xd4\x47\x7c\x6d\x39\x7f\x84\xb9\x96\x7e\xa1\xd7\x85\x7d\xe4\xe5\xa5\xc4\xa3\x59\x44\x58\x8f\xcc\xc6\x88\x58\x31\x99\x26\x3a\x7b\x9d\x15\x8b\x42\x0d\xd5\xcd\x3e\xd3\x99\xbe\x8b\xbc\xd2\x1b\x6d\xe1\xd2\x09\x37\xd9\xe3\x20\x5a\x07\xf5\xf7\xf3\x68\xbb\x2e\x2d\xb7\xaf\x72\xf7\xe9\xca\x27\x3d\x89\xd1\xc6\x2f\xeb\xab\x6b\xe8\x7b\xba\xf8\xb7\xaa\xcc\xfb\x74\x6b\xda\xe8\x91\x5b\x62\xb4\x85\x9b\x99\x26\x22\x6f\x69\xbd\x4a\xf2\xa2\x59\x99\x14\x4a\xb3\xc1\x1b\xc6\x53\x95\x2a\x3a\x13\xde\x2a\x59\x85\x2a\xe3\x02\x3c\xb7\x87\x14\x20\xfb\x84\x33\x7d\xae\x69\x02\x95\xe7\xda\xf5\x81\x81\x97\x89\x42\x29\x23\x51\xad\x89\x99\x9f\xfc\xfc\xe9\xa6\xd4\xee\x93\x8a\xfb\x85\x1f\xef\xff\x2e\xd0\xb9\x0e\x3d\x39\xda\x9f\x3e\xe3\x23\x4b\xb0\x4a\x4a\x18\x02\x60\x91\xc2\x54\x52\xc6\x44\x0c\x21\x15\x06\x83\x55\x42\x01\x12\xae\x30\x22\x8d\x12\xa2\xa4\xd0\x30\x86\xc0\x8a\xac\xc2\x32\x41\x53\x0a\x05\x10\x54\xa6\x48\x14\xf7\x22\xd2\x5d\xfb\xa3\xaf\x8b\x48\x18\x11\xb3\x8b\xc1\xbf\x7b\x96\xf5\x7a\x56\x59\xed\x3d\x37\x4b\x9d\x1a\x33\x1d\x60\x7d\x1b\x19\xf6\x71\xad\x42\x21\x6f\x5a\xa3\xd1\xd6\x38\x55\xad\x68\xb2\xc3\xb2\xb3\x19\x4d\xac\xe1\x05\x7b\x73\x44\x62\xf3\xf4\x7b\xb9\xd9\xc1\x8a\x3c\x47\xb4\x6b\x05\x27\xab\xe3\xdb\x6e\x97\x19\xb0\x6c\xeb\x99\x87\x47\x0d\xab\xf2\x56\xd6\x6a\x9b\x01\xd9\xcf\x85\x46\x24\xee\x40\xbf\xc5\x4e\x98\x2e\x2f\x14\xac\x4c\xa1\xb2\x1e\x3e\xa3\xac\xcc\x61\x2b\x74\x9b\xe9\xe2\x96\x62\x63\xc4\x32\x5f\xa1\xe9\x55\x93\x7e\x26\xf5\x7e\x7b\x53\xeb\x8c\x46\x15\x75\x34\x9b\x35\x5b\x53\x47\x28\xc2\xbd\x11\x8e\x97\x1a\x58\xa3\x56\xab\xd7\xf0\xfa\xea\x79\x51\xac\x4d\x27\x03\x73\x3e\x61\x3f\x24\x22\x2d\x06\x38\xad\xd4\x57\x68\x41\x55\xc4\xf7\xde\x54\xd2\xca\xc6\xaa\xff\x56\xc6\x89\x62\xb9\xcd\xd0\xf3\xca\x16\x66\x73\x42\xe7\xdd\xc8\x0b\xee\x4a\xd8\xc3\x23\xd2\x9d\xf4\x1f\x19\x91\x74\xf5\x75\x03\x6f\x33\xc3\x1e\x83\x58\x7c\xbf\xb0\x2c\x6b\x80\x11\xcd\xd7\xd7\xd9\x70\x5a\xc2\xb6\x43\xa3\xd6\x62\x2b\x95\x66\x43\xe6\xab\xae\x3e\x1f\x1e\x91\x1e\x41\xff\x9e\x88\x74\x25\xfd\x93\x88\xc4\x36\xdf\xeb\x13\xa6\x29\x0f\xe1\x8e\xce\xd9\x7d\xb8\x38\x78\xad\xb4\x3b\x88\xcc\x66\xf3\x38\xd6\x9e\x91\xf6\xdc\xd4\xca\xab\x82\xba\x18\x9e\x18\xcd\x5d\x11\xe9\x06\x5d\x3d\x34\x22\xdd\xd9\x57\xd7\xd0\xf7\x23\x52\x2e\x8f\xb4\x90\x72\x7f\x45\x77\x8d\xec\x2b\x35\xcc\xae\x3b\x20\x23\xd5\x98\x8e\xe6\xa0\xef\xea\x1c\xaf\x1b\xef\x5b\x3a\xf3\x4e\xbd\xf5\x46\x25\xce\xe1\xf5\x99\xce\xcc\x85\x16\x93\x2b\x22\x65\xa9\xdd\x33\x5e\x27\x32\x25\xe3\xb6\xbd\x5e\x4d\xb6\x19\x72\x36\x5c\x16\xb3\x40\x13\x77\xc8\x1f\x1b\x91\x64\x52\x26\x29\x4c\x51\x30\x15\x56\x09\x14\xa7\x55\x04\xa0\x32\x4d\x48\x32\x4d\x2b\x22\x90\x80\x22\xaa\x22\xae\x00\x0a\x41\x61\x54\x02\x0a\xc0\x19\x1a\x26\x49\x4a\x46\x60\x94\x41\x69\x14\xf1\xf6\x2a\x21\xf7\xd4\x9d\xdc\xe6\xb1\x81\x88\x86\x71\x92\x26\x62\x76\x09\x91\x34\xf9\x74\x5e\xed\xf0\x6c\xb1\x58\xa3\x4b\xad\x55\x6b\x26\x55\xd1\x12\x8b\xf5\x7b\xaf\x6d\xab\x3a\x7f\x1d\xc0\xb0\x5a\xa4\xed\x5a\x99\x9a\xc3\x5c\x7b\x5d\xe9\x67\xd8\x01\xc6\x1e\xe2\x90\xfb\x89\x89\x43\xde\xe7\x86\xcc\xfc\x74\x6b\x42\xb6\xb7\x5a\x17\x98\xdd\x38\xe2\xf2\x16\x55\x84\x19\xe6\xad\x5c\xa3\x8c\xa6\xb4\x79\x07\xe8\x26\x37\xa9\x14\xa5\x6e\x6f\x84\x5b\xab\xdc\xa4\xb3\x7d\x7f\x7e\xb7\xab\x52\xe9\x6d\xa8\x0a\x15\x56\x7f\x7b\x7b\x46\x6a\x15\xb6\x5b\x2e\x31\xaa\xf4\xda\x79\x95\xf8\x86\xd4\x03\x7a\xb5\x2d\x32\xb0\xa5\x65\x16\x68\xbb\x34\x28\x57\x52\xc4\x9e\x33\xa3\x3d\x8f\x3d\x27\x32\x1f\x7d\xef\xc9\x78\xce\x6a\x99\x2c\x5c\x83\x2b\xc5\xad\x33\x5d\xf3\x88\x3e\x84\xc5\xed\xc2\x44\x18\xbe\xb4\x59\xd5\x72\xdb\x06\xe1\x64\x39\x39\xe7\xc9\x88\x4d\x1c\xab\x61\x0c\x33\xc4\x3a\x89\x89\x84\xf1\x7c\x07\xfd\x42\xa7\x9f\x5d\xdc\x41\x9f\x65\xff\xbb\x0c\x3b\xd4\xb7\x66\x6f\xd7\x45\xc3\x18\xc5\x8a\x99\xa4\x8b\x7b\xfb\x62\x67\x0b\xcf\x72\x00\xdf\x55\xba\xf8\x97\x7c\xde\x38\x4d\x55\xd4\x72\xcf\xc4\x3b\x4a\xcb\x98\x63\xb7\xcc\x5c\x7b\x8e\x14\xfa\xa0\x4a\xad\x4d\x8e\xb6\x33\x36\x95\x9b\x6f\xc8\x79\x09\xd6\x5a\x15\xf1\x6d\xe5\x08\xdb\x56\x21\x97\xcd\x0c\x50\x1c\xc6\xd1\xf7\xce\x1c\x19\x2c\x84\x59\x7f\xa5\x54\xf1\x15\xa9\xcc\xda\xc8\x36\xd7\x7a\xb4\x6f\xa5\x18\x58\xa6\x54\x85\x80\x51\x5c\x24\x14\x91\xc1\x60\x89\x92\x15\x82\x00\x0a\x86\x48\xaa\x8a\x2b\x0a\x2e\xa2\x14\x03\x00\x0a\x8b\xa8\x8c\xa8\x32\x4c\x33\x80\xa1\x08\x82\x22\x28\x0c\x77\xb3\x7d\x7f\x73\xf1\x1d\xbe\x15\x4d\xf6\xad\x34\x85\xc6\xf8\x56\xef\xee\x69\xe5\xf6\x5e\xdf\x9a\x0b\x74\xea\x85\x6f\xbd\x21\xc7\x8c\xf0\xad\xec\xdb\x52\x68\x94\xb7\x4e\x95\xdd\x20\x19\x85\xd3\xad\xa1\x29\x2c\xdb\x4a\x47\x6a\x3b\xbd\x7a\x6b\xe5\x70\xcc\x84\x15\xf1\x65\x3d\x03\xf4\x49\xbd\x36\xb0\x95\x8d\x60\x8b\x16\x25\x8c\x6a\xcf\x0b\xaa\x9c\x79\xae\xd0\xa3\xf2\x5a\x5b\x0d\x37\x46\xf1\xb5\x31\xd0\x16\x0e\xa1\xe2\xdd\xdf\xcc\xb7\xde\xeb\xdb\xee\x1c\xcf\x6f\x54\xa6\x93\x1f\x3d\xd2\xb7\xfe\xc2\x5c\x31\x29\x6f\xfd\x95\xbe\x8d\x7d\x90\x6f\xa5\xf1\x63\xfb\x88\x39\x5f\x6c\x25\xc5\x9a\xbd\x6a\x75\x4b\x98\xd4\x15\x15\x6b\x57\x44\xb4\xca\x59\xb3\x41\x17\x85\xa5\x5e\x87\xab\x51\xed\xe6\x90\x2d\x2e\x6b\xaf\x4d\x6c\x31\xcc\xe7\x10\xaa\x24\x77\xad\xe2\xdb\x33\x3c\x17\x32\x6f\x60\xdb\xcc\x68\x6a\x51\xa8\x97\x2d\xb4\x3e\xda\x98\xef\x3a\xfe\x26\x81\xc1\x73\xe1\xf1\xbe\x95\xc6\x70\x95\x84\x29\x52\xa4\x68\x0a\x96\x70\x06\x45\x30\x9c\x92\x00\x2c\x92\x08\x4a\xe3\x34\xa5\x30\x30\xac\x8a\x92\x8c\xc0\x14\x2d\x01\x1c\xc3\x54\x9c\xc2\x24\x54\xc5\x10\x8c\xa1\x31\x4a\x7d\x3a\x3c\x91\x73\x87\x6f\x4d\x2a\xa0\xd0\x30\xce\x30\xd1\x3b\x7e\xf7\x77\x4f\x57\xa1\xee\xf5\xad\xf9\x40\xa7\x5e\xf8\x56\x8d\xb0\xb1\x61\xa9\x57\xcb\xce\x27\x84\x31\xcf\x60\x74\x46\x14\x1a\xad\xe1\xa8\xbc\x12\xfb\x53\x09\x69\x94\x78\x13\x41\x7a\x46\xad\xa5\xb8\xe0\x71\x79\xab\xd0\xde\xa0\xce\x4c\x6c\xce\xcd\x75\x83\x78\x2e\x36\x70\x91\x78\xe3\x46\x64\x86\xcc\xae\xa5\x99\xc9\x56\x9f\x79\x86\x55\xf0\x32\xa0\x8b\x4b\x52\xc5\x07\xfd\x25\xd5\x7e\xdd\xb4\x28\x55\x5a\xd6\x6a\x7d\x72\xa6\x2d\xcc\xf9\xa6\x57\x56\x0b\x15\xfa\xb9\xa3\xad\x88\x91\x82\x77\xeb\xdc\x6f\xe5\x5b\xef\xf6\x6d\xf7\xfa\xd6\xad\xd5\x2a\x54\x1e\xe9\x5b\xd3\xaf\xe2\xb8\xf0\xbf\x9b\x6f\xbd\xd5\xb7\xb1\x0f\xf2\xad\x54\xf7\xd8\xbe\x7e\xb5\x2e\xfe\x85\x67\xb2\x62\x8d\x8a\xaf\xc4\x5b\x3d\xbf\x54\xa7\xaf\xcb\xe2\x52\x9c\x16\xc1\xea\x79\x22\x17\x89\x2a\x9b\x5b\xbd\xaa\xad\x12\xc8\x95\x56\x59\x6b\x69\x3c\x17\x10\x6b\x09\x0f\xe9\x6e\x03\x43\x29\x6d\x8b\x2c\x17\xe5\x37\xb1\x62\xf7\x84\xd2\x46\x50\x9b\x33\xdc\x7a\xee\x0f\x40\x21\x9f\x7d\x78\x4d\x40\x55\x69\x9a\xc2\x25\x49\xc1\x49\x00\xa3\x8a\x0a\x18\x09\xa7\x44\x51\x55\x30\x42\xa2\x11\x4a\xc1\x54\x1c\x97\x54\x8a\x64\x44\x58\x51\x55\x58\x52\x29\x4c\x42\x48\x40\x4a\x32\x2c\x62\x18\xf0\x7d\x2b\x7e\x9f\x6f\xc5\x13\x7d\x2b\x81\x46\x3f\x62\xe7\xde\x3d\xf8\x56\x7f\x41\xfd\x5e\xdf\x1a\x0c\xe6\x97\xb5\xbb\x4c\x7d\x9b\x87\x99\xcd\x6b\xbb\xd1\x15\x36\x52\x6b\x04\xea\x7a\xa1\xd9\x5b\xb3\x5c\xf3\x55\x29\x76\xde\xb6\xa2\x56\xd6\xe8\xde\xb3\x3e\x71\x07\x44\x5c\xde\x9a\x2d\x3f\xb7\xcb\xd9\x0e\xcb\x34\xb2\x8d\x52\xd3\x61\x17\x1d\x65\x38\x44\xd9\x6c\xb6\x6d\xb6\x09\x42\xc7\x95\x35\x37\xb4\xdf\x0d\x5a\x17\x7b\x0e\x81\x4a\x23\x5e\x7c\x46\x78\x35\xdb\x5b\x8e\x54\xb5\xd7\xd9\x96\x24\x71\xbd\x26\x5b\x70\xc6\x56\x4d\xb4\xa1\x16\x08\x19\x2e\xad\xf9\xdf\xcb\xb7\xde\xeb\xdb\xee\xf5\xad\x8b\x01\x5f\xbc\xa7\x26\xc1\x06\xe8\x5f\xb1\x1e\xe1\x82\xff\x6e\xbe\xf5\x56\xdf\xc6\x3e\xc8\xb7\xde\xda\x17\xbe\x6f\x65\x85\xe6\x4c\x60\xbb\xeb\x66\x67\xd2\x99\xbe\x53\xad\x6a\x17\xeb\x17\xf9\x09\xdb\xea\x8a\x1c\x00\x23\x50\x92\xb3\xc5\x5a\x9d\xc8\x54\xfa\xba\x04\x94\x39\xda\xe9\xaf\x9c\xce\x60\xdd\x93\xe6\x03\x0c\xe9\xd2\x53\x14\xb5\xeb\x8d\x19\xdf\xa4\x4a\x24\xff\x6a\x6c\xc0\x80\xcf\xd2\xf9\x94\x79\x6b\xe4\xe9\x5e\x97\x87\x5f\x1f\x0e\xda\xdc\xbf\xe7\xfa\xda\xf7\x53\x9e\x60\xf4\x0e\xe2\xcb\xe7\x4f\xdf\x9a\x1d\x24\x08\x35\xdb\xe5\x3a\xdb\x1e\x42\x55\x6e\x08\x7d\xd6\x94\xa4\x03\xb8\xc2\x0f\x03\xbf\x9b\xeb\x00\xd6\x30\xce\xc3\x08\x27\x72\x1f\x78\x8d\x4e\xe0\x9d\x33\x29\x0f\x53\xbf\x5b\xba\x73\xb2\x61\xc2\xdd\xc4\x18\xd4\xe5\xcb\xad\x2e\x07\x7d\x3e\x82\xbf\x9c\x9c\x34\xf5\x72\x76\x2e\xd4\x95\xaa\x79\x4c\xb7\x5e\x2d\xf8\x55\x9d\x1a\xf1\x78\x50\xc2\x23\x38\x8f\x95\x2c\x9c\x48\x9c\xa4\x31\x6c\xa5\x96\x3c\x72\xb3\x60\xe2\x76\xbc\xc7\x4a\x1f\x45\x26\x4e\xfe\x58\xd6\x12\x35\xe0\x99\xb4\xb4\x75\xad\x7d\x2f\x48\x99\xcf\x73\x83\x74\x2f\x39\x77\x41\xcf\xb1\x40\x0d\x3e\x38\x18\xba\x42\x99\x2f\x42\x92\x63\x01\x70\x3a\xba\xa2\xb9\xf1\xc6\xd8\xfd\xfc\xf8\x67\xb8\xa5\xe2\x28\x62\x5c\x4b\x87\x17\xa7\xdd\xcc\xce\x11\xc5\x29\x27\x67\xb3\x81\x73\x7e\x3c\xe0\x97\x8b\x57\xae\x87\x31\x37\x15\xed\xe9\x3d\x9c\xb9\x6f\x9e\x4f\xc5\x56\xf0\x7d\xf5\x61\xdc\x78\x0f\x81\xdf\xc3\x8f\x87\x21\x1d\x47\x81\x97\xe1\xbf\x5c\xbe\xf7\x3e\x74\xc8\x8f\xc1\xce\x36\xdc\xfb\x37\x70\xea\x47\x09\x8f\xe1\x00\xba\x53\xb6\xf7\x6f\x8c\x39\xe3\x38\xec\x08\x98\x97\xfd\x71\x2f\x51\xcc\x1e\x5f\xb2\x7d\x27\x9b\x9a\x92\x9a\xc1\xe3\x79\x17\x2f\xa1\xe7\xd6\x24\x30\x6d\x2e\xc6\x8b\x47\xf1\xed\xe3\x3a\x65\x3d\x22\x54\xdd\x24\x49\xb8\x00\xce\xe6\x71\x02\xf8\xb8\x22\x6c\xfa\x46\x11\xce\x0f\x2f\xb9\x14\xc2\x5c\xec\xac\x72\x6a\xde\x24\x83\xcf\xfc\x11\xc7\xad\xca\x8f\x57\xf4\xe1\x28\xc0\x9d\xab\xbe\x5f\xd7\xe7\xe8\x4e\x59\xde\xbf\x9b\xe2\x8c\xc7\x70\x8e\x4e\xf5\xfa\x28\xb6\x2e\x70\xa6\x73\x6f\x61\x0c\x3a\x5e\x97\x38\xf7\x74\xeb\x11\xc7\xed\x26\x99\x64\x7e\x8e\xa5\xec\x88\x9c\x9e\x28\x75\x07\xc3\x97\xc8\x02\x9c\x2b\x20\xc0\x67\xe0\x28\xab\x78\x06\xdd\xb7\x35\x3f\x86\x3d\x17\x55\x2a\xe6\xf6\xaf\x88\x8e\x64\x2d\x70\x48\xd6\xdd\xfc\x05\xf0\x25\x31\x79\x79\x46\x57\x22\xa7\x8f\xd1\xe3\x19\xb6\xb4\x5c\x26\x6a\xf3\x31\xbc\xa5\xe2\x29\x9e\x97\x3d\xc7\xba\x69\xce\x96\x8b\xfb\x38\x3a\xc7\x95\xba\x47\xf7\xa7\x80\x85\xf2\xb7\x10\x35\x6b\xec\x1e\xf5\xf2\x08\x0e\x83\xd8\xd2\x8d\x5b\x9f\xc1\x97\x8b\x83\xcb\x5e\x2e\x0e\xbf\x8b\x10\xe2\x01\x7e\xdb\xc7\x93\xc4\xf1\x95\xd9\xd1\x0e\xeb\xc3\xb4\x7b\x85\x62\x13\xf5\xe6\x9d\xbc\x71\xf1\xb2\x68\xd3\x18\xfb\x27\x82\xdf\xab\xd0\x44\x02\x67\xf3\xb4\xfd\x7b\xb7\xcf\x67\x46\x1e\xe0\x15\xbc\xdf\x6f\x07\x71\xb8\x93\x39\x0e\x19\x65\xe7\x08\xfd\x2c\x7c\x87\xcf\xd9\x2e\x6e\x9f\x83\xc7\x62\x4d\x4c\xfb\x77\x40\x09\x8c\xfa\x39\xd4\x0e\xe5\xc1\x88\x1e\xc4\x6d\x18\xea\xc4\xf4\x2d\xad\x25\x9f\x20\x7f\xb4\x31\x9c\xa1\xbe\x25\xdf\x8c\x46\x17\x38\xfe\xf9\xf1\x8a\xbe\x38\x60\x3a\x91\xfd\x40\x83\xf4\xc2\x9c\x9c\xf7\xfd\x61\xfa\x3f\x3d\x53\x3c\x49\x92\x13\xd8\xf4\x42\x84\x9d\x5e\xfe\x61\xd2\x84\x1e\x95\x9e\x24\x56\x58\xa3\xf4\xf2\xed\x8b\x28\x1f\x26\xd3\xe1\xdc\xc0\x24\x39\x22\xab\x5d\xe7\xa8\x8f\x2f\x98\xf8\x88\xa1\x1d\xc4\x1e\x3a\x01\xbe\x76\x80\x9f\x23\x3d\x9f\x42\x3d\x68\x84\xc7\x91\x48\x23\x43\xc2\xbc\x2e\x96\xd8\xe3\xc2\xd7\x25\xe2\x54\xbc\x27\x07\xb1\xd3\xc9\xf6\x47\x98\xcd\x25\xfe\x9b\xa7\xfa\xde\x41\x42\xfb\x40\xbe\xaf\x30\x8e\x25\xd3\x9c\xdd\xac\xe5\x18\x9c\x89\x29\xc2\xe7\xcf\xfb\xb3\xb8\xbf\xfe\xf5\x17\xf4\x64\x9b\xba\x72\xb2\x9a\xf6\xf4\xfd\xbb\x03\x36\xce\x97\x2f\x2f\x50\x34\xa0\x6c\x2a\xe9\x00\xbd\x5a\x7c\x34\xa8\x64\x2e\x27\x53\x27\x15\xf9\x33\xd0\x78\x06\xce\x40\x03\x2c\x7c\x81\xfa\x25\xae\xcd\x79\x46\x06\xfd\x84\x30\x2c\xf5\x42\xb4\xa6\x8c\xd5\x93\x65\xa2\x42\xf5\xd7\x2c\x47\xfb\x64\xa1\x42\xa3\xcd\x95\x8b\xfc\x61\x09\x08\x6a\x73\x05\xae\xcd\xf1\x39\x4e\x08\xac\x8a\xb8\x77\x1b\x3c\xd4\x6d\xe6\x77\x26\xd3\xe6\x84\x4e\xbb\x9c\xeb\xec\x2e\xe5\xb9\x1a\xd7\xe1\xa0\x1c\x2b\xe4\xd8\x3c\x17\x7f\x68\x7a\xe0\xe7\x38\x50\x8a\x79\x9c\x32\xce\xe9\x24\x2c\x92\x45\x71\x72\xae\x9f\x60\xd9\x28\x54\x59\x7e\xa2\x9f\xb0\xa2\x18\xa9\x09\x7f\x2a\xfb\x9f\xeb\xe1\x94\x8f\x30\x2d\xec\xab\x04\xf1\x06\x73\x9d\x06\x2e\x8b\x4a\xff\xa1\x1a\x22\x98\x39\xd7\x45\x48\x19\xec\xb1\x46\x11\x2c\x71\xfc\x0e\x0a\x89\x36\x8d\x8b\x1a\x52\x5a\xeb\x68\x9a\xb6\x33\xb1\x80\xd0\xaa\x41\x8a\xe8\x88\x3b\x13\x83\x94\xe5\x7c\x01\xc9\xe6\x7c\xa1\x03\x07\xb8\x32\xfc\xbf\x00\x00\x00\xff\xff\xa3\x3e\x13\xdc\x08\xac\x00\x00") - -func asset_stat_operationsHorizonSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_operationsHorizonSql, - "asset_stat_operations-horizon.sql", - ) -} - -func asset_stat_operationsHorizonSql() (*asset, error) { - bytes, err := asset_stat_operationsHorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_operations-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfd, 0x37, 0xb2, 0xca, 0x86, 0xbf, 0x3b, 0x4a, 0x4f, 0x59, 0x7f, 0xa6, 0xd2, 0xf3, 0x93, 0x52, 0xd8, 0x3b, 0xf3, 0x83, 0x5b, 0xb0, 0x7f, 0xd2, 0x5a, 0xd1, 0xcd, 0xfe, 0xbb, 0xd8, 0x1e, 0x1a}} - return a, nil -} - -var _asset_stat_trustlines_1CoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x69\x93\xa2\xce\xf2\xee\xfb\xf9\x14\xc4\xbc\xe9\x99\xb0\xe7\x27\xfb\x32\x73\xe7\x44\x80\xe0\x8a\xfb\x86\xde\xb8\xd1\x51\x40\x81\xb4\x2c\xca\xe2\xd2\x37\xce\x77\xbf\x21\xb8\xa0\xa2\x6d\x6b\xcf\x39\xff\x1b\x31\xbc\x98\xb1\x25\x79\xea\xa9\xac\xcc\xac\xac\x02\x93\x1f\x3f\xbe\xfc\xf8\x81\xb4\xbc\x20\x34\x7d\xd8\x6d\xcb\x88\x0e\x42\xa0\x82\x00\x22\x7a\xe4\xcc\xbe\xfc\xf8\xf1\x65\x73\x5e\x8c\x9c\x19\xd4\x11\xc3\xf7\x9c\x83\xc0\x02\xfa\x81\xe5\xb9\x08\xf7\x0f\xfd\x0f\x96\x92\x52\xd7\xc8\xcc\x7c\xd9\x5c\x7e\x22\xf2\xa5\x2b\xf5\x90\x20\x04\x21\x74\xa0\x1b\xbe\x84\x96\x03\xbd\x28\x44\x7e\x23\xe8\xaf\xf8\x94\xed\x69\xd3\xf3\x6f\x2d\xdd\x86\x2f\x96\xfb\x12\xfa\xc0\x0d\x80\x16\x5a\x9e\xfb\x12\xc0\x60\x83\x7b\x2e\xac\xd9\xd6\x06\x1a\xba\x9a\xa7\x5b\xae\x89\xfc\x46\x9e\xfa\xbd\x22\xfb\xf4\x6b\xd7\xb6\xab\x03\x5f\x7f\xd1\x3c\xd7\xf0\x7c\xc7\x72\xcd\x97\x20\xf4\x2d\xd7\x0c\x90\xdf\x88\xe7\x6e\x31\x26\x50\x9b\xbe\x18\x91\x9b\xb4\xa5\x7a\xba\x05\x37\xe7\x0d\x60\x07\xf0\xa8\x19\xc7\x72\x5f\x1c\x18\x04\xc0\x8c\x05\x96\xc0\x77\x2d\xd7\x4c\x44\x7c\x6f\xf9\x12\x40\x2d\xf2\xad\x70\xbd\x01\x37\x8c\x5f\x5b\x05\x40\xe0\x6b\x93\x97\x19\x08\x27\xc8\x6f\x64\x16\xa9\xb6\xa5\x3d\x6f\x34\xa6\x81\x10\xd8\x9e\xf9\xeb\xcb\x17\xb1\xd3\x6c\x21\x95\x86\x28\x29\x48\xa5\x88\x48\x4a\xa5\xdb\xeb\x6e\x25\xff\x89\x66\xa6\x0f\x74\x38\xb1\x82\x50\x5d\x07\x70\xfe\xeb\xaa\x74\xa0\xcd\xe6\x91\xe7\x47\x4e\x70\x9b\x30\x74\x17\xb7\x48\xda\x50\x37\xa1\x7f\x8b\xe4\x86\xa7\x01\xe1\x8d\x92\x37\x88\xa9\x30\x08\x3d\xc3\x80\xbe\xe5\xea\x70\x75\x5d\x16\x68\x9a\x17\xb9\xa1\x0a\x6c\xe0\x6a\x30\xf8\xf5\x85\x97\x7b\x52\x07\xe9\xf1\x82\x2c\xa5\xa4\x9b\x0d\x79\x94\xa1\x5e\xcf\x5f\x23\x31\x7a\xa1\xd9\xe8\xf6\x3a\x7c\xa5\xd1\x4b\x5d\x74\x2c\xf8\x32\x9b\xc2\xf5\x2d\xf8\xe1\xea\x7d\xe8\xbd\xcc\x07\x50\x0d\x78\x03\xe7\xb4\xd8\xed\xd8\x7e\x14\x84\xb6\xe5\xc2\xe0\x1a\xf2\x5e\xe8\x66\xdc\x0d\x0b\x18\x47\x83\x2b\xb8\x07\xa1\xdb\x71\xf7\x26\x7f\x0d\x77\x2f\x74\x33\x6e\x22\x6f\xb9\x86\x77\x05\xf7\x20\x74\x33\xee\x2c\x52\x83\x48\xbd\x82\x99\x08\x7c\x04\xcf\xb6\x82\xc9\x3c\x82\xd1\x35\xcd\xa6\xc5\x6e\xc7\x86\xd0\xbf\xa6\xd6\xf8\xfc\xcd\x68\xb1\x1b\x5f\x83\x4b\x04\x6e\xc6\x4b\xa2\xd2\x04\x02\xfd\x3a\xec\x91\xdc\x1f\x46\xdf\x46\x4a\x38\x7f\xb9\xb1\x19\x15\xb8\x57\xc0\x55\xe0\xde\x4c\x78\x1b\xfd\xae\x71\xdd\x89\x7c\x14\x73\x93\x03\xbc\x0f\xbb\x91\xda\x22\xc7\xb2\xa7\xc0\x99\x21\xf7\xba\xec\x3e\x34\xbe\x27\x76\x08\x74\xef\x48\xee\x03\xd7\x75\xb9\x43\x20\x7a\x47\x6e\x1f\x58\xde\x95\xbb\x89\xdf\x21\xa0\x5c\x97\x4b\x82\xc4\xbb\x32\x7b\x97\x7f\x47\x72\xe3\xc7\xd7\x45\x12\xdf\xbc\x2e\x73\xe4\x0a\xd7\x45\x55\xe0\x5e\x17\xd8\x99\xea\x4d\x52\x1b\xcb\xdb\x0a\x4a\x4a\x4f\x6a\x74\x2b\xcd\x46\x5a\xd8\x9e\x99\xc1\xdc\xde\x4a\x74\x0b\x65\xa9\xce\x9f\x61\xfd\xfa\x92\xe4\xc6\x0d\xe0\xc0\x9f\xbb\xef\x90\xde\x7a\x06\x7f\x6e\x2f\xf9\x85\x74\xb5\x09\x74\xc0\x4f\xe4\xc7\x2f\xa4\xb9\x74\xa1\xff\x13\xf9\x11\xa7\xcc\x85\x8e\xc4\xf7\xa4\x1d\xf2\x0e\xef\xcb\x11\xe2\xf1\xc9\x2d\x70\xa1\x59\xaf\x4b\x8d\xde\x15\xe4\x44\x00\x69\x36\x8e\x01\x90\x4a\x17\x79\xda\xe5\xb7\xbb\xef\x82\x18\xe4\xe9\xb4\xe5\x5d\xf7\xb7\x6d\xee\x35\xf4\x6e\x7f\x8e\x74\xd9\x68\xf6\x4e\xf4\x89\x0c\x2b\xbd\xf2\x9e\x56\x3a\xa1\x3d\x6a\xfe\x80\x72\x42\xe4\x23\x9d\x3f\x03\x89\x15\xd0\x92\xf3\x33\x73\xb3\x8a\x99\xf9\x9e\x06\xf5\xc8\x07\x36\x62\x03\xd7\x8c\x80\x09\x63\x35\xdc\x98\x80\x6f\xc4\x74\x68\x80\xc8\x0e\x5f\x42\xa0\xda\x30\x98\x01\x0d\x6e\x56\x13\x4f\x27\x67\x97\x56\x38\x79\xf1\x2c\x3d\xb5\x40\x38\xea\x6c\xda\x20\xb7\xdd\x8c\x4d\xf7\xd0\xc9\x9d\x01\x64\x29\x3c\xb1\xf2\x74\xd0\xfd\xf6\x05\x41\x90\xdd\x37\x96\x8e\x68\x13\xe0\x03\x2d\x84\x3e\xb2\x00\xfe\xda\x72\xcd\x6f\x14\xfd\x3d\x1e\x9b\x46\x5f\x96\x9f\x63\xe9\xcd\x85\x2e\x70\x60\x86\x30\xcb\x66\x09\x2f\x80\x1d\x65\x49\x63\x18\x7e\x2a\x6e\x83\x20\x74\x3c\xdd\x32\x2c\xa8\x23\x96\x1b\x42\x13\xfa\x7b\x91\x2f\xdf\x4f\xc7\x7e\xef\xc5\x0f\xea\x22\xb8\x4b\x11\xdb\x85\x00\xa2\x5a\xa6\xe5\x86\x27\x27\x03\x38\x77\x23\x27\xfb\x9c\x1b\x39\x41\xa4\x42\x37\xf4\x37\x4b\xc1\xd3\x6e\x26\x32\x96\x6b\xd8\x60\xb3\x62\xd4\x61\x10\x66\xd3\x49\x04\x27\x9e\x03\x75\xcf\x01\x96\x9b\x21\x45\x92\xa7\xa4\xc3\x89\x0f\x83\x89\x67\xeb\x01\x12\xc2\xd5\x29\x33\xc3\x06\xe6\x25\x46\x57\xc7\x66\xab\x91\x68\xd3\xaa\x6d\x01\xd5\xb2\xad\x70\xd3\xb9\xa4\xff\x3b\x95\xd8\xf6\xb5\xd3\x96\xe9\x6e\x72\xa1\x0d\xad\xe4\x9b\x54\x36\xb0\x4f\x2d\xb6\x4a\x7f\x89\x97\xd5\x48\xa1\x2c\x15\x6a\xc8\xb7\x6f\xbb\xa1\xf8\xd7\x6f\x04\xfd\xfe\xfd\xca\xd5\xa7\x04\x4f\x71\xce\x3a\xf0\x1e\xe2\xd1\x58\x9e\xa0\x1d\x8f\xf3\x7b\x48\xe7\xea\x39\x81\xcb\xd0\x5f\x82\x79\xee\x18\x9b\xf9\xef\x5e\x9f\xd8\xa4\x8c\x89\x3b\xb8\x9e\x0e\xd3\xbe\x70\xe4\x03\xe7\x8d\x1e\xcf\xcf\xf7\x36\x7f\x9c\x18\x27\x44\xb6\xdf\x81\x60\x92\x22\x43\x9f\xd9\xf6\xcc\x87\x8b\x77\x85\xd4\x48\x9b\xc2\xd0\xb6\x82\xf0\x5d\xd1\x7d\xb6\xbd\x33\xf7\xe4\x6b\xcd\xf6\x02\x18\x5a\xce\x05\xcf\x8f\x03\x6b\x86\x6f\xa5\xc6\xfc\x38\xa9\xdf\xe3\x9d\x8c\xf7\xa1\x9d\x0b\xa6\x73\x69\x6d\x70\x0c\x73\xe8\xc5\x25\x6b\xd9\x26\x5f\xf7\x8e\xd8\x76\xe1\xf5\x6d\xef\xe4\xd0\xbf\x31\x82\x26\x3b\x2f\xfa\xa5\x08\x1a\x9b\x3b\x08\x02\x18\x66\xe9\x33\xf1\xd5\x8b\xa7\x81\xb3\x71\xab\x6c\xe8\x99\x6f\x69\xd0\xbd\x10\xc4\xe2\x93\x97\x22\x5c\x7c\x12\xd1\xbd\x48\xb5\xe1\xc6\xde\x34\x2b\xde\x91\xfc\xd4\x28\x9a\x1a\xe1\xed\x92\x35\xe9\xcb\xc9\xb8\x6e\x3b\x78\xc1\x36\xb6\x57\x6e\x35\x7c\x72\xe9\x4e\xef\x97\x0c\x22\x49\xd8\xef\xb5\x87\x64\x59\x9f\x98\x83\x35\xcb\x9a\xf8\xa9\x33\xcf\xf5\xfc\x70\xaf\x0d\x51\x2a\xf2\x7d\xb9\x87\xa0\xa7\xd3\x26\x5c\x85\x20\x0c\xa1\x33\x0b\x91\x8d\x5b\x04\x21\x70\x66\xc8\x26\x65\xf2\xa2\xe4\x1b\xe4\xcd\x73\xe1\xf9\x64\x6b\x00\xcb\x8e\xfc\xd4\x54\x7b\xa9\x85\x70\x3d\x83\xef\x0f\x4a\xb2\x2d\x91\xc2\x3d\x0f\xfb\xfb\x16\x2f\x8c\xce\x76\x67\xc3\xf3\x4f\x07\xf5\x5b\xac\x89\x7f\x21\xe8\x77\x84\x6f\x88\x48\xf2\xe7\xff\xfa\x8d\xd0\x14\x45\x50\xdf\x33\xc7\x2a\xbd\x0c\xbb\x7b\xc8\xd2\xbb\x3c\xe9\x98\x7b\x41\x1b\xc9\x46\xdb\xc6\xeb\x32\x09\x6d\xd6\x8e\x0f\x50\x09\x22\x75\x4b\xc2\x87\xc1\xd1\x04\x44\x64\x66\x8c\x3e\x04\x7b\x5f\x3a\xe7\x93\x5a\xf3\xde\xcb\x29\xb5\x59\x77\xc3\xcc\x98\x10\x9b\x07\xf0\xda\x0c\x73\xce\x33\xb5\x86\xbf\x97\xe7\x01\xe2\x76\x9e\x67\x93\xdc\xc9\x79\xe8\x2e\xa0\xed\xcd\xe0\x3b\x53\xda\xa1\xe9\x07\x26\xa2\xd4\x76\xc7\x03\x2a\xd8\xed\xd7\x7e\xbb\x65\x1c\x0e\x56\xf4\x9e\x22\xe6\x17\x26\x9a\x63\x25\xec\xf6\x81\x8f\x10\x4f\x15\x71\xd4\xda\x45\x65\x1c\xf6\x88\xee\x56\xc6\x61\x53\xfc\xdb\xc1\x6f\x8f\x17\x6f\x19\x3e\x75\xcd\xbb\x53\x3b\x5c\xf7\xb2\x4a\xdd\x02\xb8\x67\xd9\x15\xcf\xf8\x57\x22\xb5\x15\x04\x11\xf4\x6f\x87\xd2\x3c\x3d\x73\x75\x7a\xa6\x96\xd0\xb6\x1c\xeb\x42\x46\x71\x75\x2d\xf8\xdf\x5c\x55\xa5\xac\x33\x75\x57\xe5\xae\x55\x54\xfa\xfa\xcf\x5a\x47\xa5\x30\xef\x5f\xff\x5c\x43\x4d\x06\xed\x04\x69\x3b\x92\xff\xca\x76\xbc\xa3\xed\xde\xbb\x8d\x3c\x7d\x0f\x2d\x31\xf3\x70\x75\x14\x8a\x6f\x58\x6f\x9c\x1a\xe0\x2a\xbe\x4b\x79\xf1\xac\x36\x01\xae\x09\x33\x17\xf6\x69\xe5\xa4\x6f\xdb\xdd\x1f\xab\x0f\x7b\xe7\xf7\xab\xe8\x3f\xac\x1f\xd5\xd3\xd7\x59\xca\x09\x57\x3e\x0c\x22\x3b\x33\xba\x87\x2b\x07\xbe\xbb\x9e\x3b\xdc\x62\xbd\x5f\x9f\x27\xf7\x2d\xee\x55\xea\xc9\x1d\xe7\x6f\x37\x29\x6e\x7b\xd1\x35\xed\x6d\x45\xb2\x14\x71\x9b\xd9\x9d\xdc\xe1\xbe\x47\x51\xe2\x66\x65\x6d\x78\xfe\x3b\x9b\xa1\x88\xc8\xf7\xf8\x77\x74\x76\x1d\x32\xf8\x30\x5e\xa5\xd1\x95\x3a\x3d\xa4\xd2\xe8\x35\x0f\x9b\x8a\x03\x5e\xee\x4b\x5d\xe4\xdb\x53\x49\xe8\xb4\x46\xe5\x8a\x8c\x17\x2a\x44\xb1\xd1\x26\x05\x45\x2e\xd6\x1b\xa2\x5c\xac\xf6\x1b\xad\x3e\x5e\x1e\x11\xe3\x7a\xb1\x5b\x6e\x36\xfa\x05\xa9\xc9\x77\x87\x4c\xbb\xc0\x34\x15\xbc\xfc\xf4\x8c\x70\xc9\xc1\x6c\xff\x67\x51\xf4\x19\xc1\x9f\x11\xf4\x39\xd1\x32\xf2\xf4\xf4\x8c\x3c\xf1\x6d\x9e\xe7\xf9\xdf\xbf\x9f\xe2\x13\xf8\xee\xdc\xe1\xdf\xef\xbf\xde\x63\x58\xc0\x89\x76\x11\x2f\xf7\x25\x0a\xe7\xeb\x4a\xbf\xd8\x2f\x13\xfc\xa8\xca\x2b\x4a\x49\x51\x06\xf8\xa0\xac\x8c\x46\x1d\x5a\x1a\x29\x52\xaf\x55\x13\x95\x71\x97\x1f\xd2\x8c\xd2\x24\x9f\x9e\x11\x0c\xdd\x1f\xcf\x08\x4b\xb1\x1c\x47\x90\x14\xf7\x47\x38\x2a\xb5\x12\xdd\x69\x90\xcd\x46\x45\x6a\x15\xea\x8d\xa2\xc0\x10\x38\x4f\x12\xf4\x98\x6a\x35\xc4\x6e\x47\x2e\x0d\x6b\x4c\x49\x90\x0b\xf5\xb6\x5c\x29\x36\xc9\x2e\x23\x8d\x86\x83\xfe\x41\x8b\xdc\x11\x45\xe2\x19\xc1\xae\x50\x24\x32\x29\x5e\x30\x9c\xd3\x0d\xb7\x07\x6c\xf0\xf2\x36\xda\x47\x0d\xf1\x78\x2b\x6d\xaf\x47\x9a\xd0\x39\xd6\xa0\x08\x1a\x42\x9a\xd5\x31\x15\x67\x54\x4a\x65\x39\x03\x27\x80\x41\x11\x18\xa6\x32\x14\xcd\x01\x9c\x34\x80\x81\x91\x28\x01\x74\x54\xa5\x70\x95\x26\x08\x15\x65\x54\xc8\x71\x1b\x55\xa1\x0f\x1e\x1b\x0c\x8a\xc1\x01\x0e\x09\xdc\x30\x70\x92\x05\x28\xa3\xa2\x90\x41\x0d\x1d\x33\x68\x9d\xc0\x58\x0d\x33\x80\xa6\xe3\xa8\x4a\x6b\x1a\xca\x6a\x04\xa1\x53\x0c\x43\xe1\x14\xc7\xd2\x2c\x86\x53\x00\xa3\x9f\xe2\xf1\x43\x37\x03\xf7\x3f\xf6\x10\x94\x9a\x45\xae\xf3\xeb\x6e\x4d\x60\x44\x57\xe4\xca\x38\xba\x7a\x15\x72\x01\x6a\x86\xc1\xb2\xb2\x7c\xc3\x14\xbd\x3b\x1c\x01\xa1\x0a\x8a\xe6\x46\x5e\x6a\x90\x32\x78\x9b\xe1\xed\x77\x91\xc7\xbc\x82\x91\xb1\x98\x30\xfd\x0f\x74\xe4\x53\x8f\xa7\x13\x5f\xbf\x60\xa8\x1c\xab\xa9\x38\x34\x34\x03\xc7\xa0\x0a\x21\xca\x90\x18\x4a\xa8\x38\xcb\x69\x3a\x64\x49\x95\xc3\x34\x94\xd4\x50\x02\x60\x14\x47\x12\x3a\xa6\x41\x92\xa6\x09\x8a\x43\x69\x5a\x27\x68\x03\x67\x37\x46\xf6\x19\xc6\x4e\x73\x2a\x8e\xe3\x34\x84\x38\x49\x90\x0c\xc9\xb0\x00\x63\x30\x8d\x24\x35\x96\x61\x58\x9d\x34\x08\x92\xa3\x0c\x15\x90\x1c\x00\xac\x4e\xd0\x28\xc1\x02\x02\x42\x9a\x21\x29\x55\x37\x08\x55\x7d\x8a\xe3\x1d\x46\x51\x1c\xc5\x70\x0c\xc1\x6d\x2d\xb6\x80\xb7\xc6\xaf\x58\x23\xa2\x3c\x54\xad\x32\x43\xd2\x5d\x37\x17\xfd\x55\x89\x18\xcc\xbc\x69\x6e\x51\xe4\x9b\x61\x01\xab\xe1\x75\x46\x60\xe8\x71\x44\x95\x39\xad\xac\xa3\x73\x3e\x18\xbf\x72\x6d\x7a\xc4\xae\x2b\x15\x8d\x8e\xc2\xa9\x91\x2f\x34\x73\xb2\x93\x47\x6b\x6a\x60\xf8\x6f\xad\x7e\xac\x61\xa5\x35\xa8\x0f\x97\x9b\x4f\x95\xfd\x3f\x49\x78\x0b\x0e\x7f\x2f\xf9\x56\x7b\x6b\x3b\x2d\xb4\xf5\xda\x25\x3a\x06\x33\x09\xd8\xd5\xa0\x22\x98\xb8\xc9\xae\x6a\x8b\x79\xb3\x99\x77\xf3\x66\x5e\x59\x9a\xad\x4e\xbe\x2c\x30\x73\xc8\xcd\x02\xab\x1a\x91\xd3\x46\xb9\x43\x7a\x4a\x59\xea\x55\x74\x12\x6b\x35\xaa\x0a\x33\xab\xce\x3d\x14\xe7\x49\x2f\x47\xb9\x1d\x95\x78\x8b\x92\xf6\x33\x2c\x5a\xac\x64\x59\xc5\xce\xa2\x45\xb4\xfa\x07\x6d\xef\xcf\x1c\x37\x5a\x34\xa1\x63\x14\x8b\x1b\x34\x45\x11\x00\x45\x71\x8e\x26\x39\x42\x57\x01\xad\xaa\x84\x4e\xd2\x84\x86\x42\x95\xd1\x48\x8c\xd1\x81\x81\x6a\x0c\xce\x10\x1c\x66\x68\x06\x4b\xe0\x06\x34\x54\x94\x82\x1b\x6b\xfc\x0c\xaf\xe0\x50\x1d\xd5\x09\x43\xa5\x39\x4a\x65\x20\x4a\xa8\x94\x86\xeb\x90\x61\x31\xc8\x00\x96\x25\x38\x0d\x63\x55\x5c\x27\x35\x06\x23\x0c\x15\x87\x38\x63\xe0\xac\xce\x01\x8e\xc3\x59\x1a\xe5\x68\xe2\x29\x9e\x1e\x77\x16\x4d\xee\x62\x70\x81\x7a\x95\xe5\xc5\xdb\xba\xec\x33\xa6\x2e\xf0\x4c\xad\xfa\x06\x27\xf2\x54\x13\xea\x3c\x5d\x1c\xb7\xb9\x72\xb3\xe3\x34\xc6\x82\x83\xe2\xac\x67\xf8\xdd\x05\xae\x05\x1c\xdd\x65\xfa\x66\x99\x9b\x94\x0a\x0a\xbe\xc4\xc3\x6a\x44\xe7\x89\xc6\x8c\xe3\x5e\xbb\xc3\xc9\xba\xb2\xe6\x57\x3e\x1b\x6b\x78\x63\xd1\x4a\x4a\xe3\xb2\x5c\x6b\xa9\x75\xef\xb5\x9c\xeb\x74\x72\xbd\xae\x20\xd6\x4a\x42\x3e\x8c\x8c\x32\xee\xc8\x18\xae\x69\x85\xb2\x8f\x55\x5d\x9c\x59\xb7\x0a\x6d\xb4\xd1\x62\xc0\x20\xcc\xf1\x8c\x52\x20\x5c\x13\x42\xcf\xa4\x96\xa3\x20\xec\x95\xa5\x7c\x10\x55\xf3\xb5\x86\x33\x9b\x7a\xa3\xea\x28\xb6\xd8\x7a\x86\xc5\x4a\x41\xd6\xa8\xff\xff\x6e\xb1\x17\x32\x90\x8c\xfb\x41\x0f\xe4\x33\xe7\x37\x13\x1e\x01\xbb\xb4\xdb\xfd\x18\xe6\xe9\x86\xf5\x03\x68\x17\xb6\x9b\x1f\x40\xbc\xb0\x31\xfc\xd1\x6c\x30\xb5\x39\x7c\x48\xa9\xf9\x92\xc8\x37\xeb\x4a\x45\x29\x52\x7d\x92\xe9\xca\x42\x81\xaa\x0b\xe5\x46\xbb\x26\x2b\xe4\xa0\xaa\x34\x79\x9c\x91\xbb\x3c\x51\x28\x0b\x0a\xdf\x25\x84\x62\xbb\xd7\x25\xc8\x61\x31\x99\xd1\xb6\x79\xd7\x72\xd9\x1c\xeb\xc5\x35\x37\x7b\x63\xed\x49\x11\x33\x7b\xa1\x39\xd3\x73\x83\x9e\xbe\x6c\x18\x4a\xa5\xb4\x2a\x8b\x9a\x14\x4e\xe4\x82\x16\x1e\xac\x2f\x9e\x00\x0a\xf1\xc7\x8d\x9b\x49\x16\x33\x35\xb0\xa5\x4e\x74\xbd\xc2\xca\x69\x61\xe2\xec\xf5\xad\x62\x4e\xde\xe6\x34\xde\xc9\xb3\x15\x86\x8c\xd4\x7c\x7b\x16\xad\x72\x8b\x3a\x97\xe4\x3c\x1a\xd7\x5f\xa9\xf1\xf5\xe6\xfe\x1f\x21\x06\x5d\xee\xff\x16\x79\x9e\x2b\xa4\xbc\x58\xe8\xe8\xed\x61\x53\x19\x89\x72\x57\x5d\xd2\xc5\x7c\x05\xac\xa1\x8d\x36\x49\x7d\x60\x4b\x75\xd9\x19\x98\x7a\xe7\x55\x22\xc3\xf6\xbc\x34\xaa\xc4\x70\x56\x11\x14\x6b\xd4\x50\xe8\x47\x75\x08\x46\x58\xd3\x68\x77\xb8\x49\x13\x5d\x93\x4c\xa8\xae\x67\xf3\x65\x65\x81\x86\x2a\x3a\x1b\x09\x06\xbe\xe8\x98\xdc\x88\x11\xd7\x34\xaf\x4e\xdc\xf1\x92\x8b\xaa\x20\xc0\x4c\x52\x5e\x82\x3e\x45\x35\x0b\xf5\xa1\x36\x6e\x2f\xc7\xa1\x19\x89\x9b\x05\xc6\xc9\x6c\xf1\xc9\x43\x43\x3c\x34\x34\xf5\xe3\xa1\x11\x85\x5c\x58\xcb\x8f\xd7\x6f\xc4\x4c\x0e\xbb\xbc\x81\x4b\xa3\xaa\xa1\x8a\x00\x75\x18\x3f\xaf\xe1\x2e\x81\x37\xaa\xa0\x5c\x79\xad\x88\xa5\xc5\x72\x3f\x34\xda\x49\xb4\xf9\xb0\xea\x6d\xbe\xc5\x79\xdc\x2b\x3b\x9f\xb2\x43\x52\x6a\x79\xec\x30\x2f\x95\x17\x40\x1a\xf2\x05\x49\x52\xa2\x96\xd8\x37\x8b\x84\xa0\xe6\x8a\xe2\x62\xbc\x6c\x16\x6d\xce\xe2\x75\x30\xcf\xf1\x35\xce\xa2\xbb\x85\xa1\x43\x0f\x0b\x58\x99\x2f\x73\xdd\xb7\x06\x56\xf6\x18\xd1\x8c\xac\x0e\xbf\x4c\x54\x7f\xd9\xcf\xb2\xee\x3e\xdc\xe1\x67\xbb\x3b\x10\xfb\xc1\x24\x29\x9d\xc4\x68\x82\x63\x68\x94\xc0\x75\x9c\x36\x50\xc8\x52\x86\xc6\xd2\x2a\xce\x00\x4a\x47\x21\xc4\x74\x8a\xa6\x30\x54\xc3\x21\x4d\xd1\x28\x43\x61\xac\x46\x42\x5c\x27\x71\x80\x71\x2c\x9e\x1e\xd4\xd8\xa0\xa5\xf8\xa3\x28\xf2\x94\x8d\x2a\x32\xee\xb6\xd6\x43\x49\x19\x0a\x4d\xbc\x60\x13\xd4\xa0\x41\xf0\x18\xa7\x99\xaa\xa4\x35\x96\x5d\x5c\x0a\xaa\x6b\xf4\xbd\x98\x7f\xe1\x6e\xc3\x87\x3b\x7f\xb8\xe3\xb0\xef\xfc\xee\x27\x3e\xc9\xf3\x83\xc8\xd9\xb1\x49\x48\x30\xf4\xcc\x27\x32\x90\x5c\x18\x2e\x3d\x7f\x3a\x03\x41\x30\x9b\xf8\x20\x80\x19\x48\x3d\x18\x84\x48\x57\x2c\x22\x8d\x44\x18\xf9\x85\x74\xe1\x2c\x84\x8e\x0a\x7d\x04\x47\x31\xea\x96\x86\x0c\xcf\xd7\x60\xa0\xcd\x3c\xd7\x85\xab\xd0\x06\x91\xab\x4d\x4e\x1b\x8a\x9f\xcf\xbb\x05\x2c\xc9\x05\xb7\xfb\x5f\x41\x76\xff\xff\x6f\xbc\x5d\xf6\x35\xb4\x1c\xf8\xf5\x27\x82\x26\xbb\x67\x5f\xb7\x3f\x78\xfa\xfa\x13\x49\xce\xc7\x5f\x4e\x40\xf0\xf5\x67\xf2\x74\x60\xfc\xe5\xbf\xb7\xc2\x06\x84\xb7\x09\x3a\x60\x15\xae\x02\xeb\xed\x46\x71\x1f\x06\xd0\x5f\xbc\x27\xfc\xe5\xdf\x37\xa9\x02\x04\x61\xfc\x58\x8b\xbe\xbd\xbd\x9c\xa1\x8a\x87\x73\xe4\x1b\x78\x6c\xa3\x2d\xf0\xb5\x89\xb5\xd8\x9e\xbc\x30\x24\x87\x31\xc0\xb6\x0a\x89\xd5\xe1\x7f\xfd\x89\x7c\x5d\x60\xd8\x3f\xd8\x3f\xe8\xd7\xed\x09\x2d\xf2\x7d\xe8\x86\x72\xdc\xb5\xaf\x3f\x11\xe2\xf8\x7b\x21\x7e\xf2\x68\xa3\xb7\xff\xbd\x57\xe4\x41\xa5\x7b\xc9\x0d\x30\x05\x39\x95\xd6\x0c\x8e\xd0\x08\x9d\x61\x08\x12\x65\x0c\x54\xd5\x09\x86\xa0\x20\xab\xa3\x38\x00\x04\x50\x49\x48\x43\x1a\x90\x1a\x8d\x19\x28\x86\xd3\x28\xca\x42\x52\x63\x34\x83\x51\x8d\x1d\xa3\x3d\xee\xc6\x8a\x8f\x06\x70\x7f\x26\xee\xfb\xc6\xe4\x8e\x4e\xfd\xfb\xe4\xfa\xc0\x05\xb3\x0d\x2f\x68\x10\x18\xc0\x51\x40\x70\x2c\x84\x0c\xa1\x41\x1c\xc7\x19\x0a\x02\x16\x63\x18\x86\xa5\x55\xa0\x51\x24\x4d\xd1\x06\x41\xe8\x9a\x46\x1a\x84\x01\x35\x1a\xd5\x29\x4a\xd7\x0d\x6c\xb3\x12\xff\xfa\x25\xa3\x85\x0b\x3a\x78\x74\x8b\xe9\xe3\x3a\xc0\x9e\xcf\xcf\x79\x51\x38\x8b\xc2\xcf\xed\xfb\x35\x0d\x3f\xdc\xeb\xff\xd1\x1a\xbe\xcd\xca\xfe\xea\xe0\xaf\x0e\xfe\xea\xe0\xaf\x0e\xfe\xea\xe0\xaf\x0e\xfe\xea\xe0\xaf\x0e\xfe\xa0\x0e\xe2\x4f\xff\xe7\xf6\xc5\x4b\xa0\xcd\xe2\xe7\xfb\xb3\x8e\xa7\xdd\x0a\xdd\x4c\xf6\x51\xea\xa2\xa3\x74\xb4\x05\xd0\xf2\xd5\x51\x47\x1f\x49\xcc\xa8\xa6\x18\x76\x9f\xd0\x44\x05\x5b\x0b\x41\x67\x49\x08\xf2\xa8\xbb\x74\xe5\xc3\x16\x95\x18\xff\x8b\x2a\xfd\xe2\xab\x8d\xf3\x6b\xd4\x61\x9b\x13\x63\x5d\x0a\xdc\x99\x2e\x46\xe5\xc1\xb8\x23\x16\x28\x7b\x54\xee\x8f\x56\x4d\xb9\x5f\x9b\x38\x87\x6d\x9a\xea\xe4\xc1\x6d\x9a\x7b\x76\x14\x04\x9e\x1b\xe6\x2a\xa4\x3e\x9c\x8b\x8c\x3e\x76\x5f\x67\x39\xb7\x97\x6f\xac\xfb\x36\x5a\x57\xc2\xca\x70\x92\xaf\xcb\xc5\x6a\x24\x2e\xa6\x18\x56\x1c\xfa\xb3\xe1\x78\x00\x57\x6a\xde\x2f\xf2\xc0\x16\xab\x76\xce\x0b\x6b\x1e\x98\x47\x53\x5c\x9c\x46\xd8\xc0\xee\x9a\x62\x34\xe3\x59\x59\x30\x77\x7c\x0a\xa3\x07\xef\x12\x08\xf7\x6c\x83\xb5\x5b\x83\x85\xd5\x2c\x0f\xe6\x66\x8e\x18\x8e\x49\xda\x98\xa1\xf9\x37\xcd\xae\xea\x62\x91\xe9\x16\x3d\xe3\xad\xb0\xea\xaa\x26\x43\x35\xf4\xce\x60\x4e\x0f\x9c\x81\x12\x0c\xf3\xf4\xaa\x5d\x9a\xb5\xd7\x63\x63\x2e\x77\xe7\xa5\xb9\x3f\x6b\x98\x94\x1c\x0e\xc6\x7d\x8f\x67\xe6\xed\x56\x61\x39\x8a\xe9\x50\x85\x3a\x21\xab\x1c\x21\xb7\x5e\xf1\xa8\xef\xbd\x16\x73\xd3\xd9\x94\x30\xbc\x0e\xf4\x4b\x35\x43\x15\xcd\xaa\x61\x59\x23\x47\xb0\x6d\xd9\xb2\x1b\x43\xa3\x5a\xf7\x83\xbe\x57\x03\x05\x11\x36\x9b\x8a\x1d\x96\xac\x5a\x7e\x69\x0e\x0a\x18\x17\xf5\xad\x05\x63\xb1\xb0\x5a\x78\xd8\xde\xf6\xfa\xe6\x97\x8f\xde\x95\x89\x8f\xfe\xc7\xec\xb7\x5d\x6d\x8b\x79\xd0\x1a\xe5\x6b\xb3\x56\x31\x12\x44\xba\x55\x5c\xac\x04\x06\x9f\x14\x4d\x7e\x22\x14\x99\xd7\x25\x56\x11\xf4\xe5\x30\x3f\x69\x33\xb8\x26\x4e\xc6\xc6\xc8\x2c\x0f\xe7\x0b\xb3\xb0\x18\x45\x53\xd3\x9e\x45\xb6\x19\x76\x96\x42\xbe\x1f\xbc\xe9\x1d\xba\xb9\x24\x65\x6f\xda\x8e\xb7\x31\x05\xa7\x1e\x44\xf9\x56\x05\x2e\x22\x01\x95\xc4\xc0\x73\x1b\xb4\x14\x75\x96\xd2\x52\xf4\x06\xb6\x88\x6a\x54\x69\x84\x4d\x4b\x6a\x4f\x5d\x1f\x76\x90\xf9\x1a\xfd\x0a\x2d\xe2\xd5\xf1\x2a\x6c\xaf\x64\x8b\x79\x68\x6a\x04\xd3\x52\xc2\x72\xad\xf6\x36\x1c\xb0\xcb\x81\x35\x16\x40\x21\xa2\x64\x2a\x6e\x64\x7c\xd8\xd1\x16\x4e\xb7\x3d\x0f\x1f\x47\xf1\xdf\x83\x41\x23\x71\x34\xbe\x80\x45\x82\x5e\xf6\x7a\x91\x59\x5f\xb4\x43\x91\x11\x26\x15\x99\x68\x40\x4e\x1f\xb4\x8c\x52\x25\x57\xb5\xa8\xea\xa2\xdf\xcc\x8d\xf9\x90\x21\xf2\xfb\xe3\x80\x57\xda\xb7\xdf\x16\xb8\xa9\x53\x1b\xe2\x73\x62\xc1\xb4\x8d\x35\xdb\xaa\xc3\xa9\xa4\x62\xbd\x5e\x85\xb2\x56\xf3\x69\x05\x15\x3c\x53\xf1\x9b\x21\x63\x36\x31\x1a\x6f\xab\xd3\x09\xae\x77\x7b\x7d\x03\x8a\xde\x42\x43\x5b\x3c\x30\x26\xa2\xb2\x0a\x27\x03\xde\x0e\xe4\xe8\xd5\x16\x9c\xf5\xab\xb0\xe5\xfb\x07\x77\x1c\x2f\x3c\x49\xfc\xd1\x1d\xc7\xd4\xd3\xc4\x9f\xf1\xa4\x10\xf6\x8c\x3c\xf2\x30\xd4\x53\xbf\x2b\x3e\x3d\x23\x1c\x8e\x13\x04\x83\xa3\x04\xcd\x52\x24\xc3\x50\x2c\xca\xc4\x4f\xaa\x60\x27\x8f\x15\x5d\xd1\xce\xa5\x87\x50\x3f\xac\x9f\xf4\x83\xa8\x87\x3d\x59\x95\xe0\x58\xa8\x92\x00\xb2\x1c\x43\xd1\x04\x4e\xd1\x24\xa1\x01\x1d\xc7\x34\x8e\x84\x18\xa1\x1a\x1a\xca\x90\x2a\x81\x13\x10\xb2\x04\xc4\x48\x4c\x35\x18\x14\x03\x94\xce\xa1\xa4\x81\xed\x1e\x69\x38\x9a\xf1\xea\x27\x16\x2f\x58\x79\x01\x95\xd1\x6a\x69\x1d\x4e\x96\x0d\xcc\x1e\xa1\x60\x3d\xf3\x30\xae\x51\x5e\x2d\xe4\xc2\xba\x49\x85\x82\xa4\x15\x06\x8b\x65\x91\x5b\x12\x66\xe8\x37\xdd\xf1\x69\x24\xc9\x3a\x2e\x3e\x1a\x13\x5b\x68\xe1\x91\xf6\x47\xf9\xdc\xd9\x8c\x78\x5b\xfb\xe7\xf7\x74\xb2\xf5\x6e\x70\x8c\x06\x0c\x03\xa8\xac\x86\xd1\x28\x4e\x00\x82\x61\x59\x12\xa3\x29\x4d\x45\x55\xc2\x30\x30\x00\x70\x1d\x18\x24\x8a\xa2\x06\x34\x48\x4e\xc7\x31\x68\x68\x2c\xc9\xe8\xba\x6a\xa8\x10\x24\x7a\xc7\xcf\xf5\xfe\x5f\xea\xf7\x67\xe9\x9d\x25\x0f\xd7\x67\x3e\x1c\xf2\xa0\xde\x55\x9d\x64\x69\x5d\xd5\x75\x14\xd7\x49\x1a\x65\x31\x86\x66\x30\x8d\x04\x14\x60\x20\xa7\xd3\x90\xa5\x29\x0d\xe0\x9c\xa6\x92\x18\xa4\x71\x9d\x01\xc0\x60\x50\x80\x1b\x10\x52\x2a\x41\xeb\x70\xfb\xc0\xc3\x55\xbd\x17\x22\x8f\xf0\x42\x92\x9a\x17\x5a\xd2\x6a\xd6\xce\x13\x5e\xb9\x91\x7b\xc3\x98\xce\xda\x0a\x30\xdb\xa8\x17\x47\x4e\x7b\x68\xfa\x51\x37\xd7\x8b\xe5\xab\xfd\x42\x6e\xdb\x29\xf3\x92\x6e\xdf\xd5\xbb\xf8\x58\xfb\x4d\xed\xbe\xf6\xaf\xde\x48\xcb\x7e\x34\xfc\xe3\x81\xeb\x4f\x47\xad\x92\xcc\x96\xdb\x8b\xf6\x54\xad\xe1\x65\x9e\x18\x0e\x5e\x3b\x7e\xcd\x79\x55\x50\xd4\x28\xb1\x81\x5c\x61\x1c\x54\xea\x2c\xab\xc3\x3c\xaf\x10\xfc\x7e\x9e\x8f\x8f\x2b\xf3\x7c\x72\x84\xaa\xa9\x74\x68\x89\xf1\x44\x19\x95\xdb\xb9\xe5\xa8\x5b\xe0\xde\x94\x85\x32\xe8\x11\x2b\xab\x65\x8d\xa2\xae\x8a\x89\x0b\xa7\x2d\xc3\x38\x8f\x2a\x0c\xf8\x45\xfa\x29\x3e\x21\xf1\x8e\x78\x90\x47\xaf\x6d\xad\xd5\xc3\x4b\xd4\x64\xee\x0a\x8e\x59\x2a\x41\x93\xab\xb2\x36\xa9\x61\x92\xdb\xb7\x57\x53\x5b\xb2\xcb\x5c\x30\x1f\xfb\x28\xc7\x60\x45\xba\x29\x0f\x0d\x98\x77\xc8\xe9\xac\x18\x56\x72\x41\x05\xb5\xb0\xb9\x6c\x85\x14\x8f\x56\xd7\x43\x57\x9d\x8c\xe4\x21\xe5\x6d\xe6\xa8\x27\xfc\xcd\x69\x86\x35\xba\xaa\x0f\xeb\xf6\x58\x5c\x87\x15\xcd\x6e\x4a\x4c\x9e\xd7\xe5\xfa\x2b\xe3\xb5\x26\x6d\x95\x5b\x96\x6c\xbc\xdd\x5b\x1d\x1e\x7e\xb9\xa2\x83\x83\x65\x1c\xdd\xa9\x4c\xc9\x26\x4f\xd7\xf0\xff\xbd\x68\xc1\x7f\x42\xb4\x2a\xf6\x86\x42\xf0\x40\xfb\xfc\x49\xfb\x1f\xc8\x03\x63\xfd\x3d\x12\x35\xb2\xa2\xe5\x9f\x9e\xa2\xee\x77\xb2\xc2\x09\xfb\x33\x83\xf3\xe7\x0d\x5a\x86\x4d\x60\xbe\xae\xea\xa0\xdf\xe2\x68\xe1\xcd\x08\x38\x88\x6a\x9e\xdf\x18\x2b\x6f\xc2\xb0\x3a\x2d\x7a\x35\x66\xba\x98\xc6\x9a\xbb\xe2\x64\x82\x53\x9b\x75\xcd\x85\xbf\xac\x35\x71\x54\x29\x34\x8d\x91\xa1\x04\x25\x49\xea\x87\xcb\x11\x00\x92\x31\xef\x46\xf4\xda\xa9\x3a\xb6\xe8\x80\x5c\x45\xa1\x2b\x4c\xc5\x34\xd5\xfe\xb8\xee\x69\x6d\x7d\xcc\x91\x95\x3a\x6f\xd4\xf4\x36\xdf\x98\x2b\x6a\xa5\xc9\xac\x83\x25\x84\xf5\xc2\xc6\x11\x72\xca\x7a\x91\xf3\x5f\x85\x51\xa1\xf9\x0a\x2b\xed\xa1\x22\x17\xde\xf2\xab\xb9\x85\x2f\xda\xbc\x98\xe3\xaa\xe8\x84\x61\x27\x65\x42\xcd\xe5\xbc\x3d\xb1\xff\xbe\x93\x3d\x6a\xe4\x0f\x3a\xd9\x9c\xc9\xf7\x44\xed\x33\x9d\xec\x3f\x38\x35\xdf\xe4\x64\x9f\x9c\x8f\xfc\x5d\xb1\x6e\x56\xac\xb1\x53\x2c\xfa\x93\x70\xa1\xf3\x61\xc7\x34\x95\xf1\x6a\x55\x1b\xba\xb4\xae\x7a\x63\xcd\x9b\xad\xd1\xb2\x23\x2b\xf3\x85\x56\x93\x73\x94\xda\x08\x0f\xf6\x95\xed\x70\xa3\xe3\x41\x3d\x72\xb8\x58\x77\x49\xee\xb5\x3c\x48\xdd\x11\x90\x5e\xdd\xc3\x58\x5c\x38\x2e\xe4\xe3\x47\x0e\xff\x29\xed\x5f\x08\x36\xb7\xb4\x5f\xe7\x3f\x37\x17\xbd\x6b\x0d\xf2\xd9\xed\x9f\xeb\xe3\x7a\xc0\x11\x0f\x32\x1f\x6d\xbf\x38\xe8\xa3\x5b\x70\x79\x48\x16\x51\x38\x69\xd2\xfc\x9a\x2b\xa0\xad\xa0\x24\x99\x0b\x0d\x63\x30\xac\xcf\xb1\xa3\x57\xd2\x91\xa7\x0e\xd7\x66\xa8\x69\x81\x58\xa4\x86\xe2\xe0\x70\xcb\x53\xfd\x5d\xcd\xd5\xaf\xfc\xec\xf0\xa3\x09\xfb\xc9\x4f\x0f\x77\xb1\x2e\x9d\x71\x27\xbf\x40\x38\xf8\x52\x46\xb0\xbc\x8c\xb2\x4f\x29\x92\xdf\x2d\x9c\xa1\x5c\x2c\x95\x76\x5e\x41\x72\x5f\x22\x6e\xf7\xf3\xc4\x77\xba\x99\x2e\x65\x19\x17\xb0\x4c\x21\xc6\xb7\x10\x78\x51\xcc\x28\xea\xb4\x6f\x10\x69\x75\x2a\x75\xbe\x33\x42\x6a\xd2\x08\xf9\xb6\xff\xbd\xfb\xf3\xbe\x98\xda\xc5\xd2\x66\x27\x45\x35\x3f\x8b\x78\x70\x85\x75\x70\x8d\x72\x56\xa9\xa9\x43\x1d\xd1\x87\xe9\xa9\xc0\xcd\x62\xb6\x6b\xe0\x98\x54\x52\xdd\xe2\x7a\x1d\xaa\xab\x05\x54\x1f\xa6\x7b\x04\x9e\x45\xfc\x4a\xeb\x48\xbf\x51\x69\xf7\x25\xe4\xf0\x93\xd7\x0f\xf5\xe4\x73\xf4\xfd\xc1\x0e\x9c\x8f\xc1\xa1\x34\xd7\x85\xb2\x52\x47\x65\x77\x1f\xe6\x9b\x80\x65\x11\x4d\x35\x73\xcc\x70\x5b\xec\x28\xbb\xc8\x51\xba\xc6\xf0\xc3\xe4\x62\xac\x2c\x6e\x87\x46\x8e\xa9\x59\xb3\xe7\xb8\xf4\xd1\xd5\xa2\x3e\x19\xb5\x95\x1f\x67\x9a\x82\xcc\x24\x7c\xda\x64\xd6\xa0\x5f\xa8\xfc\x73\x54\x61\xfa\x33\x98\x06\x91\x7a\x81\xe3\xae\x99\x63\x76\x71\xd1\xa0\x2b\x65\x80\xce\xca\x6a\x3f\x4c\xf2\x00\x98\x45\xf4\xa4\xb9\x9b\x62\x58\xea\x21\xf2\xd3\xe2\xe2\x0f\xb3\x3d\x00\x66\xb1\x3d\x69\xee\x98\xed\xae\x98\xce\x95\x62\x35\x67\x45\xd6\x1f\xe7\xbb\x07\xcc\xe4\x7b\xdc\xdc\x31\xdf\x7d\xbd\x9b\x2b\x75\x6c\xce\xaa\xcd\x3f\x4c\xf8\x00\x98\x45\xf8\xa4\xb9\x8b\xa9\x41\x52\xc7\xe6\xf9\x50\xa4\xe6\x6a\xa1\x92\x8c\x6a\xfc\x8f\xf7\x23\x05\x99\xd9\x93\xd3\x26\xb3\xa2\x44\x00\xe7\xcf\xbb\xca\x1c\x97\x8b\x88\x9c\xbe\xa5\xe0\x13\xb8\x5f\x25\xfe\x10\xeb\x93\x14\x35\xeb\xdd\x0d\x0f\xf3\x3f\x06\xcd\xea\x44\x46\xb3\x17\x7b\x92\x2e\xf0\x71\x29\xd5\xdc\xbf\xd7\x62\xcb\x3d\x7e\x0b\xc6\x6d\xa5\x47\x92\x17\x66\x9c\xe0\x20\xcd\xc6\x21\x8b\xed\x77\x2b\x8d\x12\xa2\x86\x3e\x84\xc8\xae\xce\xd0\x77\x64\x58\x96\x3a\x12\x92\xae\x3b\x74\x28\x26\x71\x9e\x68\x1e\xbf\xaa\xe3\x5e\x96\xc7\x30\x1b\x92\xdb\x3c\xe5\x88\x62\xba\xf8\xe4\x73\xba\xd4\xe4\x73\x52\x02\xf2\x8c\xdd\xe1\x7d\x23\xf7\x12\xdb\x23\x6c\x38\x1d\x1c\xe3\x88\xd6\xe5\x54\xf1\xe8\xcd\x28\x8f\x50\xd8\x81\x24\x2c\x52\x01\xe6\x46\x22\x47\x2f\x73\xb9\x97\x48\x1a\x64\x43\xe4\x38\x11\xbe\x91\xc9\xd1\x0b\x68\xee\x65\x92\x06\xd9\x30\x49\xfd\x54\xef\x76\x1a\x47\x2f\xcd\x79\x80\x49\x1a\x67\x4b\x66\x97\x25\x1c\x93\x49\x17\x98\xbb\x16\xbe\x1e\x63\x74\x0a\xb4\xa1\x74\x12\x1b\xdf\xd5\xd1\xa5\x77\x45\x21\x9a\xe7\xcc\x6c\x18\xc2\xb8\xd9\xff\x17\x00\x00\xff\xff\x05\x91\xe3\x65\x58\x6a\x00\x00") - -func asset_stat_trustlines_1CoreSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_trustlines_1CoreSql, - "asset_stat_trustlines_1-core.sql", - ) -} - -func asset_stat_trustlines_1CoreSql() (*asset, error) { - bytes, err := asset_stat_trustlines_1CoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_trustlines_1-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdc, 0x1a, 0xe2, 0xd0, 0x43, 0xb2, 0xba, 0x66, 0x56, 0xad, 0xec, 0xc, 0x15, 0x96, 0x2a, 0xa2, 0x14, 0xcd, 0x99, 0xc7, 0xd9, 0x61, 0xfb, 0xea, 0x83, 0x4f, 0x34, 0xfb, 0xe6, 0x90, 0x40, 0x97}} - return a, nil -} - -var _asset_stat_trustlines_1HorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x7d\x79\x6f\xe2\xc8\xf3\xf7\xff\xf3\x2a\xac\xd1\x4a\x99\x51\x32\x13\xdf\x47\xe6\x37\x2b\x19\x30\x47\x00\x73\x27\x90\xd5\xca\xf2\xd1\x36\x4e\xc0\x26\xb6\x21\x21\xab\xef\x7b\x7f\xe4\x0b\x6c\xe3\x8b\x63\x66\xf7\x41\xa3\x51\xb0\xab\xab\x3e\x55\x5d\xdd\xd5\xd5\xdd\x74\x7f\xfb\xf6\xe9\xdb\x37\xa8\x6f\xda\x8e\x66\x81\xd1\xa0\x03\x29\xa2\x23\x4a\xa2\x0d\x20\x65\xbd\x5c\x7d\xfa\xf6\xed\x93\xfb\xbe\xb6\x5e\xae\x80\x02\xa9\x96\xb9\xdc\x13\x6c\x80\x65\xeb\xa6\x01\x31\xdf\xc9\xef\x48\x84\x4a\xda\x42\x2b\x4d\x70\x8b\x27\x48\x3e\x8d\xb8\x31\x64\x3b\xa2\x03\x96\xc0\x70\x04\x47\x5f\x02\x73\xed\x40\x3f\x21\xf8\x87\xf7\x6a\x61\xca\x2f\x87\x4f\xe5\x85\xee\x52\x03\x43\x36\x15\xdd\xd0\xa0\x9f\xd0\xd5\x64\x5c\xa7\xaf\x7e\x84\xec\x0c\x45\xb4\x14\x41\x36\x0d\xd5\xb4\x96\xba\xa1\x09\xb6\x63\xe9\x86\x66\x43\x3f\x21\xd3\x08\x78\xcc\x81\xfc\x22\xa8\x6b\x43\x76\x74\xd3\x10\x24\x53\xd1\x81\xfb\x5e\x15\x17\x36\x88\x89\x59\xea\x86\xb0\x04\xb6\x2d\x6a\x1e\xc1\x9b\x68\x19\xba\xa1\xfd\x08\xb0\x03\xd1\x92\xe7\xc2\x4a\x74\xe6\xd0\x4f\x68\xb5\x96\x16\xba\x7c\xe3\x2a\x2b\x8b\x8e\xb8\x30\x5d\x32\xb6\x33\xe6\x86\xd0\x98\xad\x74\x38\xa8\x55\x87\xb8\x69\x6b\x34\x1e\x41\x3d\xbe\x33\x0b\xe8\xbf\xcf\x75\xdb\x31\xad\xad\xe0\x58\xa2\x02\x6c\xa8\x36\xec\xf5\xa1\x6a\x8f\x1f\x8d\x87\x6c\x8b\x1f\x47\x0a\xc5\x09\x05\xd9\x5c\x1b\x0e\xb0\x04\xd1\xb6\x81\x23\xe8\x8a\xa0\xbe\x80\xed\x8f\xdf\x21\x50\xf6\xfe\xfa\x1d\x22\x5d\xbf\xfa\x7d\x0a\xfa\xd2\x8e\xd7\xce\x07\xe8\x3a\x72\x9e\xb0\x08\xd5\x9e\xb9\x47\xde\xe2\x6b\xdc\x34\x42\x19\xb0\xf5\x50\x09\x40\x55\x81\xec\xd8\x82\xb4\x15\x4c\x4b\x01\x96\x20\x99\xe6\x4b\x7e\x41\xdd\x50\xc0\xbb\x10\x51\xce\xb0\x45\xcf\xd1\x6d\xc1\x34\x04\x5d\x39\xa6\xb4\xb9\x02\x96\xb8\x2b\xeb\x6c\x57\xe0\x8c\xd2\x7b\x24\x67\xa1\x38\xae\xec\x02\x28\x1a\xb0\xbc\x82\x36\x78\x5d\x03\x43\x3e\x4a\x85\x48\xf1\x95\x05\x36\xba\xb9\xb6\x83\x67\xc2\x5c\xb4\xe7\x27\xb2\x3a\x9f\x83\xbe\x5c\x99\x96\xdb\x1c\x83\x3e\xf5\x54\x36\xa7\xda\x52\x5e\x98\x36\x50\x04\xd1\x39\xa6\x7c\xe8\xcc\x27\xb8\x52\xd0\x2e\x4f\x00\x1d\x2d\x29\x2a\x8a\x05\x6c\x3b\xbf\xf8\xdc\xb1\x14\x2f\xee\x08\x0b\xd3\x7c\x59\xaf\x4a\x50\xaf\x8a\x20\xf9\x54\xa2\x6e\x1d\xc9\x38\xec\x74\x4b\x17\x70\xfb\x09\x55\x05\x56\x39\xd2\x90\xfd\x09\x45\x02\xb3\x96\x2b\xe4\x75\xad\x47\x08\x89\x76\xc5\x45\x25\x56\x6e\x81\xb9\x53\x58\x03\x76\xac\x03\x92\xb6\x85\x6e\x34\xdf\xb5\xf4\x32\xc4\xa6\x8f\xc3\x2c\x24\xd4\x6d\x47\x70\xde\x85\x55\x31\x4b\x97\xd2\x5c\x95\xa5\x04\x65\xc9\xc2\x50\x92\x4f\x2c\x85\xcd\xbd\x90\xac\xb8\x17\x93\xb6\xe5\x2a\xd3\x8f\x91\xae\xb5\x6d\x7b\x5d\x24\x79\x47\x2c\x9b\x0a\x38\x72\x5c\xb0\x73\x83\x95\x68\x39\xba\xac\xaf\x44\x23\x37\x78\x17\x15\x15\x56\x47\x8e\x4d\x76\x11\xed\x58\x04\xe9\x05\x8f\x96\xef\x19\xaf\x8c\x3c\x9f\xf0\x97\xf3\xf7\x2b\xd3\xad\xc9\xe0\x4f\x37\x3e\x84\x43\x3f\xcf\x19\x84\x92\x08\x34\xd3\x5a\x09\x4b\x5d\x0b\x06\x0c\x39\x10\x12\x94\xa5\x75\x3c\x7e\xbc\x97\xc7\xb9\xac\x73\xfa\xa5\xab\xbd\xce\xa4\xcb\x43\xba\xe2\x4b\xae\x71\x75\x76\xd2\x19\x97\xe4\x9d\xe1\x74\x17\xe0\x1c\x54\x77\x3e\x27\xef\x5b\x79\xf5\xc3\x28\x3d\xe2\x06\x13\x8e\xaf\x9e\x60\x33\x77\x9c\x6d\x83\xd7\xa3\x25\xc7\x98\x94\x2e\xad\x80\x92\xb4\xfb\xd1\x6c\x69\x0d\x33\x5a\xfd\x31\xfa\xa5\xb3\x28\x57\x36\x18\xf7\x95\x23\x0e\x06\x79\xa5\x75\x0b\x7a\x80\x63\x74\xf1\x8b\x94\xa4\x0d\x86\x7f\xe5\xf1\x84\xe3\xc5\x32\x88\x12\x7d\x48\x3e\x71\xa4\x4b\x08\x08\xd9\x46\x63\xc8\x35\xd8\x71\x0a\xf1\x52\x77\x33\x0e\x5d\x06\x5f\x8c\xf5\x12\x58\xba\xfc\xd7\xdf\x5f\x4b\x94\x12\xdf\x4f\x28\xb5\x10\x6d\xe7\x8b\x68\x6c\xc1\xc2\x9b\x8a\x29\x51\x42\xd5\xad\xd4\x22\xf5\x09\x5f\x1d\xb7\x7a\x7c\x8e\x3e\x82\xa8\x69\x7b\x74\x37\xd0\x01\xd0\x1c\x1e\xa1\x76\x67\xf0\x70\x75\xf5\x8a\xef\xc1\xdf\x40\xc7\x28\xe2\xa9\x5e\x82\x03\x37\x1d\x73\xfc\x28\xc1\x62\xb1\xd2\xec\xd7\x45\xe8\x8b\xd5\x26\xd7\x65\x0f\x24\xfc\xf8\xe4\xcf\xc2\xf1\xe2\x12\xdc\x85\xcf\xa0\xf1\x76\x05\xee\x82\x22\x3f\xa0\x91\x3c\x07\x4b\xf1\x0e\xfa\xf6\x03\xea\xbd\x19\xc0\xba\x83\xbe\x79\x93\x73\xd5\x21\xe7\xd6\x57\xc0\x39\xe4\xf7\x29\xc6\x31\xfe\x32\x60\x5c\xed\x75\xbb\x1c\x3f\xce\xe1\xec\x13\x40\x3d\x3e\xce\x00\x6a\x8d\xa0\xab\x70\xda\x2d\x7c\x66\x7b\x4c\xae\x92\x92\x43\xf5\x03\x99\x3b\x0b\x15\xea\x13\xb3\x25\xdf\x1b\x27\xec\x09\x3d\xb6\xc6\xcd\x1d\xac\xe8\xfc\x5b\x4c\xfc\x9e\x4b\x02\xc8\x31\xca\x1f\x30\xf1\x0c\xd0\xef\xdc\xae\xb4\xd1\xa0\x03\xad\x2c\x53\x06\xca\xda\x12\x17\xd0\x42\x34\xb4\xb5\xa8\x01\xcf\x0c\x25\xe7\x0b\xa3\x70\x8b\x1d\x2d\x80\x1f\xfa\xea\x1e\x7f\x58\xb7\x69\xb6\xdc\x79\x76\x21\x7f\x68\xc8\x8d\x27\x43\x7e\x14\x79\xf6\x09\x82\x20\xa8\xc3\xf2\x8d\x09\xdb\xe0\x20\x4f\xfb\x6e\x77\xe2\xf7\x77\xa3\xf1\xb0\x55\x1d\x7b\x14\xec\x08\xfa\x43\xf8\x03\x1a\x71\x1d\xae\x3a\x86\xfe\x40\xdc\x6f\xc9\xda\x28\x6c\x88\xe7\x69\x57\xc4\xfe\x62\xca\xa1\x69\xca\x95\xe9\xa9\xce\xd3\xaf\x84\x84\x9d\x8a\xbb\x47\x27\x69\xf8\xe5\x13\x04\x55\xd9\x11\x07\x3d\x36\x39\x1e\xfa\x03\xf9\x0b\xf9\xfb\xf6\x0f\xe4\x2f\xf4\xef\x3f\xff\x40\xbd\xbf\xd1\xbf\xd0\xbf\xa1\xb1\xff\x12\xe2\x3a\x23\xce\x35\x0a\xc7\xd7\xbe\xa6\x5a\xa6\x44\x1c\x38\xd3\x32\xc5\x12\x7e\xb5\x65\xfe\xef\x14\xcb\x1c\xc6\xd4\xc0\x0e\xbb\x38\x5c\xce\x10\xfb\xb0\x7d\xc0\xd1\x43\x0c\x41\x23\xd7\x56\xd0\xcf\x7d\x0f\x70\xe3\x3f\x1e\xcf\xfa\x1c\xf4\x33\xda\x22\xbe\xa6\xb5\xda\x8b\x62\x4c\x32\x4c\x40\x0c\x9b\x71\x79\x84\xa9\x43\xa0\x73\x51\xa6\x31\x4d\x20\x8d\x35\xc8\x38\xdc\xbd\x97\x1d\xa2\x4d\x1b\xe6\x9d\x8d\x36\x85\x69\x12\x6d\xb4\x91\xe4\xa2\x75\x23\x97\x02\x54\x71\xbd\x70\x04\x47\x94\x16\xc0\x5e\x89\x32\x80\x7e\x42\x57\x57\x3f\xe2\x6f\xdf\x74\x67\x2e\x98\xba\x12\x59\x4a\x8b\xe9\x1a\x1d\xff\x06\x2a\x7a\x0d\xac\x9c\x7a\x7e\x5b\x8c\x26\xdf\xbe\x46\xba\x02\x49\xba\xa6\x1b\x8e\x37\x30\xe0\x27\x9d\x8e\xaf\x8e\xb8\x74\x87\xf1\x90\x3c\x17\x2d\x51\x76\x80\x05\x6d\x44\x6b\xab\x1b\x5a\x82\xcc\x58\x2f\x77\x43\x7e\x48\x37\x1c\xa0\x01\x2b\x41\xa2\x2e\x44\xcd\x86\xec\xa5\xb8\x58\x1c\x8a\x71\xcc\xe5\xe2\x50\xc8\x17\x94\x20\xbe\xee\x28\x0f\xab\x3d\x99\x37\x9c\x6a\x8e\xe4\x6c\xc7\xce\x24\x0e\x78\x3f\x30\xc8\x6a\xb5\xd0\xbd\x39\x7b\xc8\xd1\x97\xc0\x76\xc4\xe5\x0a\x72\xeb\xcc\xfb\x0a\x7d\x98\x06\x38\x04\x9a\x95\x15\x85\xe3\xd1\x20\x9d\x2a\x87\x79\x97\x7c\x65\x70\x0d\xdc\x90\x1d\x8e\xfd\x11\x1d\xe2\x3d\x68\xf1\xd5\x21\xe7\x0d\xbf\x2a\xb3\xe0\x11\xdf\x83\xba\x2d\xfe\x81\xed\x4c\xb8\xdd\x77\x76\xba\xff\x5e\x65\xab\x4d\x0e\x42\x8a\x94\x39\xd9\xec\x49\x46\x07\xae\x18\x4c\x7a\x40\x06\x78\x77\x36\xe2\xe2\xcb\x55\x86\xc6\x57\x77\x77\x16\xd0\xe4\x85\x68\xdb\x5f\x93\xd5\xe5\xaf\x55\xa4\xf8\x16\x89\x7f\xcd\xa9\x28\x3f\x37\x3e\x5b\x33\x7f\x46\x67\xa7\x57\x7a\xcb\xd8\xcf\xd5\xa5\xc3\x4c\x25\x97\x4d\x25\x8d\x1c\x41\xd3\xc9\xfd\xe9\xbf\x94\x02\x04\x99\xd7\xc2\xd2\xa7\x17\x2e\xe4\xb6\x51\x9e\xbf\xcd\x69\xf3\x14\x81\x7a\x8f\x3c\x57\x83\x2a\xb3\x02\x8d\xfc\x19\xba\x7c\x85\x76\xbc\x12\xaf\xbf\xeb\x4a\x16\xb6\x70\xce\xe7\x5c\xaf\x0b\xf8\x04\x6e\x97\x68\x33\x42\x56\x4f\x7f\x38\xc5\x95\x45\xf9\xd9\x5b\xf8\xf8\x9c\xe1\xcd\x9e\x1f\xa7\xbf\x52\x80\x23\xea\x0b\x1b\x7a\xb6\x4d\x43\xca\x76\xb6\x70\xa2\xec\x5c\x3b\x04\x7c\x02\x3b\x84\xeb\xd6\x19\xd8\x22\x8b\xc9\xa5\x5a\x61\xda\x3a\x76\x7a\xc1\xc0\x2c\x91\x99\x51\xaf\x22\x76\x38\xc2\x5e\x0e\x4e\x48\xd8\x57\x44\x39\xfa\xdd\x62\x72\x22\x30\x99\x6b\x67\x1f\x9b\x92\x65\x2c\x20\x3a\x85\x85\x7c\xda\xf5\x4a\x29\x4d\xbb\x73\x9d\xe0\x6b\x62\x9d\xfd\x40\x17\xe4\x60\x3c\xe0\x88\x0b\x41\x36\x75\xc3\x4e\xf7\x41\x15\x00\x61\x65\x9a\x8b\xf4\xb7\xde\xca\xa7\x0a\xb2\xea\xda\x7b\x6d\x01\x1b\x58\x9b\x2c\x12\x77\x1c\xea\xbc\x0b\xde\x30\x49\xff\xc8\xa2\x5a\x59\xa6\x63\xca\xe6\x22\x53\xaf\x64\x1d\x85\xce\x02\x44\x05\x58\xde\xf0\xc2\x7f\x6e\xaf\x65\x19\xd8\xb6\xba\x5e\x08\x99\x8e\x12\x28\x2e\xea\x0b\xa0\x64\x53\x65\x37\xab\x8c\xb9\xeb\x73\x5b\x59\xc6\x7a\x48\x41\xcc\x2b\xdf\xdb\x14\xf7\x5f\xc7\xaa\x7c\xd9\x30\x96\x2b\xe3\x77\x85\xb5\xa3\x14\x3d\x33\xcc\xe5\xca\x3a\x0c\x7b\xe9\xe4\x39\x61\x30\xb2\xb2\x73\x31\xdf\x2c\x4a\x73\xe2\xbb\xaa\x32\x52\x21\x77\xe4\x2f\xfb\xaa\x78\x11\xf0\xcc\x00\x18\xb4\x7c\x73\x6d\xc9\xbb\x6d\x1a\x19\xa1\x27\xec\x4e\xae\xae\xee\xee\xb2\x53\xb1\xec\x76\x10\x2c\xac\x9d\x6b\xce\x60\x2f\xe0\x97\x8b\x8e\x17\x82\x2e\xf1\x94\xe8\xe5\xed\x85\xc9\x14\x9b\xd8\x89\x98\x47\x14\x6c\x8e\xcc\x23\xf1\xf3\xe0\x54\x82\xc3\x3d\x9d\x05\x74\xb9\xe2\x76\x54\x39\x12\x3d\x48\xba\x2d\xd8\x60\xb1\x00\x16\x24\x99\xe6\x02\x88\x46\x18\x93\x74\x19\x08\x46\x2c\xfe\xfa\xcf\xe2\x31\x79\xbf\x9b\x48\x48\x44\xeb\xd8\x7e\xa6\xe4\xcb\xc8\x32\x7d\xea\xce\x4f\x0f\xb5\xe0\xed\x0d\x86\xaa\x4d\xae\xda\x86\xbe\x7c\x89\x5a\xf0\x4f\x08\xfe\xfa\xb5\x88\x55\x5a\xf1\xd0\x68\xff\x77\x60\xc7\x12\xfc\x62\x36\x4d\xb0\x4f\x18\xdc\x03\x98\xdb\x94\xd2\x57\xb8\x2f\xd0\xb8\xd2\xf7\x2c\x94\x8c\xa4\x65\xba\xb0\x73\x62\x69\xd1\xfe\x80\xcb\x44\xd3\x02\x29\xbf\x2b\x9e\x1e\xa9\xec\x99\x11\xb5\x40\xda\x61\x4c\xcd\x2a\x90\x13\x55\x63\x7b\x42\x2e\xe8\xab\xa1\x7f\x46\x21\x95\x4e\xa2\x82\xbe\xbf\x20\x35\x2b\x1b\x78\xf3\x63\x68\x2a\xed\x5e\x74\x6a\x7b\x71\xb3\x80\xec\x34\x22\x2b\x41\xfb\x57\x52\x2c\xe7\x5d\x00\xc6\x06\x2c\xcc\x15\x48\x9b\xb6\x74\xde\xdd\x84\x67\xbd\x70\x32\x5e\x2e\x81\x23\x66\xbc\x72\x53\xad\xac\xd7\xb6\xae\x19\xa2\xb3\xb6\x40\xda\x0c\x1b\x43\x7e\xfd\xeb\xef\xfd\xd8\xe5\x9f\xff\xa5\x8d\x5e\xfe\xfa\x3b\x69\x73\xb0\x34\x33\x26\xc3\xf6\xbc\x0c\xd3\x00\xb9\x63\xa1\x3d\xaf\x43\x36\x81\x66\xfa\x12\x08\x92\xb9\x36\x14\x6f\xc6\x9a\xb6\x44\x43\x03\xc9\x6c\x2c\x1e\x5a\x5d\x4b\xb8\xdc\x34\xa0\x14\xa7\x5b\xc1\xdc\x9f\xae\x84\xad\x2d\xdc\xc2\x55\xa6\x8b\xf0\x9b\x9b\xb7\x5f\xae\x60\x77\xd8\x88\x1b\xe7\xcc\x93\x46\x67\xa4\xa2\xb3\xa4\xc7\xe5\x11\x97\x53\xa2\xe4\xe6\xb9\x5c\xa5\x72\xf3\x8f\x32\x4a\x66\x46\xda\x8b\xa9\x59\x7a\xff\x61\xae\xa2\x05\x61\x21\x5d\xd5\x9a\xe8\x88\x90\x6a\x5a\x05\xab\x45\x50\x8d\x1d\xb3\x05\xea\xb5\xf8\x11\x37\x1c\x43\x2d\x7e\xdc\x8b\xad\x18\x79\x51\x74\x04\x7d\x41\x6e\xa0\x2b\xf8\xea\x06\x42\x6e\x20\xf8\x06\xba\xba\xca\x46\x91\xb7\x50\x73\x2c\x92\xe4\x62\x4d\x88\xe6\x0a\x11\x74\x43\x77\x74\x71\x21\xf8\x1b\x67\xbe\xdb\xaf\x8b\xab\x1b\xe8\x0a\x85\x11\xe6\x1b\x4c\x7e\x83\x31\x08\xa1\xef\x50\xfa\x0e\xa7\xbe\xc3\x18\x8a\x33\xe4\x35\x8c\xba\xa0\x4b\x71\x47\x05\xff\x07\x11\xb1\x8a\x90\xb6\x82\x63\xea\x4a\xbe\x24\x86\x24\xa8\x63\x24\x61\xc2\xda\x06\xbb\xc0\x24\xe8\xc6\xc1\x8f\x30\x72\xe5\xe1\x38\x8c\xd3\xc7\xc8\xc3\x05\x51\x51\x84\xe4\x54\x56\xae\x0c\x02\x27\x30\xf4\x18\x19\x84\xe0\x87\xc1\x70\x40\xee\x2d\x81\xe6\x8a\x20\x31\x18\x3d\x4a\x0d\x32\x14\x11\x74\x7a\x25\x44\xd0\x38\x42\x1c\x23\x82\x12\x96\xa6\xa2\xab\xdb\xf2\x5a\xd0\x08\x89\x1e\x25\x82\x8e\x69\x11\xec\x7c\x2e\x21\x87\xc2\x49\xec\x38\x39\x6e\xa5\x8b\x9a\x66\x01\x4d\x74\x4c\x2b\xdf\xa7\x18\x18\x81\x99\x63\xd8\x33\x1e\x7b\x7f\x9a\x53\x78\x57\xac\x7c\xee\x28\x85\x1c\x55\xd5\x08\xec\xb1\x0f\x6a\xc1\x4b\x6e\xf3\x05\x10\x0c\x75\x94\x75\x10\x24\x2a\x60\x97\x2d\xb9\x1d\x40\xbe\x20\x86\x64\x8e\xd3\x04\x8d\x55\x74\x90\x9f\xfa\xbf\xb5\xcd\x93\x84\xc0\x14\x81\x1f\x55\x23\x08\xe6\xab\xb3\xcb\xea\x73\x6b\x1c\x41\x50\x8a\x3c\x4e\x13\x5c\x50\xf5\xf7\xf0\x77\x07\xe6\x72\x21\xa8\x3a\x58\xe4\x76\x8d\x08\x42\x20\xc8\x51\x9d\x30\x42\x84\xcb\x2d\xe1\x34\xf8\x7b\x81\x1a\x24\x75\x5c\x37\x8f\x90\x82\x6e\x68\xc0\x76\x84\xc3\x89\xf6\x02\x51\x14\x43\x1f\x57\x23\x54\x2c\xc2\x7b\x2b\x1a\x62\x7e\x30\x41\x50\x18\xc6\xf0\x40\x48\x46\xac\xcd\x5d\x9e\x3f\x36\xd8\x1e\x2c\xd1\x47\x63\x7f\xa3\x3a\x6d\x37\xc8\x21\x8f\xf7\xf8\x16\xd7\xaf\x76\xf9\x7a\x85\xc2\x50\x16\xc7\xc8\x27\xa2\xcf\xd7\x46\xc3\x4e\xe3\xb1\x4d\x35\x2a\x9d\x6a\x77\xd0\x69\xd5\x7b\xf8\x88\xe2\x66\x8f\x0f\x93\xa4\x85\x32\x85\xa0\x9e\x10\x14\x1b\xd4\xd1\xe6\x84\x23\x50\xb6\x3b\x9d\xd4\x27\x4d\x8c\x9d\xdd\xb3\xd3\x69\x63\x3a\x7d\x40\x1f\x9a\xd3\xd9\x6c\x48\x72\xb3\x29\x37\xee\xb7\x6b\xd3\xa7\x11\xfb\x48\x52\xd3\x1e\x5e\x5a\x08\xe6\x0a\xa9\x0c\xfb\xb3\x66\xab\x83\x56\x5b\x58\x9d\x1f\xe0\x95\x69\xa7\xde\xe5\x6b\x9d\xfa\xfd\x84\xef\x4f\xd0\xe6\x0c\x7b\xea\xd6\x47\xcd\x1e\x3f\xa9\x72\x3d\x76\xf4\x48\x0d\xaa\x54\x6f\x8a\x36\xaf\x4e\xdd\xe9\xe1\x0e\xfc\x0a\xaa\x21\xd8\x1d\xb7\xdf\xd8\xfa\xdd\x06\xf9\xbb\x20\x6e\x20\xec\x06\x72\xac\x35\x28\xe1\x1c\x87\xfb\x1b\x4e\x76\x0d\x3f\x2f\x89\x3a\x86\x6c\x01\x45\x77\x04\x71\xb1\x9a\x8b\xc6\x7a\x89\xbb\xee\x3c\x19\xd5\xae\xce\xac\xce\x53\x56\xf4\x2f\x62\xe7\x58\x16\xe5\x8d\x77\xcb\x59\x39\x6d\x41\xff\x54\x33\x87\x8b\xfa\x11\x3b\x23\x28\x4d\xe3\x0c\x4c\x30\x34\xe1\x81\x42\xdd\x51\xf8\x3f\x9f\x17\xfa\x52\x77\x3e\xdf\x41\x9f\x19\x14\xc5\x30\x0a\x85\x31\x92\x26\xbe\xe3\x14\x45\xd0\x30\xf5\xf9\x06\xfa\xbc\xdf\x40\xe2\x52\x4d\x46\xb5\xfd\x43\x37\xef\x76\x1f\x26\x6b\x70\x4f\xe1\x6f\x24\x71\x69\x4e\xad\xca\xcf\xff\xcb\x6a\x9b\x49\x1d\xd1\x1b\x88\x26\x68\x86\xc1\x68\x92\x66\x76\x79\xc6\x3f\x9f\x6d\xc7\x1d\x84\x1b\x9a\x20\x89\x0b\xd1\x90\x3d\xc4\x08\x0c\xc3\xdf\x61\xff\x53\x5e\x02\x16\x97\x80\x7a\x4d\xe8\xea\x9f\xcf\x7e\x20\x3e\xe0\x7b\x60\x27\x43\x74\xf4\x0d\x38\x59\x23\xec\x06\x42\x7c\x95\xde\x80\xae\xcd\x5d\x81\xc8\x0d\xf4\xd9\x77\x0a\xe1\x05\x6c\x7f\x8f\x9d\x91\x00\x15\x8e\x52\x81\x2b\xfd\x2a\x3b\x07\x12\x7e\xb9\x9d\x13\x1a\x95\xb4\xf3\x69\xe1\xcc\x47\x55\xd0\x15\xa4\xed\x69\x39\xb5\x2b\x08\xf7\xb5\x44\x23\x18\xa6\x20\x04\x8d\xaa\x24\x41\x60\x22\x0c\xa3\x0c\x89\x33\x98\x22\x89\xa4\x24\x61\x0a\x4e\x62\x32\x0c\x24\x4a\xc6\x11\x4a\x11\x55\x58\xa6\x50\x0a\x63\x10\x55\x56\x69\x0c\x55\x81\x2a\xc1\x04\x70\xfb\x66\x86\x96\x25\x14\xa8\xb2\x8a\x22\x40\x02\x00\xa6\x70\x04\xc6\x24\x94\x66\x64\x05\xd0\xb8\xc4\x20\x32\x8c\xcb\x30\x26\x22\x04\x83\x63\x0a\x22\x03\x9c\x24\x31\x82\x81\x49\x52\xc1\x48\x15\xa5\xfd\xae\x11\x49\x8c\x5d\xc8\x3b\x8c\xb8\xc3\xe1\xe4\x90\xc6\x7f\x8c\x7e\xc7\x31\x94\xa2\x88\xc2\xb7\x41\x5f\x87\xd0\x34\x7d\x03\x21\xa4\x5b\x9f\x07\x9f\x1b\x08\x73\xff\x43\x82\xff\xc2\x87\xc8\xee\x0f\x17\x1a\xcb\xb2\x6c\x95\x78\xee\x74\x36\x1f\xdb\xa6\x45\x69\x4a\x85\xa5\xda\xf7\x1f\x60\xde\x79\x91\x2b\x5d\x96\xac\x3f\x0d\x98\x66\x6f\xb8\xe4\x9f\x2a\x4b\x18\xa5\x4d\xd5\x1a\x6d\x50\xd9\x66\xc8\x11\x35\xd1\x9a\xcc\xbc\x51\x9d\xa2\x6f\xa8\x73\xbf\x26\x6f\x31\x7e\xc5\x30\xcf\xa3\xc7\xf9\xb6\xb5\x65\xdf\x2d\xda\x65\xcd\x4e\xfb\x0f\xdd\x29\xbb\xff\x74\x3a\xed\xbe\xd4\x35\x9f\x9b\xd7\xc3\xe1\xf5\x78\x54\xa9\xb5\x1b\x95\x5b\x67\xad\x36\xd1\x65\x07\x41\x65\xb9\xda\xb4\x90\x7b\x03\xa5\xb6\xfd\xea\x00\xe6\xfb\x94\xf8\xe0\x5c\xb3\xd4\xb4\x8a\x19\x1a\x00\xa6\x46\xbc\xcd\x6c\x67\xdc\xe4\x6e\xed\xf5\xfd\x6d\x9b\x5f\xae\x5e\xcc\xd9\xfd\xec\xcd\xe5\xdc\xe5\xf1\x8e\xf8\xb1\x42\x07\x11\x69\x9c\xcd\xa6\x7c\x9e\xd8\x29\x82\x0f\x58\xb6\x06\xdf\xa7\xbd\xfe\x4f\x7f\x82\xf9\xa5\x8c\x76\x9f\x6c\x0a\xe8\x65\xdc\xf8\x8a\xc4\x14\x86\x56\x09\x8c\x04\x80\xa4\x15\x44\x42\x29\x89\x90\x68\x46\x45\x31\x51\x25\x30\x04\x91\x28\x82\x64\x44\x14\x57\x45\x15\xc1\x61\x4c\x54\x60\x89\x40\x25\x12\xc3\x24\x98\x92\x00\xc3\x5c\x79\x7d\x1c\x9a\xe6\xd5\x18\x93\xe9\xec\x38\x8d\xd2\xc5\x6f\xfd\x00\x82\x13\x0c\x9a\xd3\x12\xd0\x92\x2d\x01\xed\x3f\x3d\x23\xfc\x9a\x30\x61\xe9\x9e\x7a\xc4\x8d\x6d\x6f\x33\x79\x6f\x60\x0f\x2b\xf3\xe5\x7a\x53\x67\x7b\x4e\x15\x69\xa3\x5d\xaa\x42\x91\x4f\x6b\xa2\xc9\xc8\x4d\x05\x7e\x65\xed\xa7\x67\x66\x40\xce\xe8\x6d\xab\x25\x93\x6b\xe7\x45\xbd\xad\xf6\xae\x3b\xcb\x5b\xb8\x2d\xd9\xaa\xf5\xd1\x9f\x78\x35\xe7\xb6\x84\x47\xcf\x53\x5b\xbb\xff\x58\xcf\x59\xed\xfd\xf7\x37\xb6\x3f\x78\xf1\x6b\xba\x0f\xf7\x9f\x47\xd8\x50\xa5\xe6\x36\xfd\xfe\xd0\xaa\x68\xa8\x46\xbf\xb7\x37\xaf\xbd\xde\xad\x71\xab\xdd\x4e\xdf\xb4\xfe\xf0\xb6\x59\xa1\x5e\x01\xb3\xb2\xf5\xfb\x35\xfe\xc2\x37\x87\xb8\x39\x6d\x72\xe3\x96\x82\x23\x7d\xfe\x7e\x4a\xad\xee\x5f\x4d\x18\x65\x71\xf3\x9a\x30\x86\x12\xf6\xb1\xf6\xe5\xa7\xb4\x94\x5a\x2b\xcd\xdb\xfe\x3f\x6f\x29\x68\xf9\x96\x82\x5c\xc6\xcb\xbd\xb5\x16\x77\xb8\xe0\x86\x57\x84\xa1\xe0\x6f\x30\xf2\x0d\x46\x20\x18\xbe\xf3\xfe\x65\x7a\x33\x89\xc0\x04\x5e\xf8\x16\x47\x19\x9c\x21\x29\x94\x21\x73\x7c\x3d\xdd\xd3\x7d\x48\xff\x76\xa5\x64\x7f\x2a\xd3\xb6\x8e\x6f\x6f\xb7\xa3\x76\x85\xaa\x19\x35\xa6\x89\xc2\xef\xcf\x95\x6b\x1b\xd6\x1c\xfb\xad\xf5\xf6\x81\x4c\x95\xd1\xe3\x4c\xac\xdc\x8b\x75\xcd\xa5\xe7\x52\x9c\x38\xfd\x13\x3a\x31\xcb\x56\x5e\x7e\x83\x22\x17\xfd\x5c\xf9\xce\x54\x3c\xa0\x2a\xb1\x9b\xf1\xd4\xf1\x55\xc6\x22\x55\x66\xe6\x95\xd1\xe2\x0a\xd8\x24\x53\x81\xd3\xb8\x24\x13\x98\xd3\xb8\xe0\x89\xe1\xf2\x69\x5c\x88\x44\x1a\x71\x99\x6d\x99\x17\x49\xe1\xf3\xd7\x0c\x6f\x20\xa2\x6c\x4a\x9f\xb1\x39\xf1\x6c\x57\x8b\xb8\x57\xcc\xb7\x76\x5f\x70\x6f\x1c\x44\x96\xcb\xf0\x1d\x6b\x6d\x3b\x00\x9c\x95\x3d\x86\x6c\x4c\xeb\xac\xe4\xe8\x3f\x31\xdf\xf0\x0b\x26\x2b\x53\x6a\x2e\xda\x10\x77\x7f\xd3\x91\x7c\x5a\x5d\x1b\x4a\xa0\xcb\x89\x13\x8e\x9e\x5d\xfc\x69\xbf\x73\x2b\xb7\x44\x72\x7f\xe6\xcc\xe8\x31\x66\x0b\xfa\x8c\xdd\xdf\xf8\xaf\x35\xdb\xe9\xce\xfc\xeb\xcd\x56\xd0\x03\xa5\xec\xe5\x2d\xd3\xfb\x14\x73\x2d\xde\xd6\x78\x6a\x2f\x97\xb9\x1d\x22\x35\xa4\xe2\xd9\x21\xb5\x90\x11\x1a\x6f\x79\x59\xe1\xb0\x90\x0f\x16\xe7\x93\x15\x10\x0b\xf9\xe0\x71\x97\x3e\x99\x4f\xb2\x69\x5c\x6a\x97\xe6\x45\x82\x6b\xd1\x3e\x95\x23\xc2\x6b\xe6\x2e\xc5\x0b\xb8\x5e\x64\xe9\x4d\x52\x70\x9a\x54\x24\x45\x81\x51\x05\x27\x61\x1a\xa1\x48\x0a\x91\x71\x91\x10\x29\xc0\x28\x24\xa0\x49\x42\x16\x51\x46\x96\x70\x04\x90\xa8\x42\x89\xa2\x4a\xc1\x22\xaa\x02\x40\x48\x18\xa9\x00\x7f\xa9\xe5\xac\x35\xb0\x48\x1e\x8f\x85\xf9\x4b\xf6\x24\x18\x43\x62\x39\x53\x64\xfe\xdb\x58\x0b\xf2\x13\x9f\x36\xf9\x0c\x74\xec\x79\x69\xb6\xe8\x71\x63\x51\xbb\x05\x9a\x8c\x51\xfd\xa9\xd3\x6c\xb7\x3f\x1e\x1f\xe8\xb7\x07\xfd\xa9\x22\x56\xd7\x44\x87\xe8\xb2\x5e\xe2\xc0\x86\x89\x79\x25\x31\x2e\x8f\x7c\x9f\x79\xdf\x1f\x1e\x78\xce\xff\x5e\x45\xd6\x15\xa5\x69\x8e\xd7\x5a\x77\x33\x70\x6a\x54\x65\xde\xea\x60\x3c\x60\x94\x87\xbe\xda\x68\x5d\xdf\xeb\xc4\xfd\x66\xd2\xbb\x7e\x62\x1d\x0a\xbb\xdd\x7d\xf6\xfc\x1a\x3b\xf9\x83\x0a\xf3\xb2\x6c\x3f\xa2\xaf\xd8\x86\x1a\xa8\x5b\xba\xdf\x05\x2f\x9c\x84\x8c\xc7\x2d\x42\x7f\x7f\x7d\x69\xc1\x15\x53\x9b\x5a\x3d\x87\xd2\x7a\x08\x89\x0e\xa4\x97\x39\xaa\x8c\xc6\x13\x15\xd4\xcc\x8d\x0c\xf7\x59\x51\x9d\xd7\xa6\xef\xce\xfc\x81\x5d\xd8\x9d\xf5\xf3\xa2\xb2\xdc\x3e\x57\xd8\xd9\xcf\xab\x68\x22\xd8\x88\x24\x50\xfb\x3f\x1b\x11\x5d\xf7\xf4\x83\x9d\x3d\x6a\xde\xf7\xb7\x3d\x91\xf5\xca\x93\x1d\xd0\x13\xb5\xe7\xf7\xae\x38\xe9\x33\x64\xe5\x43\xb5\x19\x00\xcb\xa6\xc5\x3f\x4d\x3f\x2a\x8f\xf7\x2f\x75\xb3\x4d\xbd\x6c\x5e\xbc\x42\xd5\x07\x76\xf3\x6c\xec\xed\x9b\xf1\xe1\xb2\x5e\x54\x2e\x2c\x3f\x59\xbf\x47\xc8\xef\xee\xed\xe1\x7d\xaa\x6b\x13\x33\x1d\x9c\x78\xad\xf6\xb9\xf7\xd5\xe0\x16\x33\x9b\xfc\xf5\x07\x42\x0d\xb7\xba\x8d\x2c\xd4\x6e\x7d\xb6\x1c\x3c\x6a\xd6\x7a\x74\x3d\xf6\xe8\xef\x27\xd5\xeb\x9e\xec\xfd\xa9\xe5\xc8\xcc\xcc\x73\xb9\x5f\x21\xff\xd0\x1e\xf9\x79\x76\x6d\x4f\x73\xac\xfc\xfa\xc3\x04\x0e\x98\x77\x1e\xf1\x3a\x0c\xe6\x3d\x92\xdd\x32\x55\xb8\x6f\x37\x38\x6d\x23\x23\x14\x82\x4c\x18\x7a\xf6\x8c\x2f\x3b\x2f\x4b\x66\x40\x11\x2f\x55\x6c\x13\xa9\x8a\x7d\x23\x7a\x4b\xda\xef\xe7\xde\x77\x3d\xdd\xbc\xba\xaa\x9e\x67\xab\x00\xab\x96\x63\x8d\xdf\x56\x57\xc7\xc8\xf7\x6d\xf1\x4f\x13\x1d\xcd\x56\x92\x68\x81\x5b\xa7\x72\xdb\x79\xa3\xdf\xc9\xc1\x70\xf3\xc0\x77\x9f\x97\x9d\xc6\xeb\xe0\x79\xd0\xd0\x2b\xc0\x26\xb1\x35\x4b\x4d\xad\xa7\xca\x7a\xd4\x7c\x42\xee\xf9\x21\x83\xf7\x74\xe6\x63\x40\x57\x56\xd7\x1c\xaf\x36\xd0\xfa\xa4\xfa\xf8\xb6\x26\x7b\x93\x86\xd4\xee\x72\x15\xed\xe7\x4f\x6f\x9c\xe7\xed\x43\x0e\x67\xc1\xfc\xff\xdd\x40\xe7\x75\xe8\xc5\xb1\x3e\x12\x91\x14\x09\x63\x68\x20\xe1\x22\xa0\x19\x8a\x20\x31\x94\x20\x71\x4c\x16\x15\x14\x91\x19\x1c\x20\x98\xa4\xca\x30\x85\x4b\x18\x8a\x01\x40\x63\x00\xc1\x11\x49\xa5\x60\x44\x24\x14\x06\xc6\x55\x44\xf2\x27\xff\x90\x73\x86\x9e\xfe\xea\x4d\x6e\x20\xc2\x69\x1c\xcd\x9e\xb4\x0b\xdf\x46\x47\x4e\xbe\x2f\x36\x3a\x74\x73\xb0\x19\xbc\x48\x6d\xb4\xc9\x62\x8f\x0f\xcf\x43\xab\xbd\x7c\x9e\xc2\xb0\xda\xa0\xed\x4e\x8b\x5a\xc2\xdc\xf0\xed\xfe\xf1\x96\x9d\x62\xec\x2e\x0e\x79\x9f\x9c\x38\xe4\x7f\x1c\x49\x9b\x0e\x49\x8e\x32\x6b\x1d\xb8\x33\xb8\x7e\x9b\x8d\xaa\xcc\xc7\x74\x33\x7d\x18\x63\xef\x7a\x5f\x9f\xad\x47\x12\x52\xdb\x2c\x07\x1d\xe0\xad\xcf\xb8\xfd\x60\x74\x52\xac\xf2\xb0\x79\xab\x33\x6f\x9e\xab\xce\x9e\x07\x72\x7f\x8c\x36\x88\xf9\xab\x51\x59\x6a\x8d\x06\xd0\x98\x7b\x7a\x81\xcb\x08\x67\x4c\x16\xef\x2f\x0b\x6e\xd1\x64\xec\xd7\x27\x0b\x66\x28\xa4\x4e\xf6\x3a\x8f\x2a\xb8\x5d\xe2\x2f\xab\xba\xd3\xba\xb6\x5b\xb0\x8e\xbc\x76\x74\x87\x60\xe1\xfb\xed\xa3\x21\xcd\x67\x9d\x47\xc2\xac\x95\x88\x3d\x31\xa7\x8d\xc7\x9e\x88\xce\xfb\xbe\x37\xd2\x9e\x2b\xfa\x6d\x05\xee\xc0\xf7\x8d\xad\x33\x7f\xe3\x91\xc5\x0c\x16\xb7\x2b\x13\x61\xf8\xe6\xfb\xa6\x53\xdd\xf6\x08\xa7\xc2\xc9\x55\x5f\x47\x4c\x73\xac\x9e\x31\xbb\xa5\xf1\x7d\xf9\x8c\x58\x94\xdf\x9e\xcf\x90\x5f\x1f\x3f\x56\xec\x33\xe4\xb3\x09\xf9\x47\x8c\x3d\x3c\xfb\x9d\xd3\x9f\xa5\xf6\xad\x95\xd3\x6d\xd1\x33\x9e\x72\xd5\x2c\xb2\xc5\xb9\x75\xe1\xfa\xc2\xb5\x9c\xe0\x77\x94\x2d\xfe\x69\xb4\xe0\x66\x0d\x66\xe6\xeb\x99\xb8\x7a\x7b\x32\x2b\x73\xc3\xec\x8f\xd4\x7b\xd0\xe4\x87\xf7\xc8\xbd\xfc\x74\x3f\xbc\x1f\xde\x4a\xed\xa5\xc8\xf4\x01\x33\x04\xcf\x3a\x62\x60\x1b\x62\x7d\xdf\x1e\x4a\xa3\xbe\x55\xe5\x5b\x8e\xa8\xe3\x16\x18\xf0\x55\x79\xb1\x42\xf1\xc7\x2a\xb2\x16\xd9\xb7\x4b\xf7\xad\x2a\x43\xc9\xa2\xaa\x8a\x12\x2d\x23\x24\x8c\x62\x22\x46\xd1\x34\x8e\x90\x84\x2c\xc1\x12\xa6\xaa\x88\x28\xa2\x8a\xa8\xe2\x30\x0c\xab\x40\xc5\x19\x05\x45\x80\x2a\xd3\x38\xa5\x28\x92\x2a\x01\x71\xbf\x98\x77\x46\xdf\x8a\x16\xf7\xad\x24\x9c\xbd\x0e\x1e\xbe\x8d\x66\x81\xe7\xf6\xad\xd5\x44\xa5\x1e\xf4\xad\x27\x8c\x31\x33\xfa\xd6\xca\xb2\xbd\x1a\x69\x1b\xeb\xad\xdd\x43\xe1\x69\xb5\xa7\xce\xd4\xa9\xdd\xe0\xb8\x89\xf3\x36\x13\x45\x4e\x7d\x1d\xad\xc9\xed\xf2\x7e\xb9\xa8\x2d\xc5\xeb\xd6\x94\x6c\x51\x2d\x4d\x93\x26\x4f\x5d\x53\x1e\x28\x4f\x0c\xde\xea\xb2\x6a\x5b\x19\xb0\xfc\xeb\x54\x6a\xf5\xa8\xad\xfd\x06\x40\xb7\xfa\xdf\xea\x5b\xcf\xed\xdb\xce\x6c\xcf\xaf\xd4\xed\xb8\x26\x5f\xb2\x6f\xfd\x8d\x63\xc5\xa2\x71\xeb\xef\xec\xdb\xd8\x0b\xf5\xad\xa7\xc6\xd9\xa0\x6f\x7d\xd2\x5f\x27\x66\x87\xa4\xab\xcf\x8e\x53\x7f\x7b\x36\xd0\x26\x42\x55\xe6\x95\x7a\x47\x6e\x34\x96\xf3\x26\xf9\x62\xad\xed\x95\xfe\xb4\x1a\x10\xcb\x8d\x5e\xbf\xd6\x7b\xdb\x56\xab\x81\x34\xc6\xed\x26\xd7\x7c\x54\x41\xb5\xc6\x36\xb7\xc6\x84\xad\x89\x0b\x74\x5b\x5b\xd3\x56\xb7\x69\x3c\xb3\x25\xc7\xad\x99\x27\xce\x1d\x1e\xc8\xbe\x3b\xfc\x35\xfc\xed\xf5\xb1\xbf\x99\x8a\x70\xf4\x0f\x87\xac\xd5\xa2\xbf\xe4\x4e\x0a\x84\xfa\xc3\x56\x97\x1d\xce\xa0\x36\x37\x83\xbe\xe8\x4a\xd1\xa1\x70\xe9\x07\xd4\x9f\x8d\x3a\xc1\x35\x0d\x79\x9a\xe0\x42\xf4\x89\x5d\xb5\xa7\x1d\xf0\x7f\xb6\x76\x71\xb1\x69\xca\x9d\x04\x0c\x9a\xf0\xad\xc1\x84\x83\xbe\xec\xc9\x6f\x22\xa7\x9f\xdd\xc4\xce\x2a\x3b\xd2\x34\x97\xa9\xd6\xa3\x15\x3f\xaa\x52\x33\xd6\x4f\x0b\x16\x29\x2f\xab\x59\xba\x90\x3c\x4d\x73\x60\x95\xd6\x3c\x73\x82\xbb\x70\x0e\xf9\xb2\xda\x67\x89\xc9\xd3\x3f\x17\x5a\xa1\x05\xe2\x17\xac\x04\x8a\x78\x97\xb1\x94\xfb\xe1\xbd\x7f\x6f\x4b\x8c\x0b\xd4\xe3\x93\x8d\x61\x32\x6a\xf1\x0d\x48\x72\x2c\x00\xa2\xad\x2b\x1b\x4d\x70\x37\xcc\xd9\x78\x82\x73\x05\x4b\x21\xca\x68\xd7\x91\x7b\x6d\x4e\x85\xb3\x67\x11\x45\x12\xcb\x06\xe2\x78\x7c\xe2\x9b\x83\x63\x00\xd2\xc0\x79\x37\xf3\x9c\x81\xcc\x3b\x0d\xa1\x14\xac\xe4\x19\x0a\x69\x68\x82\xeb\x84\xce\xc0\xe3\x73\x28\x87\x28\x71\x40\xc3\xcd\xe1\x59\x0c\xa9\x4d\x3e\x7a\x3f\xd2\xf1\x48\x83\x28\xe1\x03\x4e\xb0\x8b\xc2\x0e\x37\x7d\xc7\x10\xa7\x1d\x4b\x74\x13\x1e\x41\x94\x05\x76\xff\xc3\xef\x33\x61\xea\x4a\x69\x80\xfb\x33\x58\x6e\x52\xcf\x52\x2a\x00\x1d\x5e\x69\x75\x09\xdc\x01\xaf\x28\xf4\x8c\x50\x75\x92\x26\xe9\x0a\x84\xb7\x77\x5d\x42\x81\x80\x57\x86\x4f\x9f\xa8\x42\xfc\x40\x9d\x43\x25\x22\x77\x95\x9d\xda\x1a\x23\x3c\x4e\x35\x7e\xbe\xa1\x13\x97\xaf\x9d\x6b\xeb\x38\xbb\x28\xe4\x70\x7b\x69\x0c\x63\x3a\xa2\xc3\x0b\xe4\xce\x87\x75\xc0\xb3\x5c\xf7\x96\x06\x30\x72\x15\xde\xc9\xd5\xba\xe7\x71\xba\x4b\x16\xb9\x5f\xda\x25\x7f\xa7\x03\x3e\x64\x96\x40\xae\x80\x04\xce\xc4\xf1\x6a\xf9\x00\xfd\x5b\x0b\x2f\x02\xcf\x63\x55\x0a\x5c\xf8\x4b\xe7\x4c\x68\xc9\x5b\x18\xcf\xc5\x97\xe0\x57\x04\xf2\xf0\xdc\xb8\x42\xa4\x97\xb1\x63\x8c\x5b\x59\x94\x85\xd6\xbc\x0c\xb6\x52\x98\xf2\xb1\x24\xae\xfb\x3c\x0b\x51\x9c\x57\xe9\x1a\x0d\x4f\xa6\x4b\xc5\x77\x70\x83\xe9\x59\x08\x93\xdc\xca\xb5\xdb\x00\xe0\xcd\xc1\x61\x7a\x37\x07\x07\x32\x66\x28\x71\x81\x7e\x3b\xe0\x53\x84\xf8\xc8\xd1\x51\xf2\xe2\xd9\xb3\xac\x7b\x84\x61\x0b\xed\x56\x7c\xa3\xee\x99\x06\x2d\x14\x10\xcb\xd3\xc2\x1f\xc2\xc7\x33\x23\x9f\xf0\x08\xec\xe7\xfb\x41\x1e\xef\x62\xc4\x29\xad\x2c\xff\xbe\xe4\x53\xfd\x21\x97\x6b\xe1\xb0\xdf\x25\x2a\x00\x9a\x7a\x31\xf4\x65\xd0\xa6\xb1\x2e\x1c\xbe\x95\xf5\xe4\xf8\x4d\xd8\x17\x75\x86\x18\xeb\x53\xc6\x9b\xe5\xaf\xfe\xbe\xb8\xa1\x0f\x0e\x3d\x2f\x84\x9f\x28\x50\x5e\x99\xe8\x4d\xe8\xbf\xca\xfe\xd1\x73\xee\x8b\x34\x89\xd0\x96\x57\x22\xf5\x66\xf8\x5f\xa5\x4d\xea\xf1\xfd\x45\x6a\xa5\x15\x2a\xaf\xdf\xee\xe2\xfc\x5f\xa5\xd3\xee\x2c\xcb\x22\x3d\x32\x67\xbb\xe2\xac\xf7\x7b\xf5\x7f\x45\xd3\x4e\x72\x4f\x4d\x80\x8f\x6d\xe0\x71\xa6\xf1\x14\xea\x42\x2d\x3c\x4f\x44\x19\x1d\x0a\xf2\xba\x5c\x61\x97\x0b\x5f\x87\x8c\x4b\x61\x2f\x0e\x62\xd1\x64\xfb\x57\xb8\xcd\x21\xff\x93\x53\x7d\xff\x3c\xac\x30\x90\x87\x33\x8c\x82\x64\x9a\x2f\x27\x5b\x39\x87\x67\xe1\x10\xe1\xcb\x97\xf0\x7c\xf8\x6f\x7f\xfe\x09\x5d\xd9\xe6\x42\x89\xac\xa6\x5d\xdd\xdd\x39\xe0\xdd\xf9\xfa\xf5\x06\xca\x26\x94\x4d\xa5\x1c\xa1\x3f\x17\x9f\x4d\x2a\x99\x6b\x6d\xee\x94\x12\x1f\x23\xcd\x07\x10\x23\x4d\x40\xf8\x0a\x3d\x36\xb9\x21\xe7\x3b\x19\xf4\x13\xc2\xb0\xd2\x0b\xd1\xba\x22\xa8\x91\x65\xa2\x7a\xfb\xf7\x2c\x47\x07\x62\xa1\x7a\x6f\xc8\xb5\x1a\xfc\x6e\x09\x08\x1a\x72\x75\x6e\xc8\xf1\x55\x2e\x79\x43\xbb\xf7\xb6\xc7\x43\x93\x7e\xcd\x75\x99\x21\xe7\x5f\x8a\xe8\x3e\xaa\x71\x1d\x6e\xcc\x41\x55\x76\x54\x65\x6b\x5c\xfe\x41\xfe\xe9\x27\xaf\xef\x66\x11\x2e\x67\x8c\xb8\x9c\x82\x45\xb2\x2c\x24\x71\xfb\x24\xa7\x8d\x52\x8d\x15\x0c\xf4\x0b\x56\x14\x33\x2d\x11\xa4\xb2\xff\xba\x1d\xa2\x38\xd2\xac\x10\xce\x12\xe4\x3b\xcc\x71\x16\x38\x9c\x54\xfa\x17\xcd\x90\x01\x26\x6e\x8b\x94\x69\xb0\xcb\x3a\x45\x72\x8a\xe3\xbf\x60\x90\x6c\xd7\x38\x98\x43\x2a\xeb\x1d\x7d\xd3\x76\x34\x0b\x8c\x06\x1d\x48\x11\x1d\xd1\x75\x31\x48\x59\x2f\x57\x90\x6c\x2e\x57\x0b\xe0\x00\x4f\x87\xff\x17\x00\x00\xff\xff\xa7\x8a\xce\x8c\x9c\x8e\x00\x00") - -func asset_stat_trustlines_1HorizonSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_trustlines_1HorizonSql, - "asset_stat_trustlines_1-horizon.sql", - ) -} - -func asset_stat_trustlines_1HorizonSql() (*asset, error) { - bytes, err := asset_stat_trustlines_1HorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_trustlines_1-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1c, 0xc8, 0x89, 0x76, 0x6f, 0xc3, 0xe9, 0x72, 0xcd, 0x1a, 0x85, 0x5f, 0x76, 0xc8, 0x79, 0xc2, 0xed, 0xdd, 0xeb, 0xcb, 0xe2, 0x5d, 0xec, 0xf4, 0x1b, 0xf0, 0xf5, 0x5d, 0xd5, 0x2a, 0xf4, 0x54}} - return a, nil -} - -var _asset_stat_trustlines_2CoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x59\x93\xe2\xb8\xf6\xe7\x7b\x7d\x0a\x47\xbd\x64\x75\x90\xdd\x78\x5f\xaa\xa6\x6f\x84\x31\x06\xcc\xbe\x6f\x13\x13\x15\x92\x2d\x1b\x83\x37\xbc\xb0\xfd\xe3\x7e\xf7\x09\xcc\x66\x48\x43\x92\x90\x75\xfb\x4e\x4c\xf9\xa1\xbb\x12\x1f\x9f\xf3\xd3\x4f\x47\x47\x3a\x92\x2d\xfd\xf9\xe7\x97\x3f\xff\xc4\x9a\x6e\x10\x1a\x3e\xea\xb4\xaa\x98\x06\x42\x00\x41\x80\x30\x2d\xb2\xbd\x2f\x7f\xfe\xf9\x65\x7b\x3f\x1f\xd9\x1e\xd2\x30\xdd\x77\xed\x93\xc0\x02\xf9\x81\xe9\x3a\x98\xf0\x17\xfb\x17\x91\x90\x82\x6b\xcc\x33\x7e\x6e\x1f\xbf\x10\xf9\xd2\x91\xbb\x58\x10\x82\x10\xd9\xc8\x09\x7f\x86\xa6\x8d\xdc\x28\xc4\xfe\xc6\xf0\x1f\xf1\x2d\xcb\x55\x67\x6f\x7f\x35\x35\x0b\xfd\x34\x9d\x9f\xa1\x0f\x9c\x00\xa8\xa1\xe9\x3a\x3f\x03\x14\x6c\xf5\xbe\x15\x56\x2d\x73\xab\x1a\x39\xaa\xab\x99\x8e\x81\xfd\x8d\xbd\xf4\xba\x05\xfe\xe5\xc7\xc1\xb6\xa3\x01\x5f\xfb\xa9\xba\x8e\xee\xfa\xb6\xe9\x18\x3f\x83\xd0\x37\x1d\x23\xc0\xfe\xc6\x5c\x67\xaf\x63\x82\xd4\xd9\x4f\x3d\x72\x76\xb6\xa0\xab\x99\x68\x7b\x5f\x07\x56\x80\xce\xcc\xd8\xa6\xf3\xd3\x46\x41\x00\x8c\x58\x60\x09\x7c\xc7\x74\x8c\x9d\x88\xef\x2e\x7f\x06\x48\x8d\x7c\x33\x5c\x6f\x95\xeb\xfa\x8f\x3d\x01\x08\xf8\xea\xe4\xa7\x07\xc2\x09\xf6\x37\xe6\x45\xd0\x32\xd5\xd7\x2d\x63\x2a\x08\x81\xe5\x1a\x3f\xbe\x7c\xc9\xb7\x1b\x4d\x4c\xa9\xe7\xe5\x21\xa6\x14\x30\x79\xa8\x74\xba\x9d\xbd\xe4\x5f\x91\x67\xf8\x40\x43\x13\x33\x08\xe1\x3a\x40\xf3\x1f\x37\xa5\x03\xd5\x9b\x47\xae\x1f\xd9\xc1\x7d\xc2\xc8\x59\xdc\x23\x69\x21\xcd\x40\xfe\x3d\x92\x5b\x9c\x3a\x42\x77\x4a\xde\x21\x06\x51\x10\xba\xba\x8e\x7c\xd3\xd1\xd0\xea\xb6\x2c\x50\x55\x37\x72\x42\x08\x2c\xe0\xa8\x28\xf8\xf1\x45\xac\x76\xe5\x36\xd6\x15\x73\x55\x39\x21\xdd\xa8\x57\x47\x29\xf4\xba\xfe\x1a\x8b\xb5\x4b\x8d\x7a\xa7\xdb\x16\x95\x7a\x37\xf1\xd0\xb9\xe0\x4f\x6f\x86\xd6\xf7\xe8\x0f\x57\xef\xab\x3e\xca\x7c\x40\xab\x8e\xee\xc0\x9c\x14\xbb\x5f\xb7\x1f\x05\xa1\x65\x3a\x28\xb8\xa5\xf9\x28\x74\xb7\xde\x2d\x0a\x14\x47\x83\x1b\x7a\x4f\x42\xf7\xeb\x3d\xba\xfc\x2d\xbd\x47\xa1\xbb\xf5\xee\xe4\x4d\x47\x77\x6f\xe8\x3d\x09\xdd\xad\xd7\x8b\x60\x10\xc1\x1b\x3a\x77\x02\x1f\xd1\x67\x99\xc1\x64\x1e\xa1\xe8\x16\xb3\x49\xb1\xfb\x75\x23\xe4\xdf\xa2\x35\xbe\x7f\xb7\xb6\xb8\x19\xdf\x52\xb7\x13\xb8\x5b\xdf\x2e\x2a\x4d\x10\xd0\x6e\xab\x3d\x93\xfb\xc5\xda\xf7\x91\x12\xcd\x7f\xde\x69\x06\x02\xe7\x86\x72\x08\x9c\xbb\x01\xef\xa3\xdf\x2d\xac\x07\x91\x8f\xea\xdc\x8e\x01\xde\x57\xbb\x95\xda\x6b\x8e\x65\x2f\x15\xa7\x86\xdc\xdb\xb2\xc7\xd0\xf8\x9e\xd8\x29\xd0\xbd\x23\x79\x0c\x5c\xb7\xe5\x4e\x81\xe8\x1d\xb9\x63\x60\x79\x57\xee\x2e\x7c\xa7\x80\x72\x5b\x6e\x17\x24\xde\x95\x39\x36\xf9\x77\x24\xb7\xed\xf8\xb6\xc8\xae\x6d\xde\x96\x39\x6b\x0a\xb7\x45\x21\x70\x6e\x0b\x1c\x5c\xf5\x2e\xa9\xad\xe7\xed\x05\xe5\x61\x57\xae\x77\x94\x46\x3d\x29\x6c\x79\x46\x30\xb7\xf6\x12\x1d\xa9\x24\xd7\xc4\x37\xba\x7e\x7c\xd9\x8d\x8d\xeb\xc0\x46\xdf\x0f\xbf\x61\xdd\xb5\x87\xbe\xef\x1f\xf9\x81\x75\xd4\x09\xb2\xc1\x77\xec\xcf\x1f\x58\x63\xe9\x20\xff\x3b\xf6\x67\x3c\x64\x96\xda\xb2\xd8\x95\x0f\x9a\x0f\xfa\xbe\x9c\x69\x3c\xbf\xb9\x57\x2c\x35\x6a\x35\xb9\xde\xbd\xa1\x79\x27\x80\x35\xea\xe7\x0a\x30\xa5\x83\xbd\x1c\xc6\xb7\x87\xdf\x82\x58\xc9\xcb\xa5\xe5\x43\xf1\xf7\x36\x8f\x0c\xbd\x5b\x9e\x33\x2e\xeb\x8d\xee\x05\x9f\xd8\x40\xe9\x96\x8e\xb0\x92\x03\xda\x33\xf3\x27\x2d\x17\x40\x3e\x52\xf8\x37\x4a\x62\x02\x9a\xd5\xac\x67\x6c\xb3\x18\xcf\x77\x55\xa4\x45\x3e\xb0\x30\x0b\x38\x46\x04\x0c\x14\xd3\x70\xe7\x00\x7c\x2b\xa6\x21\x1d\x44\x56\xf8\x33\x04\xd0\x42\x81\x07\x54\xb4\xcd\x26\x5e\x2e\xee\x2e\xcd\x70\xf2\xd3\x35\xb5\x44\x82\x70\x56\xd8\xa4\x43\xee\x8b\x19\xbb\xee\xa9\x90\x07\x07\x48\x23\x7c\xe7\xe5\xc9\xa0\xfb\xed\x0b\x86\x61\x87\x5f\x4c\x0d\x53\x27\xc0\x07\x6a\x88\x7c\x6c\x01\xfc\xb5\xe9\x18\xdf\x18\xf6\x8f\xb8\x6e\xea\xbd\x6a\xf5\x35\x96\xde\x3e\xe8\x00\x1b\xa5\x08\xf3\x7c\x9a\xf0\x02\x58\x51\x9a\x34\x41\x90\x97\xe2\x16\x08\x42\xdb\xd5\x4c\xdd\x44\x1a\x66\x3a\x21\x32\x90\x7f\x14\xf9\xf2\xc7\x65\xdd\x1f\x5b\xf1\x93\x5c\x04\x0f\x11\xb1\x4f\x04\x30\x68\x1a\xa6\x13\x5e\xdc\x0c\xd0\xdc\x89\xec\xf4\x7b\x4e\x64\x07\x11\x44\x4e\xe8\x6f\x53\xc1\xcb\x62\xee\x64\x4c\x47\xb7\xc0\x36\x63\xd4\x50\x10\xa6\xc3\xd9\x09\x4e\x5c\x1b\x69\xae\x0d\x4c\x27\x45\x8a\xa6\x2f\x41\x87\x13\x1f\x05\x13\xd7\xd2\x02\x2c\x44\xab\x4b\x64\xba\x05\x8c\x6b\x88\x6e\xd6\xcd\x9e\x91\x68\x6b\xd5\x32\x01\x34\x2d\x33\xdc\x16\x6e\x57\xfe\x03\x25\x96\x75\xeb\xb6\x69\x38\xdb\xb1\xd0\x16\xd6\xee\x97\xc4\x68\xe0\x38\xb4\xd8\x93\xfe\x33\x4e\xab\x31\xa9\x24\x4b\x15\xec\xdb\xb7\x43\x55\xfc\xeb\x6f\x0c\xff\xe3\x8f\x1b\x4f\x5f\x02\xbc\xd4\xf3\xa6\x00\xef\x69\x3c\xab\xcb\x0b\x6d\xe7\xf5\xfc\x9e\xa6\xb7\xf4\x5c\xa8\x4b\xe1\x6f\xa7\xf3\x6d\xc3\xd8\xf6\x7f\x8f\xb6\x89\xed\x90\x71\xd7\x1c\x1c\x57\x43\xc9\xb6\x70\xd6\x06\xde\x1a\x3d\xef\x9f\x1f\x35\x7f\x3e\x30\xde\x01\xd9\xff\x06\x82\x49\x02\x0c\xfb\xc6\xb7\x3d\x1f\x2d\xde\x15\x82\x91\x3a\x43\xa1\x65\x06\xe1\xbb\xa2\xc7\xd1\xf6\xc1\xdd\x77\x3f\xab\x96\x1b\xa0\xd0\xb4\xaf\xb4\xfc\x38\xb0\xa6\xb4\xad\x44\x9d\x9f\x0f\xea\x8f\xfa\x2e\xea\xfb\x64\xe7\x8a\xeb\x5c\xcb\x0d\xce\xd5\x9c\x4a\x71\xcd\x5b\xf6\x83\xaf\x47\x6b\x6c\x9f\x78\x7d\x3b\x36\x72\xe4\xdf\x19\x41\x77\x33\x2f\xda\xb5\x08\x1a\xbb\x3b\x08\x02\x14\xa6\xf1\xb9\x6b\xab\x57\x6f\x03\x7b\xdb\xac\xd2\x55\x7b\xbe\xa9\x22\xe7\x4a\x10\x8b\x6f\x5e\x8b\x70\xf1\x4d\x4c\x73\x23\x68\xa1\xad\xbf\xa9\x66\x3c\x23\xf9\xa9\x51\x34\x51\xc3\xfb\x94\x75\x57\x96\x8b\x7a\xdd\x17\xf0\x8a\x6f\xec\x9f\xdc\x33\x7c\xf1\xe8\x81\xf7\x6b\x0e\xb1\x1b\xb0\x3f\xea\x0f\xbb\xb4\x7e\xe7\x0e\xa6\x97\xd6\xf1\x33\x6f\x5a\xae\xeb\x87\x47\x36\xf2\x72\x41\xec\x55\xbb\x18\x7e\xd9\x6d\xa2\x55\x08\xc2\x10\xd9\x5e\x88\x6d\x9b\x45\x10\x02\xdb\xc3\xb6\x43\x26\x37\xda\xfd\x82\x6d\x5c\x07\xbd\xed\x6c\x75\x60\x5a\x91\x9f\xe8\x6a\xaf\x59\x08\xd7\x1e\x7a\xbf\x52\x76\xd3\x12\x09\xbd\x6f\xc3\xfe\xd1\xe2\x95\xda\xd9\xcf\x6c\xb8\xfe\x65\xa5\x7e\x8b\x99\xf8\x17\x86\xff\x81\x89\xf5\x3c\xb6\xfb\xf3\x7f\xfd\x8d\xb1\x0c\x43\x31\x7f\xa4\xd6\x55\x32\x0d\x7b\xb8\xca\x92\xb3\x3c\xc9\x98\x7b\x85\x8d\xdd\x44\xdb\xb6\xd5\xa5\x02\xda\xe6\x8e\x4f\x40\x09\x22\xb8\x07\xe1\xa3\xe0\xac\x03\xa2\x52\x47\x8c\x3e\x02\xc7\xb6\xf4\x16\x4f\x22\xe7\x7d\x14\x53\x62\xb2\xee\x8e\x9e\x71\x07\x6c\x1e\xa0\x5b\x3d\xcc\x5b\x9c\x89\x1c\xfe\x51\x9c\x27\x15\xf7\xe3\x7c\xd3\xc9\x5d\xdc\x47\xce\x02\x59\xae\x87\xde\xe9\xd2\x4e\xa6\x9f\xe8\x88\x12\xd3\x1d\x4f\x50\x70\x98\xaf\xfd\x76\x4f\x3d\x9c\xbc\xe8\x3d\x22\xe6\x57\x3a\x9a\x73\x12\x0e\xf3\xc0\x67\x1a\x2f\x89\x38\xb3\x76\x95\x8c\xd3\x1c\xd1\xc3\x64\x9c\x26\xc5\xbf\x9d\xda\xed\x79\xf2\x96\xd2\xa6\x6e\xb5\xee\xc4\x0c\xd7\xa3\xa8\x12\x4b\x00\x8f\xa4\x5d\x71\x8f\x7f\x23\x52\x9b\x41\x10\x21\xff\x7e\x55\xaa\xab\xa5\x66\xa7\x6f\x68\x09\x2d\xd3\x36\xaf\x8c\x28\x6e\xe6\x82\xff\x64\x56\x95\xf0\xce\xc4\xaa\xca\x43\x59\x54\xf2\xf9\xcf\xca\xa3\x12\x3a\x1f\xcf\x7f\x6e\x69\xdd\x55\xda\x85\xa6\x7d\x4d\xfe\x2b\xbd\xe1\x9d\x4d\xf7\x3e\xec\xe4\xc9\x35\xb4\x9d\x9b\x87\xab\xb3\x50\x7c\x47\xbe\x71\xe9\x80\xab\x78\x95\xf2\xea\x5d\x75\x02\x1c\x03\xa5\x26\xf6\x49\x72\x92\xcb\x76\x8f\xc7\xea\xd3\xdc\xf9\xe3\x14\xfd\x87\xf9\x81\xae\xb6\x4e\x23\x27\x5c\xf9\x28\x88\xac\xd4\xe8\x1e\xae\x6c\xf4\x6e\x3e\x77\x5a\x62\x7d\x9c\xcf\x8b\x75\x8b\x47\x49\xbd\x58\x71\xfe\x76\x17\x71\xfb\x87\x6e\xb1\xb7\x17\x49\x23\xe2\x3e\xb7\xbb\x58\xe1\x7e\x84\xa8\xfc\x36\xb3\xd6\x5d\xff\x9d\xc9\x50\x2c\x2f\x76\xc5\x77\x38\xbb\xad\x32\xf8\xb0\x3e\xa5\xde\x91\xdb\x5d\x4c\xa9\x77\x1b\xa7\x49\xc5\xbe\x58\xed\xc9\x1d\xec\xdb\x4b\x31\xd7\x6e\x8e\x4a\x4a\x95\x94\x14\xaa\x50\x6f\xd1\xb9\x61\xb5\x50\xab\xe7\xab\x85\x72\xaf\xde\xec\x91\xa5\x11\x35\xae\x15\x3a\xa5\x46\xbd\x27\xc9\x0d\xb1\x33\xe0\x5a\x12\xd7\x18\x92\xa5\x97\x57\x4c\xd8\x5d\xdc\xfe\xff\x3c\x8e\xbf\x62\xe4\x2b\x86\xbf\xee\x58\xc6\x5e\x5e\x5e\xb1\x17\xb1\x25\x8a\xa2\xf8\xf7\xdf\x2f\xf1\x0d\xf2\x70\xef\xf4\xdf\x3f\x7e\xbc\x87\x50\x22\xa9\x56\x81\x2c\xf5\x64\x86\x14\x6b\xc3\x5e\xa1\x57\xa2\xc4\x51\x59\x1c\x0e\x8b\xc3\x61\x9f\xec\x97\x86\xa3\x51\x9b\x95\x47\x43\xb9\xdb\xac\xe4\x87\xe3\x8e\x38\x60\xb9\x61\x83\x7e\x79\xc5\x08\xfc\x78\xbd\x62\x3c\xc3\x0b\x02\x45\x33\xc2\x2f\xc1\x38\xac\x14\xd9\x76\x9d\x6e\xd4\x15\xb9\x29\xd5\xea\x85\x1c\x47\x91\x22\x4d\xb1\x63\xa6\x59\xcf\x77\xda\xd5\xe2\xa0\xc2\x15\x73\x55\xa9\xd6\xaa\x2a\x85\x06\xdd\xe1\xe4\xd1\xa0\xdf\x3b\xb1\xc8\x9f\x41\xa4\x5f\x31\xe2\x06\x44\x3a\x15\xe2\x15\xc7\xb9\x9c\x70\x7b\xc2\x07\xaf\x4f\xa3\x7d\xd4\x11\xcf\xa7\xd2\x8e\x3c\xb2\x94\x26\xf0\x3a\x43\xb1\x08\xb1\xbc\x46\x40\x92\x83\x0c\xe4\x05\x9d\xa4\x80\xce\x50\x04\x01\x39\x86\x15\x00\x49\xeb\x40\x27\x68\x9c\x02\x1a\x0e\x19\x12\xb2\x14\x05\x71\x0e\x22\x41\xd8\x52\x85\x3f\x79\x6d\x75\x30\x1c\x09\x48\x44\x91\xba\x4e\xd2\x3c\xc0\x39\x88\x23\x0e\xd7\x35\x42\x67\x35\x8a\xe0\x55\x42\x07\xaa\x46\xe2\x90\x55\x55\x9c\x57\x29\x4a\x63\x38\x8e\x21\x19\x81\x67\x79\x82\x64\x00\xc1\xbe\xc4\xf5\x87\x6f\x2b\xee\xbf\xf6\xca\x0d\x2b\x26\xbd\xce\xae\x3b\x95\x1c\x97\x77\xf2\x42\x89\xc4\x57\xd3\x5c\x26\xc0\x8d\x30\x58\x2a\xcb\x0d\x31\xd4\x3a\x83\x11\xc8\x95\x41\xc1\xd8\xca\xcb\x75\xba\x0a\x36\x1e\xd9\x7a\x57\xf3\x58\x1c\x12\x74\x2c\x96\x9b\xfd\x07\x0a\xf2\xa9\xd7\xcb\x45\x5b\xbf\xe2\xa8\x14\x8b\x0b\x88\x61\x04\x15\x09\x14\xc5\x40\x8a\x43\x04\x47\x43\x9a\x56\x19\x9e\x84\x1c\x49\x68\x94\x4e\x10\x9a\x4a\x23\x48\x0b\x1a\xc2\x91\x0e\x59\x8e\xd4\x39\x16\xd2\x04\x14\x10\x52\xb7\x4e\xf6\x19\xce\xce\x0a\x90\x24\x49\x16\x21\x92\xa6\x68\x8e\xe6\x78\x40\x70\x84\x4a\xd3\x2a\xcf\x71\xbc\x46\xeb\x14\x2d\x30\x3a\x04\xb4\x00\x00\xaf\x51\x2c\x4e\xf1\x80\x42\x88\xe5\x68\x06\x6a\x3a\x05\xe1\x4b\x1c\xef\x08\x86\x11\x18\x4e\xe0\x19\x6a\xef\xb1\x12\xd9\x1c\x4f\x89\x7a\xc4\xb8\x38\x2c\x73\x03\xda\x59\x37\x16\xbd\x55\x91\xea\x7b\xee\x2c\xb3\x28\x88\x8d\x50\x22\x2a\x64\x8d\xcb\x71\xec\x38\x62\x4a\x82\x5a\xd2\xf0\xb9\x18\x8c\xa7\x42\x8b\x1d\xf1\x6b\x45\x51\xd9\x28\x9c\xe9\x59\xa9\x91\xa9\xda\x59\xbc\x02\x03\xdd\xdf\x34\x7b\x31\xc3\xc3\x66\xbf\xb6\x89\xbd\x43\x39\xfe\x67\x17\xde\x82\xd3\xdf\x4b\xb1\xd9\xda\xfb\x4e\x13\x6f\x4e\x3b\x54\x5b\xe7\x26\x01\xbf\xea\x2b\x39\x83\x34\xf8\x55\x65\x31\x6f\x34\xb2\x4e\xd6\xc8\x0e\x97\x46\xb3\x9d\x2d\xe5\xb8\x39\x12\xbc\xc0\x2c\x47\xf4\xac\x5e\x6a\xd3\xee\xb0\x24\x77\x15\x8d\x26\x9a\xf5\xf2\x90\xf3\xca\x73\x17\x27\x45\xda\xcd\x30\x4e\x1b\x52\x9b\x68\x19\x9b\x4a\xf1\xe8\xbc\x92\xe6\x15\x07\x8f\xce\xe3\xe5\x5f\xe8\x7b\xbf\xe6\xba\xd3\xa3\x09\x92\x63\x35\x8a\x56\x01\xc5\x92\x02\x23\x30\xbc\x4e\x33\x3a\x4b\x68\x88\x61\x19\x01\x22\x1a\x11\x00\x6a\x9a\xa0\xb1\x2c\xcd\x30\x40\x53\x09\x0a\x09\x48\xc5\x69\x1e\xa9\xac\x4e\x6a\xdb\x90\xf7\x29\xad\x42\xc0\x35\x5c\xa3\x74\xc8\x0a\x0c\xe4\x10\x4e\x41\x46\x25\x35\xc4\xf1\x04\xe2\x00\xcf\x53\x82\x4a\xf0\x90\xd4\x68\x95\x23\x28\x1d\x92\x88\xe4\x74\x92\xd7\x04\x20\x08\x24\xcf\xe2\x02\x4b\xbd\xbc\x62\x54\xc2\xa3\xe9\x83\x47\x6f\x46\x65\xa6\xef\x34\x66\x9b\xc1\x46\x9f\x68\xd5\x76\x6d\x20\x85\xeb\x52\x97\x6f\x53\x32\x8b\x3b\x28\xbf\x08\x9d\x2a\x05\xf0\x22\xc3\x05\xd2\x80\xdd\x0c\x96\x4b\xb7\x22\x74\x33\x65\xbb\x9d\x65\xdc\x76\x57\x9e\x54\xcb\xdc\xd2\x2a\x19\x2c\x90\x86\x24\x5f\xf3\x2a\xe1\xb0\xbc\xda\xb9\x68\xec\xd1\xc6\x89\xf1\x6a\xb5\xd2\x84\x35\x77\x5a\xca\xb4\xdb\x99\x6e\x27\x97\xaf\x14\x73\xd9\x30\xd2\x4b\xa4\x5d\x25\x48\x55\x95\x4a\x3e\x51\x76\x48\x6e\xdd\x94\x5a\x78\xbd\xc9\x81\x7e\x98\x11\xb9\xa1\x44\x39\x06\x42\xae\xc1\x2c\x47\x41\xd8\x2d\xc9\xd9\x20\x2a\x67\x2b\x75\xdb\x9b\xb9\xa3\xf2\x28\xf6\xd8\x5a\x8a\xc7\xca\x41\x5a\xad\xff\x7f\xe0\xb1\x80\xc2\x75\x04\x09\x82\x66\x74\x8d\xa2\x18\x1a\x68\x0c\xd0\x55\x4e\x63\x20\xa1\x0b\xb4\x86\x33\x90\xd5\x54\x1d\x20\x15\xe2\x3c\x81\x6b\x1c\xa1\x23\x40\xe8\x08\x91\x1a\x0b\x59\x9c\x21\xb7\xde\xf6\x19\x5e\x0f\x74\x4a\x67\x09\x5a\xe3\x69\x92\x81\x3c\x41\x13\xaa\x4e\xe2\xaa\x0a\x10\x4d\xa8\x04\x2d\x10\x24\xc5\xd0\x02\x14\x58\x5d\xc7\x29\x46\x80\x10\x92\x04\x0f\x59\x9e\x22\x35\x5e\x23\x50\x8c\x83\x4e\x78\x2c\x73\xf0\xd8\x55\x99\xc4\xf1\xf5\x74\xe4\x0d\xfa\x53\x7c\x48\x96\x50\xdf\xb2\x33\xdd\xc9\x5c\x20\xb5\xf1\xac\x0f\xa8\x5c\xd3\xe3\xc4\x4e\x63\xb5\xa8\x0e\xe6\xfc\x84\xcf\x43\x6b\x91\x59\xae\x11\x3d\xd1\xda\x41\xb4\x16\xf0\x11\x65\x4a\x4d\xa0\x7b\xdc\x8a\x04\xa3\x0a\x1a\x36\xe7\x0e\xb7\x90\x63\x86\x63\x8f\x5d\x9e\x18\xa7\x28\xd9\xae\x94\x97\xd4\x00\x58\x99\x46\x6f\x08\x06\xcc\xc8\x2e\x37\xc2\x80\x89\x0c\x44\xcc\xec\x75\x9b\xd5\x72\xab\x55\x25\x30\x2c\x72\xd1\x24\x0b\xf5\x89\x34\xa0\x0b\xb9\xcd\x3a\x5f\xf3\x67\xa5\x5c\xa7\xad\x10\x1d\x68\x2d\xf8\xfc\x00\x46\xeb\x62\x15\xe4\xab\x23\x1c\xf5\xe2\x16\xd1\x4a\xf1\xd8\x62\xea\x10\xe2\xff\x75\x8f\xbd\x32\x66\x4e\x59\xc1\x7c\x62\x04\xfe\x76\xf9\xeb\x19\x65\xd7\xd6\x67\x9e\xd3\x79\xb9\xc4\xf2\x84\xb6\x2b\x0b\x24\x4f\x68\xbc\xb2\x94\xf1\xd1\xfc\x25\xb1\x9c\x91\x48\x02\x2b\xbd\x5a\x7f\x50\x95\x2a\x65\x76\xd0\xae\xb4\xfa\x6c\x57\x91\x2b\xad\xa2\xdc\xe3\x06\xe5\x72\xa9\xd8\x19\x30\x6c\x57\xac\x57\xea\x8a\x54\x1b\xe5\xe4\x61\xb5\xd3\x1a\xd4\x3a\x8d\xd1\x6e\x0c\xb6\xcb\x14\xca\xfd\x62\x3f\x08\x3a\xb3\x4c\x58\xe8\x55\x32\xb6\x61\xba\xc5\x72\x57\x98\x79\x0d\xd0\x8f\x32\x76\x6e\x6e\xbb\xf2\x46\xec\x0c\x87\x95\x82\x7d\xf2\xbe\x78\xc8\x22\xc5\xff\xdc\xb6\x2c\xd9\xe4\x66\x3a\xb1\xd4\xa8\x8e\x2b\xad\xec\x26\x91\xf7\xa6\x1b\xc5\x98\x6c\xe6\x2c\xd9\xce\xf2\x0a\x47\x47\x30\xdb\xf2\xa2\x55\x66\x51\x13\x76\xa3\x74\x55\xe8\x6d\xea\xf1\xf3\xc6\xf1\x3f\xb9\x58\xe9\xf2\xf8\x77\x5e\x14\x05\x29\xd1\x70\x73\x46\xa3\x2f\xcd\xe9\x52\xa3\xdb\x5d\xb4\x6d\x5f\x90\x04\xd4\xaa\x67\x73\xab\xac\x46\xb9\xc5\x5c\xa5\x47\xd5\xc7\xd3\xa8\xcb\xcd\xb3\x9d\xea\x4e\x9d\x5a\xe1\xc7\x78\x4e\xf2\x26\x99\x51\x89\x6a\xb9\xab\xe1\xb4\xaa\x33\x21\xa1\x71\x62\x91\xcf\x2c\x86\x4d\xc1\xcc\x76\xb3\x33\x8f\x25\x60\x6e\xa0\x16\x8b\x0b\x96\x0a\x43\x63\x36\x9e\xf6\xda\xca\xbc\x39\xcb\x71\x15\x48\xe1\xb5\xd6\xbc\x6f\xb2\x23\x5a\xd9\x0c\x0d\xd7\xa7\xb2\xb9\x6d\x4a\x7c\xd1\x5b\x7c\x72\xd5\x50\x4f\x55\x4d\xed\xbc\x6a\xf2\x62\x19\xfa\x75\x98\x97\x0c\x9f\x68\xd2\xf6\xb8\x94\xb5\x27\x85\x5a\x47\x0e\x9c\x85\xd4\x43\x79\xcf\x2d\xeb\x70\xb9\x9e\xcd\x09\xd5\x29\x9e\xaa\xa6\x71\x11\x6d\x3e\x4c\xfd\x70\x33\x9a\xcd\x44\x76\x46\x73\x65\x69\x85\xe7\x5b\xcb\x32\x49\x58\xfc\x92\xeb\xe6\x59\x77\x35\xd4\x41\x49\x94\x6a\x01\x5c\x6f\x46\xa6\x1b\x2a\xf3\xa5\x5b\xc8\x6a\x33\x9d\x35\xc8\x2c\x72\x5a\xed\x4d\x6f\xb1\x28\x74\xec\x5e\x6b\x9e\xb7\x97\x0d\x6a\x44\x91\xb4\x20\x0d\x6b\xd2\xf2\x97\x53\x4f\x3f\x45\x7d\xeb\x82\x7a\xc9\x5f\x97\x96\xf5\x68\x90\xe5\xf2\x65\xce\x2c\x10\xc5\x35\x57\xa5\xda\x53\xa4\x28\x82\x97\x71\x16\xa5\xb1\x67\x78\x8c\x9a\x99\xeb\x11\x7f\xa2\xbe\xf9\x2c\xf5\x8a\x67\xcf\x6a\x33\xa1\x4a\x84\x45\xa4\xe0\x79\x35\x2b\x0f\xca\x02\x11\x84\x03\xdf\xa6\x04\xd6\x2b\x8d\x16\xda\x4a\xe3\xa1\x58\xee\xf1\x95\x2a\xaf\x15\x15\x7a\x89\x0b\xa1\xa7\x76\x5c\x66\x38\x71\x8c\x46\x69\xd4\xe8\x95\x1a\x7d\xd7\x1c\x59\xa3\x7c\xb8\xae\x47\x6c\x43\x10\xf7\x5e\x7f\x3d\xc4\xa5\x2d\x55\x3e\x10\xe2\x0e\xcb\x95\xc7\xca\xe4\x71\xc4\xd0\x24\x80\x3c\xa1\x22\x5a\xa3\xa0\x46\x08\x00\xea\x34\xa9\x33\x88\xc6\x35\x5d\x25\x54\x4e\xe7\x38\x0e\xe0\x2c\x4e\x03\x86\xe2\x28\x46\xe0\x11\xa2\x75\xb8\x95\xe2\x21\x9e\xac\xd4\x98\xe4\xdd\x70\xc4\xea\x8d\x07\xeb\x55\xa5\xcb\xe2\xfd\x96\xcf\x02\xa9\x62\x8c\xac\x26\xd9\x99\x31\xde\x80\x63\x47\xc5\x39\x30\xba\xb5\x5c\x59\x53\xdd\xc1\xe8\xbd\xee\xf6\xca\xd2\xe4\x87\x0b\x7f\x5a\x9e\x3c\x16\x7e\xef\xda\xc0\x57\x27\xe6\x62\x7f\x33\x79\x6d\xc7\x82\xff\x13\xcf\x2d\x7f\xdd\x7f\x0e\xf8\xf5\x3b\x46\xec\x66\x9b\xbf\x06\xc8\x5f\x20\xff\xeb\x77\xec\xeb\x82\x20\xfe\x22\xfe\xc2\xbf\xee\x6f\xa8\x91\xef\x23\x27\xac\xc6\x63\xdc\xaf\xdf\x31\xfa\xfc\xf7\x5c\xfc\x4e\x58\xf0\xf5\x3b\xf6\xbf\xbf\x1c\x0c\xfd\xcf\x97\xa4\xd9\x58\x72\xab\x58\x87\x04\xcd\x43\x80\x00\x54\x79\x86\xe4\x01\x4e\x11\xac\x00\x34\x80\x54\x95\x47\x02\x20\x58\x84\x08\x8a\x61\x75\x56\x63\x48\xc0\xd0\xb8\xc0\xe0\x02\x4e\x12\x0c\x50\xa1\xce\xe8\xb8\xba\x47\x74\xd4\xeb\xa0\x55\xf8\xf5\xfb\x85\xb5\x5d\x61\xb6\x65\xff\xfa\x1d\xc3\xcf\x6e\xfd\xfb\xe2\xf9\xc0\x01\xde\x16\x17\x83\x04\xc8\xaa\xba\x40\xa9\x94\xc6\x71\x14\x8d\x73\x3a\x0e\xb5\xad\x73\x20\x5e\xc3\x49\x00\x28\x00\x69\xc4\x22\x16\xd0\x2a\x4b\xe8\x38\x41\xb2\x38\xce\x23\x5a\xe5\x54\x9d\x83\x3a\xfe\xf5\x4b\x8a\x85\x2b\x1c\x20\x9d\x22\x00\x89\x03\x6a\xeb\x77\x1c\xa5\x22\x92\x24\x39\x06\x01\x9e\xe0\x38\x8e\x67\x21\x50\x19\x9a\x65\x58\x9d\xa2\x34\x55\xa5\x75\x4a\x47\x2a\x8b\x6b\x0c\xa3\x69\x3a\xc1\x52\x9a\xf0\x71\x0e\x88\xd7\xb7\xf7\xdc\x28\xf4\xa2\xf0\x73\xcb\x7e\x8b\xe1\x67\xa7\x3c\x3f\xc2\xf0\xd3\xb6\x7e\x91\x97\xfd\xe6\xe0\x37\x07\xbf\x39\xf8\xcd\xc1\x6f\x0e\x7e\x73\xf0\x9b\x83\xdf\x1c\xfc\x42\x0e\xe2\x7f\xfd\x9f\x2f\xff\x7e\x93\xfe\xa6\x24\x0d\x16\x08\xc2\x40\xf5\xe2\x2f\x2f\xd2\xae\x97\x43\x3a\x14\x4f\xb2\x48\xfd\xb6\x05\xab\xb2\xd7\xf4\xdb\x7d\x69\xe1\xb9\xca\x3c\x67\xf6\xb2\xe3\x4a\xd7\xb6\xe0\xc2\x33\x80\x37\xcf\xd5\x96\xb2\x45\xac\x27\xe3\xd3\x7a\xc3\x2e\x87\xa2\xf3\x56\x6b\x1e\xe5\x36\x33\x9c\xc3\xc7\xf3\x6c\x6b\x31\x9c\xe5\xf5\xa5\xaa\x53\x1a\x9b\x33\x3a\x56\x7d\x33\x18\x71\xb3\x0c\xbb\xc0\xcd\xe5\x31\xfd\x2a\x9b\x4f\xe6\xc4\x8f\xa4\x6f\x39\x71\xe6\x80\xf6\x3c\x57\xcd\x95\xd7\xe5\xa6\x56\x9b\x4d\x73\xc0\xcb\x0a\xd9\x71\x57\x9a\x2f\x6d\x4d\x34\xaa\x00\x20\xdb\x2f\x8e\x0d\x26\x9f\x63\x5b\x83\x8d\xb6\x11\x35\xbb\x1b\xba\x93\xe5\x28\x30\x99\xf6\xa0\x54\x67\xe5\xcc\x26\xbb\x1e\x96\x8a\xb6\xcc\xe8\xaa\x53\x2e\x87\xd3\x53\x3a\x29\x8d\x9e\x9c\x0d\xcf\x3d\x32\xe7\xd0\x2a\x97\xc9\x19\x30\x3a\xcb\x8e\x6a\x76\xa9\x6e\x59\x59\x0e\xe6\x7a\x56\x27\x7b\xcb\x79\x50\x76\x5a\x8a\x44\xda\x8e\x37\x5f\xd9\xa3\x46\x6b\x89\x66\x85\x80\x52\x97\xa5\xf1\x8c\x03\x8a\x5a\xac\x2a\x51\xaf\x3f\xd9\xa0\x49\x33\xc8\xf2\xd6\x6a\xe5\x4d\x1a\x43\xaa\xbc\xee\xc0\xd1\x52\x8e\xe1\xcc\xb3\x26\x5e\x88\x00\xdf\x52\x4d\xd8\x29\x49\xdd\x2e\xbb\xea\x67\x9d\x29\x25\x0e\x14\x4a\x56\xea\x80\x0d\x6a\x25\x6a\x63\xcb\xbd\xa9\x20\x12\x78\xd3\x13\x75\x8b\xae\xac\x2b\x4a\x7f\xa0\xad\x82\x2c\x45\xd5\x59\x7a\xca\xf6\x4d\x40\x90\x84\xaa\x0f\x88\x4c\xd9\x97\xd9\x5c\xeb\x49\x7f\x33\x8e\xff\x5c\x3e\xbb\xfa\x10\x5f\xa3\x8f\xf9\x6f\x4b\xaa\x8c\xbd\x7c\xb9\xd9\x11\x60\xdb\x31\xeb\x22\xd5\x5c\x15\x4c\x5d\x83\xd5\xfe\x9c\x09\xb3\x68\xde\x26\xab\x94\x3a\xd4\x8b\x4b\xa9\xdf\x94\xcc\x6c\xa9\x6d\x36\x6a\xf5\x26\x04\x43\x79\xde\xe8\xd3\x63\x3a\x3f\x21\xf3\x56\x6e\x63\x01\xc5\x2e\x0f\x44\x4e\x9d\xc2\x68\xba\xd8\x4d\x6f\xe6\x64\x07\x76\xbb\x95\xba\x69\x8d\x07\xcd\xb6\x3e\xd2\x98\xc1\x00\x32\x8d\xa2\x4f\x8d\x09\xbb\xdd\xf7\x55\x39\xe3\x04\x39\x85\x2b\xf2\xe1\xe8\xe4\x2f\x15\x76\x8a\x4c\x6a\x6a\xbb\x0a\xdf\x2d\x5a\xf9\x2c\x32\x54\x8a\x6b\x0e\xc3\x52\xa5\xb2\x19\xf4\xf9\x65\xdf\x1c\xe7\x80\x14\x31\x55\x26\x9e\x13\x1c\xc7\x0f\x25\x66\x6e\xc5\x0b\xff\xdb\x91\x12\xff\xdd\xef\xd7\x77\xc4\x89\x12\x11\xe5\xb4\x92\xdb\x8d\x8c\xda\xa2\x15\xe6\xb9\xdc\x44\xa9\x52\x75\x24\x68\xfd\xa6\x5e\x54\x32\x65\x93\x29\x2f\x7a\x8d\xcc\x58\x0c\x39\x2a\x7b\xbc\x4e\xfa\x8a\x47\xfb\xad\x82\xc7\xfb\x41\x9e\x16\x23\xc2\x45\xe3\x59\xae\x4b\xb4\x4b\x4a\xb9\xbd\x5e\x0d\xc0\x1a\x44\x94\xce\xf4\xa6\x48\xc4\x97\x74\x06\xaf\x6e\xa6\x55\x79\x6d\x0a\x4e\xb1\x16\xf0\xc8\x12\x4b\xb4\x95\x9f\x4c\xf2\xe5\x95\x54\xe6\x4b\x93\x15\x2c\x66\x86\xdd\xac\x6a\xb7\x82\x88\x68\x25\xf0\x3f\x39\xbd\xf3\x5e\x5c\x3d\x6c\xce\xb4\xfb\xf2\x3b\x3d\xae\x12\xf8\x3d\x9a\x1c\x14\x2e\x5d\x7f\xe6\x81\x20\xf0\x26\x3e\x08\x50\x8a\xa6\x2e\x0a\x42\xac\x93\x2f\x60\xf5\x9d\x30\xf6\x03\xeb\x20\x2f\x44\x36\x44\x3e\x46\xe2\x04\x73\x8f\x21\xdd\xf5\x55\x14\xa8\x9e\xeb\x6c\xfb\x34\x0b\x44\x8e\x3a\xb9\x34\x14\x7f\x59\x7d\x57\xbf\x12\xcf\x17\xed\xdf\x5c\x0c\xd2\xcb\xbf\x9f\x8c\x0a\x4d\x3b\xee\x26\x5f\x2f\xe7\xa6\x4e\x7d\xea\xd7\x09\x08\xbe\x7e\xdf\x7d\xd7\xfd\x25\xd1\x8b\x7e\xd5\x11\xba\x4f\xd0\x06\xab\x70\x15\x98\x9b\x3b\xc5\x7d\x14\x4f\x88\xbd\x23\x7c\x7f\x17\x1b\x7f\x90\xa8\xed\x3f\x0c\x4a\xa1\xe2\xe9\xb5\xe2\xeb\x33\x8e\x57\x3e\x3b\xf8\xe8\x8c\x63\xe2\xd3\x83\xcf\x78\xad\x90\x78\xc5\x9e\x79\x73\xf2\xa5\xd7\xc9\xbf\xbc\x62\x02\x49\x52\x14\x47\xe2\x14\xcb\x33\x34\xc7\x31\x3c\xce\xc5\xaf\xb5\x11\x17\xef\x20\xde\x60\xe7\xda\x1b\xeb\x1f\xe6\x27\xf9\xd6\xfa\x29\x0c\x40\x4a\xe0\x11\xa4\x01\xe2\x05\x8e\x61\x29\x92\x61\x69\x4a\x05\x1a\x49\xa8\x02\x8d\x08\x0a\xea\x2a\xce\xd1\x90\x22\x29\x84\x78\x0a\x11\x34\x01\x75\x0e\x27\x00\xa3\x09\x38\xad\x13\x87\xf7\x9f\xce\x06\x61\xb5\x8b\x20\x9c\x33\xb3\x39\xbc\x8a\x97\x8b\xeb\x70\xb2\xac\x13\xd6\x08\x07\x6b\xcf\x25\x84\x7a\x69\xb5\xa8\x4a\xeb\x06\x13\xe6\x64\x55\xea\x2f\x96\x05\x61\x49\x19\xa1\xdf\x70\xc6\xe2\x1d\xd7\xd5\xf7\xe8\xe4\x8b\x4e\xe1\xe3\xf6\x47\xd9\x8c\x7a\xa1\xef\x4e\xfb\x6f\xd7\x74\xd2\x79\xd7\x05\x4e\x05\xba\x0e\x20\xaf\x12\x2c\x4e\x52\x80\xe2\x78\x9e\x26\x58\x46\x85\x38\xa4\x74\x9d\x00\x80\xd4\x80\x4e\xe3\x38\xae\x23\x9d\x16\x34\x92\x40\xba\xca\xd3\x9c\xa6\x41\x1d\x22\xb0\xe3\x9d\x7c\xcb\xfb\x3f\x54\xee\xcf\xe2\x9d\xa7\x4f\xcf\xa7\xbe\x49\xf6\x24\xef\x50\xa3\x79\x56\x83\x9a\x86\x93\x1a\xcd\xe2\x3c\xc1\xb1\x1c\xa1\xd2\x80\x01\x1c\x12\x34\x16\xf1\x2c\xa3\x02\x52\x50\x21\x4d\x20\x96\xd4\x38\x00\x74\x0e\x07\xa4\x8e\x10\x03\x29\x56\x43\xfb\xb7\xa3\x6e\xf2\x2e\x45\x2e\xe5\x86\x34\x33\x97\x9a\xf2\xca\x6b\x65\x29\xb7\x54\xcf\x6c\x08\xae\xbd\x36\x03\xc2\xd2\x6b\x85\x91\xdd\x1a\x18\x7e\xd4\xc9\x74\x63\xf9\x72\x4f\xca\xec\x0b\x65\x5c\xe3\xf6\x5d\xde\xf3\xcf\xd9\x6f\xa8\x8f\xd9\xbf\x97\x77\x9a\xe6\x59\x52\xe0\x11\x4e\xeb\x3a\x24\x74\x8a\x25\x71\x95\x21\x09\x9d\x27\x80\x06\x19\x12\xe7\x74\x46\x23\x48\x95\x24\x20\xce\x03\x9c\x63\x19\x5e\xd0\x48\x88\x28\x8d\xd7\x00\x62\x68\x6a\xff\x8e\xcf\x5b\xde\x3f\xb1\xdc\x31\x8f\xb9\x0f\xf2\x2e\x3f\x67\xbf\x46\x3f\x66\xff\xe6\x02\x66\xfa\xf7\x3b\x1f\xef\x30\x7e\x75\x6f\x51\xac\xf2\xa5\xd6\xa2\x35\x83\x15\xb2\x24\x52\x83\xfe\xb4\xed\x57\xec\xe9\x10\xc7\xf5\x22\x1f\x54\x15\xce\xc6\xe5\xf6\xb2\x3c\xc8\x8a\x43\x4a\x3c\x0e\xf9\xc5\x34\x96\xde\xb0\x16\x42\x63\xd8\x66\x65\xce\xcd\x57\xf1\x6a\x2b\xb3\x1c\x75\x24\x61\x33\x5c\x0c\xfb\x5d\x6a\x65\x36\xcd\x51\xd4\x81\x44\x7e\x61\xb7\xaa\x88\x8f\xab\xae\x2f\x2e\x92\xaf\x5a\xe7\x76\x51\x29\xae\x94\xd1\xb4\xa5\x36\xbb\x64\x91\x99\xcc\x9d\x9c\x6d\x14\x8b\xc8\x10\xca\xbc\x45\xab\x84\xec\xf4\xac\xd5\xcc\x92\xad\x92\x10\xcc\xc7\x3e\x2e\x70\x44\x81\x6d\x54\x07\x3a\xca\xda\xf4\xcc\x2b\x84\x4a\x26\x50\x70\x93\x98\x57\xcd\x90\x11\xf1\xf2\x7a\xe0\xc0\xc9\xa8\x3a\x60\xdc\xed\xd8\xe0\x85\xdc\xd8\x8d\xb0\xc2\x96\xb5\x41\xcd\x1a\xe7\xd7\xa1\xa2\x5a\x0d\x99\xcb\x8a\x5a\xb5\x36\xe5\xdc\xe6\xa4\x05\x85\x65\xd1\x22\x5b\xdd\xd5\xe9\x0d\xc5\x1b\x1c\x9c\x3c\xe3\x6c\x85\x38\x21\xbb\x7b\x05\x52\xfc\xe7\xa2\xb4\xf8\x09\xbd\x44\xa1\x3b\xc8\x05\x4f\xd8\x17\x2f\xec\x7f\x20\x25\x8c\xf9\x7b\x26\x5a\xa7\x45\xcb\x5f\x3d\x34\x78\xbc\x91\xdd\xc8\xab\x77\x97\x3f\xaf\xb3\x55\xd4\x00\xc6\x74\x55\x03\xbd\xa6\xc0\xe6\x36\x7a\x20\x20\x5c\x75\xfd\xfa\x78\xb8\xc9\x0d\xca\xb3\x82\x5b\xe1\x66\x8b\x59\xcc\xdc\x8d\x46\x96\xb3\x2b\x5e\xc7\x58\xf8\xcb\x4a\x83\xc4\x87\x52\x43\x1f\xe9\xc3\xa0\x28\xcb\xbd\x70\x39\x02\x40\xd6\xe7\x9d\x88\x5d\xdb\x65\xdb\xca\xdb\x20\xa3\x0c\x59\x85\x53\x0c\x03\xf6\xc6\x35\x57\x6d\x69\x63\x81\x56\x6a\xa2\x5e\xd1\x5a\x62\x7d\x3e\x84\x4a\x83\x5b\x07\x4b\x84\x6a\xd2\xb6\x21\x64\x86\xeb\x45\xc6\x9f\xe6\x46\x52\x63\x8a\x94\xd6\x60\x58\x95\x36\xd9\xd5\xdc\x24\x17\x2d\x31\x9f\x11\xca\xf8\x84\xe3\x27\x25\x0a\x66\x32\xee\x11\xd8\x3f\xdf\xc8\x9e\x75\xf2\x27\x1b\xd9\x9c\xcb\x76\xf3\xea\x67\x36\xb2\xff\xe0\x90\xe8\xae\x46\xf6\xc9\xe3\xc0\xc7\x27\xaf\x6e\xf4\x64\xbf\x70\xf2\x2a\x27\xcc\xec\xca\x80\x9c\x53\x0b\xae\xa5\xaf\xf9\x66\x0d\xcd\x64\x48\x74\xbb\x0a\x63\xae\xe6\x33\x05\xcf\xb9\xc6\xd0\x6f\x84\x9c\xd1\x20\x58\xb2\x05\x67\x13\x52\xeb\x74\x7b\x3a\xca\xbb\x0b\x15\x6f\x8a\x40\x9f\xe4\x87\xab\x70\xd2\x17\xad\xa0\x1a\x4d\xad\x9c\xbd\x9e\xe6\xc4\x51\xdc\x28\x16\xbd\x49\xb8\xd0\xc4\xb0\x6d\x18\xc3\xf1\x6a\x55\x19\x38\xac\x06\xdd\xb1\xea\x7a\x6b\xbc\x64\x57\x87\xf3\x85\x5a\xa9\x66\x18\x58\x0f\x4f\xfe\x95\xde\xe0\x46\xe7\x95\x7a\xd6\xe0\x62\xee\x76\x63\xbf\xc4\x44\xe8\x03\x01\x69\xea\x9c\xea\xe2\xca\x75\x25\x0f\x3a\x6b\xf0\x9f\x62\xff\x4a\xb0\xb9\xc7\xfe\x2f\x19\x0b\xbf\xbd\xfe\x63\x39\xc8\x47\xc7\xe2\xe2\xc9\x7e\xeb\x11\xfb\x85\x7e\x0f\xdf\x2b\xaf\x0e\xe8\x02\x8e\x26\x0d\x56\x5c\x0b\x12\xde\x0c\x8a\xb2\xb1\x50\x09\x8e\x20\x7a\x02\x3f\x9a\xd2\x76\x75\x66\x0b\x2d\x8e\x99\x49\xd4\x22\x51\x15\xa7\x06\xb7\xbc\xe4\xef\xae\x80\xf4\xc9\x09\xd2\xef\xd9\xf4\x88\x68\x89\x71\xd0\x68\x2b\x23\x6f\x6a\x74\xb3\x81\x5e\x37\xf3\x05\x45\x37\x00\x49\x28\x25\x41\x93\x03\x05\x4a\x95\x1c\x39\x28\xe3\x3e\x2d\x4c\x01\xd3\xab\x1d\x91\x3d\x13\x90\x92\x5e\xfb\x48\x40\x68\x9c\xea\x22\xb1\x12\x90\xbc\x6e\x07\x84\x4f\xb4\x2f\x3d\x62\xff\x4d\x72\xfe\x5f\xd7\x20\xc5\xf3\xe4\xfd\xbf\x0e\xdf\xcd\xe4\xfe\xc6\x66\x12\x1f\xcd\xf0\x2f\x36\x94\x38\xc4\xa2\x64\x8a\xbe\xfb\xae\xf4\xe4\xeb\x29\xc1\xec\xba\x96\x63\x0e\xb2\xfb\x1a\xf5\x8d\x96\xab\x1b\xe0\xbe\xdd\x17\xfc\xb8\xf1\xef\x61\xd3\x89\x77\x8a\x99\xdc\xa0\x3c\xde\x96\x3c\xa1\x31\x5e\x1b\x11\xf3\xf9\x94\xad\x3a\x8f\x06\xb1\x66\x5b\xa9\x89\xed\x11\x56\x91\x47\xd8\xb7\xe3\x2e\x46\xaf\xc7\x2d\x72\xaf\x6e\x58\x7b\xb1\x55\xfa\x67\x01\x0f\x6e\xa0\x0e\x6e\x41\x4e\xdb\x40\xf4\xb4\x3b\xfc\xd3\xf0\x20\x70\xd2\x90\x1d\x0c\x9c\x83\xda\xed\x59\x76\x7b\x77\xd1\x9b\xdb\xe2\x3f\x0d\xf7\x4c\x79\x1a\xf0\x1b\xd6\xb1\x5e\x5d\x69\xf5\x64\xec\xb4\x91\xc9\x87\x4a\xf2\x39\x7c\x7f\xb0\x00\x6f\xeb\xe0\xb4\xe1\xea\x95\xcd\x42\xcf\x0e\x53\x78\x1a\xef\x4e\x59\x1a\xd0\x84\x99\x73\x84\xfb\x2d\x2c\xd3\xb7\xae\x4c\x9e\x1c\xf1\x34\xb8\x58\x57\x1a\xb6\x93\x91\x73\x68\xa6\xf7\x1a\x6f\x68\x79\x73\xab\xc6\x94\x13\x33\x9e\x47\x9a\x50\x99\x0a\xf8\xd2\x64\x5a\xa5\x5f\xd9\xcf\xf1\xec\xdc\x90\xcf\x40\x1a\x44\xf0\x0a\xc6\x83\x99\x73\x74\xf1\x56\x90\x37\x36\x77\x7c\x73\x58\xca\xd3\x20\x4f\x0a\xd3\x80\x5e\x98\xbb\x2b\x86\x25\xbe\xf6\xb9\x3c\x32\xe6\x69\xb4\x27\x85\x69\x68\x2f\xcc\x9d\xa3\x3d\x6c\x91\x78\x63\x0b\xc2\x37\x47\xe7\x3c\x8f\xf7\xa8\x30\x15\xef\xb9\xb9\x73\xbc\xc7\x5d\x0c\x6f\xec\x4e\xf8\xe6\x0c\xa1\xa7\x01\x9f\x14\xa6\x01\xbe\x30\x77\x75\x68\xb0\xdb\x9d\xf0\xf5\xb4\xf5\xe0\xcd\xed\xe7\x52\xce\x58\x7a\xbe\x1c\x09\x95\xa9\x25\xb9\x34\x99\x16\x25\x02\x34\x7f\x3d\xec\xb7\x76\x7d\x6b\xb8\xcb\xb3\xa7\x3e\x01\xfb\x4d\xe0\x4f\xa1\xbe\x18\xa2\xa6\x9d\xc8\xf5\x34\xfe\x73\xa5\x69\x85\x48\x31\x7b\xb5\x24\xc9\x6d\xdb\xae\x0d\x35\x8f\xa7\x95\xed\xb1\xc7\x67\x9b\xdd\xb7\xa1\xdc\xee\x18\xb4\x0b\x3d\x58\xa3\x7e\x1a\xc5\xf6\x3a\x4a\xbd\x88\xc1\xd0\x47\x08\x3b\xec\x1e\xf9\x07\x36\x28\xc9\x6d\x19\x4b\xee\x26\x79\xda\x22\xec\xed\x40\xf3\xfc\x00\xb6\x47\x51\x9e\xab\xd9\x82\xdc\x8f\x53\xce\x20\x26\xb7\x14\x7f\x4d\x6e\x20\xfe\xba\xdb\xd8\xfb\x0d\xba\xd3\x29\x72\x8f\x02\x3b\x6a\xd8\x62\x3a\x35\x8c\x33\x58\xd7\x87\x8a\x67\xe7\xdd\x3d\x03\xe1\xa0\x64\x87\x22\x11\x60\xee\x04\x72\x76\x44\xdf\xa3\x40\x92\x4a\xb6\x40\xce\x07\xc2\x77\x22\x39\x3b\x56\xf0\x51\x24\x49\x25\x5b\x24\x89\x6f\xaa\xef\x87\x71\x76\x14\xe2\x13\x48\x92\x7a\xf6\x60\x0e\xa3\x84\x73\x30\xc9\x6d\x83\x6f\x85\xaf\xe7\x10\x5d\x2a\xda\x42\xba\x88\x8d\xef\x72\x74\xed\x04\x50\x4c\x75\x6d\xcf\x42\x21\x8a\xcd\xfe\xdf\x00\x00\x00\xff\xff\xcd\xc6\x70\x88\x2e\x74\x00\x00") - -func asset_stat_trustlines_2CoreSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_trustlines_2CoreSql, - "asset_stat_trustlines_2-core.sql", - ) -} - -func asset_stat_trustlines_2CoreSql() (*asset, error) { - bytes, err := asset_stat_trustlines_2CoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_trustlines_2-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x50, 0xa9, 0xf5, 0xe1, 0x9a, 0x6c, 0x6e, 0xa, 0x7a, 0xf2, 0xba, 0xb5, 0x44, 0xd6, 0x17, 0x66, 0xa9, 0x72, 0x53, 0x6e, 0x9e, 0xd2, 0x3e, 0x93, 0x10, 0xc3, 0xfd, 0x8, 0xd0, 0x41, 0xe6, 0x84}} - return a, nil -} - -var _asset_stat_trustlines_2HorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x67\x8f\xdb\x48\xd3\xe0\xf7\xfd\x15\x84\xb1\xc0\xd8\x98\xb1\x87\x39\x78\x5f\x3f\x00\x25\x51\x39\x87\x91\x34\x8b\x05\xc1\xd0\x94\x38\xa2\x48\x0d\x49\xa5\x59\x3c\xff\xfd\xc0\x24\x51\x14\x93\x82\xbd\x7b\x77\xaf\x60\x18\x23\xb2\xba\x52\x57\x75\x55\x57\xb7\xba\xbf\x7e\xfd\xed\xeb\x57\xa8\x6b\x58\xf6\xcc\x04\x83\x5e\x13\x92\x05\x5b\x10\x05\x0b\x40\xf2\x7a\xb9\xfa\xed\xeb\xd7\xdf\x9c\xf7\xa5\xf5\x72\x05\x64\x48\x31\x8d\xe5\x11\x60\x03\x4c\x4b\x35\x74\x88\xf9\x46\x7e\x43\x42\x50\xe2\x1e\x5a\xcd\x78\xa7\x79\x04\xe4\xb7\x01\x37\x84\x2c\x5b\xb0\xc1\x12\xe8\x36\x6f\xab\x4b\x60\xac\x6d\xe8\x07\x04\xff\xe1\xbe\xd2\x0c\x69\x71\xfe\x54\xd2\x54\x07\x1a\xe8\x92\x21\xab\xfa\x0c\xfa\x01\x3d\x8c\x86\x65\xfa\xe1\x8f\x00\x9d\x2e\x0b\xa6\xcc\x4b\x86\xae\x18\xe6\x52\xd5\x67\xbc\x65\x9b\xaa\x3e\xb3\xa0\x1f\x90\xa1\xfb\x38\xe6\x40\x5a\xf0\xca\x5a\x97\x6c\xd5\xd0\x79\xd1\x90\x55\xe0\xbc\x57\x04\xcd\x02\x27\x64\x96\xaa\xce\x2f\x81\x65\x09\x33\x17\x60\x2b\x98\xba\xaa\xcf\xfe\xf0\x79\x07\x82\x29\xcd\xf9\x95\x60\xcf\xa1\x1f\xd0\x6a\x2d\x6a\xaa\xf4\xe4\x08\x2b\x09\xb6\xa0\x19\x0e\x18\xdb\x1c\x72\x7d\x68\xc8\x16\x9a\x1c\x54\x2b\x43\xdc\xa4\x36\x18\x0e\xa0\x4e\xbb\x39\xf5\xe1\xbf\xcd\x55\xcb\x36\xcc\x3d\x6f\x9b\x82\x0c\x2c\xa8\xd4\xef\x74\xa1\x62\xa7\x3d\x18\xf6\xd9\x5a\x7b\x18\x6a\x74\x0a\xc8\x4b\xc6\x5a\xb7\x81\xc9\x0b\x96\x05\x6c\x5e\x95\x79\x65\x01\xf6\x7f\xfc\x0a\x82\x92\xfb\xd7\xaf\x20\xe9\xd8\xd5\xaf\x13\xd0\xa3\x76\xb9\x74\x1e\x83\x8e\x21\xa7\x11\x0b\x41\x1d\x91\xbb\xe0\xb5\x76\x89\x9b\x84\x20\x7d\xb4\x2e\x57\x3c\x50\x14\x20\xd9\x16\x2f\xee\x79\xc3\x94\x81\xc9\x8b\x86\xb1\x48\x6f\xa8\xea\x32\xd8\xf1\x21\xe1\x74\x4b\x70\x0d\xdd\xe2\x0d\x9d\x57\xe5\x4b\x5a\x1b\x2b\x60\x0a\x87\xb6\xf6\x7e\x05\x6e\x68\x7d\xe4\xe4\x26\x2e\x2e\x6b\xab\x01\x79\x06\x4c\xb7\xa1\x05\xde\xd7\x40\x97\x2e\x12\x21\xd4\x7c\x65\x82\x8d\x6a\xac\x2d\xff\x19\x3f\x17\xac\xf9\x95\xa8\x6e\xc7\xa0\x2e\x57\x86\xe9\xb8\xa3\x3f\xa6\x5e\x8b\xe6\x5a\x5d\x4a\x9a\x61\x01\x99\x17\xec\x4b\xda\x07\xc6\x7c\x85\x29\xf9\x7e\x79\x05\xd3\xe1\x96\x82\x2c\x9b\xc0\xb2\xd2\x9b\xcf\x6d\x53\x76\xe3\x0e\xaf\x19\xc6\x62\xbd\xca\x01\xbd\xca\x62\xc9\x83\x12\x54\xf3\x42\xc4\xc1\xa0\x9b\xbb\x81\x33\x4e\x28\x0a\x30\xf3\x81\x06\xe8\xaf\x68\xe2\xab\x35\x5f\x23\x77\x68\xbd\x80\x48\x78\x28\xce\x6a\xb1\x72\x1a\xcc\xed\xcc\x1e\xb0\x4e\x06\x20\x71\x9f\x69\x46\xf3\x83\xa7\xe7\x01\x36\x3c\x3e\x8c\x4c\x40\xd5\xb2\x79\x7b\xc7\xaf\xb2\x51\x3a\x90\xc6\x2a\x2f\x24\xc8\x0b\x16\x84\x92\x74\x60\x31\x70\xf7\x4c\xb0\xec\x51\x4c\xdc\xe7\xeb\x4c\x2f\x46\x3a\xda\xb6\xac\x75\x16\xe5\x03\xb0\x64\xc8\xe0\xc2\xbc\xe0\x60\x06\x2b\xc1\xb4\x55\x49\x5d\x09\x7a\x6a\xf0\xce\x6a\xca\xaf\x2e\xcc\x4d\x0e\x11\xed\x52\x0e\xe2\x1b\x5e\x4c\xdf\x55\x5e\x1e\x7a\x1e\xe0\x4f\xc7\xef\x75\xa6\xd3\x93\xfe\x9f\x4e\x7c\x08\x52\x3f\xd7\x18\xf8\x9c\x1c\xcc\x0c\x73\xc5\x2f\xd5\x99\x9f\x30\xa4\xb0\x10\x81\xcc\x2d\xe3\xe5\xf9\x5e\x1a\xe6\xbc\xc6\xe9\xb5\x2e\x76\x9a\xa3\x56\x1b\x52\x65\x8f\x72\x89\x2b\xb3\xa3\xe6\x30\x27\xee\x04\xa3\xbb\x03\x66\xbf\xbb\xd3\x31\xb9\xdf\xf2\x8b\x1f\x44\xe9\x01\xd7\x1b\x71\xed\xe2\x15\x3a\x73\xf2\x6c\x0b\xbc\x5f\x4c\xf9\x04\x49\xee\xd6\x32\xc8\x09\x7b\xcc\x66\x73\x4b\x98\xe0\xf5\x97\xc8\x17\x8f\x22\x5f\x5b\x3f\xef\xcb\x07\xec\x27\x79\xb9\x65\xf3\x47\x80\x4b\x64\xf1\x9a\xe4\x84\xf5\xd3\xbf\xfc\xfc\x04\xf9\x62\x1e\x8e\x22\x63\x48\x3a\x70\x68\x48\xf0\x01\xd9\x4a\xa5\xcf\x55\xd8\x61\x0c\xf0\x52\x75\x66\x1c\xaa\x04\x3e\xeb\xeb\x25\x30\x55\xe9\xcf\xbf\xbe\xe4\x68\x25\xec\xae\x68\xa5\x09\x96\xfd\x59\xd0\xf7\x40\x73\x4b\x31\x39\x5a\x28\xaa\x19\xdb\xa4\x3c\x6a\x17\x87\xb5\x4e\x3b\x45\x1e\x5e\x98\xcd\x8e\xdc\x3d\x41\x67\x8c\xa6\xe0\x08\xa4\xbb\x01\x87\x23\xab\xdb\xfc\xc8\xfc\x13\x74\x89\x20\xae\xe8\x39\x30\x70\x93\x21\xd7\x1e\x44\x50\x68\xab\x99\xf5\xae\x05\xb6\x58\xac\x72\x2d\xf6\x8c\xc2\x1f\xbf\x79\x55\xb8\xb6\xb0\x04\xdf\x83\x67\xd0\x70\xbf\x02\xdf\xfd\x26\x7f\x40\x03\x69\x0e\x96\xc2\x77\xe8\xeb\x1f\x50\x67\xab\x03\xf3\x3b\xf4\xd5\x2d\xce\x15\xfb\x9c\xd3\x5f\x3e\xe6\x00\xdf\x6f\x27\x18\x4f\x5f\xfa\x88\x8b\x9d\x56\x8b\x6b\x0f\x53\x30\x7b\x00\x50\xa7\x7d\x8a\x00\xaa\x0d\xa0\x87\xa0\xec\x16\x3c\xb3\x5c\x24\x0f\x51\xca\x81\xf8\x3e\xcd\x83\x86\x32\xe5\x39\xd1\x65\xbb\x33\x8c\xe8\x13\x1a\xd7\x86\xd5\x03\x5b\xe1\xfa\xdb\x09\xf9\x23\x96\x08\x23\x97\x08\x7f\x86\xc4\x55\x40\xb7\xf9\xbc\x9a\x0d\x7a\x4d\x68\x65\x1a\x12\x90\xd7\xa6\xa0\x41\x9a\xa0\xcf\xd6\xc2\x0c\xb8\x6a\xc8\x59\x2f\x0c\xb3\x9b\x6d\x68\x3e\xfb\x81\xad\x1e\xf9\x0f\xfa\x36\x4e\x97\x07\xcb\xce\xc4\x0f\xf5\xb9\xe1\xa8\xdf\x1e\x84\x9e\xfd\x06\x41\x10\xd4\x64\xdb\x95\x11\x5b\xe1\x20\x57\xfa\x56\x6b\xe4\x8d\x77\x83\x61\xbf\x56\x1c\xba\x10\xec\x00\xfa\x9d\xff\x1d\x1a\x70\x4d\xae\x38\x84\x7e\x47\x9c\x6f\xd1\xde\xc8\x74\xc4\xdb\xa4\xcb\x42\x7f\x37\xe1\xd0\x38\xe1\xf2\x8c\x54\xb7\xc9\x97\x83\xc2\x41\xc4\xc3\xa3\xab\x24\xfc\xfc\x1b\x04\x15\xd9\x01\x07\x8d\xab\x5c\x1b\xfa\x1d\xf9\x13\xf9\xeb\xf9\x77\xe4\x4f\xf4\xaf\xff\xfc\x8e\xba\x7f\xa3\x7f\xa2\x7f\x41\x43\xef\x25\xc4\x35\x07\x9c\xa3\x14\xae\x5d\xfa\x12\xab\x99\x1c\x71\xe0\x46\xcd\x64\x53\xf8\xd9\x9a\xf9\x9f\x6b\x34\x73\x1e\x53\x7d\x3d\x1c\xe2\x70\x3e\x45\x1c\xc3\xf6\x19\x46\x97\x63\x08\x1a\x38\xba\x82\x7e\x1c\x47\x80\x27\xef\xf1\x70\xda\xe5\xa0\x1f\x61\x8f\xf8\x12\xe7\xb5\x77\xe5\x31\x8a\x30\xc2\x62\xe0\xc6\xf9\x39\x8c\x4d\x81\x6e\xe5\x32\x0e\x69\x84\xd3\x13\x87\x3c\x65\xf7\x68\x65\xe7\xdc\xc6\xa5\x79\x37\x73\x1b\x83\x34\xca\x6d\xd8\x49\x52\xb9\x75\x22\x97\x0c\x14\x61\xad\xd9\xbc\x2d\x88\x1a\xb0\x56\x82\x04\xa0\x1f\xd0\xc3\xc3\x1f\xa7\x6f\xb7\xaa\x3d\xe7\x0d\x55\x0e\x2d\xa5\x9d\xc8\x1a\xce\x7f\x7d\x11\x5d\x07\xcb\x27\x9e\xe7\x8b\xe1\xc9\xb7\x27\x91\x2a\x43\xa2\x3a\x53\x75\xdb\x4d\x0c\xda\xa3\x66\xd3\x13\x47\x58\x3a\x69\x3c\x24\xcd\x05\x53\x90\x6c\x60\x42\x1b\xc1\xdc\xab\xfa\x2c\x02\xa6\xaf\x97\x87\x94\x1f\x52\x75\x1b\xcc\x80\x19\x01\x51\x34\x61\x66\x41\xd6\x52\xd0\xb4\x73\x32\xb6\xb1\xd4\xce\x89\x7c\x46\x09\xe2\xcb\x01\xf2\xbc\xdb\xa3\xf3\x86\x6b\xd5\x11\xad\x76\x1c\x54\x62\x83\xdd\x99\x42\x56\x2b\x4d\x75\x6b\xf6\x90\xad\x2e\x81\x65\x0b\xcb\x15\xe4\xf4\x99\xfb\x15\xfa\x30\x74\x70\xce\x68\xd2\xac\x28\xc8\x47\xfd\xe9\x54\x3e\x9e\x0f\x93\xaf\x04\xac\xbe\x19\xb2\xfd\xa1\x97\xd1\x21\xee\x83\x5a\xbb\xd8\xe7\xdc\xf4\xab\x30\xf5\x1f\xb5\x3b\x50\xab\xd6\x7e\x61\x9b\x23\xee\xf0\x9d\x9d\x1c\xbf\x17\xd9\x62\x95\x83\x90\x2c\x61\xae\x56\x7b\x14\xd1\x99\x29\xfa\x45\x0f\x48\x07\x3b\x7b\x23\x68\x9f\x1f\x12\x24\x7e\xf8\xfe\xdd\x04\x33\x49\x13\x2c\xeb\x4b\xb4\xbb\xbc\xb5\x8a\x18\xdb\x22\xf1\x2f\x29\x1d\xe5\xcd\x8d\x6f\x96\xcc\xab\xe8\x1c\xe4\x8a\xf7\x8c\x63\xad\x2e\x9e\xcd\x58\x70\xc9\x90\xe3\xc0\x11\x34\x1e\xdc\x2b\xff\xc5\x34\x20\xc8\x34\x0f\x8b\x2f\x2f\xdc\xc9\x6c\xc3\x38\x7f\x99\xd1\xa6\x09\x02\x75\xc6\x6d\xae\x04\x15\xa6\x19\x12\x79\x15\xba\x74\x81\x0e\xb8\x22\xaf\xbf\xa9\x72\x12\x6f\x41\xcd\xe7\x56\xab\xf3\xf1\xf8\x66\x17\xf1\x19\x3e\x69\xa4\x3f\x2f\x71\x25\x41\x7e\x72\x17\x3e\x3e\x25\x58\xb3\x6b\xc7\xf1\xaf\x64\x60\x0b\xaa\x66\x41\x6f\x96\xa1\x8b\xc9\xc6\x16\x14\xca\x6e\xd5\x83\x8f\xc7\xd7\x43\xb0\x6e\x9d\xc0\x5b\x68\x31\x39\x97\x17\xc6\xad\x63\xc7\x37\xf4\xd5\x12\xaa\x8c\xba\x1d\x71\xe0\x23\x18\xe5\xe0\x08\x85\x63\x47\xe4\x83\x3f\x2c\x26\x47\x02\x93\xb1\xb6\x8f\xb1\x29\xda\xc6\x04\x82\x9d\xd9\xc8\x83\x5d\xaf\xe4\xdc\xb0\x07\xd3\xf1\xbf\x46\xd6\xd9\xcf\x64\x41\xce\xf2\x01\x5b\xd0\x78\xc9\x50\x75\x2b\xde\x06\x15\x00\xf8\x95\x61\x68\xf1\x6f\xdd\x95\x4f\x05\x24\xf5\xb5\xfb\xda\x04\x16\x30\x37\x49\x20\x4e\x1e\x6a\xef\x78\x37\x4d\x52\x3f\x92\xa0\x56\xa6\x61\x1b\x92\xa1\x25\xca\x15\xed\xa3\xc0\x58\x80\x20\x03\xd3\x4d\x2f\xbc\xe7\xd6\x5a\x92\x80\x65\x29\x6b\x8d\x4f\x34\x14\x5f\x70\x41\xd5\x80\x9c\x0c\x95\xec\x56\x09\xb5\xeb\x5b\xbd\x2c\x61\x3d\x24\x23\xe6\xe5\x1f\x6d\xb2\xc7\xaf\x4b\x45\xbe\x6f\x18\x4b\xa5\xf1\xab\xc2\xda\x45\x82\xde\x18\xe6\x52\x69\x9d\x87\xbd\x78\xf0\x94\x30\x18\x5a\xd9\xb9\x9b\x6d\x66\x4d\x73\x4e\x77\x55\x25\x4c\x85\x9c\xcc\x5f\xf2\x44\x71\x23\xe0\x8d\x01\xd0\xf7\x7c\x63\x6d\x4a\x87\x6d\x1a\x09\xa1\x27\x18\x4e\x1e\x1e\xbe\x7f\x4f\x9e\x8a\x25\xfb\x81\xbf\xb0\x76\xab\x3a\xfd\xbd\x80\x9f\xef\x9a\x2f\xf8\x43\xe2\x35\xd1\xcb\xdd\x0b\x93\x48\x36\xb2\x13\x31\x0d\xc8\xdf\x1c\x99\x06\xe2\xcd\x83\x63\x01\xce\xf7\x74\x66\xc0\xa5\x92\x3b\x40\xa5\x50\x74\x59\x52\x2d\xde\x02\x9a\x06\x4c\x48\x34\x0c\x0d\x08\x7a\x10\x93\x54\x09\xf0\xfa\x49\xfc\xf5\x9e\x9d\xc6\xe4\xe3\x6e\x22\x3e\x12\xad\x4f\xf6\x33\x45\x5f\x86\x96\xe9\x63\x77\x7e\xba\x5c\xf3\xee\xde\x60\xa8\x58\xe5\x8a\x0d\xe8\xf3\xe7\xb0\x06\xff\x03\xc1\x5f\xbe\x64\xa1\x8a\x6b\x1e\x28\xed\x7f\xce\xf4\x98\x03\xdf\x89\x4e\x23\xe8\x23\x0a\x77\x19\x4c\x75\xa5\xf8\x15\xee\x3b\x38\x57\xfc\x9e\x85\x9c\x91\x34\xcf\x10\x76\x4b\x2c\xcd\xda\x1f\x70\x9f\x68\x9a\x41\xe5\x57\xc5\xd3\x0b\x85\xbd\x31\xa2\x66\x50\x3b\x8f\xa9\x49\x0d\x52\xa2\xea\xc9\x9e\x90\x3b\xda\x6a\x60\x9f\x61\x96\x72\x4f\xa2\xfc\xb1\x3f\x63\x6a\x96\x37\xf0\xa6\xc7\xd0\x58\xd8\x23\xe9\x58\x7f\x71\x66\x01\xc9\xd3\x88\xa4\x09\xda\x3f\x32\xc5\xb2\x77\x3c\xd0\x37\x40\x33\x56\x20\xae\x6c\x69\xef\x9c\x09\xcf\x5a\xb3\x13\x5e\x2e\x81\x2d\x24\xbc\x72\xa6\x5a\x49\xaf\x2d\x75\xa6\x0b\xf6\xda\x04\x71\x15\x36\x86\xfc\xf2\xe7\x5f\xc7\xdc\xe5\xef\xff\xc6\x65\x2f\x7f\xfe\x15\xd5\x39\x58\x1a\x09\xc5\xb0\x23\x2e\xdd\xd0\x41\x6a\x2e\x74\xc4\x75\x8e\xc6\x97\x4c\x5d\x02\x5e\x34\xd6\xba\xec\x56\xac\x69\x53\xd0\x67\x20\x3a\x1b\x3b\x0d\xad\x8e\x26\x1c\x6c\x33\x20\x67\x4f\xb7\xfc\xda\x9f\x2a\x07\xde\x16\x6c\xe1\xca\x33\x44\x78\xee\xe6\xee\x97\xcb\xd8\x1d\x36\xe0\x86\x29\x75\xd2\x70\x45\x2a\x5c\x25\xbd\x6c\x1e\x71\x3f\x21\x72\x6e\x9e\x4b\x15\x2a\x75\xfe\x91\x47\xc8\xc4\x48\x7b\x37\x31\x73\xef\x3f\x4c\x15\x34\x23\x2c\xc4\x8b\x5a\x12\x6c\x01\x52\x0c\x33\x63\xb5\x08\x2a\xb1\x43\x36\x43\xbc\x5a\x7b\xc0\xf5\x87\x50\xad\x3d\xec\x9c\xac\x18\xb9\x51\x74\x00\x7d\x46\x9e\xa0\x07\xf8\xe1\x09\x42\x9e\x20\xf8\x09\x7a\x78\x48\xe6\x22\x6d\xa1\xe6\x52\x4e\xa2\x8b\x35\x01\x37\x0f\x08\xaf\xea\xaa\xad\x0a\x1a\xef\x6d\x9c\xf9\x66\xbd\x6b\x0f\x4f\xd0\x03\x0a\x23\xcc\x57\x98\xfc\x0a\x63\x10\x42\x7f\x47\xe9\xef\x38\xf5\x0d\xc6\x50\x9c\x21\x1f\x61\xd4\x61\x3a\x17\x76\x94\xf7\x7e\x10\x71\xd2\x11\xe2\x9e\xb7\x0d\x55\x4e\xa7\xc4\x90\x04\x75\x09\x25\x8c\x5f\x5b\xe0\x10\x98\x78\x55\x3f\xfb\x11\x46\x2a\x3d\x1c\x87\x71\xfa\x12\x7a\x38\x2f\xc8\x32\x1f\x2d\x65\xa5\xd2\x20\x70\x02\x43\x2f\xa1\x41\xf0\x5e\x18\x0c\x12\x72\x77\x09\x34\x95\x04\x89\xc1\xe8\x45\x62\x90\x01\x09\x7f\xd0\xcb\x41\x82\xc6\x11\xe2\x12\x12\x14\xbf\x34\x64\x55\xd9\xe7\x97\x82\x46\x48\xf4\x22\x12\xf4\x89\x14\xfe\xce\xe7\x1c\x74\x28\x9c\xc4\x2e\xa3\xe3\x74\xba\x30\x9b\x99\x60\x26\xd8\x86\x99\x6e\x53\x0c\x8c\xc0\xcc\x25\xe8\x19\x17\xbd\x57\xe6\xe4\x77\xb2\x99\x8e\x1d\xa5\x90\x8b\xba\x1a\x81\x5d\xf4\x7e\x2f\xb8\x93\xdb\x74\x02\x04\x43\x5d\xa4\x1d\x04\x09\x13\x38\xcc\x96\x9c\x01\x20\x9d\x10\x43\x32\x97\x49\x82\x9e\x74\xb4\x3f\x3f\xf5\x7e\x6b\x9b\x46\x09\x81\x29\x02\xbf\xa8\x47\x10\xcc\x13\xe7\x30\xab\x4f\xed\x71\x04\x41\x29\xf2\x32\x49\x70\x5e\x51\x77\xc1\xef\x0e\x8c\xa5\xc6\x2b\x2a\xd0\x52\x87\x46\x04\x21\x10\xe4\xa2\x41\x18\x21\x82\xe5\x96\xa0\x0c\xbe\xcb\x10\x83\xa4\x2e\x1b\xe6\x11\x92\x57\xf5\x19\xb0\x6c\xfe\xbc\xd0\x9e\x41\x8a\x62\xe8\xcb\x7a\x84\x3a\x89\xf0\xee\x8a\x86\x90\x1e\x4c\x10\x14\x86\x31\xdc\x27\x92\x10\x6b\x53\x97\xe7\x2f\x0d\xb6\x67\x4b\xf4\xe1\xd8\x5f\x29\x4e\x1a\x15\xb2\xdf\xc6\x3b\xed\x1a\xd7\x2d\xb6\xda\xe5\x02\x85\xa1\x2c\x8e\x91\xaf\x44\xb7\x5d\x1a\xf4\x9b\x95\x71\x83\xaa\x14\x9a\xc5\x56\xaf\x59\x2b\x77\xf0\x01\xc5\x4d\xc7\x2f\xa3\xa8\x86\x12\x89\xa0\x0e\x91\x42\xbf\x3b\xad\xd6\x9a\x68\xb1\x86\x95\xdb\x3d\xbc\x30\x69\x96\x5b\xed\x52\xb3\x5c\x1f\xb5\xbb\x23\xb4\x3a\xc5\x5e\x5b\xe5\x41\xb5\xd3\x1e\x15\xb9\x0e\x3b\x18\x53\xbd\x22\xd5\x99\xa0\xd5\xdc\x44\x30\x57\x12\x14\xeb\x95\xd1\xea\x88\x23\x50\xb6\x35\x19\x95\x47\x55\x8c\x9d\xd6\xd9\xc9\xa4\x32\x99\xbc\xa0\x2f\xd5\xc9\x74\xda\x27\xb9\xe9\x84\x1b\x76\x1b\xa5\xc9\xeb\x80\x1d\x93\xd4\xa4\x83\x3f\x5c\xbb\xd3\xc3\x49\xfc\x32\xba\xc1\xdf\x1d\x77\xdc\xd8\xfa\xcd\x02\xe9\xbb\x20\x9e\x20\xec\x09\xb2\xcd\x35\xc8\x61\x1c\xe7\xfb\x1b\xae\x36\x0d\x6f\x5e\x12\x36\x0c\xc9\x04\xb2\x6a\xf3\x82\xb6\x9a\x0b\xfa\x7a\x89\x3b\xe6\x3c\x1a\x94\x1e\x7e\x8e\xa6\x53\x57\xf4\xef\xa2\xe7\x93\x59\x94\x9b\xef\xe6\xd3\x72\xdc\x82\xfe\xb5\x6a\x0e\x16\xf5\x43\x7a\x46\x28\x67\xcc\xa1\x30\x94\x46\x5c\xa6\x50\xc7\x5f\xfe\xfe\xa4\xa9\x4b\xd5\xfe\xf4\x1d\xfa\xc4\xa0\x28\x86\x51\x28\x8c\x91\x34\xf1\x0d\xa7\x28\x82\x86\xa9\x4f\x4f\xd0\xa7\xe3\x06\x12\x07\x6a\x34\x28\x1d\x1f\x3a\xf3\x6e\xe7\x61\xb4\x07\x8f\x10\xde\x46\x12\x07\xe6\xda\xae\xfc\xf4\xdf\x24\xdf\x8c\x93\x11\xa5\x69\x9c\x81\x09\x86\x26\x3c\x19\xe1\xff\xc7\x64\xc4\x9e\x20\x9a\xa0\x19\x06\xa3\x49\x9a\x39\xcc\xa5\xfe\xfe\x64\xd9\xce\x44\x43\x9f\xf1\xa2\xa0\x09\xba\xe4\x72\x8c\xc0\x30\xfc\x0d\xf6\x3e\xf9\x29\xa0\xa7\x14\x50\x77\x98\x78\xf8\xfb\x93\x97\x6c\x9c\xe1\x3d\xd3\x93\x2e\xd8\xea\x06\x5c\x2d\x11\xf6\x04\x21\x9e\x48\x5b\xa0\xce\xe6\x0e\x41\xe4\x09\xfa\xe4\x19\x3e\xbf\x00\xfb\x5f\x66\x4b\x2e\x57\x38\x4a\xf9\xa6\xf4\xb3\xf4\xec\x53\xf8\xe9\x7a\x8e\x48\x94\x53\xcf\xd7\x85\x6c\x8f\xab\x8c\xe1\x2e\x6e\xdf\xce\xb5\xc3\x5d\xb0\x77\x27\x10\x16\x7f\x82\x1e\x04\x0c\x56\x80\x88\x20\x38\xa1\xc8\x18\x46\xe0\x82\x4c\x08\x8a\x44\xc9\x84\x88\x28\x0c\x2e\xc3\x84\x48\xca\x92\x22\x00\x49\x84\x69\x04\x96\x29\x44\x01\x02\xa2\x00\x80\xca\xa4\x48\xc2\x04\xea\xc4\x1f\x27\xaf\x95\x31\x5c\x12\x30\x12\x65\x08\x86\xa0\x15\x9c\x50\x48\x44\x06\x04\x49\x30\x22\xc0\x01\x22\x88\xb2\xcc\xc8\x24\x89\x13\x84\x20\x4b\x08\x06\x18\x20\xc1\x38\x0d\x24\x52\x41\x65\xd2\x1b\xfe\x91\x48\x7e\x46\x7e\xc7\xa8\xef\x18\x11\x4d\xdb\xbc\xc7\xe4\x37\x8c\x41\x11\x82\xc9\x7c\xeb\x8d\xe7\x24\x83\xd0\xf8\x13\x84\x90\x4e\x7f\x9e\x7d\x9e\x20\xdc\xf9\x0f\xf1\xff\x0b\x1e\x22\x87\x3f\x1c\xd6\x58\x96\x65\x8b\xbb\x3a\x0a\xc3\xfb\xb7\xe9\x6a\xfc\xf2\x06\x4f\xd0\x2a\x78\xd1\x96\x8f\xc3\xf9\x3b\x83\xca\xaf\x8b\x17\x01\x2b\x74\x57\x14\x3b\xe8\xec\x36\xcd\xf1\x3b\x3d\xa7\x4b\xa2\xb6\x79\xdc\xee\x01\x3e\x97\xfb\xd6\x7a\xcf\xc0\x53\x4c\x2d\x76\x05\x65\x45\xed\x50\x61\xda\x00\x93\xee\xbb\x4e\x6d\x38\x07\x35\x3b\xe9\xbe\xb4\x3e\xb6\xec\xe1\x83\x61\xdc\xb2\x51\xdf\x62\x63\x41\x7b\xec\x8c\x26\xc2\x98\x98\x2e\xeb\x1d\xdb\x22\xd6\x33\x80\x2c\x96\xfb\x3e\x29\x17\x76\xbb\x86\x35\xd3\xd0\x4d\x17\x2d\xb7\xe7\xc5\x31\x5e\x2e\x7c\xec\x4b\x2d\x73\x51\x2d\x0c\xfa\x35\x64\x20\x6a\x1b\xba\x34\x16\xd7\xfb\x4a\x53\x28\x35\xa7\x30\x18\xcd\x1c\xcc\xbd\x36\xde\x14\x3e\x56\x68\xef\x48\x8c\xad\x84\xbf\x1c\x3e\xaf\xec\x04\xc1\x7b\x2c\x5b\x82\xeb\x71\xaf\xff\xd5\x1f\xbf\x86\x96\xe0\xf7\x51\x57\xc0\xee\x63\xc6\x0f\x18\x09\x33\x80\x20\x18\x09\x30\x18\x46\x88\x18\x05\x10\x0a\x17\x71\x5c\x22\x68\x54\xa4\x50\x44\xc6\x14\x04\x91\x25\x1c\x88\x38\x23\x03\x18\x28\x22\x49\xa1\x0a\x45\x8a\x38\x22\x32\x00\x48\x69\xae\x80\x27\x19\x3b\x8e\xc0\x04\x46\xa7\xbe\x75\x5d\xc1\x0b\xfb\x08\x4d\xd3\x29\xae\x80\xe5\x74\x85\x8f\x69\x9d\x78\xd1\x3b\x8b\x8f\xf1\x87\x32\x97\x9b\xfd\xd6\xb8\x68\xef\xab\x43\xba\x8f\x71\x24\xac\x83\xd2\xc6\xd6\x9b\x98\x00\x57\x08\xca\x2a\x8e\xc9\x8f\xf1\x76\x6b\x34\x98\xe1\x63\x7d\xd9\x7f\x26\x8c\xfe\x90\x9b\x37\xeb\xd4\x56\xab\xce\x48\xa1\x38\x41\xe9\xd6\xaa\x61\x4f\xea\xbb\x85\xdb\x75\xae\x2b\xcc\x8e\x5d\xd9\x6c\x36\xba\x62\xcb\x78\xab\x3e\xf6\xfb\x8f\xc3\x41\xa1\xd4\xa8\x14\x9e\xed\xb5\x52\x45\x97\x4d\x04\x95\xa4\x62\xd5\x44\xea\x3a\x4a\xed\xbb\xc5\x1e\xdc\xee\x52\xc2\x8b\xfd\xc8\x52\x93\x22\xa6\xcf\x00\x30\x66\xc4\x76\x6a\xd9\xc3\x2a\xf7\x6c\xad\xeb\xcf\x8d\xf6\x72\xb5\x30\xa6\xf5\xa9\xeb\x6a\xad\x18\x57\xe0\xac\x38\x73\xfa\xff\xc7\x15\xd0\xfb\x98\xf1\x03\x89\xc9\x0c\xad\x10\x18\x09\x00\x49\xcb\x88\x88\x52\x22\x21\xd2\x8c\x82\x62\x82\x42\x60\x08\x22\x52\x04\xc9\x08\x28\xae\x08\x0a\x82\xc3\x98\x20\xc3\x22\x81\x8a\x24\x86\x89\x30\x25\x02\xc6\xb1\x58\xd4\xfd\x17\x63\xd5\x58\xa2\xb1\xa3\x08\x8c\x24\xbb\x42\xf0\xd6\xcb\xa5\x70\x82\x41\x53\x3c\x01\xcd\xe9\x09\x68\xf7\xf5\x0d\x69\xaf\x09\x03\x16\xeb\xd4\x18\xd7\xf7\x9d\xcd\x68\x57\xc1\x5e\x56\xc6\xe2\x71\x53\x66\x3b\x76\x11\x69\xa0\x2d\xaa\x40\x91\xaf\x6b\xa2\xca\x48\x55\x19\x7e\x67\xad\xd7\x37\xa6\x47\x4e\xe9\x7d\xad\x26\x91\x6b\x7b\xa1\x3c\x17\x3b\x8f\xcd\xe5\x33\xdc\x10\x2d\xc5\xfc\xe8\x8e\xdc\x9e\x73\x3d\xc1\x35\xce\xda\xe1\x3f\xd6\xfd\x6e\x1d\xbf\x6f\xd9\x6e\xcf\x73\x1c\xb6\x0b\x77\xdf\x06\x58\x5f\xa1\xe6\x16\xbd\x7b\xa9\x15\x66\xe8\x8c\xde\x35\x36\xef\x9d\xce\xb3\xfe\x3c\x7b\x9e\x6c\x67\xdd\xfe\x73\xb5\x40\xbd\x03\x66\x65\xa9\xf5\x35\xbe\x68\x57\xfb\xb8\x31\xa9\x72\xc3\x9a\x8c\x23\xdd\x76\x7d\x42\xad\xea\xef\x06\x8c\xb2\xb8\xf1\x48\xe8\x7d\x11\xfb\x58\xbb\x9e\x52\x8b\xf1\x94\x52\x2d\xce\xda\xfe\x2f\xf7\x14\x34\xbf\xa7\x20\xf7\xb1\x72\x77\x69\xd5\xc9\x9c\x9d\x4c\x13\x61\x28\xf8\x2b\x8c\x7c\x85\x11\x08\x86\xbf\xbb\xff\x12\xad\x19\x23\x50\x2a\x39\x28\x04\x6f\x71\x94\xc1\x19\x92\x42\x19\x32\xc5\xd6\xe3\x2d\xdd\x63\xe9\x9f\xee\x94\xe4\x4f\x61\xd2\x50\xf1\xfd\xf3\x7e\xd0\x28\x50\x25\xbd\xc4\x54\x51\x78\xf7\x56\x78\xb4\xe0\x99\x6d\x6d\x6b\xdb\x0f\x64\x22\x0f\xc6\x53\xa1\x50\x17\xca\x6e\x38\xe1\x62\x8c\x38\xfe\x13\x18\x31\xcb\x16\x16\xbf\x40\x90\xbb\x7e\x1e\x3c\x63\xca\x9e\x5b\xe4\xd8\xbc\x7c\xed\x54\x23\x61\x4d\x3a\xb1\xd0\x92\xe0\x71\x19\x68\xd0\x68\x2d\xe3\x3a\x34\x91\xc9\x35\x7a\x1d\x16\x3c\x32\x45\xbf\x0e\x0b\x11\x99\xf0\x5e\x87\x85\x8c\x4c\xcc\xef\xb3\x99\xfb\x2e\x85\xbf\xf4\x9d\x06\x4f\x10\x99\xb7\x10\x98\xb0\xa5\xf9\x66\x8b\x0d\x59\xe9\x89\x89\x1e\xbe\xc0\x6e\x3a\x45\xe6\xab\x99\xd9\xe6\xda\xb2\x01\xb8\xa9\x1e\x13\xa0\x31\xcc\x9b\xca\x0d\xff\x8a\x0a\xde\x4f\x58\xe2\x88\xeb\xb9\x93\x51\xe1\xf0\x05\xff\xdf\x9e\xfb\xb7\xf7\x5c\x78\x08\x3d\xfc\x4d\x87\x6a\x8b\xca\x5a\x97\x7d\x59\xae\x5c\xc5\x72\xf5\xe2\x2d\xf3\xdc\xda\xb9\x39\x0a\x9d\x3f\x61\xb9\x2d\x49\x6d\xfe\x68\x7f\xf8\x1b\xff\xb9\x6a\xbb\xde\x98\x7f\xbe\xda\x32\x62\x47\xcc\x6f\x37\xf2\xc4\x8d\x6c\xac\xd9\xdb\xd8\xaf\x8d\x4f\x89\xdb\xdf\x62\x73\x2a\x38\x39\x19\xca\x44\x84\x46\x87\xcc\x6b\x11\x61\xa7\x2e\x9c\x94\xcb\x64\xe2\xc1\x4f\xf1\x24\x65\x56\x99\x78\x22\xbe\x71\x35\x3f\x64\xc4\xc7\xee\xb5\xbd\xff\x2e\xf9\x55\xd6\x06\xc7\x0b\x32\xac\xc4\xed\xed\x77\xb0\xe1\xf0\x5e\x39\x9c\x26\x51\x86\x06\x30\xae\x28\x22\xa2\x60\x24\x0a\x4b\x04\x8a\x28\x34\x22\xc8\x22\x81\xc2\x94\x42\xc8\x08\x2a\xa1\x88\x08\xd3\x02\x4c\x91\x04\xcd\xc8\xa8\x08\x30\x99\x96\x05\x40\xe0\x98\x33\xc7\xf5\x6a\xa6\x57\xc7\xa7\x50\x45\x08\x0f\x66\xc2\xc9\x2b\x0b\x38\x9a\x38\xeb\x3e\xbc\x3d\x71\x45\x6f\x0a\xdd\x20\xdf\x80\x8a\xbd\x2d\x8d\x1a\x3d\xac\x68\xa5\x67\x30\x93\x30\xaa\x3b\xb1\xab\x8d\xc6\xc7\xf8\x85\xde\xbe\xa8\xaf\x05\xa1\xb8\x26\x9a\x44\x8b\x75\xa7\xa0\x6c\x50\xe2\x29\x46\x66\x78\x85\xe3\x9f\x53\xf7\xfb\xcb\x4b\xdb\x5b\x45\x60\x8b\xc8\xba\x20\x57\x8d\xe1\x7a\xd6\xda\xf4\xec\x12\x55\x98\xd7\x9a\x58\x1b\x30\xf2\x4b\x57\xa9\xd4\x1e\xeb\x2a\x51\xdf\x8c\x3a\x8f\xaf\xac\x4d\x61\xcf\x87\xcf\x11\x5f\xe5\x40\xbf\x57\x5e\xd1\xa6\x55\xc2\xd9\x35\x62\x80\xd7\x45\x61\x88\xf4\xab\xb5\x7a\x7f\xbf\x1b\x0b\x7b\x61\x8d\x29\xc4\xe8\x0d\xb0\xf0\x16\x7f\x84\x9b\x1f\x6f\x4d\x6e\xaf\x32\x7a\xa5\x65\xd1\x40\x63\xab\xb8\x56\x9a\xcf\x4b\xf5\x5d\xb1\x4e\x57\xe7\x3b\xb1\xf2\x38\x19\x3e\x4b\xcb\x9e\xb5\x46\x7a\xec\x8f\x87\x70\x49\x21\xbc\xee\x70\xfc\xb3\x12\x92\xf5\x08\x7f\xac\x83\x95\x22\x4a\x60\xcd\xf7\x36\xd9\x04\x1d\x61\xf6\xb6\x6b\x09\xa3\x2e\x43\x16\x3e\x14\x8b\x01\xb0\x64\x98\xed\xd7\xc9\x47\x61\x5c\x5f\x94\x8d\x06\xb5\xd8\x2c\xdc\x62\x56\xf1\x85\xdd\xbc\x75\x8e\xfa\x2d\x44\xe8\xfb\x1f\x2e\x69\x86\x5d\xb8\x33\xfd\xe2\x35\xf4\x59\xb7\xa4\xd1\x3a\xe8\xc3\x6b\x5f\x5c\x1b\x98\x61\xe3\xc4\x7b\xb1\xcb\xed\x56\xbd\x67\xcc\xa8\xb6\x1f\x3f\x10\xaa\xbf\x57\x2d\x44\x53\x5a\xe5\xe9\xb2\x37\x9e\x99\xeb\xc1\xe3\xd0\x6d\x54\x7e\x19\xc1\x3e\xe1\xe6\x18\x2f\xc3\x60\xde\x21\xd9\x3d\x53\x84\xbb\x56\x85\x9b\x6d\x24\x84\x42\x90\x11\x43\x4f\xdf\xf0\x65\x73\xb1\x64\x7a\x14\xb1\x28\x62\x9b\x10\x2b\x47\x23\xda\xc6\xf1\xcc\x1d\x1f\xfe\xeb\xf8\xfb\x71\xb4\xad\xa8\x2e\xd9\x6b\x78\xad\x8f\x8a\x8f\x1d\xe9\x88\x8f\x8b\x9a\x09\x1b\xdf\xcf\x31\xba\xba\x9a\x7e\x0b\xbf\x8e\xbe\xa7\x8b\xbf\xc7\xfa\x7e\xbd\xed\xce\x8a\xd4\x78\x4e\x2c\x7b\xe5\xee\x0b\x27\xcd\xb4\x6a\xb3\xfc\x6a\xd6\xdf\x29\xf9\x59\x1b\xb4\xf1\xd2\xb0\xf4\x46\xf5\x36\x9d\x96\x35\x6c\x34\x51\x69\xba\xff\xd8\x91\x23\x56\x51\x47\x9d\x0a\xd7\xd2\xb9\x9a\xbe\x05\xd5\xb2\x25\x12\x72\x97\xd9\xbf\x16\xf7\xd4\x8b\x83\xdc\x4d\xe8\xdc\x1f\x98\x04\xf5\x4e\xef\x7f\x27\x10\xb9\x03\x6e\x76\x2c\x0e\x45\x0c\x51\xc6\x69\x52\x16\x65\x19\x46\x65\x9c\x84\x69\x84\x22\x29\x44\xc2\x05\x42\xa0\x00\x23\x93\x80\x26\x09\x49\x40\x19\x49\xc4\x11\x40\xa2\x32\x25\x08\x0a\x05\x0b\xa8\x02\x00\x21\x62\xa4\x0c\xbc\x5d\x5d\xf7\x8a\x18\x58\x46\xc4\xc0\x11\x98\x42\x13\xd7\xb1\xdd\xb7\xe4\x43\x24\xe7\xba\x35\x62\x44\x7b\xfd\xd7\x44\x8c\x02\xb3\x58\x36\xc6\xe8\x3b\xb6\xa1\x7a\xca\x9e\xee\xb6\xc0\x82\x13\x91\xe1\xb0\x46\xa8\xbb\xf7\x45\x0d\x2e\x18\xb3\x89\xd9\xb1\xa9\x59\x07\x21\xd1\x9e\xb8\x98\xa3\xf2\x60\x38\x52\x40\xc9\xd8\x48\x70\x97\x15\x94\x79\x69\xb2\xb3\xe7\x2f\xac\x66\x35\xd7\x6f\x5a\x61\xb9\x7f\x2b\xb0\xd3\xbb\x45\x0c\x36\xb4\xbc\x7e\xcd\x88\xad\x1f\xf5\x9b\xf0\xc9\x18\xb1\xef\x47\xff\xdc\xab\x73\xd3\xff\x29\xa3\xdc\xf9\x27\x7d\x94\xfb\x07\x47\x59\x96\xfd\xf7\x46\xcc\xd8\x88\x54\xbc\x4d\x57\x3e\xaf\xb3\x14\x6d\xfc\xb2\xbe\xba\x84\xbe\x1f\x91\xaa\xe8\x60\xba\x12\x05\x13\x3c\xdb\x85\xe7\xe6\x96\xde\x91\xbd\xfe\xe6\xa5\xdd\x7a\x5b\x36\x2b\xef\xbd\xb7\x5e\x45\x2d\x00\x8b\xc4\xd6\x2c\x35\x31\x5f\x0b\xeb\x41\xf5\x15\xa9\xb7\xfb\x0c\xde\x51\x99\x8f\x1e\x5d\x58\x3d\x72\x6d\xa5\x82\x96\x47\xc5\xf1\x76\x4d\x76\x46\x15\xb1\xd1\xe2\x0a\xb3\x7b\x47\x24\x59\xc4\x18\x1a\x88\xb8\x00\x68\x86\x22\x48\x0c\x25\x48\x1c\x93\x04\x19\x45\x24\x06\x07\x08\x26\x2a\x12\x4c\xe1\x22\x86\x62\x00\xd0\x18\x40\x70\x44\x54\x28\x18\x11\x08\x99\x81\x71\x05\x11\xbd\x85\x47\xe4\x96\xaa\x87\xb7\x73\x24\x35\x10\xa1\x08\x82\x27\x2f\x18\x06\x6f\xc3\x73\x6d\xcf\x16\x2b\x4d\xba\xda\xdb\xf4\x16\x62\x03\xad\xb2\xd8\xf8\xe5\xad\x6f\x36\x96\x6f\x13\x18\x56\x2a\xb4\xd5\xac\x51\x4b\x98\xeb\x6f\xeb\xe3\x67\x76\x82\xb1\x87\x38\xe4\x7e\x52\xe2\x90\xf7\xb1\xc5\xd9\xa4\x4f\x72\x94\x51\x6a\xc2\xcd\xde\xe3\x76\x3a\x28\x32\x1f\x93\xcd\xe4\x65\x88\xed\xd4\xae\x3a\x5d\x0f\x44\xa4\xb4\x59\xf6\x9a\x80\x66\xfd\x71\x30\xbc\x20\x57\x78\xd9\x6c\xcb\xcc\xd6\x35\xd5\xe9\x5b\x4f\xea\x0e\xd1\x0a\x31\x7f\xd7\x0b\xcb\x59\xa5\x02\x66\x4c\x9d\xd6\x70\x09\xe1\xf4\x91\xb6\x5b\x68\x9c\x56\x65\xac\xf7\x57\x13\x66\x28\xa4\x4c\x76\x9a\x63\x05\x3c\x2f\xf1\xc5\xaa\x6c\xd7\x1e\xad\x1a\xac\x22\xef\x4d\xd5\x26\x58\xb8\xbe\x1f\xeb\xe2\x7c\xda\x1c\x13\x46\x29\x47\xec\x39\x31\xda\xd3\xd8\x13\x92\xf9\x38\xf6\x86\xfc\xb9\xa0\x3e\x17\xe0\x26\x5c\xaf\xec\xed\xf9\xb6\x8d\x68\x53\x58\xd8\xaf\x0c\x84\x69\x57\x77\x9b\x66\x71\xdf\x21\xec\x02\x27\x15\x3d\x19\xb1\x99\x6d\x76\xf4\xe9\x33\x8d\x1f\xdb\x27\xc4\xa2\x74\x7f\xbe\x81\x7e\x79\x38\x2e\x58\x37\xd0\x67\x23\xf4\x2f\xc8\x3d\x5c\xfd\xdd\x32\x9e\xc5\x8e\xad\x85\xeb\x75\xd1\xd1\x5f\x53\xc5\xcc\xd2\xc5\xad\x7d\xe1\xd8\xc2\xa3\x14\xc1\x77\x91\x2e\xfe\xae\xd4\xe0\x6a\x09\x66\xe6\xeb\xa9\xb0\xda\xbe\x1a\x85\xb9\x6e\x74\x07\x4a\x1d\x54\xdb\xfd\x3a\x52\x97\x5e\xeb\xfd\x7a\xff\x59\x6c\x2c\x05\xa6\x0b\x98\x3e\x78\x53\x11\x1d\xdb\x10\xeb\x7a\xa3\x2f\x0e\xba\x66\xb1\x5d\xb3\x05\x15\x37\x41\xaf\x5d\x94\xb4\x15\x8a\x8f\x8b\xc8\x5a\x60\xb7\xf7\x1e\x5b\x15\x86\x92\x04\x45\x11\x44\x5a\x42\x48\x18\xc5\x04\x8c\xa2\x69\x1c\x21\x09\x49\x84\x45\x4c\x51\x10\x41\x40\x65\x41\xc1\x61\x18\x56\x80\x82\x33\x32\x8a\x00\x45\xa2\x71\x4a\x96\x45\x45\x04\xc2\x71\x23\xd1\x0d\x63\x2b\x9a\x3d\xb6\x62\x08\x95\x32\xb6\x7a\x6f\xc3\x75\xc3\x5b\xc7\xd6\x94\xaa\x90\xf7\xb9\x22\xc7\x4c\x18\x5b\x0b\xcb\xc6\x6a\x30\xdb\x98\xdb\x46\x07\x85\x27\xc5\x8e\x32\x55\x26\x56\x85\xe3\x46\xf6\x76\x2a\x08\x9c\xf2\x3e\x58\x93\xfb\x65\x7d\xa9\x95\x96\xc2\x63\x6d\x42\xd6\xa8\xda\x6c\x26\x8e\x5e\x5b\x86\xd4\x93\x5f\x19\xbc\xd6\x62\x95\x86\xdc\x63\xdb\xef\x13\xb1\xd6\xa1\xf6\xd6\x16\x80\x56\xf1\xdf\x35\xb6\xde\x3a\xb6\xdd\xe8\xcf\xef\xd4\xf3\xb0\x24\xdd\x73\x6c\xfd\x85\xb9\x62\x56\xde\xfa\x2b\xc7\x36\xf6\x4e\x63\xeb\xb5\x71\xd6\x1f\x5b\x5f\xd5\xf7\x91\xd1\x24\xe9\xe2\x9b\x6d\x97\xb7\x6f\x3a\x5a\x45\xa8\xc2\xbc\x50\x6e\x4a\x95\xca\x72\x5e\x25\x17\xe6\xda\x5a\xa9\xaf\xab\x1e\xb1\xdc\xa8\xe5\x47\xb5\xb3\xaf\xd5\x2a\x48\x65\xd8\xa8\x72\xd5\xb1\x02\x8a\x25\xb6\xba\xd7\x47\x6c\x49\xd0\xd0\x7d\x69\x4d\x9b\xad\xaa\xfe\xc6\xe6\xcc\x5b\x13\x0f\xb7\x3e\xbf\xfb\xe9\x70\xcf\x44\x70\xcc\xd3\xa5\xc7\x33\x84\x30\x7a\xe7\xd0\x97\x4a\xe1\x43\xa3\xa2\x04\xa1\x6e\xbf\xd6\x62\xfb\x53\xa8\xc1\x4d\xa1\xcf\xaa\x9c\x75\xfe\x74\xfc\x5d\x58\x37\x73\x1d\xc1\x1a\xc7\x79\x1c\xe1\x4c\xee\x23\x3f\xe0\xbb\xee\x2e\xb1\x9b\xa5\x3b\x25\x1b\x27\xdc\x55\x8c\x41\xa3\x76\xad\x37\xe2\xa0\xcf\x47\xf0\xa7\xd0\x41\xcb\x4f\x27\xc7\x22\x5f\xa8\x9a\xfb\x74\xeb\xc5\x82\x5f\xd4\xa9\x09\x9b\xae\x32\x76\x36\xdd\x57\xb2\x78\x22\x69\x92\xa6\xb0\x95\x5b\xf2\xc4\x25\xd1\xcc\x55\xc7\xfb\x4a\x9f\x44\x26\x4d\xfe\x54\xd6\x32\x35\x70\x7a\x97\xa3\x2f\x88\x7b\xef\x63\xbe\x33\xbe\xbc\x2b\x22\x4f\xb0\x40\x9d\x76\xd4\x19\x46\x83\x5a\xbb\x02\x89\xb6\x09\x40\xd8\xbb\x92\xb9\xf1\xaf\xa1\xbc\x99\x1f\xff\x08\xf3\x5c\x1c\x25\xf8\x75\xe8\x0a\xcd\x6b\xd9\x39\xa2\x08\x73\x72\x32\x1b\x38\xe5\xc7\x03\x7e\x3a\x3b\x71\x2c\x8e\x39\xf7\x12\xd0\x1b\x38\x73\x0f\x5e\xcb\xc5\x56\xf4\xb8\xb6\x38\x6e\xfc\x9b\x4b\x6f\xe0\xc7\xc3\x90\x8f\xa3\xc8\x59\x70\x4f\xe7\xc7\xbe\xc5\xba\x7c\xf8\x2a\xd6\xcb\x39\xf5\xa3\x84\xc7\x70\x04\x5d\x98\xed\xe0\xb7\x97\x27\x1c\xc7\x9d\x80\xfa\x14\x9c\x76\x9a\xc4\xec\xf1\x8c\xa9\x1b\xd9\x54\xe5\xdc\x0c\x1e\x8f\x7b\x7c\x8a\x3d\xb6\x35\x83\xe9\xe0\xf6\xdc\x7b\xf0\xed\xe3\x0a\xb3\x9e\x10\xaa\xae\x92\x24\x5e\x80\xe0\xa2\xe0\x7b\x08\xe0\xe3\x4a\xb0\xe9\x2b\x45\x38\x3d\xbb\xf3\x5c\x88\xd0\xb5\xc8\xd7\x7a\x63\x08\xc7\xb5\xca\x4f\x57\x74\xe4\x9e\xe7\x5b\x75\x7d\x8a\x2e\xcc\x72\xf0\xd3\x96\x13\x1e\xe3\x39\x3a\xbf\xab\xfa\x76\xb6\xce\x70\xe6\x1b\xde\xe2\x18\x0c\xdd\xba\x7d\x75\xb7\x1e\x71\x5c\x6f\x92\x59\xe6\x17\x77\x9f\xf8\xf5\x0c\x9f\x23\x8b\x70\x2e\x83\x08\x9f\x91\x93\x9c\xd3\x19\xf4\x2e\x48\xbf\x0b\x7b\x2e\xaa\x5c\xcc\x05\x87\x2a\x25\xb2\x16\xbd\xf0\xfd\x56\xfe\x22\xf8\xb2\x98\x3c\x3f\xa2\x3a\x93\xd3\xfb\xe8\xf1\x04\x5b\x5e\x2e\x33\xb5\x79\x1f\xde\x72\xf1\x94\xce\x4b\xc0\xb1\x66\x18\x8b\xf5\xea\x36\x8e\x4e\x71\xe5\xee\xd1\xe0\x10\xec\x58\xfe\x56\x82\x6a\xf2\xee\x49\xa7\xf7\xe0\x30\x8a\x2d\x9f\xdf\xfa\x0c\x3e\x9d\x9d\xdb\xfd\x74\x76\xf6\x7b\x82\x10\x77\x18\xb7\x7d\x3c\x59\x1c\x5f\x98\x1d\x39\x58\xef\xa6\xdd\x0b\x14\x9b\xa9\x37\xef\xac\xca\xb3\x83\xa2\x0c\x9d\xf7\x2f\xc4\xba\x55\xa1\x99\x04\x4e\xe6\x69\xc1\x99\x5b\xa7\x33\x23\x0f\xf0\x02\xde\x6f\xb7\x83\x34\xdc\xd9\x1c\xc7\x78\xd9\x29\x42\x3f\x0b\x77\xf0\xd9\xfb\xd5\xf5\x73\xf0\x54\xac\x99\x69\xbf\x03\x94\xc1\xa8\x9f\x43\x39\x28\x0f\x46\x74\x27\x6e\xe3\x50\x67\xa6\x6f\x79\x2d\x39\x84\xfc\xde\xc6\x70\x82\xfa\x9a\x7c\x33\x19\x5d\xe4\xf6\xa3\xfb\x2b\xfa\xec\x7e\xa5\x4c\xf6\x23\x0d\xf2\x0b\x13\xba\xee\xea\xa7\xe9\x3f\x7c\xa5\x56\x96\x24\x21\xd8\xfc\x42\xc4\x5d\xde\xf5\xd3\xa4\x89\xbd\x29\x2c\x4b\xac\xb8\x46\xf9\xe5\x0b\x8a\x28\x3f\x4d\xa6\xc3\xb1\xf9\x59\x72\x24\x56\xbb\x4e\x51\x1f\x7f\x26\xf6\x33\x5c\x3b\x8a\x3d\x76\x02\x7c\xa9\x83\x9f\x22\x3d\x9d\x42\xdd\xc9\xc3\xd3\x48\xe4\x91\x21\x63\x5e\x97\x4a\xec\x7e\xe1\xeb\x1c\x71\x2e\xde\xb3\x83\x58\x78\xb2\xfd\x33\xcc\xe6\x1c\xff\xd5\x53\x7d\xef\xe8\xdd\x20\x90\x07\x15\x46\x5e\x34\x8c\xc5\xd5\x5a\x4e\xc1\x99\x99\x22\x7c\xfe\x1c\x5c\x45\xf5\xf5\x3f\xff\x81\x1e\x2c\x43\x93\x43\xab\x69\x0f\xdf\xbf\xdb\x60\x67\x7f\xf9\xf2\x04\x25\x03\x4a\x86\x9c\x0f\xd0\xab\xc5\x27\x83\x8a\xc6\x7a\x36\xb7\x73\x91\x3f\x01\x4d\x67\xe0\x04\x34\xc2\xc2\x17\x68\x5c\xe5\xfa\x9c\x67\x64\xd0\x0f\x08\xc3\x72\x2f\x44\xab\x32\xaf\x84\x96\x89\xca\x8d\x5f\xb3\x1c\xed\x93\x85\xca\x9d\x3e\x57\xab\xb4\x0f\x4b\x40\x50\x9f\x2b\x73\x7d\xae\x5d\xe4\x06\x91\x55\x11\xf7\x6d\xa7\x0d\x8d\xba\x25\xc7\x64\xfa\x9c\x77\xff\xba\xf3\xa8\xc4\x35\xb9\x21\x07\x15\xd9\x41\x91\x2d\x71\xe9\x77\x86\x45\xbe\xf2\x91\x52\xcc\xfd\x94\x71\x4a\x27\x63\x91\x2c\x89\x93\x53\xfd\x44\xcb\x46\xb1\xca\xf2\x13\xfd\x8c\x15\xc5\x44\x4d\xf8\x53\xd9\x7f\x5c\x0f\x61\x3e\xe2\xb4\x10\x54\x09\xd2\x0d\xe6\x32\x0d\x9c\x17\x95\xfe\x41\x35\x24\x30\x73\xaa\x8b\x98\x32\xd8\x7d\x8d\x22\x5a\xe2\xf8\x37\x28\x24\xd9\x34\xce\x6a\x48\x79\xad\xa3\x6b\x58\xf6\xcc\x04\x83\x5e\x13\x92\x05\x5b\x70\x4c\x0c\x92\xd7\xcb\x15\x24\x19\xcb\x95\x06\x6c\xe0\xca\xf0\x7f\x02\x00\x00\xff\xff\x44\x05\x5e\xc4\x07\x9b\x00\x00") - -func asset_stat_trustlines_2HorizonSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_trustlines_2HorizonSql, - "asset_stat_trustlines_2-horizon.sql", - ) -} - -func asset_stat_trustlines_2HorizonSql() (*asset, error) { - bytes, err := asset_stat_trustlines_2HorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_trustlines_2-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x92, 0x8d, 0x40, 0xca, 0xbe, 0xa3, 0x89, 0x15, 0x2, 0x2c, 0x76, 0xb0, 0x49, 0x86, 0x75, 0x73, 0xe, 0x1f, 0x27, 0x61, 0x20, 0xbe, 0x7d, 0x79, 0xdc, 0xa3, 0x28, 0x7d, 0x69, 0xd8, 0x4f, 0x4f}} - return a, nil -} - -var _asset_stat_trustlines_3CoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x69\x93\xa2\xcc\xf2\xef\xfb\xf9\x14\xc4\xbc\xe9\x79\xc2\x9e\x47\xa0\x58\x67\xee\x9c\x08\x54\xdc\xc5\x7d\xbd\x71\xa3\xa3\x80\x02\x51\x36\x59\xdc\x6e\x9c\xef\xfe\x0f\x71\x43\x45\xdb\xd6\x9e\xe7\x9c\x7f\xc4\xf0\x62\xa6\x1b\x92\x5f\xfd\x2a\x2b\x33\xab\x2a\xa1\x93\xef\xdf\xbf\x7c\xff\x8e\x35\x1c\x3f\xd0\x3d\xd4\x6e\x56\x31\x15\x06\x50\x86\x3e\xc2\xd4\xd0\x72\xbf\x7c\xff\xfe\x65\x73\x3d\x17\x5a\x2e\x52\x31\xcd\x73\xac\xa3\xc0\x1c\x79\xbe\xe1\xd8\x18\xff\x37\xf3\x37\x11\x93\x92\x57\x98\xab\xbf\x6d\x6e\x3f\x13\xf9\xd2\x16\x3b\x98\x1f\xc0\x00\x59\xc8\x0e\xde\x02\xc3\x42\x4e\x18\x60\xbf\x30\xfc\x67\x74\xc9\x74\x94\xe9\xe5\x59\x43\x35\xd1\x9b\x61\xbf\x05\x1e\xb4\x7d\xa8\x04\x86\x63\xbf\xf9\xc8\xdf\xe0\x5e\x0a\x2b\xa6\xb1\x81\x46\xb6\xe2\xa8\x86\xad\x63\xbf\xb0\x97\x6e\x27\xcf\xbd\xfc\xdc\xb7\x6d\xab\xd0\x53\xdf\x14\xc7\xd6\x1c\xcf\x32\x6c\xfd\xcd\x0f\x3c\xc3\xd6\x7d\xec\x17\xe6\xd8\x3b\x8c\x31\x52\xa6\x6f\x5a\x68\x6f\xdb\x92\x1d\xd5\x40\x9b\xeb\x1a\x34\x7d\x74\xd2\x8c\x65\xd8\x6f\x16\xf2\x7d\xa8\x47\x02\x0b\xe8\xd9\x86\xad\x6f\x45\x3c\x67\xf1\xe6\x23\x25\xf4\x8c\x60\xb5\x01\xd7\xb4\x9f\x3b\x05\x20\xe8\x29\xe3\x37\x17\x06\x63\xec\x17\xe6\x86\xb2\x69\x28\xaf\x1b\x8d\x29\x30\x80\xa6\xa3\xff\xfc\xf2\x25\xd7\xaa\x37\xb0\x92\x94\x13\x07\x58\x29\x8f\x89\x83\x52\xbb\xd3\xde\x49\xfe\x1d\xba\xba\x07\x55\x34\x36\xfc\x40\x5e\xf9\x68\xf6\xf3\xa6\xb4\xaf\xb8\xb3\xd0\xf1\x42\xcb\xbf\x4f\x18\xd9\xf3\x7b\x24\x4d\xa4\xea\xc8\xbb\x47\x72\xc3\x53\x43\xe8\x4e\xc9\x3b\xc4\x64\xe4\x07\x8e\xa6\x21\xcf\xb0\x55\xb4\xbc\x2d\x0b\x15\xc5\x09\xed\x40\x86\x26\xb4\x15\xe4\xff\xfc\x22\x54\x3b\x62\x0b\xeb\x08\x99\xaa\x18\x93\xae\x4b\xd5\x61\x82\x7a\x1d\x6f\x85\x45\xe8\xd9\xba\xd4\xee\xb4\x84\x92\xd4\x89\xdd\x74\x2a\xf8\xe6\x4e\xd1\xea\x1e\xfc\x60\xf9\x3e\xf4\x41\xe6\x03\xa8\x1a\xba\x83\x73\x5c\xec\x7e\x6c\x2f\xf4\x03\xd3\xb0\x91\x7f\x0b\xf9\x20\x74\x37\xee\x86\x05\x8a\xa2\xc1\x0d\xdc\xa3\xd0\xfd\xb8\x07\x93\xbf\x85\x7b\x10\xba\x1b\x77\x2b\x6f\xd8\x9a\x73\x03\xf7\x28\x74\x37\xae\x1b\xca\x7e\x28\xdf\xc0\xdc\x0a\x7c\x04\xcf\x34\xfc\xf1\x2c\x44\xe1\x2d\xcd\xc6\xc5\xee\xc7\x46\xc8\xbb\xa5\xd6\xe8\xfa\xdd\x68\x91\x1b\xdf\x82\xdb\x0a\xdc\x8d\xb7\x8d\x4a\x63\x04\xd5\xdb\xb0\x27\x72\xbf\x19\x7d\x17\x29\xd1\xec\xed\xce\x66\x64\x68\xdf\x00\x97\xa1\x7d\x37\xe1\x5d\xf4\xbb\xc5\x75\x2f\xf2\x51\xcc\xcd\x1a\xe0\x7d\xd8\x8d\xd4\x0e\x39\x92\x3d\x07\x4e\x0c\xb9\xb7\x65\x0f\xa1\xf1\x3d\xb1\x63\xa0\x7b\x47\xf2\x10\xb8\x6e\xcb\x1d\x03\xd1\x3b\x72\x87\xc0\xf2\xae\xdc\x5d\xfc\x8e\x01\xe5\xb6\xdc\x36\x48\xbc\x2b\x73\x70\xf9\x77\x24\x37\x7e\x7c\x5b\x64\xeb\x9b\xb7\x65\x4e\x5c\xe1\xb6\xa8\x0c\xed\xdb\x02\x7b\x53\xbd\x4b\x6a\x63\x79\x3b\x41\x71\xd0\x11\xa5\x76\xa9\x2e\xc5\x85\x4d\x57\xf7\x67\xe6\x4e\xa2\x9d\x2d\x8a\x35\xe1\x02\xeb\xe7\x97\xed\xda\x58\x82\x16\xfa\xb1\x3f\x87\x75\x56\x2e\xfa\xb1\xbb\xe5\x27\xd6\x56\xc6\xc8\x82\x3f\xb0\xef\x3f\xb1\xfa\xc2\x46\xde\x0f\xec\x7b\xb4\x64\xce\xb6\x44\xa1\x23\xee\x91\xf7\x78\x5f\x4e\x10\x4f\x2f\xee\x80\xb3\xf5\x5a\x4d\x94\x3a\x37\x90\xb7\x02\x58\x5d\x3a\x05\xc0\x4a\x6d\xec\x65\xbf\xbe\xdd\x9f\xf3\x23\x90\x97\xf3\x96\xf7\xdd\xdf\xb5\x79\xd0\xd0\xbb\xfd\x39\xd1\xa5\x54\xef\x9c\xe9\x13\xeb\x97\x3a\xc5\x03\xad\xf8\x82\xf6\xa4\xf9\x23\xca\x19\x91\x8f\x74\xfe\x02\x24\x52\x40\xa3\x9a\x76\xf5\xcd\x2e\xc6\xf5\x1c\x05\xa9\xa1\x07\x4d\xcc\x84\xb6\x1e\x42\x1d\x45\x6a\xb8\x73\x01\xbe\x11\x53\x91\x06\x43\x33\x78\x0b\xa0\x6c\x22\xdf\x85\x0a\xda\xec\x26\x5e\xce\xae\x2e\x8c\x60\xfc\xe6\x18\x6a\x6c\x83\x70\xd2\xd9\xb8\x41\xee\xba\x19\x99\xee\xb1\x93\x7b\x03\x48\x52\xf8\xd6\xca\xe3\x41\xf7\xdb\x17\x0c\xc3\xf6\x67\x0c\x15\x53\xc6\xd0\x83\x4a\x80\x3c\x6c\x0e\xbd\x95\x61\xeb\xdf\x68\xe6\xaf\x68\x6c\xa4\x6e\xb5\xfa\x1a\x49\x6f\x6e\xb4\xa1\x85\x12\x84\x39\x2e\x49\x78\x0e\xcd\x30\x49\x9a\x20\xc8\x73\x71\x13\xfa\x81\xe5\xa8\x86\x66\x20\x15\x33\xec\x00\xe9\xc8\x3b\x88\x7c\xf9\xeb\x7c\xec\x0f\x5e\xfc\xa4\x2e\xfc\x87\x14\xb1\xdb\x08\x60\xb2\xa1\x1b\x76\x70\x76\xd1\x47\x33\x3b\xb4\x92\xaf\xd9\xa1\xe5\x87\x32\xb2\x03\x6f\xb3\x15\x3c\xef\xe6\x56\xc6\xb0\x35\x13\x6e\x76\x8c\x2a\xf2\x83\x64\x3a\x5b\xc1\xb1\x63\x21\xd5\xb1\xa0\x61\x27\x48\x51\xd4\x39\xe9\x60\xec\x21\x7f\xec\x98\xaa\x8f\x05\x68\x79\xce\x4c\x33\xa1\x7e\x8d\xd1\xcd\xb1\xd9\x69\x24\xdc\xb4\x6a\x1a\x50\x36\x4c\x23\xd8\x74\x6e\xdb\xff\xbd\x4a\x4c\xf3\xd6\x65\x43\xb7\x37\x6b\xa1\x0d\xad\xed\x99\xd8\x6a\xe0\xb0\xb4\xd8\x29\xfd\x2d\xda\x56\x63\xd9\xa2\x98\xad\x60\xdf\xbe\xed\x87\xe2\x5f\xbf\x30\xfc\xaf\xbf\x6e\xdc\x7d\x4e\xf0\x1c\xe7\xa2\x03\xef\x21\x9e\x8c\xe5\x19\xda\xe9\x38\xbf\x87\x74\xa9\x9e\x33\xb8\x04\xfd\x6d\x31\x2f\x1d\x63\x33\xff\x3d\xea\x13\x9b\x25\xe3\xd6\x1d\x6c\x47\x45\x71\x5f\x38\xf1\x81\xcb\x46\x4f\xe7\xe7\x47\x9b\x3f\x5d\x18\x6f\x89\xec\xce\x41\x7f\x1c\x23\xc3\x5c\xd8\xb6\xeb\xa1\xf9\xbb\x42\x72\xa8\x4c\x51\x60\x1a\x7e\xf0\xae\xe8\x61\xb5\xbd\x37\xf7\xed\x69\xc5\x74\x7c\x14\x18\xd6\x15\xcf\x8f\x02\x6b\x82\x6f\xc5\xc6\xfc\x74\x51\x7f\xc0\x3b\x1b\xef\x63\x3b\x57\x4c\xe7\xda\xde\xe0\x14\xe6\xd8\x8b\x6b\xd6\xb2\x5b\x7c\x3d\x3a\x62\xbb\x8d\xd7\xb7\x83\x93\x23\xef\xce\x08\xba\xcd\xbc\xa8\xd7\x22\x68\x64\xee\xd0\xf7\x51\x90\xa4\xcf\xad\xaf\x5e\xbd\x0c\xad\x8d\x5b\x25\x43\xbb\x9e\xa1\x20\xfb\x4a\x10\x8b\x2e\x5e\x8b\x70\xd1\x45\x4c\x75\x42\xd9\x44\x1b\x7b\x53\x8c\x28\x23\xf9\xa9\x51\x34\x36\xc2\xbb\x2d\xeb\xb6\x2f\x67\xe3\xba\xeb\xe0\x15\xdb\xd8\xdd\xb9\xd3\xf0\xd9\xad\x7b\xbd\x5f\x33\x88\xed\x82\xfd\x51\x7b\xd8\x6e\xeb\xb7\xe6\x60\xb8\x49\x13\x3f\x7d\xe1\xb9\x8e\x17\x1c\xb4\x91\x13\xf3\x42\xb7\xda\xc1\xf0\xf3\x69\x13\x2d\x03\x18\x04\xc8\x72\x03\x6c\xe3\x16\x7e\x00\x2d\x17\xdb\x2c\x99\x9c\x70\x7b\x06\x5b\x3b\x36\xba\x9c\x6c\x35\x68\x98\xa1\x17\x9b\x6a\xaf\xb5\x10\xac\x5c\xf4\xfe\xa0\x6c\xd3\x12\x31\xdc\xcb\xb0\x7f\x68\xf1\xca\xe8\xec\x32\x1b\x8e\x77\x3e\xa8\xdf\x22\x4d\xfc\x0b\xc3\xff\xc2\x04\x29\x87\x6d\x7f\xfd\x3f\xbf\x30\x86\xa6\x01\xfd\x57\xe2\x58\xc5\xb7\x61\x0f\x0f\x59\x3c\xcb\x13\x8f\xb9\x57\xb4\xb1\x4d\xb4\x6d\xbc\x2e\x91\xd0\x66\xef\xf8\x04\x15\x3f\x94\x77\x24\x3c\xe4\x9f\x4c\x40\x20\x71\xc5\xe8\x21\x78\xf0\xa5\x4b\x3e\xb1\x3d\xef\xa3\x9c\x62\xc9\xba\x3b\x66\xc6\x2d\xb1\x99\x8f\x6e\xcd\x30\x97\x3c\x63\x7b\xf8\x47\x79\x1e\x21\xee\xe7\x79\x31\xc9\x9d\x5d\x47\xf6\x1c\x99\x8e\x8b\xde\x99\xd2\x8e\x4d\x3f\x31\x11\xc5\xd2\x1d\x4f\xa8\x60\x9f\xaf\xfd\x76\xcf\x38\x1c\xad\xe8\x3d\x45\xcc\xae\x4c\x34\xa7\x4a\xd8\xe7\x81\x4f\x10\xcf\x15\x71\xd2\xda\x55\x65\x1c\x73\x44\x0f\x2b\xe3\x98\x14\xff\x76\xf4\xdb\xd3\xcd\x5b\x82\x4f\xdd\xf2\xee\x58\x86\xeb\x51\x56\xb1\x47\x00\x8f\x6c\xbb\xa2\x19\xff\x46\xa4\x36\x7c\x3f\x44\xde\xfd\x50\x8a\xa3\x26\xee\x4e\x2f\xd4\x12\x98\x86\x65\x5c\x59\x51\xdc\xdc\x0b\xfe\x27\x77\x55\x31\xeb\x8c\x3d\x55\x79\x68\x17\x15\xbf\xff\xb3\xf6\x51\x31\xcc\xc7\xf7\x3f\xb7\x50\xb7\x83\x76\x86\xb4\x1b\xc9\x7f\x25\x3b\xde\x49\xba\xf7\x61\x23\x8f\x3f\x43\xdb\x9a\x79\xb0\x3c\x09\xc5\x77\xec\x37\xce\x0d\x70\x19\x3d\xa5\xbc\x7a\x55\x19\x43\x5b\x47\x89\x1b\xfb\xb8\x72\xe2\x8f\xed\x1e\x8f\xd5\xc7\xdc\xf9\xe3\x2a\xfa\x87\xf5\x23\x3b\xea\x2a\x49\x39\xc1\xd2\x43\x7e\x68\x26\x46\xf7\x60\x69\xa1\x77\xf7\x73\xc7\x47\xac\x8f\xeb\xf3\xec\xb9\xc5\xa3\x4a\x3d\x7b\xe2\xfc\xed\x2e\xc5\xed\x6e\xba\xa5\xbd\x9d\x48\x92\x22\xee\x33\xbb\xb3\x27\xdc\x8f\x28\x2a\xb7\xd9\x59\x6b\x8e\xf7\x4e\x32\x14\xcb\x09\x1d\xe1\x1d\x9d\xdd\x86\xf4\x3f\x8c\x57\x92\xda\x62\xab\x83\x95\xa4\x4e\xfd\x98\x54\xec\x09\xd5\xae\xd8\xc6\xbe\xbd\x14\x32\xad\xc6\xb0\x58\xaa\x92\xd9\x12\xc8\x4b\x4d\x2a\x33\xa8\xe6\x6b\x52\xae\x9a\x2f\x77\xa5\x46\x97\x2c\x0e\xc1\xa8\x96\x6f\x17\xeb\x52\x37\x2b\xd6\x85\x76\x9f\x6d\x66\xd9\xfa\x80\x2c\xbe\xbc\x62\xfc\xf6\x60\x77\xff\x73\x38\xfe\x8a\x91\xaf\x18\xfe\xba\xd5\x32\xf6\xf2\xf2\x8a\xbd\x08\x4d\x41\x10\x84\x5f\xbf\x5e\xa2\x0b\xe4\xfe\xda\xf1\xdf\xbf\x7e\xbe\xc7\x30\x4b\x82\x66\x9e\x2c\x76\x45\x9a\x14\x6a\x83\x6e\xbe\x5b\x04\xc2\xb0\x2c\x0c\x06\x85\xc1\xa0\x47\xf6\x8a\x83\xe1\xb0\xc5\x88\xc3\x81\xd8\x69\x54\x72\x83\x51\x5b\xe8\x33\xec\xa0\x4e\xbd\xbc\x62\x04\x7e\x38\x5e\x31\x8e\xe6\x78\x1e\x50\x34\xff\x5b\x38\x0e\x2a\x05\xa6\x25\x51\x75\xa9\x24\x36\xb2\x35\x29\x9f\x61\x01\x29\x50\x80\x19\xd1\x0d\x29\xd7\x6e\x55\x0b\xfd\x0a\x5b\xc8\x54\xb3\xb5\x66\xb5\x94\xaf\x53\x6d\x56\x1c\xf6\x7b\xdd\xa3\x16\xb9\x13\x8a\x54\x8c\x46\x02\x45\x90\x48\xf1\x8a\xe1\x9c\x27\xdc\x9e\xb0\xc1\xeb\x69\xb4\x8f\x1a\xe2\x69\x2a\xed\xa0\x47\x06\xa8\x3c\xa7\xd1\x80\x41\x88\xe1\x54\x42\x26\x59\x99\x96\x39\x5e\x23\x01\xd4\x68\x40\x10\x32\x4b\x33\x3c\x24\x29\x0d\x6a\x04\x85\x03\xa8\xe2\x32\x4d\xca\x0c\x00\x32\xce\xca\x88\xe7\x37\xaa\xc2\x9f\x3c\x36\x18\x34\x4b\x42\x12\x01\x52\xd3\x48\x8a\x83\x38\x2b\xe3\x88\xc5\x35\x95\xd0\x18\x15\x10\x9c\x42\x68\x50\x51\x49\x5c\x66\x14\x05\xe7\x14\x00\x54\x9a\x65\x69\x92\xe6\x39\x86\x23\x48\x1a\x12\xcc\xc6\xf6\xa2\x91\x7a\x11\xfe\x6b\x8f\xcc\xa0\x62\x50\xab\xf4\xaa\x5d\xc9\xb0\x39\x3b\xc7\x17\x49\x7c\x39\xc9\xa4\x7c\x5c\x0f\xfc\x45\x69\xb1\x26\x06\x6a\xbb\x3f\x84\x99\x32\xcc\xeb\x1b\x79\x51\xa2\xaa\x70\xed\x92\xcd\x77\x91\x47\xc2\x80\xa0\x22\xb1\xcc\xf4\x1f\xe8\xc8\xa7\x1e\x2f\x67\xbe\x7e\xc5\x50\x59\x0a\x90\x48\x83\x1c\x03\x70\x02\xd1\x34\x84\x1a\xce\xb2\x24\xcb\x72\x1a\xcf\x33\x0c\xce\x42\x8a\xa7\x68\x12\x67\x20\x80\x1a\x64\xc8\x8d\x3d\x33\x48\x06\x84\x0a\x38\x95\xe2\x00\xbb\x31\xb2\xcf\x30\x76\x86\x97\x49\x72\x03\x4f\x52\x80\x62\x29\x96\x83\x04\x4b\x28\x14\xa5\x70\x2c\xcb\xa9\x94\x06\x28\x9e\xd6\x64\x48\xf1\x10\x72\x2a\x60\x70\xc0\x41\x80\x10\xc3\x52\xb4\xac\x6a\x40\x96\x5f\xa2\x40\x43\xd0\x34\x4f\xb3\x3c\x07\x98\x9d\xc5\x66\xc9\xc6\x68\x42\x48\x21\xed\xe0\x72\x99\xed\x53\xf6\xaa\x3e\xef\x2e\x0b\xa0\xe7\x3a\xd3\xd4\x3c\x2f\xd4\x83\x2c\x51\x21\x6b\x6c\x86\x65\x46\x21\x5d\xe4\x95\xa2\x8a\xcf\x04\x7f\x34\xe1\x9b\xcc\x90\x5b\x95\x4a\x0a\x13\x06\x53\x2d\x9d\xad\xa7\xaa\x56\x1a\xaf\xc8\xbe\xe6\xad\x1b\xdd\x48\xc3\x83\x46\xaf\x36\x8f\x7e\x2a\x1d\xfe\xd9\x86\x37\xff\xf8\xfb\x42\x68\x34\x77\xb6\xd3\xc0\x1b\x93\x36\x68\x69\xec\xd8\xe7\x96\xbd\x52\x46\x27\x75\x6e\x59\x99\xcf\xea\xf5\xb4\x9d\xd6\xd3\x83\x85\xde\x68\xa5\x8b\x19\x76\x86\x78\xd7\x37\xca\x21\x35\x95\x8a\x2d\xca\x19\x14\xc5\x4e\x49\xa5\x88\x86\x54\x1e\xb0\x6e\x79\xe6\xe0\xa4\x40\x39\x29\xda\x6e\xc9\x60\x1d\x2e\xa2\xa6\x12\x2c\x3a\x57\x4a\xb2\x8a\xbd\x45\xe7\xf0\xf2\xef\x33\xbd\xdf\x74\xdc\x69\xd1\x38\x0f\x18\x9c\xc4\x55\x48\x20\x85\x67\x20\x05\x71\x85\xe1\x11\xc7\xd3\x90\xc7\x39\x5c\x53\x59\x8a\x65\x58\x9c\x61\x29\x82\xd5\x10\xad\xc9\x84\x8c\x2b\x2a\x52\x34\x82\xd7\x14\x02\xca\xdc\xc6\x1a\x3f\xc3\x2b\x80\x46\x13\xa4\xaa\xaa\x84\x46\x03\xa8\xe0\x34\xe4\x08\x08\x55\x16\xd1\x32\x87\x64\x8d\x50\x71\x8d\xe0\x34\xa0\xd0\x0a\xcd\x03\x9c\x62\x21\x62\x71\x85\x84\x2a\x41\x69\x1c\xc4\x09\x9e\x7c\x89\xa6\xc7\x83\x45\xb3\x7b\x8b\x06\xcd\x15\xcb\x8c\x27\x02\xea\x41\x6f\xa1\xae\x54\x2a\x35\x1a\xe9\x68\x6a\xe6\x4b\x05\x87\x49\x59\xe5\x90\xb6\x98\x75\xb1\x33\xe9\xea\x40\x1d\xcc\x72\xae\x39\x47\x96\x99\x6d\xd6\x48\xd1\x51\x57\xd4\x28\x33\x2a\x14\x55\x62\xea\x4d\x64\x3f\x18\xce\x86\x63\x35\xdd\x92\x57\x44\xcc\xa2\x63\x46\x34\x1b\xa5\xf4\x4a\xa7\xea\x04\xe3\x21\xef\xb3\x56\x57\xe4\x17\x8d\x42\x7b\x9d\x25\x17\x73\x1d\xf6\x33\xb9\x55\xbe\x9e\x52\xc1\xc2\xce\x4d\x4a\xe9\x6e\x1b\xa8\x45\xa2\xee\x67\xa0\x0e\xbd\x01\x2d\x4f\x3c\x4e\xcd\x2d\x27\xeb\xa5\xd2\xef\x64\x8a\x9e\x9d\xcb\x7a\xad\x0e\xe5\x64\xa6\x51\x0c\xae\x25\x58\x6c\x21\x31\x20\xff\x6f\xb7\xd8\x2b\x2b\x90\x84\xe7\x41\x4f\xac\x67\x2e\x1f\x26\x3c\x03\x76\x2d\xdb\xfd\x1c\xe6\x79\xc2\xfa\x09\xb4\x2b\xe9\xe6\x27\x10\xaf\x24\x86\x3f\xba\x1a\x8c\x25\x87\x63\x1b\x93\x32\x55\x2a\x48\x74\xb7\x26\x55\x07\x2c\x55\xa6\x0a\xd5\x4c\x86\xa2\xf2\xf9\x7e\xa1\x36\xe8\x56\x87\xe5\x4a\x97\x96\x84\xfc\x28\x3b\xaa\x30\x8d\xa2\xd4\xaa\x17\x87\x59\x40\xb5\x07\xdb\x19\x6d\xbb\xee\xca\x37\xc4\x82\x4c\x4e\x0a\xde\x3c\x6d\xa0\x42\x5f\x6c\xd4\xf3\xd5\xe1\xba\x8a\x0f\xc6\x95\x99\x0a\x85\xb0\x35\xea\xd1\x34\xb9\x54\x34\x21\x38\x5a\x5f\x34\x01\x64\xa3\x1f\x37\x9e\x25\x1a\xec\x54\x23\x16\x2a\x68\x3b\xd9\xa5\xd5\x20\x72\xee\x64\x5d\xd2\xc7\xeb\x19\x43\xb6\xd2\x5c\x89\xa5\x42\x39\xdd\x74\xc3\x65\x6a\x5e\xe3\xb7\x6b\x1e\x85\xef\xae\xb8\xe8\x7e\xfd\xf0\x4f\x26\x02\x5d\x1c\x7e\xcf\x09\x02\x9f\x8d\x39\x6e\x26\xa3\xa4\x6b\x82\xd8\x2d\xe4\xf3\xed\x49\x59\xa5\x46\x74\xbf\x39\x4b\xa1\x62\x8a\x55\xdb\xb3\xac\x47\x74\xba\xcd\x8a\x99\x05\xba\xa4\x35\xbb\x11\x9c\xe4\x2e\x86\x43\xbd\xbd\xea\xae\x3d\xc3\xa8\xd0\x6e\xbd\x43\x69\xd3\x89\xe9\x16\x81\xae\xce\x24\xcb\x15\x87\x35\x97\xc8\xcc\xd1\x74\xc6\xc3\xbc\x91\xcf\x15\x8b\x45\x10\x96\x72\xd6\x8c\xa3\x15\x9f\xcf\xdb\x52\xd6\x90\xb3\x43\xc3\xcb\x07\x25\x0f\x6f\x03\xad\x34\x4d\x6b\x42\xf3\xd7\xaf\xf3\xd9\xe2\x93\x87\x06\x3c\x35\x34\xb5\xd3\xa1\xc9\x65\x08\xe4\xd4\xad\x3e\xcf\xc0\x6e\x59\x58\x0f\xdb\x63\x50\x1d\x4f\xf3\xd3\xa1\x0a\xfa\xed\x50\x0a\x57\x84\xe1\x1a\x79\xc0\xe7\xe7\xd5\xde\x71\x68\xf8\xb3\x68\xf3\x61\xd5\xf3\xa3\x54\xd8\x5d\x7b\x6e\xbe\x87\x6a\xb4\xac\x2e\xea\xed\x50\x6e\x9a\x06\xca\x1a\x83\x7e\x06\x5a\x05\xbb\x45\x39\x8c\x3c\xeb\x71\x42\x5f\x08\x2b\x69\xc7\x45\x35\x2a\xd7\x5c\xac\xf9\x4e\xad\xcf\x37\xfb\x30\x3b\xd7\xd4\x4a\xdd\x04\x4b\x1f\xd2\x62\x2e\xef\xb1\xa5\x4c\x29\xbb\x53\xfd\x75\x3f\x4b\x7a\xfa\xf0\x80\x9f\xed\x9f\x40\x1c\xe7\x7d\x5a\xd1\x14\x05\xc7\x29\x1a\x67\x08\x8a\xa6\x20\x20\x69\x15\x11\x3c\xa2\x19\x8a\x84\x1a\x8f\x08\x0d\x21\x55\xa5\x20\xc4\xa1\xac\xd2\x80\x26\x70\x12\xd2\xb8\xcc\x72\xb8\xca\xaa\x38\x1d\x1f\xd4\x48\xc9\x62\xf4\x63\x97\x6b\x8e\xe6\xb0\x06\xc3\x74\xaa\x4c\x8d\x86\x4d\x8e\xea\x06\x93\xda\xbc\x85\xc4\x99\x4b\x38\x59\x3a\x6f\x0e\x6c\x5b\xce\x2f\xb9\x2c\xfe\x5e\xcc\xbf\xf2\xb4\xe1\xc3\x9d\x3f\x3e\x71\x38\x74\x7e\xff\x27\x3e\xdb\xf7\x07\xb1\x8b\x63\xb3\x20\x21\xf0\x0b\x9f\x48\x40\xb2\x51\xb0\x70\xbc\xa9\x0b\x7d\xdf\x1d\x7b\xd0\x47\x09\x48\x1d\xe4\x07\x58\x3b\x97\xc7\xa4\xad\x30\xf6\x13\x6b\x23\x37\x40\x96\x8c\x3c\x8c\xc4\x09\xfa\x9e\x86\x34\xc7\x53\x90\xaf\xb8\x8e\x6d\xa3\x65\x60\xc2\xd0\x56\xc6\xe7\x0d\x45\xef\xe7\xdd\x03\xb6\x5d\x0b\xee\xf2\x5f\x7e\x72\xff\xff\x7f\x94\x2e\xfb\x1a\x18\x16\xfa\xfa\x03\xc3\xb7\xd9\xb3\xaf\xbb\x3f\x78\xfa\xfa\x03\xdb\x5e\x8f\x4e\x8e\xa1\xff\xf5\xc7\xf6\xed\xc0\xe8\xe4\xbf\x77\xc2\x1a\x42\xf7\x09\x5a\x70\x19\x2c\x7d\x63\x7d\xa7\xb8\x87\x7c\xe4\xcd\xdf\x13\xfe\xf2\xef\xbb\x54\x01\xfd\x20\x7a\xad\x45\xdd\x3d\x5e\x4e\x50\xc5\xd3\x6b\xe4\x3b\x78\xec\xa2\x2d\xf4\x94\xb1\x31\xdf\x5d\xbc\x32\x24\xc7\x31\x20\x76\x0a\x89\xd4\xe1\x7d\xfd\x81\x7d\x9d\x13\xc4\xdf\xc4\xdf\xf8\xd7\xdd\x05\x25\xf4\x3c\x64\x07\xd5\xa8\x6b\x5f\x7f\x60\xe0\xf4\x7c\x26\x7a\xf3\x68\xa3\xb7\xff\x7b\x50\xe4\x51\xa5\x07\xc9\x0d\xb0\x0a\x18\x9a\xd1\x18\x8a\xc4\x09\x8e\x81\xac\xcc\xb3\x0a\x03\x64\x96\xd3\x68\x85\xc2\x59\x8d\xa0\x59\x46\xe5\x79\x05\x6d\xf6\xb0\x38\x0f\x00\xaf\xd1\x08\xca\x34\x50\x49\x5e\x26\x00\xce\xed\x18\x1d\x70\x37\x56\x7c\x32\x80\x87\x2b\x51\xdf\x37\x26\x77\x72\xe9\xdf\x67\xf7\xfb\x36\x74\x37\xbc\x90\x06\x08\x48\xe2\x10\xf0\x1c\x42\x2c\x50\x10\x49\x92\x2c\x8d\x20\x47\xb0\x2c\xcb\x31\x32\x54\x68\x6a\xc3\x1c\x00\x55\x51\x28\x0d\x68\x48\x61\x70\x95\xa6\x55\x55\x23\x36\x3b\xf1\xaf\x5f\x12\x5a\xb8\xa2\x83\x67\x53\x4c\x1f\xd7\x01\xf1\x7a\x79\xcd\x09\x03\x37\x0c\x3e\xb7\xef\xb7\x34\xfc\x74\xaf\xff\xab\x35\x7c\x9f\x95\xfd\xd1\xc1\x1f\x1d\xfc\xd1\xc1\x1f\x1d\xfc\xd1\xc1\x1f\x1d\xfc\xd1\xc1\x1f\x1d\xfc\x46\x1d\x44\x3f\xfd\xbf\xfb\x37\x2f\xbe\xe2\x46\xef\xf7\x27\x1d\x2f\xfb\x1d\xfa\x36\x19\xd5\x59\x66\x2c\xde\x59\xce\xd8\x34\x65\x8f\xcd\x71\x6e\x3d\x6e\x93\xb5\x15\x9f\xa7\xda\x33\xbb\xaf\x57\xa7\xfd\x1e\x42\xaa\x3f\x28\x2e\xaa\xc7\x14\x55\x2e\xfa\x77\x31\x68\xac\x85\x4c\x3e\x33\x6e\x75\x9d\xd5\x00\x15\x50\x6f\x5a\x99\xdb\xe3\x74\x08\xba\x33\x7d\xc6\x77\x09\x31\xeb\x36\x03\x2a\x37\xc0\xf3\x87\x8c\x40\x79\xfc\x64\x9a\xe6\x91\x8c\x42\x46\xf0\xd6\x52\x8e\xa6\xab\x5d\xb5\x58\x70\x98\xc9\x44\x31\x26\x34\x9b\x66\xac\xa5\x57\xf7\x61\xc1\xe3\xab\x2b\x6a\x9d\x32\x7a\xa4\x55\x4a\x77\xe9\x76\xbe\x6e\x77\x28\x6e\x34\x12\x27\x0d\xd7\x68\xfb\xd3\x1c\x4b\xd0\x3d\x2a\x35\x2f\xe1\x81\x0c\xe5\x54\x86\x9c\xcf\x34\x81\xf3\x8f\x7c\xb2\xc3\x27\x9f\x12\x64\x1e\x49\x83\x35\x2b\xdc\xba\x99\x42\x6d\xa2\xd8\x5a\xce\xea\x0e\x05\x4a\x4e\x0a\xa5\x53\xae\x0f\xd7\x5e\x61\x3c\x4b\xb7\xb9\xb0\x96\x76\x4c\xd5\x35\x1a\x44\xbd\x3b\xee\xb8\x78\xaa\x51\xe8\xb7\x4a\x6b\x66\x38\xf5\xca\x42\x8a\x47\x3d\xd4\xf0\x56\x52\xb5\x4f\x5a\x69\x5d\xf5\x18\x7b\xd1\xa8\xee\xe8\x94\xec\xf6\x78\x4c\xdb\x13\x50\x22\x17\x13\xcf\x5e\x52\x84\x02\x33\xa0\x4d\xe4\x94\xb9\xa3\x21\x42\x60\x3b\xae\x96\xc6\x3b\xa2\xd3\xf5\xb2\xd9\x19\x31\xc4\xe5\x7c\x37\x3f\x67\xc5\x99\x23\x15\x2a\x2b\x3a\xdb\x19\x30\x43\xc1\x0e\xf4\x1e\xe8\x48\x92\x54\x58\x52\xfd\x51\x2a\xd7\x7c\xd2\xde\xf4\xc3\xf8\x2f\x9e\x7d\x2a\xb3\xb5\xc7\x8f\xd9\x6f\xb3\xd1\xd7\x3c\xb3\xc6\x30\xad\xde\x60\x52\xef\x03\x25\x37\xf5\x2c\xbc\x3c\xb4\x75\xc7\x24\xf4\xbe\x3b\x76\x71\x54\xa9\x5b\x8c\xa9\x09\x79\xbd\x6a\xcc\x99\xca\x60\x52\x17\xf0\x5a\x2d\xdd\x5d\xe7\xe7\xdd\xbc\xa5\x7b\x00\xb4\x27\xae\xca\xc9\x85\xb0\x25\x2c\x61\x6a\x25\xb4\x85\xe8\xc1\x66\x46\xcd\x55\xe7\xb3\x42\x2d\x43\xf7\x66\xf3\x0c\x28\x83\x09\x6d\x5a\x19\xa6\xdd\xed\xea\x70\xe2\x31\x43\x8b\xb5\x64\xaf\xa6\xd6\xa5\x76\x4e\x39\xa6\x3d\x2b\xcc\x04\x19\x60\x62\x39\x25\xae\x53\x30\x73\x69\xa4\x2b\x80\x6d\x0c\x82\x62\xa5\xb2\xee\xf7\xb8\x45\xcf\x18\x65\x60\x36\xa4\xab\x74\x94\x2b\x1d\x9d\x67\xb4\x85\x33\xfb\x8b\x8e\x61\xf4\x7b\xaf\x27\x89\xb5\x48\xdf\x59\x22\xcc\xa8\x45\xa7\x13\xea\xb5\x79\x33\xc8\xb1\x99\x71\xa9\x0a\x24\xc4\xab\xbd\x86\x56\x28\xa5\xca\x06\x5d\x9e\x77\xeb\xa9\x91\x10\xb0\x20\x7d\x38\x8e\x78\x85\x43\xfb\xcd\x7c\x29\x5c\x35\x1d\x5a\x6e\x56\x3b\xa2\xd3\x20\xbb\x45\xc9\x4b\x17\x56\x93\x5c\xad\xe8\xcc\xaa\xfc\x12\x8c\xe6\xbe\xb6\x48\x4b\x6b\x46\x61\xdc\x61\x60\xf7\x35\x39\xdd\x59\x8d\x17\xd3\x8e\x12\xc8\x01\x4a\x8b\x79\x7c\xbd\xb6\xd0\xbc\x63\x74\xd6\x20\x5b\x2f\x80\x79\x59\xef\x2f\x9c\xa8\x15\x6f\x26\x31\x55\x54\x87\xfa\x64\x59\x83\xdd\x06\xcf\x64\xd6\x9a\xcf\x23\x5c\x71\x3c\x69\x34\x58\x67\xfa\xe5\x69\xde\xa9\xb0\xd3\xf9\x74\x71\x7c\x13\xe1\x68\x4f\xc2\x79\x7c\x89\x94\x10\x5d\xcf\xf7\xba\x78\x73\x19\x9d\xa8\xf6\xa9\x3c\x8e\xc6\x75\x46\x58\xf1\x59\xbc\xe1\x17\x44\x7d\xae\x10\x2c\x41\x74\x79\x6e\x38\xa1\xac\xea\xd4\xe2\x9b\x2c\x3d\xcd\x82\xb9\x76\xd0\x04\x77\x84\x86\x87\xf6\x05\xd3\x5e\x42\x7a\x44\xfb\x21\x85\xd6\x82\x48\xd4\x9b\x75\xa5\xa2\x67\xf5\xb0\xce\x23\xc2\x75\x66\xd2\x24\x2d\x5b\x75\x09\x94\x90\x3c\x92\x2c\x34\xa6\xb8\x19\x13\xce\xcb\x04\x3e\xe4\xeb\x62\x9b\x9e\xf8\xa3\xb1\x68\x57\x46\x04\x6c\x97\x18\x47\x4a\x29\xb5\x94\xdd\xc4\x33\xc7\xfe\x64\x0e\xf1\xf6\xe3\xfe\x76\x2b\xf5\x7c\xe5\xad\xea\x8f\x66\x5f\x63\x6f\x56\x7f\xc6\x5b\x53\xc4\x2b\xf6\xcc\x8b\x61\x2f\xdd\x76\x8e\x78\x79\xc5\x78\x92\x04\x80\x25\x71\xc0\x70\x34\xc5\xb2\x34\x87\xb3\xd1\x6b\x3b\xc4\xd9\x3b\x56\x67\x53\xf0\x7f\x5f\x67\xc8\x8f\x75\xe6\xda\x58\x5f\x7b\xbd\xf8\xc3\xa3\x1d\x7f\xc5\xf8\x98\x6d\x97\x01\xcf\x21\x99\x82\x88\xe3\x59\x9a\x01\x24\xcd\x50\x40\x81\x2a\x49\x28\x3c\x85\x08\x20\x6b\x0a\xce\x52\x32\x20\x01\x42\x1c\x40\x04\x45\xc8\x1a\x8b\x13\x90\x56\x79\x9c\xd2\x88\xfd\xcb\x2a\x27\x6b\x99\xda\x59\x2c\xcb\x18\xe9\x0c\x5e\xc5\xcb\x85\x55\x30\x5e\x48\x84\x39\xc4\xe1\xca\x75\x08\x5e\x2a\x2e\xe7\xd5\xec\xaa\x4e\x07\x19\x51\xc9\xf6\xe6\x8b\x3c\xbf\x00\x7a\xe0\xd5\xed\x91\x70\xc7\x71\xf5\xa5\xa7\xc8\xf7\xb2\xcf\xb4\x3f\x4c\xa7\x94\xa4\x58\xf4\x7e\xfb\x97\x4f\xeb\x92\xf5\xae\xf1\xac\x02\x35\x0d\xca\x9c\x42\x30\x38\x09\x20\x60\x39\x8e\x22\x18\x5a\x91\x71\x19\x68\x1a\x01\x21\xa9\x42\x8d\xc2\x71\x5c\x43\x1a\xc5\xab\x24\x81\x34\x85\xa3\x58\x55\x95\x35\x19\xc1\xad\xde\xc9\x4b\xbd\xff\x87\xfa\xfd\x59\x7a\xe7\xa8\xe3\xfd\x89\xaf\xfd\x3c\xa9\x77\x85\xd0\x64\x8a\x84\x80\x53\x34\x02\x27\x29\x02\x12\x2c\x89\x68\x96\x85\x2c\xc1\x32\x38\x4f\x12\x1a\xcd\xb3\x0c\x85\x34\x8e\xa2\x14\x8e\x43\x2c\x0e\x39\x08\x39\x48\xd1\x8a\xc2\xd3\x32\xd8\xbd\xca\x72\x53\xef\xd9\xd0\x01\x4e\x40\xd1\xb3\x6c\x43\x5c\xba\xcd\x34\x70\x8a\x52\x6a\x4d\xb0\xad\x95\xe1\x13\xa6\x56\xcb\x0f\xad\x66\x5f\xf7\xc2\x76\xaa\x13\xc9\x97\xbb\xd9\xd4\xae\x53\xfa\x35\xdd\xbe\xab\xf7\xdc\x73\xed\xd7\x95\xc7\xda\xbf\x57\xef\x80\x05\xb2\xcc\x03\x92\xe7\x01\xaf\xa9\x32\xab\x52\x14\xc5\x21\x96\x94\x71\x02\x52\x38\x03\x10\xa0\x71\x19\xa7\x20\xa3\xe0\x1a\x4e\x01\x4a\x56\x28\x40\x11\x80\xa2\x70\x95\xa7\x65\x05\xdf\xea\x3d\xc1\xde\xff\x43\xfd\xfe\x2c\xbd\xd7\xa8\x67\xf4\x7e\x75\xce\xf8\x9c\x09\xe3\x77\xcf\x16\x85\x2a\x57\x6c\xce\x9b\x53\xb9\x42\x16\x05\xd0\xef\x4d\x5a\x5e\xc5\x9a\x0c\x70\x5c\x2b\x70\x7e\xb5\xc4\x5a\xb8\xd8\x5a\x94\xfb\x69\x61\x00\x84\xc3\xca\x39\x3a\x32\x67\xea\x38\xff\x5d\x08\x64\x7d\xd0\x62\x44\xd6\xc9\x55\xf1\x6a\x33\xb5\x18\xb6\xb3\xfc\x7a\x30\x1f\xf4\x3a\x60\x69\x34\x8c\x61\xd8\x96\x89\xdc\xdc\x6a\x56\x51\xb4\x32\xcc\xf6\x84\x79\xfc\xbd\xd8\xcc\x36\x2a\x45\x83\x3c\x9c\x34\x95\x46\x87\x2c\xd0\xe3\x99\x9d\xb1\xf4\x42\x01\xe9\x7c\x99\x33\x29\x85\x10\xed\xae\xb9\x9c\x9a\xa2\x59\xe4\xfd\xd9\xc8\xc3\x79\x96\xc8\x33\xf5\x6a\x5f\x43\x69\x8b\x9a\xba\xf9\xa0\x94\xf2\x4b\xb8\x41\xcc\xaa\x46\x40\x0b\x78\x79\xd5\xb7\xe5\xf1\xb0\xda\xa7\x9d\xdc\x66\x8d\x40\xae\xad\x7a\x50\x61\xca\x6a\xbf\x66\x8e\x72\xab\xa0\xa4\x98\x75\x91\x4d\x0b\x6a\xb5\x36\x61\x9d\xc6\xb8\x29\xf3\x8b\x82\x49\x36\x3b\x4b\xff\x40\xec\x86\x0e\x8e\x96\x71\xf2\xec\x3f\x26\x1b\xbd\xeb\xf2\x19\xb3\xc4\xa3\x51\x5a\xf8\x84\x59\x22\xdf\xe9\x67\xfc\x27\xda\x17\xce\xda\xff\xc0\xce\x2a\xd2\xdf\x33\xd1\x3a\x29\x5a\xfe\xee\xa5\xc1\xe3\x4e\x76\x63\x7b\xba\x3d\x3e\xb6\xdd\xbb\xe5\x64\x19\xab\xe2\xb6\xf5\xb9\xb7\xa8\xd4\x49\x7c\x90\xad\x6b\x43\x6d\xe0\x17\x44\xb1\x1b\x2c\x86\x10\x8a\xda\xac\x1d\x32\x2b\xab\x6c\x99\x39\x0b\xa6\x4a\x03\xa6\xc4\x96\x74\x5d\xee\x8e\x6a\x8e\xd2\x54\x47\x3c\x55\xaa\x09\x5a\x45\x6d\x0a\xd2\x6c\x20\x97\xea\xec\xca\x5f\x20\x54\xcb\x6e\x1c\x21\x35\x58\xcd\x53\xde\x24\x33\xcc\xd6\x27\xa8\xd4\xec\x0f\xaa\xd9\x75\x7a\x39\x33\xc8\x79\x53\xc8\xa5\xf8\x32\x3e\x66\xb9\x71\x11\xc8\xa9\x94\x73\x20\xf6\x9f\x77\xb2\x67\x8d\xfc\x49\x27\x9b\xb1\xe9\x4e\x4e\xf9\x4c\x27\xfb\x07\x97\x44\x77\x39\xd9\x27\xaf\x03\x1f\xcf\x01\xdd\x98\xc9\x62\x39\xa0\xa8\xa3\x9f\x98\x03\x2a\x8f\xb8\x7e\xd8\x47\x72\x35\x2c\xfa\x8b\x8c\xd4\x99\xe6\xec\xac\x23\x38\xd5\xc9\x7c\x10\x40\x58\x99\x0c\xd3\x24\x3d\x99\xa8\xab\xa2\x45\x76\x46\xb6\x83\x1a\x95\xd0\xf3\x56\xaa\x5a\x68\x74\xc6\x62\x38\x64\x0b\xc3\x56\x79\x65\xa9\xfd\xa9\x51\x9f\xe5\x34\x3b\xd7\x70\x71\x49\x18\x46\x4e\xb1\xd0\x82\xac\x43\xad\x97\xc2\xb4\x30\x56\xc2\x1e\x70\x97\xaa\x3e\x1d\xf3\x23\x75\xca\x52\xad\x9a\x51\x57\x2a\xc6\xcc\x98\x0e\x6a\xa6\x5c\x3b\x30\x4b\x76\xb8\xe1\xe9\xa0\x9e\x38\x5c\xa4\xbb\x5d\xfe\xfb\x28\xf5\x40\x40\x9a\xd4\x8f\x63\x71\xe5\xb8\xb2\x0f\x3a\x71\xf8\x4f\x69\xff\x4a\xb0\xb9\xa7\xfd\xcf\x58\x0b\xc7\xd7\xa2\x0f\xed\xfd\x3e\xbb\xfd\x4b\x7d\xdc\x0e\x38\xb9\xa3\xcc\x47\xdb\x7f\x2c\xbf\x18\x1b\x8a\xa3\xc3\x2d\xce\xf5\x77\x57\x40\xfa\xe4\x0d\xd2\x9f\xa4\xb4\xde\x5f\x38\x51\xd0\x90\xd6\x21\x5d\x73\xa7\x74\x5a\xd6\xba\xad\x12\xbd\xf2\x33\xae\x30\x4c\x49\x4d\x5f\x74\xfd\xdc\xa2\x89\xcf\x45\x29\x23\x89\xb9\x51\x3f\x96\x23\xfe\x2f\x09\x48\xb1\x04\x72\xfc\xf8\xc7\x02\x52\xf6\xf1\xf6\x3f\x3b\x20\x5d\x09\x90\xff\x58\x40\x4a\xf4\x8d\xdf\x1d\x90\x56\xd1\x8f\xbf\x29\x20\x5d\x49\x1e\xdc\xa8\x2c\xf0\xd1\x0c\xc2\x59\x75\x81\x7d\xac\x8b\xa7\x00\xb6\x7f\x64\x78\xf4\xa5\x84\x60\x79\x1d\xe5\x10\xed\xb6\x7f\x9a\x78\x81\x72\xb5\x1a\xea\x65\x91\xe8\x43\x15\xd8\x7d\x05\x82\x77\xba\x19\xaf\x56\x1d\xd5\xa8\x8e\x21\x46\x6f\x09\x08\xb9\x5c\x42\xdd\xc6\x43\x83\x58\xa3\x55\xaa\x09\xad\x21\x56\x11\x87\xd8\xb7\x43\x49\x9b\xd7\x43\xbd\xd4\xab\xd5\x4b\xcf\xea\x66\x7f\x16\x71\xff\x06\x6b\xff\x16\xe5\xa4\x6a\x92\xc7\x52\xe1\x4f\xd3\x93\xa1\x9d\xc4\x6c\xdf\xc0\x29\xa9\x6d\x01\xab\xdb\xa5\x26\x6f\xd6\x48\x7f\x9a\xee\x09\x78\x12\xf1\x1b\xad\x63\x5d\xa9\xd4\xec\x8a\xd8\xb1\xaa\xc5\x87\x7a\xf2\x39\xfa\xfe\x60\x07\x2e\xc7\xe0\x58\x7d\xf3\x4a\xe5\xc8\x93\xca\xfa\x4f\xf3\xdd\x82\x25\x11\x8d\x35\x73\xca\x70\x57\xcf\x30\xb9\x8e\x61\xfc\x33\x02\x4f\x93\x8b\xb0\x92\xb8\x1d\x1b\x39\xa5\x66\xb8\xaf\x51\x75\xc3\x9b\x75\xfb\x12\x3e\x9f\xf0\x3c\xd3\x18\x64\x22\xe1\xf3\x26\x93\x06\xfd\x4a\x71\xbf\x93\x8f\x48\x7c\x06\x53\x3f\x94\xaf\x70\xdc\x37\x73\xca\x2e\xaa\x0b\x78\xa3\xd2\xdf\xc5\x97\x33\x9e\x26\x79\x04\x4c\x22\x7a\xd6\xdc\x5d\x31\x2c\xf6\x77\x62\xe7\xdf\x0f\x79\x9a\xed\x11\x30\x89\xed\x59\x73\xa7\x6c\xf7\xf5\xf2\x6e\xd4\xa3\xbb\xf8\x8e\xca\xf3\x7c\x0f\x80\x89\x7c\x4f\x9b\x3b\xe5\x7b\x28\x69\x77\xa3\x54\xdd\xc5\x07\x65\x9e\x26\x7c\x04\x4c\x22\x7c\xd6\xdc\xd5\xa5\xc1\xb6\x54\xdd\xeb\xb1\x0e\xdd\xcd\x5a\x64\x09\x1f\xdc\x79\xbe\x1f\x31\xc8\xc4\x9e\x9c\x37\x99\x14\x25\x7c\x34\x7b\xdd\x17\xdf\xba\x5e\x27\xec\xfc\x43\x44\x9f\xc0\xfd\x26\xf1\xa7\x58\x9f\x2d\x51\x93\x3e\xcf\xf4\x34\xff\x53\xd0\xa4\x4e\x24\x34\x7b\xb5\x27\xf1\x1a\x5e\xd7\x96\x9a\x87\x4f\x57\xed\xb8\x47\x1f\xba\xba\xaf\xba\xd8\xf6\x9b\x58\x67\x38\x58\x5d\x3a\xae\x62\xbb\xed\x92\x54\xc0\xe4\xc0\x43\x08\xdb\x97\x12\xfc\x0b\xeb\x17\xc5\x96\x88\xc5\x4b\x0b\x1e\xeb\x45\x5d\x2e\x34\x4f\xbf\xc6\xf5\x28\xcb\x53\x98\x0d\xc9\xdd\x3a\xe5\x84\x62\xbc\xbe\xf4\x6b\xbc\x9a\xf4\xeb\xb6\xca\xf3\x05\xbb\xe3\x27\xc5\x1e\x25\x76\x40\xd8\x70\x3a\x3a\xc6\x09\xad\xeb\x4b\xc5\x93\x8f\x9f\x3d\x43\x61\x0f\xb2\x65\x11\x0b\x30\x77\x12\x39\xf9\x5e\xdb\xa3\x44\xe2\x20\x1b\x22\xa7\x0b\xe1\x3b\x99\x9c\x7c\x63\xee\x51\x26\x71\x90\x0d\x93\xd8\x5f\xe3\xdf\x4f\xe3\xe4\xbb\x78\x4f\x30\x89\xe3\xec\xc8\xec\x57\x09\xa7\x64\xe2\x35\x64\x6f\x85\xaf\xe7\x18\x9d\x03\x6d\x28\x9d\xc5\xc6\x77\x75\x74\xed\x73\x90\x98\xe2\x58\xae\x89\x02\x14\x35\xfb\x3f\x01\x00\x00\xff\xff\x65\x98\xb8\xaf\x3b\x72\x00\x00") - -func asset_stat_trustlines_3CoreSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_trustlines_3CoreSql, - "asset_stat_trustlines_3-core.sql", - ) -} - -func asset_stat_trustlines_3CoreSql() (*asset, error) { - bytes, err := asset_stat_trustlines_3CoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_trustlines_3-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc2, 0x79, 0xef, 0x37, 0xc2, 0x5a, 0x89, 0xc3, 0x5d, 0x2d, 0xe5, 0x45, 0x1a, 0x16, 0x8f, 0xa5, 0x61, 0xa8, 0xd6, 0xd3, 0x91, 0x6a, 0x5b, 0x6f, 0x72, 0x65, 0x72, 0x55, 0x61, 0x1b, 0x58, 0x1c}} - return a, nil -} - -var _asset_stat_trustlines_3HorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x7d\xe9\x6e\xe2\x48\xb4\xf0\xff\x7e\x0a\xab\x35\x52\xba\x95\x74\xc7\xfb\x92\xbe\x3d\x92\x01\xb3\x24\xec\x4b\x02\x8c\x46\x56\xd9\x2e\x1b\x27\x60\x13\xdb\x40\xc8\xe8\xbe\xfb\x27\x2f\x80\x31\xde\x58\x92\x19\x7d\x17\xb5\x5a\x60\x9f\x3a\x5b\x9d\xaa\xb3\x54\xa5\xea\xc7\x8f\x2f\x3f\x7e\x20\x6d\xd3\x76\x34\x0b\xf6\x3a\x75\x44\x01\x0e\x90\x80\x0d\x11\x65\x31\x9b\x7f\xf9\xf1\xe3\x8b\xfb\xbe\xb4\x98\xcd\xa1\x82\xa8\x96\x39\xdb\x01\x2c\xa1\x65\xeb\xa6\x81\x70\x3f\xe9\x9f\x58\x08\x4a\x5a\x23\x73\x4d\x74\x9b\x47\x40\xbe\xf4\x84\x3e\x62\x3b\xc0\x81\x33\x68\x38\xa2\xa3\xcf\xa0\xb9\x70\x90\xdf\x08\xfa\xcb\x7b\x35\x35\xe5\x97\xc3\xa7\xf2\x54\x77\xa1\xa1\x21\x9b\x8a\x6e\x68\xc8\x6f\xe4\x6a\xd0\x2f\xb3\x57\xbf\x36\xe8\x0c\x05\x58\x8a\x28\x9b\x86\x6a\x5a\x33\xdd\xd0\x44\xdb\xb1\x74\x43\xb3\x91\xdf\x88\x69\x04\x38\x26\x50\x7e\x11\xd5\x85\x21\x3b\xba\x69\x88\x92\xa9\xe8\xd0\x7d\xaf\x82\xa9\x0d\xf7\xc8\xcc\x74\x43\x9c\x41\xdb\x06\x9a\x07\xb0\x02\x96\xa1\x1b\xda\xaf\x80\x77\x08\x2c\x79\x22\xce\x81\x33\x41\x7e\x23\xf3\x85\x34\xd5\xe5\x1b\x57\x58\x19\x38\x60\x6a\xba\x60\x7c\xbd\x2f\x74\x91\x3e\x5f\xa8\x0b\x48\xad\x8c\x08\xc3\x5a\xaf\xdf\x43\x5a\xcd\xfa\x28\x80\xff\x39\xd1\x6d\xc7\xb4\xd6\xa2\x63\x01\x05\xda\x48\xa9\xdb\x6a\x23\xc5\x56\xb3\xd7\xef\xf2\xb5\x66\x3f\xd4\x68\x1f\x50\x94\xcd\x85\xe1\x40\x4b\x04\xb6\x0d\x1d\x51\x57\x44\xf5\x05\xae\x7f\x7d\x06\x41\xd9\xfb\xf6\x19\x24\x5d\xbb\xfa\x3c\x01\x7d\x6a\xc7\x4b\xe7\x33\xe8\x1a\x72\x1a\xb1\x10\xd4\x0e\xb9\x07\x5e\x6b\x96\x84\x61\x08\x32\x40\xeb\x71\x25\x42\x55\x85\xb2\x63\x8b\xd2\x5a\x34\x2d\x05\x5a\xa2\x64\x9a\x2f\xe9\x0d\x75\x43\x81\x6f\x62\x48\x38\xc3\x06\x9e\xa1\xdb\xa2\x69\x88\xba\x72\x4c\x6b\x73\x0e\x2d\xb0\x6d\xeb\xac\xe7\xf0\x8c\xd6\x3b\x4e\xce\xe2\xe2\xb8\xb6\x53\xa8\x68\xd0\xf2\x1a\xda\xf0\x75\x01\x0d\xf9\x28\x11\x42\xcd\xe7\x16\x5c\xea\xe6\xc2\x0e\x9e\x89\x13\x60\x4f\x4e\x44\x75\x3e\x06\x7d\x36\x37\x2d\x77\x38\x06\x73\xea\xa9\x68\x4e\xd5\xa5\x3c\x35\x6d\xa8\x88\xc0\x39\xa6\xfd\xc6\x98\x4f\x30\xa5\x60\x5c\x9e\xc0\x74\xb8\x25\x50\x14\x0b\xda\x76\x7a\xf3\x89\x63\x29\x9e\xdf\x11\xa7\xa6\xf9\xb2\x98\xe7\x80\x9e\x67\xb1\xe4\x43\x01\xdd\x3a\x12\xf1\x66\xd2\xcd\xdd\xc0\x9d\x27\x54\x15\x5a\xf9\x40\x37\xe8\x4f\x68\x12\xa8\x35\x5f\x23\x6f\x6a\x3d\x82\x48\x78\x2a\xce\x6a\x31\x77\x1b\x4c\x9c\xcc\x1e\xb0\xf7\x26\x20\x69\x9d\x69\x46\x93\xed\x48\xcf\x03\x6c\xfa\x7c\x98\x99\x80\xba\xed\x88\xce\x9b\x38\xcf\x46\xe9\x42\x9a\xf3\xbc\x90\x30\x2f\xd8\xc6\x95\xa4\x03\x4b\x9b\xe1\x9e\x09\x96\x3d\x8b\x49\xeb\x7c\x9d\xe9\xfb\x48\x57\xdb\xb6\xbd\xc8\xa2\xbc\x05\x96\x4d\x05\x1e\x19\x17\x6c\xcd\x60\x0e\x2c\x47\x97\xf5\x39\x30\x52\x9d\x77\x56\x53\x71\x7e\x64\x6c\xb2\xf5\x68\xc7\x72\x10\xdf\xf0\x68\xfa\x9e\xf2\xf2\xd0\xf3\x01\x3f\x1c\xbf\xdf\x99\x6e\x4f\x06\x5f\x5d\xff\xb0\x09\xfd\x3c\x63\x10\x73\x72\xa0\x99\xd6\x5c\x9c\xe9\x5a\x10\x30\xa4\xb0\x10\x81\xcc\x2d\xe3\xf1\xf1\x5e\x1a\xe6\xbc\xc6\xe9\xb7\x2e\xb6\xea\x83\x46\x13\xd1\x15\x9f\x72\x49\x28\xf3\x83\x7a\x3f\x27\xee\x04\xa3\xbb\x00\xe6\xa0\xbb\xd3\x31\x79\xbf\xf2\x8b\xbf\xf1\xd2\x3d\xa1\x33\x10\x9a\xc5\x13\x74\xe6\xc6\xd9\x36\x7c\x3d\x9a\xf2\x1e\x92\xdc\xad\x15\x98\x13\x76\x17\xcd\xe6\x96\x30\x61\xd4\x1f\x23\x5f\x3c\x8a\x7c\x6d\x83\xb8\x2f\x1f\x70\x10\xe4\xe5\x96\x2d\x98\x01\x8e\x91\xc5\x6f\x92\x13\x36\x08\xff\xf2\xf3\xb3\x89\x17\xf3\x70\x14\x99\x43\xd2\x81\x43\x53\x42\x00\xc8\x57\x2a\x5d\xa1\xc2\xf7\x63\x80\x67\xba\x9b\x71\xe8\x32\xfc\x66\x2c\x66\xd0\xd2\xe5\xbf\xfe\xfe\x9e\xa3\x15\x78\x3b\xa1\xd5\x14\xd8\xce\x37\x60\xac\xe1\xd4\x2b\xc5\xe4\x68\xa1\xea\x56\x6c\x93\xf2\xa0\x59\xec\xd7\x5a\xcd\x14\x79\x44\xa0\x69\x3b\xee\x6e\x90\x03\x46\x53\x70\x6c\xa4\x3b\x03\x87\x2b\xab\xd7\x7c\xc7\xfc\x0d\x72\x8c\x20\x9e\xe8\x39\x30\x08\xc3\xbe\xd0\xec\x45\x50\x4c\xe7\x9a\xfd\x3a\xdd\xd8\x62\xb1\x2a\x34\xf8\x03\x0a\xbf\xbe\xf8\x55\xb8\x26\x98\xc1\xbb\xcd\x33\xa4\xbf\x9e\xc3\xbb\xa0\xc9\x2f\xa4\x27\x4f\xe0\x0c\xdc\x21\x3f\x7e\x21\xad\x95\x01\xad\x3b\xe4\x87\x57\x9c\x2b\x76\x05\xb7\xbf\x02\xcc\x1b\x7c\x5f\xf6\x30\xee\xbf\x0c\x10\x17\x5b\x8d\x86\xd0\xec\xa7\x60\xf6\x01\x90\x56\x73\x1f\x01\x52\xeb\x21\x57\x9b\xb2\xdb\xe6\x99\xed\x21\xb9\x8a\x52\xde\x88\x1f\xd0\xdc\x6a\x28\x53\x9e\x3d\x5d\x36\x5b\xfd\x88\x3e\x91\xa7\x5a\xbf\xba\x65\x2b\x5c\x7f\xdb\x23\xbf\xc3\x12\x61\xe4\x18\xe1\x0f\x90\x78\x0a\x68\xd7\x6f\xe7\x5a\xaf\x53\x47\xe6\x96\x29\x43\x65\x61\x81\x29\x32\x05\x86\xb6\x00\x1a\xf4\xd4\x90\xb3\x5e\x18\x66\x37\xdb\xd0\x02\xf6\x37\xb6\xba\xe3\x7f\xd3\xb7\x71\xba\xdc\x5a\x76\x26\x7e\xa4\x2b\xf4\x07\xdd\x66\x2f\xf4\xec\x0b\x82\x20\x48\x9d\x6f\x56\x06\x7c\x45\x40\x3c\xe9\x1b\x8d\x81\x3f\xdf\xf5\xfa\xdd\x5a\xb1\xef\x41\xf0\x3d\xe4\x0f\xf1\x0f\xa4\x27\xd4\x85\x62\x1f\xf9\x03\x73\x7f\x45\x7b\x23\x73\x20\x9e\x27\x5d\x16\xfa\x8b\x09\x87\xc7\x09\x97\x67\xa6\x3a\x4f\xbe\x1c\x14\xb6\x22\x6e\x1f\x9d\x24\xe1\xb7\x2f\x08\x52\xe4\x7b\x02\xf2\x54\x15\x9a\xc8\x1f\xd8\x5f\xd8\xdf\xb7\x7f\x60\x7f\xe1\x7f\xff\xf9\x07\xee\x7d\xc7\xff\xc2\xff\x46\xfa\xfe\x4b\x44\xa8\xf7\x04\x57\x29\x42\xb3\xf4\x3d\x56\x33\x39\xfc\xc0\x99\x9a\xc9\xa6\xf0\xd1\x9a\xf9\x9f\x53\x34\x73\xe8\x53\x03\x3d\x6c\xfd\x70\x3e\x45\xec\xdc\xf6\x01\x46\x8f\x63\x04\xe9\xb9\xba\x42\x7e\xef\x66\x80\x1b\xff\x71\x7f\xd4\x16\x90\xdf\xe1\x11\xf1\x3d\x6e\xd4\x5e\x94\xc7\x28\xc2\x08\x8b\x9b\x61\x9c\x9f\xc3\xd8\x10\xe8\x5c\x2e\xe3\x90\x46\x38\xdd\x1b\x90\xfb\xec\xee\xac\xec\x90\xdb\xb8\x30\xef\x6c\x6e\x63\x90\x46\xb9\x0d\x0f\x92\x54\x6e\x5d\xcf\xa5\x40\x15\x2c\xa6\x8e\xe8\x00\x69\x0a\xed\x39\x90\x21\xf2\x1b\xb9\xba\xfa\xb5\xff\x76\xa5\x3b\x13\xd1\xd4\x95\xd0\x52\xda\x9e\xac\xe1\xf8\x37\x10\xd1\x1b\x60\xf9\xc4\xf3\xc7\x62\x38\xf9\xf6\x25\xd2\x15\x44\xd2\x35\xdd\x70\xbc\xc0\xa0\x39\xa8\xd7\x7d\x71\xc0\xcc\x0d\xe3\x11\x79\x02\x2c\x20\x3b\xd0\x42\x96\xc0\x5a\xeb\x86\x16\x01\x33\x16\xb3\x6d\xc8\x8f\xe8\x86\x03\x35\x68\x45\x40\xd4\x29\xd0\x6c\xc4\x9e\x81\xe9\xf4\x90\x8c\x63\xce\xa6\x87\x44\xbe\xe1\x14\xf5\x7d\x0b\x79\xd8\xed\xd1\xbc\xe1\x54\x75\x44\xab\x1d\x5b\x95\x38\xf0\xed\x40\x21\xf3\xf9\x54\xf7\x6a\xf6\x88\xa3\xcf\xa0\xed\x80\xd9\x1c\x71\xfb\xcc\xfb\x89\xbc\x9b\x06\x3c\x64\x34\x29\x2b\xda\xc4\xa3\x41\x3a\x95\x8f\xe7\x6d\xf2\x95\x80\x35\x30\x43\xbe\xdb\xf7\x23\x3a\xcc\x7b\x50\x6b\x16\xbb\x82\x17\x7e\x15\x46\xc1\xa3\x66\x0b\x69\xd4\x9a\x8f\x7c\x7d\x20\x6c\x7f\xf3\xc3\xdd\xef\x22\x5f\xac\x0a\x08\x96\x25\xcc\xc9\x6a\x8f\x22\x3a\x30\xc5\xa0\xe8\x81\x18\xf0\xcd\x59\x82\xe9\xb7\xab\x04\x89\xaf\xee\xee\x2c\xa8\xc9\x53\x60\xdb\xdf\xa3\xdd\xe5\xaf\x55\xc4\xd8\x16\x4d\x7e\x4f\xe9\x28\x3f\x37\x3e\x5b\x32\xbf\xa2\xb3\x95\x2b\x7e\x64\xec\x6a\x75\xf1\x6c\xc6\x82\xcb\xa6\x12\x07\x8e\xe1\xf1\xe0\x7e\xf9\x2f\xa6\x01\x45\xa7\x8d\xb0\xf8\xf2\xc2\x85\xcc\x36\x8c\xf3\xd3\x8c\x36\x4d\x10\xa4\xf5\xd4\x14\x4a\x48\x61\x94\x21\x91\x5f\xa1\x4b\x17\x68\x8b\x2b\xf2\xfa\xa7\xae\x24\xf1\xb6\xa9\xf9\x9c\x6b\x75\x01\x9e\xc0\xec\x22\x63\x46\x4c\x9a\xe9\x0f\x4b\x5c\x49\x90\x5f\xbd\x85\x8f\xaf\x09\xd6\xec\xd9\x71\xfc\x2b\x05\x3a\x40\x9f\xda\xc8\xb3\x6d\x1a\x52\xb2\xb1\x6d\x0a\x65\xe7\xea\x21\xc0\x13\xe8\x61\xb3\x6e\x9d\xc0\x5b\x68\x31\x39\xd7\x28\x8c\x5b\xc7\x8e\x6f\x18\xa8\x25\x54\x19\xf5\x3a\x62\xcb\xc7\x66\x96\x43\x23\x14\x76\x1d\x91\x0f\x7e\xbb\x98\x1c\x71\x4c\xe6\xc2\xd9\xf9\xa6\x68\x1b\x0b\x02\x27\xb3\x91\x0f\xbb\x98\x2b\xb9\x61\xb7\xa6\x13\xfc\x8c\xac\xb3\x1f\xc8\x82\x1d\xc4\x03\x0e\x98\x8a\xb2\xa9\x1b\x76\xbc\x0d\xaa\x10\x8a\x73\xd3\x9c\xc6\xbf\xf5\x56\x3e\x55\x98\xd4\xd7\xde\x6b\x0b\xda\xd0\x5a\x26\x81\xb8\x71\xa8\xf3\x26\x7a\x61\x92\xfe\x9e\x04\x35\xb7\x4c\xc7\x94\xcd\x69\xa2\x5c\xd1\x3e\xda\x18\x0b\x04\x0a\xb4\xbc\xf0\xc2\x7f\x6e\x2f\x64\x19\xda\xb6\xba\x98\x8a\x89\x86\x12\x08\x0e\xf4\x29\x54\x92\xa1\x92\x87\x55\x42\xed\xfa\xdc\x51\x96\xb0\x1e\x92\xe1\xf3\xf2\xcf\x36\xd9\xf3\xd7\xb1\x22\x5f\xd6\x8d\xa5\xd2\xf8\x2c\xb7\x76\x94\xa0\x67\xba\xb9\x54\x5a\x87\x6e\x2f\x1e\x3c\xc5\x0d\x86\x56\x76\x2e\x66\x9b\x59\x69\xce\xfe\xae\xaa\x84\x54\xc8\x8d\xfc\x65\x5f\x14\xcf\x03\x9e\xe9\x00\x83\x91\x6f\x2e\x2c\x79\xbb\x4d\x23\xc1\xf5\x6c\xa6\x93\xab\xab\xbb\xbb\xe4\x54\x2c\x79\x1c\x04\x0b\x6b\xe7\xaa\x33\xd8\x0b\xf8\xed\xa2\xf1\x42\x30\x25\x9e\xe2\xbd\xbc\xbd\x30\x89\x64\x23\x3b\x11\xd3\x80\x82\xcd\x91\x69\x20\x7e\x1e\x1c\x0b\x70\xb8\xa7\x33\x03\x2e\x95\xdc\x16\x2a\x85\xa2\xc7\x92\x6e\x8b\x36\x9c\x4e\xa1\x85\x48\xa6\x39\x85\xc0\xd8\xf8\x24\x5d\x86\xa2\xb1\xe7\x7f\xfd\x67\xfb\x3e\x79\xb7\x9b\x48\x8c\x78\xeb\xbd\xfd\x4c\xd1\x97\xa1\x65\xfa\xd8\x9d\x9f\x1e\xd7\xa2\xb7\x37\x18\x29\x56\x85\xe2\x03\xf2\xed\x5b\x58\x83\x7f\x22\xe8\xf7\xef\x59\xa8\xe2\x9a\x6f\x94\xf6\x3f\x07\x7a\xcc\x81\x6f\x4f\xa7\x11\xf4\x11\x85\x7b\x0c\xa6\x0e\xa5\xf8\x15\xee\x0b\x0c\xae\xf8\x3d\x0b\x39\x3d\x69\x9e\x29\xec\x1c\x5f\x9a\xb5\x3f\xe0\x32\xde\x34\x83\xca\x67\xf9\xd3\x23\x85\x3d\xd3\xa3\x66\x50\x3b\xf4\xa9\x49\x0d\x52\xbc\xea\xde\x9e\x90\x0b\xda\xea\xc6\x3e\xc3\x2c\xe5\x4e\xa2\x82\xb9\x3f\x23\x35\xcb\xeb\x78\xd3\x7d\x68\x2c\xec\x8e\x74\xec\x78\x71\xb3\x80\xe4\x34\x22\x29\x41\xfb\x57\x52\x2c\xe7\x4d\x84\xc6\x12\x4e\xcd\x39\x8c\x2b\x5b\x3a\x6f\x6e\xc2\xb3\x98\x3a\x09\x2f\x67\xd0\x01\x09\xaf\xdc\x54\x2b\xe9\xb5\xad\x6b\x06\x70\x16\x16\x8c\xab\xb0\x71\xf4\xf7\xbf\xfe\xde\xc5\x2e\xff\xfc\x6f\x5c\xf4\xf2\xd7\xdf\x51\x9d\xc3\x99\x99\x50\x0c\xdb\xe1\x32\x4c\x03\xa6\xc6\x42\x3b\x5c\x87\x68\x02\xc9\xf4\x19\x14\x25\x73\x61\x28\x5e\xc5\x9a\xb5\x80\xa1\xc1\x68\x36\xb6\xef\x5a\x5d\x4d\xb8\xd8\x34\xa8\x64\xa7\x5b\x41\xed\x4f\x57\x36\xa3\x6d\xb3\x85\x2b\xcf\x14\xe1\x0f\x37\x6f\xbf\x5c\xc6\xee\xb0\x9e\xd0\x4f\xa9\x93\x86\x2b\x52\xe1\x2a\xe9\x71\x79\xc4\xe5\x84\xc8\xb9\x79\x2e\x55\xa8\xd4\xfc\x23\x8f\x90\x89\x9e\xf6\x62\x62\xe6\xde\x7f\x98\x2a\x68\x86\x5b\x88\x17\xb5\x04\x1c\x80\xa8\xa6\x95\xb1\x5a\x84\x94\xf8\x3e\x9f\x21\x5e\xad\xd9\x13\xba\x7d\xa4\xd6\xec\xb7\xf6\x56\x8c\x3c\x2f\xda\x43\xbe\x61\x37\xc8\x15\x7a\x75\x83\x60\x37\x08\x7a\x83\x5c\x5d\x7d\xff\x95\xd9\x04\x3f\x6c\x92\xc0\x78\xda\xda\xce\xb1\xcc\x47\xd7\x77\x36\xdc\x5c\x61\xa2\x6e\xe8\x8e\x0e\xa6\xa2\xbf\xd7\xe6\xa7\xfd\x3a\xbd\xba\x41\xae\x70\x14\xe3\x7e\xa0\xf4\x0f\x94\x40\x30\xf6\x0e\x67\xef\x48\xe6\x27\x4a\xe0\x24\x47\x5f\xa3\x78\x54\xce\x44\xec\xb8\xe8\xff\x0d\xc5\x5e\xdf\x49\x6b\xd1\x31\x75\x25\x9d\x12\x47\x53\xcc\x31\x94\x08\x71\x61\xc3\xad\x2f\x13\x75\xe3\xe0\xef\x36\x52\xe9\x91\x24\x4a\xb2\xc7\xd0\x23\x45\xa0\x28\x62\xb4\xfa\x95\x4a\x83\x22\x29\x02\x3f\x86\x06\x25\xfa\x9e\x73\x13\xc3\x7b\xab\xa6\xa9\x24\x68\x02\xc5\x8f\x12\x83\xde\x90\x08\xe6\xc9\x1c\x24\x58\x12\xa3\x8e\x21\xc1\x88\x33\x53\xd1\xd5\x75\x7e\x29\x58\x8c\xc6\x8f\x22\xc1\xee\x49\x11\x6c\x96\xce\x41\x87\x21\x69\xe2\x38\x3a\x6e\xa7\x03\x4d\xb3\xa0\x06\x1c\xd3\x4a\xb7\x29\x0e\xc5\x50\xee\x18\xf4\x9c\x87\xde\xaf\x8c\x8a\x6f\x8a\x95\x8e\x1d\x67\xb0\xa3\xba\x1a\x43\x3d\xf4\x41\x2f\x78\xf9\x70\x3a\x01\x8a\x63\x8e\xd2\x0e\x86\x85\x09\x6c\x13\x2c\x77\x02\x48\x27\xc4\xd1\xdc\x71\x92\xe0\x7b\x1d\x1d\xa4\xb4\xfe\x9f\xe7\xa6\x51\xc2\x50\x86\x22\x8f\xea\x11\x8c\xf0\xc5\xd9\x16\x02\x52\x7b\x1c\xc3\x70\x86\x3e\x4e\x12\x52\x54\xf5\xb7\xcd\x9f\x2a\x98\xb3\xa9\xa8\xea\x70\x9a\x3a\x35\x62\x18\x85\x61\x47\x4d\xc2\x18\xb5\x59\xa1\xd9\x54\xce\xdf\x32\xc4\xa0\x99\xe3\xa6\x79\x8c\x16\x75\x43\x83\xb6\x23\x1e\xd6\xe6\x33\x48\x31\x1c\x7b\x5c\x8f\x30\x7b\x41\x81\xb7\x08\x02\xd2\x9d\x09\x86\xa3\x28\x41\x06\x44\x12\x7c\x6d\xea\x8a\xfe\xb1\xce\xf6\x60\x55\x3f\x1c\x2e\x54\x8a\xc3\x87\x0a\xdd\x6d\x92\xad\x66\x4d\x68\x17\x1b\xcd\x72\x81\x21\x70\x9e\x24\xe8\x31\xd5\x6e\x96\x7a\xdd\x7a\xe5\xe9\x81\xa9\x14\xea\xc5\x46\xa7\x5e\x2b\xb7\xc8\x1e\x23\x8c\x9e\x1e\x07\x51\x0d\x25\x12\xc1\x3d\x22\x38\xd1\x29\xe3\xd5\x81\x40\xe1\x7c\x63\x38\x28\x0f\xaa\x04\x3f\xba\xe7\x87\xc3\xca\x70\xf8\x88\x3f\x56\x87\xa3\x51\x97\x16\x46\x43\xa1\xdf\x7e\x28\x0d\xc7\x3d\xfe\x89\x66\x86\x2d\x32\x37\x11\xc2\x25\x52\xe8\xb6\x47\xd5\x5a\x1d\x2f\xd6\x88\x72\xb3\x43\x16\x86\xf5\x72\xa3\x59\xaa\x97\xef\x07\xcd\xf6\x00\xaf\x8e\x88\x71\xa3\xdc\xab\xb6\x9a\x83\xa2\xd0\xe2\x7b\x4f\x4c\xa7\xc8\xb4\x86\x78\xf5\xea\xd4\xcd\x21\x6e\xac\x98\xd1\x0d\xc1\x86\xba\xdd\x5e\xd8\x9f\x36\x4c\xdf\x38\x71\x83\x10\x37\x88\x63\x2d\x60\x0e\xe3\x38\xdc\x12\x71\xb2\x69\xf8\xa9\x4c\xd8\x30\x64\x0b\x2a\xba\x23\x82\xe9\x7c\x02\x8c\xc5\x8c\x74\xcd\x79\xd0\x2b\x61\x57\x1f\xd1\x9f\xfb\xe4\xf1\x64\xf2\xf8\xb9\xe4\x4f\xd9\x84\x70\x91\x7e\xde\x4b\xfc\x6e\x10\x3c\x6f\x2f\xc7\xed\x41\x38\xb5\x9b\x37\xfb\x10\x42\xfd\x8c\xe1\x2c\x4b\x72\x28\xc5\xb1\x94\x97\x04\xe0\x6e\x16\xf0\xcf\xd7\xa9\x3e\xd3\x9d\xaf\x77\xc8\x57\x0e\xc7\x09\x82\xc1\x51\x82\x66\xa9\x9f\x24\xc3\x50\x2c\xca\x7c\xbd\x41\xbe\xee\xf6\xbc\xb8\x50\xae\x61\xec\x9e\x3a\xeb\xb9\xf7\x34\xda\x87\x3b\x08\x7f\xf3\x8b\x0b\x73\x6a\x5f\x7e\xfd\xdf\x24\x63\x4a\x14\x12\x43\x51\x16\x3b\x4f\x48\xfc\xbf\x2a\x24\x7e\x83\xb0\x14\xcb\x71\x04\x4b\xb3\xdc\x36\x9b\xfb\xe7\xab\xed\xb8\xa9\x8e\xa1\x89\x12\x98\x02\x43\xf6\x38\xc6\x50\x14\xfd\x89\xfa\x9f\xfc\x14\x88\x7d\x0a\xb8\x37\x51\x5d\xfd\xf3\xd5\x0f\x77\x0e\xf0\x1e\xe8\xc9\x00\x8e\xbe\x84\x27\x4b\x44\xdc\x20\x98\x2f\xd2\x0a\xea\xda\xc4\x25\x88\xdd\x20\x5f\x7d\xd3\x17\x5f\xe0\xfa\xd3\x8c\xc9\xe3\x8a\xc4\x99\x60\xc0\x7c\x94\x9e\x03\x0a\x1f\xae\xe7\x88\x44\x39\xf5\x7c\x5a\xd0\xe0\x73\x95\x31\xe1\xc5\x6d\x36\x3a\x75\xc2\xdb\x6c\x38\x0a\xc7\x09\x28\x47\xd0\x28\x8e\x2a\x00\x83\x32\x47\x03\x12\xa0\x32\xcd\x41\x96\xa3\x00\x87\xb2\xa8\xaa\x30\x24\x43\x33\x28\xcd\x90\x18\xa3\x42\x4a\x95\x30\x09\x95\x15\x28\xab\x18\xa7\xca\x18\x90\x58\xd7\x03\x31\x24\x81\x43\x15\xb0\x34\x81\x62\x90\xa2\x00\x50\x51\x86\xc1\x19\x86\x55\x39\x8e\xa6\x51\x06\x90\x1c\x49\xe1\x28\x0d\x08\xa0\x02\x1a\xa7\x21\xa4\x69\x28\x11\x98\x42\xb0\x0a\xc9\x12\x8c\xef\x00\xf0\x48\x84\x48\xdf\x11\xcc\x1d\xc6\x44\x03\x47\xff\x31\xf7\x13\xc3\x29\x8c\x61\x33\xdf\x06\x33\x3a\xc6\xb2\xec\x0d\x82\xd1\x6e\x7f\x1e\x7c\x6e\x10\xd2\xfd\x0f\x0b\xfe\xdb\x3c\xc4\xb6\x5f\xdc\x08\x80\xe7\x79\xbe\x48\x74\xd6\x0c\x3d\x79\xe6\xe1\x23\xb0\x56\xca\x5a\x21\xaf\xc7\x63\x0d\xbe\x4c\xcb\xb5\x8a\x49\x5f\xcf\xee\x17\xd4\x8c\x7e\xaf\xf6\x9f\x07\x1a\xa1\x0c\x5f\x4b\xf3\xe9\x12\xce\xa6\xc5\x4e\x03\x17\x4c\x65\x4d\x8e\x0b\xe3\x4a\x55\xc1\x5e\xac\x67\xc9\x76\x46\xaf\xa3\x89\x72\xdb\x95\xd6\xd8\xc0\x45\xcd\x0f\xdb\x8f\x8d\x65\x87\xdf\x7e\x5e\xc7\xd7\xda\x43\xbf\x6e\x3a\x93\x11\x67\x33\xb3\x81\xc0\xad\xda\x95\xde\x7b\x11\x5f\x2d\x35\xf0\x54\x28\xad\xcb\xad\x6b\x85\x58\x19\xa5\xe7\xda\xed\xa0\x47\x28\x55\xac\x65\x17\x80\x06\xac\x21\x25\x3d\x5b\xac\x52\x7a\x7b\x7e\x7f\x93\x9f\xfa\x85\xaa\x65\x94\x8a\x56\xb7\x4f\x9a\x85\x17\xcd\xc5\xdc\x68\x92\x75\xf0\x3e\xc7\x43\xc4\xf8\x4a\xf8\xc7\xf6\x33\xe6\x87\x18\xd9\xe1\xf9\x12\x7a\x1f\xf7\xfa\x3f\xfd\xf1\x8d\x0a\x4d\x18\xf7\xd1\xa1\x80\x5f\xc6\x8c\xaf\x68\x42\xe1\x58\x95\x22\xdc\x97\xac\x82\x49\x38\x23\x51\x12\xcb\xa9\x38\x01\x54\x8a\xc0\x30\x89\xa1\x68\x0e\xe0\xa4\x0a\x54\x8c\x44\x09\xa0\xa0\x12\x85\x4b\x34\x41\x48\x28\x23\x41\x8e\x4b\x1b\x0a\x74\xa2\xb1\x93\x38\xc3\x61\xa9\x6f\xdd\x48\xd1\x77\x20\x24\xc5\xe1\x29\x23\x01\xcf\x39\x12\xf0\xf6\xf8\x19\x6b\x2e\x28\x13\x95\xee\x99\x27\xd2\x58\xb7\x96\x83\xb7\x0a\xf1\x38\x37\x5f\xae\x97\x65\xbe\xe5\x14\xb1\x07\xbc\xc1\x14\x18\x7a\xbc\xa0\xaa\x9c\x5c\x55\xd0\x57\xde\x1e\x3f\x73\x1d\x7a\xc4\xae\x6b\x35\x99\x5e\x38\x2f\xea\x6d\xb1\x75\x5d\x9f\xdd\xa2\x0f\x92\xad\x5a\xef\xed\xd0\x48\xf0\xbe\xd5\xb6\xff\xf1\x9e\x7d\xda\xbb\xdf\x2b\xbe\xdd\x79\xf1\x7b\xba\x8d\xb6\x9f\x7b\x44\x57\x65\x26\x36\xfb\xf6\x58\x2b\x68\xb8\xc6\xbe\x3d\x2c\x5f\x5b\xad\x5b\xe3\x56\xbb\x1d\xae\xb4\x76\xf7\xb6\x5a\x60\x5e\x21\x37\xb7\xf5\xfb\x05\xf9\xd2\xac\x76\x49\x73\x58\x15\xfa\x35\x85\xc4\xda\xcd\xfb\x21\x33\xbf\x7f\x35\x51\x9c\x27\xcd\x6b\xca\xe8\x4a\xc4\xfb\x62\xe5\x91\x8a\x19\x29\xa5\x5a\x9c\xb5\xfd\xdf\x19\x29\xd8\x65\xac\xdc\x5b\x04\x73\xc3\x05\xd7\xbd\x62\x1c\x83\xfe\x40\xb1\x1f\x28\x86\xa0\xe8\x9d\xf7\x2f\xd1\x9a\x29\x8a\x61\x92\x47\xc2\xe6\x2d\x89\x73\x24\x47\x33\x38\x47\xa7\xd8\x7a\xbc\xa5\xfb\x2c\xfd\xdb\x9d\x92\xfc\x29\x0c\x1f\x74\x72\x7d\xbb\xee\x3d\x14\x98\x92\x51\xe2\xaa\x38\xfa\xf6\x5c\xb8\xb6\x51\xcd\xb1\x57\xb5\xd5\x3b\x36\x54\x7a\x4f\x23\x50\xb8\x07\x65\x6f\xba\x17\x62\x8c\x38\xfe\xb3\x31\x62\x9e\x2f\xbc\x7c\x82\x20\x17\xfd\x5c\xf9\xc6\x94\x1d\x50\xe5\xd8\x66\x7a\x6a\x7c\x95\xb0\x7a\x98\x98\x5f\x26\x8c\xb8\x0c\x34\x78\x34\x83\x3b\x0d\x4d\x24\x83\x21\x4e\xc3\x42\x46\xf2\xa0\xd3\xb0\x50\x91\xa8\xfb\x34\x2c\x74\x24\x1b\xb9\xcc\xb6\xdb\x8b\xd4\x3b\xd2\xd7\x84\x6f\x10\x3a\x6f\xfd\x23\x61\xf3\xe9\xd9\x16\x1b\xb2\xd2\x3d\x13\xdd\xfe\x20\xbd\xf4\x8e\xce\x57\x29\x70\xac\x85\xed\x40\x78\x56\x12\xba\x41\x63\x5a\x67\xe5\x58\xff\x8d\xe2\xcc\x07\x94\x96\x13\xbb\x6e\x33\x2d\x6c\x7f\xa0\xff\x1f\x75\xdd\xe7\x97\x9c\x3e\xa7\xeb\xc2\x93\xe8\xf6\x3b\x1b\x2a\xa9\xa8\x0b\x43\x09\x64\x39\xb1\xb2\xef\xe9\xc5\xaf\xaf\x9f\xdb\xbb\x39\xea\x3b\x67\x2e\x41\x1c\xa3\xb6\x60\xbe\xdf\x7e\x27\x3f\x56\x6d\xa7\x5b\xf3\xc7\xab\x2d\xc3\x7b\xc4\xec\xb3\xcf\xe3\x39\xb2\xb1\x66\x6f\x39\x3e\xd5\x43\x25\x6e\x55\x8a\x8d\xaa\xc8\xe4\x70\x28\x13\x11\x1e\x9d\x33\x4f\x45\x44\xec\x0f\xe1\xa4\x68\x26\x13\x0f\xb9\x8f\x27\x29\xb6\xca\xc4\x13\x19\x1b\x27\xf3\x43\x47\xc6\xd8\xa5\xb6\x62\x5f\x24\xc2\xca\xda\x8c\x76\x44\x8c\x95\xb8\x15\xf9\x02\x36\x1c\x5a\x2c\x97\x31\x55\x22\x71\x40\xb0\xb2\x8a\xa1\x38\x89\x01\x8c\xc1\x21\xc5\x30\x80\xc1\x18\x1a\xe5\x70\x4c\xa5\x38\x86\x26\xa1\xca\x92\xa4\xcc\xb2\x90\x41\x01\x0b\x00\x0b\x48\x4a\x96\x39\x4a\x22\xfc\xc5\xd1\xb3\x56\xad\x43\x35\x21\x62\x93\x0b\x27\x17\x54\x49\x9a\x4a\x29\xb7\xfa\x6f\xf7\x86\xa2\x9f\x44\x3f\xd0\xcf\x50\x27\x9e\x67\x66\x8d\xed\x57\xa6\xa5\x5b\xa8\xc9\x04\xd3\x1e\x3a\xd5\x87\x87\xf7\xa7\x47\x76\xf5\xa8\x8f\x0b\xa0\xb8\xa0\xea\x54\x83\xf7\x92\x50\x7e\x53\xe4\x29\x44\x72\xbc\xd0\xef\x91\xf7\xfb\xf1\xb1\x29\x34\xbc\x84\xb5\x88\x2d\x0a\x4a\xd5\xec\x2f\xb4\xc6\xb2\xe3\x94\x98\xc2\xa4\x56\x27\x9a\x90\x53\x1e\xdb\x6a\xa5\x76\x7d\xaf\x53\xf7\xcb\x41\xeb\x7a\xcc\x3b\x0c\x71\xbb\xfd\xec\xf0\x55\xb6\xf4\x3b\xf7\x63\xf6\x69\xf1\x04\xa5\xfa\xa2\x6a\xaf\x0a\xcd\xfe\x4b\xc9\x28\x9a\xbc\x59\x7f\x5e\x0e\x1d\x00\x1e\x9e\x47\xb7\x38\xf5\xfc\xac\xac\xab\x33\xbc\x3f\x36\x4c\xd8\x7e\x58\x58\xd6\x5a\x51\x2a\xed\xfe\x44\x58\x8c\x98\xca\xa8\x7b\xbf\x9e\x29\x4f\x2f\x7a\xeb\xb5\xa4\x1a\xa5\xf6\x1c\x6d\xf2\xa3\xdf\x57\xe1\xa2\x42\xb8\xdc\xba\xfb\x5a\x09\xc9\xba\x83\xef\x6c\xf5\x51\xf2\x7e\xaf\x76\x40\xd6\x6b\x93\xae\xc3\x16\xd0\x9e\xdf\x1a\x60\xd0\xe6\xe8\xc2\xbb\x6a\x73\x10\x95\x4d\xab\x39\x1e\xbe\x17\x9e\xee\x5f\xca\xe6\x03\xf3\xb2\x7c\xf1\x1a\x15\x1f\xf9\xe5\x73\x6b\xa7\xdf\x84\x8f\x90\xf4\xa2\x70\x61\xfa\xd1\xfe\x3d\x82\x7e\x63\xa7\x0f\xef\x53\x5c\x98\x84\xe9\x90\xd4\x6b\xb1\x2d\xbc\xcd\x3b\xb7\x84\x59\x6d\x5e\xbf\x63\x4c\x77\xad\xdb\xd8\x54\x6d\x94\x47\xb3\xce\x93\x66\x2d\x7a\xd7\x7d\x0f\xfe\x7e\x50\xbc\x6e\x90\xde\x57\x2d\x85\x66\x62\xcd\x44\xf8\x08\xfa\x87\xfa\x48\xaf\xd9\x94\x76\x30\xc7\xd2\x2f\x3f\x0e\xd0\xce\x9b\xf7\xb5\xfe\x44\x96\x51\x38\x69\xd1\xfc\x9a\x2b\xa2\x6d\xbb\x22\x68\x4b\x19\x63\x30\x6c\xc0\xb1\xa3\x67\x72\x56\x7f\x99\x71\x1d\x86\x7a\x29\x12\xcb\x50\x57\xec\x06\xd1\x2a\xaa\xbf\xdf\x3b\xdb\xf5\xd7\x1b\x3c\x06\xcf\xd3\x55\xa0\x08\x2d\x45\x1b\x1f\xda\x57\x2d\xf9\x34\xfa\xbe\x2e\xfe\x99\x1a\x6f\x80\x1a\x53\xf6\x82\x84\xef\xbc\x80\xb5\x3a\x2d\xf9\x41\x2b\x6a\x8b\x16\x07\xb1\xb9\xf9\xda\x7c\xbe\x95\x66\xad\x26\x51\x83\xd2\xb8\x39\x83\x13\x92\x7d\xa5\x17\xcb\x7b\x0c\x1d\x71\x2d\xa1\x47\x3d\xdb\xe3\x89\x60\x3c\x8c\x31\xd0\xab\xd1\x66\xf3\x5a\x6e\x5c\x1b\x1d\xb4\xa0\xfd\xfe\xed\x05\x8c\xde\x1f\x1b\x6c\x2a\xaa\xfe\xff\xae\xa3\xf3\x26\xf4\x6c\x5f\x1f\xde\xa6\xcb\x10\x92\xc4\x11\x38\xc7\x11\x9c\xaa\x48\x8c\x42\x92\x24\x0b\x19\x5c\x42\x31\x40\xa2\x34\x01\x09\x0a\x95\x50\x12\xd0\x32\xaa\xa2\x24\x41\x4a\x32\x49\x90\x18\x41\x92\xa8\xc2\x51\x92\x8c\xfa\x1e\x09\xbf\x90\x47\x22\xb3\x3d\x12\x4b\xa4\x79\x24\x96\xa0\xaf\x22\x31\xdd\xb9\x1e\xa9\x18\xe9\xde\x78\x8f\xe4\x59\xc9\x05\x3d\x52\xb9\xb6\x58\x77\x4c\x4a\xea\xd4\xfb\x82\xd9\xc6\x07\xd5\xa6\x75\x5b\x59\x3f\x97\x1a\x55\xf3\xb5\xce\xbd\x11\xe3\xa5\xad\xae\x6e\x9b\xef\xb4\x4c\xcf\x47\x8e\xf1\xa4\x4a\xb7\xfd\xf5\x64\xf5\xd2\x97\x1d\xc9\x81\xb7\x42\x19\x7d\x7f\x9f\xc1\x65\x5f\xef\xbf\x13\xc5\x56\x85\x58\xde\x6b\x4f\x2b\xf3\xbf\xe8\x91\x0a\xf1\x23\xe9\xd3\x3c\x52\xf1\x74\xfa\x97\xf6\x48\x09\x1e\xf2\xd3\x3c\x52\xac\xbd\x7f\xb4\x47\x5a\x7b\x5f\x3f\xc7\x23\xfd\x4b\x1e\x81\xff\x80\xbe\x3a\x86\x7e\xe0\x91\x06\x3a\x73\x5f\x7c\x9e\x3a\xbc\xd3\xe8\x69\xb7\xe3\x8e\x8c\x2f\x59\xe9\xa1\xd1\x58\x41\xdd\x5c\x12\x55\x65\x76\xfd\x76\x5b\x62\x89\xf6\xfc\xfd\x75\xaa\xe3\xca\x98\x5b\x72\xed\x87\x6a\xb1\xdb\x5c\x63\x0b\x8c\x61\x3b\xc3\x7e\xbb\x35\xa6\xb9\xd6\x7d\xbb\x2d\xd7\x48\x09\xb2\xb3\x82\x54\xbc\xb8\x47\x52\x24\x82\x63\xa1\x44\x02\xc8\x72\x0c\x45\x13\x38\x45\x93\x84\x0c\x14\x1c\x93\x39\x12\x62\x84\xa4\xca\x28\x43\x4a\x04\x4e\x40\xc8\x12\x10\x23\x31\x49\x65\x50\x0c\x50\x0a\x87\x92\x2a\x26\xf9\x4b\x9b\xd8\x39\x55\x15\xaf\x79\xba\x23\x22\x09\x14\x23\x93\x97\xdf\x09\x14\xa3\xae\xf6\x73\x79\xdf\x16\x2b\x75\xb6\xda\x59\x76\x5e\xa4\x07\xbc\xca\x13\x4f\x8f\xcf\x5d\xeb\x61\xf6\x3c\x44\x51\xb5\xc2\xda\xf5\x1a\x33\x43\x85\xee\xea\xfe\xe9\x96\x1f\x12\xfc\xd6\x0f\x79\x9f\x94\xcc\xc8\xff\x38\x92\x36\xec\xd2\x02\x63\x96\xea\x68\xbd\x73\xbd\x1a\xf5\x8a\xdc\xfb\x70\x39\x7c\xec\x13\x6f\x7a\x5b\x1f\x2d\x7a\x12\x56\x5a\xce\x3a\x75\xc8\xf2\xc1\x3c\x18\x5e\xf2\x2b\x3c\x2e\x57\x65\x6e\xe5\x99\xea\xe8\xb9\x23\xb7\xfb\x78\x85\x9a\xbc\x1a\x85\x99\x56\xa9\x40\x8d\xbb\x67\xa7\xa4\x8c\x09\xc6\x60\xfa\xf6\x32\x15\xa6\x55\xce\x7e\x1d\x5b\x28\xc7\x60\x65\xba\x55\x7f\x52\xe1\xed\x8c\x7c\x99\x97\x9d\xda\xb5\x5d\x43\x75\xec\xb5\xae\x3b\x14\x8f\xde\xaf\x9f\x0c\x69\x32\xaa\x3f\x51\x66\x29\x87\xef\xd9\x33\xda\x7d\xdf\x13\x92\x79\x37\xf7\x86\xe6\xaa\x82\x7e\x5b\x40\xeb\xe8\x7d\x65\xed\x4c\x56\x4d\x6c\x3a\x42\xc1\x7a\x6e\x62\x5c\xb3\xfa\xb6\xac\x17\xd7\x2d\xca\x29\x08\x72\xd1\x97\x91\xd0\x1c\xab\x65\x8c\x6e\x59\x72\xd7\x3e\x21\x3b\x4a\x1f\xcf\x67\xd0\x2f\xf7\x9f\x0a\xf6\x19\xf4\xf9\x08\xfd\x23\x62\x0f\x4f\x7f\xe7\x44\xd8\xb1\x73\x6b\xe1\x74\x5d\xb4\x8c\x71\xaa\x98\x59\xba\x38\xb7\x2f\x5c\x5b\xb8\x96\x23\xf8\x8e\xd2\xc5\x3f\x95\x1a\x5a\x2d\xa1\xdc\x64\x31\x02\xf3\xd5\xd8\x2c\x4c\x0c\xb3\xdd\x53\xef\x61\xb5\xd9\xbd\xc7\xee\xe5\xf1\x7d\xf7\xbe\x7b\x2b\x3d\xcc\x00\xd7\x86\x5c\x17\x3e\xeb\x98\x41\x2c\xa9\xc5\xfd\x43\x57\xea\xb5\xad\x62\xb3\xe6\x00\x9d\xb4\x60\xa7\x59\x94\xa7\x73\x9c\x7c\x2a\x62\x0b\xc0\xaf\x2e\x3d\xb7\xaa\x1c\x23\x03\x55\x05\x12\x2b\x63\x34\x8a\x13\x80\x60\x58\x96\xc4\x68\x4a\x96\x50\x89\x50\x55\x0c\x00\x5c\x01\x2a\x89\xa2\xa8\x0a\x55\x92\x53\x70\x0c\xaa\x32\x4b\x32\x8a\x22\xa9\x12\x04\xbb\xad\x4a\x67\xcc\xad\x78\xf6\xdc\x4a\xd0\x29\x1b\x9f\x08\x82\x66\xae\xf6\xeb\x92\xe7\xce\xad\x29\x31\xbe\xff\x39\x21\xc6\x4c\x98\x5b\x0b\xb3\x87\x79\x4f\x5b\x5a\xab\x87\x16\x8e\x0e\x8b\x2d\x75\xa4\x0e\xed\x8a\x20\x0c\x9c\xd5\x08\x00\x41\x7d\xed\x2d\xe8\xf5\xec\x7e\x36\x2d\xcd\xc0\x75\x6d\x48\xd7\x98\x9a\xa6\x49\x83\x71\xc3\x94\x3b\xca\x98\x23\x6b\x0d\x5e\x7d\x50\x3a\x7c\xf3\x75\x28\xd5\x5a\xcc\xda\x5e\x41\xd8\x28\xfe\xb7\xe6\xd6\x73\xe7\xb6\x33\xc7\xf3\x2b\x73\xdb\x2f\xc9\x97\x9c\x5b\x3f\xb1\x7a\x91\x55\x49\xf9\xcc\xb9\x8d\xbf\xd0\xdc\x7a\xaa\x9f\x0d\xe6\xd6\xb1\xfe\x3a\x30\xeb\x34\x5b\x7c\x76\x9c\xf2\xea\xd9\xc0\xab\x18\x53\x98\x14\xca\x75\xb9\x52\x99\x4d\xaa\xf4\x8b\xb5\xb0\xe7\xfa\x78\xde\xa1\x66\x4b\xbd\x7c\xad\xb7\xd6\xb5\x5a\x05\xab\xf4\x1f\xaa\x42\xf5\x49\x85\xc5\x12\x5f\x5d\x1b\x03\xbe\x04\xa6\xf8\xba\xb4\x60\xad\x46\xd5\x78\xe6\x73\xc6\xad\x89\x07\x1d\x1f\xde\x03\xb4\xbd\x73\x60\x73\xe4\xcf\xb1\x7f\xaa\x1f\xc2\xe8\x9f\x49\x5e\x2a\x85\x0f\x10\x8a\x12\x44\xda\xdd\x5a\x83\xef\x8e\x90\x07\x61\x84\x7c\xd3\x95\xac\xb3\x88\xe3\xef\x45\x3a\x9b\xeb\x08\xd6\x38\xce\xe3\x08\x67\x72\x1f\xf9\xd3\xa8\xd3\xee\x95\x3a\x5b\xba\x7d\xb2\x71\xc2\x9d\xc4\x18\x32\x68\xd6\x3a\x03\x01\xf9\xb6\x03\xbf\x09\x1d\xba\x7b\xb3\x77\x44\xee\x91\xaa\xb9\x4c\xb7\x1e\x2d\xf8\x51\x9d\x9a\xb0\xad\x2b\x63\xef\xd4\x65\x25\x8b\x27\x92\x26\x69\x0a\x5b\xb9\x25\x4f\x5c\x72\xcd\x5c\xd5\xbc\xac\xf4\x49\x64\xd2\xe4\x4f\x65\x2d\x53\x03\xfb\xf7\xfa\x05\x82\x78\x77\x00\xe6\x3b\xef\xc9\xbf\x2e\x70\x0f\x0b\xd2\x6a\x46\x07\xc3\xa0\x57\x6b\x56\x10\xc9\xb1\x20\x0c\x8f\xae\x64\x6e\x82\x2b\x09\xcf\xe6\x27\x38\xce\x3a\x17\x47\x09\xe3\x3a\x74\x9d\xe2\xa9\xec\xec\x50\x84\x39\xd9\xcb\x06\xf6\xf9\xf1\x81\x6f\x0e\x4e\x9f\x8a\x63\xce\xbb\x10\xf2\x0c\xce\xbc\x43\xb8\x72\xb1\x15\x3d\xba\x2b\x8e\x9b\xe0\x16\xcb\x33\xf8\xf1\x31\xe4\xe3\x28\x72\x2e\xd8\xcd\xe1\x11\x60\xb1\x43\x3e\x7c\x2d\xe7\xf1\x9c\x06\x5e\xc2\x67\x38\x82\x2e\xcc\xf6\xe6\x4f\xda\xf6\x38\x8e\x3b\x0d\xf3\x66\x73\xf2\x65\x12\xb3\xbb\xf3\x86\xce\x64\x53\x57\x72\x33\xb8\x3b\xfa\xef\x26\xf6\x08\xcf\x0c\xa6\x37\x37\xa9\x5e\x82\xef\x00\x57\x98\xf5\x04\x57\x75\x92\x24\xf1\x02\x6c\x2e\x8d\xbd\x84\x00\x01\xae\x04\x9b\x3e\x51\x84\xfd\x73\x1c\x0f\x85\x08\x5d\x91\x7b\xea\x68\x0c\xe1\x38\x55\xf9\xe9\x8a\x8e\xdc\xf9\x7b\xae\xae\xf7\xd1\x85\x59\xde\xfc\xf1\xcc\x1e\x8f\xf1\x1c\x1d\xde\x5b\x7c\x3e\x5b\x07\x38\xf3\x4d\x6f\x71\x0c\x86\x6e\x60\x3e\xb9\x5b\x77\x38\x4e\x37\xc9\x2c\xf3\x8b\xbb\x5b\xfa\x74\x86\x0f\x91\x45\x38\x57\x60\x84\xcf\xc8\xa9\xbe\xe9\x0c\xfa\x97\x65\x5f\x84\x3d\x0f\x55\x2e\xe6\x36\xa7\xe5\x24\xb2\x16\xbd\xfc\xfb\x5c\xfe\x22\xf8\xb2\x98\x3c\x3c\xae\x38\x93\xd3\xcb\xe8\x71\x0f\x5b\x5e\x2e\x33\xb5\x79\x19\xde\x72\xf1\x94\xce\x4b\xe4\x96\xf9\xb3\x38\xda\xc7\x95\xbb\x47\x37\x07\x22\xc7\xf2\x77\x70\x71\xfe\x59\x1c\x46\xb1\xe5\x1b\xb7\x01\x83\x37\x07\x67\x38\xdf\x1c\x9c\x03\x9e\x20\xc4\x05\xe6\xed\x00\x4f\x16\xc7\x47\x46\x47\x2e\xd6\x8b\x69\xf7\x08\xc5\x66\xea\xcd\x3f\x84\xf0\xe0\x04\x20\xd3\x10\x83\xcb\x91\xce\x55\x68\x26\x81\xbd\x3c\x6d\x73\x98\xd2\x7e\x66\xe4\x03\x1e\xc1\xfb\xf9\x76\x90\x86\x3b\x9b\xe3\x98\x51\xb6\x8f\x30\x88\xc2\x5d\x7c\xce\x7a\x7e\x7a\x0e\x9e\x8a\x35\x33\xec\x77\x81\x32\x18\x0d\x62\x28\x17\xe5\xd6\x88\x2e\xc4\x6d\x1c\xea\xcc\xf0\x2d\xaf\x25\x87\x90\x5f\xda\x18\xf6\x50\x9f\x12\x6f\x26\xa3\x8b\xdc\x84\x73\x79\x45\x1f\xdc\xb5\x93\xc9\x7e\xa4\x41\x7e\x61\x42\x57\x1f\x7d\x98\xfe\xc3\xd7\x2b\x65\x49\x12\x82\xcd\x2f\x44\xdc\x45\x4e\x1f\x26\x4d\xec\xad\x51\x59\x62\xc5\x35\xca\x2f\xdf\xa6\x88\xf2\x61\x32\x6d\x8f\x50\xcf\x92\x23\xb1\xda\xb5\x8f\x7a\xf7\x67\x68\x1f\x31\xb4\xa3\xd8\x63\x13\xe0\x63\x07\xf8\x3e\xd2\xfd\x14\xea\x42\x23\x3c\x8d\x44\x1e\x19\x32\xf2\xba\x54\x62\x97\x73\x5f\x87\x88\x73\xf1\x9e\xed\xc4\xc2\xc9\xf6\x47\x98\xcd\x21\xfe\x93\x53\x7d\xff\x4c\xd5\x8d\x23\xdf\x54\x18\x45\xc9\x34\x5f\x4e\xd6\x72\x0a\xce\xcc\x10\xe1\xdb\xb7\xcd\xb5\x44\x3f\xfe\xfc\x13\xb9\xb2\xcd\xa9\x12\x5a\x4d\xbb\xba\xbb\x73\xe0\x9b\xf3\xfd\xfb\x0d\x92\x0c\x28\x9b\x4a\x3e\x40\xbf\x16\x9f\x0c\x2a\x99\x0b\x6d\xe2\xe4\x22\xbf\x07\x9a\xce\xc0\x1e\x68\x84\x85\xef\xc8\x53\x55\xe8\x0a\xbe\x91\x21\xbf\x11\x82\xc8\xbd\x10\xad\x2b\xa2\x1a\x5a\x26\x2a\x3f\x7c\xce\x72\x74\x40\x16\x29\xb7\xba\x42\xad\xd2\xdc\x2e\x01\x21\x5d\xa1\x2c\x74\x85\x66\x51\xe8\x45\x56\x45\xbc\xb7\xad\x26\x32\x68\x97\x5c\x93\xe9\x0a\xfe\x5d\xdc\xee\xa3\x92\x50\x17\xfa\x02\x52\xe4\x7b\x45\xbe\x24\xa4\xdf\x1f\x15\xf9\x29\x46\x4a\x31\x97\x53\xc6\x3e\x9d\x8c\x45\xb2\x24\x4e\xf6\xf5\x13\x2d\x1b\xc5\x2a\x2b\x08\xf4\x33\x56\x14\x13\x35\x11\xa4\xb2\xff\xba\x1e\xc2\x7c\xc4\x69\x61\x53\x25\x48\x37\x98\xe3\x34\x70\x58\x54\xfa\x17\xd5\x90\xc0\xcc\xbe\x2e\x62\xca\x60\x97\x35\x8a\x68\x89\xe3\xbf\xa0\x90\x64\xd3\x38\xa8\x21\xe5\xb5\x8e\xb6\x69\x3b\x9a\x05\x7b\x9d\x3a\xa2\x00\x07\xb8\x26\x86\x28\x8b\xd9\x1c\x91\xcd\xd9\x7c\x0a\x1d\xe8\xc9\xf0\xff\x02\x00\x00\xff\xff\x0d\x61\x70\x13\x13\x99\x00\x00") - -func asset_stat_trustlines_3HorizonSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_trustlines_3HorizonSql, - "asset_stat_trustlines_3-horizon.sql", - ) -} - -func asset_stat_trustlines_3HorizonSql() (*asset, error) { - bytes, err := asset_stat_trustlines_3HorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_trustlines_3-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7f, 0x9f, 0x5f, 0x49, 0x4a, 0xc2, 0xe1, 0xa9, 0xdf, 0x24, 0x4f, 0xc, 0xf6, 0xc, 0x3, 0xe5, 0x1e, 0x90, 0xfd, 0xdf, 0x37, 0x98, 0xd5, 0x75, 0x56, 0x63, 0x47, 0x24, 0x3, 0xc5, 0x99, 0x42}} - return a, nil -} - -var _asset_stat_trustlines_4CoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x69\x93\xa2\xcc\xf2\xef\xfb\xf9\x14\xc4\xbc\xe9\x99\xb0\xe7\x91\x7d\x99\xb9\x73\x22\x40\x71\x45\x71\xdf\x6e\xdc\xe8\x28\xa0\x40\x14\x01\x59\xdc\x6e\x9c\xef\xfe\x0f\xc1\x05\x15\x6d\x5b\xfb\x39\xcf\xf9\x47\x0c\x2f\x66\xba\x25\xfd\xe5\xaf\xb2\x32\xb3\xaa\x92\xea\xe2\xc7\x8f\x2f\x3f\x7e\x20\x0d\xc7\x0f\x0c\x0f\xb6\x9b\x12\xa2\x81\x00\x28\xc0\x87\x88\x16\xce\xdc\x2f\x3f\x7e\x7c\xd9\xde\xcf\x87\x33\x17\x6a\x88\xee\x39\xb3\xa3\xc0\x02\x7a\xbe\xe9\xd8\x08\xf7\x17\xfd\x17\x96\x90\x52\xd6\x88\x6b\xbc\x6d\xbf\x7e\x26\xf2\xa5\x2d\x76\x10\x3f\x00\x01\x9c\x41\x3b\x78\x0b\xcc\x19\x74\xc2\x00\xf9\x8d\xa0\xbf\xa2\x5b\x96\xa3\x4e\x2f\x3f\x35\x35\x0b\xbe\x99\xf6\x5b\xe0\x01\xdb\x07\x6a\x60\x3a\xf6\x9b\x0f\xfd\x2d\xee\xa5\xb0\x6a\x99\x5b\x68\x68\xab\x8e\x66\xda\x06\xf2\x1b\x79\xe9\x76\x0a\xec\xcb\xaf\xbd\x6e\x5b\x03\x9e\xf6\xa6\x3a\xb6\xee\x78\x33\xd3\x36\xde\xfc\xc0\x33\x6d\xc3\x47\x7e\x23\x8e\xbd\xc3\x18\x43\x75\xfa\xa6\x87\x76\xac\x4b\x71\x34\x13\x6e\xef\xeb\xc0\xf2\xe1\x89\x9a\x99\x69\xbf\xcd\xa0\xef\x03\x23\x12\x58\x02\xcf\x36\x6d\x23\x16\xf1\x9c\xe5\x9b\x0f\xd5\xd0\x33\x83\xf5\x16\x5c\xd7\x7f\xed\x0c\x00\x81\xa7\x8e\xdf\x5c\x10\x8c\x91\xdf\x88\x1b\x2a\x96\xa9\xbe\x6e\x2d\xa6\x82\x00\x58\x8e\xf1\xeb\xcb\x97\x7c\x4b\x6e\x20\xe5\x7a\x5e\x1c\x20\xe5\x02\x22\x0e\xca\xed\x4e\x7b\x27\xf9\x57\xe8\x1a\x1e\xd0\xe0\xd8\xf4\x03\x65\xed\xc3\xf9\xaf\x9b\xd2\xbe\xea\xce\x43\xc7\x0b\x67\xfe\x7d\xc2\xd0\x5e\xdc\x23\x69\x41\xcd\x80\xde\x3d\x92\x5b\x9e\x3a\x84\x77\x4a\xde\x21\xa6\x40\x3f\x70\x74\x1d\x7a\xa6\xad\xc1\xd5\x6d\x59\xa0\xaa\x4e\x68\x07\x0a\xb0\x80\xad\x42\xff\xd7\x17\x5e\xea\x88\x2d\xa4\xc3\x0b\x92\x98\x90\x96\xeb\xd2\x30\xc5\xbc\x8e\xb7\x46\x22\xf4\x9c\x5c\x6f\x77\x5a\x7c\xb9\xde\x49\x7c\xe9\x54\xf0\xcd\x9d\xc2\xf5\x3d\xf8\xc1\xea\x7d\xe8\x83\xcc\x07\x50\x75\x78\x07\xe7\xa4\xd8\xfd\xd8\x5e\xe8\x07\x96\x69\x43\xff\x16\xf2\x41\xe8\x6e\xdc\x2d\x0b\x18\x65\x83\x1b\xb8\x47\xa1\xfb\x71\x0f\x2e\x7f\x0b\xf7\x20\x74\x37\x6e\x2c\x6f\xda\xba\x73\x03\xf7\x28\x74\x37\xae\x1b\x2a\x7e\xa8\xdc\xc0\x8c\x05\x3e\x82\x67\x99\xfe\x78\x1e\xc2\xf0\x96\x65\x93\x62\xf7\x63\x43\xe8\xdd\x32\x6b\x74\xff\x6e\xb4\x28\x8c\x6f\xc1\xc5\x02\x77\xe3\xc5\x59\x69\x0c\x81\x76\x1b\xf6\x44\xee\x6f\x46\xdf\x65\x4a\x38\x7f\xbb\x53\x8d\x02\xec\x1b\xe0\x0a\xb0\xef\x26\xbc\xcb\x7e\xb7\xb8\xee\x45\x3e\x8a\xb9\x9d\x03\xbc\x0f\xbb\x95\xda\x21\x47\xb2\xe7\xc0\xa9\x29\xf7\xb6\xec\x21\x35\xbe\x27\x76\x4c\x74\xef\x48\x1e\x12\xd7\x6d\xb9\x63\x22\x7a\x47\xee\x90\x58\xde\x95\xbb\x8b\xdf\x31\xa1\xdc\x96\x8b\x93\xc4\xbb\x32\x87\x90\x7f\x47\x72\x1b\xc7\xb7\x45\xe2\xd8\xbc\x2d\x73\x12\x0a\xb7\x45\x15\x60\xdf\x16\xd8\xbb\xea\x5d\x52\x5b\xcf\xdb\x09\x8a\x83\x8e\x58\x6f\x97\xe5\x7a\x52\xd8\x72\x0d\x7f\x6e\xed\x24\xda\xb9\x92\x58\xe3\x2f\xb0\x7e\x7d\x89\xe7\xc6\x75\x30\x83\x3f\xf7\x9f\x21\x9d\xb5\x0b\x7f\xee\xbe\xf2\x0b\x69\xab\x63\x38\x03\x3f\x91\x1f\xbf\x10\x79\x69\x43\xef\x27\xf2\x23\x9a\x32\xe7\x5a\x22\xdf\x11\xf7\xc8\x7b\xbc\x2f\x27\x88\xa7\x37\x77\xc0\x39\xb9\x56\x13\xeb\x9d\x1b\xc8\xb1\x00\x22\xd7\x4f\x01\x90\x72\x1b\x79\xd9\xcf\x6f\xf7\x9f\xf9\x11\xc8\xcb\xb9\xe6\x7d\xf3\x77\x3a\x0f\x16\x7a\xb7\x3d\x27\xb6\xac\xcb\x9d\x33\x7b\x22\xfd\x72\xa7\x74\xa0\x95\x9c\xd0\x9e\xa8\x3f\xa2\x9c\x11\xf9\x48\xe3\x2f\x40\x22\x03\x34\xa4\xac\x6b\x6c\x57\x31\xae\xe7\xa8\x50\x0b\x3d\x60\x21\x16\xb0\x8d\x10\x18\x30\x32\xc3\x9d\x13\xf0\xad\x98\x06\x75\x10\x5a\xc1\x5b\x00\x14\x0b\xfa\x2e\x50\xe1\x76\x35\xf1\x72\x76\x77\x69\x06\xe3\x37\xc7\xd4\x12\x0b\x84\x93\xc6\x26\x1d\x72\xd7\xcc\xc8\x75\x8f\x8d\xdc\x3b\x40\x9a\xc1\x63\x2f\x4f\x26\xdd\x6f\x5f\x10\x04\xd9\x7f\x62\x6a\x88\x3a\x06\x1e\x50\x03\xe8\x21\x0b\xe0\xad\x4d\xdb\xf8\x46\xd1\xdf\xa3\xbe\xa9\x77\x25\xe9\x35\x92\xde\x7e\xd1\x06\x33\x98\x22\xcc\xb2\x69\xc2\x0b\x60\x85\x69\xd2\x18\x86\x9f\x8b\x5b\xc0\x0f\x66\x8e\x66\xea\x26\xd4\x10\xd3\x0e\xa0\x01\xbd\x83\xc8\x97\xef\xe7\x7d\x7f\x88\xe2\x27\x6d\xe1\x3f\x64\x88\xdd\x42\x00\x51\x4c\xc3\xb4\x83\xb3\x9b\x3e\x9c\xdb\xe1\x2c\xfd\x9e\x1d\xce\xfc\x50\x81\x76\xe0\x6d\x97\x82\xe7\xcd\x8c\x65\x4c\x5b\xb7\xc0\x76\xc5\xa8\x41\x3f\x48\xa7\x13\x0b\x8e\x9d\x19\xd4\x9c\x19\x30\xed\x14\x29\x92\x3c\x27\x1d\x8c\x3d\xe8\x8f\x1d\x4b\xf3\x91\x00\xae\xce\x99\xe9\x16\x30\xae\x31\xba\xd9\x37\x3b\x8b\x84\x5b\xad\x96\x09\x14\xd3\x32\x83\x6d\xe3\xe2\xf6\xef\x4d\x62\x59\xb7\x6e\x9b\x86\xbd\x9d\x0b\x6d\x69\xc5\x9f\x24\x66\x03\x87\xa9\xc5\xce\xe8\x6f\xd1\xb2\x1a\xc9\x95\xc4\x5c\x15\xf9\xf6\x6d\xdf\x15\xff\xfa\x8d\xa0\xdf\xbf\xdf\xf8\xf6\x39\xc1\x73\x9c\x8b\x06\xbc\x87\x78\xd2\x97\x67\x68\xa7\xfd\xfc\x1e\xd2\xa5\x79\xce\xe0\x52\xec\x17\x63\x5e\x06\xc6\x76\xfc\x7b\x34\x26\xb6\x53\xc6\x38\x1c\x6c\x47\x83\xc9\x58\x38\x89\x81\x4b\xa5\xa7\xe3\xf3\xa3\xea\x4f\x27\xc6\x31\x91\xdd\x67\xc0\x1f\x27\xc8\xd0\x17\xbe\xed\x7a\x70\xf1\xae\x90\x12\xaa\x53\x18\x58\xa6\x1f\xbc\x2b\x7a\x98\x6d\xef\xdd\x3d\xfe\x58\xb5\x1c\x1f\x06\xe6\xec\x4a\xe4\x47\x89\x35\x25\xb6\x12\x7d\x7e\x3a\xa9\x3f\xe0\x9d\xf5\xf7\x51\xcf\x15\xd7\xb9\xb6\x36\x38\x85\x39\xb6\xe2\x9a\xb7\xec\x26\x5f\x8f\xf6\xd8\x6e\xe1\xf5\xed\x10\xe4\xd0\xbb\x33\x83\xc6\x95\x17\xed\x5a\x06\x8d\xdc\x1d\xf8\x3e\x0c\xd2\xec\x19\xc7\xea\xd5\xdb\x60\xb6\x0d\xab\x74\x68\xd7\x33\x55\x68\x5f\x49\x62\xd1\xcd\x6b\x19\x2e\xba\x89\x68\x4e\xa8\x58\x70\xeb\x6f\xaa\x19\x55\x24\x3f\x35\x8b\x26\x7a\x78\xb7\x64\x8d\xdb\x72\xd6\xaf\xbb\x06\x5e\xf1\x8d\xdd\x37\x77\x16\x3e\xfb\xea\xde\xee\xd7\x1c\x22\x9e\xb0\x3f\xea\x0f\xf1\xb2\x3e\x76\x07\xd3\x4d\x1b\xf8\xa9\x8b\xc8\x75\xbc\xe0\x60\x8d\xbc\x58\xe0\xbb\x52\x07\x41\xcf\x87\x4d\xb8\x0a\x40\x10\xc0\x99\x1b\x20\xdb\xb0\xf0\x03\x30\x73\x91\xed\x94\xc9\x09\xe3\x4f\x90\x8d\x63\xc3\xcb\xc1\x56\x07\xa6\x15\x7a\x89\xa1\xf6\x9a\x86\x60\xed\xc2\xf7\x3b\x25\x2e\x4b\x24\x70\x2f\xd3\xfe\x41\xe3\x95\xde\xd9\x55\x36\x1c\xef\xbc\x53\xbf\x45\x96\xf8\x17\x82\x7e\x47\xf8\x7a\x1e\x89\x7f\xfd\x3f\xbf\x11\x9a\xa2\x08\xea\x7b\x6a\x5f\x25\x97\x61\x0f\x77\x59\xb2\xca\x93\xcc\xb9\x57\xac\x11\x17\xda\xb6\x51\x97\x4a\x68\xbb\x76\x7c\x82\x8a\x1f\x2a\x3b\x12\x1e\xf4\x4f\x06\x20\x22\x75\xc6\xe8\x41\x70\x88\xa5\x4b\x3e\x89\x35\xef\xa3\x9c\x12\xc5\xba\x3b\x46\xc6\x98\xd8\xdc\x87\xb7\x46\x98\x4b\x9e\x89\x35\xfc\xa3\x3c\x8f\x10\xf7\xf3\xbc\x18\xe4\xce\xee\x43\x7b\x01\x2d\xc7\x85\xef\x0c\x69\x47\xd5\x4f\x0c\x44\x89\x72\xc7\x13\x26\xd8\xd7\x6b\xbf\xdd\xd3\x0f\x47\x2f\x7a\xcf\x10\xf3\x2b\x03\xcd\xa9\x11\xf6\x75\xe0\x13\xc4\x73\x43\x9c\x68\xbb\x6a\x8c\x63\x8d\xe8\x61\x63\x1c\x8b\xe2\xdf\x8e\x71\x7b\xba\x78\x4b\x89\xa9\x5b\xd1\x9d\xa8\x70\x3d\xca\x2a\xf1\x08\xe0\x91\x65\x57\x34\xe2\xdf\xc8\xd4\xa6\xef\x87\xd0\xbb\x1f\x4a\x75\xb4\xd4\xd5\xe9\x85\x59\x02\xcb\x9c\x99\x57\x66\x14\x37\xd7\x82\xff\xe4\xaa\x2a\xe1\x9d\x89\xa7\x2a\x0f\xad\xa2\x92\xdf\xff\xac\x75\x54\x02\xf3\xf1\xf5\xcf\x2d\xd4\xb8\xd3\xce\x90\x76\x3d\xf9\xaf\xf4\xc0\x3b\x29\xf7\x3e\xec\xe4\xc9\x67\x68\xb1\x9b\x07\xab\x93\x54\x7c\xc7\x7a\xe3\xdc\x01\x57\xd1\x53\xca\xab\x77\xd5\x31\xb0\x0d\x98\xba\xb0\x4f\x1a\x27\xf9\xd8\xee\xf1\x5c\x7d\xac\x9d\x3f\x6e\xa2\xff\xb0\x7d\x14\x47\x5b\xa7\x19\x27\x58\x79\xd0\x0f\xad\xd4\xec\x1e\xac\x66\xf0\xdd\xf5\xdc\xf1\x11\xeb\xe3\xf6\x3c\x7b\x6e\xf1\xa8\x51\xcf\x9e\x38\x7f\xbb\xcb\x70\xbb\x2f\xdd\xb2\xde\x4e\x24\xcd\x10\xf7\xb9\xdd\xd9\x13\xee\x47\x0c\x95\xdf\xae\xac\x75\xc7\x7b\xa7\x18\x8a\xe4\xf9\x0e\xff\x8e\xcd\x6e\x43\xfa\x1f\xc6\x2b\xd7\xdb\x62\xab\x83\x94\xeb\x1d\xf9\x58\x54\xec\xf1\x52\x57\x6c\x23\xdf\x5e\x8a\x42\xab\x31\x2c\x95\x25\x3c\x57\x26\x0a\xf5\x26\x29\x0c\xa4\x42\xad\x9e\x97\x0a\x95\x6e\xbd\xd1\xc5\x4b\x43\x62\x54\x2b\xb4\x4b\x72\xbd\x9b\x13\x65\xbe\xdd\x67\x9a\x39\x46\x1e\xe0\xa5\x97\x57\x84\x8b\x2f\x66\xf7\x3f\x8b\xa2\xaf\x08\xfe\x8a\xa0\xaf\xb1\x95\x91\x97\x97\x57\xe4\x85\x6f\xf2\x3c\xcf\xff\xfe\xfd\x12\xdd\xc0\xf7\xf7\x8e\xff\x7e\xff\xf5\x1e\xc3\x1c\x4e\x34\x0b\x78\xa9\x2b\x52\x38\x5f\x1b\x74\x0b\xdd\x12\xc1\x0f\x2b\xfc\x60\x50\x1c\x0c\x7a\x78\xaf\x34\x18\x0e\x5b\xb4\x38\x1c\x88\x9d\x46\x35\x3f\x18\xb5\xf9\x3e\xcd\x0c\x64\xf2\xc8\x90\xdb\x32\x63\x29\x96\xe3\x08\x92\xe2\x88\x57\x04\xbb\x41\x91\x78\x88\xe2\xa0\x5a\xa4\x5b\x75\x52\xae\x97\xc5\x46\xae\x56\x2f\x08\x0c\x81\xf3\x24\x41\x8f\xa8\x46\x3d\xdf\x6e\x49\xc5\x7e\x95\x29\x0a\x52\xae\xd6\x94\xca\x05\x99\x6c\x33\xe2\xb0\xdf\xeb\x7e\x2a\xc5\x2b\x7e\x73\x5e\x6f\x7b\xc2\x05\xaf\x57\xd1\x3e\xea\x87\xa7\x95\xb4\x83\x1d\x69\x42\xe3\x58\x9d\x22\x68\x08\x69\x56\xc3\x14\x9c\x51\x28\x85\xe5\x74\x9c\x00\x3a\x45\x60\x98\xc2\x50\x34\x07\x70\x52\x07\x3a\x46\xa2\x04\xd0\x50\x85\xc2\x15\x9a\x20\x14\x94\x51\x20\xc7\x6d\x4d\x85\x3e\x79\x6d\x31\x28\x06\x07\x38\x24\x70\x5d\xc7\x49\x16\xa0\x8c\x82\x42\x06\xd5\x35\x4c\xa7\x35\x02\x63\x55\x4c\x07\xaa\x86\xa3\x0a\xad\xaa\x28\xab\x12\x84\x46\x31\x0c\x85\x53\x1c\x4b\xb3\x18\x4e\x01\x8c\x7e\x89\xfa\x0f\xdd\x76\xdc\x7f\xed\x25\x0c\xaa\x26\xb9\xce\xae\xdb\x55\x81\xc9\xdb\x79\xae\x84\xa3\xab\x89\x90\xf1\x51\x23\xf0\x97\xe5\xe5\x06\x1b\x68\xed\xfe\x10\x08\x15\x50\x30\xb6\xf2\x62\x9d\x94\xc0\xc6\xc5\x9b\xef\x22\x8f\xf8\x01\x46\x46\x62\xc2\xf4\x3f\xd0\x90\x4f\xbd\x5e\xce\x62\xfd\x8a\xa3\xb2\x3a\x86\x93\x04\xa5\x68\x18\xc0\x09\x9c\xa1\x71\x1c\xa7\x39\x0a\x52\x0a\x4d\xa1\x18\x07\x74\x12\x83\xa8\x42\x62\x28\xc1\x51\x34\x49\x02\x95\xa0\x51\xa0\x10\xa4\xae\x53\x1a\x83\x03\x4d\xdb\x3a\xd9\x67\x38\x3b\xcd\x29\x5b\xd5\x10\xe2\x24\x41\x32\x24\xc3\x02\x8c\xc1\x54\x92\x54\x59\x86\x61\x35\x52\x27\x48\x8e\xd2\x15\x40\x72\x00\xb0\x1a\x41\xa3\x04\x0b\x08\x08\x69\x86\xa4\x14\x4d\x27\x14\xe5\x25\x4a\xc9\x18\x45\x71\x14\xc3\x31\x1c\xbe\xf3\xd8\x1c\xde\x18\x4d\xb0\x7a\x48\x39\xa8\x52\x61\xfa\xa4\xbd\x96\x17\xdd\x55\x91\xe8\xb9\xce\x34\xb3\x28\xf0\x72\x90\xc3\xaa\x78\x8d\x11\x18\x7a\x14\x52\x25\x4e\x2d\x69\xe8\x9c\xf7\x47\x13\xae\x49\x0f\xd9\x75\xb9\xac\xd2\x61\x30\xd5\xb3\x39\x39\x23\xcd\xb2\x68\x55\xf1\x75\x6f\xd3\xe8\x46\x16\x1e\x34\x7a\xb5\xd8\x2d\xca\x87\x7f\xe2\xf4\xe6\x1f\x7f\x5f\xf2\x8d\xe6\xce\x77\x1a\x68\x63\xd2\x26\x5a\x3a\x33\xf6\xd9\x55\xaf\x2c\x18\xb8\xc1\xae\xaa\x8b\xb9\x2c\x67\xed\xac\x91\x1d\x2c\x8d\x46\x2b\x5b\x12\x98\x39\xe4\x5c\xdf\xac\x84\xe4\xb4\x5e\x6a\x91\xce\xa0\x24\x76\xca\x1a\x89\x35\xea\x95\x01\xe3\x56\xe6\x0e\x8a\xf3\xa4\x93\xa1\xec\x96\x42\x6c\xc2\x65\xa4\x2a\xc5\xa3\xf3\xe5\x34\xaf\xd8\x7b\x74\x1e\xad\xfc\x7d\xae\xf7\x37\x5d\xf7\x7a\x34\x80\x8a\xa6\x40\x45\x55\x70\x5c\xe5\x20\x4b\xa1\x00\x6a\xa4\xae\x62\x0c\x0a\x48\x5a\x47\x49\x55\x53\x80\xc6\x50\x0c\x81\x92\xba\xce\xa2\x8a\x06\x20\x47\x93\x8c\x86\x72\x10\xa7\x21\xbe\xf5\xc6\xcf\x88\x0a\x4d\xc3\x31\x0c\xd7\x14\x8a\xc2\x39\x9d\x04\xba\x86\x01\x48\x2a\x14\x05\x14\x0d\x72\x28\xae\x12\x9c\xca\x52\x38\xcb\x71\x0c\xab\x40\x96\xa6\x19\x4d\x67\x38\x52\xe3\x70\x9d\xa4\x21\xae\xa9\x2f\xd1\xf0\x78\xf0\x68\x62\xef\xd1\x24\xdb\x6e\x62\x8b\x96\x33\xa9\xe0\x65\x13\xf4\x28\x65\xd4\x2c\x02\x4e\x20\xa5\x66\x53\xee\x8d\x44\x2f\x3f\xac\xfa\x68\x16\xc3\xd6\x9e\xa6\x32\x2e\xa6\xe1\xa6\xd3\xce\x3a\xc5\x6a\x48\xce\xab\x93\xb0\x83\xa9\x68\x61\x31\x9d\x07\xeb\x15\x3d\xd4\xfa\x98\xa4\x94\x6b\xc3\x6a\x43\x8d\x2c\x1c\x79\x74\xc2\x89\x48\xae\x80\x61\x8a\xdb\x9d\x4c\x99\x7e\xaf\x54\x1f\xb9\x9b\x7a\x3b\xcc\x8f\xc4\x0c\x5d\xc1\x9b\xad\xdc\x46\x09\x7d\xaf\x6a\x8d\xa6\x53\x3a\xab\x95\x5b\x92\xd2\x6b\xdb\xa8\xc7\x15\xc3\x36\xd6\xf7\x08\x97\xf7\x65\x75\xdc\x36\x47\x50\xa2\x8b\x23\x8e\xa3\x3a\x23\x09\x55\x4c\x22\x42\xae\xa5\x78\x6c\x31\x35\x21\xff\x6f\xf7\xd8\x2b\x33\x90\x94\xc7\x41\x4f\xcc\x67\x2e\x9f\x25\x3c\x03\x76\xad\xd8\xfd\x1c\xe6\x79\xbd\xfa\x09\xb4\x2b\xd5\xe6\x27\x10\xaf\xd4\x85\x3f\x3a\x1b\x4c\xd4\x86\x13\x53\xea\xaa\x28\xb6\x85\x46\xbe\xd7\xea\xf1\x43\x79\xc4\x93\x7c\x93\x61\x78\x41\xa4\xe5\x72\xbb\x57\xa2\x7a\x12\x5f\x6f\xcb\x52\xb5\x92\xef\xf3\x83\x62\x8e\x14\xf2\x4d\xa2\x43\x14\xa4\x78\x44\x8b\xe7\x5d\x95\x56\xae\x9d\x63\xb5\x21\x26\x8c\xf1\xa6\x2a\xe4\xb3\x4b\xa1\x42\xad\x2b\xbd\x06\x3e\x5f\xd6\xa7\x14\x98\x4e\xfc\x1c\x35\x56\x73\x72\x91\x3a\x7a\x5f\x34\x00\xe4\xa2\x1f\xb7\x91\x25\x9a\xcc\x54\xc7\x96\x1a\xd1\x76\x72\xab\x59\x03\xcb\xbb\x93\x4d\xd9\x18\x6f\xe6\x34\xde\xca\xb2\x65\x86\x0c\x95\x6c\xd3\x0d\x57\x99\x45\x8d\x8b\xe7\x3c\x2a\xd7\x5d\xc7\x31\x69\x1c\xfe\x11\x22\xd0\xe5\xe1\xf7\x3c\xcf\x73\xb9\x44\xe0\x0a\x96\xd7\xce\x5a\x42\x1d\x13\x97\xd3\x65\xa9\xb3\xac\xd5\x3a\xd3\xa0\x00\xcb\x53\x7d\xd1\xb0\x18\xc7\xb4\x43\x9b\xaa\x0f\x36\xcb\x21\x25\xaa\x11\x9c\xb8\x21\x70\xcb\x5d\x2e\x5b\x33\x7f\x91\x9d\xb1\xb6\xc2\x76\x87\x85\x51\x8f\xe9\x56\x87\x39\x75\x92\x2d\x37\x64\x4e\xd5\x67\xc3\x75\xa0\x79\xa3\x71\x63\xc4\x69\x8b\x8a\x41\xa9\x92\xa4\x10\xb3\xb0\x2d\xe0\x43\xbb\xde\xaf\x95\x47\x39\x29\x2f\x92\x78\xbd\x57\x2e\xcd\xa6\xe5\x22\xdf\xfc\xfd\xfb\x7c\xb4\xf8\xe4\xae\x21\x9e\xea\x9a\xda\x69\xd7\xe4\x85\x4d\x68\xf7\x08\x50\x1d\x4b\x19\x63\x38\x67\x4c\x67\x2e\x53\x8d\xde\xa6\xd9\xcf\xb4\xe7\x84\x54\x72\xc7\x98\xd2\x0d\x7c\x63\x65\x38\xdc\xf2\xd0\x35\xad\xb3\x6c\xf3\x61\xd3\x97\x50\x1c\x6d\xbb\x9b\x35\xdb\x18\x73\x22\x4e\x79\x4c\x8f\x80\x18\x57\x24\x9d\xc2\x40\x6e\xe3\x0a\x91\x1d\x82\x3e\x9c\x6d\x5c\xb3\xd6\xf7\x71\xdd\x6b\x72\x61\x69\x49\x56\xbc\x29\x2e\xce\x56\x8b\x9c\x0d\x98\xb1\x11\x10\xd8\x20\x97\xe1\x17\xe6\x9c\x2c\x8b\x23\x85\xa1\x85\x9d\xe9\xaf\xc7\x59\xda\xc3\x87\x07\xe2\x6c\xff\x00\xe2\xd0\x99\x1c\xad\x90\x8a\xce\x91\x18\xc1\x50\x18\x81\x72\x04\x8a\x69\x84\x8a\xaa\x04\x46\x70\xb8\x86\x51\x10\xc7\x49\x06\xea\x04\xa4\x20\x64\x59\xc0\x28\x80\x81\xa4\x46\xe9\x84\x8a\xb1\x90\x24\x99\x64\xa7\x46\x0e\x2d\x46\x3f\x5a\x62\xa5\x2c\xad\xb0\x49\xb7\x58\x1a\x09\x4b\xb1\x91\xe5\x45\xdb\x2e\x5b\xdd\x2c\xf0\x78\xbc\x63\xcd\xdb\xf2\x52\x9a\x15\x96\x65\x52\x99\xbe\x97\xf3\xaf\x3c\x6c\xf8\x70\xe3\x8f\x0f\x1c\x0e\x8d\xdf\xff\x85\x4f\xbc\x7d\x10\xb9\xb8\xb6\x13\x12\x0c\xbd\x88\x89\x14\x24\x1b\x06\x4b\xc7\x9b\xba\xc0\xf7\xdd\xb1\x07\x7c\x98\x82\xd4\x81\x7e\x80\xb4\xf3\x05\xa4\x1e\x0b\x23\xbf\x90\x36\x74\x03\x38\x53\xa0\x87\xe0\x28\x46\xdd\xa3\x48\x77\x3c\x15\xfa\xaa\xeb\xd8\x36\x5c\x05\x16\x08\x6d\x75\x7c\xae\x28\xda\x9e\x77\x0f\x58\x3c\x17\xdc\x95\xbf\xfc\xf4\xf6\xff\xff\xa8\x5a\xf6\x35\x30\x67\xf0\xeb\x4f\x04\x8d\x8b\x67\x5f\x77\x7f\xef\xf4\xf5\x27\x12\xdf\x8f\x3e\x1c\x03\xff\xeb\xcf\x78\x73\x60\xf4\xe1\xbf\x77\xc2\x3a\x84\xf7\x09\xce\xc0\x2a\x58\xf9\xe6\xe6\x4e\x71\x0f\xfa\xd0\x5b\xbc\x27\xfc\xe5\xdf\x77\x99\x02\xf8\x41\xb4\xab\x45\xdb\x3d\x5d\x4e\x31\xc5\xd3\x73\xe4\x3b\x78\xec\xb2\x2d\xf0\xd4\xb1\xb9\xd8\xdd\xbc\xd2\x25\xc7\x3e\xc0\x76\x06\x89\xcc\xe1\x7d\xfd\x89\x7c\x5d\x60\xd8\x5f\xd8\x5f\xe8\xd7\xdd\x0d\x35\xf4\x3c\x68\x07\x52\xd4\xb4\xaf\x3f\x11\xe2\xf4\x73\x21\xda\x78\xb4\xb5\xdb\xff\x3d\x18\xf2\x68\xd2\x83\xe4\x16\x98\xd5\x09\x02\xc5\x14\x52\x87\x34\xc6\xd0\x1c\xc1\x71\x3a\xa5\xab\x9c\xb2\x5d\x68\x12\x1a\x4d\x12\x38\x50\x15\x0c\x55\x31\xa8\xa9\x0a\xcd\x61\x3a\x49\x11\x38\xae\xa2\xac\x46\x63\x18\x45\xaa\x3b\x46\x07\xdc\xad\x17\x9f\x74\xe0\xe1\x4e\xd4\xf6\xad\xcb\x9d\xdc\xfa\xf7\xd9\xf7\x7d\x1b\xb8\x5b\x5e\x50\x27\x30\x80\xa3\x80\xe0\x58\x08\x19\x42\x85\x38\x8e\x33\x14\x04\x2c\xc6\x30\x0c\x4b\x2b\x40\xa5\x48\x9a\xa2\x75\x82\xd0\x54\x95\xd4\x09\x1d\xaa\x34\xaa\x51\x94\xa6\xe9\xd8\x76\x25\xfe\xf5\x4b\x8a\x86\x2b\x36\x78\xb6\xc4\xf4\x71\x1b\x60\xaf\x97\xf7\x9c\x30\x70\xc3\xe0\x73\xdb\x7e\xcb\xc2\x4f\xb7\xfa\xbf\xda\xc2\xf7\x79\xd9\x1f\x1b\xfc\xb1\xc1\x1f\x1b\xfc\xb1\xc1\x1f\x1b\xfc\xb1\xc1\x1f\x1b\xfc\xb1\xc1\xdf\x68\x83\xe8\xa7\xff\x77\xff\xe2\xc5\x57\xdd\x68\x7b\x7f\xda\xf5\xb2\x5f\xa1\x47\xc5\xa7\x5c\xb7\x39\x35\x16\xa5\x7e\xbd\x39\xd4\xa6\x25\xbe\x99\x65\xf9\x36\x54\xcd\x5e\x87\x9b\xfb\xf9\x91\xdc\x77\xcb\x0c\x1f\x0e\x07\xfc\x64\x1c\x1e\x4b\x54\xf9\xe8\x5f\x0a\xa0\x0b\xaa\xd9\xd1\x5a\xb5\x4a\x4d\x40\xd9\x7c\x5e\xa4\xa4\xd6\xc0\xac\x94\x98\x0d\x05\xe9\xb2\xcb\xb8\x99\x4e\x8f\x65\x8b\x72\xab\x74\xa8\x08\x54\xc6\x4f\x96\x69\x1e\xa9\x28\x08\x7c\x69\x92\x73\xe9\x7e\x99\x24\x8b\xfd\xf6\x52\x1e\xe3\x93\x62\x97\x25\x33\x24\x55\x13\xe6\x45\x34\x37\x35\x46\x41\xbf\x98\x65\x25\xd8\xe8\xb8\x9b\x42\x8d\xf4\x9b\x76\x5d\xd1\x72\xba\x6c\x63\x65\x2f\xd3\xf0\x44\x49\x03\x5a\x7f\x38\x5f\xd7\x72\x7a\x79\x69\x2b\x0b\x6a\x82\x2d\xe2\x0a\xde\x96\x4f\x6e\xf8\xe4\x53\x02\xe1\x91\x32\x58\x53\x20\x97\x73\x68\x99\xb2\x2c\x58\x53\x3f\xef\x68\xce\xca\x6a\xc8\x8d\x50\xee\xf0\x60\x1c\xf0\x6e\xb9\xa8\xf4\xc6\x8b\x6c\x8e\x98\xa0\xb4\xba\xea\xc8\x92\x58\xd9\xf4\x89\xa6\xbd\x71\xb9\x76\x35\x3b\xa1\x57\x39\xa2\x6f\xf7\x66\x55\x7f\xc2\xdb\xeb\x5a\x05\x67\x32\x43\x4e\x59\xfa\x11\x9d\xec\x18\xae\x99\x05\xaa\x11\x99\x82\xb6\xa1\x07\xb9\x25\x17\x7a\xbe\xd5\xf6\xcd\x89\xeb\xd7\xeb\x93\x42\x61\x25\x93\x15\xa3\xd8\x08\x43\x9e\xc8\x77\xb2\x23\x9c\x0c\x9a\xfe\x72\xe9\x06\xd9\xd6\x0a\xe6\x5d\xa5\xe6\x61\x2b\xb5\x94\xf5\xb4\xfc\xcc\x86\x98\x2c\xdb\xec\x82\x14\x96\x4f\xfa\x9b\x71\xe8\xff\xe5\xb3\x4f\x65\xa2\x6b\xf4\x31\xff\x6d\x0a\x5c\x3d\x10\xe7\x2a\xbb\xc8\x93\x7a\xab\x1e\x82\x0c\xa6\x11\x81\xde\x0a\xab\x42\x6f\x33\x0d\x66\x5c\x16\x2f\x5a\xb6\xeb\xd3\xc3\x49\xc1\xab\xdb\x34\xda\x50\xc6\xac\x9c\x03\x54\x7d\x5c\xf1\x95\xa5\x8b\x87\xe4\x50\xd2\xb8\xde\x72\x61\x48\xe4\x3c\xcc\x09\xc5\x7e\x26\x63\x44\xcf\x41\x85\xc9\xaa\x92\xef\x73\x45\xb3\x66\x0f\xcd\x8a\x3b\xb0\x02\x8b\x1f\x79\x68\xc9\x08\x04\x9e\xea\x4d\xdb\x7e\xdd\x98\x6f\x3a\xd9\xc1\xa0\x1a\xa0\xc7\xb2\xa7\xd4\x27\x0b\x28\x1c\xcb\x34\xbf\xe6\x72\x68\xc3\x2f\x8a\xc6\x42\xc5\x18\x0c\xeb\x72\xec\x70\x42\xce\xa4\xe9\x8c\x6b\x32\xd4\x34\x47\x2c\xa2\xe6\x1e\x2b\xda\xc2\x79\xd9\xf3\xf8\xe3\x30\xfa\xbd\xd7\xab\xc7\x81\xc6\xe7\x42\x87\x70\x02\x92\x9a\xe7\x1a\xe2\xca\x6d\x66\x09\xa7\x54\xcf\x6c\x30\xa6\xb5\x36\x7d\xcc\xd2\x6b\x85\xe1\xac\xd9\x37\xbc\xb0\x9d\xe9\x94\xb2\x87\xeb\x88\x57\x3a\xe8\x6f\x56\xfd\x41\xae\xd3\x04\xfe\xd4\xc5\x8c\xc0\x2e\xeb\x4b\xbe\xc3\x66\xaa\xd5\x21\x9e\x19\x4b\x59\x65\xc1\x74\x6b\x05\xa9\x92\x2d\x6d\xb8\xd0\x37\x6c\x4d\xa7\x06\x63\x31\x4b\x53\x62\xa1\xc2\x11\x74\xc8\x71\xea\x38\x90\x41\x2d\x37\xcc\x97\x0a\x83\x8d\xcf\x17\xb2\x59\x5c\x72\x8c\xa8\x0c\xcc\x7b\xf3\x3a\x2d\x41\x19\x18\x93\x55\x0d\x74\x1b\x1c\x2d\x6c\x74\x9f\x83\xa8\xea\x78\xf5\xd1\x60\x23\xf4\x2b\xd3\x82\x53\x65\xa6\x8b\xe9\xf2\xb8\x13\xe1\xe8\x4f\xfc\x79\x7e\x89\x8c\x10\xdd\x2f\xf4\xba\xe8\xce\x71\x3e\x60\x6f\xfd\x60\x09\xf6\x08\x0d\x0e\xfa\xf9\x12\xde\x1e\xba\x0a\xf0\x60\x36\x10\xb2\xd2\x92\x5d\xd1\xcd\xd6\xa2\x57\xaf\x4d\x66\x52\x71\xde\x9c\x34\x8b\xa6\x00\x7d\x9a\x08\x79\x66\xe0\x8d\x84\xb0\x5d\x1a\x61\x95\x7a\x8b\x23\x65\x93\xdb\x34\x59\xc1\xcd\x88\x75\xbd\x88\x17\xba\xb9\xfe\x32\xa4\xe5\x6e\x51\xa9\xd6\x44\xe1\xd8\x1e\xe1\x90\x6f\x3f\x1e\x6f\xb7\x4a\xcf\x57\x36\x55\x7f\xb4\xfa\x9a\xd8\x58\xfd\x19\x1b\xbb\xb0\x57\xe4\x99\x4d\x57\x2f\xdd\x76\xfe\xe5\x15\xe1\x70\x9c\x20\x18\x1c\x25\x68\x96\x22\x19\x86\x62\x51\x26\xda\xb5\x83\x9d\x6d\xb1\x3a\x1b\x81\xd3\xdb\xf2\x30\x99\xb8\x2d\x0f\x9b\xe2\xe3\x6d\xb9\xd6\xd3\xd7\xf6\x16\x7f\xb8\xaf\x93\xfb\x8b\x8f\xb5\x76\x85\xe0\x58\xa8\x90\x00\xb2\x1c\x43\xd1\x04\x4e\xd1\x24\xa1\x02\x0d\xc7\x54\x8e\x84\x18\xa1\xe8\x2a\xca\x90\x0a\x81\x13\x10\xb2\x04\xc4\x48\x4c\xd1\x19\x14\x03\x94\xc6\xa1\xa4\x8e\xed\xb7\xaa\x9c\xcc\x64\x6a\x67\x99\x4c\x30\xb3\x02\x2a\xa1\x95\xe2\x3a\x18\x2f\xeb\x98\x35\x44\xc1\xda\x75\x30\xae\x5e\x5a\x2d\xa4\xdc\x5a\xa6\x02\x41\x54\x73\xbd\xc5\xb2\xc0\x2d\x09\x23\xf0\x64\x7b\xc4\xdf\x71\x5d\xdd\xf2\x14\x45\x5e\xee\x19\xfd\xc3\x6c\x46\x4d\xcb\x44\xef\xeb\xbf\x7c\x56\x97\x6e\x77\x9d\x63\x54\xa0\xeb\x40\x61\x55\x8c\x46\x71\x02\x10\x0c\xcb\x92\x18\x4d\xa9\x0a\xaa\x10\xba\x8e\x01\x80\x6b\x40\x27\x51\x14\xd5\xa1\x4e\x72\x1a\x8e\x41\x5d\x65\x49\x46\xd3\x14\x5d\x81\x20\xb6\x3b\x7e\x69\xf7\x7f\xa8\xdd\x9f\x65\x77\x96\x3c\x7e\x3f\x75\xd3\xcf\x93\x76\xc7\x21\x4b\x69\x1c\x20\x70\x94\x44\x39\xa8\xd2\x28\xc6\xa0\x0c\xad\xa3\xba\x42\x90\x2c\xca\x69\xaa\xc6\xe0\x04\x8e\xe2\x1a\x05\x74\x92\x63\x81\x8e\x92\x04\x85\xea\x00\x70\x80\x81\x04\x8d\xed\x36\xb2\xdc\xb4\x7b\x0e\x0b\x05\xad\xe4\x74\x42\xa3\xb6\x68\x06\x79\x46\x18\x97\x25\xa2\x0e\x39\xad\xd7\xd0\x8b\xe5\x4c\xc5\xa4\x2a\x8b\xae\x9c\x19\xf1\x01\x13\xcd\xc4\x2a\xdd\x5c\x66\xd7\x28\xe3\x9a\x6d\xdf\xb5\x7b\xfe\x39\xfd\xb2\xfa\x98\xfe\x7b\xed\xae\x68\x24\x4b\x6b\x8a\xa6\xa1\xb8\x46\xd2\x28\x8b\x31\x34\x83\xa9\x24\xa0\x00\x03\x39\x8d\x86\x2c\x4d\xa9\x00\xe7\x54\x85\xc4\x20\x8d\x6b\x0c\x00\x3a\x83\x02\x5c\x87\x90\x52\x08\x5a\x83\xb1\xdd\x6f\xfb\xfb\x07\x66\x48\xfc\xdf\x62\xf7\x07\xf4\x3f\x67\xf7\xab\x63\xc6\xe7\x0c\x18\x7f\xf7\x68\x51\x94\xd8\x52\x73\xd1\x9c\x2a\x55\xbc\xc4\x13\xfd\xde\xa4\xe5\x55\x67\x93\x01\x8a\xea\x45\xd6\x97\xca\xcc\x0c\x15\x5b\xcb\x4a\x3f\xcb\x0f\xa2\x8d\x56\x89\x51\xe1\xc6\xbc\x39\xbe\x02\xc5\x18\xb4\x68\x91\x71\xf2\x12\x2a\x35\x33\xcb\x61\x3b\xc7\x6d\x06\x8b\x41\xaf\x43\xac\xcc\x86\x39\x0c\xdb\x0a\x96\x5f\xcc\x9a\x12\x8c\xe6\x85\xb9\x1e\xbf\x48\xee\x8a\x15\xe2\xac\x14\x75\xf2\x70\xd2\x54\x1b\x1d\xbc\x48\x8d\xe7\xb6\x30\x33\x8a\x45\x68\x70\x15\xd6\x22\x55\x4c\xb4\xbb\xd6\x6a\x6a\x89\x56\x89\xf3\xe7\x23\x0f\xe5\x18\xac\x40\xcb\x52\x5f\x87\xd9\x19\x39\x75\x0b\x41\x39\xe3\x97\x51\x13\x9b\x4b\x66\x40\xf1\x68\x65\xdd\xb7\x95\xf1\x50\xea\x53\xce\x76\x6e\xf0\x82\x6f\x66\x72\x50\xa5\x2b\x5a\xbf\x66\x8d\xf2\xeb\xa0\xac\x5a\xb2\xc8\x64\x79\x4d\xaa\x4d\x18\xa7\x31\x6e\x2a\xdc\xb2\x68\xe1\xcd\xce\xca\x3f\x10\xbb\x61\x83\xa3\x67\x9c\x3c\xf9\x4f\xc8\x46\xd1\xfe\x19\xa3\xc4\xa3\x59\x9a\xff\x84\x51\xa2\xd0\xe9\x0b\xfe\x13\xfa\x79\xfe\x9f\xcb\xd6\x69\xd9\xf2\xef\x9e\x1a\x3c\x1e\x64\xb9\x33\xf6\x17\x0e\xf7\xb1\xc5\xde\xad\x20\x13\x66\x55\xb7\x6d\x2c\xbc\x65\x55\xc6\xd1\x41\x4e\xd6\x87\xfa\xc0\x2f\x8a\x62\x37\x58\x0e\x01\x10\xf5\x79\x3b\xa4\xd7\xb3\xca\xcc\xca\xcf\x40\xa6\x3c\xa0\xcb\x4c\xd9\x30\x94\xee\xa8\xe6\xa8\x4d\x6d\xc4\x91\xe5\x1a\xaf\x57\xb5\x26\x5f\x9f\x0f\x94\xb2\xcc\xac\xfd\x25\x84\xb5\xdc\x36\x10\x32\x83\xf5\x22\xe3\x4d\x84\x61\x4e\x9e\xc0\x72\xb3\x3f\x90\x72\x9b\xec\x6a\x6e\xe2\x8b\x26\x9f\xcf\x70\x15\x74\xcc\xb0\xe3\x12\xa1\x64\x32\xce\x81\xd8\x3f\x1f\x64\xcf\x3a\xf9\x93\x41\x36\x67\xb2\x9d\xbc\xfa\x99\x41\xf6\x1f\x1c\x9a\xef\x0a\xb2\x4f\x9e\x07\xfe\xa9\x00\x49\x8e\x51\x8b\x82\x42\x72\x06\x23\x67\x2d\xf0\xb6\x3f\x14\xd4\x92\xb2\xcc\x6c\xda\xbc\xad\x62\xeb\x9a\x21\xf5\x3c\x74\x56\x65\xc5\x7a\x33\x33\x9f\xd9\x24\x7e\x5c\x5f\xa4\x07\xdc\xf0\xb4\x53\x4f\x02\x2e\xb2\x5d\x3c\xf7\x5a\x1e\xa5\x1e\x18\xf5\x27\xf6\xb1\x2f\xae\x5c\x57\xd6\x41\x27\x01\xff\x29\xfa\xaf\x24\x9b\x7b\xf4\xd7\xf8\xcf\x5d\x03\x3c\xb4\xf6\xfb\x6c\xfd\x97\xf6\xb8\x9d\x70\xf2\x47\x99\x8f\xea\x4f\x54\x17\xab\xf4\x04\x9a\xc4\x64\xe6\x94\xd9\x4e\xd1\xca\x67\xa1\xa1\x12\x4c\x63\x10\x94\xaa\xd5\x4d\xbf\xc7\x2e\x7b\xe6\x48\x00\xb9\x90\x92\xa8\x5a\xa2\x2b\x8e\x01\xb7\x3c\xb7\xdf\x5d\x09\xe9\x93\x17\x48\x1f\x6c\xc4\x83\x09\xe9\x7e\x23\x13\x69\x09\xa9\x78\xd0\xdf\x14\xb8\xe9\xac\xda\xc7\xe7\xc4\x82\x69\xea\x6b\xb6\x51\x83\x53\x51\xc1\x3a\x9d\x32\x65\xae\xe6\xd3\x32\x2a\x38\xc6\xc0\x93\x03\xc6\x90\x31\x1a\x6f\x2a\xd3\x31\xae\xb5\x3b\x5d\x1d\xe6\x9d\x85\x8a\x36\x78\xa0\x8f\xf3\x83\x55\x30\xee\xf1\x96\x2f\x85\x13\x4b\x98\xad\x27\x02\x3f\x8c\x92\xc6\xa2\x3b\x0e\x16\x1a\x1f\xb4\x0c\x63\x30\x5a\xad\xaa\x7d\x9b\xd6\x14\x67\xa4\x3a\xee\x1a\x2d\xcd\xa4\xc1\x7c\xa1\x56\xa5\x0c\xa5\xd4\x83\xe3\x80\xf7\x59\x09\xe9\x81\x19\xd2\xa7\x26\xa4\x27\xf5\x7f\x66\x42\x7a\x72\x71\xfc\x74\x42\xfa\x0c\xfd\xcf\x24\xa4\x0f\xea\x7f\xec\x71\x47\xa2\x2b\xde\x4d\x48\x57\x8a\x07\x37\x8e\x15\xf8\x68\x05\xe1\xec\x68\x81\x7d\xae\x4b\x96\x00\xe2\x3f\x31\x3c\xc6\x52\x4a\xb2\xbc\x8e\x72\xc8\x76\xf1\x1f\x26\x5e\xa0\x5c\x3d\x0a\xf5\xf2\x84\xe8\xc3\x11\xb0\xfb\xe3\x07\xde\x69\x66\xf2\xa8\xea\xe8\x80\xea\x04\x62\xb4\x47\x80\xcf\xe7\x53\x0e\x6d\x3c\x28\x44\x1a\xad\x72\x8d\x6f\x0d\x91\xaa\x38\x44\xbe\x1d\xce\xb3\x79\x3d\x1c\x96\x7a\xf5\xe8\xd2\xb3\x43\xb3\x3f\x8b\xb8\x7f\x83\xb5\x7f\x8b\x72\xda\x51\x92\xc7\x73\xc2\x9f\xa6\xa7\x00\x3b\x8d\xd9\x5e\xc1\x29\xa9\xf8\xf4\xaa\xdb\xe7\x4c\xde\x3c\x20\xfd\x69\xba\x27\xe0\x69\xc4\x6f\x68\x47\xba\xf5\x72\xb3\x2b\x22\xc7\x23\x2d\x3e\xd4\x92\xcf\xb1\xf7\x07\x1b\x70\xd9\x07\xc7\xa3\x37\xaf\x1c\x1b\x79\x72\xac\xfe\xd3\x7c\x63\xb0\x34\xa2\x09\x35\xa7\x0c\x77\x87\x19\xa6\x1f\x62\x98\x7c\x87\xc0\xd3\xe4\x22\xac\x34\x6e\x47\x25\xa7\xd4\x4c\xf7\x35\x3a\xda\xf0\xe6\xa1\x7d\x29\xef\x4e\x78\x9e\x69\x02\x32\x95\xf0\xb9\xca\xb4\x4e\xbf\x72\xb2\xdf\xc9\x1b\x24\x3e\x83\xa9\x1f\x2a\x57\x38\xee\xd5\x9c\xb2\x8b\x0e\x05\xbc\x71\xcc\xdf\xc5\x6b\x33\x9e\x26\x79\x04\x4c\x23\x7a\xa6\xee\xae\x1c\x96\xf8\x2b\xb1\xf3\x97\x87\x3c\xcd\xf6\x08\x98\xc6\xf6\x4c\xdd\x29\xdb\xfd\x61\x79\x37\x0e\xa3\xbb\x78\x89\xca\xf3\x7c\x0f\x80\xa9\x7c\x4f\xd5\x9d\xf2\x3d\x9c\x67\x77\xe3\x9c\xba\x8b\xb7\xc9\x3c\x4d\xf8\x08\x98\x46\xf8\x4c\xdd\xd5\xa9\x41\x7c\x4e\xdd\xeb\xf1\x10\xba\x9b\x07\x91\xa5\xbc\x6d\xe7\xf9\x76\x24\x20\x53\x5b\x72\xae\x32\x2d\x4b\xf8\x70\xfe\xba\x3f\x79\xeb\xfa\x21\x61\xe7\x6f\x21\xfa\x04\xee\x37\x89\x3f\xc5\xfa\x6c\x8a\x9a\xf6\x6e\xa6\xa7\xf9\x9f\x82\xa6\x35\x22\x45\xed\xd5\x96\x24\x0f\xf0\xba\x36\xd5\x3c\xbc\xb7\x6a\xc7\x3d\x7a\xcb\xd5\x7d\x47\x8b\xc5\x2f\xc4\x3a\xc3\x41\xe4\xfa\x71\x16\xdb\x6d\x97\xeb\x45\x44\x09\x3c\x08\x91\xfd\x39\x82\xdf\x91\x7e\x49\x6c\x89\x48\xf2\x5c\x41\xec\xb0\x0b\xf7\x72\xa2\x79\xfa\x2a\xae\x47\x59\x9e\xc2\x6c\x49\xee\xe6\x29\x27\x14\x93\x87\x4b\xbf\x26\x8f\x92\x7e\x8d\x8f\x78\xbe\x60\x77\x7c\x9f\xd8\xa3\xc4\x0e\x08\x5b\x4e\xc7\xc0\x38\xa1\x75\x7d\xaa\x78\xf2\xe6\xb3\x67\x28\xec\x41\x62\x16\x89\x04\x73\x27\x91\x93\x97\xb5\x3d\x4a\x24\x09\xb2\x25\x72\x3a\x11\xbe\x93\xc9\xc9\x0b\xe6\x1e\x65\x92\x04\xd9\x32\x49\xfc\x2d\xfe\xfd\x34\x4e\x5e\x8a\xf7\x04\x93\x24\xce\x8e\xcc\x7e\x96\x70\x4a\x26\x79\x80\xec\xad\xf4\xf5\x1c\xa3\x73\xa0\x2d\xa5\xb3\xdc\xf8\xae\x8d\xae\xbd\x0b\x12\x51\x9d\x99\x6b\xc1\x00\x46\x6a\xff\x27\x00\x00\xff\xff\x4d\xe0\xe9\x72\x38\x72\x00\x00") - -func asset_stat_trustlines_4CoreSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_trustlines_4CoreSql, - "asset_stat_trustlines_4-core.sql", - ) -} - -func asset_stat_trustlines_4CoreSql() (*asset, error) { - bytes, err := asset_stat_trustlines_4CoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_trustlines_4-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x99, 0x90, 0x4b, 0xfd, 0x36, 0xe8, 0x6c, 0x54, 0x63, 0x38, 0xf9, 0x80, 0x13, 0xa4, 0x89, 0x94, 0xb3, 0xbf, 0x36, 0x4, 0xbd, 0x3c, 0x64, 0x7c, 0x90, 0x57, 0xf1, 0x39, 0x1c, 0xcd, 0x89, 0xbb}} - return a, nil -} - -var _asset_stat_trustlines_4HorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x7d\xf9\x6e\xe2\xc8\xf6\xf0\xff\xf3\x14\x56\x6b\xa4\x74\x2b\xe9\xc6\xfb\x92\xfe\xf5\x95\x0c\x98\x25\xec\x5b\x02\x19\x8d\xac\xb2\x5d\x06\x07\xb0\x89\x6d\x48\xc8\xe8\xbe\xfb\x27\xbc\x80\x6d\xbc\xb1\xa4\xe7\x4a\x1f\x6a\xb5\x82\x7d\xea\x6c\x75\xaa\xce\x52\x45\xd5\xf7\xef\x7f\x7c\xff\x8e\x74\x0d\xcb\x9e\x9a\x70\xd0\x6b\x22\x0a\xb0\x81\x04\x2c\x88\x28\xeb\xe5\xea\x8f\xef\xdf\xff\xd8\xbd\x2f\xaf\x97\x2b\xa8\x20\xaa\x69\x2c\x0f\x00\x1b\x68\x5a\x9a\xa1\x23\xdc\x0f\xfa\x07\x16\x80\x92\xb6\xc8\x6a\x2a\xee\x9a\x47\x40\xfe\x18\x08\x43\xc4\xb2\x81\x0d\x97\x50\xb7\x45\x5b\x5b\x42\x63\x6d\x23\xbf\x10\xf4\xa7\xf3\x6a\x61\xc8\xf3\xe3\xa7\xf2\x42\xdb\x41\x43\x5d\x36\x14\x4d\x9f\x22\xbf\x90\x9b\xd1\xb0\xc2\xde\xfc\xf4\xd1\xe9\x0a\x30\x15\x51\x36\x74\xd5\x30\x97\x9a\x3e\x15\x2d\xdb\xd4\xf4\xa9\x85\xfc\x42\x0c\xdd\xc3\x31\x83\xf2\x5c\x54\xd7\xba\x6c\x6b\x86\x2e\x4a\x86\xa2\xc1\xdd\x7b\x15\x2c\x2c\x18\x22\xb3\xd4\x74\x71\x09\x2d\x0b\x4c\x1d\x80\x37\x60\xea\x9a\x3e\xfd\xe9\xf1\x0e\x81\x29\xcf\xc4\x15\xb0\x67\xc8\x2f\x64\xb5\x96\x16\x9a\x7c\xb7\x13\x56\x06\x36\x58\x18\x3b\x30\xbe\x39\x14\xfa\xc8\x90\x2f\x36\x05\xa4\x5e\x41\x84\x71\x7d\x30\x1c\x20\x9d\x76\x73\xe2\xc1\xff\x98\x69\x96\x6d\x98\x5b\xd1\x36\x81\x02\x2d\xa4\xdc\xef\x74\x91\x52\xa7\x3d\x18\xf6\xf9\x7a\x7b\x18\x68\x14\x06\x14\x65\x63\xad\xdb\xd0\x14\x81\x65\x41\x5b\xd4\x14\x51\x9d\xc3\xed\xcf\xdf\x41\x50\x76\xfe\xfa\x1d\x24\x77\x76\xf5\xfb\x04\x74\xa9\x9d\x2e\x9d\xcb\xe0\xce\x90\xd3\x88\x05\xa0\x0e\xc8\x1d\xf0\x7a\xbb\x2c\x8c\x03\x90\x1e\x5a\x87\x2b\x11\xaa\x2a\x94\x6d\x4b\x94\xb6\xa2\x61\x2a\xd0\x14\x25\xc3\x98\xa7\x37\xd4\x74\x05\xbe\x8b\x01\xe1\x74\x0b\x38\x86\x6e\x89\x86\x2e\x6a\xca\x29\xad\x8d\x15\x34\xc1\xbe\xad\xbd\x5d\xc1\x0b\x5a\x1f\x38\xb9\x88\x8b\xd3\xda\x2e\xa0\x32\x85\xa6\xd3\xd0\x82\xaf\x6b\xa8\xcb\x27\x89\x10\x68\xbe\x32\xe1\x46\x33\xd6\x96\xf7\x4c\x9c\x01\x6b\x76\x26\xaa\xcb\x31\x68\xcb\x95\x61\xee\x86\xa3\x37\xa7\x9e\x8b\xe6\x5c\x5d\xca\x0b\xc3\x82\x8a\x08\xec\x53\xda\xfb\xc6\x7c\x86\x29\x79\xe3\xf2\x0c\xa6\x83\x2d\x81\xa2\x98\xd0\xb2\xd2\x9b\xcf\x6c\x53\x71\xfc\x8e\xb8\x30\x8c\xf9\x7a\x95\x03\x7a\x95\xc5\x92\x0b\x05\x34\xf3\x44\xc4\xfe\xa4\x9b\xbb\xc1\x6e\x9e\x50\x55\x68\xe6\x03\xf5\xd1\x9f\xd1\xc4\x53\x6b\xbe\x46\xce\xd4\x7a\x02\x91\xe0\x54\x9c\xd5\x62\xb5\x6b\x30\xb3\x33\x7b\xc0\x0a\x4d\x40\xd2\x36\xd3\x8c\x66\xfb\x91\x9e\x07\xd8\x70\xf9\x30\x32\x01\x35\xcb\x16\xed\x77\x71\x95\x8d\x72\x07\x69\xac\xf2\x42\xc2\xbc\x60\xbe\x2b\x49\x07\x96\xfc\xe1\x9e\x09\x96\x3d\x8b\x49\xdb\x7c\x9d\xe9\xfa\xc8\x9d\xb6\x2d\x6b\x9d\x45\x79\x0f\x2c\x1b\x0a\x3c\x31\x2e\xd8\x9b\xc1\x0a\x98\xb6\x26\x6b\x2b\xa0\xa7\x3a\xef\xac\xa6\xe2\xea\xc4\xd8\x64\xef\xd1\x4e\xe5\x20\xbe\xe1\xc9\xf4\x1d\xe5\xe5\xa1\xe7\x02\x7e\x3a\x7e\xb7\x33\x77\x3d\xe9\xfd\xb9\xf3\x0f\x7e\xe8\xe7\x18\x83\x98\x93\x83\xa9\x61\xae\xc4\xa5\x36\xf5\x02\x86\x14\x16\x22\x90\xb9\x65\x3c\x3d\xde\x4b\xc3\x9c\xd7\x38\xdd\xd6\xa5\x4e\x73\xd4\x6a\x23\x9a\xe2\x52\x2e\x0b\x15\x7e\xd4\x1c\xe6\xc4\x9d\x60\x74\x57\xc0\xec\x75\x77\x3a\x26\xe7\x5b\x7e\xf1\x7d\x2f\x3d\x10\x7a\x23\xa1\x5d\x3a\x43\x67\xbb\x38\xdb\x82\xaf\x27\x53\x0e\x21\xc9\xdd\x5a\x81\x39\x61\x0f\xd1\x6c\x6e\x09\x13\x46\xfd\x29\xf2\xc5\xa3\xc8\xd7\xd6\x8b\xfb\xf2\x01\x7b\x41\x5e\x6e\xd9\xbc\x19\xe0\x14\x59\xdc\x26\x39\x61\xbd\xf0\x2f\x3f\x3f\x7e\xbc\x98\x87\xa3\xc8\x1c\x92\x0e\x1c\x98\x12\x3c\x40\xbe\x5a\xed\x0b\x55\x7e\x18\x03\xbc\xd4\x76\x19\x87\x26\xc3\xaf\xfa\x7a\x09\x4d\x4d\xfe\xeb\xef\x6f\x39\x5a\x81\xf7\x33\x5a\x2d\x80\x65\x7f\x05\xfa\x16\x2e\x9c\x52\x4c\x8e\x16\xaa\x66\xc6\x36\xa9\x8c\xda\xa5\x61\xbd\xd3\x4e\x91\x47\x04\xd3\xe9\x81\xbb\x3b\xe4\x88\xd1\x14\x1c\xbe\x74\x17\xe0\xd8\xc9\xea\x34\x3f\x30\x7f\x87\x9c\x22\x88\x23\x7a\x0e\x0c\xc2\x78\x28\xb4\x07\x11\x14\x8b\xd5\xd4\x7a\x5d\xf8\xb6\x58\xaa\x09\x2d\xfe\x88\xc2\xcf\x3f\xdc\x2a\x5c\x1b\x2c\xe1\xbd\xff\x0c\x19\x6e\x57\xf0\xde\x6b\xf2\x13\x19\xc8\x33\xb8\x04\xf7\xc8\xf7\x9f\x48\xe7\x4d\x87\xe6\x3d\xf2\xdd\x29\xce\x95\xfa\xc2\xae\xbf\x3c\xcc\x3e\xbe\x3f\x42\x18\xc3\x2f\x3d\xc4\xa5\x4e\xab\x25\xb4\x87\x29\x98\x5d\x00\xa4\xd3\x0e\x23\x40\xea\x03\xe4\xc6\x2f\xbb\xf9\xcf\x2c\x07\xc9\x4d\x94\xb2\x2f\xbe\x47\x73\xaf\xa1\x4c\x79\x42\xba\x6c\x77\x86\x11\x7d\x22\x4f\xf5\x61\x6d\xcf\x56\xb0\xfe\x16\x22\x7f\xc0\x12\x61\xe4\x14\xe1\x8f\x90\x38\x0a\xe8\x36\x0b\xab\xe9\xa0\xd7\x44\x56\xa6\x21\x43\x65\x6d\x82\x05\xb2\x00\xfa\x74\x0d\xa6\xd0\x51\x43\xce\x7a\x61\x90\xdd\x6c\x43\xf3\xd8\xf7\x6d\xf5\xc0\xbf\xdf\xb7\x71\xba\xdc\x5b\x76\x26\x7e\xa4\x2f\x0c\x47\xfd\xf6\x20\xf0\xec\x0f\x04\x41\x90\x26\xdf\xae\x8e\xf8\xaa\x80\x38\xd2\xb7\x5a\x23\x77\xbe\x1b\x0c\xfb\xf5\xd2\xd0\x81\xe0\x07\xc8\x9f\xe2\x9f\xc8\x40\x68\x0a\xa5\x21\xf2\x27\xb6\xfb\x16\xed\x8d\xcc\x81\x78\x99\x74\x59\xe8\xaf\x26\x1c\x1e\x27\x5c\x9e\x99\xea\x32\xf9\x72\x50\xd8\x8b\xb8\x7f\x74\x96\x84\x5f\xff\x40\x90\x12\x3f\x10\x90\xa7\x9a\xd0\x46\xfe\xc4\xfe\xc2\xfe\x2e\xfc\x89\xfd\x85\xff\xfd\x9f\x3f\x71\xe7\x6f\xfc\x2f\xfc\x6f\x64\xe8\xbe\x44\x84\xe6\x40\xd8\x29\x45\x68\x97\xbf\xc5\x6a\x26\x87\x1f\xb8\x50\x33\xd9\x14\x3e\x5b\x33\xff\x77\x8e\x66\x8e\x7d\xaa\xa7\x87\xbd\x1f\xce\xa7\x88\x83\xdb\x3e\xc2\xe8\x70\x8c\x20\x83\x9d\xae\x90\x5f\x87\x19\xe0\xce\x7d\x3c\x9c\x74\x05\xe4\x57\x70\x44\x7c\x8b\x1b\xb5\x57\xe5\x31\x8a\x30\xc2\xa2\x3f\x8c\xf3\x73\x18\x1b\x02\x5d\xca\x65\x1c\xd2\x08\xa7\xa1\x01\x19\x66\xf7\x60\x65\xc7\xdc\xc6\x85\x79\x17\x73\x1b\x83\x34\xca\x6d\x70\x90\xa4\x72\xbb\xf3\x5c\x0a\x54\xc1\x7a\x61\x8b\x36\x90\x16\xd0\x5a\x01\x19\x22\xbf\x90\x9b\x9b\x9f\xe1\xb7\x6f\x9a\x3d\x13\x0d\x4d\x09\x2c\xa5\x85\x64\x0d\xc6\xbf\x9e\x88\xce\x00\xcb\x27\x9e\x3b\x16\x83\xc9\xb7\x2b\x91\xa6\x20\x92\x36\xd5\x74\xdb\x09\x0c\xda\xa3\x66\xd3\x15\x07\x2c\x77\x61\x3c\x22\xcf\x80\x09\x64\x1b\x9a\xc8\x06\x98\x5b\x4d\x9f\x46\xc0\xf4\xf5\x72\x1f\xf2\x23\x9a\x6e\xc3\x29\x34\x23\x20\xea\x02\x4c\x2d\xc4\x5a\x82\xc5\xe2\x98\x8c\x6d\x2c\x17\xc7\x44\xbe\xe2\x14\xf5\x6d\x0f\x79\xdc\xed\xd1\xbc\xe1\x5c\x75\x44\xab\x1d\x7b\x95\xd8\xf0\xfd\x48\x21\xab\xd5\x42\x73\x6a\xf6\x88\xad\x2d\xa1\x65\x83\xe5\x0a\xd9\xf5\x99\xf3\x15\xf9\x30\x74\x78\xcc\x68\x52\x56\xe4\xc7\xa3\x5e\x3a\x95\x8f\xe7\x7d\xf2\x95\x80\xd5\x33\x43\xbe\x3f\x74\x23\x3a\xcc\x79\x50\x6f\x97\xfa\x82\x13\x7e\x15\x27\xde\xa3\x76\x07\x69\xd5\xdb\x8f\x7c\x73\x24\xec\xbf\xf3\xe3\xc3\xf7\x12\x5f\xaa\x09\x08\x96\x25\xcc\xd9\x6a\x8f\x22\x3a\x32\x45\xaf\xe8\x81\xe8\xf0\xdd\xde\x80\xc5\xd7\x9b\x04\x89\x6f\xee\xef\x4d\x38\x95\x17\xc0\xb2\xbe\x45\xbb\xcb\x5d\xab\x88\xb1\x2d\x9a\xfc\x96\xd2\x51\x6e\x6e\x7c\xb1\x64\x6e\x45\x67\x2f\x57\xfc\xc8\x38\xd4\xea\xe2\xd9\x8c\x05\x97\x0d\x25\x0e\x1c\xc3\xe3\xc1\xdd\xf2\x5f\x4c\x03\x8a\x4e\x1b\x61\xf1\xe5\x85\x2b\x99\x6d\x10\xe7\x6f\x33\xda\x34\x41\x90\xce\x53\x5b\x28\x23\xc5\x49\x86\x44\x6e\x85\x2e\x5d\xa0\x3d\xae\xc8\xeb\x1f\x9a\x92\xc4\x9b\x5f\xf3\xb9\xd4\xea\x3c\x3c\x9e\xd9\x45\xc6\x8c\x98\x34\xd3\x1f\x97\xb8\x92\x20\xbf\x38\x0b\x1f\x5f\x12\xac\xd9\xb1\xe3\xf8\x57\x0a\xb4\x81\xb6\xb0\x90\x17\xcb\xd0\xa5\x64\x63\xf3\x0b\x65\x97\xea\xc1\xc3\xe3\xe9\xc1\x5f\xb7\x4e\xe0\x2d\xb0\x98\x9c\x6b\x14\xc6\xad\x63\xc7\x37\xf4\xd4\x12\xa8\x8c\x3a\x1d\xb1\xe7\xc3\x9f\xe5\xd0\x08\x85\x43\x47\xe4\x83\xdf\x2f\x26\x47\x1c\x93\xb1\xb6\x0f\xbe\x29\xda\xc6\x84\xc0\xce\x6c\xe4\xc2\xae\x57\x4a\x6e\xd8\xbd\xe9\x78\x5f\x23\xeb\xec\x47\xb2\x60\x47\xf1\x80\x0d\x16\xa2\x6c\x68\xba\x15\x6f\x83\x2a\x84\xe2\xca\x30\x16\xf1\x6f\x9d\x95\x4f\x15\x26\xf5\xb5\xf3\xda\x84\x16\x34\x37\x49\x20\xbb\x38\xd4\x7e\x17\x9d\x30\x49\xfb\x48\x82\x5a\x99\x86\x6d\xc8\xc6\x22\x51\xae\x68\x1f\xf9\xc6\x02\x81\x02\x4d\x27\xbc\x70\x9f\x5b\x6b\x59\x86\x96\xa5\xae\x17\x62\xa2\xa1\x78\x82\x03\x6d\x01\x95\x64\xa8\xe4\x61\x95\x50\xbb\xbe\x74\x94\x25\xac\x87\x64\xf8\xbc\xfc\xb3\x4d\xf6\xfc\x75\xaa\xc8\xd7\x75\x63\xa9\x34\x7e\x97\x5b\x3b\x49\xd0\x0b\xdd\x5c\x2a\xad\x63\xb7\x17\x0f\x9e\xe2\x06\x03\x2b\x3b\x57\xb3\xcd\xac\x34\x27\xbc\xab\x2a\x21\x15\xda\x45\xfe\xb2\x2b\x8a\xe3\x01\x2f\x74\x80\xde\xc8\x37\xd6\xa6\xbc\xdf\xa6\x91\xe0\x7a\xfc\xe9\xe4\xe6\xe6\xfe\x3e\x39\x15\x4b\x1e\x07\xde\xc2\xda\xa5\xea\xf4\xf6\x02\x7e\xbd\x6a\xbc\xe0\x4d\x89\xe7\x78\x2f\x67\x2f\x4c\x22\xd9\xc8\x4e\xc4\x34\x20\x6f\x73\x64\x1a\x88\x9b\x07\xc7\x02\x1c\xef\xe9\xcc\x80\x4b\x25\xb7\x87\x4a\xa1\xe8\xb0\xa4\x59\xa2\x05\x17\x0b\x68\x22\x92\x61\x2c\x20\xd0\x7d\x9f\xa4\xc9\x50\xd4\x43\xfe\xd7\x7d\x16\xf6\xc9\x87\xdd\x44\x62\xc4\x5b\x87\xf6\x33\x45\x5f\x06\x96\xe9\x63\x77\x7e\x3a\x5c\x8b\xce\xde\x60\xa4\x54\x13\x4a\x0d\xe4\xeb\xd7\xa0\x06\xff\x83\xa0\xdf\xbe\x65\xa1\x8a\x6b\xee\x2b\xed\xff\x8e\xf4\x98\x03\x5f\x48\xa7\x11\xf4\x11\x85\x3b\x0c\xa6\x0e\xa5\xf8\x15\xee\x2b\x0c\xae\xf8\x3d\x0b\x39\x3d\x69\x9e\x29\xec\x12\x5f\x9a\xb5\x3f\xe0\x3a\xde\x34\x83\xca\xef\xf2\xa7\x27\x0a\x7b\xa1\x47\xcd\xa0\x76\xec\x53\x93\x1a\xa4\x78\xd5\xd0\x9e\x90\x2b\xda\xaa\x6f\x9f\x41\x96\x72\x27\x51\xde\xdc\x9f\x91\x9a\xe5\x75\xbc\xe9\x3e\x34\x16\xf6\x40\x3a\x76\xbc\xec\xb2\x80\xe4\x34\x22\x29\x41\xfb\x57\x52\x2c\xfb\x5d\x84\xfa\x06\x2e\x8c\x15\x8c\x2b\x5b\xda\xef\xbb\x84\x67\xbd\xb0\x13\x5e\x2e\xa1\x0d\x12\x5e\xed\x52\xad\xa4\xd7\x96\x36\xd5\x81\xbd\x36\x61\x5c\x85\x8d\xa3\xbf\xfd\xf5\xf7\x21\x76\xf9\xe7\xbf\x71\xd1\xcb\x5f\x7f\x47\x75\x0e\x97\x46\x42\x31\xec\x80\x4b\x37\x74\x98\x1a\x0b\x1d\x70\x1d\xa3\xf1\x24\xd3\x96\x50\x94\x8c\xb5\xae\x38\x15\x6b\xd6\x04\xfa\x14\x46\xb3\xb1\xb0\x6b\xdd\x69\x62\x87\x6d\x0a\x95\xec\x74\xcb\xab\xfd\x69\x8a\x3f\xda\xfc\x2d\x5c\x79\xa6\x08\x77\xb8\x39\xfb\xe5\x32\x76\x87\x0d\x84\x61\x4a\x9d\x34\x58\x91\x0a\x56\x49\x4f\xcb\x23\xae\x27\x44\xce\xcd\x73\xa9\x42\xa5\xe6\x1f\x79\x84\x4c\xf4\xb4\x57\x13\x33\xf7\xfe\xc3\x54\x41\x33\xdc\x42\xbc\xa8\x65\x60\x03\x44\x35\xcc\x8c\xd5\x22\xa4\xcc\x0f\xf9\x0c\xf1\xea\xed\x81\xd0\x1f\x22\xf5\xf6\xb0\x13\x5a\x31\x72\xbc\xe8\x00\xf9\x8a\xdd\x21\x37\xe8\xcd\x1d\x82\xdd\x21\xe8\x1d\x72\x73\xf3\xed\x67\x66\x13\xfc\xb8\x49\x02\xe3\x69\x6b\x3b\xa7\x32\x1f\x5d\xdf\xf1\xb9\xb9\xc1\x44\x4d\xd7\x6c\x0d\x2c\x44\x77\xaf\xcd\x0f\xeb\x75\x71\x73\x87\xdc\xe0\x28\xc6\x7d\x47\xe9\xef\x28\x81\x60\xec\x3d\xce\xde\x93\xcc\x0f\x94\xc0\x49\x8e\xbe\x45\xf1\xa8\x9c\x89\xd8\x71\xd1\xfd\x0d\x45\xa8\xef\xa4\xad\x68\x1b\x9a\x92\x4e\x89\xa3\x29\xe6\x14\x4a\x84\xb8\xb6\xe0\xde\x97\x89\x9a\x7e\xf4\xbb\x8d\x54\x7a\x24\x89\x92\xec\x29\xf4\x48\x11\x28\x8a\x18\xad\x7e\xa5\xd2\xa0\x48\x8a\xc0\x4f\xa1\x41\x89\xae\xe7\xf4\x63\x78\x67\xd5\x34\x95\x04\x4d\xa0\xf8\x49\x62\xd0\x3e\x09\x6f\x9e\xcc\x41\x82\x25\x31\xea\x14\x12\x8c\xb8\x34\x14\x4d\xdd\xe6\x97\x82\xc5\x68\xfc\x24\x12\x6c\x48\x0a\x6f\xb3\x74\x0e\x3a\x0c\x49\x13\xa7\xd1\xd9\x75\x3a\x98\x4e\x4d\x38\x05\xb6\x61\xa6\xdb\x14\x87\x62\x28\x77\x0a\x7a\xce\x41\xef\x56\x46\xc5\x77\xc5\x4c\xc7\x8e\x33\xd8\x49\x5d\x8d\xa1\x0e\x7a\xaf\x17\x9c\x7c\x38\x9d\x00\xc5\x31\x27\x69\x07\xc3\x82\x04\xf6\x09\xd6\x6e\x02\x48\x27\xc4\xd1\xdc\x69\x92\xe0\xa1\x8e\xf6\x52\x5a\xf7\xe7\xb9\x69\x94\x30\x94\xa1\xc8\x93\x7a\x04\x23\x5c\x71\xf6\x85\x80\xd4\x1e\xc7\x30\x9c\xa1\x4f\x93\x84\x14\x55\xed\xdd\xff\xa9\x82\xb1\x5c\x88\xaa\x06\x17\xa9\x53\x23\x86\x51\x18\x76\xd2\x24\x8c\x51\xfe\x0a\x8d\x5f\x39\x7f\xcf\x10\x83\x66\x4e\x9b\xe6\x31\x5a\xd4\xf4\x29\xb4\x6c\xf1\xb8\x36\x9f\x41\x8a\xe1\xd8\xd3\x7a\x84\x09\x05\x05\xce\x22\x08\x48\x77\x26\x18\x8e\xa2\x04\xe9\x11\x49\xf0\xb5\xa9\x2b\xfa\xa7\x3a\xdb\xa3\x55\xfd\x60\xb8\x50\x2d\x8d\x1b\x55\xba\xdf\x26\x3b\xed\xba\xd0\x2d\xb5\xda\x95\x22\x43\xe0\x3c\x49\xd0\xcf\x54\xb7\x5d\x1e\xf4\x9b\xd5\xa7\x06\x53\x2d\x36\x4b\xad\x5e\xb3\x5e\xe9\x90\x03\x46\x98\x3c\x3d\x8e\xa2\x1a\x4a\x24\x82\x3b\x44\x70\xa2\x57\xc1\x6b\x23\x81\xc2\xf9\xd6\x78\x54\x19\xd5\x08\x7e\xf2\xc0\x8f\xc7\xd5\xf1\xf8\x11\x7f\xac\x8d\x27\x93\x3e\x2d\x4c\xc6\xc2\xb0\xdb\x28\x8f\x9f\x07\xfc\x13\xcd\x8c\x3b\x64\x6e\x22\xc4\x8e\x48\xb1\xdf\x9d\xd4\xea\x4d\xbc\x54\x27\x2a\xed\x1e\x59\x1c\x37\x2b\xad\x76\xb9\x59\x79\x18\xb5\xbb\x23\xbc\x36\x21\x9e\x5b\x95\x41\xad\xd3\x1e\x95\x84\x0e\x3f\x78\x62\x7a\x25\xa6\x33\xc6\x6b\x37\xe7\x6e\x0e\xd9\xc5\x8a\x19\xdd\xe0\x6d\xa8\x3b\xec\x85\xfd\x61\xc1\xf4\x8d\x13\x77\x08\x71\x87\xd8\xe6\x1a\xe6\x30\x8e\xe3\x2d\x11\x67\x9b\x86\x9b\xca\x04\x0d\x43\x36\xa1\xa2\xd9\x22\x58\xac\x66\x40\x5f\x2f\xc9\x9d\x39\x8f\x06\xe5\x9b\xcf\xb0\x99\x30\x75\x3c\x8b\xfa\xf9\xc6\x74\xce\x16\x84\xab\xf4\x72\x28\xed\xbb\x43\xf0\xbc\x7d\x1c\xb7\x03\xe1\xdc\x4e\xf6\x77\x21\x04\xf4\x8c\xe1\x2c\x4b\x72\x28\xc5\xb1\x94\x93\x02\xe0\xbb\x1c\xe0\x9f\x2f\x0b\x6d\xa9\xd9\x5f\xee\x91\x2f\x1c\x8e\x13\x04\x83\xa3\x04\xcd\x52\x3f\x48\x86\xa1\x58\x94\xf9\x72\x87\x7c\x39\xec\x78\xd9\x41\x8d\x06\xe5\xc3\x43\x7b\xbb\x72\x1e\x46\x7b\xf0\x00\xe1\xee\x7c\xd9\xc1\x9c\x6b\x48\x5f\xfe\x9b\x64\x4a\x51\x19\x31\x5f\x46\x0c\x45\x59\xec\xdf\x91\xf1\x3c\x73\xcd\x2f\x23\x7e\x87\xb0\x14\xcb\x71\x04\x4b\xb3\xdc\x3e\x93\xfb\xe7\x8b\x65\xef\xd2\x1c\x7d\x2a\x4a\x60\x01\x74\xd9\xe1\x18\x43\x51\xf4\x07\xea\x7e\xf2\x53\x20\xc2\x14\x70\x67\x92\xba\xf9\xe7\x8b\x1b\xea\x1c\xe1\x3d\xd2\x93\x0e\x6c\x6d\x03\xcf\x96\x88\xb8\x43\x30\x57\xa4\x37\xa8\x4d\x67\x3b\x82\xd8\x1d\xf2\xc5\x35\x7c\x71\x0e\xb7\xbf\x47\xcf\x98\xc7\x15\x89\x33\xde\x70\xf9\x2c\x3d\x7b\x14\x3e\x5d\xcf\x11\x89\x72\xea\xf9\x92\x31\x9b\x31\xdd\xc5\x6d\x34\x3a\x77\xba\xf3\x37\x1b\x05\x63\x04\x16\x40\x49\x91\xa0\x24\x4b\x38\x2e\x73\x90\xa5\x50\x00\x15\x52\x95\x31\x06\x05\x24\xad\xa2\xa4\xac\x48\x40\x61\x28\x86\x40\x49\x55\x65\x51\x49\x01\x90\xa3\x49\x46\x41\x39\x88\xd3\x10\xdf\xf9\x1f\x56\xc5\x70\x92\xa0\x24\x05\x03\x38\x81\x33\x34\x8e\xe3\x34\x47\x41\x4a\xa2\x29\x14\xe3\x80\x4a\x62\x10\x95\x48\x0c\x25\x38\x8a\x26\x49\x20\x13\x34\x0a\x24\x82\x54\x55\x4a\x61\x70\xa0\x28\xee\xf4\x8f\x47\xa2\x43\xfa\x9e\xa0\xef\x09\x22\x1a\x34\xba\x8f\xa9\x1f\x0c\x4e\xe0\x04\x9d\xf9\xd6\x9b\xcf\x31\x96\x65\xef\x10\x8c\xde\xf5\xe7\xd1\xe7\x0e\x21\x77\xff\x61\xde\x7f\xfe\x43\x6c\xff\xc7\xce\xfb\xf3\x3c\xcf\x97\x48\x76\xd0\xc3\x36\x7d\xe3\xe5\x01\xaf\x6b\xe0\x91\x92\x9e\x7b\x55\xc0\x15\xc9\x66\xaf\xd7\x79\x7c\x16\xcc\xf2\xa4\x61\xa1\x05\x0c\xdb\x9a\x8a\xcc\xac\x30\x05\xd7\x8c\x41\xc1\xa8\x36\xd6\xe4\x6b\xe3\x65\x3d\xc4\x64\xb4\xb2\x99\xbf\xda\xdb\x77\x7a\xa2\x3c\x61\x4d\xa9\xde\x9a\x34\xba\xf2\x0e\x35\x3f\xee\x3e\xb6\xe6\x3d\x7e\xff\x21\xb9\x0a\x86\x49\xab\xd1\xcb\x9c\x79\x7a\xac\xb5\x9f\x57\x1f\xed\xc1\xba\xfc\x2c\xdc\xd2\x0f\x78\xaf\x5f\xfa\x90\xd6\x96\xd9\x58\x3c\xcf\xe7\x74\x41\xa9\xf7\x9b\xd2\xe3\x40\x47\x4d\xae\xba\x1e\x60\x4f\x26\xb1\xe2\xad\x8e\x3c\x1b\x68\xcf\xb0\x49\x57\x9f\x39\x8e\x1a\x3e\x37\x51\x49\x23\x1c\xcc\xad\x36\xd9\x04\x1f\x2b\x3c\x40\x8c\xaf\x06\xbf\xec\x3f\xcf\xfc\x18\x23\x7b\x3c\x5f\x46\x1f\xe2\x5e\xff\x4f\x7f\x5c\xa3\x42\x13\xc6\x7d\x74\x28\xe0\xd7\x31\xe3\x1b\x9a\x50\x38\x56\xa5\x08\x1a\x42\x9a\x55\x30\x09\x67\x24\x4a\x62\x39\x15\x27\x80\x4a\x11\x18\x26\x31\x14\xcd\x01\x9c\x54\x81\x8a\x91\x28\x01\x14\x54\xa2\x70\x89\x26\x08\x09\x65\x24\xc8\x71\x69\x43\x01\x4f\x34\x76\x12\xc7\x71\x2e\xf3\xad\xeb\x40\x48\x8a\xc3\x53\x46\x02\x9e\x73\x24\xe0\xdd\xe7\x17\xac\xbd\xa6\x0c\x54\x7a\x60\x9e\x48\x7d\xdb\xd9\x8c\xde\xab\xc4\xe3\xca\x98\xdf\x6e\x2a\x7c\xc7\x2e\x61\x0d\xbc\xc5\x14\x19\xfa\x79\x4d\xd5\x38\xb9\xa6\xa0\xaf\xbc\xf5\xfc\xc2\xf5\xe8\x09\xbb\xad\xd7\x65\x7a\x6d\xcf\xd5\x42\xa9\x73\xdb\x5c\x16\xd0\x86\x64\xa9\xe6\x47\x77\xe4\xf4\x9c\x33\x12\x9c\xbf\xea\xfb\xff\x78\xc7\x3e\xad\xc3\xf7\x37\xbe\xdb\x73\x81\xf8\x2e\xda\x7d\x19\x10\x7d\x95\x99\x59\xec\xfb\x63\xbd\x38\xc5\xa7\xec\x7b\x63\xf3\xda\xe9\x14\xf4\xc2\xb4\x30\x7e\x9b\x76\xfb\x85\x5a\x91\x79\x85\xdc\xca\xd2\x1e\xd6\xe4\xbc\x5d\xeb\x93\xc6\xb8\x26\x0c\xeb\x0a\x89\x75\xdb\x0f\x63\x66\xf5\xf0\x6a\xa0\x38\x4f\x1a\xb7\x94\xde\x97\x88\x8f\xf5\x9b\x43\x2a\x66\xa4\x94\xeb\x71\xd6\xf6\xff\xcf\x48\xc1\xae\x63\xe5\xce\x02\xd8\x2e\x5c\xd8\xb9\x57\x8c\x63\xd0\xef\x28\xf6\x1d\xc5\x10\x14\xbd\x77\xfe\x25\x5a\x33\x45\x60\x1c\x99\xf9\x96\xc4\x39\x92\xa3\x19\x9c\xa3\x53\x6c\x3d\xde\xd2\x5d\x96\xfe\xed\x4e\x49\xfe\x14\xc7\x0d\x8d\xdc\x16\xb6\x83\x46\x91\x29\xeb\x65\xae\x86\xa3\xef\x2f\xc5\x5b\x0b\x9d\xda\xd6\x5b\xfd\xed\x03\x1b\x2b\x83\xa7\x09\x28\x3e\x80\xca\x74\x07\x2f\xc4\x18\x71\xfc\xc7\x37\x62\x9e\x2f\xce\x7f\x83\x20\x57\xfd\xdc\xb8\xc6\x94\x1d\x50\xe5\xd8\x62\x7a\x6e\x7c\x95\xb0\x72\x78\x94\x79\x79\xd9\x25\x9e\x30\xe2\x32\xd0\xe0\xd1\x04\xee\x3c\x34\x91\x0c\x86\x38\x0f\x0b\x19\xc9\x83\xce\xc3\x42\x45\xa2\xee\xf3\xb0\xd0\x91\x6c\xe4\x3a\x5b\x6e\xaf\x52\xed\x48\x5f\x0f\xbe\x43\xe8\xbc\xd5\x8f\x84\x8d\xa7\x17\x5b\x6c\xc0\x4a\x43\x05\x90\xfd\x17\xd2\x49\xef\xe8\x7c\x85\x02\xdb\x5c\x5b\x36\x84\x17\x25\x47\x3e\x1a\xe3\xb2\x9a\xc1\xff\x44\x69\xe6\x13\x0a\xbe\x89\x3d\xe7\xcf\x0a\xfb\x2f\xe8\xd9\x3d\x77\xbe\xca\x43\x3d\x77\xbe\x01\xfc\xfb\x05\xa7\x4f\xa8\xed\xc6\xf4\x5c\x70\x0a\xdd\xff\xcd\x06\x0a\x2a\xea\x5a\x57\x3c\x59\xce\xac\xe9\x3b\x7a\x71\x2b\xeb\x97\x76\x6e\x8e\xea\xce\x85\x8b\x0f\xa7\xa8\xcd\x9b\xed\xf7\x7f\x93\x9f\xab\xb6\xf3\x8d\xf9\xf3\xd5\x96\xe1\x3b\x62\x76\xd8\xe7\xf1\x1b\xd9\x58\xb3\x37\x1b\x9f\xeb\x9f\x12\x37\x29\xc5\xc6\x54\x64\x72\x00\x92\x89\x08\x8f\x4e\x99\xe7\x22\x22\xc2\x43\x38\x29\x96\xc9\xc4\x43\x86\xf1\x9c\x2d\x58\x64\x6c\x9c\xcd\x0f\x1d\x19\x63\xd7\xda\x84\x7d\x95\xf8\x2a\x6b\x1b\xda\x09\x11\x56\xe2\x26\xe4\x2b\xd8\x70\x70\xe3\x15\x64\x29\x85\x03\x04\x8e\x92\x28\x07\x65\x1a\xc5\x18\x94\xa1\x55\x54\x95\x08\x92\x45\x39\x45\x56\x18\x9c\xc0\x51\x5c\xa1\x80\x4a\x72\x2c\x50\x51\x92\xa0\x50\x15\x00\x0e\x30\x90\xa0\x31\x77\x59\x14\xbb\x24\xb2\x08\x54\x84\x08\x3f\x13\x4e\x2e\xa7\x92\x24\x9b\x52\x6c\x75\xdf\x86\x86\xa2\x9b\x42\x37\x9f\xc8\x0a\x0a\x67\x1d\x9a\xdf\x72\x25\xb4\x6b\x55\x85\xe9\x46\xc6\x18\x0c\x1b\x71\xec\xe4\x85\x5c\x36\xe7\x4b\xae\xc7\x50\xf3\x12\xb1\xe1\x9d\x14\x94\xf7\x4b\x3c\xc5\x48\x86\x17\xf8\x3e\x71\xbe\x3f\x3e\xb6\x05\xf7\x7b\x69\x6d\x10\x86\x4d\x52\xaf\xa5\xae\xf0\xbe\xea\x15\x08\xa3\xd6\xbe\xfd\xc0\x98\xfe\x56\xb3\xb0\x85\xda\xaa\x4c\x96\xbd\xa7\xa9\xb9\x1e\xdc\x0e\x6b\x85\xfd\xe7\x80\xaf\xb6\xa7\xdf\x6b\x58\xe3\xd2\xb0\x07\xac\xf9\x0a\x9b\xda\x7a\x5d\x7d\xe3\x87\xec\x6d\xa3\x31\xc1\x6f\x67\xcd\x82\xb4\x61\x46\xad\x4a\xf3\xa1\x50\xfb\xe0\xd6\xd6\x54\x57\x54\x6a\x3c\x13\x0a\x34\x25\x54\x1e\x38\x82\x5e\x73\x9c\x3c\xb3\x3b\xa0\x55\x9a\x94\x6b\x95\xf1\x87\xc5\x57\x0a\x05\xbc\x69\x4c\x5b\xbf\x6e\x82\x25\x85\x60\xb1\xf5\xf0\x67\x35\x20\xeb\x01\xbe\xb7\xd7\x47\xd9\xf9\xfe\x76\x00\xb2\xa5\xe9\xb8\x4f\x0b\x8c\x51\x6e\xa2\xcd\xde\xed\xdb\x64\x50\xe2\x3e\xc6\x9b\xf1\xe3\x90\x78\xd7\xba\xda\x64\x3d\x90\xb0\xf2\x66\xd9\x6b\x42\xd6\x51\xd2\x23\xbf\x79\xd1\x0f\xfa\x4d\xf8\x08\x49\x2f\x8a\x57\xa6\x1f\xed\xdf\x13\xe8\xb7\x0e\xfa\x70\x3e\x25\x6c\x5d\x54\x6a\xc6\x70\x3d\x6d\x6d\x7a\x76\x99\x29\xce\xea\x4d\xa2\x0d\x39\xe5\xb1\xab\x56\xeb\xb7\x0f\x1a\xf5\xb0\x19\x75\x6e\x9f\x79\x9b\x71\xda\x3f\x8c\x4a\xb7\x1d\xb7\xec\x3e\x4d\xa1\x99\x58\x31\x11\x3e\x83\xfe\xb1\x3e\xd2\x2b\x36\xe5\x03\xcc\xa9\xf4\x2b\x8f\x23\xd4\x43\xde\xa0\x5f\xa0\x46\xbc\x2c\x8d\x3a\x3b\xac\x2e\xca\x05\x38\x95\x09\xa6\x3b\xb6\x6b\x8d\xc6\xc7\xd3\x23\xfb\xf6\xa8\x3d\x17\x41\x69\x4d\x35\xa9\x56\xa0\x2b\x0e\x83\xe8\x2d\xaa\xbf\x5f\x07\xdb\x75\x64\x73\x9a\x95\x2e\xd3\x95\xc7\xeb\x34\x45\x1b\xbf\xad\xaf\x4e\xa1\xef\xea\xe2\x9f\xd7\x77\xf9\xa1\x5d\x7c\xdd\x0e\xf4\xa7\x12\x2e\xcf\x0a\x7c\xb1\xfb\x41\x1a\xab\x17\x89\x16\x36\xdc\xba\x60\xf7\xde\x46\x96\xce\xaa\x5d\x9c\xde\x96\x14\xac\xb0\x80\xc2\xb0\x60\xce\x7b\x23\x9d\x50\x5f\x19\x02\xdb\x56\x51\xca\x78\x7b\x98\xb6\xe4\x47\xb5\xf3\xc6\x8f\x0b\x85\xc9\x5a\xe3\xdf\x7e\xfd\x72\x02\x46\xe7\x67\x06\x7e\x3d\xd5\xfd\x7f\xe7\xe8\x9c\x09\x3d\xdb\xd7\x07\x3c\x92\xa4\x90\x2c\xad\x48\x8a\x82\xe2\x0a\x49\xa3\x2c\xc6\xd0\x0c\x26\x93\x80\x02\x0c\xe4\x14\x1a\xb2\x34\x25\x03\x9c\x93\x25\x12\x83\x34\xae\x30\x00\xa8\x0c\x0a\x70\x15\x42\x4a\x22\x68\x05\xba\x1e\x09\xbf\x24\x63\x3a\xcd\x23\xd1\x5c\xda\xe2\xa0\xfb\x36\x14\xd3\xb9\x56\x79\xa2\xc5\x9f\xe9\x91\xf2\x5b\x19\x11\xe7\x91\xaa\x7b\xfa\xbd\x22\x37\x5f\x36\x9e\xf0\x57\x62\xc3\xf4\xd4\x2d\xdb\x6d\xc1\xb9\x20\x61\xc3\x61\x9d\xd2\xde\x5f\xe7\x75\xb4\x68\x4c\xc7\x66\xc7\x66\xa6\x1d\x8c\xc6\x7b\xd2\x7c\x86\x2b\x83\xe1\x48\x85\x65\x63\x23\xa3\x5d\x1e\xa8\xb3\xf2\xf8\xdd\x9e\x3d\xf2\x0b\xab\xb9\x7e\x59\x14\x97\xdb\x97\x22\x3f\xf9\x14\x8f\x64\xbe\xb6\xe9\x26\xec\x80\xe9\xcb\x7b\x0b\x8c\xba\x1c\x5d\xfc\x50\x2d\x0e\xa2\xb2\x61\xb6\x9f\xc7\x1f\xc5\xa7\x87\x79\xc5\x68\x30\xf3\xcd\xdc\x69\x74\x75\x8f\x74\x21\xfd\x6b\x7a\xa4\xfc\x11\x89\x03\x7f\x75\x8f\x74\x0d\xfa\x97\x78\xa4\x13\xe9\x07\x3c\xd2\x89\x11\xa3\xd7\x15\x97\x78\xa4\x33\x74\x75\x55\x8f\x74\x61\x5f\x9d\x42\xdf\xf3\x48\x35\x7c\x30\x59\x49\xc0\x84\x05\xbb\x58\x68\xbe\xb1\xef\x74\xaf\xbf\x79\x6c\xb7\x5e\x96\xcd\xea\x6b\xef\xa5\x57\xd5\x8a\xd0\xa2\x89\x35\xcf\x8c\xcd\xe7\xe2\x7a\x50\x7b\xc6\x1e\xda\x7d\x8e\xec\x68\xdc\x47\x8f\x2d\xae\x6e\x85\xb6\x5a\xc5\x2b\xa3\xd2\xd3\xdb\x9a\xee\x8c\xaa\x52\xa3\x25\x14\xa7\xd7\xf6\x48\x8a\x44\x70\x2c\x94\x48\x00\x59\x8e\xa1\x68\x02\xa7\x68\x92\x90\x81\x82\x63\x32\x47\x42\x8c\x90\x54\x19\x65\x48\x89\xc0\x09\x08\x59\x02\x62\x24\x26\xa9\x0c\x8a\x01\x4a\xe1\x50\x52\xc5\x24\x77\x61\x13\xbb\xa4\xaa\xe2\x34\x4f\x77\x44\x64\xda\x36\x94\xdd\x4b\xec\x26\x9c\xca\xbb\xa6\x58\x6d\xb2\xb5\xde\xa6\x37\x97\x1a\x78\x8d\x27\x9e\x1e\x5f\xfa\x66\x63\xf9\x32\x46\x51\xb5\xca\x5a\xcd\x3a\xb3\x44\x85\xfe\xdb\xc3\x53\x81\x1f\x3b\xbb\x36\x9e\x0f\x7d\x98\xe2\x86\xdc\xcf\x19\x81\x79\x70\xbd\xaf\xf8\xb8\x79\xab\x70\x6f\x8e\xa5\x4e\x5e\x7a\x72\x77\x88\x57\xa9\xd9\xab\x5e\x5c\x4e\xab\x55\x38\xe5\x1e\xd8\x05\x29\x63\x82\x3e\x5a\xbc\xcf\x17\xc2\xa2\xc6\x59\xaf\xcf\x26\xca\x31\x58\x85\xee\x34\x9f\x54\x58\x58\x92\xf3\x55\xc5\xae\xdf\x5a\x75\x54\xc3\x5e\x9b\x9a\x4d\xf1\xe8\xc3\xf6\x49\x97\x66\x93\xe6\x13\x65\x94\x73\xb8\x9e\x90\xcd\x86\x5d\x4f\x40\xe6\xc3\xd4\x1b\x18\xce\x45\xad\x50\x44\x9b\xe8\x43\x75\x6b\xcf\xde\xda\xd8\x62\x82\x82\xed\xca\xc0\xb8\x76\xed\x7d\xd3\x2c\x6d\x3b\x94\x5d\x14\xe4\x92\x2b\x23\x31\xb5\xcd\x8e\x3e\x29\xb0\xe4\xa1\x7d\x82\x2b\x4a\x1f\xce\x17\xd0\xaf\x0c\x9f\x8a\xd6\x05\xf4\x79\xfe\xdf\x0b\xb0\x63\xa7\xd6\xe2\xf9\xba\xe8\xe8\xcf\xa9\x62\x66\xe9\xe2\xd2\xbe\xd8\xd9\xc2\xad\x1c\xc1\x77\x92\x2e\xfe\xa9\xd6\xd1\x5a\x19\xe5\x66\xeb\x09\x58\xbd\x3d\x1b\xc5\x99\x6e\x74\x07\xea\x03\xac\xb5\xfb\x0f\xd8\x83\xfc\xfc\xd0\x7f\xe8\x17\xa4\xc6\x12\x70\x5d\xc8\xf5\xe1\x8b\x86\xe9\xc4\x86\x5a\x3f\x34\xfa\xd2\xa0\x6b\x96\xda\x75\x1b\x68\xa4\x09\x7b\xed\x92\xbc\x58\xe1\xe4\x53\x09\x5b\x83\xeb\x07\xfb\x2a\xc7\xc8\x40\x55\x81\xc4\xca\x18\x8d\xe2\x04\x20\x18\x96\x25\x31\x9a\x92\x25\x54\x22\x54\x15\x03\x00\x57\x80\x4a\xa2\x28\xaa\x42\x95\xe4\x14\x1c\x83\xaa\xcc\x92\x8c\xa2\x48\xaa\x04\xc1\x61\x9f\xd2\x05\x53\x2b\x9e\x3d\xb5\x52\x04\x93\x32\xb7\xba\x6f\x83\x65\xc9\x4b\xe7\xd6\x52\xa4\x53\x8f\xe6\xd6\x33\x42\xcc\x84\xb9\xb5\xb8\x6c\xac\x06\xd3\x8d\xf9\xd6\xe8\xe0\xe8\xb8\xd4\x51\x27\xea\xd8\xaa\x0a\xc2\xc8\x7e\x9b\x00\x20\xa8\xaf\x83\x35\xbd\x5d\x3e\x2c\x17\xe5\x25\xb8\xad\x8f\xe9\x3a\x53\x9f\x4e\xa5\xd1\x73\xcb\x90\x7b\xca\x33\x47\xd6\x5b\xbc\xda\x50\x7a\x7c\xfb\x75\x2c\xd5\x3b\xcc\xd6\x7a\x83\xb0\x55\xfa\xdf\x9a\x5b\x2f\x9d\xdb\x2e\x1c\xcf\xaf\x4c\x61\x58\x96\xaf\x39\xb7\xfe\xc6\x50\x31\x2b\x6c\xfd\x9d\x73\x1b\x7f\xa5\xb9\xf5\x5c\x3f\xeb\xcd\xad\xcf\xda\xeb\xc8\x68\xd2\x6c\xe9\xc5\xb6\x2b\x6f\x2f\x3a\x5e\xc3\x98\xe2\xac\x58\x69\xca\xd5\xea\x72\x56\xa3\xe7\xe6\xda\x5a\x69\xcf\xab\x1e\xb5\xdc\x68\x95\x5b\xad\xb3\xad\xd7\xab\x58\x75\xd8\xa8\x09\xb5\x27\x15\x96\xca\x7c\x6d\xab\x8f\xf8\x32\x58\xe0\xdb\xf2\x9a\x35\x5b\x35\xfd\x85\xcf\x19\xb6\x26\x9e\x70\x7c\x7c\x01\xd0\xfe\xb2\x01\xff\xac\x9f\x53\x7f\xa3\x1f\xc0\xe8\x1e\x46\x5e\x2e\x07\x4f\x0e\x8a\x12\x44\xba\xfd\x7a\x8b\xef\x4f\x90\x86\x30\x41\xbe\x6a\x4a\xd6\x21\xc4\xf1\x17\x22\x5d\xcc\x75\x04\x6b\x1c\xe7\x71\x84\x33\xb9\x8f\xfc\x28\xea\xbc\x0b\xa5\x2e\x96\x2e\x4c\x36\x4e\xb8\xb3\x18\x43\x46\xed\x7a\x6f\x24\x20\x5f\x0f\xe0\x77\x81\xd3\x76\xef\x42\x67\xe3\x9e\xa8\x9a\xeb\x74\xeb\xc9\x82\x9f\xd4\xa9\x09\x7b\xba\x32\x36\x4e\x5d\x57\xb2\x78\x22\x69\x92\xa6\xb0\x95\x5b\xf2\xc4\x15\xd7\xcc\x45\xcd\xeb\x4a\x9f\x44\x26\x4d\xfe\x54\xd6\x32\x35\x10\xbe\xd0\xcf\x13\xc4\xb9\xfc\x2f\xdf\x41\x4f\xee\x3d\x81\x21\x2c\x48\xa7\x1d\x1d\x0c\xa3\x41\xbd\x5d\x45\x24\xdb\x84\x30\x38\xba\x92\xb9\xf1\xee\x22\xbc\x98\x1f\xef\x1c\xeb\x5c\x1c\x25\x8c\xeb\xc0\x3d\x8a\xe7\xb2\x73\x40\x11\xe4\x24\x94\x0d\x84\xf9\x71\x81\xef\x8e\x8e\x9d\x8a\x63\xce\xb9\x09\xf2\x02\xce\x9c\xd3\xb7\x72\xb1\x15\x3d\xb3\x2b\x8e\x1b\xef\xfa\xca\x0b\xf8\x71\x31\xe4\xe3\x28\x72\x20\xd8\xdd\xf1\xd9\x5f\xb1\x43\x3e\x78\x1f\xe7\xe9\x9c\x7a\x5e\xc2\x65\x38\x82\x2e\xc8\xb6\xff\x7b\xb6\x10\xc7\x71\xc7\x60\xde\xf9\x47\x5e\x26\x31\x7b\x38\x68\xe8\x42\x36\x35\x25\x37\x83\x87\x33\xff\xee\x62\xcf\xee\xcc\x60\xda\xbf\x42\xf5\x1a\x7c\x7b\xb8\x82\xac\x27\xb8\xaa\xb3\x24\x89\x17\xc0\xbf\x2d\xf6\x1a\x02\x78\xb8\x12\x6c\xfa\x4c\x11\xc2\x07\x38\x1e\x0b\x11\xb8\x1b\xf7\xdc\xd1\x18\xc0\x71\xae\xf2\xd3\x15\x1d\xb9\xec\xf7\x52\x5d\x87\xd1\x05\x59\xf6\x7f\x39\x13\xe2\x31\x9e\xa3\xe3\x0b\x8b\x2f\x67\xeb\x08\x67\xbe\xe9\x2d\x8e\xc1\xc0\xd5\xcb\x67\x77\xeb\x01\xc7\xf9\x26\x99\x65\x7e\x71\x97\x4a\x9f\xcf\xf0\x31\xb2\x08\xe7\x0a\x8c\xf0\x19\x39\xce\x37\x9d\x41\xf7\x96\xec\xab\xb0\xe7\xa0\xca\xc5\x9c\x7f\x4c\x4e\x22\x6b\xd1\x5b\xbf\x2f\xe5\x2f\x82\x2f\x8b\xc9\xe3\x73\x8a\x33\x39\xbd\x8e\x1e\x43\xd8\xf2\x72\x99\xa9\xcd\xeb\xf0\x96\x8b\xa7\x74\x5e\x22\xd7\xcb\x5f\xc4\x51\x18\x57\xee\x1e\xf5\x4f\x42\x8e\xe5\xef\xe8\xc6\xfc\x8b\x38\x8c\x62\xcb\x37\x6e\x3d\x06\xef\x8e\x0e\x6f\xbe\x3b\x3a\x00\x3c\x41\x88\x2b\xcc\xdb\x1e\x9e\x2c\x8e\x4f\x8c\x8e\x76\x58\xaf\xa6\xdd\x13\x14\x9b\xa9\x37\xf7\xf4\xc1\xa3\xa3\x7f\x0c\x5d\xf4\x6e\x45\xba\x54\xa1\x99\x04\x42\x79\x9a\x7f\x8a\x52\x38\x33\x72\x01\x4f\xe0\xfd\x72\x3b\x48\xc3\x9d\xcd\x71\xcc\x28\x0b\x23\xf4\xa2\xf0\x1d\x3e\x7b\xbb\x3a\x3f\x07\x4f\xc5\x9a\x19\xf6\xef\x80\x32\x18\xf5\x62\xa8\x1d\xca\xbd\x11\x5d\x89\xdb\x38\xd4\x99\xe1\x5b\x5e\x4b\x0e\x20\xbf\xb6\x31\x84\x50\x9f\x13\x6f\x26\xa3\x8b\x5c\x81\x73\x7d\x45\x1f\x5d\xb2\x93\xc9\x7e\xa4\x41\x7e\x61\x02\x77\x1e\x7d\x9a\xfe\x83\xf7\x2a\x65\x49\x12\x80\xcd\x2f\x44\xdc\x0d\x4e\x9f\x26\x4d\xec\x75\x51\x59\x62\xc5\x35\xca\x2f\x9f\x5f\x44\xf9\x34\x99\xf6\x67\xa7\x67\xc9\x91\x58\xed\x0a\xa3\x3e\xfc\x0a\xed\x33\x86\x76\x14\x7b\x6c\x02\x7c\xea\x00\x0f\x23\x0d\xa7\x50\x57\x1a\xe1\x69\x24\xf2\xc8\x90\x91\xd7\xa5\x12\xbb\x9e\xfb\x3a\x46\x9c\x8b\xf7\x6c\x27\x16\x4c\xb6\x3f\xc3\x6c\x8e\xf1\x9f\x9d\xea\xbb\x87\xa9\xfa\x8e\xdc\xaf\x30\x8a\x92\x61\xcc\xcf\xd6\x72\x0a\xce\xcc\x10\xe1\xeb\x57\xff\x3e\xa2\xef\xff\xf9\x0f\x72\x63\x19\x0b\x25\xb0\x9a\x76\x73\x7f\x6f\xc3\x77\xfb\xdb\xb7\x3b\x24\x19\x50\x36\x94\x7c\x80\x6e\x2d\x3e\x19\x54\x32\xd6\xd3\x99\x9d\x8b\x7c\x08\x34\x9d\x81\x10\x68\x84\x85\x6f\xc8\x53\x4d\xe8\x0b\xae\x91\x21\xbf\x10\x82\xc8\xbd\x10\xad\x29\xa2\x1a\x58\x26\xaa\x34\x7e\xcf\x72\xb4\x47\x16\xa9\x74\xfa\x42\xbd\xda\xde\x2f\x01\x21\x7d\xa1\x22\xf4\x85\x76\x49\x18\x44\x56\x45\x9c\xb7\x9d\x36\x32\xea\x96\x77\x26\xd3\x17\xdc\x4b\xb8\x77\x8f\xca\x42\x53\x18\x0a\x48\x89\x1f\x94\xf8\xb2\x90\x7e\x71\x54\xe4\xab\x18\x29\xc5\x5c\x4f\x19\x61\x3a\x19\x8b\x64\x49\x9c\x84\xf5\x13\x2d\x1b\xc5\x2a\xcb\x0b\xf4\x33\x56\x14\x13\x35\xe1\xa5\xb2\xff\xba\x1e\x82\x7c\xc4\x69\xc1\xaf\x12\xa4\x1b\xcc\x69\x1a\x38\x2e\x2a\xfd\x8b\x6a\x48\x60\x26\xac\x8b\x98\x32\xd8\x75\x8d\x22\x5a\xe2\xf8\x5f\x50\x48\xb2\x69\x1c\xd5\x90\xf2\x5a\x47\xd7\xb0\xec\xa9\x09\x07\xbd\x26\xa2\x00\x1b\xec\x4c\x0c\x51\xd6\xcb\x15\x22\x1b\xcb\xd5\x02\xda\xd0\x91\xe1\xff\x05\x00\x00\xff\xff\xd5\x4a\x60\xf6\x0c\x99\x00\x00") - -func asset_stat_trustlines_4HorizonSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_trustlines_4HorizonSql, - "asset_stat_trustlines_4-horizon.sql", - ) -} - -func asset_stat_trustlines_4HorizonSql() (*asset, error) { - bytes, err := asset_stat_trustlines_4HorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_trustlines_4-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x45, 0x56, 0x5c, 0xa3, 0x94, 0x24, 0x8, 0xe1, 0x88, 0xb2, 0x7d, 0xee, 0x23, 0x58, 0xc2, 0xb9, 0xa, 0x93, 0xbb, 0x6f, 0x29, 0x7d, 0xb9, 0x17, 0x3e, 0x6a, 0x66, 0x74, 0x6c, 0xbd, 0xa8, 0x52}} - return a, nil -} - -var _asset_stat_trustlines_5CoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xd9\x92\xe2\x48\xb3\xe6\x7d\x3d\x85\xac\x6e\xb2\xda\xc8\x6e\xb4\x2f\x55\x53\xbf\x99\x00\x01\x02\xb1\xef\x8c\x8d\x95\x45\x48\x21\x21\x52\x1b\x5a\xd8\x8e\x9d\x77\x1f\x43\x6c\x02\x04\x49\x42\x56\xf7\x8c\x9d\xd6\x45\x77\x25\x72\x3e\xff\xc2\xc3\xc3\xc3\x23\x42\xb8\xfe\xfc\xf3\xcb\x9f\x7f\x62\x4d\x37\x08\x0d\x1f\x75\x5a\x0a\xa6\x81\x10\x40\x10\x20\x4c\x8b\x6c\xef\xcb\x9f\x7f\x7e\xd9\xdc\x2f\x44\xb6\x87\x34\x4c\xf7\x5d\xfb\x28\x30\x47\x7e\x60\xba\x0e\x26\xfc\xc5\xfe\x45\x24\xa4\xe0\x0a\xf3\x8c\x5f\x9b\xaf\x9f\x89\x7c\xe9\x48\x5d\x2c\x08\x41\x88\x6c\xe4\x84\xbf\x42\xd3\x46\x6e\x14\x62\x3f\x31\xfc\x47\x7c\xcb\x72\xd5\xb7\xcb\x4f\x4d\xcd\x42\xbf\x4c\xe7\x57\xe8\x03\x27\x00\x6a\x68\xba\xce\xaf\x00\x05\x1b\xdc\x4b\x61\xd5\x32\x37\xd0\xc8\x51\x5d\xcd\x74\x0c\xec\x27\xf6\xd2\xeb\x16\xf9\x97\x1f\x7b\xdd\x8e\x06\x7c\xed\x97\xea\x3a\xba\xeb\xdb\xa6\x63\xfc\x0a\x42\xdf\x74\x8c\x00\xfb\x89\xb9\xce\x0e\x63\x82\xd4\xb7\x5f\x7a\xe4\x6c\x75\x41\x57\x33\xd1\xe6\xbe\x0e\xac\x00\x9d\xa8\xb1\x4d\xe7\x97\x8d\x82\x00\x18\xb1\xc0\x02\xf8\x8e\xe9\x18\x5b\x11\xdf\x5d\xfc\x0a\x90\x1a\xf9\x66\xb8\xda\x80\xeb\xfa\x8f\x9d\x01\x10\xf0\xd5\xc9\x2f\x0f\x84\x13\xec\x27\xe6\x45\xd0\x32\xd5\xd7\x8d\xc5\x54\x10\x02\xcb\x35\x7e\x7c\xf9\x52\x68\x37\x9a\x98\x5c\x2f\x48\x43\x4c\x2e\x62\xd2\x50\xee\x74\x3b\x3b\xc9\xbf\x22\xcf\xf0\x81\x86\x26\x66\x10\xc2\x55\x80\x66\x3f\x6e\x4a\x07\xaa\x37\x8b\x5c\x3f\xb2\x83\xfb\x84\x91\x33\xbf\x47\xd2\x42\x9a\x81\xfc\x7b\x24\x37\x3c\x75\x84\xee\x94\xbc\x43\x0c\xa2\x20\x74\x75\x1d\xf9\xa6\xa3\xa1\xe5\x6d\x59\xa0\xaa\x6e\xe4\x84\x10\x58\xc0\x51\x51\xf0\xe3\x8b\xa8\x74\xa5\x36\xd6\x15\x73\x8a\x94\x90\x6e\xd4\x95\x51\x8a\x79\x5d\x7f\x85\xc5\xe8\xf9\x46\xbd\xd3\x6d\x8b\x72\xbd\x9b\xf8\xd2\xa9\xe0\x2f\xef\x0d\xad\xee\xc1\x0f\x97\xef\x43\x1f\x64\x3e\x80\xaa\xa3\x3b\x38\x27\xc5\xee\xc7\xf6\xa3\x20\xb4\x4c\x07\x05\xb7\x90\x0f\x42\x77\xe3\x6e\x58\xa0\x38\x1a\xdc\xc0\x3d\x0a\xdd\x8f\x7b\x70\xf9\x5b\xb8\x07\xa1\xbb\x71\xb7\xf2\xa6\xa3\xbb\x37\x70\x8f\x42\x77\xe3\x7a\x11\x0c\x22\x78\x03\x73\x2b\xf0\x11\x3c\xcb\x0c\x26\xb3\x08\x45\xb7\x2c\x9b\x14\xbb\x1f\x1b\x21\xff\x96\x59\xe3\xfb\x77\xa3\xc5\xc3\xf8\x16\xdc\x56\xe0\x6e\xbc\x6d\x54\x9a\x20\xa0\xdd\x86\x3d\x91\xfb\xcd\xe8\xbb\x48\x89\x66\xbf\xee\x54\x03\x81\x73\x03\x1c\x02\xe7\x6e\xc2\xbb\xe8\x77\x8b\xeb\x5e\xe4\xa3\x98\x9b\x1c\xe0\x7d\xd8\x8d\xd4\x0e\x39\x96\x3d\x07\x4e\x0d\xb9\xb7\x65\x0f\xa1\xf1\x3d\xb1\x63\xa0\x7b\x47\xf2\x10\xb8\x6e\xcb\x1d\x03\xd1\x3b\x72\x87\xc0\xf2\xae\xdc\x5d\xfc\x8e\x01\xe5\xb6\xdc\x36\x48\xbc\x2b\x73\x18\xf2\xef\x48\x6e\xc6\xf1\x6d\x91\xed\xd8\xbc\x2d\x73\x32\x14\x6e\x8b\x42\xe0\xdc\x16\xd8\xbb\xea\x5d\x52\x1b\xcf\xdb\x09\x4a\xc3\xae\x54\xef\xc8\x8d\x7a\x52\xd8\xf2\x8c\x60\x66\xed\x24\x3a\xf9\xb2\x54\x13\x2f\xb0\x7e\x7c\xd9\xe6\xc6\x75\x60\xa3\xef\xfb\xcf\xb0\xee\xca\x43\xdf\x77\x5f\xf9\x81\x75\xd4\x09\xb2\xc1\x77\xec\xcf\x1f\x58\x63\xe1\x20\xff\x3b\xf6\x67\x9c\x32\xe7\xdb\x92\xd8\x95\xf6\xc8\x7b\xbc\x2f\x27\x88\xa7\x37\x77\xc0\xf9\x46\xad\x26\xd5\xbb\x37\x90\xb7\x02\x58\xa3\x7e\x0a\x80\xc9\x1d\xec\x65\x9f\xdf\xee\x3f\x0b\x62\x90\x97\x73\xcd\xfb\xe6\xef\x74\x1e\x2c\xf4\x6e\x7b\x4e\x6c\x59\x6f\x74\xcf\xec\x89\x0d\xe4\x6e\xf9\x40\x2b\x99\xd0\x9e\xa8\x3f\xa2\x9c\x11\xf9\x48\xe3\x2f\x40\x62\x03\x34\x95\xac\x67\x6c\x56\x31\x9e\xef\xaa\x48\x8b\x7c\x60\x61\x16\x70\x8c\x08\x18\x28\x36\xc3\x9d\x09\xf8\x46\x4c\x43\x3a\x88\xac\xf0\x57\x08\xa0\x85\x02\x0f\xa8\x68\xb3\x9a\x78\x39\xbb\xbb\x30\xc3\xc9\x2f\xd7\xd4\x12\x0b\x84\x93\xc6\x26\x1d\x72\xd7\xcc\xd8\x75\x8f\x8d\xdc\x3b\x40\x9a\xc1\xb7\x5e\x9e\x0c\xba\xdf\xbe\x60\x18\xb6\xff\xc4\xd4\x30\x75\x02\x7c\xa0\x86\xc8\xc7\xe6\xc0\x5f\x99\x8e\xf1\x8d\x61\xff\x88\xfb\xa6\xde\x53\x94\xd7\x58\x7a\xf3\x45\x07\xd8\x28\x45\x98\xe7\xd3\x84\xe7\xc0\x8a\xd2\xa4\x09\x82\x3c\x17\xb7\x40\x10\xda\xae\x66\xea\x26\xd2\x30\xd3\x09\x91\x81\xfc\x83\xc8\x97\x3f\xce\xfb\xfe\x30\x8a\x9f\xb4\x45\xf0\x90\x21\x76\x0b\x01\x0c\x9a\x86\xe9\x84\x67\x37\x03\x34\x73\x22\x3b\xfd\x9e\x13\xd9\x41\x04\x91\x13\xfa\x9b\xa5\xe0\x79\x33\xb7\x32\xa6\xa3\x5b\x60\xb3\x62\xd4\x50\x10\xa6\xd3\xd9\x0a\x4e\x5c\x1b\x69\xae\x0d\x4c\x27\x45\x8a\xa6\xcf\x49\x87\x13\x1f\x05\x13\xd7\xd2\x02\x2c\x44\xcb\x73\x66\xba\x05\x8c\x6b\x8c\x6e\xf6\xcd\xce\x22\xd1\x46\xab\x65\x02\x68\x5a\x66\xb8\x69\xdc\xb6\xfd\x7b\x93\x58\xd6\xad\xdb\xa6\xe1\x6c\x72\xa1\x0d\xad\xed\x27\x89\x6c\xe0\x90\x5a\xec\x8c\xfe\x2b\x5e\x56\x63\xf9\xb2\x94\xaf\x62\xdf\xbe\xed\xbb\xe2\x3f\x3f\x31\xfc\x8f\x3f\x6e\x7c\xfb\x9c\xe0\x39\xce\x45\x03\xde\x43\x3c\xe9\xcb\x33\xb4\xd3\x7e\x7e\x0f\xe9\xd2\x3c\x67\x70\x29\xf6\xdb\x62\x5e\x0e\x8c\xcd\xfc\xf7\xe8\x98\xd8\xa4\x8c\xdb\xe1\xe0\xb8\x1a\x4a\x8e\x85\x93\x31\x70\xa9\xf4\x74\x7e\x7e\x54\xfd\x69\x62\xbc\x25\xb2\xfb\x0c\x04\x93\x04\x19\xf6\xc2\xb7\x3d\x1f\xcd\xdf\x15\x82\x91\xfa\x86\x42\xcb\x0c\xc2\x77\x45\x0f\xd9\xf6\xde\xdd\xb7\x1f\xab\x96\x1b\xa0\xd0\xb4\xaf\x8c\xfc\x38\xb0\xa6\x8c\xad\x44\x9f\x9f\x26\xf5\x07\xbc\xb3\xfe\x3e\xea\xb9\xe2\x3a\xd7\xd6\x06\xa7\x30\xc7\x56\x5c\xf3\x96\x5d\xf2\xf5\x68\x8f\xed\x16\x5e\xdf\x0e\x83\x1c\xf9\x77\x46\xd0\xed\xce\x8b\x76\x2d\x82\xc6\xee\x0e\x82\x00\x85\x69\xf6\xdc\x8e\xd5\xab\xb7\x81\xbd\x19\x56\xe9\xd0\x9e\x6f\xaa\xc8\xb9\x12\xc4\xe2\x9b\xd7\x22\x5c\x7c\x13\xd3\xdc\x08\x5a\x68\xe3\x6f\xaa\x19\xef\x48\x7e\x6a\x14\x4d\xf4\xf0\x6e\xc9\xba\x6d\xcb\x59\xbf\xee\x1a\x78\xc5\x37\x76\xdf\xdc\x59\xf8\xec\xab\x7b\xbb\x5f\x73\x88\x6d\xc2\xfe\xa8\x3f\x6c\x97\xf5\x5b\x77\x30\xbd\xb4\x89\x9f\xb9\x18\xb9\xae\x1f\x1e\xac\x51\x90\x8a\x62\x4f\xe9\x62\xf8\xf9\xb4\x89\x96\x21\x08\x43\x64\x7b\x21\xb6\x19\x16\x41\x08\x6c\x0f\xdb\xa4\x4c\x6e\xb4\xfd\x04\x5b\xbb\x0e\xba\x9c\x6c\x75\x60\x5a\x91\x9f\x98\x6a\xaf\x69\x08\x57\x1e\x7a\xbf\x53\xb6\xdb\x12\x09\xdc\xcb\xb0\x7f\xd0\x78\xa5\x77\x76\x3b\x1b\xae\x7f\xde\xa9\xdf\x62\x4b\xfc\x07\xc3\xff\xc0\xc4\x7a\x01\xdb\xfe\xf9\xbf\x7e\x62\x2c\xc3\x50\xcc\x1f\xa9\x7d\x95\x5c\x86\x3d\xdc\x65\xc9\x5d\x9e\x64\xcc\xbd\x62\x8d\xed\x46\xdb\x66\xd4\xa5\x12\xda\xac\x1d\x9f\xa0\x12\x44\x70\x47\xc2\x47\xc1\xc9\x04\x44\xa5\x66\x8c\x3e\x02\x87\xb1\x74\xc9\x27\xb1\xe6\x7d\x94\x53\x62\xb3\xee\x8e\x99\x71\x4b\x6c\x16\xa0\x5b\x33\xcc\x25\xcf\xc4\x1a\xfe\x51\x9e\x47\x88\xfb\x79\x5e\x4c\x72\x67\xf7\x91\x33\x47\x96\xeb\xa1\x77\xa6\xb4\xa3\xea\x27\x26\xa2\xc4\x76\xc7\x13\x26\xd8\xef\xd7\x7e\xbb\xa7\x1f\x8e\x5e\xf4\x9e\x21\x66\x57\x26\x9a\x53\x23\xec\xf7\x81\x4f\x10\xcf\x0d\x71\xa2\xed\xaa\x31\x8e\x7b\x44\x0f\x1b\xe3\xb8\x29\xfe\xed\x38\x6e\x4f\x17\x6f\x29\x63\xea\xd6\xe8\x4e\xec\x70\x3d\xca\x2a\x71\x04\xf0\xc8\xb2\x2b\x9e\xf1\x6f\x44\x6a\x33\x08\x22\xe4\xdf\x0f\xa5\xba\x5a\xea\xea\xf4\xc2\x2c\xa1\x65\xda\xe6\x95\x8c\xe2\xe6\x5a\xf0\x9f\x5c\x55\x25\xbc\x33\x71\xaa\xf2\xd0\x2a\x2a\xf9\xfd\xcf\x5a\x47\x25\x30\x1f\x5f\xff\xdc\x42\xdd\x76\xda\x19\xd2\xae\x27\xff\x93\x3e\xf0\x4e\xb6\x7b\x1f\x76\xf2\xe4\x19\xda\xd6\xcd\xc3\xe5\x49\x28\xbe\x63\xbd\x71\xee\x80\xcb\xf8\x94\xf2\xea\x5d\x75\x02\x1c\x03\xa5\x2e\xec\x93\xc6\x49\x1e\xdb\x3d\x1e\xab\x8f\x7b\xe7\x8f\x9b\xe8\x6f\xb6\x0f\x74\xb5\x55\x9a\x71\xc2\xa5\x8f\x82\xc8\x4a\x8d\xee\xe1\xd2\x46\xef\xae\xe7\x8e\x47\xac\x8f\xdb\xf3\xec\xdc\xe2\x51\xa3\x9e\x9d\x38\x7f\xbb\xcb\x70\xbb\x2f\xdd\xb2\xde\x4e\x24\xcd\x10\xf7\xb9\xdd\xd9\x09\xf7\x23\x86\x2a\x6c\x56\xd6\xba\xeb\xbf\xb3\x19\x8a\x15\xc4\xae\xf8\x8e\xcd\x6e\x43\x06\x1f\xc6\x93\xeb\x1d\xa9\xdd\xc5\xe4\x7a\xb7\x71\xdc\x54\xec\x8b\x4a\x4f\xea\x60\xdf\x5e\x4a\xb9\x76\x73\x54\x96\x15\x32\x2f\x53\xc5\x7a\x8b\xce\x0d\x95\x62\xad\x5e\x50\x8a\x95\x5e\xbd\xd9\x23\xcb\x23\x6a\x5c\x2b\x76\xca\x8d\x7a\x2f\x2f\x35\xc4\xce\x80\x6b\xe5\xb9\xc6\x90\x2c\xbf\xbc\x62\xc2\xf6\xe2\x76\xff\xe7\x71\xfc\x15\x23\x5f\x31\xfc\x75\x6b\x65\xec\xe5\xe5\x15\x7b\x11\x5b\xa2\x28\x8a\x3f\x7f\xbe\xc4\x37\xc8\xfd\xbd\xe3\x7f\xff\xf8\xf1\x1e\xc3\xfc\xb0\x5a\x62\xdb\x75\xba\x51\x97\xa5\x66\xbe\x56\x2f\xe6\x38\x8a\x14\x69\x8a\x1d\x33\xcd\x7a\xa1\xd3\x56\x4a\x83\x2a\x57\xca\x29\xf9\x5a\x4b\x91\x8b\x0d\xba\xc3\x49\xa3\x41\xbf\xb7\x61\xc8\x1f\x99\xf1\x0c\x2f\x08\x14\xcd\x08\xf4\x2b\x46\xdc\xa0\x48\x3f\x44\x91\xa4\x5a\x45\xb2\xdc\x93\x18\x52\xac\x0d\x7b\xc5\x5e\x99\x12\x47\x15\x71\x38\x2c\x0d\x87\x7d\xb2\x5f\x1e\x8e\x46\x6d\x56\x1a\x0d\xa5\x6e\xb3\x5a\x18\x8e\x3b\xe2\x80\xe5\x86\x0d\xfa\xe5\x15\x23\x70\x02\xdf\x5d\x09\x8e\xef\x98\x31\x9d\xe3\x15\xc7\x39\xdf\x70\x7b\xc2\x07\xaf\x6f\xa3\x7d\xd4\x11\x4f\xb7\xd2\x0e\x86\x64\x29\x4d\xe0\x75\x86\x62\x11\x62\x79\x8d\x80\x24\x07\x19\xc8\x0b\x3a\x49\x01\x9d\xa1\x08\x02\x72\x0c\x2b\x00\x92\xd6\x81\x4e\xd0\x38\x05\x34\x1c\x32\x24\x64\x29\x0a\xe2\x1c\x44\x82\xb0\x31\x15\xfe\xe4\xb5\xc1\x60\x38\x12\x90\x88\x22\x75\x9d\xa4\x79\x80\x73\x10\x47\x1c\xae\x6b\x84\xce\x6a\x14\xc1\xab\x84\x0e\x54\x8d\xc4\x21\xab\xaa\x38\xaf\x52\x94\xc6\x70\x1c\x43\x32\x02\xcf\xf2\x04\xc9\x00\x82\x7d\x89\x7d\x0c\xdf\x74\xdc\xff\xb3\x57\x6e\x58\x35\xe9\x55\x76\xd5\xa9\xe6\xb8\x82\x53\x10\xca\x24\xbe\x9c\xe6\x32\x01\x6e\x84\xc1\x42\x5e\xac\x89\xa1\xd6\x19\x8c\x40\xae\x02\x8a\xc6\x46\x5e\xaa\xd3\x0a\x58\x7b\x64\xeb\x5d\xe4\xb1\x38\x24\xe8\x58\x2c\xf7\xf6\x37\x34\xe4\x53\xaf\x97\xb3\xc1\x7e\xc5\x51\x29\x9d\xa2\x81\xca\x03\xc4\x09\x90\x17\x54\x9d\xe3\xa1\xae\xe1\x2c\x09\x18\x16\xd2\x04\x8d\x34\x0d\x0a\x2a\xcd\x30\x1b\x77\x20\x29\x86\x10\x70\x9e\x46\x02\xce\xe3\x2c\x2e\x40\x16\x6d\x1c\xe4\x53\x9c\x9d\x15\x20\x49\x92\x2c\x42\x24\x4d\xd1\x1c\xcd\xf1\x80\xe0\x08\x95\xa6\x55\x9e\xe3\x78\x8d\xd6\x29\x5a\x60\x74\x08\x68\x01\x00\x5e\xa3\x58\x9c\xe2\x01\x85\x10\xcb\xd1\x0c\xd4\x74\x0a\xc2\x97\x38\x26\x13\x0c\x23\x30\x9c\xc0\xf1\xf4\xce\x63\xf3\x64\x73\x3c\x25\xea\x11\xe3\xe2\xb0\xc2\x0d\x68\x67\xd5\x98\xf7\x96\x25\xaa\xef\xb9\x6f\x99\x79\x51\x6c\x84\x79\xa2\x4a\xd6\xb8\x1c\xc7\x8e\x23\xa6\x2c\xa8\x65\x0d\x9f\x89\xc1\x78\x2a\xb4\xd8\x11\xbf\x92\x65\x95\x8d\xc2\x37\x3d\x9b\x6f\x64\x14\x3b\x8b\x57\x61\xa0\xfb\xeb\x66\x2f\xb6\xf0\xb0\xd9\xaf\x99\xf1\xbf\xe4\xc3\x7f\xb6\xe1\x2d\x38\xfe\xbd\x10\x9b\xad\x9d\xef\x34\xf1\xe6\xb4\x43\xb5\x75\x6e\x12\xf0\xcb\xbe\x9c\x33\x48\x83\x5f\x56\xe7\xb3\x46\x23\xeb\x64\x8d\xec\x70\x61\x34\xdb\xd9\x72\x8e\x9b\x21\xc1\x0b\xcc\x4a\x44\xbf\xd5\xcb\x6d\xda\x1d\x96\xa5\xae\xac\xd1\x44\xb3\x5e\x19\x72\x5e\x65\xe6\xe2\xa4\x48\xbb\x19\xc6\x69\x43\x6a\x1d\x2d\x62\x55\x29\x1e\x5d\x90\xd3\xbc\x62\xef\xd1\x05\xbc\xf2\xfb\x5c\xef\x37\x5d\x77\x7a\x34\xcd\x0b\xb4\x4e\xea\x2c\x42\xb4\x4e\x71\xc4\x66\x56\xe2\x58\x96\xc3\x79\x28\x30\x24\x45\xd1\x90\x54\x05\xc4\xa8\x9a\x00\x34\x5d\xe0\x58\x16\x41\xc0\x52\x0c\xd0\x00\xcf\x22\x9c\x53\xf9\x8d\x37\x7e\xc6\xa8\x10\x70\x0d\xd7\x28\x1d\xb2\x02\x03\x39\x84\x53\x90\x51\x49\x0d\x71\x3c\x81\x38\xc0\xf3\x94\xa0\x12\x3c\x24\x35\x5a\xe5\x08\x4a\x87\x24\x22\x39\x9d\xe4\x35\x01\x08\x02\xc9\xb3\xb8\xc0\x52\x2f\xaf\x18\x95\xf0\x68\x66\xef\xd1\x6b\x1e\xf7\x65\xdf\xb1\x69\xa7\x89\x94\x6c\x6b\x34\xeb\xfb\xad\x1e\xa7\x45\x6a\xbb\x2f\x59\xee\xb4\x37\xce\x4b\x6c\xcb\x28\xe5\x21\xb4\x99\xd9\x5a\x5a\x8f\x6c\xb6\x13\x04\xb6\x9a\xb7\xb5\x80\xb0\x7a\x4d\xd0\x9b\x95\x9a\x0e\x5b\x74\xbc\xf6\xda\xe5\x1b\x65\xd0\x50\xbd\xe9\xd6\x73\x62\x8f\x4e\x38\x91\xa2\x54\x9b\xb0\xe6\x4e\xcb\x99\x76\x3b\xd3\xed\xe4\x0a\xd5\x52\x2e\x1b\x46\x7a\x99\xb4\x15\x82\x54\xd5\x7c\xd9\x27\x2a\x0e\xc9\xad\x9a\xf9\x16\x5e\x6f\x72\xa0\x1f\x66\x44\x6e\x98\xa7\x1c\x03\x21\xd7\x60\x16\xa3\x20\xec\x96\xa5\x6c\x10\x55\xb2\xd5\xba\xed\xbd\xb9\xa3\xca\x28\xf6\xd8\x5a\x8a\xc7\x4a\x41\x5a\xaf\xff\x0f\xf0\x58\x9d\x54\x55\x82\xd5\x21\x07\x21\x47\x03\x81\xa0\x08\x9e\xe6\x04\x06\xa9\x0c\xe2\x49\x48\x41\x48\x11\x24\x04\x14\x05\x79\x9e\xc7\x19\x48\x90\x9c\xca\xea\x00\xe2\x84\xae\x41\x95\xa7\x99\x8d\xb7\x7d\x86\xd7\x0b\x04\x49\xb0\x14\x43\x43\x8d\x17\x04\x5a\xd5\x05\x8a\xa7\x54\x8d\x60\x19\x9c\x22\x18\x44\xe9\x3c\xc4\x19\xa4\xea\x2a\xe4\x49\x86\xa5\x11\x45\x6b\x90\x44\x94\x40\xea\x38\xce\x6b\x02\xb7\x89\xc1\x74\xc2\x63\xd9\xbd\xc7\xe2\x66\x8f\x9f\xc3\xa8\xbb\x56\xdb\xa2\xa8\xd9\xaa\x1c\xf5\xe5\x75\x67\xb5\x42\xc3\xba\x1d\x66\x86\xe3\x28\xb2\xeb\x80\x74\xa1\xa1\xcb\x76\xbf\xf7\x26\x0c\xf4\x01\x8d\x0f\x0a\x73\xbb\x57\xa6\x65\x66\xd5\xf0\xda\xb5\x6a\xcd\x31\x06\xb2\xc3\x79\x0c\x55\x31\x57\x4a\xbf\x42\xd3\xb1\x85\x63\x8f\x35\x8e\x16\x67\x45\x8f\x1a\xae\xf0\x59\xbd\xce\x53\xf4\xa8\x99\xed\xc9\x59\xc7\x07\x6a\x63\xe6\x04\xfe\xb8\xcb\x47\x24\xcf\xdb\x8a\x38\x57\x89\xdc\xaa\x2d\x0f\xea\xbd\xf9\xc8\xee\xad\x99\x46\x61\xdd\x1e\xb7\x6a\x7d\x3a\x6b\x2e\x86\x41\x56\x31\xac\x71\xa3\x5e\x0f\xa2\x46\x87\x17\xa7\x63\x14\x7b\x6c\x2b\xc5\x63\x4b\xa9\x29\xc4\xff\xef\x1e\x7b\x25\x67\x4e\x39\xc1\x7c\x22\x03\xbf\x3c\xfe\x7a\x06\xec\xda\xf9\xcc\x73\x98\xe7\x47\x2c\x4f\xa0\x5d\x39\x20\x79\x02\xf1\xca\x51\xc6\x47\xd7\x2f\x89\xe3\x8c\xc4\x52\x7a\xb4\x19\x71\x4d\xb6\xd9\x15\x47\x4d\xba\x38\x1e\xd2\xb5\xf1\x80\x6e\x2a\xd5\x12\x39\x92\xe9\x11\xd3\x61\x7a\xed\xc6\x90\xea\x76\xfa\x5c\x2e\x5f\xec\x0d\x0a\xf5\xd2\x68\xd8\x6a\x6d\x73\xb0\xed\x4a\xa1\x2c\x0d\xaa\xa3\xec\x9a\x31\x16\xd9\x89\x4a\xd1\xeb\x7a\xd4\x1c\xb8\x64\x20\x33\xd3\x20\xc2\x4d\x36\xc3\xac\x7c\x5e\x36\xf1\xa0\xee\x25\xa2\x7e\x9c\xb2\xe4\xe3\x7f\x6e\x46\x96\x64\x72\x6f\x3a\xb1\xd0\xa8\x8e\x9b\x5f\xda\x4d\xa2\xe0\x4d\xd7\xb2\x31\x59\xcf\x58\xb2\x9d\xe5\x65\x8e\x8e\x60\xb6\xe5\x45\xcb\xcc\xbc\x26\x6c\xb3\x74\x55\xe8\xad\xb6\x79\x8f\x71\xf8\x4f\x2e\x06\x5d\x1c\xfe\x2e\x88\xa2\x90\x4f\x0c\xdc\x5c\xa3\xc2\x69\x4a\x1e\x97\x89\xe1\x4c\x0a\x21\x3b\xed\x79\xd9\xc1\xd0\x9c\x75\x06\x4d\x38\xcd\x74\x65\xa6\xdd\x2c\x70\xd2\x3c\x2a\xd8\x6f\xa3\x18\x6e\x24\x80\x51\x69\xfd\x26\xaf\x34\xc1\x28\xfa\x6a\x59\xb2\x56\x85\x5e\x4f\x2c\x80\xd2\xc8\x14\x70\x7e\x35\x2d\xab\x4a\x36\x57\x57\xea\x2b\x57\x92\xaa\x85\x11\x25\x74\x2a\xd3\xd5\xb8\xd3\xf3\xbc\xd2\xac\x55\xab\x96\x47\x42\xde\xf5\x0a\x14\x3f\x6b\xcc\x56\x02\x0f\x1a\x6b\x87\xc9\x2d\x7e\xfe\x3c\x9f\x2d\x3e\xb9\x6b\xa8\xa7\xba\xa6\x76\xda\x35\x85\x82\xed\xd7\xba\x75\x13\x7a\xd5\xd5\x6a\xbc\xa8\x8e\xc9\xf5\xa0\xdf\x12\xbc\x8e\x3b\xca\xe8\xee\x00\x59\xe5\xc6\x74\x41\x6b\x2e\xb3\xb2\xeb\xe2\xa1\x6b\xce\xe3\xe1\x87\x4d\xdf\x64\x67\x14\x95\xd3\x43\x6d\x86\xd7\xc6\x0a\xb9\x5a\x70\x0e\xeb\x17\x96\x85\xa0\x26\x8f\x99\x86\x53\xb7\x0b\x8e\x92\x8b\x48\xaa\x30\xf6\x4b\x46\x60\xae\xe8\x6c\x99\x57\x57\xcd\x56\x2b\x18\xc8\xd5\xd1\xbc\x9d\xe5\x2d\x5a\x6c\x95\x94\x16\x67\x05\xe4\x9c\x9c\xa3\xa8\x34\xcf\x89\xbf\xdd\xf4\xf4\x53\xa6\x6f\x9d\x99\x3e\x3f\xee\x77\xba\xc4\x58\x80\xd3\xf6\xa8\x91\x19\xb7\x74\x63\xea\xc8\xac\x25\x2d\xdc\x15\xca\x8d\x4c\x3d\x72\x1c\xd5\x56\xe4\xb0\xe7\x4c\x8d\x83\xe9\xab\xcf\x9a\xde\xf7\x33\xbd\x1c\x43\x0c\xb9\x51\xa4\xb3\xa4\x59\x69\x75\xa4\xfe\x7a\x31\x1d\xca\xd9\xca\x3a\xf0\xc9\x1c\x3d\xc8\x72\x5c\x38\x97\xb2\xb6\x5f\xe5\xe5\x79\xcf\x61\x33\x3d\xba\x49\x93\xe4\xb2\x4f\x6b\x79\x2e\x53\x25\x7a\x68\xac\xaf\x49\x0f\xb4\x60\x69\x32\xe3\x24\xbf\x51\x28\xec\x4c\x7f\x3d\xc4\xa5\x1d\x55\x3e\x10\xe2\xf6\xc7\x95\xc7\x65\x2f\x2f\x20\x4d\x23\x55\x52\xc3\x79\x8d\xe1\x00\x4f\x43\x06\x22\x40\x31\xa4\xa0\x6b\x2c\x83\x48\x20\x90\x0c\xaf\xb3\x88\xd2\x05\x8a\xa4\x04\x9a\xd6\x71\x1d\x12\xa4\x0e\x79\x4a\x00\x34\x9b\xec\xd4\xb8\x7f\xa4\xf8\x9f\x6a\x7b\xe4\x4d\xb3\x4d\xbb\x50\xc8\x14\xd7\xfa\xb4\x46\xd2\x02\x98\x82\xc5\xd4\x6e\xac\xb8\x8e\xe2\x73\x4e\x75\xbe\x30\x95\xce\x82\xb4\x17\xef\x4d\xb7\x57\x8e\x26\x3f\xdc\xf8\xe3\xf1\xe4\xa1\xf1\x3b\xd7\x06\xbe\x3a\x31\xe7\xbb\x9b\xc9\x6b\x93\x0b\xfe\x57\xbc\xb7\xfc\x75\xf7\x73\xc0\xaf\xdf\x31\x62\xbb\xdb\xfc\x35\x40\xfe\x1c\xf9\x5f\xbf\x63\x5f\xe7\x04\xf1\x17\xf1\x17\xfe\x75\x77\x43\x8d\x7c\x1f\x39\xa1\x12\xe7\xb8\x5f\xbf\x63\xf4\xe9\xe7\xb9\xf8\x99\xb0\xe0\xeb\x77\xec\x7f\x7f\xd9\x2b\xfa\xaf\x2f\x49\xb5\xb1\xe4\x06\x98\x67\x68\x9d\x85\x88\xd5\x69\x96\x64\x59\x5d\xd0\x48\x1d\x21\x06\x87\x80\xa6\x01\x03\x05\x81\xd3\x01\x0b\x04\x8e\x42\x1c\xc5\x69\x1a\x21\xf0\x0c\x50\x21\x25\x30\x84\x20\xd0\x02\xae\xee\x19\x1d\x70\x1d\xb4\x0c\xbf\x7e\x3f\xd3\xb6\x6d\xcc\xa6\xed\x5f\xbf\x63\xf8\xc9\xad\xff\x3e\xfb\x7e\xe0\x00\x6f\xc3\x8b\x41\x02\x64\x37\x69\xb1\x4a\x69\x1c\x47\xd1\x38\xa7\xe3\x50\xa3\x38\x8a\x41\xbc\x86\x93\x00\x50\x00\xd2\x88\x45\x2c\xa0\x55\x96\xd0\x71\x82\x64\x71\x9c\x47\xb4\xca\xa9\x3a\x07\x75\xfc\xeb\x97\x14\x0d\x57\x6c\x80\x74\x8a\x00\x24\x0e\x28\x81\x47\x88\xa3\x54\x44\x92\x24\xc7\x20\xc0\x13\x1c\xc7\xf1\x2c\x04\x2a\x43\xb3\x0c\xab\x53\x94\xa6\xaa\xb4\x4e\xe9\x48\x65\x71\x8d\x61\x34\x4d\x27\x58\x4a\x13\x3e\x6e\x03\xe2\xf5\xf2\x9e\x1b\x85\x5e\x14\x7e\x6e\xdb\x6f\x59\xf8\xd9\x2d\xcf\x8f\x58\xf8\x69\x5d\xbf\xc9\xcb\xfe\xb5\xc1\xbf\x36\xf8\xd7\x06\xff\xda\xe0\x5f\x1b\xfc\x6b\x83\x7f\x6d\xf0\xaf\x0d\x7e\xa3\x0d\xe2\x7f\xfd\x9f\x2f\xff\x7d\xb1\xfc\x4d\x59\x34\x58\x20\x08\x03\xd5\x8b\x7f\x79\x91\x76\xbd\xec\x97\x43\xdb\x35\xe7\xb2\x68\xda\x4d\x3e\x33\xaa\x35\xe9\x61\x3d\x53\x5b\xc3\x29\x31\xab\xfb\xf9\xc6\x88\x53\x42\x39\x9a\x47\xea\x2c\x9b\x97\x43\xa5\x00\xe0\x71\x4d\xba\x5d\x43\xad\x4d\x44\x75\x16\x61\xbe\xde\x67\x27\xca\x20\xe3\x12\x55\x9d\xb0\xe8\xd9\x9b\x35\x25\xe9\xec\xdb\xaa\xd1\xeb\x2e\x32\x4b\x85\x33\x18\xaf\x74\x58\x7e\x55\xcc\x27\xd7\xc4\x8f\x2c\xdf\x72\xa2\xd2\x78\xf3\xf2\x95\xa6\x53\x51\xc6\xb4\x31\x8f\x26\x11\xa3\xe6\x0a\x04\xd9\xac\x92\xf3\x5e\x6d\xc9\x07\xa1\x97\xa9\x1a\x8c\xd4\x35\x6c\x58\xd4\x97\xb5\xde\xc0\x2b\x4c\xab\x7d\x2d\xcb\xf6\xa3\x76\x68\xae\xa6\xb2\xe6\xe0\xb3\x3c\x3d\x10\x2b\xad\x88\xeb\x75\xca\x86\x91\x5b\xe7\x8d\x3d\x9f\xfc\xe8\xc9\xdd\xf0\xdc\x23\x7b\x0e\xad\xfc\xda\xab\xb6\xcc\x2e\xb3\xea\x90\x48\x56\x38\x17\x46\x43\xb1\x25\x68\xd3\x55\xe8\x13\x85\x9a\xae\x28\x40\x37\xdd\x46\x5b\xa2\x2b\xf6\x72\xc8\x77\x8b\xc5\x59\x8b\x5e\x59\x43\x3d\x63\xc1\x37\x38\x0a\xdc\x55\x79\x2c\x54\x8d\xa8\x68\xe4\x7b\x4a\x44\x48\x13\x5a\x16\xd5\x85\x1b\xd3\xa1\x57\x1d\xa3\x55\x0e\x26\xe3\xac\xe5\xcd\xa7\xcb\x46\xc7\x88\xe4\x2a\x3e\x5f\x2d\x2b\xa5\x01\xee\x58\x52\x19\x67\x2c\xca\x1c\x4e\xed\x96\xeb\xe5\xba\x62\x9b\xee\xa9\x73\x58\xa7\x2b\x9e\xbe\x34\xea\x51\x33\xb7\x1e\xd7\xb3\x30\xeb\xe5\xba\x81\xd7\xf2\x9b\x93\x31\xbb\xac\xda\xdb\x9d\xbd\x27\xfc\xed\x60\x6f\x71\xf1\xec\xe9\x43\x7c\x75\x3f\xe6\xbf\xad\x2a\x9b\xb5\x44\xa4\xf5\x33\xa4\xe2\x64\x42\xd7\xec\x49\x93\xa2\xca\xcb\xc4\xaa\xb9\x52\xb9\xaa\x60\xa0\xe2\x3c\x93\xe1\xe0\xb2\xc9\xcc\x56\xf3\xbc\x42\x54\x32\x73\xab\x51\xc8\xd4\xc3\xa0\x8f\xca\xad\x28\x6b\x86\xfd\xb2\x3d\xe4\x85\xd9\xe0\xad\xb4\x74\x41\xb4\xac\xae\x8d\xc5\xd6\x28\x9d\x4a\x77\x25\x44\x4c\xb3\xbe\x94\xc4\x1c\x39\x5e\x98\x4c\x6f\x5a\x57\x94\x0a\xa3\x92\x80\x62\x34\x9b\x65\x47\x84\x0f\x26\x51\x8e\x3f\xee\x94\x8a\x55\x76\x8a\x4c\x6a\x6a\xbb\x32\xdf\x2d\x59\x85\x2c\x32\x54\x8a\x6b\x0e\xc3\x72\xb5\xba\x1e\xf4\xf9\x45\xdf\x1c\xe7\x40\x3e\x62\x14\x26\xde\x13\x1c\xc7\x5f\x4a\xec\xdc\x8a\x67\xfe\x97\x30\x75\x08\x8d\x61\x9b\x95\x38\xb7\xa0\xe0\x4a\x2b\xb3\x18\x75\xf2\xc2\x7a\x38\x1f\xf6\xbb\xd4\xd2\x6c\x9a\xa3\xa8\x03\x89\xc2\xdc\x6e\x29\x88\x4f\xc0\xec\x9f\xc1\xd8\x5d\x80\x7b\x9b\xbf\x6d\xc7\x5f\x81\x6f\x94\x5b\x8d\x0e\xaa\x1b\x55\x33\x3f\xa4\xc2\x6e\x67\x1e\x0d\x27\x2b\x32\xeb\x49\x7c\xb1\x0b\xfd\xb7\xf2\x18\x2f\xea\xfd\xdc\x48\x9c\xbe\x81\x2c\x59\x90\x5b\xd1\xbc\xbf\x10\xf8\x60\xd2\x00\xa1\xb1\xcc\xf5\x54\x51\x94\xd8\x39\x81\x83\x30\x97\x89\x24\xbd\x27\xb7\xf3\x09\x7f\xc8\x1d\xb7\x77\x3e\xec\x5f\x97\x5b\x8a\x29\x31\x75\x5f\x98\x69\xfb\xab\xef\xf4\x98\x4a\xe0\xf7\x20\x39\x28\x5c\xb8\xfe\x9b\x07\x82\xc0\x9b\xf8\x20\x40\x29\x48\x5d\x14\x84\x58\xa7\x50\xc4\xea\x5b\x61\xec\x07\xd6\x41\x5e\x88\x6c\x88\x7c\x8c\xc4\x09\xe6\x1e\x45\xba\xeb\xab\x28\x50\x3d\xd7\xd9\xcc\x67\x16\x88\x1c\x75\x72\xae\x28\xfe\x55\xf5\x5d\x73\x4a\xbc\x57\xb4\x7b\x6a\x31\x48\x6f\xff\x6e\x23\x2a\x34\xed\x78\x8a\x7c\x3d\xdf\x97\x3a\xce\xa7\x5f\x27\x20\xf8\xfa\x7d\xfb\x9b\xee\x2f\x89\x19\xf4\xab\x8e\xd0\x7d\x82\x36\x58\x86\xcb\xc0\x5c\xdf\x29\xee\xa3\x78\x33\xec\x1d\xe1\xfb\xa7\xd7\xf8\xc7\x88\xda\xee\x47\x41\x29\xa6\x78\xfa\x9c\xf8\xfa\x6e\xe3\x95\x9f\x1c\x7c\x74\xb7\x31\xf1\xb3\x83\xcf\x78\xec\x91\x78\xc5\x9e\x79\x24\xf1\xa5\xd7\x29\xbc\xbc\x62\x02\x49\x52\x14\x47\xe2\x14\xcb\x33\x34\xc7\x31\x3c\xce\xc5\x8f\xb4\x11\xf1\x99\xc8\x3d\x4f\x1e\x5e\x7d\x5a\xfd\xc3\xf6\x49\x3e\xb1\x7e\x0c\x03\x90\x12\x78\x04\x69\x80\x78\x81\x63\x58\x8a\x64\x58\x9a\x52\x81\x46\x12\xaa\x40\x23\x82\x82\xba\x8a\x73\x34\xa4\x48\x0a\x21\x9e\x42\x04\x4d\x40\x9d\xc3\x09\xc0\x68\x02\x4e\xeb\xc4\xfe\xd9\xa7\x93\x04\xac\x76\x16\x80\x73\x66\x36\x87\x2b\x78\xa5\xb4\x0a\x27\x8b\x3a\x61\x8d\x70\xb0\xf2\x5c\x42\xa8\x97\x97\x73\x25\xbf\x6a\x30\x61\x4e\x52\xf3\xfd\xf9\xa2\x28\x2c\x28\x23\xf4\x1b\xce\x58\xbc\xe3\xba\xfa\x0c\x9d\x74\x36\x21\x7c\x5c\xff\x28\x9b\x51\xcf\x27\x90\xfb\xf4\x5f\x9e\xe7\xa4\xdb\x5d\x17\x38\x15\xe8\x3a\x80\xbc\x4a\xb0\x38\x49\x01\x8a\xe3\x79\x9a\x60\x19\x15\xe2\x90\xd2\x75\x02\x00\x52\x03\x3a\x8d\xe3\xb8\x8e\x74\x5a\xd0\x48\x02\xe9\x2a\x4f\x73\x9a\x06\x75\x88\xc0\xd6\xee\xe4\xa5\xdd\xff\xa1\x76\x7f\x96\xdd\x79\xfa\xf8\xfd\xd4\xa7\xc8\x9e\xb4\x3b\xd4\x68\x9e\xd5\xa0\xa6\xe1\xa4\x46\xb3\x38\x4f\x70\x2c\x47\xa8\x34\x60\x00\x87\x04\x8d\x45\x3c\xcb\xa8\x80\x14\x54\x48\x13\x88\x25\x35\x0e\x00\x9d\xc3\x41\x7c\x08\x00\x29\x56\x43\xbb\x27\xa3\x6e\xda\x3d\x1f\xb9\x94\x1b\xd2\xcc\x2c\xdf\x94\x96\x5e\x2b\x4b\xb9\xe5\x7a\x66\x4d\x70\xed\x95\x19\x10\x96\x5e\x2b\x8e\xec\xd6\xc0\xf0\xa3\x4e\xa6\x1b\xcb\x57\x7a\xf9\xcc\xae\x51\xe7\x09\xdd\xfd\x76\x2f\x3c\xa7\xbf\xa1\x3e\xa6\xff\x5e\xbb\x33\x08\x02\x9a\x10\x18\x4d\xe5\x29\x92\x25\x18\x5e\x65\x34\x9e\x53\x59\x9a\x00\xa4\x4e\x70\x80\x02\x24\xc7\xea\x3c\xcf\x0b\x2a\x01\x34\xc4\xd3\x90\x51\x59\x1c\xd2\x2c\xc9\xf2\x34\x54\xf1\xdd\xf3\x3d\x97\x76\xff\xc4\x76\x27\x12\xaf\xfb\xed\x2e\x3d\xa7\xbf\x46\x3f\xa6\xff\xe6\xe1\x65\xfa\x6f\x77\x3e\x3e\x61\xfc\xee\xd9\xa2\xa4\xf0\xe5\xd6\xbc\xf5\x06\xab\x64\x59\xa4\x06\xfd\x69\xdb\xaf\xda\xd3\x21\x8e\xeb\x25\x3e\x50\x64\xce\xc6\xa5\xf6\xa2\x32\xc8\x8a\x43\x4a\x3c\xa4\xfb\x62\x9a\x95\x2e\xac\xf6\xc1\x74\x3f\xdf\x17\xe7\xc9\xc7\xac\x73\xdb\xa8\x14\x77\xca\x68\xda\x52\x9b\x5d\xb2\xc4\x4c\x66\x4e\xce\x36\x4a\x25\x64\x08\x15\xde\xa2\x55\x42\x72\x7a\xd6\xf2\xcd\x92\xac\xb2\x10\xcc\xc6\x3e\x2e\x70\x44\x91\x6d\x28\x03\x1d\x65\x6d\xfa\xcd\x2b\x86\x72\x26\x90\x71\x93\x98\x29\x66\xc8\x88\x78\x65\x35\x70\xe0\x64\xa4\x0c\x18\x77\x93\x1b\xbc\x90\x6b\xbb\x11\x56\xd9\x8a\x36\xa8\x59\xe3\xc2\x2a\x94\x55\xab\x21\x71\x59\x51\x53\x6a\x53\xce\x6d\x4e\x5a\x50\x58\x94\x2c\xb2\xd5\x5d\x1e\x4f\xe4\x6f\xd8\xe0\xe8\x19\x27\xa7\xc3\x09\xd9\xed\xe3\x8f\xe2\x3f\x17\xa5\xc5\x4f\x98\x25\x8a\xdd\x41\x2e\x78\x42\xbf\x78\xa6\x3f\x4f\x44\x39\xad\xec\x76\x23\xa3\x36\x6f\x85\x05\x2e\x37\x91\x15\xaa\x8e\x04\xad\xdf\xd4\x4b\x72\xa6\x62\x32\x95\x79\xaf\x91\x19\x8b\x21\x17\xdb\xef\x99\x68\x9d\x16\x2d\x7f\x77\x6a\xf0\xf8\x20\xbb\xb1\xa6\xde\x5e\xfe\xac\xce\x2a\xa8\x01\x8c\xe9\xb2\x06\x7a\x4d\x81\xcd\xad\xf5\x40\x40\xb8\xea\xfa\xf5\xf1\x70\x9d\x1b\x54\xde\x8a\x6e\x75\xbf\x66\xbe\x35\xc8\x72\x76\xd5\xeb\x18\x73\x7f\x51\x6d\x90\xf8\x30\xdf\xd0\x47\xfa\x30\x28\x49\x52\x2f\x5c\x8c\x00\x90\xf4\x59\x27\x62\x57\x76\xc5\xb6\x0a\x36\xc8\xc8\x43\x56\xe6\x64\xc3\x80\xbd\x71\xcd\x55\x5b\xda\x58\xa0\xe5\x9a\xa8\x57\xb5\x96\x58\x9f\x0d\xa1\xdc\xe0\x56\xc1\x02\xa1\x5a\x7e\x33\x10\x32\xc3\xd5\x3c\xe3\x4f\x73\xa3\x7c\x63\x8a\xe4\xd6\x60\xa8\xe4\xd7\xd9\xe5\xcc\x24\xe7\x2d\xb1\x90\x11\x2a\xf8\x84\xe3\x27\x65\x0a\x66\x32\xee\x81\xd8\x3f\x3f\xc8\x9e\x75\xf2\x27\x07\xd9\x8c\xcb\x76\x0b\xea\x67\x0e\xb2\xbf\x31\x25\xba\x6b\x90\x7d\x72\x1e\xf8\xf8\xc6\xd5\x8d\x99\x6c\x14\xff\xdd\xef\xd7\x77\x39\xc6\x07\x22\x15\x95\x3d\x5c\x47\xbc\xd2\x41\x7f\x2b\x27\xbc\xd9\xd5\x01\x39\xa3\xe6\x5c\x4b\x5f\xf1\xcd\x1a\x7a\x93\x20\xd1\xed\xca\x8c\xb9\x9c\xbd\xc9\x78\xce\x35\x86\x7e\x23\xe4\x8c\x06\xc1\x92\x2d\xf8\x36\x21\xb5\x4e\xb7\xa7\xa3\x82\x3b\x57\xf1\xa6\x08\xf4\x49\x61\xb8\x0c\x27\x7d\xd1\x0a\x94\x68\x6a\xe5\xec\xd5\x34\x27\x8e\xe2\x41\x31\xef\x4d\xc2\xb9\x26\x86\x6d\xc3\x18\x8e\x97\xcb\xea\xc0\x61\x35\xe8\x8e\x55\xd7\x5b\xe1\x65\x5b\x19\xce\xe6\x6a\x55\xc9\x30\xb0\x1e\x1e\xfd\x2b\x7d\xc0\x8d\x4e\x3b\xf5\x64\xc0\xc5\xb6\xdb\xe6\x7e\x8b\xa3\xd4\x03\x01\x69\xea\x1c\xfb\xe2\xca\x75\x65\x1d\x74\x32\xe0\x3f\x45\xff\x95\x60\x73\x8f\xfe\xdf\x92\x0b\x5f\x5e\x7f\xdb\x1a\xe4\xa3\xb9\xb8\x78\xd4\xdf\x7a\x44\x7f\xb1\xdf\xc3\x77\xe0\xca\x80\x2e\xe2\x68\xd2\x60\xc5\x95\x90\xc7\x9b\x41\x49\x32\xe6\x2a\xc1\x11\x44\x4f\xe0\x47\x53\xda\x56\xde\x6c\xa1\xc5\x31\x6f\x79\x6a\x9e\xe8\x8a\xe3\x80\x5b\x9c\xdb\xef\xae\x80\xf4\xc9\x0b\xa4\xff\xf1\x3b\xe9\xdb\x80\x31\xf4\xbd\x9c\xa5\xad\x0a\x95\xc9\xa0\x36\x1c\xe9\xa5\x16\x50\x96\x68\xea\x3a\x90\x36\x2b\x0b\x40\xb9\x1d\x62\x69\x84\xa5\x8a\xdb\x49\x50\x4d\x0f\x46\x67\x1d\x7a\x25\x18\x25\x3d\xf6\x91\x60\xd0\x38\xf6\x43\xe2\x04\x20\x79\xdd\x0e\x06\x9f\xa8\x3f\xff\xb8\xfe\x8b\x0d\x91\xbf\x31\xc5\x16\xd3\x16\xe6\x1f\xd5\x0f\x44\xb5\xf7\x84\xfe\xda\xb9\xfe\x27\x37\x06\xae\x4c\x0e\xbf\x6f\x63\xa2\x51\x34\xe4\x07\xf5\xdf\xdc\x98\xb8\x51\x04\xe3\xa3\xbb\x13\x67\x85\x30\xf6\x71\x34\xb9\xbd\xb0\xfd\x3d\xec\x71\xac\xa6\x04\xe2\xeb\x28\x87\xf5\xd3\xf6\x57\xb4\x17\x28\x57\x0b\xf7\x5e\xd6\x33\x3f\x14\x2c\xde\x17\xcb\x78\xa7\x99\xc9\xc2\xea\x71\x39\xf5\x04\x62\x7c\xae\x23\x16\x0a\x29\x25\x46\x0f\x0a\xb1\x66\x5b\xae\x89\xed\x11\x56\x95\x46\xd8\xb7\x43\xf5\xa5\xd7\x43\x69\xdf\xab\x85\x76\xcf\x4a\xbc\x7f\x16\xf1\xe0\x06\xeb\xe0\x16\xe5\xb4\xc2\xa7\xc7\xaa\xf6\x4f\xd3\x83\xc0\x49\x63\xb6\x57\x70\x4a\x6a\x5b\x6b\xed\x76\x55\xd4\x9b\xe5\xfc\x9f\xa6\x7b\x02\x9e\x46\xfc\x86\x76\xac\x57\x97\x5b\x3d\x09\x3b\x16\x60\xf9\x50\x4b\x3e\xc7\xde\x1f\x6c\xc0\x65\x1f\x1c\x0b\xc5\x5e\x29\x72\x7a\xf2\x12\x88\xa7\xf9\x6e\xc1\xd2\x88\x26\xd4\x9c\x32\xdc\x95\xde\x4c\x2f\xb9\x99\x7c\xe3\xc5\xd3\xe4\x62\xac\x34\x6e\x47\x25\xa7\xd4\x4c\xef\x35\x2e\xc4\x79\xb3\xc4\x64\xca\x9b\x3e\x9e\x67\x9a\x80\x4c\x25\x7c\xae\x32\xad\xd3\xaf\xd4\xa1\x3c\x79\xdf\xc9\x67\x30\x0d\x22\x78\x85\xe3\x5e\xcd\x29\xbb\xb8\x84\xe5\x8d\xa2\x94\x17\x2f\x79\x79\x9a\xe4\x11\x30\x8d\xe8\x99\xba\xbb\x62\x58\xe2\x57\x4a\xe7\xaf\xba\x79\x9a\xed\x11\x30\x8d\xed\x99\xba\x53\xb6\xfb\xd2\x8e\x37\x4a\x27\x5e\xbc\xf2\xe7\x79\xbe\x07\xc0\x54\xbe\xa7\xea\x4e\xf9\x1e\xaa\x2f\xde\xa8\xaa\x78\xf1\xee\xa3\xa7\x09\x1f\x01\xd3\x08\x9f\xa9\xbb\x9a\x1a\x6c\xab\x2a\xbe\x1e\x4b\x26\xde\x2c\x9b\x97\xf2\x6e\xa8\xe7\xdb\x91\x80\x4c\x6d\xc9\xb9\xca\xb4\x28\x11\xa0\xd9\xeb\xbe\x4e\xdc\xf5\x92\x76\xe7\xef\xcc\xfa\x04\xee\x37\x89\x3f\xc5\xfa\x2c\x45\x4d\x7b\x93\xd8\xd3\xfc\x4f\x41\xd3\x1a\x91\xa2\xf6\x6a\x4b\x92\xe5\xe6\xae\xa5\x9a\x87\xb7\xac\xed\xb8\xc7\xef\x64\xbb\xaf\x10\xde\xf6\xf5\x6d\x67\x38\x58\xa3\x7e\xcc\x62\x7b\x1d\xb9\x5e\xc2\x60\xe8\x23\x84\xed\xab\x5e\xfe\x81\x0d\xca\x52\x5b\xc2\x92\x55\x30\x0f\x55\xc3\xf0\xcb\x44\xf3\xf4\xc5\x71\x8f\xb2\x3c\x85\xd9\x90\xdc\xe5\x29\x27\x14\x93\xa5\xd0\x5f\x93\x85\xcf\x5f\xb7\x05\xc9\x2f\xd8\x1d\xdf\x7e\xf7\x28\xb1\x03\xc2\x86\xd3\x71\x60\x9c\xd0\xba\x9e\x2a\x9e\xbc\xa7\xef\x19\x0a\x7b\x90\x2d\x8b\x44\x80\xb9\x93\xc8\xc9\xab\x05\x1f\x25\x92\x04\xd9\x10\x39\x4d\x84\xef\x64\x72\xf2\x3a\xc4\x47\x99\x24\x41\x36\x4c\x12\xbf\x05\xbf\x9f\xc6\xc9\x2b\x1c\x9f\x60\x92\xc4\xd9\x91\xd9\x67\x09\xa7\x64\x92\xe5\x8e\x6f\x85\xaf\xe7\x18\x9d\x03\x6d\x28\x9d\xc5\xc6\x77\x6d\x74\xed\xcd\xa5\x98\xea\xda\x9e\x85\x42\x14\xab\xfd\xbf\x01\x00\x00\xff\xff\x0c\x68\x1a\x36\xe6\x74\x00\x00") - -func asset_stat_trustlines_5CoreSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_trustlines_5CoreSql, - "asset_stat_trustlines_5-core.sql", - ) -} - -func asset_stat_trustlines_5CoreSql() (*asset, error) { - bytes, err := asset_stat_trustlines_5CoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_trustlines_5-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe6, 0xc8, 0xbd, 0xe2, 0xaf, 0x2b, 0x28, 0xf7, 0x7e, 0xb, 0xc5, 0x83, 0x49, 0x5c, 0x39, 0x79, 0x1f, 0xfb, 0x87, 0x13, 0x10, 0xe8, 0xe1, 0x5, 0xad, 0xe5, 0x1d, 0xd3, 0xce, 0x8c, 0xf, 0x3e}} - return a, nil -} - -var _asset_stat_trustlines_5HorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x7d\x79\x6f\xe2\x48\xf3\xf0\xff\xf3\x29\xac\xd1\x4a\x99\x51\x32\x13\xdf\x47\xe6\x99\x95\x0c\x98\x23\x01\x73\x27\x90\xd5\xca\x6a\xdb\x6d\xe2\x04\x6c\xe2\x83\x84\xac\x9e\xef\xfe\xca\x17\x18\xe3\x8b\x63\x66\x9f\x57\x3f\x6b\x34\x0a\xb8\xba\xae\xae\xea\xaa\xae\x6e\xba\xbf\x7d\xfb\xf4\xed\x1b\xd2\x33\x6d\x67\x66\xc1\x61\xbf\x8d\xa8\xc0\x01\x32\xb0\x21\xa2\xba\x8b\xe5\xa7\x6f\xdf\x3e\x79\xef\x6b\xee\x62\x09\x55\x44\xb3\xcc\xc5\x16\x60\x05\x2d\x5b\x37\x0d\x84\xfb\x4e\x7f\xc7\x62\x50\xf2\x1a\x59\xce\x24\xaf\x79\x02\xe4\xd3\x50\x18\x21\xb6\x03\x1c\xb8\x80\x86\x23\x39\xfa\x02\x9a\xae\x83\xfc\x44\xd0\x1f\xfe\xab\xb9\xa9\xbc\xec\x7f\xab\xcc\x75\x0f\x1a\x1a\x8a\xa9\xea\xc6\x0c\xf9\x89\x5c\x8c\x47\x75\xf6\xe2\x47\x84\xce\x50\x81\xa5\x4a\x8a\x69\x68\xa6\xb5\xd0\x8d\x99\x64\x3b\x96\x6e\xcc\x6c\xe4\x27\x62\x1a\x21\x8e\x27\xa8\xbc\x48\x9a\x6b\x28\x8e\x6e\x1a\x92\x6c\xaa\x3a\xf4\xde\x6b\x60\x6e\xc3\x1d\x32\x0b\xdd\x90\x16\xd0\xb6\xc1\xcc\x07\x78\x03\x96\xa1\x1b\xb3\x1f\x21\xef\x10\x58\xca\x93\xb4\x04\xce\x13\xf2\x13\x59\xba\xf2\x5c\x57\xae\x3c\x61\x15\xe0\x80\xb9\xe9\x81\xf1\xed\x91\x30\x40\x46\x7c\xa5\x2d\x20\xad\x3a\x22\x4c\x5a\xc3\xd1\x10\xe9\x8a\xed\x69\x08\xff\xfd\x49\xb7\x1d\xd3\x5a\x4b\x8e\x05\x54\x68\x23\xb5\x41\xb7\x87\x54\xbb\xe2\x70\x34\xe0\x5b\xe2\x28\xd6\x68\x17\x50\x52\x4c\xd7\x70\xa0\x25\x01\xdb\x86\x8e\xa4\xab\x92\xf6\x02\xd7\x3f\x7e\x07\x41\xc5\xff\xeb\x77\x90\xf4\xec\xea\xf7\x09\x18\x50\x3b\x5c\xba\x80\x41\xcf\x90\xf3\x88\xc5\xa0\xb6\xc8\x7d\xf0\x96\x58\x13\x26\x31\xc8\x10\xad\xcf\x95\x04\x35\x0d\x2a\x8e\x2d\xc9\x6b\xc9\xb4\x54\x68\x49\xb2\x69\xbe\xe4\x37\xd4\x0d\x15\xbe\x4b\x31\xe1\x0c\x1b\xf8\x86\x6e\x4b\xa6\x21\xe9\xea\x21\xad\xcd\x25\xb4\xc0\xa6\xad\xb3\x5e\xc2\x13\x5a\x6f\x39\x39\x89\x8b\xc3\xda\xce\xa1\x3a\x83\x96\xdf\xd0\x86\xaf\x2e\x34\x94\x83\x44\x88\x35\x5f\x5a\x70\xa5\x9b\xae\x1d\x7e\x27\x3d\x01\xfb\xe9\x48\x54\xa7\x63\xd0\x17\x4b\xd3\xf2\xdc\x31\x1c\x53\x8f\x45\x73\xac\x2e\x95\xb9\x69\x43\x55\x02\xce\x21\xed\x23\x63\x3e\xc2\x94\x42\xbf\x3c\x82\xe9\x78\x4b\xa0\xaa\x16\xb4\xed\xfc\xe6\x4f\x8e\xa5\xfa\x71\x47\x9a\x9b\xe6\x8b\xbb\x2c\x01\xbd\x2c\x62\x29\x80\x02\xba\x75\x20\xe2\x68\xd0\x2d\xdd\xc0\x1b\x27\x34\x0d\x5a\xe5\x40\x23\xf4\x47\x34\x09\xd5\x5a\xae\x91\x3f\xb4\x1e\x40\x24\x3e\x14\x17\xb5\x58\x7a\x0d\x9e\x9c\xc2\x1e\xb0\x77\x06\x20\x79\x5d\x68\x46\x4f\x1b\x4f\x2f\x03\x6c\x06\x7c\x98\x85\x80\xba\xed\x48\xce\xbb\xb4\x2c\x46\xe9\x41\x9a\xcb\xb2\x90\xb0\x2c\x58\x14\x4a\xf2\x81\xe5\xc8\xdd\x0b\xc1\x8a\x47\x31\x79\x5d\xae\x33\x83\x18\xe9\x69\xdb\xb6\xdd\x22\xca\x1b\x60\xc5\x54\xe1\x81\x79\xc1\xc6\x0c\x96\xc0\x72\x74\x45\x5f\x02\x23\x37\x78\x17\x35\x95\x96\x07\xe6\x26\x9b\x88\x76\x28\x07\xe9\x0d\x0f\xa6\xef\x2b\xaf\x0c\xbd\x00\xf0\x97\xe3\x0f\x3a\xd3\xeb\xc9\xf0\x4f\x2f\x3e\x44\xa9\x9f\x6f\x0c\x52\x49\x0e\x66\xa6\xb5\x94\x16\xfa\x2c\x4c\x18\x72\x58\x48\x40\x96\x96\xf1\xf0\x7c\x2f\x0f\x73\x59\xe3\x0c\x5a\x57\xbb\xed\x71\x47\x44\x74\x35\xa0\x5c\x13\xea\xfc\xb8\x3d\x2a\x89\x3b\xc3\xe8\xce\x80\x39\xec\xee\x7c\x4c\xfe\xa7\xf2\xe2\x47\x51\x7a\x28\xf4\xc7\x82\x58\x3d\x42\x67\x5e\x9e\x6d\xc3\xd7\x83\x29\xef\x20\x29\xdd\x5a\x85\x25\x61\xb7\xd9\x6c\x69\x09\x33\xbc\xfe\x10\xf9\xd2\x51\x94\x6b\x1b\xe6\x7d\xe5\x80\xc3\x24\xaf\xb4\x6c\xe1\x08\x70\x88\x2c\x41\x93\x92\xb0\x61\xfa\x57\x9e\x9f\x28\x5f\x2c\xc3\x51\x62\x0c\xc9\x07\x8e\x0d\x09\x21\x20\xdf\x68\x0c\x84\x06\x3f\x4a\x01\x5e\xe8\xde\x8c\x43\x57\xe0\x17\xc3\x5d\x40\x4b\x57\xfe\xfa\xfb\x6b\x89\x56\xe0\xfd\x88\x56\x73\x60\x3b\x5f\x80\xb1\x86\x73\xbf\x14\x53\xa2\x85\xa6\x5b\xa9\x4d\xea\x63\xb1\x3a\x6a\x75\xc5\x1c\x79\x24\x30\x9b\x6d\xb9\xbb\x42\xf6\x18\xcd\xc1\x11\x49\x77\x02\x0e\x4f\x56\xbf\xf9\x96\xf9\x2b\xe4\x10\x41\x7c\xd1\x4b\x60\x10\x26\x23\x41\x1c\x26\x50\xcc\x97\x33\xfb\x75\x1e\xd9\x62\xb5\x29\x74\xf8\x3d\x0a\x3f\x3e\x05\x55\x38\x11\x2c\xe0\x4d\xf4\x1d\x32\x5a\x2f\xe1\x4d\xd8\xe4\x07\x32\x54\x9e\xe0\x02\xdc\x20\xdf\x7e\x20\xdd\x37\x03\x5a\x37\xc8\x37\xbf\x38\x57\x1d\x08\x5e\x7f\x85\x98\x23\x7c\x9f\x76\x30\xee\xbe\x0c\x11\x57\xbb\x9d\x8e\x20\x8e\x72\x30\x07\x00\x48\x57\xdc\x45\x80\xb4\x86\xc8\x45\x54\x76\x8b\xbe\xb3\x7d\x24\x17\x49\xca\x91\xf8\x21\xcd\x8d\x86\x0a\xe5\xd9\xd1\xa5\xd8\x1d\x25\xf4\x89\x3c\xb4\x46\xcd\x0d\x5b\xf1\xfa\xdb\x0e\xf9\x2d\x96\x04\x23\x87\x08\xbf\x87\xc4\x57\x40\xaf\x7d\xbd\x9c\x0d\xfb\x6d\x64\x69\x99\x0a\x54\x5d\x0b\xcc\x91\x39\x30\x66\x2e\x98\x41\x5f\x0d\x25\xeb\x85\x71\x76\x8b\x0d\x2d\x64\x3f\xb2\xd5\x2d\xff\x51\xdf\xa6\xe9\x72\x63\xd9\x85\xf8\x91\x81\x30\x1a\x0f\xc4\x61\xec\xbb\x4f\x08\x82\x20\x6d\x5e\x6c\x8c\xf9\x86\x80\xf8\xd2\x77\x3a\xe3\x60\xbc\x1b\x8e\x06\xad\xea\xc8\x87\xe0\x87\xc8\x1f\xd2\x1f\xc8\x50\x68\x0b\xd5\x11\xf2\x07\xe6\x7d\x4a\xf6\x46\xa1\x23\x9e\x26\x5d\x11\xfa\xb3\x09\x87\xa7\x09\x57\x66\xa4\x3a\x4d\xbe\x12\x14\x36\x22\x6e\xbe\x3a\x4a\xc2\x2f\x9f\x10\xa4\xca\x0f\x05\xe4\xa1\x29\x88\xc8\x1f\xd8\x5f\xd8\xdf\xd7\x7f\x60\x7f\xe1\x7f\xff\xf9\x07\xee\xff\x8d\xff\x85\xff\x8d\x8c\x82\x97\x88\xd0\x1e\x0a\x9e\x52\x04\xb1\xf6\x35\x55\x33\x25\xe2\xc0\x89\x9a\x29\xa6\xf0\xab\x35\xf3\x9f\x63\x34\xb3\x1f\x53\x43\x3d\x6c\xe2\x70\x39\x45\x6c\xc3\xf6\x1e\x46\x9f\x63\x04\x19\x7a\xba\x42\x7e\x6e\x47\x80\xab\xe0\xeb\xd1\xb4\x27\x20\x3f\xe3\x1e\xf1\x35\xcd\x6b\xcf\xca\x63\x12\x61\x82\xc5\xc8\x8d\xcb\x73\x98\x9a\x02\x9d\xca\x65\x1a\xd2\x04\xa7\x3b\x0e\xb9\xcb\xee\xd6\xca\xf6\xb9\x4d\x4b\xf3\x4e\xe6\x36\x05\x69\x92\xdb\xb8\x93\xe4\x72\xeb\x45\x2e\x15\x6a\xc0\x9d\x3b\x92\x03\xe4\x39\xb4\x97\x40\x81\xc8\x4f\xe4\xe2\xe2\xc7\xee\xdb\x37\xdd\x79\x92\x4c\x5d\x8d\x2d\xa5\xed\xc8\x1a\xcf\x7f\x43\x11\x7d\x07\x2b\x27\x5e\xe0\x8b\xf1\xc9\x77\x20\x91\xae\x22\xb2\x3e\xd3\x0d\xc7\x4f\x0c\xc4\x71\xbb\x1d\x88\x03\x16\x5e\x1a\x8f\x28\x4f\xc0\x02\x8a\x03\x2d\x64\x05\xac\xb5\x6e\xcc\x12\x60\x86\xbb\xd8\xa4\xfc\x88\x6e\x38\x70\x06\xad\x04\x88\x36\x07\x33\x1b\xb1\x17\x60\x3e\xdf\x27\xe3\x98\x8b\xf9\x3e\x91\x2f\x38\x45\x7d\xdd\x40\xee\x77\x7b\x72\xde\x70\xac\x3a\x92\xd5\x8e\x8d\x4a\x1c\xf8\xbe\xa7\x90\xe5\x72\xae\xfb\x35\x7b\xc4\xd1\x17\xd0\x76\xc0\x62\x89\x78\x7d\xe6\x7f\x44\x3e\x4c\x03\xee\x33\x9a\x35\x2b\x8a\xf2\xd1\x70\x3a\x55\x8e\xe7\xcd\xe4\x2b\x03\x6b\x68\x86\xfc\x60\x14\x64\x74\x98\xff\x45\x4b\xac\x0e\x04\x3f\xfd\xaa\x4c\xc3\xaf\xc4\x2e\xd2\x69\x89\xf7\x7c\x7b\x2c\x6c\x3e\xf3\x93\xed\xe7\x2a\x5f\x6d\x0a\x08\x56\x24\xcc\xd1\x6a\x4f\x22\xda\x33\xc5\xb0\xe8\x81\x18\xf0\xdd\x59\x81\xf9\x97\x8b\x0c\x89\x2f\x6e\x6e\x2c\x38\x53\xe6\xc0\xb6\xbf\x26\xbb\x2b\x58\xab\x48\xb1\x2d\x9a\xfc\x9a\xd3\x51\xc1\xdc\xf8\x64\xc9\x82\x8a\xce\x46\xae\x74\xcf\xd8\xd6\xea\xd2\xd9\x4c\x05\x57\x4c\x35\x0d\x1c\xc3\xd3\xc1\x83\xf2\x5f\x4a\x03\x8a\xce\xf3\xb0\xf4\xf2\xc2\x99\xcc\x36\x8e\xf3\xb7\x19\x6d\x9e\x20\x48\xf7\x41\x14\x6a\x48\x65\x5a\x20\x51\x50\xa1\xcb\x17\x68\x83\x2b\xf1\xfa\xbb\xae\x66\xf1\x16\xd5\x7c\x4e\xb5\xba\x10\x4f\x68\x76\x09\x9f\x91\xb2\x46\xfa\xfd\x12\x57\x16\xe4\x67\x7f\xe1\xe3\x73\x86\x35\xfb\x76\x9c\xfe\x4a\x85\x0e\xd0\xe7\x36\xf2\x6c\x9b\x86\x9c\x6d\x6c\x51\xa1\xec\x54\x3d\x84\x78\x42\x3d\x44\xeb\xd6\x19\xbc\xc5\x16\x93\x4b\x79\x61\xda\x3a\x76\x7a\xc3\x50\x2d\xb1\xca\xa8\xdf\x11\x1b\x3e\xa2\x51\x0e\x4d\x50\xd8\x76\x44\x39\xf8\xcd\x62\x72\x22\x30\x99\xae\xb3\x8d\x4d\xc9\x36\x16\x04\x4e\x61\xa3\x00\xd6\x5d\xaa\xa5\x61\x37\xa6\x13\x7e\x4c\xac\xb3\xef\xc9\x82\xed\xe5\x03\x0e\x98\x4b\x8a\xa9\x1b\x76\xba\x0d\x6a\x10\x4a\x4b\xd3\x9c\xa7\xbf\xf5\x57\x3e\x35\x98\xd5\xd7\xfe\x6b\x0b\xda\xd0\x5a\x65\x81\x78\x79\xa8\xf3\x2e\xf9\x69\x92\xfe\x91\x05\xb5\xb4\x4c\xc7\x54\xcc\x79\xa6\x5c\xc9\x3e\x8a\x8c\x05\x02\x15\x5a\x7e\x7a\x11\x7c\x6f\xbb\x8a\x02\x6d\x5b\x73\xe7\x52\xa6\xa1\x84\x82\x03\x7d\x0e\xd5\x6c\xa8\x6c\xb7\xca\xa8\x5d\x9f\xea\x65\x19\xeb\x21\x05\x31\xaf\xfc\x68\x53\x3c\x7e\x1d\x2a\xf2\x79\xc3\x58\x2e\x8d\xdf\x15\xd6\x0e\x12\xf4\xc4\x30\x97\x4b\x6b\x3f\xec\xa5\x83\xe7\x84\xc1\xd8\xca\xce\xd9\x6c\xb3\x68\x9a\xb3\xbb\xab\x2a\x63\x2a\xe4\x65\xfe\x4a\x20\x8a\x1f\x01\x4f\x0c\x80\xa1\xe7\x9b\xae\xa5\x6c\xb6\x69\x64\x84\x9e\x68\x38\xb9\xb8\xb8\xb9\xc9\x9e\x8a\x65\xfb\x41\xb8\xb0\x76\xaa\x3a\xc3\xbd\x80\x5f\xce\x9a\x2f\x84\x43\xe2\x31\xd1\xcb\xdf\x0b\x93\x49\x36\xb1\x13\x31\x0f\x28\xdc\x1c\x99\x07\x12\xcc\x83\x53\x01\xf6\xf7\x74\x16\xc0\xe5\x92\xdb\x40\xe5\x50\xf4\x59\xd2\x6d\xc9\x86\xf3\x39\xb4\x10\xd9\x34\xe7\x10\x18\x51\x4c\xd2\x15\x28\x19\x3b\xf1\x37\xf8\x6e\x37\x26\x6f\x77\x13\x49\x89\x68\xbd\xb3\x9f\x29\xf9\x32\xb6\x4c\x9f\xba\xf3\xd3\xe7\x5a\xf2\xf7\x06\x23\xd5\xa6\x50\xbd\x43\xbe\x7c\x89\x6b\xf0\x4f\x04\xfd\xfa\xb5\x08\x55\x5a\xf3\x48\x69\xff\xd9\xd3\x63\x09\x7c\x3b\x3a\x4d\xa0\x4f\x28\xdc\x67\x30\xd7\x95\xd2\x57\xb8\xcf\xe0\x5c\xe9\x7b\x16\x4a\x46\xd2\x32\x43\xd8\x29\xb1\xb4\x68\x7f\xc0\x79\xa2\x69\x01\x95\xdf\x15\x4f\x0f\x14\xf6\xc4\x88\x5a\x40\x6d\x3f\xa6\x66\x35\xc8\x89\xaa\x3b\x7b\x42\xce\x68\xab\x91\x7d\xc6\x59\x2a\x3d\x89\x0a\xc7\xfe\x82\xa9\x59\xd9\xc0\x9b\x1f\x43\x53\x61\xb7\xa4\x53\xfd\xc5\x9b\x05\x64\x4f\x23\xb2\x26\x68\xff\xca\x14\xcb\x79\x97\xa0\xb1\x82\x73\x73\x09\xd3\xca\x96\xce\xbb\x37\xe1\x71\xe7\x4e\xc6\xcb\x05\x74\x40\xc6\x2b\x6f\xaa\x95\xf5\xda\xd6\x67\x06\x70\x5c\x0b\xa6\x55\xd8\x38\xfa\xeb\x5f\x7f\x6f\x73\x97\x7f\xfe\x9b\x96\xbd\xfc\xf5\x77\x52\xe7\x70\x61\x66\x14\xc3\xb6\xb8\x0c\xd3\x80\xb9\xb9\xd0\x16\xd7\x3e\x9a\x50\x32\x7d\x01\x25\xd9\x74\x0d\xd5\xaf\x58\xb3\x16\x30\x66\x30\x39\x1b\xdb\x0d\xad\x9e\x26\x3c\x6c\x33\xa8\x16\x4f\xb7\xc2\xda\x9f\xae\x46\xde\x16\x6d\xe1\x2a\x33\x44\x04\xee\xe6\xef\x97\x2b\xd8\x1d\x36\x14\x46\x39\x75\xd2\x78\x45\x2a\x5e\x25\x3d\x6c\x1e\x71\x3e\x21\x4a\x6e\x9e\xcb\x15\x2a\x77\xfe\x51\x46\xc8\xcc\x48\x7b\x36\x31\x4b\xef\x3f\xcc\x15\xb4\x20\x2c\xa4\x8b\x5a\x03\x0e\x40\x34\xd3\x2a\x58\x2d\x42\x6a\xfc\x88\x2f\x10\xaf\x25\x0e\x85\xc1\x08\x69\x89\xa3\xee\xce\x8a\x91\x1f\x45\x87\xc8\x17\xec\x0a\xb9\x40\x2f\xae\x10\xec\x0a\x41\xaf\x90\x8b\x8b\x6c\x2e\xf2\x16\x6a\x0e\xe5\x24\xb9\x58\x13\x71\x73\x81\x49\xba\xa1\x3b\x3a\x98\x4b\xc1\xc6\x99\xef\xf6\xeb\xfc\xe2\x0a\xb9\xc0\x51\x8c\xfb\x86\xd2\xdf\x50\x02\xc1\xd8\x1b\x9c\xbd\x21\x99\xef\x28\x81\x93\x1c\x7d\x89\xe2\x1e\xd3\xa5\xb0\xe3\x52\xf0\x83\x88\x9d\x8e\x90\xd7\x92\x63\xea\x6a\x3e\x25\x8e\xa6\x98\x43\x28\x11\x92\x6b\xc3\x4d\x60\x92\x74\x63\xef\x47\x18\xb9\xf4\x48\x12\x25\xd9\x43\xe8\x91\x12\x50\x55\x29\x59\xca\xca\xa5\x41\x91\x14\x81\x1f\x42\x83\x92\x82\x30\x18\x25\xe4\xfe\x12\x68\x2e\x09\x9a\x40\xf1\x83\xc4\xa0\x23\x12\xe1\xa0\x57\x82\x04\x4b\x62\xd4\x21\x24\x18\x69\x61\xaa\xba\xb6\x2e\x2f\x05\x8b\xd1\xf8\x41\x24\xd8\x1d\x29\xc2\x9d\xcf\x25\xe8\x30\x24\x4d\x1c\x46\xc7\xeb\x74\x30\x9b\x59\x70\x06\x1c\xd3\xca\xb7\x29\x0e\xc5\x50\xee\x10\xf4\x9c\x8f\x3e\x28\x73\x4a\xef\xaa\x95\x8f\x1d\x67\xb0\x83\xba\x1a\x43\x7d\xf4\x61\x2f\xf8\x93\xdb\x7c\x02\x14\xc7\x1c\xa4\x1d\x0c\x8b\x13\xd8\xcc\x96\xbc\x01\x20\x9f\x10\x47\x73\x87\x49\x82\xef\x74\x74\x38\x3f\x0d\x7e\x6b\x9b\x47\x09\x43\x19\x8a\x3c\xa8\x47\x30\x22\x10\x67\x33\xab\xcf\xed\x71\x0c\xc3\x19\xfa\x30\x49\x48\x49\xd3\xdf\xa3\xdf\x1d\x98\x8b\xb9\xa4\xe9\x70\x9e\x3b\x34\x62\x18\x85\x61\x07\x0d\xc2\x18\x15\x2d\xb7\x44\x65\xf0\xf7\x02\x31\x68\xe6\xb0\x61\x1e\xa3\x25\xdd\x98\x41\xdb\x91\xf6\x0b\xed\x05\xa4\x18\x8e\x3d\xac\x47\x98\x9d\x08\xef\xaf\x68\x80\xfc\x60\x82\xe1\x28\x4a\x90\x21\x91\x8c\x58\x9b\xbb\x3c\x7f\x68\xb0\xdd\x5b\xa2\x8f\xc7\xfe\x46\x15\x27\xfa\x75\xbc\x39\x16\x28\x9c\xef\x4c\xc6\xf5\x71\x93\xe0\xa7\xb7\xfc\x64\xd2\x98\x4c\xee\xf1\xfb\xe6\x64\x3a\x1d\xd0\xc2\x74\x22\x8c\x7a\x77\xb5\xc9\xe3\x90\x7f\xa0\x99\x49\x97\x4c\x6a\x28\x93\x08\xee\x13\x99\xdc\x35\xe8\x81\x48\x76\xc5\x96\xd0\xab\x76\xc4\x7a\x85\x21\x70\x9e\x24\xe8\x47\xaa\x27\xd6\x86\x83\x76\xe3\xe1\x8e\x69\x54\xda\xd5\x4e\xbf\xdd\xaa\x77\xc9\x21\x23\x4c\x1f\xee\xc7\xa5\x89\x10\x1e\x91\xca\xa0\x37\x6d\xb6\xda\x78\xb5\x45\xd4\xc5\x3e\x59\x99\xb4\xeb\x1d\xb1\xd6\xae\xdf\x8e\xc5\xde\x18\x6f\x4e\x89\xc7\x4e\x7d\xd8\xec\x8a\xe3\xaa\xd0\xe5\x87\x0f\x4c\xbf\xca\x74\x27\x78\xf3\xe2\xd8\x9d\x1e\x5e\xe2\x57\xd0\x0d\xe1\xee\xb8\xed\xc6\xd6\xef\x36\xcc\xdf\x05\x71\x85\x10\x57\x88\x63\xb9\xb0\x84\x71\xec\xef\x6f\x38\xda\x34\x82\x79\x49\xdc\x30\x14\x0b\xaa\xba\x23\x81\xf9\xf2\x09\x18\xee\x82\xf4\xcc\x79\x3c\xac\x5d\x9c\x68\x33\xc7\xac\xe8\x9f\x45\xcf\x3b\xb3\x28\x3f\xdf\x2d\xa7\xe5\xb4\x05\xfd\x63\xd5\x1c\x2d\xea\xc7\xf4\x8c\x31\xde\x98\xc3\x10\x38\x8b\xf9\x4c\x79\xee\xf2\xcf\xe7\x20\x86\x7c\xbe\x41\x3e\x63\xe8\x77\x34\x78\x3e\x5f\x21\x9f\xb7\xbb\x4c\xbc\x77\x06\x70\xf4\x15\xfc\xfc\xdf\x2c\x37\x49\x92\xc3\x13\xe4\x70\xdf\xd8\x7e\x29\x39\x9c\x65\x49\x0e\xa5\x38\x96\x0a\xa4\x43\x7d\x7a\x73\x7d\xa1\xfb\xe4\x38\x1c\x27\x08\x06\x47\x09\x9a\xa5\xbe\x93\x0c\x43\xb1\x28\xb3\x25\xac\x98\xaa\x4f\x78\x3c\xac\xed\x73\x93\xb4\xcf\x2d\x44\xb0\x4d\xc6\x83\x39\xd6\x50\xcb\xcb\x88\x5d\x21\x2c\xc5\x72\x1c\xc1\xd2\x2c\xb7\x99\x45\xfd\xf3\xd9\x76\xbc\x29\x86\x31\x93\x64\x30\x07\x86\x02\x03\xdd\xa2\x5b\xed\x96\xa6\x40\xec\x52\x48\xed\x33\xf4\x8c\xbd\x96\x90\x88\xb8\x42\xb0\x40\xa4\x37\xa8\xcf\x9e\x3c\x82\xd8\x15\xf2\x39\x30\x79\xe9\x05\xae\x7f\x8f\x9e\xf1\x90\x2b\x12\x67\x42\x53\xfa\x55\x7a\x0e\x29\xfc\x72\x3d\x27\x24\x2a\xa9\xe7\xe3\xe2\x68\xc0\x55\xc1\x40\x97\xb6\x63\xe7\xd8\x81\x2e\xda\xb5\x13\x09\x4b\x5e\x21\x17\x1a\xae\x28\x18\xad\xc9\x8c\x2c\x33\x24\xe0\x30\x02\x63\x49\x86\xa3\xa0\x42\x41\x16\x97\x09\x59\x26\x30\x5c\x06\x04\x21\xb3\x2c\x8b\x52\x32\x86\x33\x0a\xad\x01\x19\xc5\x34\x55\x56\x58\x92\xf2\x22\x0f\xc9\x72\xa4\x86\x6b\x34\x84\xa4\x46\x30\x98\xd7\x23\x0c\x4d\x33\x28\x2b\x73\x14\x4e\x10\xa4\x8c\x2b\x1c\xa4\x14\x95\x03\xaa\xc6\x31\x34\x0d\x65\x40\x13\x14\x50\x01\x4b\x43\x94\x51\xd8\x60\xe0\xc7\x12\x99\x19\x7d\x43\xd0\x37\x38\x9d\x4c\xd8\x82\xaf\x99\xef\x38\x4a\x62\x04\x53\xf8\x36\x18\x5a\x69\x0e\x63\xc9\x2b\x04\xa3\xbd\xfe\xdc\x7b\xae\x10\xd2\xfb\x0f\x0b\xff\x8b\xbe\xc4\x36\x7f\x78\xac\xf1\x3c\xcf\x57\x51\x7d\xcc\xae\x64\x77\xf4\xa1\x0c\x78\x5e\x5d\x28\x2d\xf7\xbe\xf5\x31\x5c\xaf\xe1\x44\x5c\x38\x97\x93\x47\xd7\x5d\x88\x00\x37\xe5\x99\xd6\x5a\xdc\x8f\x5f\xb8\x07\xed\x81\x44\x1f\x6a\xab\xc5\xb8\x49\xb6\xa8\x75\x77\x39\xe8\xdc\x75\x8c\xd9\x43\xcb\x60\x96\x14\x71\xab\xaf\xdb\xf7\xb7\x24\xe9\xa1\xe6\x27\xbd\xfb\x8e\x3e\xe3\x37\x0f\xcd\x2f\x89\xc9\x1a\x7d\x15\x45\x96\x20\xa7\xbd\xeb\x71\xeb\xda\xb0\x80\xd2\x7d\x35\x6c\xeb\x71\xc4\xba\x38\xcb\x2e\xda\xfc\x4a\xc1\x2a\xeb\x41\xeb\x41\x1c\xaf\xa6\x8b\xf1\x07\xd5\xad\x7d\x0c\x1e\xfb\x9d\x7b\xf2\x5a\x7f\x9b\xd8\xd7\xed\xd9\xfc\xb1\x2b\x8a\xb6\xdb\x1d\xb2\xfc\xf3\x23\x7c\xf3\x30\xf7\x45\xb2\x0d\x3e\x96\x78\x7f\x4b\x8c\x6f\xc4\x3f\x6c\x9e\x47\x7e\x82\x91\x7d\x9e\xaf\xa1\xb7\x69\xaf\xff\xa7\x9f\xb0\x7a\x96\xe1\xf7\x49\x57\x20\xce\x63\xc6\x17\x84\x46\x90\x40\x61\x01\x64\x38\x99\xe5\x14\x8d\x61\x65\x4d\x45\x69\x1c\x50\xb4\x4c\x62\x24\x54\x55\x99\x53\x48\x8a\xc2\x70\x0a\xe0\x04\x85\x71\x28\x4b\x42\x0e\x65\x51\x1a\xe5\x64\x1a\xd2\x79\xae\x40\x65\x1a\x3b\xce\x70\x58\xb6\xa3\x44\x6f\xc3\xb0\x8f\xb1\x2c\x9b\xe3\x0a\x44\x49\x57\xf8\x60\x51\xab\x65\x19\x0b\xd2\xe8\xc1\xf6\x75\x7f\xfa\x7a\x6f\xf5\xc7\x8c\xea\x2a\x83\x7b\x61\x6e\x3e\x8f\x1f\xab\x02\xdd\x9f\x35\xaa\xb2\xbc\xa0\x5e\x3f\x84\x8f\xe9\x82\x1e\xda\xf6\x42\xa9\x2e\x54\x1b\x9b\x8f\x7b\x60\xfc\xda\xe8\x19\x74\xdd\x58\x0e\x3e\x4c\xb6\xdb\x04\x5d\x65\xf9\x1c\x58\xa1\xef\x0a\x31\x83\x6c\xb7\xef\x7a\x72\xc7\x7c\x6e\x5e\x0e\x06\x97\xa3\x61\xa5\x76\xd7\xa8\x5c\x3b\xae\xd6\xc4\x17\x6d\x0c\x57\x94\x6a\xd3\xc2\x6e\x0d\x9c\x59\xf7\xaa\x7d\x54\xec\x31\xe0\xde\xb9\xe4\x99\x49\x95\x30\x66\x10\x9a\x33\xea\x6d\x6a\x3b\xa3\xa6\x70\x6d\xbb\xb7\xd7\x77\xe2\x62\xf9\x62\x4e\x6f\xa7\xbe\x2b\x74\x52\x5c\x41\xb0\xd3\xcc\xe9\xff\x8e\x2b\xe0\xe7\x31\xe3\x0b\x9a\x50\x39\x56\xa3\x08\x1a\x42\x9a\x55\x31\x19\x67\x64\x4a\x66\x39\x0d\x27\x80\x46\x11\x18\x26\x33\x14\xcd\x01\x9c\xd4\x80\x86\x91\x28\x01\x54\x54\xa6\x70\x99\x26\x08\x19\x65\x64\xc8\x71\x17\x7e\xb8\xc7\x53\xad\x9a\xcc\x34\x76\x12\x63\x68\xae\xf0\x6d\x90\x4b\x91\x14\x87\xe7\x78\x02\x5e\xd2\x13\xf0\xde\xe3\x33\x26\xba\x94\x89\xca\xb7\xcc\x03\x69\xac\xbb\xab\xf1\x7b\x83\xb8\x5f\x9a\x2f\x97\xab\x3a\xdf\x75\xaa\xd8\x1d\xde\x61\x2a\x0c\xfd\xe8\x52\x4d\x4e\x69\xaa\xe8\x2b\x6f\x3f\x3e\x73\x7d\x7a\xca\xae\x5b\x2d\x85\x76\x9d\x17\xed\xba\xda\xbd\x6c\x2f\xae\xd1\x3b\xd9\xd6\xac\x8f\xde\xd8\xef\x39\xdf\x13\xfc\xbf\x5a\x9b\xff\x78\xdf\x58\xed\xed\xe7\x37\xbe\xd7\x7f\x09\x7a\xba\x87\xf6\x9e\x87\xc4\x40\x63\x9e\x6c\xf6\xfd\xbe\x55\x99\xe1\x33\xf6\xfd\x6e\xf5\xda\xed\x5e\x1b\xd7\xb3\xeb\xc9\xdb\xac\x37\xb8\x6e\x56\x98\x57\xc8\x2d\x6d\xfd\xd6\x25\x5f\xc4\xe6\x80\x34\x27\x4d\x61\xd4\x52\x49\xac\x27\xde\x4e\x98\xe5\xed\xab\x89\xe2\x3c\x69\x5e\x52\xc6\x40\x26\x3e\x5c\xdf\x53\x5a\x29\x9e\x52\x6b\xa5\x59\xdb\xff\xe7\x9e\x82\x97\xf7\x14\xec\x3c\x56\xee\x2f\xaa\x7a\x99\xb3\x97\x69\x62\x1c\x83\x7e\x43\xb1\x6f\x28\x86\xa0\xe8\x8d\xff\x2f\xd3\x9a\x29\x12\xcf\x4e\x80\xc2\x97\x24\xce\x91\x1c\xcd\xe0\x1c\x9d\x63\xe9\xe9\x76\x1e\x30\xf4\x6f\x77\x49\xf6\x53\x99\xdc\xe9\xe4\xfa\x7a\x3d\xbc\xab\x30\x35\xa3\xc6\x35\x71\xf4\xfd\xb9\x72\x69\xa3\x33\xc7\x7e\x6b\xbd\x7d\x60\x13\x75\xf8\x30\x05\x95\x5b\x50\xf7\xf3\x2a\x21\xc5\x84\xd3\x9f\xc8\x84\x79\xbe\xf2\xf2\x1b\x04\x39\xeb\x73\x11\x98\x52\xf1\xcc\xa2\xc4\xa6\xe5\x63\x27\x1a\x19\x6b\xd1\x59\x05\x16\x3c\xc3\xdf\x0a\xd0\x24\x0b\x27\xd8\x71\x68\x88\x44\x41\xe4\x48\x6e\xc8\xc4\x0c\xfd\x38\x2c\x54\xa2\x72\x71\x1c\x16\x3a\x31\x8b\x3d\x0e\x0b\x93\x98\x7b\x9f\x67\x2f\xf8\x59\xea\x86\xf9\x1b\x15\xae\x10\xa6\x6c\x1d\x31\x63\x47\xf4\xc9\x86\x1f\x33\xf6\x1d\x13\xdd\x7c\x40\x37\x89\xfe\x3f\x9f\x1d\xf3\xa4\x72\xcd\x15\xf2\x59\xb3\xcc\xc5\x49\xa5\x88\x2b\xe4\xd0\x72\xe3\x2f\x58\x40\x48\xd3\xde\x4e\xa9\x72\xf3\x81\xf4\x55\x47\x97\x2b\x5b\x3a\x96\x6b\x3b\x10\x9e\xaa\x63\x1f\x8d\x69\x9d\xac\xe6\x7f\xbd\x88\xfa\x7b\x7a\x2e\x3e\x8c\x6d\xfe\x66\x63\x45\x42\xcd\x35\xd4\x50\x96\x23\xd7\x88\x7c\xbd\x04\x2b\x35\xa7\x76\x6e\x89\x8a\xe5\x89\x8b\x59\x87\xa8\x2d\x1c\x71\x37\x7f\x93\xbf\x56\x6d\xc7\x1b\xf3\xaf\x57\x5b\xc1\xf8\x9d\xf2\xf3\x8b\x32\x63\x77\x31\xd6\xe2\x9d\xe8\xc7\xc6\x88\xcc\x1d\x6c\xa9\xe9\x11\x9a\x9d\x04\x14\x22\xc2\x13\x88\xb2\x32\x9b\x42\x44\x44\x62\xec\x3d\x1a\x11\xb9\x3b\x16\x64\x25\x26\x85\x78\xa8\xc4\x98\x72\x2c\x1e\x7a\xd7\xc9\x8e\xe6\x87\xd9\xc5\x93\x9d\x2a\x1d\xba\xfb\xfd\x1c\xc9\x52\xd1\x66\xc7\x03\xd2\xa5\xcc\xad\xee\x67\x70\x86\xf8\x9e\x36\x28\x03\x12\xe3\x28\x55\x61\x09\x9c\xc6\x28\x56\xa1\x54\x96\x51\x68\x12\x03\xb8\x86\x31\x80\x00\x38\x43\x6b\x2c\xcb\x72\x0a\x06\x54\xc8\x92\x32\xa5\xd0\xa8\x4c\xd2\x38\xcd\x92\xb2\xe2\xcd\x98\x83\x21\xf3\xf8\x40\x17\xab\x11\x91\xd1\xec\x38\x7b\xad\x81\xa0\xf2\xd6\x29\x82\xb7\x3b\xae\x18\x4c\xab\xef\xe8\x67\xa8\x13\xcf\x0b\xb3\xc5\x8e\x1a\xf3\xda\x35\x9c\x29\x04\xd3\x9b\x38\xcd\xbb\xbb\x8f\x87\x7b\xf6\xed\x5e\x7f\xac\x80\xaa\x4b\xb5\xa9\x0e\xef\x4f\x4b\xf9\xa8\xe8\x53\x4d\xcc\xfa\x2a\xdb\x3f\x05\xff\x7f\x47\x9e\x4d\x06\xb4\xc0\x98\xb5\x36\xda\xee\x5f\xbe\x4d\x87\x55\xee\x63\xb2\x9a\xdc\x8f\x88\x77\xbd\xa7\x4f\xdd\xa1\x8c\xd5\x56\x8b\x7e\x1b\xb2\x31\x34\xd1\xb4\x37\x7c\x00\xf3\xb2\x7a\x79\xf3\xd1\xd7\xd8\x6e\xb3\xdf\x1d\x42\x71\x76\xa7\x57\x27\x84\x33\x1a\xae\xdc\xc9\xd3\x1a\xbf\x5e\x0a\x6c\x7d\x24\x5b\x2f\xcd\x47\xb4\xae\xdd\x57\xa6\xfc\xf3\x0b\xb8\xc6\x6b\xad\xbe\xbb\xba\x7f\xe3\x58\xfb\xa9\x0b\x9c\xd9\x7b\x65\xac\xf0\xbc\x40\xaf\x30\x14\x38\x95\x4b\x57\xd0\xc6\xad\x41\x95\x9f\xfd\xfc\x79\x11\x2f\x31\xc4\x57\x21\xfa\x69\xb2\xf1\x5b\xf8\xfe\x46\x17\xb5\x24\x90\xf5\x2a\xd2\x6d\xd8\x05\xb3\xe7\xf7\x0e\x18\xf7\x38\xba\xf2\xa1\xd9\x1c\x44\x15\xd3\x12\x1f\x27\x1f\x95\x87\xdb\x97\xba\x79\x17\xc9\xc6\x57\xef\xf9\xd5\x73\x77\xab\xdb\x4a\x82\xfe\x8e\x5e\x53\x9e\xca\x99\xe9\x57\x8f\xa7\xdf\xe1\x77\x6d\xa3\x8a\xb9\x15\xb5\x69\x8e\xdc\x59\x67\xd5\x77\x6a\x4c\xe5\xa9\xd5\x26\x44\xc8\xa9\xf7\x3d\xad\xd1\xba\xbc\xd5\xa9\xdb\xd5\xb8\x7b\xf9\xc8\x3b\x8c\xcf\xca\xed\xb8\x7a\x19\x12\x9e\x65\x91\x4b\xe3\x6d\x87\x47\xe1\x04\xfa\x80\x57\xc6\x27\xd0\xef\x24\xe9\xbb\x26\x61\x3a\x24\xf5\x5a\xed\x09\xef\xcb\xfe\x35\x61\x36\xc5\xcb\x0f\x8c\x19\xac\x75\x1b\x9b\x6b\x9d\xfa\x74\xd1\x7f\x98\x59\xee\xf0\x72\xc4\x47\xf2\x77\xc8\x2d\xfd\x98\x3d\x1c\x27\xff\xa1\xf4\xbb\xf5\x59\xeb\x48\xfa\x31\x5f\x9a\x6d\x74\x51\x3b\x4d\x17\x5d\x65\x8b\x4f\xf8\xdd\xba\x48\xf4\xc5\x21\xf4\x03\x5d\xfc\xf3\xab\x06\x2d\x3f\xab\xf5\x7f\x28\x13\x55\x6f\x83\xff\xbd\x20\xea\x07\x8b\xe2\x3c\x22\x16\xed\x64\x95\x64\x69\x55\x56\x55\x14\x57\x49\x1a\x65\x31\x86\x66\x30\x85\x04\x14\x60\x20\xa7\xd2\x90\xa5\x29\x05\xe0\x9c\x22\x93\x18\xa4\x71\x95\x01\x40\x63\x50\x80\x6b\x10\x52\x32\x41\xab\x30\xd8\x9d\x76\xae\x68\x47\x14\x45\x3b\x9c\x45\xd9\x9c\xa5\xc8\xf0\xed\x4e\xbe\x78\x6a\xb4\x4b\xf6\x7a\xec\xf3\xd4\xff\x7c\x7f\x2f\x86\x96\x76\xc0\x88\x43\x5c\x6f\x9e\x2d\xbe\xc6\x86\x7e\xbf\xc2\xbd\x2c\xee\x1e\xf0\x57\x62\xc5\xf4\xb5\x35\xdb\xeb\xc0\x17\x41\xc6\x46\xa3\x16\xa5\xbf\xbf\xbe\xb4\xd0\x8a\x39\x9b\x58\x5d\x87\x99\x75\x31\x1a\xef\xcb\x2f\x4f\xb8\x3a\x1c\x8d\x35\x58\x33\x57\x0a\xda\xe3\x81\xf6\x54\x9b\xbc\x3b\x4f\xf7\xfc\xdc\x6e\xbb\xcf\xf3\xca\x62\xfd\x5c\xe1\xa7\x65\x22\x5e\x23\x6e\xca\x59\x11\x8f\x7f\xdb\x02\x1d\x13\x71\x8c\xad\x7e\x33\x9e\xfc\x88\x73\x46\xfa\xfb\x5e\x5d\x9a\xfe\x2f\x19\xe5\xf6\x9f\xfc\x51\xee\x5f\x1c\x65\xf9\x2d\xfd\xfe\x31\xf4\xeb\xf7\x63\x34\x44\xde\x7e\x20\xeb\x28\x7c\xea\xd2\xfc\x9a\xab\xa2\x3d\xbb\x21\xcc\x56\x0a\xc6\x60\xd8\x98\x63\xa7\xcf\xe4\xa2\xfd\xb2\xe0\xfa\x0c\xf5\x52\x25\x56\xb1\xae\xd8\x3a\xd1\x5b\x52\x7f\xa9\x11\xa9\x7a\x9a\xae\x4e\xce\x4e\xce\xd8\x57\x87\xd0\x0f\x23\x52\x13\x1f\x4e\x97\x32\xb0\xe0\xb5\x53\xb9\x6e\xbf\xb1\xef\x74\x7f\xb0\xba\x17\x3b\xcf\x8b\x76\xe3\xb5\xff\xdc\x6f\xe8\x15\x68\xd3\x84\xcb\x33\x13\xeb\xb1\xe2\x0e\x9b\x8f\xd8\xad\x38\xe0\xc8\xae\xce\x7d\xf4\xd9\xca\xf2\x52\x10\xb5\x06\x5e\x1f\x57\x1f\xde\x5c\xba\x3b\x6e\xc8\x77\x1d\xa1\x72\xf6\x88\xa4\xca\x04\xc7\x42\x99\x04\x90\xe5\x18\x8a\x26\x70\x8a\x26\x09\x05\xa8\x38\xa6\x70\x24\xc4\x08\x59\x53\x50\x86\x94\x09\x9c\x80\x90\x25\x20\x46\x62\xb2\xc6\xa0\x18\xa0\x54\x0e\x25\x35\x4c\x0e\x96\x51\xb1\x53\x4a\x3f\x41\x79\x3c\x37\x10\x91\x38\x4a\xe4\x6c\x04\x08\xdf\xc6\xeb\x04\x81\x2d\x36\xda\x6c\xb3\xbf\xea\xbf\xc8\x77\x78\x93\x27\x1e\xee\x9f\x07\xd6\xdd\xe2\x79\x82\xa2\x5a\x83\xb5\xdb\x2d\x66\x81\x0a\x83\xb7\xdb\x87\x6b\x7e\x42\xf0\x9b\x38\xe4\x3f\x39\x71\x28\x78\x0e\x9c\x75\x79\xe3\x60\x7c\x81\xb1\x72\xbf\x7a\xab\x73\x6f\xbe\xa9\x4e\x9f\xfb\x4a\x6f\x84\x37\xa8\xa7\x57\xa3\xb2\x98\x35\x1a\x70\xc6\xdd\xb2\x73\x52\xc1\x04\x63\x3c\x7f\x7f\x99\x0b\xf3\x26\x67\xbf\x3e\x5a\x28\xc7\x60\x75\xba\xdb\x7e\xd0\xe0\xf5\x82\x7c\x59\xd6\x9d\xd6\xa5\xdd\x42\x75\xec\xb5\xad\x3b\x14\x8f\xde\xae\x1f\x0c\xf9\x69\xda\x7e\xa0\xcc\x5a\x89\xd8\xb3\x63\xb4\xbb\xb1\x27\x26\xf3\x76\xec\x8d\xf9\x73\x45\xbf\xae\xa0\x6d\xf4\xb6\xb1\x76\x9e\xde\x44\x6c\x3e\x45\xc1\x7a\x69\x62\x9c\xd8\x7c\x5f\xb5\xab\xeb\x2e\xe5\x54\x04\xa5\x1a\xc8\x48\xcc\x1c\xab\x6b\x4c\xaf\x59\x72\xdb\x3e\x23\x16\xe5\xfb\xf3\x09\xf4\xeb\xa3\x87\x8a\x7d\x02\x7d\x9e\xff\xf7\x66\x5b\xa9\x63\x6b\xe5\x78\x5d\x74\x8d\xc7\x5c\x31\x8b\x74\x71\x6a\x5f\x78\xb6\x70\xa9\x24\xf0\x1d\xa4\x8b\x7f\x1a\x2d\xb4\x59\x43\xb9\x27\x77\x0a\x96\x6f\x8f\x66\xe5\xc9\x30\x7b\x43\xed\x16\x36\xc5\xc1\x2d\x76\xab\x3c\xde\x0e\x6e\x07\xd7\xf2\xdd\x02\x70\x3d\xc8\x0d\xe0\xb3\x8e\x19\xc4\x8a\x72\x6f\xef\x06\xf2\xb0\x67\x55\xc5\x96\x03\x74\xd2\x82\x7d\xb1\xaa\xcc\x97\x38\xf9\x50\xc5\x5c\xc0\xbf\x9d\x7b\x6c\xd5\x38\x46\x01\x9a\x06\x64\x56\xc1\x68\x14\x27\x00\xc1\xb0\x2c\x89\xd1\x94\x22\xa3\x32\xa1\x69\x18\x00\xb8\x0a\x34\x12\x45\x51\x0d\x6a\x24\xa7\xe2\x18\xd4\x14\x96\x64\x54\x55\xd6\x64\x08\xb6\xdb\xa2\x4e\x18\x5b\xf1\xe2\xb1\x15\x67\xb2\xf7\x96\x44\x6f\xe3\x35\xcf\x53\xc7\xd6\x9c\x8a\x56\xf0\x1c\x91\x63\x66\x8c\xad\x95\xc5\xdd\x72\x38\x5b\x59\x6f\x77\x5d\x1c\x9d\x54\xbb\xda\x54\x9b\xd8\x0d\x41\x18\x3b\x6f\x53\x00\x04\xed\x75\xe8\xd2\xeb\xc5\xed\x62\x5e\x5b\x80\xcb\xd6\x84\x6e\x31\xad\xd9\x4c\x1e\x3f\x76\x4c\xa5\xaf\x3e\x72\x64\xab\xc3\x6b\x77\x6a\x9f\x17\x5f\x27\x72\xab\xcb\xac\xed\x37\x08\x3b\xd5\xff\xad\xb1\xf5\xd4\xb1\xed\x44\x7f\x7e\x65\xae\x47\x35\xe5\x9c\x63\xeb\x6f\xcc\x15\x8b\xf2\xd6\xdf\x39\xb6\xf1\x67\x1a\x5b\x8f\x8d\xb3\xe1\xd8\xfa\xa8\xbf\x8e\xcd\x36\xcd\x56\x9f\x1d\xa7\xfe\xf6\x6c\xe0\x4d\x8c\xa9\x3c\x55\xea\x6d\xa5\xd1\x58\x3c\x35\xe9\x17\xcb\xb5\x97\xfa\xe3\xb2\x4f\x2d\x56\x7a\xfd\x52\xef\xae\x5b\xad\x06\xd6\x18\xdd\x35\x85\xe6\x83\x06\xab\x35\xbe\xb9\x36\xc6\x7c\x0d\xcc\xf1\x75\xcd\x65\xad\x4e\xd3\x78\x2e\x5b\x49\xc9\x3c\xa4\x7b\xff\x0e\xab\xcd\x7d\x19\xd1\x71\x55\x87\x1e\x33\x11\xc3\x18\x9c\xa7\x5f\xab\xc5\x0f\xbf\x4a\x12\x44\x7a\x83\x56\x87\x1f\x4c\x91\x3b\x61\x8a\x7c\xd1\xd5\xa2\x73\xb4\xd3\xef\xf4\x3a\x99\xeb\x04\xd6\x34\xce\xd3\x08\x17\x72\x9f\xf8\x21\x62\xe2\x57\x7b\x25\xef\x44\x3b\x59\xba\x5d\xb2\x69\xc2\x1d\xc5\x18\x32\x16\x5b\xfd\xb1\x80\x7c\xd9\x82\x5f\xc5\x0e\x8c\xbe\xda\x39\xde\xf9\x40\xd5\x9c\xa7\x5b\x0f\x16\xfc\xa0\x4e\xcd\xd8\xfd\x55\xb0\xc5\xea\xbc\x92\xa5\x13\xc9\x93\x34\x87\xad\xd2\x92\x67\x2e\xe7\x16\xae\x98\x9e\x57\xfa\x2c\x32\x79\xf2\xe7\xb2\x56\xa8\x81\xdd\x3b\x29\x43\x41\xfc\xfb\x2b\xcb\x9d\x55\x16\x5c\x75\xb9\x83\x05\xe9\x8a\x49\x67\x18\x0f\x5b\x62\x03\x91\x1d\x0b\xc2\xb8\x77\x65\x73\x13\x5e\xa7\x79\x32\x3f\xe1\x51\xec\xa5\x38\xca\xf0\xeb\xd8\x55\xa0\xc7\xb2\xb3\x45\x11\xe7\x64\x67\x36\xb0\xcb\x4f\x00\x7c\xb5\x77\x72\x5a\x1a\x73\xfe\x65\xa6\x27\x70\xe6\x1f\x20\x57\x8a\xad\xe4\xb1\x73\x69\xdc\x84\x37\xb0\x9e\xc0\x4f\x80\xa1\x1c\x47\x89\x33\xed\xae\xf6\x8f\xaf\x4b\x75\xf9\xf8\x95\xb2\x87\x73\x1a\x46\x89\x80\xe1\x04\xba\x38\xdb\xd1\x2f\x49\x77\x38\x4e\x3b\xc9\xf5\x2a\x3a\xb5\x35\x8b\xd9\xed\x59\x59\x27\xb2\xa9\xab\xa5\x19\xdc\x1e\x5b\x79\x95\x7a\xfc\x6c\x01\xd3\xd1\x2d\xc0\xe7\xe0\x3b\xc4\x15\x67\x3d\x23\x54\x1d\x25\x49\xba\x00\xd1\x85\xc7\xe7\x10\x20\xc4\x95\x61\xd3\x47\x8a\xb0\x7b\x06\xe9\xbe\x10\xb1\xeb\x9d\x8f\xf5\xc6\x18\x8e\x63\x95\x9f\xaf\xe8\xc4\x7d\xd5\xa7\xea\x7a\x17\x5d\x9c\xe5\xe8\x87\x3a\x3b\x3c\xa6\x73\xb4\x7f\xe7\xf6\xe9\x6c\xed\xe1\x2c\x37\xbc\xa5\x31\x18\xbb\x3d\xfc\xe8\x6e\xdd\xe2\x38\xde\x24\x8b\xcc\x2f\xed\x5e\xf4\xe3\x19\xde\x47\x96\xe0\x5c\x85\x09\x3e\x13\x27\x52\xe7\x33\x18\x5c\xf4\x7e\x16\xf6\x7c\x54\xa5\x98\x8b\x0e\x87\xca\x64\x2d\x79\x71\xfd\xa9\xfc\x25\xf0\x15\x31\xb9\x7f\xd4\x76\x21\xa7\xe7\xd1\xe3\x0e\xb6\xb2\x5c\x16\x6a\xf3\x3c\xbc\x95\xe2\x29\x9f\x97\x88\xe3\xb9\x69\xbe\xb8\xcb\xd3\x38\xda\xc5\x55\xba\x47\xa3\xc3\xbc\x53\xf9\x5b\x02\xdd\x92\xfc\x13\x5b\xcf\xc1\x61\x12\x5b\x39\xbf\x0d\x19\xbc\xda\x3b\x7f\xfc\x6a\xef\x0c\xfb\x0c\x21\xce\x30\x6e\x87\x78\x8a\x38\x3e\x30\x3b\xf2\xb0\x9e\x4d\xbb\x07\x28\xb6\x50\x6f\xc1\x99\x9b\x7b\x07\x5e\x99\x86\x14\x5e\xec\x75\xaa\x42\x0b\x09\xec\xcc\xd3\xa2\xb3\xc3\x76\x67\x46\x01\xe0\x01\xbc\x9f\x6e\x07\x79\xb8\x8b\x39\x4e\xf1\xb2\x5d\x84\x61\x16\xee\xe1\x73\xd6\xcb\xe3\xe7\xe0\xb9\x58\x0b\xd3\x7e\x0f\xa8\x80\xd1\x30\x87\xf2\x50\x6e\x8c\xe8\x4c\xdc\xa6\xa1\x2e\x4c\xdf\xca\x5a\x72\x0c\xf9\xb9\x8d\x61\x07\xf5\x31\xf9\x66\x36\xba\xc4\x2d\x4e\xe7\x57\xf4\xde\x3d\x51\x85\xec\x27\x1a\x94\x17\x26\x76\x6d\xd7\x2f\xd3\x7f\xfc\x6a\xb0\x22\x49\x62\xb0\xe5\x85\x48\xbb\x84\xec\x97\x49\x93\x7a\xe3\x59\x91\x58\x69\x8d\xca\xcb\x17\x15\x51\x7e\x99\x4c\x9b\xe3\xff\x8b\xe4\xc8\xac\x76\xed\xa2\xde\xfe\x56\xee\x57\xb8\x76\x12\x7b\xea\x04\xf8\x50\x07\xdf\x45\xba\x3b\x85\x3a\x93\x87\xe7\x91\x28\x23\x43\xc1\xbc\x2e\x97\xd8\xf9\xc2\xd7\x3e\xe2\x52\xbc\x17\x07\xb1\xf8\x64\xfb\x57\x98\xcd\x3e\xfe\xa3\xa7\xfa\xc1\x11\xc2\x51\x20\x8f\x2a\x8c\x92\x6c\x9a\x2f\x47\x6b\x39\x07\x67\x61\x8a\xf0\xe5\x4b\x74\xa5\xd6\xb7\x3f\xff\x44\x2e\x6c\x73\xae\xc6\x56\xd3\x2e\x6e\x6e\x1c\xf8\xee\x7c\xfd\x7a\x85\x64\x03\x2a\xa6\x5a\x0e\x30\xa8\xc5\x67\x83\xca\xa6\x3b\x7b\x72\x4a\x91\xdf\x01\xcd\x67\x60\x07\x34\xc1\xc2\x57\xe4\xa1\x29\x0c\x84\xc0\xc8\x90\x9f\x08\x41\x94\x5e\x88\xd6\x55\x49\x8b\x2d\x13\xd5\xef\x7e\xcf\x72\x74\x48\x16\xa9\x77\x07\x42\xab\x21\x6e\x96\x80\x90\x81\x50\x17\x06\x82\x58\x15\x86\x89\x55\x11\xff\x6d\x57\x44\xc6\xbd\x9a\x67\x32\x03\x21\xb8\x47\xde\xfb\xaa\x26\xb4\x85\x91\x80\x54\xf9\x61\x95\xaf\x09\xf9\x77\x9f\x25\x3e\x4a\x89\x52\xcc\xf9\x94\xb1\x4b\xa7\x60\x91\x2c\x8b\x93\x5d\xfd\x24\xcb\x46\xa9\xca\x0a\x13\xfd\x82\x15\xc5\x4c\x4d\x84\x53\xd9\x7f\x5d\x0f\x71\x3e\xd2\xb4\x10\x55\x09\xf2\x0d\xe6\x30\x0d\xec\x17\x95\xfe\x45\x35\x64\x30\xb3\xab\x8b\x94\x32\xd8\x79\x8d\x22\x59\xe2\xf8\x5f\x50\x48\xb6\x69\xec\xd5\x90\xca\x5a\x47\xcf\xb4\x9d\x99\x05\x87\xfd\x36\xa2\x02\x07\x78\x26\x86\xa8\xee\x62\x89\x28\xe6\x62\x39\x87\x0e\xf4\x65\xf8\x7f\x01\x00\x00\xff\xff\x25\x6d\xb9\xbc\xcf\x9b\x00\x00") - -func asset_stat_trustlines_5HorizonSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_trustlines_5HorizonSql, - "asset_stat_trustlines_5-horizon.sql", - ) -} - -func asset_stat_trustlines_5HorizonSql() (*asset, error) { - bytes, err := asset_stat_trustlines_5HorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_trustlines_5-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4c, 0x6, 0x91, 0x34, 0x61, 0xba, 0x8f, 0xef, 0xd6, 0x7, 0x77, 0x94, 0xd5, 0xd6, 0x97, 0x60, 0xa5, 0x4f, 0x1b, 0xf4, 0x64, 0x79, 0x33, 0xcb, 0xf9, 0xc4, 0x6f, 0xe1, 0xdf, 0xcd, 0x78, 0xd4}} - return a, nil -} - -var _asset_stat_trustlines_6CoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x69\x93\xe2\xb8\xd3\xe7\xfb\xfe\x14\x8e\x7e\x53\x3d\x41\xcd\xe0\xfb\xe8\xde\xfe\x47\x18\x30\x60\x30\xe6\x3e\x37\x36\x3a\x64\x59\x36\x06\x1f\xe0\x83\xeb\x89\xe7\xbb\x6f\x60\x2e\x43\x19\x8a\x82\x9a\x99\x67\x63\xdb\x2f\x66\xaa\x71\xfa\x97\x3f\xa5\x52\x29\xa5\x64\x4b\x7f\xfe\xf9\xe5\xcf\x3f\xb1\x86\x17\x84\xa6\x8f\xda\x4d\x05\xd3\x41\x08\x34\x10\x20\x4c\x8f\x9c\xd9\x97\x3f\xff\xfc\xb2\xbd\x5f\x88\x9c\x19\xd2\x31\xc3\xf7\x9c\x93\xc0\x02\xf9\x81\xe5\xb9\x98\xf0\x17\xfb\x17\x91\x90\xd2\xd6\xd8\xcc\xfc\xb5\x7d\xfc\x42\xe4\x4b\x5b\xea\x60\x41\x08\x42\xe4\x20\x37\xfc\x15\x5a\x0e\xf2\xa2\x10\xfb\x89\xe1\x3f\xe2\x5b\xb6\x07\xa7\x6f\x7f\xb5\x74\x1b\xfd\xb2\xdc\x5f\xa1\x0f\xdc\x00\xc0\xd0\xf2\xdc\x5f\x01\x0a\xb6\xb8\x6f\x85\xa1\x6d\x6d\xa1\x91\x0b\x3d\xdd\x72\x4d\xec\x27\xf6\xd2\xed\x14\xf9\x97\x1f\x07\xdd\xae\x0e\x7c\xfd\x17\xf4\x5c\xc3\xf3\x1d\xcb\x35\x7f\x05\xa1\x6f\xb9\x66\x80\xfd\xc4\x3c\x77\x8f\x31\x46\x70\xfa\xcb\x88\xdc\x9d\x2e\xcd\xd3\x2d\xb4\xbd\x6f\x00\x3b\x40\x67\x6a\x1c\xcb\xfd\xe5\xa0\x20\x00\x66\x2c\xb0\x04\xbe\x6b\xb9\xe6\x4e\xc4\xf7\x96\xbf\x02\x04\x23\xdf\x0a\xd7\x5b\x70\xc3\xf8\xb1\x37\x00\x02\x3e\x1c\xff\x9a\x81\x70\x8c\xfd\xc4\x66\x91\x66\x5b\xf0\x75\x6b\x31\x08\x42\x60\x7b\xe6\x8f\x2f\x5f\x0a\xad\x7a\x03\x93\xd5\x82\x34\xc0\xe4\x22\x26\x0d\xe4\x76\xa7\xbd\x97\xfc\x2b\x9a\x99\x3e\xd0\xd1\xd8\x0a\x42\x6d\x1d\xa0\xf9\x8f\x9b\xd2\x01\x9c\xcd\x23\xcf\x8f\x9c\xe0\x3e\x61\xe4\x2e\xee\x91\xb4\x91\x6e\x22\xff\x1e\xc9\x2d\x4f\x03\xa1\x3b\x25\xef\x10\xd3\x50\x10\x7a\x86\x81\x7c\xcb\xd5\xd1\xea\xb6\x2c\x80\xd0\x8b\xdc\x50\x03\x36\x70\x21\x0a\x7e\x7c\x11\x95\x8e\xd4\xc2\x3a\x62\x4e\x91\x12\xd2\x75\x55\x19\xa6\x98\xd7\xf3\xd7\x58\x8c\x9e\xaf\xab\xed\x4e\x4b\x94\xd5\x4e\xe2\xa1\x73\xc1\x5f\xb3\x29\x5a\xdf\x83\x1f\xae\xde\x87\x3e\xca\x7c\x00\xd5\x40\x77\x70\x4e\x8a\xdd\x8f\xed\x47\x41\x68\x5b\x2e\x0a\x6e\x21\x1f\x85\xee\xc6\xdd\xb2\x40\x71\x34\xb8\x81\x7b\x12\xba\x1f\xf7\xe8\xf2\xb7\x70\x8f\x42\x77\xe3\xee\xe4\x2d\xd7\xf0\x6e\xe0\x9e\x84\xee\xc6\x9d\x45\x5a\x10\x69\x37\x30\x77\x02\x1f\xc1\xb3\xad\x60\x3c\x8f\x50\x74\xcb\xb2\x49\xb1\xfb\xb1\x11\xf2\x6f\x99\x35\xbe\x7f\x37\x5a\xdc\x8c\x6f\xc1\xed\x04\xee\xc6\xdb\x45\xa5\x31\x02\xfa\x6d\xd8\x33\xb9\xbf\x19\x7d\x1f\x29\xd1\xfc\xd7\x9d\x6a\x34\xe0\xde\x00\xd7\x80\x7b\x37\xe1\x7d\xf4\xbb\xc5\xf5\x20\xf2\x51\xcc\xed\x18\xe0\x7d\xd8\xad\xd4\x1e\x39\x96\xbd\x04\x4e\x0d\xb9\xb7\x65\x8f\xa1\xf1\x3d\xb1\x53\xa0\x7b\x47\xf2\x18\xb8\x6e\xcb\x9d\x02\xd1\x3b\x72\xc7\xc0\xf2\xae\xdc\x5d\xfc\x4e\x01\xe5\xb6\xdc\x2e\x48\xbc\x2b\x73\x6c\xf2\xef\x48\x6e\xdb\xf1\x6d\x91\x5d\xdb\xbc\x2d\x73\xd6\x14\x6e\x8b\x6a\xc0\xbd\x2d\x70\x70\xd5\xbb\xa4\xb6\x9e\xb7\x17\x94\x06\x1d\x49\x6d\xcb\x75\x35\x29\x6c\xcf\xcc\x60\x6e\xef\x25\xda\xf9\xb2\x54\x13\xdf\x60\xfd\xf8\xb2\x1b\x1b\xab\xc0\x41\xdf\x0f\xbf\x61\x9d\xf5\x0c\x7d\xdf\x3f\xf2\x03\x6b\xc3\x31\x72\xc0\x77\xec\xcf\x1f\x58\x7d\xe9\x22\xff\x3b\xf6\x67\x3c\x64\xce\xb7\x24\xb1\x23\x1d\x90\x0f\x78\x5f\xce\x10\xcf\x6f\xee\x81\xf3\xf5\x5a\x4d\x52\x3b\x37\x90\x77\x02\x58\x5d\x3d\x07\xc0\xe4\x36\xf6\x72\x18\xdf\x1e\x7e\x0b\x62\x90\x97\x4b\xcd\x87\xe2\xef\x75\x1e\x2d\xf4\x6e\x79\xce\x6c\xa9\xd6\x3b\x17\xf6\xc4\xfa\x72\xa7\x7c\xa4\x95\x1c\xd0\x9e\xa9\x3f\xa1\x5c\x10\xf9\x48\xe1\xdf\x80\xc4\x06\x68\x28\xd9\x99\xb9\xcd\x62\x66\xbe\x07\x91\x1e\xf9\xc0\xc6\x6c\xe0\x9a\x11\x30\x51\x6c\x86\x3b\x07\xe0\x5b\x31\x1d\x19\x20\xb2\xc3\x5f\x21\xd0\x6c\x14\xcc\x00\x44\xdb\x6c\xe2\xe5\xe2\xee\xd2\x0a\xc7\xbf\x3c\x4b\x4f\x24\x08\x67\x85\x4d\x3a\xe4\xbe\x98\xb1\xeb\x9e\x0a\x79\x70\x80\x34\x83\xef\xbc\x3c\x19\x74\xbf\x7d\xc1\x30\xec\xf0\x8b\xa5\x63\x70\x0c\x7c\x00\x43\xe4\x63\x0b\xe0\xaf\x2d\xd7\xfc\xc6\xb0\x7f\xc4\x75\xa3\x76\x15\xe5\x35\x96\xde\x3e\xe8\x02\x07\xa5\x08\xf3\x7c\x9a\xf0\x02\xd8\x51\x9a\x34\x41\x90\x97\xe2\x36\x08\x42\xc7\xd3\x2d\xc3\x42\x3a\x66\xb9\x21\x32\x91\x7f\x14\xf9\xf2\xc7\x65\xdd\x1f\x5b\xf1\x93\xb6\x08\x1e\x32\xc4\x3e\x11\xc0\x34\xcb\xb4\xdc\xf0\xe2\x66\x80\xe6\x6e\xe4\xa4\xdf\x73\x23\x27\x88\x34\xe4\x86\xfe\x36\x15\xbc\x2c\xe6\x4e\xc6\x72\x0d\x1b\x6c\x33\x46\x1d\x05\x61\x3a\x9d\x9d\xe0\xd8\x73\x90\xee\x39\xc0\x72\x53\xa4\x68\xfa\x92\x74\x38\xf6\x51\x30\xf6\x6c\x3d\xc0\x42\xb4\xba\x64\x66\xd8\xc0\xbc\xc6\xe8\x66\xdd\xec\x2d\x12\x6d\xb5\xda\x16\xd0\x2c\xdb\x0a\xb7\x85\xdb\x95\xff\x60\x12\xdb\xbe\x75\xdb\x32\xdd\xed\x58\x68\x4b\x6b\xf7\x4b\x62\x34\x70\x1c\x5a\xec\x8d\xfe\x2b\x4e\xab\xb1\x7c\x59\xca\x57\xb1\x6f\xdf\x0e\x55\xf1\x9f\x9f\x18\xfe\xc7\x1f\x37\x9e\xbe\x24\x78\x89\xf3\xa6\x00\xef\x21\x9e\xd5\xe5\x05\xda\x79\x3d\xbf\x87\xf4\xd6\x3c\x17\x70\x29\xf6\xdb\x61\xbe\x6d\x18\xdb\xfe\xef\xd1\x36\xb1\x1d\x32\xee\x9a\x83\xeb\xe9\x28\xd9\x16\xce\xda\xc0\x5b\xa5\xe7\xfd\xf3\xa3\xea\xcf\x07\xc6\x3b\x22\xfb\xdf\x40\x30\x4e\x90\x61\xdf\xf8\xf6\xcc\x47\x8b\x77\x85\xb4\x08\x4e\x51\x68\x5b\x41\xf8\xae\xe8\x71\xb4\x7d\x70\xf7\xdd\xcf\xd0\xf6\x02\x14\x5a\xce\x95\x96\x1f\x07\xd6\x94\xb6\x95\xa8\xf3\xf3\x41\xfd\x11\xef\xa2\xbe\x4f\x7a\xae\xb8\xce\xb5\xdc\xe0\x1c\xe6\x54\x8a\x6b\xde\xb2\x1f\x7c\x3d\x5a\x63\xfb\xc4\xeb\xdb\xb1\x91\x23\xff\xce\x08\xba\x9b\x79\xd1\xaf\x45\xd0\xd8\xdd\x41\x10\xa0\x30\xcd\x9e\xbb\xb6\x7a\xf5\x36\x70\xb6\xcd\x2a\x1d\x7a\xe6\x5b\x10\xb9\x57\x82\x58\x7c\xf3\x5a\x84\x8b\x6f\x62\xba\x17\x69\x36\xda\xfa\x1b\xb4\xe2\x19\xc9\x4f\x8d\xa2\x89\x1a\xde\xa7\xac\xbb\xb2\x5c\xd4\xeb\xbe\x80\x57\x7c\x63\xff\xe4\xde\xc2\x17\x8f\x1e\xec\x7e\xcd\x21\x76\x03\xf6\x47\xfd\x61\x97\xd6\xef\xdc\xc1\x9a\xa5\x75\xfc\xcc\x9b\x96\xeb\xf9\xe1\xd1\x1a\x05\xa9\x28\x76\x95\x0e\x86\x5f\x76\x9b\x68\x15\x82\x30\x44\xce\x2c\xc4\xb6\xcd\x22\x08\x81\x33\xc3\xb6\x43\x26\x2f\xda\xfd\x82\x6d\x3c\x17\xbd\xed\x6c\x0d\x60\xd9\x91\x9f\xe8\x6a\xaf\x69\x08\xd7\x33\xf4\x7e\xa5\xec\xa6\x25\x12\xb8\x6f\xc3\xfe\x51\xe3\x95\xda\xd9\xcf\x6c\x78\xfe\x65\xa5\x7e\x8b\x2d\xf1\x1f\x0c\xff\x03\x13\xd5\x02\xb6\xfb\xe7\xff\xfa\x89\xb1\x0c\x43\x31\x7f\xa4\xd6\x55\x32\x0d\x7b\xb8\xca\x92\xb3\x3c\xc9\x98\x7b\xc5\x1a\xbb\x89\xb6\x6d\xab\x4b\x25\xb4\xcd\x1d\x9f\xa0\x12\x44\xda\x9e\x84\x8f\x82\xb3\x0e\x88\x4a\x1d\x31\xfa\x08\x1c\xdb\xd2\x5b\x3e\x89\x9c\xf7\x51\x4e\x89\xc9\xba\x3b\x7a\xc6\x1d\xb1\x79\x80\x6e\xf5\x30\x6f\x79\x26\x72\xf8\x47\x79\x9e\x20\xee\xe7\xf9\xa6\x93\xbb\xb8\x8f\xdc\x05\xb2\xbd\x19\x7a\xa7\x4b\x3b\xa9\x7e\xa2\x23\x4a\x4c\x77\x3c\x61\x82\xc3\x7c\xed\xb7\x7b\xea\xe1\xe4\x45\xef\x19\x62\x7e\xa5\xa3\x39\x37\xc2\x61\x1e\xf8\x0c\xf1\xd2\x10\x67\xda\xae\x1a\xe3\x34\x47\xf4\xb0\x31\x4e\x93\xe2\xdf\x4e\xed\xf6\x3c\x79\x4b\x69\x53\xb7\x5a\x77\x62\x86\xeb\x51\x56\x89\x25\x80\x47\xd2\xae\xb8\xc7\xbf\x11\xa9\xad\x20\x88\x90\x7f\x3f\x14\xf4\xf4\xd4\xec\xf4\x8d\x59\x42\xdb\x72\xac\x2b\x23\x8a\x9b\xb9\xe0\xbf\x99\x55\x25\xbc\x33\xb1\xaa\xf2\x50\x16\x95\x7c\xfe\xb3\xf2\xa8\x04\xe6\xe3\xf9\xcf\x2d\xd4\x5d\xa5\x5d\x20\xed\x6b\xf2\x3f\xe9\x0d\xef\x6c\xba\xf7\x61\x27\x4f\xae\xa1\xed\xdc\x3c\x5c\x9d\x85\xe2\x3b\xf2\x8d\x4b\x07\x5c\xc5\xab\x94\x57\xef\xc2\x31\x70\x4d\x94\x9a\xd8\x27\x8d\x93\x5c\xb6\x7b\x3c\x56\x9f\xe6\xce\x1f\x37\xd1\x3f\x6c\x1f\xcd\xd3\xd7\x69\xc6\x09\x57\x3e\x0a\x22\x3b\x35\xba\x87\x2b\x07\xbd\x9b\xcf\x9d\x96\x58\x1f\xb7\xe7\xc5\xba\xc5\xa3\x46\xbd\x58\x71\xfe\x76\x97\xe1\xf6\x0f\xdd\xb2\xde\x5e\x24\xcd\x10\xf7\xb9\xdd\xc5\x0a\xf7\x23\x86\x2a\x6c\x33\x6b\xc3\xf3\xdf\x99\x0c\xc5\x0a\x62\x47\x7c\xc7\x66\xb7\x21\x83\x0f\xe3\xc9\x6a\x5b\x6a\x75\x30\x59\xed\xd4\x4f\x93\x8a\x3d\x51\xe9\x4a\x6d\xec\xdb\x4b\x29\xd7\x6a\x0c\xcb\xb2\x42\xe6\x65\xaa\xa8\x36\xe9\xdc\x40\x29\xd6\xd4\x82\x52\xac\x74\xd5\x46\x97\x2c\x0f\xa9\x51\xad\xd8\x2e\xd7\xd5\x6e\x5e\xaa\x8b\xed\x3e\xd7\xcc\x73\xf5\x01\x59\x7e\x79\xc5\x84\xdd\xc5\xed\xff\xcf\xe3\xf8\x2b\x46\xbe\x62\xf8\xeb\xce\xca\xd8\xcb\xcb\x2b\xf6\x22\x36\x45\x51\x14\x7f\xfe\x7c\x89\x6f\x90\x87\x7b\xa7\xff\xfe\xf1\xe3\x3d\x86\xf9\x41\xb5\xc4\xb6\x54\xba\xae\xca\x52\x23\x5f\x53\x8b\x39\x8e\x22\x45\x9a\x62\x47\x4c\x43\x2d\xb4\x5b\x4a\xa9\x5f\xe5\x4a\x39\x25\x5f\x6b\x2a\x72\xb1\x4e\xb7\x39\x69\xd8\xef\x75\x4f\x0c\x85\x2d\x33\x9e\xe1\x05\x81\xa2\x19\x81\x7a\xc5\x88\x1b\x14\xa9\x87\x28\x92\x54\xb3\x48\x96\xbb\x12\x43\x8a\xb5\x41\xb7\xd8\x2d\x53\xe2\xb0\x22\x0e\x06\xa5\xc1\xa0\x47\xf6\xca\x83\xe1\xb0\xc5\x4a\xc3\x81\xd4\x69\x54\x0b\x83\x51\x5b\xec\xb3\xdc\xa0\x4e\xdf\xa0\x78\xcb\x8a\x74\x2a\xc5\x2b\x7e\x73\x39\xdf\xf6\x84\x0b\x5e\x9f\x45\xfb\xa8\x1f\x9e\xcf\xa4\x1d\xed\xc8\x52\xba\xc0\x1b\x0c\xc5\x22\xc4\xf2\x3a\xa1\x91\x9c\xc6\x68\xbc\x60\x90\x14\x30\x18\x8a\x20\x34\x8e\x61\x05\x40\xd2\x06\x30\x08\x1a\xa7\x80\x8e\x6b\x0c\xa9\xb1\x14\xa5\xe1\x9c\x86\x04\x61\x6b\x2a\xfc\xc9\x6b\x8b\xc1\x70\x24\x20\x11\x45\x1a\x06\x49\xf3\x00\xe7\x34\x1c\x71\xb8\xa1\x13\x06\xab\x53\x04\x0f\x09\x03\x40\x9d\xc4\x35\x16\x42\x9c\x87\x14\xa5\x33\x1c\xc7\x90\x8c\xc0\xb3\x3c\x41\x32\x80\x60\x5f\x62\x17\xc3\xb7\x15\xf7\x3f\xf6\xca\x0d\xaa\x16\xbd\xce\xae\xdb\xd5\x1c\x57\x70\x0b\x42\x99\xc4\x57\x93\x5c\x26\xc0\xcd\x30\x58\xca\xcb\x0d\x31\xd0\xdb\xfd\x21\xc8\x55\x40\xd1\xdc\xca\x4b\x2a\xad\x80\xcd\x8c\x6c\xbe\x8b\x3c\x12\x07\x04\x1d\x8b\xe5\xa6\xff\x40\x41\x3e\xf5\x7a\xb9\x68\xeb\x57\x1c\x95\x00\x0c\x05\x58\x12\x09\x1c\xa1\x0b\xbc\x4e\xe9\x2c\x8f\x10\x27\xe8\x34\x4d\x18\x00\x20\x16\xea\x24\x4b\xe1\x1a\xe0\x38\x1d\xc7\x09\x9d\x66\x10\x47\xb3\x3a\xc9\x33\x90\x16\x28\xc8\xf3\x5b\x27\xfb\x0c\x67\x67\x05\x8d\x24\x49\x16\x21\x92\xa6\x68\x8e\xe6\x78\x40\x70\x04\xa4\x69\xc8\x73\x1c\xaf\xd3\x06\x45\x0b\x8c\xa1\x01\x5a\x00\x80\xd7\x29\x16\xa7\x78\x40\x21\xc4\x72\x34\xa3\xe9\x06\xa5\x69\x2f\x71\x48\x26\x18\x46\x60\x38\x81\xe7\x0e\x1e\x9b\x27\x1b\xa3\x09\xa1\x46\x8c\x87\x6b\x15\xae\x4f\xbb\xeb\xfa\xa2\xbb\x2a\x51\xbd\x99\x37\xcd\x2c\x8a\x62\x3d\xcc\x13\x55\xb2\xc6\xe5\x38\x76\x14\x31\x65\x01\x96\x75\x7c\x2e\x06\xa3\x89\xd0\x64\x87\xfc\x5a\x96\x21\x1b\x85\x53\x23\x9b\xaf\x67\x14\x27\x8b\x57\xb5\xc0\xf0\x37\x8d\x6e\x6c\xe1\x41\xa3\x57\xa3\x62\x8f\x92\x8f\xff\xd9\x85\xb7\xe0\xf4\xef\xa5\xd8\x68\xee\x7d\xa7\x81\x37\x26\x6d\xaa\x65\x70\xe3\x80\x5f\xf5\xe4\x9c\x49\x9a\xfc\xaa\xba\x98\xd7\xeb\x59\x37\x6b\x66\x07\x4b\xb3\xd1\xca\x96\x73\xdc\x1c\x09\xb3\xc0\xaa\x44\xf4\x54\x2d\xb7\x68\x6f\x50\x96\x3a\xb2\x4e\x13\x0d\xb5\x32\xe0\x66\x95\xb9\x87\x93\x22\xed\x65\x18\xb7\xa5\x51\x9b\x68\x19\xab\x4a\xf1\xe8\x82\x9c\xe6\x15\x07\x8f\x2e\xe0\x95\xbf\xd1\xf7\xfe\x9e\xeb\x4e\x8f\xc6\xd1\x36\xac\xd1\x34\x2d\x00\x08\x18\x96\x34\x48\x03\x00\x9e\x86\x1a\x47\x93\x9a\x86\x34\x0a\xe2\xcc\x36\xf2\x11\x9a\xc6\x93\x34\x20\x19\x52\x43\x24\xc1\x19\x3a\xa7\x91\x38\xa4\xc0\xd6\x1b\x3f\xa3\x55\x08\xb8\x8e\xeb\x94\xa1\xb1\x02\xa3\x71\x08\xa7\x34\x06\x92\x3a\xe2\x78\x02\x71\x80\xe7\x29\x01\x12\xbc\x46\xea\x34\xe4\x08\xca\xd0\x48\x44\x72\x06\xc9\xeb\x02\x10\x04\x92\x67\x71\x81\xa5\x5e\xe2\x1e\xfc\xe8\xd1\xc4\xc1\xa3\x57\xb3\xce\xcc\x62\x07\xe5\xd1\xa4\x43\x78\x9c\xeb\x76\x9b\xc6\x3c\xd2\xd4\xca\x24\xcf\xea\x82\x98\x23\x8a\x0c\xae\xb5\xc7\xb0\xdd\x59\xcb\xa3\xb6\x30\xd5\x97\x23\x4f\x62\x5c\x72\x89\x8c\xb5\x6b\xd4\xa6\xe3\xd9\xa8\x22\x8f\x34\x4e\xb1\xb2\x9e\x32\x58\x0f\x83\x46\x2f\xef\xf4\x13\x1e\xbd\x3c\x59\x5c\x51\xaa\x0d\xad\xe6\x4d\xca\x99\x56\x2b\xd3\x69\xe7\x0a\xd5\x52\x2e\x1b\x46\x46\x99\x74\x14\x82\x84\x30\x5f\xf6\x89\x8a\x4b\x72\xeb\x46\xbe\x89\xab\x0d\x0e\xf4\xc2\x8c\xc8\x0d\xf2\x94\x6b\x22\xe4\x99\xcc\x72\x18\x84\x9d\xb2\x94\x0d\xa2\x4a\xb6\xaa\x3a\xb3\xa9\x37\xac\x0c\x63\xfc\x5a\x8a\xc7\x4a\x41\x5a\xad\xff\x7f\xe0\xb1\x3a\xc5\xb1\x2c\x0b\x75\x7e\xeb\x26\x82\x80\x1b\x06\xc1\xe8\x02\xa7\x1b\x1a\xc7\xf3\x34\xa9\xd3\x8c\xce\x23\x44\x68\x04\x4b\x73\x88\xd2\x28\x88\x68\x9a\xd4\x48\x5a\xa3\x79\xa4\xf1\x02\x17\x0f\x16\x3e\xc1\xeb\x21\xc7\xe1\x24\xb9\x55\x4e\x00\x1d\xf0\xc8\x20\x19\x8e\xe7\x05\x4d\x30\x48\x24\x40\xc8\xea\x0c\x41\x71\x02\x4e\x19\x9a\x2e\x10\x38\x0e\x0c\x9a\x20\x58\x9c\x34\x10\x87\x0c\xa0\x91\xfa\x4b\x3c\xa0\x3b\x7a\x2c\x79\xf0\xd8\x25\x97\xcb\x4c\x5b\x15\xbf\xda\xb3\xf8\xc5\xdc\xeb\x28\x7a\x3e\xca\x04\x7c\x6e\xb8\x34\x4a\x9c\x39\xf5\xec\x6a\x46\x1e\x64\x07\x81\xb9\x64\x1d\xa5\x59\xd2\xca\xa5\xa9\x3f\xf6\x4a\x51\x77\x30\xb0\x01\xad\x39\x5a\xa7\xd3\x69\xe4\xb9\xf6\x1c\x66\x68\xd1\xb7\x96\xc5\x05\x6e\x4f\xe8\xd8\xc2\x5b\x8f\xa5\x13\x16\x2f\x70\x8b\x0a\x59\x1a\x0c\x5d\xc1\xab\x67\x0d\x8f\x69\xfa\x4e\xb9\xea\x76\x7a\xf2\x3c\x07\xfc\x05\x97\x73\xf2\x61\xa0\xd5\x43\xcd\x60\x3b\x65\x98\x57\x56\x83\x96\x0f\x26\x8b\xca\xc0\xaa\x44\x86\x32\xdb\x94\x88\x96\xca\x88\xd9\xc5\x48\x12\x7d\x5c\xea\x8b\x0b\x26\x93\xf1\x95\xd8\x49\x9b\x29\x1e\x5b\x4a\x1d\x42\xfc\xbf\xee\xb1\x57\xc6\xcc\x29\x0b\x98\x4f\x8c\xc0\xdf\xae\x7e\x3d\x03\x76\x6d\x79\xe6\x39\xcc\xcb\x15\x96\x27\xd0\xae\xac\x8f\x3c\x81\x78\x65\x25\xe3\xa3\xf9\x4b\x62\x35\x23\x91\x04\xca\xe5\x52\xbb\xdc\xe1\x06\x72\xa5\x97\x93\x6a\x6a\x67\x48\x53\x32\x29\xf5\x72\x0c\x57\x6c\x14\x7a\xf2\xa8\x5f\xad\x97\x1b\xe5\x41\x57\x2d\x8a\x85\x46\x2f\xaf\x14\x9a\x85\x3c\x49\xee\xc6\x60\xbb\x4c\xa1\x92\xdb\xb4\x1b\x0d\x01\xaf\xcc\xa5\x49\x69\xb3\xda\x00\x55\x9a\x97\x17\xeb\x45\xb9\x57\xd2\xaa\x50\x67\x38\x1c\x74\x45\x8a\x90\x02\x98\x3b\x79\x5f\x3c\x64\xc9\xc7\x7f\x6e\x5b\x96\x64\x71\x53\x83\x58\xea\x54\xdb\xcb\xaf\x9c\x06\x51\x98\x4d\x36\xb2\x39\xde\xcc\x59\xb2\x95\xe5\x65\x8e\x8e\xb4\x6c\x73\x16\xad\x32\x8b\x9a\xb0\x1b\xa5\x43\xa1\xbb\x41\xf1\xf3\xe6\xf1\x3f\x31\x7e\x7e\x79\xfc\x77\x41\x14\x85\x7c\xa2\xe1\xe6\x9c\x2e\x3b\x02\x4c\x0d\xce\xc9\x6c\xc5\x83\x75\xa5\x50\x9d\xaf\x66\x50\x6c\x4e\xa8\x6c\xa1\xc8\x82\xe9\x64\xb2\x71\xdc\x95\x02\x49\xa9\x1b\xc3\x75\x42\x35\xd2\x57\xc4\x3c\x47\x48\x28\x57\x11\x84\x8c\xb0\x76\x8a\xcd\xfa\xba\x30\xc1\x7b\x8d\x6c\xce\x9f\x50\x5d\x87\xb1\x3b\xb4\x5b\x87\xf3\xf5\xbc\xa6\x48\x62\x30\x81\x85\x42\x14\x36\xa6\x39\xde\xc6\x65\x21\xe7\x59\x80\x75\x86\x0d\x38\xad\x14\x57\x8b\xe9\x94\x5b\x2d\x0a\xcd\x9f\x3f\x2f\x7b\x8b\x4f\xae\x1a\xea\xa9\xaa\xa9\x9d\x57\x4d\x21\x67\x2b\x64\x8b\xca\x39\x66\xc7\x31\xb4\x1c\x93\xad\xea\xfc\xba\x5d\xb2\xa7\xd3\xb1\xbd\x08\x22\x25\x63\x86\x46\xc5\x5a\x0a\xdd\xea\x68\x74\xaa\x1a\xe3\x22\xda\x7c\xd8\xf4\x59\x6e\xb5\x60\xe1\xca\xe4\x32\x60\xd2\xca\xca\x85\x3e\x33\x9e\x2b\xfd\x9a\x34\xad\x9b\xfd\xf5\x5c\x98\xb3\xcb\x1a\x50\x72\x96\x9e\x5d\x4d\x9d\xb9\xbc\xe8\x06\x2e\xd7\xee\x84\x6a\x9e\xc0\x87\x6b\x67\x2c\xe4\x75\xab\xb5\xea\x84\xf6\x68\x08\xf9\x49\xc9\x2c\x74\x08\xba\x5f\xcc\xfd\xfd\xa6\xa7\x9f\x32\x7d\xf3\xc2\xf4\xf9\x61\x28\x8e\x02\x08\xda\x51\xc9\x04\x4c\x4b\x47\x3d\x7f\x1c\x8d\x42\x55\xad\xf1\x4a\x58\x9d\x6d\x38\x33\x1f\x29\x62\x3f\xdb\xee\x37\xcc\xa3\xe9\xcd\x67\x4d\xdf\x32\xe4\x65\x91\x71\x00\x49\x90\xbd\xae\x0a\xb2\x19\x5e\x88\xf8\xa6\xb3\x5c\xac\xe4\x70\x30\x06\x6b\xb3\xbe\x59\xb7\x98\x7a\x7d\x3c\x85\xac\x3a\xec\x95\x33\xd6\x22\xdb\xe9\xcf\x0a\x94\x3a\x63\x82\xcd\x68\x6d\x55\xd9\x4d\xdf\x28\x81\x92\x5e\x14\xb4\x21\x33\xd0\x84\x8c\x91\x17\x77\xa6\xbf\x1e\xe2\xd2\x56\x2a\x1f\x08\x71\x87\xd5\xca\x63\x65\x0a\x02\x8d\x04\x81\xd5\x04\x8a\x80\x40\x63\x0d\x28\x00\x02\x52\xbc\x86\x43\x00\x34\x02\x30\x10\x27\x70\xde\xe0\x0c\x48\x11\x1c\x60\x01\xcd\x23\x0a\x22\x56\x30\x08\x52\x87\x3a\x4f\x33\xc9\x4a\x8d\xeb\x47\x8a\xff\x9c\x96\x55\x99\xcf\x52\x4d\xc7\x6b\xd7\xb4\x46\x59\xf5\xf0\xb6\x87\xb2\x55\x5e\xef\x8e\x82\xd9\x8a\x72\x17\xad\x59\xb3\x60\x74\xdb\xab\xa5\xf4\x5e\x77\x7b\x65\x65\xf2\xc3\x85\x3f\xad\x4e\x1e\x0b\xbf\x77\x6d\xe0\xc3\xb1\xb5\xd8\xdf\x4c\x5e\xdb\xb1\xe0\x7f\xc5\x53\xcb\x5f\xf7\x5f\x03\x7e\xfd\x8e\x11\xbb\xc9\xe6\xaf\x01\xf2\x17\xc8\xff\xfa\x1d\xfb\xba\x20\x88\xbf\x88\xbf\xf0\xaf\xfb\x1b\x30\xf2\x7d\xe4\x86\x4a\x3c\xc6\xfd\xfa\x1d\xa3\xcf\x7f\xcf\xc5\xaf\x84\x05\x5f\xbf\x63\xff\xfb\xcb\x41\xd1\x7f\x7d\x49\xaa\x8d\x25\xb7\xc0\x24\x0e\x21\x40\x1c\xd2\x04\x0a\x52\x38\x6d\x30\x0c\xaf\x6b\x84\x26\x70\x0c\xad\x0b\xa4\x8e\x08\x96\x65\x71\x8a\x25\x00\xc9\xd1\x3a\xe0\x0d\x4e\x33\x28\x96\xa3\x59\x9a\x65\x79\x81\x40\xc2\x9e\xd1\x11\xd7\x45\xab\xf0\xeb\xf7\x0b\x6d\xbb\xc2\x6c\xcb\xfe\xf5\x3b\x86\x9f\xdd\xfa\xef\x8b\xe7\x03\x17\xcc\xb6\xbc\x18\x24\x68\x2c\x34\xb6\xac\x74\x8e\xa3\x68\x9c\x33\x70\x4d\xa7\x38\x8a\x41\xbc\x8e\x93\x00\x50\x40\xa3\x11\x8b\x58\x40\x43\x96\x30\x70\x82\x64\x71\x9c\x47\x34\xe4\xe0\x96\x23\xfe\xf5\x4b\x8a\x86\x2b\x36\x40\x06\x45\x00\x12\x07\x94\xb0\xcd\x3c\x29\x88\x48\x92\xe4\x18\x04\x78\x82\xe3\x38\x9e\xd5\x00\x64\x68\x96\x61\x0d\x8a\xd2\x21\xa4\x0d\xca\x40\x90\xc5\x75\x86\xd1\x75\x83\x60\x29\xfd\x01\x1b\x10\xaf\x6f\xef\x79\x51\x38\x8b\xc2\xcf\x2d\xfb\x2d\x0b\x3f\x3b\xe5\xf9\x11\x0b\x3f\xad\xeb\x6f\xf2\xb2\xdf\x36\xf8\x6d\x83\xdf\x36\xf8\x6d\x83\xdf\x36\xf8\x6d\x83\xdf\x36\xf8\x6d\x83\xbf\xd1\x06\xf1\x5f\xff\xe7\xcb\x7f\xbf\x49\x7f\x53\x92\x06\x1b\x04\x61\x00\x67\xf1\x87\x17\x69\xd7\xcb\x21\x1d\x8a\x33\xcd\x7c\x13\xe2\x93\x4d\x56\xcf\x83\xb1\xbc\x0a\x78\x48\x4e\x5a\xd5\x31\xc7\xfb\x2b\xa2\xe5\xac\xdd\x32\x42\x42\xc9\x16\x55\xa1\xa5\x94\xc5\xd3\x54\xcc\x2e\x27\x62\xec\xba\xd3\x8f\x3a\xe5\x6a\xb8\x58\x83\x72\xc1\x5a\xae\xe7\x01\x18\x88\x92\x2c\x64\x97\x2b\xe4\xcc\x64\x9a\x67\x66\x7c\x9b\x52\xc7\xc5\x63\xfa\x55\xb1\x9e\xcc\x89\x1f\x49\xdf\x72\x62\x1e\xd5\x3a\x6d\xbd\x54\x1d\xe3\xd1\xdc\x51\x87\x03\x89\x0a\xa2\xf9\xd8\x09\xc5\x6e\xdd\x6b\x8f\xf5\x0c\x19\xc8\x93\x76\x2b\x5b\x64\xe4\xfc\x54\x5e\x65\xc7\x0e\x61\x88\x14\x0e\xc9\xcc\xc2\x12\x6b\x76\x47\x6f\xe5\x86\x2d\x7f\xd9\xa8\x74\x66\x4a\x6e\xe5\xe4\x69\x5a\x59\xac\x4e\x7c\xf2\xc3\x27\x67\xc3\x73\x8f\xcc\x39\x34\x45\x77\x22\xe1\x6e\xcb\xf2\x74\x65\x3e\x9b\xf4\x8b\x2b\x95\x53\xe6\xde\xc8\x6f\x16\x0b\x73\xc9\x1b\x18\xa1\x9f\x97\xf1\xa9\xb1\x42\x6d\x71\x96\xaf\x19\xf4\x28\x1c\x2c\x55\xa1\xac\x2e\x7c\xda\x2c\x54\xba\x54\xb7\xd9\x97\x00\x5f\x58\x77\xd9\xf6\x12\x8e\xcc\xa8\x9e\xe7\xf8\xdd\x14\x90\x18\x70\x62\x6f\x4d\xce\xdb\x91\xea\xfa\x4e\xbf\x37\xe9\xe1\xe3\x01\xdd\x68\xdb\x3c\x6b\xb5\xf9\xb9\x60\x65\x0d\x7f\x11\xf5\x49\xdc\xee\x97\x9c\x59\x16\x18\x4c\xdb\x46\xd3\xfe\xc8\xd6\xac\x72\xbe\x41\xd2\xd3\xea\x32\x20\x2b\xd3\xb6\xee\xd5\x36\xb0\xb9\x31\xea\x82\xad\xdb\x4f\xfb\x9b\x79\xfc\x73\xf9\xec\xea\x43\x7c\x8d\x3e\xe6\xbf\x4d\x69\xb0\xae\xe5\xd0\xc8\x09\x43\xdd\xee\x15\xfa\x8b\xec\xa2\xa1\x2d\xa4\x4a\xa0\xf0\x6d\xa5\x47\xf7\x03\xaf\x10\xf0\x53\xd4\x99\x78\xa3\x72\x7d\xd2\x2f\xb6\xb2\x9e\x9f\xc5\x89\x79\x53\xd8\x00\xa4\xd5\x48\xe8\x59\x51\x40\xb8\x2b\x67\xec\xb6\x8c\x3e\x59\xef\x91\x59\xc3\x5d\xee\x9c\xbc\x10\x94\xd9\x96\xe4\x04\xb3\xbe\xb2\xce\xcc\xc7\xb5\x10\xaf\x72\xec\x66\x59\x9c\xe4\x78\x2d\xca\xb7\xad\xae\x4f\x8f\x0d\x01\xad\x0b\x05\xef\xe4\x2f\x4a\x9f\x2e\xe2\x68\x5c\x67\xc5\xb5\x90\xc7\x1b\x41\x49\x32\x17\x90\xe0\x08\xa2\x2b\xf0\xc3\x09\xed\x28\x53\x47\x68\x72\xcc\x34\x4f\x2d\xe2\xe2\xc6\x0f\xc9\xa7\xe7\x2f\xfd\x2f\x61\x6a\x7f\xae\xb2\x0a\xaa\x03\x73\xb2\xaa\x81\x6e\x43\x60\x73\x1b\x23\x10\x10\x0e\x3d\x5f\x1d\x0d\x36\xb9\x7e\x65\x5a\xf4\xaa\xdc\x74\x31\x8d\xa7\x6b\x73\xbd\x9e\xba\x7b\x50\xcc\x13\x51\x4e\x2f\x7b\x9d\xc8\xac\x2d\x9a\x61\x81\xcb\x8d\x65\x85\x52\x91\xa0\xf7\x1a\x46\x49\xce\x54\x2c\xa6\xb2\xe8\xd6\x33\x23\x31\xe4\x76\xeb\x97\x7c\x6f\x6d\x79\x27\xfd\xe5\x23\xdf\xa6\x04\x51\x45\x1b\x46\x33\xb7\x6f\x77\x91\xdf\x65\x71\xd3\x98\x15\x4d\x5e\x9d\x92\x80\x12\xd9\x66\xad\x6d\xf4\xcc\xa6\xa7\x16\x47\x75\x65\xa2\x72\x1b\x48\x2f\xb9\x49\x6e\xb5\xb4\x8a\x72\xd7\x62\x67\xeb\x41\x45\x55\x9b\x33\x85\xac\x37\x57\x1d\xb7\x47\x9b\x81\x60\x17\x7c\xb3\x79\x2a\xef\x93\xd3\x41\xef\xc5\xe1\xc3\x5e\x4e\xbb\x0f\xc5\xd3\xe3\x30\x81\xdf\x83\xe4\xa2\x70\xe9\xf9\xd3\x19\x08\x82\xd9\xd8\x07\x01\x4a\x41\xea\xa0\x20\xc4\xda\x85\x22\xa6\xee\x84\xb1\x1f\x58\x1b\xcd\x42\xe4\x68\xc8\xc7\x48\x9c\x60\xee\x51\x64\x78\x3e\x44\x01\x9c\x79\xee\xb6\x0f\xb4\x41\xe4\xc2\xf1\xa5\xa2\xf8\x43\xec\xbb\xfa\xa1\x78\x7e\x69\xff\xa2\x63\x90\x5e\xfe\xfd\xe4\x55\x68\x39\x71\xb7\xfa\x7a\x39\x97\x75\xea\x83\xbf\x8e\x41\xf0\xf5\xfb\xee\x33\xf0\x2f\x89\x5e\xf7\xab\x81\xd0\x7d\x82\x0e\x58\x85\xab\xc0\xda\xdc\x29\xee\xa3\x78\x02\xed\x1d\xe1\xfb\xbb\xe4\xf8\xfb\x45\x7d\xff\x1d\x51\x8a\x29\x9e\x5e\x5b\xbe\x3e\x43\x79\xe5\x2b\x85\x8f\xce\x50\x26\xbe\x54\xf8\x8c\x37\x25\x89\x57\xec\x99\xb7\x18\x5f\xba\xed\xc2\xcb\x2b\x26\x90\x24\x45\x71\x24\x4e\xb1\x3c\x43\x73\x1c\xc3\xe3\xdc\x2b\x46\xe0\x04\x49\xd1\x0c\x8e\xe3\xb1\x1a\xfa\xbe\xd7\x16\xaf\xbe\xe9\xfe\x61\x43\x25\xdf\x76\x3f\xc5\x03\x8d\x12\x78\xa4\xd1\x00\xf1\x02\xc7\xb0\x14\xc9\xb0\x34\x05\x81\x4e\x12\x50\xa0\x11\x41\x69\x06\xc4\x39\x5a\xa3\x48\x0a\x21\x9e\x42\x04\x4d\x68\x06\x87\x13\x80\xd1\x05\x9c\x36\x88\xc3\x8b\x53\x67\xa3\xb7\xda\x45\xf4\xce\x59\xd9\x1c\xae\xe0\x95\xd2\x3a\x1c\x2f\x55\xc2\x1e\xe2\x60\x3d\xf3\x08\x41\x2d\xaf\x16\x4a\x7e\x5d\x67\xc2\x9c\x04\xf3\xbd\xc5\xb2\x28\x2c\x29\x33\xf4\xeb\xee\xe8\xb2\x57\x4c\xbb\xae\xbe\x80\x17\x47\xc3\xfc\x33\xfa\x87\xd9\x0c\xbc\xec\x7d\xee\xd3\xff\x76\x31\x28\xdd\xee\x86\xc0\x41\x60\x18\x40\xe3\x21\xc1\xe2\x24\x05\xa8\x6d\x83\x22\x58\x06\x6a\xb8\x46\x19\x06\x01\x00\xa9\x03\x83\xc6\x71\xdc\x40\x06\x2d\xe8\x24\x81\x0c\xc8\xd3\x9c\xae\x6b\x86\x86\xc0\xce\xee\xe4\x5b\xbb\xff\x4b\xe5\xfe\x2c\xbb\xf3\x89\x01\x51\xea\x2b\x68\x4f\xda\x5d\xd3\x69\x9e\xd5\x35\x5d\xc7\x49\x9d\x66\x71\x9e\xe0\x58\x8e\x80\x34\x60\x00\x87\x04\x9d\x45\x3c\xcb\x40\x40\x0a\x50\xa3\x09\xc4\x92\x3a\x07\x80\xc1\xe1\x80\x34\x10\x62\x34\x8a\xd5\xd1\xfe\xb5\xaa\x9b\x76\xcf\x47\x1e\xe5\x85\x34\x33\xcf\x37\xa4\xd5\xac\x99\xa5\xbc\xb2\x9a\xd9\x10\x5c\x6b\x6d\x05\x84\x6d\xd4\x8a\x43\xa7\xd9\x37\xfd\xa8\x9d\xe9\xc4\xf2\x95\x6e\x3e\xb3\x2f\xd4\xe5\x3a\xdb\xfd\x76\x2f\x3c\xa7\xbf\x0e\x1f\xd3\x7f\xaf\xdd\x19\x92\xa6\x20\x2b\x50\xb4\x81\x1b\x1a\x83\x13\xdb\xa0\xc8\xb3\x02\x00\x94\x66\x18\x0c\xa5\xeb\x90\xe2\x05\x68\xf0\x04\xcf\x12\xd0\x00\x88\x25\x70\x08\x49\x92\x01\x00\x11\x3c\x84\x70\xff\x72\xd0\x6d\xbb\x7f\x70\x94\xf7\x29\x76\x97\x9e\xd3\xff\x9c\xdd\xaf\xf6\x19\x9f\xd3\x61\xfc\xdd\xbd\x45\x49\xe1\xcb\xcd\x45\x73\xaa\x55\xc9\xb2\x48\xf5\x7b\x93\x96\x5f\x75\x26\x03\x1c\x37\x4a\x7c\xa0\xc8\x9c\x83\x4b\xad\x65\xa5\x9f\x15\x07\x94\x78\xcc\x15\xe2\xeb\x46\xae\xb0\xbb\x42\xcd\x1c\xb4\x58\x89\xf3\x0a\x0a\xae\x34\x33\xcb\x61\x3b\x2f\x6c\x06\x8b\x41\xaf\x43\xad\xac\x86\x35\x8c\xda\x1a\x51\x58\x38\x4d\x05\xf1\x71\xd5\xf5\xc4\x45\xf2\x1d\xed\xdc\x2e\x2a\xc5\xf5\x3b\x9c\x34\x61\xa3\x43\x96\x98\xf1\xdc\xcd\x39\x66\xa9\x84\x4c\xa1\xc2\xdb\x34\x24\x24\xb7\x6b\xaf\xa6\xb6\x64\x97\x85\x60\x3e\xf2\x71\x81\x23\x8a\x6c\x5d\xe9\x1b\x28\xeb\xd0\xd3\x59\x31\x94\x33\x81\x8c\x5b\xc4\x5c\xb1\x42\x46\xc4\x2b\xeb\xbe\xab\x8d\x87\x4a\x9f\xf1\xb6\x83\x84\x17\x72\xe3\xd4\xc3\x2a\x5b\xd1\xfb\x35\x7b\x54\x58\x87\x32\xb4\xeb\x12\x97\x15\x75\xa5\x36\xe1\xbc\xc6\xb8\xa9\x09\xcb\x92\x4d\x36\x3b\xab\xd3\xab\x8d\x37\x6c\x70\xf2\x8c\xb3\xa5\xe5\x84\xec\xee\xdd\x49\xf1\xdf\x8b\xd2\xe2\x27\xf4\x12\xc5\x4e\x3f\x17\x3c\xa1\x5f\x14\xff\xbd\xa8\x91\x16\x2d\xff\xee\xa1\xc1\xe3\x8d\x2c\x7f\xc1\xfe\x8d\xc3\x7d\x30\x21\xbf\xd1\xc8\x72\x4e\x75\xd6\x36\x17\xfe\xb2\x5a\x27\xf1\x41\xbe\x6e\x0c\x8d\x41\x50\x92\xa4\x6e\xb8\x1c\x02\x20\x19\xf3\x76\xc4\xae\x9d\x8a\x63\x17\x1c\x90\x91\x07\xac\xcc\xc9\xa6\xa9\x75\x47\x35\x0f\x36\xf5\x91\x40\xcb\x35\xd1\xa8\xea\x4d\x51\x9d\x0f\x34\xb9\xce\xad\x83\x25\x42\xb5\xfc\xb6\x21\x64\x06\xeb\x45\xc6\x9f\xe4\x86\xf9\xfa\x04\xc9\xcd\xfe\x40\xc9\x6f\xb2\xab\xb9\x45\x2e\x9a\x62\x21\x23\x54\xf0\x31\xc7\x8f\xcb\x94\x96\xc9\x9c\xf2\xfd\x7f\xbf\x91\x3d\xeb\xe4\x4f\x36\xb2\x39\x97\xed\x14\xe0\x67\x36\xb2\x7f\x70\x48\x74\x57\x23\xfb\xe4\x71\x60\x95\x9d\x20\x8b\x9a\x38\x9e\xcc\x77\x4a\x76\x21\x8b\x4c\x48\x71\x8d\x41\x58\xae\x56\x37\xfd\x1e\xbf\xec\x59\xa3\x1c\xc8\x47\x8c\xc2\xc4\x9e\x71\xdf\xac\xd7\x50\x7c\x78\x16\x8b\xca\x1e\xaf\x13\x5e\xe9\xa8\xbf\x99\x13\xa6\x4e\xb5\x4f\xce\xa9\x05\xd7\x34\xd6\x7c\xa3\x86\xa6\x92\x46\x74\x3a\x32\x63\xad\xe6\x53\x19\xcf\x79\xe6\xc0\xaf\x87\x9c\x59\x27\x58\xb2\xa9\x4d\xc7\xa4\xde\xee\x74\x0d\x54\xf0\x16\x10\x6f\x88\xc0\x18\x17\x06\xab\x70\xdc\x13\xed\x40\x89\x26\x76\xce\x59\x4f\x72\xe2\x30\x6e\x14\x8b\xee\x38\x5c\xe8\x62\xd8\x32\xcd\xc1\x68\xb5\xaa\xf6\x5d\x56\xd7\xbc\x11\xf4\x66\x6b\xbc\xec\x28\x83\xf9\x02\x56\x95\x0c\xa3\xa9\xe1\xc9\xbf\xd2\x1b\xdc\xf0\xbc\x52\xcf\x1a\x5c\x6c\xbb\xdd\x98\x37\xf1\xc5\xc1\x03\x01\x69\xe2\x9e\xea\xe2\xca\x75\x25\x0f\x3a\x6b\xf0\x9f\xa2\xff\x4a\xb0\xb9\x47\x7f\x4d\xfc\xdc\x1c\xe0\xa1\xdc\xef\xb3\xf5\xbf\xb5\xc7\xed\x80\x53\x38\xc9\x7c\x54\x7f\xb1\xd7\xc5\xf7\xe0\x1f\x9c\xc1\xde\x57\xc5\xa9\xc1\x2d\x2f\xed\x77\x57\x40\xfa\xe4\x04\xe9\xf7\x34\xfc\x23\xd3\xf0\x71\x90\xe9\x4e\x1b\xa5\x29\xce\x37\xc2\x66\x91\xea\xcb\x00\x78\x5c\x96\x68\xe8\x4b\xda\x6d\x98\xc3\x21\xcc\x44\xc3\xe6\x26\x5f\x01\xfe\x78\x52\x3b\xb5\xfc\xf4\x00\x76\xe1\x04\x57\x02\x58\xd2\xe0\x0f\xa4\x2d\x4f\x07\xb0\x4f\xd4\xff\x58\x00\x3b\x25\xf3\xff\x43\x1b\xb0\x78\x9e\xec\xff\xd3\xfc\x0a\xab\x41\xb5\x3a\x7e\x37\xc0\x5c\x99\x0c\xb8\xb1\x69\xc5\x47\x67\x04\x2e\x36\xae\x38\xc4\xae\x64\x4a\xbf\xfb\x80\xf5\xe4\xeb\x29\xc1\xef\x3a\xca\x31\x67\xd9\x7d\xf6\xfa\x06\xe5\xea\x46\xbb\x6f\xf7\x1f\x3f\x6e\x30\x7c\xd8\xdc\xe2\x9d\x62\x26\x37\x42\x8f\xb7\x3f\x4f\x20\xc6\x8b\x2a\x62\xa1\x90\xb2\x25\xe8\x51\x21\xd6\x68\xc9\x35\xb1\x35\xc4\xaa\xd2\x10\xfb\x76\xdc\x2d\xe9\xf5\xb8\x15\xef\xd5\x8d\x71\x2f\xb6\x64\xff\x2c\xe2\xc1\x0d\xd6\xc1\x2d\xca\x69\x1b\x95\x9e\x76\xa1\x7f\x9a\x9e\x06\xdc\x34\x66\x07\x05\xe7\xa4\x76\x7b\xa3\xdd\xde\xc5\xf4\xe6\xf6\xfb\x4f\xd3\x3d\x03\x4f\x23\x7e\x43\x3b\xd6\x55\xe5\x66\x57\xc2\x4e\x1b\xa6\x7c\xa8\x24\x9f\x63\xef\x0f\x16\xe0\x6d\x1d\x9c\x36\x76\xbd\xb2\x29\xe9\xd9\xa1\x0d\x4f\xf3\xdd\x81\xa5\x11\x4d\xa8\x39\x67\xb8\xdf\x2a\x33\x7d\x8b\xcc\xe4\x09\x15\x4f\x93\x8b\xb1\xd2\xb8\x9d\x94\x9c\x53\xb3\x66\xaf\xf1\xc6\x99\x37\xb7\x84\x4c\x39\x99\xe3\x79\xa6\x09\xc8\x54\xc2\x97\x2a\xd3\x2a\xfd\xca\xbe\x91\x67\xe7\x93\x7c\x06\xd3\x20\xd2\xae\x70\x3c\xa8\x39\x67\x17\x6f\x39\x79\x63\x13\xc9\x37\x87\xb2\x3c\x4d\xf2\x04\x98\x46\xf4\x42\xdd\x5d\x31\x2c\xf1\x59\xd1\xe5\xd1\x34\x4f\xb3\x3d\x01\xa6\xb1\xbd\x50\x77\xce\xf6\xb0\x15\xe3\x8d\xad\x0e\xdf\x1c\xd1\xf3\x3c\xdf\x23\x60\x2a\xdf\x73\x75\xe7\x7c\x8f\xbb\x25\xde\xd8\x05\xf1\xcd\x59\x45\x4f\x13\x3e\x01\xa6\x11\xbe\x50\x77\x75\x68\xb0\xdb\x05\xf1\xf5\xb4\xc5\xe1\xcd\x6d\xee\x52\xce\x72\x7a\xbe\x1c\x09\xc8\xd4\x92\x5c\xaa\x4c\x8b\x12\x01\x9a\xbf\x1e\xf6\x75\xbb\xbe\x05\xdd\xe5\x19\x57\x9f\xc0\xfd\x26\xf1\xa7\x58\x5f\x0c\x51\xd3\x4e\xfe\x7a\x9a\xff\x39\x68\x5a\x21\x52\xd4\x5e\x2d\x49\x72\x7b\xb8\x6b\x43\xcd\xe3\xa9\x68\x7b\xee\xf1\x19\x6a\xf7\x6d\x5c\xb7\x3b\x6e\xed\x02\x07\xab\xab\xa7\x51\x6c\xb7\x2d\xab\x25\x4c\x0b\x7d\x84\xb0\xc3\x2e\x95\x7f\x60\xfd\xb2\xd4\x92\xb0\xe4\xae\x95\xc4\xf1\x4d\xe2\xb7\x03\xcd\xf3\x83\xde\x1e\x65\x79\x0e\xb3\x25\xb9\x1f\xa7\x9c\x51\x4c\x6e\x5d\xfe\x9a\xdc\xa8\xfc\x75\xb7\x81\xf8\x1b\x76\xa7\xd3\xea\x1e\x25\x76\x44\xd8\x72\x3a\x35\x8c\x33\x5a\xd7\x87\x8a\x67\xe7\xea\x3d\x43\xe1\x00\xb2\x63\x91\x08\x30\x77\x12\x39\x3b\x0a\xf0\x51\x22\x49\x90\x2d\x91\xf3\x81\xf0\x9d\x4c\xce\x8e\x2f\x7c\x94\x49\x12\x64\xcb\x24\xf1\xf1\xf6\xfd\x34\xce\x8e\x5c\x7c\x82\x49\x12\x67\x4f\xe6\x30\x4a\x38\x27\x93\xdc\x9e\xf8\x56\xf8\x7a\x8e\xd1\x25\xd0\x96\xd2\x45\x6c\x7c\xd7\x46\xd7\x4e\x1a\xc5\xa0\xe7\xcc\x6c\x14\xa2\x58\xed\xff\x0d\x00\x00\xff\xff\x8c\x3b\x91\x52\x96\x74\x00\x00") - -func asset_stat_trustlines_6CoreSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_trustlines_6CoreSql, - "asset_stat_trustlines_6-core.sql", - ) -} - -func asset_stat_trustlines_6CoreSql() (*asset, error) { - bytes, err := asset_stat_trustlines_6CoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_trustlines_6-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa5, 0x34, 0x96, 0x3c, 0xb9, 0xf5, 0xae, 0xdc, 0xff, 0xb3, 0x8a, 0x77, 0xbd, 0x9f, 0x33, 0xec, 0x29, 0xf, 0x92, 0x72, 0x16, 0x33, 0xf9, 0xd0, 0xd9, 0x97, 0xf, 0xcc, 0x12, 0x52, 0xf9, 0xca}} - return a, nil -} - -var _asset_stat_trustlines_6HorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x7d\x79\x6f\xe2\xc8\xd3\xf0\xff\xfb\x29\xac\xd1\x4a\x99\x51\x32\x13\xdf\xc7\xec\x33\x3f\xc9\x80\xb9\x31\x77\x02\x59\xad\xac\xb6\xdd\x06\x07\xb0\x89\x6d\x20\x64\xf5\x7c\xf7\x57\x3e\x00\x63\x7c\x71\xcc\xec\xfe\xde\x07\x8d\x46\xc1\xae\xae\xab\xab\xba\xaa\xab\x9b\xee\xaf\x5f\x7f\xfb\xfa\x15\xe9\x98\xb6\x33\xb1\x60\xbf\xdb\x44\x54\xe0\x00\x19\xd8\x10\x51\x57\x8b\xe5\x6f\x5f\xbf\xfe\xe6\xbe\x2f\xad\x16\x4b\xa8\x22\x9a\x65\x2e\x0e\x00\x6b\x68\xd9\xba\x69\x20\xdc\x37\xfa\x1b\x16\x82\x92\xb7\xc8\x72\x22\xb9\xcd\x23\x20\xbf\xf5\x85\x01\x62\x3b\xc0\x81\x0b\x68\x38\x92\xa3\x2f\xa0\xb9\x72\x90\x1f\x08\xfa\x87\xf7\x6a\x6e\x2a\xb3\xd3\xa7\xca\x5c\x77\xa1\xa1\xa1\x98\xaa\x6e\x4c\x90\x1f\xc8\xdd\x70\x50\x66\xef\xfe\xd8\xa1\x33\x54\x60\xa9\x92\x62\x1a\x9a\x69\x2d\x74\x63\x22\xd9\x8e\xa5\x1b\x13\x1b\xf9\x81\x98\x46\x80\x63\x0a\x95\x99\xa4\xad\x0c\xc5\xd1\x4d\x43\x92\x4d\x55\x87\xee\x7b\x0d\xcc\x6d\x78\x44\x66\xa1\x1b\xd2\x02\xda\x36\x98\x78\x00\x1b\x60\x19\xba\x31\xf9\x23\xe0\x1d\x02\x4b\x99\x4a\x4b\xe0\x4c\x91\x1f\xc8\x72\x25\xcf\x75\xe5\xc1\x15\x56\x01\x0e\x98\x9b\x2e\x18\xdf\x1c\x08\x3d\x64\xc0\x17\x9a\x02\x52\x2b\x23\xc2\xa8\xd6\x1f\xf4\x91\xb6\xd8\x1c\x07\xf0\xdf\xa6\xba\xed\x98\xd6\x56\x72\x2c\xa0\x42\x1b\x29\xf5\xda\x1d\xa4\xd8\x16\xfb\x83\x1e\x5f\x13\x07\xa1\x46\xc7\x80\x92\x62\xae\x0c\x07\x5a\x12\xb0\x6d\xe8\x48\xba\x2a\x69\x33\xb8\xfd\xe3\x57\x10\x54\xbc\xbf\x7e\x05\x49\xd7\xae\x7e\x9d\x80\x3e\xb5\xf3\xa5\xf3\x19\x74\x0d\x39\x8d\x58\x08\xea\x80\xdc\x03\xaf\x89\x25\x61\x14\x82\x0c\xd0\x7a\x5c\x49\x50\xd3\xa0\xe2\xd8\x92\xbc\x95\x4c\x4b\x85\x96\x24\x9b\xe6\x2c\xbd\xa1\x6e\xa8\xf0\x5d\x0a\x09\x67\xd8\xc0\x33\x74\x5b\x32\x0d\x49\x57\xcf\x69\x6d\x2e\xa1\x05\xf6\x6d\x9d\xed\x12\x5e\xd1\xfa\xc0\xc9\x55\x5c\x9c\xd7\x76\x0e\xd5\x09\xb4\xbc\x86\x36\x7c\x5b\x41\x43\x39\x4b\x84\x50\xf3\xa5\x05\xd7\xba\xb9\xb2\x83\x67\xd2\x14\xd8\xd3\x0b\x51\x5d\x8f\x41\x5f\x2c\x4d\xcb\x75\xc7\x60\x4c\xbd\x14\xcd\xa5\xba\x54\xe6\xa6\x0d\x55\x09\x38\xe7\xb4\xdf\x19\xf3\x05\xa6\x14\xf8\xe5\x05\x4c\x87\x5b\x02\x55\xb5\xa0\x6d\xa7\x37\x9f\x3a\x96\xea\xc5\x1d\x69\x6e\x9a\xb3\xd5\x32\x07\xf4\x32\x8b\x25\x1f\x0a\xe8\xd6\x99\x88\x77\x83\x6e\xee\x06\xee\x38\xa1\x69\xd0\xca\x07\xba\x43\x7f\x41\x93\x40\xad\xf9\x1a\x79\x43\xeb\x19\x44\xc2\x43\x71\x56\x8b\xa5\xdb\x60\xea\x64\xf6\x80\x7d\x34\x00\xc9\xdb\x4c\x33\x9a\xee\x3d\x3d\x0f\xb0\xe9\xf3\x61\x66\x02\xea\xb6\x23\x39\xef\xd2\x32\x1b\xa5\x0b\x69\x2e\xf3\x42\xc2\xbc\x60\xbb\x50\x92\x0e\x2c\xef\xdc\x3d\x13\x2c\x7b\x14\x93\xb7\xf9\x3a\xd3\x8f\x91\xae\xb6\x6d\x7b\x95\x45\x79\x0f\xac\x98\x2a\x3c\x33\x2f\xd8\x9b\xc1\x12\x58\x8e\xae\xe8\x4b\x60\xa4\x06\xef\xac\xa6\xd2\xf2\xcc\xdc\x64\x1f\xd1\xce\xe5\x20\xbe\xe1\xd9\xf4\x3d\xe5\xe5\xa1\xe7\x03\xfe\x74\xfc\x7e\x67\xba\x3d\x19\xfc\xe9\xc6\x87\x5d\xea\xe7\x19\x83\x94\x93\x83\x89\x69\x2d\xa5\x85\x3e\x09\x12\x86\x14\x16\x22\x90\xb9\x65\x3c\x3f\xdf\x4b\xc3\x9c\xd7\x38\xfd\xd6\xc5\x76\x73\xd8\x12\x11\x5d\xf5\x29\x97\x84\x32\x3f\x6c\x0e\x72\xe2\x4e\x30\xba\x1b\x60\x0e\xba\x3b\x1d\x93\xf7\x2d\xbf\xf8\xbb\x28\xdd\x17\xba\x43\x41\x2c\x5e\xa0\x33\x37\xcf\xb6\xe1\xdb\xd9\x94\x8f\x90\xe4\x6e\xad\xc2\x9c\xb0\x87\x6c\x36\xb7\x84\x09\x5e\x7f\x8e\x7c\xf1\x28\xf2\xb5\x0d\xf2\xbe\x7c\xc0\x41\x92\x97\x5b\xb6\x60\x04\x38\x47\x16\xbf\x49\x4e\xd8\x20\xfd\xcb\xcf\xcf\x2e\x5f\xcc\xc3\x51\x64\x0c\x49\x07\x0e\x0d\x09\x01\x20\x5f\xa9\xf4\x84\x0a\x3f\x88\x01\x5e\xe8\xee\x8c\x43\x57\xe0\x67\x63\xb5\x80\x96\xae\xfc\xf9\xd7\x97\x1c\xad\xc0\xfb\x05\xad\xe6\xc0\x76\x3e\x03\x63\x0b\xe7\x5e\x29\x26\x47\x0b\x4d\xb7\x62\x9b\x94\x87\x62\x71\x50\x6b\x8b\x29\xf2\x48\x60\x32\x39\x70\xf7\x80\x9c\x30\x9a\x82\x63\x27\xdd\x15\x38\x5c\x59\xbd\xe6\x07\xe6\x1f\x90\x73\x04\xf1\x44\xcf\x81\x41\x18\x0d\x04\xb1\x1f\x41\x31\x5f\x4e\xec\xb7\xf9\xce\x16\x8b\x55\xa1\xc5\x9f\x50\xf8\xe3\x37\xbf\x0a\x27\x82\x05\xfc\xbe\x7b\x86\x0c\xb6\x4b\xf8\x3d\x68\xf2\x07\xd2\x57\xa6\x70\x01\xbe\x23\x5f\xff\x40\xda\x1b\x03\x5a\xdf\x91\xaf\x5e\x71\xae\xd8\x13\xdc\xfe\x0a\x30\xef\xf0\xfd\x76\x84\xf1\xf8\x65\x80\xb8\xd8\x6e\xb5\x04\x71\x90\x82\xd9\x07\x40\xda\xe2\x31\x02\xa4\xd6\x47\xee\x76\x65\xb7\xdd\x33\xdb\x43\x72\x17\xa5\xbc\x13\x3f\xa0\xb9\xd7\x50\xa6\x3c\x47\xba\x14\xdb\x83\x88\x3e\x91\xe7\xda\xa0\xba\x67\x2b\x5c\x7f\x3b\x22\x7f\xc0\x12\x61\xe4\x1c\xe1\x4f\x90\x78\x0a\xe8\x34\x1f\x97\x93\x7e\xb7\x89\x2c\x2d\x53\x81\xea\xca\x02\x73\x64\x0e\x8c\xc9\x0a\x4c\xa0\xa7\x86\x9c\xf5\xc2\x30\xbb\xd9\x86\x16\xb0\xbf\xb3\xd5\x03\xff\xbb\xbe\x8d\xd3\xe5\xde\xb2\x33\xf1\x23\x3d\x61\x30\xec\x89\xfd\xd0\xb3\xdf\x10\x04\x41\x9a\xbc\x58\x19\xf2\x15\x01\xf1\xa4\x6f\xb5\x86\xfe\x78\xd7\x1f\xf4\x6a\xc5\x81\x07\xc1\xf7\x91\xdf\xa5\xdf\x91\xbe\xd0\x14\x8a\x03\xe4\x77\xcc\xfd\x16\xed\x8d\x4c\x47\xbc\x4e\xba\x2c\xf4\x37\x13\x0e\x8f\x13\x2e\xcf\x48\x75\x9d\x7c\x39\x28\xec\x45\xdc\x3f\xba\x48\xc2\xcf\xbf\x21\x48\x91\xef\x0b\xc8\x73\x55\x10\x91\xdf\xb1\x3f\xb1\xbf\x1e\x7f\xc7\xfe\xc4\xff\xfa\xcf\xef\xb8\xf7\x37\xfe\x27\xfe\x17\x32\xf0\x5f\x22\x42\xb3\x2f\xb8\x4a\x11\xc4\xd2\x97\x58\xcd\xe4\x88\x03\x57\x6a\x26\x9b\xc2\xcf\xd6\xcc\xff\x5c\xa2\x99\xd3\x98\x1a\xe8\x61\x1f\x87\xf3\x29\xe2\x10\xb6\x4f\x30\x7a\x1c\x23\x48\xdf\xd5\x15\xf2\xe3\x30\x02\x3c\xf8\x8f\x07\xe3\x8e\x80\xfc\x08\x7b\xc4\x97\x38\xaf\xbd\x29\x8f\x51\x84\x11\x16\x77\x6e\x9c\x9f\xc3\xd8\x14\xe8\x5a\x2e\xe3\x90\x46\x38\x3d\x72\xc8\x63\x76\x0f\x56\x76\xca\x6d\x5c\x9a\x77\x35\xb7\x31\x48\xa3\xdc\x86\x9d\x24\x95\x5b\x37\x72\xa9\x50\x03\xab\xb9\x23\x39\x40\x9e\x43\x7b\x09\x14\x88\xfc\x40\xee\xee\xfe\x38\x7e\xbb\xd1\x9d\xa9\x64\xea\x6a\x68\x29\xed\x48\xd6\x70\xfe\x1b\x88\xe8\x39\x58\x3e\xf1\x7c\x5f\x0c\x4f\xbe\x7d\x89\x74\x15\x91\xf5\x89\x6e\x38\x5e\x62\x20\x0e\x9b\x4d\x5f\x1c\xb0\x70\xd3\x78\x44\x99\x02\x0b\x28\x0e\xb4\x90\x35\xb0\xb6\xba\x31\x89\x80\x19\xab\xc5\x3e\xe5\x47\x74\xc3\x81\x13\x68\x45\x40\xb4\x39\x98\xd8\x88\xbd\x00\xf3\xf9\x29\x19\xc7\x5c\xcc\x4f\x89\x7c\xc6\x29\xea\xcb\x1e\xf2\xb4\xdb\xa3\xf3\x86\x4b\xd5\x11\xad\x76\xec\x55\xe2\xc0\xf7\x13\x85\x2c\x97\x73\xdd\xab\xd9\x23\x8e\xbe\x80\xb6\x03\x16\x4b\xc4\xed\x33\xef\x2b\xf2\x61\x1a\xf0\x94\xd1\xa4\x59\xd1\x2e\x1f\x0d\xa6\x53\xf9\x78\xde\x4f\xbe\x12\xb0\x06\x66\xc8\xf7\x06\x7e\x46\x87\x79\x0f\x6a\x62\xb1\x27\x78\xe9\x57\x61\x1c\x3c\x12\xdb\x48\xab\x26\x3e\xf1\xcd\xa1\xb0\xff\xce\x8f\x0e\xdf\x8b\x7c\xb1\x2a\x20\x58\x96\x30\x17\xab\x3d\x8a\xe8\xc4\x14\x83\xa2\x07\x62\xc0\x77\x67\x0d\xe6\x9f\xef\x12\x24\xbe\xfb\xfe\xdd\x82\x13\x65\x0e\x6c\xfb\x4b\xb4\xbb\xfc\xb5\x8a\x18\xdb\xa2\xc9\x2f\x29\x1d\xe5\xcf\x8d\xaf\x96\xcc\xaf\xe8\xec\xe5\x8a\xf7\x8c\x43\xad\x2e\x9e\xcd\x58\x70\xc5\x54\xe3\xc0\x31\x3c\x1e\xdc\x2f\xff\xc5\x34\xa0\xe8\x34\x0f\x8b\x2f\x2f\xdc\xc8\x6c\xc3\x38\x7f\x99\xd1\xa6\x09\x82\xb4\x9f\x45\xa1\x84\x14\xc6\x19\x12\xf9\x15\xba\x74\x81\xf6\xb8\x22\xaf\xbf\xe9\x6a\x12\x6f\xbb\x9a\xcf\xb5\x56\x17\xe0\x09\xcc\x2e\xe2\x33\x52\xd2\x48\x7f\x5a\xe2\x4a\x82\xfc\xe4\x2d\x7c\x7c\x4a\xb0\x66\xcf\x8e\xe3\x5f\xa9\xd0\x01\xfa\xdc\x46\x5e\x6d\xd3\x90\x93\x8d\x6d\x57\x28\xbb\x56\x0f\x01\x9e\x40\x0f\xbb\x75\xeb\x04\xde\x42\x8b\xc9\xb9\xbc\x30\x6e\x1d\x3b\xbe\x61\xa0\x96\x50\x65\xd4\xeb\x88\x3d\x1f\xbb\x51\x0e\x8d\x50\x38\x74\x44\x3e\xf8\xfd\x62\x72\x24\x30\x99\x2b\xe7\x10\x9b\xa2\x6d\x2c\x08\x9c\xcc\x46\x3e\xec\x6a\xa9\xe6\x86\xdd\x9b\x4e\xf0\x35\xb2\xce\x7e\x22\x0b\x76\x92\x0f\x38\x60\x2e\x29\xa6\x6e\xd8\xf1\x36\xa8\x41\x28\x2d\x4d\x73\x1e\xff\xd6\x5b\xf9\xd4\x60\x52\x5f\x7b\xaf\x2d\x68\x43\x6b\x9d\x04\xe2\xe6\xa1\xce\xbb\xe4\xa5\x49\xfa\x47\x12\xd4\xd2\x32\x1d\x53\x31\xe7\x89\x72\x45\xfb\x68\x67\x2c\x10\xa8\xd0\xf2\xd2\x0b\xff\xb9\xbd\x52\x14\x68\xdb\xda\x6a\x2e\x25\x1a\x4a\x20\x38\xd0\xe7\x50\x4d\x86\x4a\x76\xab\x84\xda\xf5\xb5\x5e\x96\xb0\x1e\x92\x11\xf3\xf2\x8f\x36\xd9\xe3\xd7\xb9\x22\xdf\x36\x8c\xa5\xd2\xf8\x55\x61\xed\x2c\x41\xaf\x0c\x73\xa9\xb4\x4e\xc3\x5e\x3c\x78\x4a\x18\x0c\xad\xec\xdc\xcc\x36\xb3\xa6\x39\xc7\xbb\xaa\x12\xa6\x42\x6e\xe6\xaf\xf8\xa2\x78\x11\xf0\xca\x00\x18\x78\xbe\xb9\xb2\x94\xfd\x36\x8d\x84\xd0\xb3\x1b\x4e\xee\xee\xbe\x7f\x4f\x9e\x8a\x25\xfb\x41\xb0\xb0\x76\xad\x3a\x83\xbd\x80\x9f\x6f\x9a\x2f\x04\x43\xe2\x25\xd1\xcb\xdb\x0b\x93\x48\x36\xb2\x13\x31\x0d\x28\xd8\x1c\x99\x06\xe2\xcf\x83\x63\x01\x4e\xf7\x74\x66\xc0\xa5\x92\xdb\x43\xa5\x50\xf4\x58\xd2\x6d\xc9\x86\xf3\x39\xb4\x10\xd9\x34\xe7\x10\x18\xbb\x98\xa4\x2b\x50\x32\x8e\xe2\xaf\xff\xec\x38\x26\x1f\x76\x13\x49\x91\x68\x7d\xb4\x9f\x29\xfa\x32\xb4\x4c\x1f\xbb\xf3\xd3\xe3\x5a\xf2\xf6\x06\x23\xc5\xaa\x50\x6c\x20\x9f\x3f\x87\x35\xf8\x1f\x04\xfd\xf2\x25\x0b\x55\x5c\xf3\x9d\xd2\xfe\xe7\x44\x8f\x39\xf0\x1d\xe9\x34\x82\x3e\xa2\x70\x8f\xc1\x54\x57\x8a\x5f\xe1\xbe\x81\x73\xc5\xef\x59\xc8\x19\x49\xf3\x0c\x61\xd7\xc4\xd2\xac\xfd\x01\xb7\x89\xa6\x19\x54\x7e\x55\x3c\x3d\x53\xd8\x2b\x23\x6a\x06\xb5\xd3\x98\x9a\xd4\x20\x25\xaa\x1e\xed\x09\xb9\xa1\xad\xee\xec\x33\xcc\x52\xee\x49\x54\x30\xf6\x67\x4c\xcd\xf2\x06\xde\xf4\x18\x1a\x0b\x7b\x20\x1d\xeb\x2f\xee\x2c\x20\x79\x1a\x91\x34\x41\xfb\x47\xa6\x58\xce\xbb\x04\x8d\x35\x9c\x9b\x4b\x18\x57\xb6\x74\xde\xdd\x09\xcf\x6a\xee\x24\xbc\x5c\x40\x07\x24\xbc\x72\xa7\x5a\x49\xaf\x6d\x7d\x62\x00\x67\x65\xc1\xb8\x0a\x1b\x47\x7f\xf9\xf3\xaf\x43\xee\xf2\xf7\xff\xc6\x65\x2f\x7f\xfe\x15\xd5\x39\x5c\x98\x09\xc5\xb0\x03\x2e\xc3\x34\x60\x6a\x2e\x74\xc0\x75\x8a\x26\x90\x4c\x5f\x40\x49\x36\x57\x86\xea\x55\xac\x59\x0b\x18\x13\x18\x9d\x8d\x1d\x87\x56\x57\x13\x2e\xb6\x09\x54\xb3\xa7\x5b\x41\xed\x4f\x57\x77\xde\xb6\xdb\xc2\x95\x67\x88\xf0\xdd\xcd\xdb\x2f\x97\xb1\x3b\xac\x2f\x0c\x52\xea\xa4\xe1\x8a\x54\xb8\x4a\x7a\xde\x3c\xe2\x76\x42\xe4\xdc\x3c\x97\x2a\x54\xea\xfc\x23\x8f\x90\x89\x91\xf6\x66\x62\xe6\xde\x7f\x98\x2a\x68\x46\x58\x88\x17\xb5\x04\x1c\x80\x68\xa6\x95\xb1\x5a\x84\x94\xf8\x01\x9f\x21\x5e\x4d\xec\x0b\xbd\x01\x52\x13\x07\xed\xa3\x15\x23\x2f\x8a\xf6\x91\xcf\xd8\x03\x72\x87\xa1\x18\x4e\x90\x14\x8a\xa2\x77\x0f\x08\xf6\x80\xa0\x0f\xc8\xdd\x5d\x32\x3b\x69\x2b\x36\xe7\xb2\x14\x5d\xb5\xd9\xb1\x75\x87\x49\xba\xa1\x3b\x3a\x98\x4b\xfe\x0e\x9a\x6f\xf6\xdb\xfc\xee\x01\xb9\xc3\x51\x8c\xfb\x8a\xd2\x5f\x51\x02\xc1\xd8\xef\x38\xfb\x9d\x64\xbe\xa1\x04\x4e\x72\xf4\x3d\x8a\xbb\x4c\xe7\xc2\x8e\x4b\xfe\x2f\x23\x8e\x7a\x44\xde\x4a\x8e\xa9\xab\xe9\x94\x38\x9a\x62\xce\xa1\x44\x48\x2b\x1b\xee\x23\x94\xa4\x1b\x27\xbf\xc6\x48\xa5\x47\x92\x28\xc9\x9e\x43\x8f\x94\x80\xaa\x4a\xd1\x9a\x56\x2a\x0d\x8a\xa4\x08\xfc\x1c\x1a\x94\xe4\xc7\xc3\x5d\x66\xee\xad\x85\xa6\x92\xa0\x09\x14\x3f\x4b\x0c\x7a\x47\x22\x18\xfd\x72\x90\x60\x49\x8c\x3a\x87\x04\x23\x2d\x4c\x55\xd7\xb6\xf9\xa5\x60\x31\x1a\x3f\x8b\x04\x7b\x24\x45\xb0\x05\x3a\x07\x1d\x86\xa4\x89\xf3\xe8\xb8\x9d\x0e\x26\x13\x0b\x4e\x80\x63\x5a\xe9\x36\xc5\xa1\x18\xca\x9d\x83\x9e\xf3\xd0\xfb\xf5\x4e\xe9\x5d\xb5\xd2\xb1\xe3\x0c\x76\x56\x57\x63\xa8\x87\x3e\xe8\x05\x6f\x96\x9b\x4e\x80\xe2\x98\xb3\xb4\x83\x61\x61\x02\xfb\x69\x93\x3b\x00\xa4\x13\xe2\x68\xee\x3c\x49\xf0\xa3\x8e\x0e\x26\xaa\xfe\x8f\x6e\xd3\x28\x61\x28\x43\x91\x67\xf5\x08\x46\xf8\xe2\xec\xa7\xf7\xa9\x3d\x8e\x61\x38\x43\x9f\x27\x09\x29\x69\xfa\xfb\xee\x07\x08\xe6\x62\x2e\x69\x3a\x9c\xa7\x0e\x8d\x18\x46\x61\xd8\x59\x83\x30\x46\xed\xd6\x5d\x76\xf5\xf0\xf7\x0c\x31\x68\xe6\xbc\x61\x1e\xa3\x25\xdd\x98\x40\xdb\x91\x4e\x2b\xee\x19\xa4\x18\x8e\x3d\xaf\x47\x98\xa3\x50\xef\x2d\x6d\x80\xf4\x60\x82\xe1\x28\x4a\x90\x01\x91\x84\x58\x9b\xba\x4e\x7f\x6e\xb0\x3d\x59\xab\x0f\x27\x01\x95\xe2\xa8\x51\xa1\x7b\x22\xd9\x16\x6b\x42\xa7\xd8\x12\xcb\x05\x86\xc0\x79\x92\xa0\x5f\xa8\x8e\x58\xea\xf7\x9a\x95\xe7\x06\x53\x29\x34\x8b\xad\x6e\xb3\x56\x6e\x93\x7d\x46\x18\x3f\x3f\x0d\xa3\x1a\x4a\x24\x82\x7b\x44\x70\xa2\x5b\xc6\xab\x43\x81\xc2\xf9\xd6\x68\x58\x1e\x56\x09\x7e\x5c\xe7\x47\xa3\xca\x68\xf4\x84\x3f\x55\x47\xe3\x71\x8f\x16\xc6\x23\x61\xd0\x69\x94\x46\x2f\x7d\xfe\x99\x66\x46\x6d\x32\x37\x11\xc2\x25\x52\xe8\x75\xc6\xd5\x5a\x13\x2f\xd6\x88\xb2\xd8\x25\x0b\xa3\x66\xb9\x25\x96\x9a\xe5\xfa\x50\xec\x0c\xf1\xea\x98\x78\x69\x95\xfb\xd5\xb6\x38\x2c\x0a\x6d\xbe\xff\xcc\x74\x8b\x4c\x7b\x84\x57\xef\x2e\xdd\xf2\xe1\x66\x80\x19\xdd\x10\x6c\x93\x3b\xec\x70\xfd\x66\xc3\xf4\xed\x10\x0f\x08\xf1\x80\x38\xd6\x0a\xe6\x30\x8e\xd3\x8d\x0e\x17\x9b\x86\x3f\x41\x09\x1b\x86\x62\x41\x55\x77\x24\x30\x5f\x4e\x81\xb1\x5a\x90\xae\x39\x0f\xfb\xa5\xbb\x2b\xbb\xf3\x92\xa5\xfd\x9b\xe8\xf9\x68\x3a\xe5\xe5\xbb\xf9\xb4\x1c\xb7\xb2\x7f\xa9\x9a\x77\xab\xfb\x21\x3d\x63\x8c\x3b\xe6\x30\x04\xce\x62\x1e\x53\xae\xbb\xfc\xfd\xc9\x8f\x21\x9f\xbe\x23\x9f\x30\x14\xfb\x16\x64\xe9\x9f\x1e\x90\x4f\x87\x0d\x24\xee\xcb\x61\xbf\x74\x78\xe8\xce\xbb\xdd\x87\xd1\x8e\x3b\x40\xf8\x1b\x49\x5c\x98\x4b\x7b\xf0\xd3\xff\x26\xb9\x64\x54\x34\x3c\x22\x1a\xee\x19\xf6\xff\x17\xa2\xb9\x1d\x85\xb3\x2c\xc9\xa1\x14\xc7\x52\x7e\xaf\xa1\x9e\x6c\x73\x7d\xa1\x7b\xa2\x71\x38\x4e\x10\x0c\x8e\x12\x34\x4b\x7d\x23\x19\x86\x62\x51\xe6\xbf\x4a\x46\xfc\x01\x61\x29\x96\xe3\x08\x96\x66\xb9\xfd\xec\xf0\xef\x4f\xb6\xe3\x4e\x9d\x8c\x89\x24\x83\x39\x30\x14\xe8\xf7\x23\x8a\x7e\x43\xfd\x4f\x7e\x0a\xc4\x31\x85\x58\xfb\x08\xe1\x3d\xd1\x93\x01\x1c\x7d\x0d\x2f\x96\x88\x78\x40\x30\x5f\xa4\x0d\xd4\x27\x53\x97\x20\xf6\x80\x7c\xf2\x5d\x59\x9a\xc1\xed\x2f\xb3\x25\x8f\x2b\x12\x67\x02\x53\xfa\x59\x7a\x0e\x28\xfc\x74\x3d\x47\x24\xca\xa9\xe7\xcb\x92\x10\x9f\xab\x8c\x01\x3c\x6e\x4b\xd2\xa5\x03\xf8\x6e\x5b\xd2\x4e\x58\xf2\x01\xb9\x53\x09\x86\xa6\x69\x45\x65\x19\x88\x12\x1c\x87\x6a\x1a\x46\xa9\x1c\xa3\x6a\x32\xc3\xb2\x24\xae\x92\x94\xca\x42\x88\xc9\x18\x4d\x32\x90\x90\x09\x05\x92\x24\x2e\xe3\xa4\x4c\xb2\x50\x66\x39\xc6\x8d\xa8\x28\x54\x30\x0d\x90\x24\xc9\x01\x05\x50\x34\xae\xe1\x1a\x00\x2c\xa9\xc8\x0c\x89\xcb\x32\x94\x09\x05\xa5\x58\x05\xd3\x30\x59\x66\x71\x12\xe0\x14\x2e\x43\x1c\x63\x34\x95\x91\x71\x54\x21\x80\x1f\xd0\xb0\x48\xc6\x49\x7f\x27\x98\xef\x14\x1e\x4d\x44\xfd\xc7\xe4\x37\x1c\x47\x51\x96\xc8\x7c\xeb\x0f\xe3\x34\x87\xb1\xe4\x03\x82\xd1\x6e\x7f\x9e\x7c\x1e\x10\xd2\xfd\x0f\x0b\xfe\xdb\x3d\xc4\xf6\x7f\xb8\xac\xf1\x3c\xcf\x17\x37\x4c\xe1\x7e\xd6\xab\x5b\x8d\x27\x9d\x5d\xbf\x99\x83\xa6\x5a\x5c\xdd\xdb\x6c\x61\xbc\xd1\x2a\xcc\x64\x66\xce\x1b\xf7\xb5\xd1\xe3\xc8\x9e\x6c\xe8\x45\xb3\x5b\x91\xab\x95\x99\x35\x35\x2b\xab\xe1\x68\x34\x07\xa4\xbc\x90\x07\x83\x41\xa7\xc8\xf4\xdf\x94\x7b\x92\xb7\xf4\x4d\x79\x8d\xce\x5f\x49\x17\x35\x3f\xea\x3c\xb5\xfc\xbf\xfc\x4f\x89\x59\xd7\xf1\xca\x68\x6c\x70\x66\xfb\x51\x33\xa9\xae\xb5\xa8\x36\x8c\xc1\x53\xed\xad\x00\xac\x35\x53\x58\x14\x1d\x5b\x6e\x3b\xb2\x46\x0f\xaa\x4a\xb1\xf9\x3e\xea\x59\xe0\x75\x5d\x1f\xe9\xf5\x95\xd6\x5c\x7e\x54\xb0\x9e\x48\xf1\x8f\xeb\x17\x81\xb7\x50\xe1\x99\x5f\x53\xf7\xf7\x56\xb3\xeb\x62\xee\x8a\x64\x13\x7c\x2c\xf1\x6e\x88\x5a\x25\xfc\x65\xff\x79\xe1\x47\x18\xd9\xe5\xf9\x12\x5a\x8f\x7b\xfd\xaf\xfe\x04\x55\xc1\x04\xbf\x8f\xba\x02\x71\x1b\x33\xbe\xc3\x00\x45\x00\x1a\x87\x1c\x83\xa9\x1c\xab\x12\x2a\xcd\x42\xc8\x70\x2a\x49\x62\x1a\x00\x90\x56\x54\x9c\x26\x50\x19\x30\x8c\x8a\xa2\x98\x4a\x52\x90\x21\x69\x15\x67\x29\x85\xe4\x08\x85\x65\xd3\x5c\x01\x4b\x34\x76\x0a\x23\x89\x64\x47\xd9\xbd\x0d\xc2\x3e\xc6\xb2\x6c\x8a\x2b\x10\x39\x5d\xe1\x7d\x39\x58\xea\xf4\xa8\xfa\xf2\x3a\xc0\x4c\xc6\x30\x86\x5d\xed\x6d\x25\x8b\xf5\xd7\x22\xad\x72\x7c\x01\x2b\x53\xa8\xdc\x9f\x2a\xfd\xc1\xb6\xf6\xd2\xe7\x66\xea\xe6\xc5\x14\x28\x03\xdf\x40\x6d\x6b\x68\xad\xd9\x74\xf9\x52\xaf\xbd\xc8\x4c\x53\x7f\x34\x9b\xa3\xed\xd8\xee\x3c\x15\x17\xcf\x43\xaf\xeb\x5c\x57\x20\x36\x87\xae\x6c\x36\x1b\x1d\xb9\x65\xbe\x56\xef\x7b\xbd\xfb\x41\xbf\x50\x6a\x54\x0a\x8f\xce\x4a\xab\xe2\x8b\x26\x86\x2b\x4a\xb1\x6a\x61\x75\x03\x67\xb6\x9d\x62\x17\x15\x3b\x0c\x78\x72\xee\x79\x66\x54\x24\x8c\x09\x84\xe6\x84\xda\x8c\x6d\x67\x50\x15\x1e\xed\x55\xfd\xb1\x21\x2e\x96\x33\x73\x5c\x1f\x7b\xf8\x5b\x31\xae\x20\xd8\x71\xe6\xf4\x7f\xc7\x15\xf0\xdb\x98\xf1\x1d\x4d\xa8\x1c\xab\x51\x04\x0d\x21\xcd\xaa\x98\x8c\x33\x32\x25\xb3\x9c\x86\x13\x40\xa3\x08\x0c\x93\x19\x8a\xe6\x00\x4e\x6a\x40\xc3\x48\x94\x00\x2a\x2a\x53\xb8\x4c\x13\x84\x8c\x32\x32\xe4\xb8\x3b\x2f\xdc\xe3\xb1\x56\x8d\x26\x1a\x3b\x8d\xb1\x04\x97\xf9\xd6\xcf\xa5\x48\x8a\xc3\x53\x3c\x01\xcf\xe9\x09\x78\xe7\xe5\x15\x13\x57\x94\x89\xca\x75\xe6\x99\x34\xb6\xed\xf5\xf0\xbd\x42\x3c\x2d\xcd\xd9\xfd\xba\xcc\xb7\x9d\x22\xd6\xc0\x5b\x4c\x81\xa1\x5f\x56\x54\x95\x53\xaa\x2a\xfa\xc6\xdb\x2f\xaf\x5c\x97\x1e\xb3\xdb\x5a\x4d\xa1\x57\xce\x4c\x7b\x2c\xb6\xef\x9b\x8b\x47\xb4\x21\xdb\x9a\xf5\xd1\x09\x79\xc2\xc4\xfd\xab\xb6\xff\x8f\xf7\x8c\xd5\x3e\x7c\xdf\xf0\x9d\xee\xcc\xef\xe9\x0e\xda\x79\xed\x13\x3d\x8d\x99\xda\xec\xfb\x53\xad\x30\xc1\x27\xec\x7b\x63\xfd\xd6\x6e\x3f\x1a\x8f\x93\xc7\xd1\x66\xd2\xe9\x3d\x56\x0b\xcc\x1b\xe4\x96\xb6\x5e\x5f\x91\x33\xb1\xda\x23\xcd\x51\x55\x18\xd4\x54\x12\xeb\x88\xf5\x11\xb3\xac\xbf\x99\x28\xce\x93\xe6\x3d\x65\xf4\x64\xe2\x63\xe5\x79\x4a\x2d\xc6\x53\x4a\xb5\x38\x6b\xfb\x2f\xf7\x14\x3c\xbf\xa7\x60\xb7\xb1\x72\x6f\xd5\xd8\xcd\x9c\xdd\x4c\x13\xe3\x18\xf4\x2b\x8a\x7d\x45\x31\x04\x45\xbf\x7b\xff\x12\xad\x99\xa1\x30\x3c\x79\xd8\xdf\xbd\x25\x71\x8e\xe4\x68\x06\xe7\xe8\x14\x5b\x8f\xb7\x74\x9f\xa5\x7f\xba\x53\x92\x3f\x85\x51\x43\x27\xb7\x8f\xdb\x7e\xa3\xc0\x94\x8c\x12\x57\xc5\xd1\xf7\xd7\xc2\xbd\x8d\x4e\x1c\x7b\x53\xdb\x7c\x60\x23\xb5\xff\x3c\x06\x85\x3a\x28\x7b\x4e\x24\xc4\x18\x71\xfc\x67\x67\xc4\x3c\x5f\x98\xfd\x02\x41\x6e\xfa\xb9\xf3\x8d\x29\x7b\x6e\x91\x63\x5f\xf6\xa5\x53\x8d\x84\xe5\xf6\xa4\xd2\x11\x9e\xe0\x71\x19\x68\xa2\x65\x1a\xec\x32\x34\x44\xb4\x24\x72\x19\x1a\x32\x32\x47\xbf\x0c\x0b\x15\xa9\x2c\x5c\x86\x85\x8e\xcc\x63\x2f\xc3\xc2\x44\xe6\xf7\xb7\xd9\xee\x7e\x93\x8a\x68\xfa\x5e\x8c\x07\x84\xc9\x5b\x21\x4d\xd8\xf4\x7d\xb5\xe1\x87\x8c\xfd\xc8\x44\xf7\x5f\xd0\x7d\xaa\xff\xf7\x27\xc7\xbc\xaa\x90\xf0\x80\x7c\xd2\x2c\x73\x71\x55\xd1\xe7\x01\xf9\x37\x17\x37\x7f\xc2\x32\x4c\x5c\x4f\x1d\x8d\x02\xfb\x2f\xa4\xd7\x4d\x74\xbe\x22\xa9\x63\xad\x6c\x07\xc2\x6b\xfb\xc2\x43\x63\x5a\xd7\x9a\xc5\xbf\xa4\xe7\x6e\xbb\x4a\x17\xd3\x73\xe1\x21\x73\xff\x37\x1b\x2a\x49\x6a\x2b\x43\x0d\x64\xb9\x70\xa5\xcd\xd3\x8b\xbf\xde\x75\x6d\xe7\xe6\xa8\x8f\x5e\xb9\x24\x78\x8e\xda\x82\xd1\x7d\xff\x37\xf9\x73\xd5\x76\xb9\x31\xff\x7c\xb5\x65\xc4\x8a\x98\x5f\xb3\xe4\x89\x13\xd9\x58\xb3\x37\xf6\x5f\x1a\x8f\x12\x37\x04\xc6\xa6\x62\x68\x72\xc2\x91\x89\x08\x8f\x06\xb7\x4b\x11\x11\xd1\xb1\xf7\x52\x44\xe4\xf1\x58\x90\x94\x04\x65\xe2\xa1\x8e\xf1\x5c\xac\x21\xfa\xd8\xc9\x2e\xe6\x87\x89\x38\xeb\xad\x7e\x39\x71\x93\xc4\x2c\x6b\xef\xe8\x19\xa9\x59\xe2\x2f\x07\x6e\xe0\x0c\xe1\x9d\x81\x38\x49\x28\x34\x47\x90\x1a\xaa\xc9\x14\x8a\xb9\xb1\x9c\xa5\x39\x00\x08\x59\xd3\x28\x42\x55\x15\x82\xe5\x14\x8d\xc5\x58\x1a\x53\x34\x00\x69\x0c\x55\x14\x1c\xa7\x00\x80\x18\xab\x28\x8a\x3b\xc7\xf6\x13\xb9\x8b\x53\x94\x50\x45\x8a\xd8\xcd\xc4\x93\x57\x36\x70\x3a\x6d\x55\xc4\x7f\x7b\xe4\x8a\xfe\x14\xbe\xf9\x4c\x96\x51\x38\x6d\xd3\xfc\x96\x2b\xa2\x1d\xbb\x22\x4c\xd6\x0a\xc6\x60\xd8\x90\x63\xc7\xaf\xe4\xa2\x39\x5b\x70\x5d\x86\x9a\x15\x89\x35\xef\x4d\x81\xf9\x5d\x89\xa9\x10\x99\x61\x86\xbe\x0b\xde\xff\xd6\x9b\x48\x37\x61\x1b\x4c\x5e\xdf\x5b\x60\xd8\xe1\xe8\xc2\x87\x66\x73\x10\x55\x4c\x4b\x7c\x19\x7d\x14\x9e\xeb\xb3\xb2\xd9\x60\x66\xeb\x99\x57\x4c\x2a\x3c\x3d\x89\x7e\x43\xbe\x88\xad\x0a\x6a\xd5\x1c\xac\x26\xad\x75\xd7\x29\x31\x85\x69\xad\x49\x88\x90\x53\x9f\x3a\x5a\xa5\x76\x5f\xd7\xa9\xfa\x7a\xd8\xbe\x7f\xe1\x1d\xc6\xaf\x08\xb3\x4f\x5b\xdd\x3c\xd0\xaf\xee\xf9\xed\x0a\x0a\xac\xcb\xe3\xd5\xd2\x78\x9e\x0f\xa1\x35\xa4\xd1\x89\xb6\x2c\x4f\x58\x71\x86\x03\x82\xa7\xbb\xad\xbe\xf6\x34\xe9\x9a\x62\xf9\xa5\xdd\x7c\x15\x99\x0f\x85\xdc\x30\xaf\x85\xf7\x8d\x5e\xae\x0d\x75\x7a\xb9\x1d\xd5\x45\xb1\xbb\x6c\xe2\xed\xee\xfb\xc0\x78\x22\x27\x36\x37\x2f\x59\x93\xee\x8f\xbb\x70\x09\x24\xbc\x4e\xd2\x8d\xd3\x07\x7f\x80\xef\xee\xf5\x57\x8a\x02\x39\xf2\x64\xd4\xa3\x05\xc6\x2c\x35\xd1\x66\xf7\x7e\x33\xee\x17\xb9\x8f\xd1\x7a\xf4\x34\x20\xde\xf5\x8e\x3e\x5e\xf5\x65\xac\xb4\x5e\x74\x9b\x90\xf5\x94\xf4\xc4\xaf\x5f\x8d\x43\x7f\x24\x7c\x84\xa4\x17\x85\x1b\xd3\x8f\xda\x43\x2e\xfa\xbc\x57\x82\x69\xed\xf5\xe1\xeb\xa7\xb8\x32\x09\xd3\x21\xa9\xb7\x62\x47\x78\x5f\x76\x1f\x09\xb3\x2a\xde\x7f\x60\x4c\x6f\xab\xdb\xd8\x5c\x6b\x95\xc7\x8b\xee\xf3\xc4\x5a\xf5\xef\x07\x5e\xa3\xf2\xd3\x10\x0d\x14\x7f\xa6\x3d\x07\xac\x3c\xee\x3f\x9b\x38\x9e\x85\xc3\xc3\x5f\xcd\x5f\xe9\x7d\xd4\x68\x4c\x53\xf8\xfb\x71\xb0\xad\x83\x2e\x8b\x87\xf7\xe7\xfa\x52\x7d\x58\xbc\x0f\x78\x9d\x24\x75\xdd\x91\x9d\x27\xeb\xea\x62\xfa\x6d\xe5\x32\xfa\xbe\x2e\xfe\xee\xbd\x93\x73\x47\xa7\x17\x2a\x78\xea\xd1\xce\xc0\xea\x17\xee\x67\xcf\xa5\x0d\x3e\x78\xb1\x94\xd2\x92\x7f\xaf\x73\xcf\x85\xe2\x04\x7d\x9a\x91\xab\x16\xb1\x16\x3f\x5e\x4b\xab\x56\xb5\x5a\xac\x0d\xa7\xfd\xe6\x9b\x51\x57\x66\x28\x56\x9c\xad\xc7\x54\xa9\xdc\x56\x47\x7a\xf1\x03\x1f\xb6\x57\x05\xfe\xc7\x0f\x2f\x93\xf4\x7e\xeb\xb3\xab\xcf\xfa\xff\xbb\x81\xcb\x1b\xa0\xb3\x63\x77\x28\xc2\xc8\x2a\xc9\xd2\xaa\xac\xaa\x28\xae\x92\x34\xca\x62\x0c\xcd\x60\x0a\x09\x28\xc0\x40\x4e\xa5\x21\x4b\x53\x0a\xc0\x39\x45\x26\x31\x48\xe3\x2a\x03\x80\xc6\xa0\x00\xd7\x20\xa4\x64\x82\x56\xa1\xbf\xaf\xee\xaa\x0d\x8f\xe7\x44\x18\x0a\xa3\xa9\xe4\x95\xf5\xdd\xdb\xa3\x1c\xcd\xb7\xca\x06\xfd\x0a\x75\xe2\x75\x61\xd6\xd8\x41\x65\x5e\x7a\x84\x13\x85\x60\x3a\x23\xa7\xda\x68\x7c\x3c\x3f\xb1\x9b\x27\xfd\xa5\x00\x8a\x2b\xaa\x49\x79\xa6\x9b\x2f\xc2\x8c\xf9\x8b\x23\x06\x71\x70\xa6\x03\xbe\xca\x9e\x7e\xb7\xc0\xcd\x16\x8d\x67\xfc\x8d\x58\x33\x5d\x6d\xcb\x76\x5a\x70\x26\xc8\xd8\x60\x50\xa3\xf4\xf7\xb7\x59\x0d\x2d\x98\x93\x91\xd5\x76\x98\x49\x1b\xa3\xf1\xae\x3c\x9b\xe2\x6a\x7f\x30\xd4\x60\xc9\x5c\x2b\x68\x87\x07\xda\xb4\x34\x7a\x77\xa6\x4f\xfc\xdc\x6e\xae\x5e\xe7\x85\xc5\xf6\xb5\xc0\x8f\xf3\x44\x8c\x4a\xd8\x94\x93\x22\x06\x1f\x5a\x03\x3d\x33\xc2\xde\x24\x62\xdc\x90\xfe\x65\x11\xc3\x5f\xa3\x3d\xe8\xc3\xfb\x9c\x3b\x22\x47\x47\x99\x04\x9a\xe9\xa3\xdc\xad\xe9\x9f\xea\x23\x7d\x4d\xe2\x5f\x1a\x31\x33\x23\xd2\x05\xba\xba\x3a\x22\xdd\xb0\xaf\xce\xa1\x1f\x44\xa4\x2a\xde\x1f\x2f\x65\x60\xc1\x47\xa7\xf0\xd8\xdc\xb0\xef\x74\xb7\xb7\x7e\x12\x5b\xaf\x8b\x66\xe5\xad\xfb\xda\xad\xe8\x05\x68\xd3\xc4\x8a\x67\x46\xd6\x4b\x61\xd5\xaf\xbe\x60\x75\xb1\xc7\x91\x6d\x9d\xfb\xe8\xb2\x85\xe5\xbd\x20\x6a\x15\xbc\x3c\x2c\x3e\x6f\x56\x74\x7b\x58\x91\x1b\x2d\xa1\x30\xb9\x75\x44\x52\x65\x82\x63\xa1\x4c\x02\xc8\x72\x0c\x45\x13\x38\x45\x93\x84\x02\x54\x1c\x53\x38\x12\x62\x84\xac\x29\x28\x43\xca\x04\x4e\x40\xc8\x12\x10\x23\x31\x59\x63\x50\x0c\x50\x2a\x87\x92\x1a\x26\xfb\x0b\xa5\xd8\x35\xe5\x16\xbf\xfc\x9d\x1a\x88\x68\x8c\x23\x93\x03\x91\xfb\xf6\x30\x75\xf2\xe7\xe6\xbe\x2d\x56\x9a\x6c\xb5\xbb\xee\xce\xe4\x06\x5e\xe5\x89\xe7\xa7\xd7\x9e\xd5\x58\xbc\x8e\x50\x54\xab\xb0\x76\xb3\xc6\x2c\x50\xa1\xb7\xa9\x3f\x3f\xf2\x23\x82\xdf\xc7\x21\xef\x93\x12\x87\xfc\xcf\x05\x99\x73\x78\x01\xb1\xf0\xb4\xde\x94\xb9\x8d\x67\xaa\xe3\xd7\xae\xd2\x19\xe0\x15\x6a\xfa\x66\x14\x16\x93\x4a\x05\x4e\xb8\x3a\x3b\x27\x15\x4c\x30\x86\xf3\xf7\xd9\x5c\x98\x57\x39\xfb\xed\xc5\x42\x39\x06\x2b\xd3\xed\xe6\xb3\x06\x1f\x17\xe4\x6c\x59\x76\x6a\xf7\x76\x0d\xd5\xb1\xb7\xa6\xee\x50\x3c\x5a\xdf\x3e\x1b\xf2\x74\xdc\x7c\xa6\xcc\x52\x8e\xd8\x73\x64\xb4\xc7\xb1\x27\x24\xf3\x61\xec\x0d\xf9\x73\x41\x7f\x2c\xa0\x4d\xb4\x5e\xd9\x3a\xd3\x8d\x88\xcd\xc7\x28\xd8\x2e\x4d\x8c\x13\xab\xef\xeb\x66\x71\xdb\xa6\x9c\x82\xa0\x14\x7d\x19\x89\x89\x63\xb5\x8d\xf1\x23\x1b\xda\xd5\x96\x10\x8b\xd2\xfd\xf9\x0a\xfa\xe5\xc1\x73\xc1\xbe\x82\x3e\xcf\xff\x73\x19\x76\xec\xd8\x5a\xb8\x5c\x17\x6d\xe3\x25\x55\xcc\x2c\x5d\x5c\xdb\x17\xae\x2d\xdc\x2b\x11\x7c\x67\xe9\xe2\xef\x4a\x0d\xad\x96\x50\x6e\xba\x1a\x83\xe5\xe6\xc5\x2c\x4c\x0d\xb3\xd3\xd7\xea\xb0\x2a\xf6\xea\x58\x5d\x79\xa9\xf7\xea\xbd\x47\xb9\xb1\x00\x5c\x07\x72\x3d\xf8\xaa\x63\x06\xb1\xa6\x56\xf5\x46\x4f\xee\x77\xac\xa2\x58\x73\x80\x4e\x5a\xb0\x2b\x16\x95\xf9\x12\x27\x9f\x8b\xd8\x0a\xf0\x9b\x5b\x8f\xad\x1a\xc7\x28\x40\xd3\x80\xcc\x2a\x18\x8d\xe2\x04\x20\x18\x96\x25\x31\x9a\x52\x64\x54\x26\x34\x0d\x03\x00\x57\x81\x46\xa2\x28\xaa\x41\x8d\xe4\x54\x1c\x83\x9a\xc2\x92\x8c\xaa\xca\x9a\x0c\xc1\x61\xe3\xd3\x15\x63\x2b\x9e\x39\xb6\xe2\x18\x4e\x25\x8f\xad\xc1\xdb\x70\x9d\xf1\xda\xb1\xb5\x18\xe9\xd4\x93\xb1\xf5\x82\x1c\x33\x61\x6c\x2d\x2c\x1a\xcb\xfe\x64\x6d\x6d\x1a\x6d\x1c\x1d\x15\xdb\xda\x58\x1b\xd9\x15\x41\x18\x3a\x9b\x31\x00\x82\xf6\xd6\x5f\xd1\xdb\x45\x7d\x31\x2f\x2d\xc0\x7d\x6d\x44\xd7\x98\xda\x64\x22\x0f\x5f\x5a\xa6\xd2\x55\x5f\x38\xb2\xd6\xe2\xb5\x86\xda\xe5\xc5\xb7\x91\x5c\x6b\x33\x5b\x7b\x03\x61\xab\xf8\xef\x1a\x5b\xaf\x1d\xdb\xae\xf4\xe7\x37\xe6\x71\x50\x52\x6e\x39\xb6\xfe\xc2\x5c\x31\x2b\x6f\xfd\x95\x63\x1b\x7f\xa3\xb1\xf5\xd2\x38\x1b\x8c\xad\x2f\xfa\xdb\xd0\x6c\xd2\x6c\xf1\xd5\x71\xca\x9b\x57\x03\xaf\x62\x4c\x61\x5a\x28\x37\x95\x4a\x65\x31\xad\xd2\x33\x6b\x65\x2f\xf5\x97\x65\x97\x5a\xac\xf5\xf2\xbd\xde\xde\xd6\x6a\x15\xac\x32\x68\x54\x85\xea\xb3\x06\x8b\x25\xbe\xba\x35\x86\x7c\x09\xcc\xf1\x6d\x69\xc5\x5a\xad\xaa\xf1\xca\xe7\xcc\x5b\x13\xcf\x19\x3f\xbd\x86\x6b\x7f\xe5\xc7\xee\xc4\xad\x73\x4f\xca\x08\x61\xf4\xaf\x04\x28\x95\xc2\xe7\x77\x45\x09\x22\x9d\x5e\xad\xc5\xf7\xc6\x48\x43\x18\x23\x9f\x75\x35\xeb\x28\xf0\xf8\x6b\xc9\xae\xe6\x3a\x82\x35\x8e\xf3\x38\xc2\x99\xdc\x47\x7e\x42\x19\xf9\xbd\x61\xce\x6b\xdd\xae\x96\xee\x98\x6c\x9c\x70\x17\x31\x86\x0c\xc5\x5a\x77\x28\x20\x9f\x0f\xe0\x0f\xa1\x33\xaf\x1f\x8e\x4e\xa8\x3e\x53\x35\xb7\xe9\xd6\xb3\x05\x3f\xab\x53\x13\x76\x77\x65\x6c\xa1\xba\xad\x64\xf1\x44\xd2\x24\x4d\x61\x2b\xb7\xe4\x89\x4b\xa8\x99\xab\x94\xb7\x95\x3e\x89\x4c\x9a\xfc\xa9\xac\x65\x6a\xe0\xf8\x5a\xcd\x40\x10\xef\x0a\xce\x7c\xc7\xad\xf9\xb7\x75\x1e\x61\x41\xda\x62\xd4\x19\x86\xfd\x9a\x58\x41\x64\xc7\x82\x30\xec\x5d\xc9\xdc\x04\x37\x82\x5e\xcd\x4f\x70\x9a\x7c\x2e\x8e\x12\xfc\x3a\x74\x9b\xe9\xa5\xec\x1c\x50\x84\x39\x39\x9a\x0d\x1c\xf3\xe3\x03\x3f\x9c\x1c\xfe\x16\xc7\x9c\x77\x1f\xeb\x15\x9c\x79\x67\xe0\xe5\x62\x2b\x7a\x72\x5e\x1c\x37\xc1\x25\xb2\x57\xf0\xe3\x63\xc8\xc7\x51\xe4\x58\xbe\x87\xd3\x13\xf8\x62\x5d\x3e\x7c\x2b\xee\xf9\x9c\x06\x51\xc2\x67\x38\x82\x2e\xcc\xf6\xee\xb7\xa2\x47\x1c\xc7\x1d\x46\xfb\xb0\x3b\x78\x36\x89\xd9\xc3\x71\x5f\x57\xb2\xa9\xab\xb9\x19\x3c\x9c\xbc\xf9\x10\x7b\x82\x6e\x06\xd3\xbb\x8b\x8c\x6f\xc1\x77\x80\x2b\xcc\x7a\x42\xa8\xba\x48\x92\x78\x01\x76\x77\x36\xdf\x42\x80\x00\x57\x82\x4d\x5f\x28\xc2\xf1\x31\xaa\xa7\x42\x84\x6e\xa8\xbe\xd4\x1b\x43\x38\x2e\x55\x7e\xba\xa2\x23\x57\x6e\x5f\xab\xeb\x63\x74\x61\x96\x77\x3f\xc5\x39\xe2\x31\x9e\xa3\xd3\x6b\xc3\xaf\x67\xeb\x04\x67\xbe\xe1\x2d\x8e\xc1\xd0\x05\xe8\x17\x77\xeb\x01\xc7\xe5\x26\x99\x65\x7e\x71\x57\xbb\x5f\xce\xf0\x29\xb2\x08\xe7\x2a\x8c\xf0\x19\x39\x54\x3b\x9d\x41\xff\xae\xfa\x9b\xb0\xe7\xa1\xca\xc5\xdc\xee\x58\xab\x44\xd6\xa2\x77\xef\x5f\xcb\x5f\x04\x5f\x16\x93\xa7\xa7\x85\x67\x72\x7a\x1b\x3d\x1e\x61\xcb\xcb\x65\xa6\x36\x6f\xc3\x5b\x2e\x9e\xd2\x79\xd9\x71\x3c\x37\xcd\xd9\x6a\x79\x1d\x47\xc7\xb8\x72\xf7\xe8\xee\x3c\xf2\x58\xfe\x96\x40\xb7\x24\xef\xd0\xd9\x5b\x70\x18\xc5\x96\xcf\x6f\x03\x06\x1f\x4e\x8e\x50\x7f\x38\x39\x86\x3f\x41\x88\x1b\x8c\xdb\x01\x9e\x2c\x8e\xcf\xcc\x8e\x5c\xac\x37\xd3\xee\x19\x8a\xcd\xd4\x9b\x7f\x5a\xe8\xc9\x51\x5d\xa6\x21\x05\x77\x93\x5d\xab\xd0\x4c\x02\x47\xf3\xb4\xdd\xa9\x67\xc7\x33\x23\x1f\xf0\x0c\xde\xaf\xb7\x83\x34\xdc\xd9\x1c\xc7\x78\xd9\x31\xc2\x20\x0b\x77\xf1\x39\xdb\xe5\xe5\x73\xf0\x54\xac\x99\x69\xbf\x0b\x94\xc1\x68\x90\x43\xb9\x28\xf7\x46\x74\x23\x6e\xe3\x50\x67\xa6\x6f\x79\x2d\x39\x84\xfc\xd6\xc6\x70\x84\xfa\x92\x7c\x33\x19\x5d\xe4\x22\xaa\xdb\x2b\xfa\xe4\xaa\xab\x4c\xf6\x23\x0d\xf2\x0b\x13\xba\x79\xec\xa7\xe9\x3f\x7c\xbb\x59\x96\x24\x21\xd8\xfc\x42\xc4\xdd\xa3\xf6\xd3\xa4\x89\xbd\xb4\x2d\x4b\xac\xb8\x46\xf9\xe5\xdb\x15\x51\x7e\x9a\x4c\xfb\x1b\x0c\xb2\xe4\x48\xac\x76\x1d\xa3\x3e\xfc\x3e\xed\x67\xb8\x76\x14\x7b\xec\x04\xf8\x5c\x07\x3f\x46\x7a\x3c\x85\xba\x91\x87\xa7\x91\xc8\x23\x43\xc6\xbc\x2e\x95\xd8\xed\xc2\xd7\x29\xe2\x5c\xbc\x67\x07\xb1\xf0\x64\xfb\x67\x98\xcd\x29\xfe\x8b\xa7\xfa\xfe\xe1\xc7\xbb\x40\xbe\xab\x30\x4a\xb2\x69\xce\x2e\xd6\x72\x0a\xce\xcc\x14\xe1\xf3\xe7\xdd\xad\x60\x5f\xff\xf3\x1f\xe4\xce\x36\xe7\x6a\x68\x35\xed\xee\xfb\x77\x07\xbe\x3b\x5f\xbe\x3c\x20\xc9\x80\x8a\xa9\xe6\x03\xf4\x6b\xf1\xc9\xa0\xb2\xb9\x9a\x4c\x9d\x5c\xe4\x8f\x40\xd3\x19\x38\x02\x8d\xb0\xf0\x05\x79\xae\x0a\x3d\xc1\x37\x32\xe4\x07\x42\x10\xb9\x17\xa2\x75\x55\xd2\x42\xcb\x44\xe5\xc6\xaf\x59\x8e\x0e\xc8\x22\xe5\x76\x4f\xa8\x55\xc4\xfd\x12\x10\xd2\x13\xca\x42\x4f\x10\x8b\x42\x3f\xb2\x2a\xe2\xbd\x6d\x8b\xc8\xb0\x53\x72\x4d\xa6\x27\xf8\x57\xe1\xbb\x8f\x4a\x42\x53\x18\x08\x48\x91\xef\x17\xf9\x92\x90\x7e\x7d\x5b\xe4\xab\x14\x29\xc5\xdc\x4e\x19\xc7\x74\x32\x16\xc9\x92\x38\x39\xd6\x4f\xb4\x6c\x14\xab\xac\x20\xd1\xcf\x58\x51\x4c\xd4\x44\x30\x95\xfd\xc7\xf5\x10\xe6\x23\x4e\x0b\xbb\x2a\x41\xba\xc1\x9c\xa7\x81\xd3\xa2\xd2\x3f\xa8\x86\x04\x66\x8e\x75\x11\x53\x06\xbb\xad\x51\x44\x4b\x1c\xff\x06\x85\x24\x9b\xc6\x49\x0d\x29\xaf\x75\x74\x4c\xdb\x99\x58\xb0\xdf\x6d\x22\x2a\x70\x80\x6b\x62\x88\xba\x5a\x2c\x11\xc5\x5c\x2c\xe7\xd0\x81\x9e\x0c\xff\x2f\x00\x00\xff\xff\xb4\x1f\xa2\xf7\x92\x9c\x00\x00") - -func asset_stat_trustlines_6HorizonSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_trustlines_6HorizonSql, - "asset_stat_trustlines_6-horizon.sql", - ) -} - -func asset_stat_trustlines_6HorizonSql() (*asset, error) { - bytes, err := asset_stat_trustlines_6HorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_trustlines_6-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4, 0x4c, 0x50, 0x7, 0xc6, 0x90, 0x59, 0x72, 0xba, 0x3c, 0xf, 0x5c, 0xd3, 0x4a, 0xc6, 0xc, 0x2a, 0x67, 0xad, 0x60, 0x8c, 0xe7, 0x41, 0x41, 0x93, 0xde, 0x5a, 0x0, 0x42, 0xa3, 0x1d, 0x38}} - return a, nil -} - -var _asset_stat_trustlines_7CoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xd9\x92\xe2\xc8\xd2\xe6\x7d\x3d\x85\xac\x6f\xb2\xda\xa8\x3e\x28\xb4\x85\xd4\x35\x75\xcc\xc4\xbe\x0b\xb1\x0a\xc6\xc6\xca\x42\xa1\x90\x10\x68\x01\x2d\x6c\x63\xe7\xdd\xc7\x10\x24\x5b\x02\x49\x42\x56\xf7\x19\xfb\x9b\x8b\xea\x6c\xe4\x72\xff\xe2\x0b\x77\x8f\x4d\xc2\xff\xf8\xe3\xcb\x1f\x7f\x50\x4d\x3f\x8c\xac\x80\xb4\xd5\x1a\x65\xa0\x08\xe9\x28\x24\x94\x11\xbb\xd3\x2f\x7f\xfc\xf1\x65\x73\x3d\x17\xbb\x53\x62\x50\x66\xe0\xbb\x07\x81\x39\x09\x42\xdb\xf7\x28\xe9\x5f\xc2\xbf\xc0\x91\x94\xbe\xa2\xa6\xd6\xcf\xcd\xed\x67\x22\x5f\xda\xf9\x0e\x15\x46\x28\x22\x2e\xf1\xa2\x9f\x91\xed\x12\x3f\x8e\xa8\x1f\x14\xfd\x3d\xb9\xe4\xf8\x78\xf2\xf6\x5b\xdb\x70\xc8\x4f\xdb\xfb\x19\x05\xc8\x0b\x11\x8e\x6c\xdf\xfb\x19\x92\x70\xa3\xf7\xad\x30\x76\xec\x8d\x6a\xe2\x61\xdf\xb0\x3d\x8b\xfa\x41\xbd\x74\x3b\x05\xf1\xe5\xfb\xab\x6d\xcf\x40\x81\xf1\x13\xfb\x9e\xe9\x07\xae\xed\x59\x3f\xc3\x28\xb0\x3d\x2b\xa4\x7e\x50\xbe\xb7\xd3\x31\x22\x78\xf2\xd3\x8c\xbd\xad\x2d\xdd\x37\x6c\xb2\xb9\x6e\x22\x27\x24\x27\x66\x5c\xdb\xfb\xe9\x92\x30\x44\x56\x22\xb0\x40\x81\x67\x7b\xd6\x56\x24\xf0\x17\x3f\x43\x82\xe3\xc0\x8e\x56\x1b\xe5\xa6\xf9\x7d\x47\x00\x41\x01\x1e\xfd\x9c\xa2\x68\x44\xfd\xa0\xa6\xb1\xee\xd8\xf8\xdb\x86\x31\x8c\x22\xe4\xf8\xd6\xf7\x2f\x5f\x72\x2d\xa5\x49\x95\x1b\xb9\xbc\x46\x95\x0b\x54\x5e\x2b\xb7\x3b\xed\x9d\xe4\xbf\xe2\xa9\x15\x20\x83\x8c\xec\x30\xd2\x57\x21\x99\x7d\xbf\x29\x1d\xe2\xe9\x2c\xf6\x83\xd8\x0d\xef\x13\x26\xde\xfc\x1e\x49\x87\x18\x16\x09\xee\x91\xdc\xe0\x34\x09\xb9\x53\xf2\x0e\x31\x9d\x84\x91\x6f\x9a\x24\xb0\x3d\x83\x2c\x6f\xcb\x22\x8c\xfd\xd8\x8b\x74\xe4\x20\x0f\x93\xf0\xfb\x17\xb9\xd6\xc9\xb7\xa8\x8e\x9c\xa9\xe5\x8f\xa4\x95\x46\x6d\x70\x81\x5e\x3f\x58\x51\x89\xf6\xac\xd2\x68\x77\x5a\x72\xb9\xd1\x39\xba\xe9\x54\xf0\xe7\x74\x42\x56\xf7\xe8\x8f\x96\xef\xab\xde\xcb\x7c\x40\xab\x49\xee\xc0\x7c\x2c\x76\xbf\xee\x20\x0e\x23\xc7\xf6\x48\x78\x4b\xf3\x5e\xe8\x6e\xbd\x1b\x14\x24\xc9\x06\x37\xf4\x1e\x84\xee\xd7\xbb\x77\xf9\x5b\x7a\xf7\x42\x77\xeb\xdd\xca\xdb\x9e\xe9\xdf\xd0\x7b\x10\xba\x5b\xef\x34\xd6\xc3\x58\xbf\xa1\x73\x2b\xf0\x11\x7d\x8e\x1d\x8e\x66\x31\x89\x6f\x31\x7b\x2c\x76\xbf\x6e\x42\x82\x5b\xb4\x26\xd7\xef\xd6\x96\x84\xf1\x2d\x75\x5b\x81\xbb\xf5\x6d\xb3\xd2\x88\x20\xe3\xb6\xda\x13\xb9\x5f\xac\x7d\x97\x29\xc9\xec\xe7\x9d\x66\x74\xe4\xdd\x50\xae\x23\xef\x6e\xc0\xbb\xec\x77\x0b\xeb\xab\xc8\x47\x75\x6e\xe6\x00\xef\xab\xdd\x48\xed\x34\x27\xb2\xe7\x8a\x2f\xa6\xdc\xdb\xb2\xfb\xd4\xf8\x9e\xd8\x21\xd1\xbd\x23\xb9\x4f\x5c\xb7\xe5\x0e\x89\xe8\x1d\xb9\x7d\x62\x79\x57\xee\x2e\x7c\x87\x84\x72\x5b\x6e\x9b\x24\xde\x95\xd9\x87\xfc\x3b\x92\x9b\x38\xbe\x2d\xb2\x8d\xcd\xdb\x32\x27\xa1\x70\x5b\x54\x47\xde\x6d\x81\x57\x57\xbd\x4b\x6a\xe3\x79\x3b\xc1\xbc\xd6\xc9\x37\xda\x65\xa5\x71\x2c\xec\x4c\xad\x70\xe6\xec\x24\xda\xd9\x52\xbe\x2e\xbf\xd1\xf5\xfd\xcb\x76\x6e\xdc\x40\x2e\xf9\xf3\xf5\x3b\xaa\xb3\x9a\x92\x3f\x77\xb7\x7c\xa7\xda\x78\x44\x5c\xf4\x27\xf5\xc7\x77\x4a\x59\x78\x24\xf8\x93\xfa\x23\x99\x32\x67\x5b\x79\xb9\x93\x7f\xd5\xfc\xaa\xef\xcb\x89\xc6\xd3\x8b\x3b\xc5\x59\xa5\x5e\xcf\x37\x3a\x37\x34\x6f\x05\x28\xa5\x71\xaa\x80\x2a\xb7\xa9\x97\xd7\xf9\xed\xeb\x77\x61\xa2\xe4\xe5\xdc\xf2\x6b\xf3\x77\x36\xf7\x0c\xbd\xdb\x9e\x13\x2e\x1b\x4a\xe7\x8c\x4f\xaa\x5f\xee\x94\xf6\xb0\x8e\x27\xb4\x27\xe6\x0f\x5a\xce\x80\x7c\xa4\xf1\x6f\x94\x24\x04\x34\x6b\xe9\xa9\xb5\x59\xc5\x4c\x03\x1f\x13\x23\x0e\x90\x43\x39\xc8\xb3\x62\x64\x91\x84\x86\x3b\x27\xe0\x1b\x31\x83\x98\x28\x76\xa2\x9f\x11\xd2\x1d\x12\x4e\x11\x26\x9b\xd5\xc4\xcb\xd9\xd5\x85\x1d\x8d\x7e\xfa\xb6\x71\xb4\x40\x38\x69\xec\xb1\x43\xee\x9a\x99\xb8\xee\xa1\x91\xaf\x0e\x70\x89\xf0\xad\x97\x1f\x27\xdd\xaf\x5f\x28\x8a\x7a\xfd\xc6\x36\x28\x3c\x42\x01\xc2\x11\x09\xa8\x39\x0a\x56\xb6\x67\x7d\xe5\x85\xdf\x93\xbe\x69\x74\x6b\xb5\x6f\x89\xf4\xe6\x46\x0f\xb9\xe4\x82\xb0\x28\x5e\x12\x9e\x23\x27\xbe\x24\x0d\x00\x73\x2e\xee\xa0\x30\x72\x7d\xc3\x36\x6d\x62\x50\xb6\x17\x11\x8b\x04\x7b\x91\x2f\xbf\x9f\xf7\xfd\x3e\x8a\x9f\xe4\x22\x7c\x88\x88\xdd\x42\x80\xd2\x6d\xcb\xf6\xa2\xb3\x8b\x21\x99\x79\xb1\x7b\xf9\x9a\x17\xbb\x61\xac\x13\x2f\x0a\x36\x4b\xc1\xf3\x66\x6e\x65\x6c\xcf\x74\xd0\x66\xc5\x68\x90\x30\xba\x0c\x67\x2b\x38\xf2\x5d\x62\xf8\x2e\xb2\xbd\x0b\x52\x1c\x77\x0e\x3a\x1a\x05\x24\x1c\xf9\x8e\x11\x52\x11\x59\x9e\x23\x33\x1d\x64\x5d\x43\x74\xb3\x6f\x76\x8c\xc4\x1b\xab\x8e\x8d\x74\xdb\xb1\xa3\x4d\xe3\xb6\xed\x7f\xa5\xc4\x71\x6e\x5d\xb6\x2d\x6f\x33\x17\xda\xc0\xda\x7e\x73\x34\x1b\xd8\x4f\x2d\x76\xa4\xff\x4c\x96\xd5\x54\xb6\x94\xcf\x56\xa9\xaf\x5f\x5f\xbb\xe2\xdf\x3f\x28\xfa\xf7\xdf\x6f\xdc\x7d\x0e\xf0\x5c\xcf\x9b\x06\xbc\xa7\xf1\xa4\x2f\xcf\xb4\x9d\xf6\xf3\x7b\x9a\xde\xd2\x73\xa6\xee\x02\x7f\x5b\x9d\x6f\x03\x63\x33\xfe\x3d\x1a\x13\x9b\x29\xe3\x36\x1c\x3c\xdf\x20\xc7\xb1\x70\x12\x03\x6f\x8d\x9e\x8e\xcf\x8f\x9a\x3f\x9d\x18\x6f\x81\xec\xbe\x43\xe1\xe8\x08\x8c\xf0\xc6\xb7\xa7\x01\x99\xbf\x2b\xa4\xc7\x78\x42\x22\xc7\x0e\xa3\x77\x45\xf7\xb3\xed\x57\x77\xdf\x7e\x8d\x1d\x3f\x24\x91\xed\x5e\x89\xfc\x24\xb1\x5e\x88\xad\xa3\x3e\x3f\x9d\xd4\xef\xf5\x9d\xf5\xf7\xc1\xce\x15\xd7\xb9\xb6\x36\x38\x55\x73\x68\xc5\x35\x6f\xd9\x4d\xbe\x1e\xed\xb1\xdd\xc2\xeb\xeb\x3e\xc8\x49\x70\x67\x06\xdd\xee\xbc\x18\xd7\x32\x68\xe2\xee\x28\x0c\x49\x74\x89\xcf\x6d\xac\x5e\xbd\x8c\xdc\x4d\x58\x5d\x56\x3d\x0d\x6c\x4c\xbc\x2b\x49\x2c\xb9\x78\x2d\xc3\x25\x17\x29\xc3\x8f\x75\x87\x6c\xfc\x0d\xdb\xc9\x8e\xe4\xa7\x66\xd1\xa3\x1e\xde\x2d\x59\xb7\x6d\x39\xeb\xd7\x5d\x03\xaf\xf8\xc6\xee\xce\x1d\xc3\x67\xb7\xbe\xf2\x7e\xcd\x21\xb6\x13\xf6\x47\xfd\x61\xbb\xac\xdf\xba\x83\x3d\xbd\x34\xf0\xf3\x6f\x22\xd7\x0f\xa2\x3d\x1b\xb9\x7c\x41\xee\xd6\x3a\x14\x7d\x3e\x6c\x92\x65\x84\xa2\x88\xb8\xd3\x88\xda\x84\x45\x18\x21\x77\x4a\x6d\xa6\x4c\x7e\xbc\xfd\x86\x5a\xfb\x1e\x79\x3b\xd8\x9a\xc8\x76\xe2\xe0\x68\xa8\xbd\x66\x21\x5a\x4d\xc9\xfb\x9d\xb2\xdd\x96\x38\xd2\xfb\x36\xed\xef\x2d\x5e\xe9\x9d\xdd\xce\x86\x1f\x9c\x77\xea\xd7\x84\x89\x7f\x53\xf4\xef\x94\xdc\xc8\x51\xdb\xff\xfd\x5f\x3f\x28\x81\xe7\x59\xfe\xf7\x8b\x7d\x75\xbc\x0c\x7b\xb8\xcb\x8e\x77\x79\x8e\x73\xee\x15\x36\xb6\x1b\x6d\x9b\xa8\xbb\x08\x68\xb3\x76\x7c\x02\x4a\x18\xeb\x3b\x10\x01\x09\x4f\x06\x20\xf6\xe2\x8c\x31\x20\x68\x1f\x4b\x6f\xf1\x1c\xad\x79\x1f\xc5\x74\xb4\x59\x77\xc7\xc8\xb8\x05\x36\x0b\xc9\xad\x11\xe6\x2d\xce\xa3\x35\xfc\xa3\x38\x0f\x2a\xee\xc7\xf9\x66\x90\x3b\xbb\x4e\xbc\x39\x71\xfc\x29\x79\x67\x48\x3b\x98\x7e\x62\x20\x3a\xda\xee\x78\x82\x82\xd7\xfd\xda\xaf\xf7\xf4\xc3\xc1\x8b\xde\x23\x62\x76\x65\xa0\x39\x25\xe1\x75\x1f\xf8\x44\xe3\x39\x11\x27\xd6\xae\x92\x71\xd8\x23\x7a\x98\x8c\xc3\xa6\xf8\xd7\x43\xdc\x9e\x2e\xde\x2e\xc4\xd4\xad\xe8\x3e\xda\xe1\x7a\x14\xd5\xd1\x11\xc0\x23\xcb\xae\x64\xc4\xbf\x91\xa9\xed\x30\x8c\x49\x70\xbf\x2a\xec\x1b\x17\x57\xa7\x6f\x68\x89\x1c\xdb\xb5\xaf\xcc\x28\x6e\xae\x05\xff\xce\x55\xd5\x91\x77\x1e\x9d\xaa\x3c\xb4\x8a\x3a\xbe\xff\xb3\xd6\x51\x47\x3a\x1f\x5f\xff\xdc\xd2\xba\xed\xb4\x33\x4d\xbb\x9e\xfc\xf7\xe5\xc0\x3b\xd9\xee\x7d\xd8\xc9\x8f\xcf\xd0\xb6\x6e\x1e\x2d\x4f\x52\xf1\x1d\xeb\x8d\x73\x07\x5c\x26\xa7\x94\x57\xaf\xe2\x11\xf2\x2c\x72\x71\x61\x7f\x4c\xce\xf1\xb1\xdd\xe3\xb9\xfa\xb0\x77\xfe\x38\x45\x7f\x31\x3f\xba\x6f\xac\x2e\x91\x13\x2d\x03\x12\xc6\xce\xc5\xec\x1e\x2d\x5d\xf2\xee\x7a\xee\x70\xc4\xfa\x38\x9f\x67\xe7\x16\x8f\x92\x7a\x76\xe2\xfc\xf5\x2e\xe2\x76\x37\xdd\x62\x6f\x27\x72\x89\x88\xfb\xdc\xee\xec\x84\xfb\x11\xa2\x72\x9b\x95\xb5\xe9\x07\xef\x6c\x86\x52\x39\xb9\x23\xbf\xc3\xd9\x6d\x95\xe1\x87\xf5\x95\x1b\xed\x7c\xab\x43\x95\x1b\x1d\xe5\xb0\xa9\xd8\x93\x6b\xdd\x7c\x9b\xfa\xfa\x52\xcc\xb4\x9a\x83\x52\xb9\xc6\x64\xcb\x6c\xa1\xa1\x72\x19\xad\x56\xa8\x37\x72\xb5\x42\xa5\xdb\x68\x76\x99\xd2\x80\x1d\xd6\x0b\xed\x92\xd2\xe8\x66\xf3\x8a\xdc\xee\x43\x35\x0b\x15\x8d\x29\xbd\x7c\xa3\xa4\xed\x47\xd8\xfd\x17\xd2\xf4\x37\x8a\xfd\x46\xd1\xdf\xb6\x2c\x53\x2f\x2f\xdf\xa8\x17\x59\x95\x65\x59\xfe\xf1\xe3\x25\xb9\xc0\xbc\x5e\x3b\xfc\xfb\xfb\xf7\xf7\x10\xca\x7c\x3f\xd3\x1c\xc8\xfc\x80\xeb\xcb\xf9\x92\xd6\x6f\x31\xdd\xaa\xc2\x74\x15\x2e\xd3\x2d\x96\xba\x2a\xe4\xf2\xdd\x66\x55\x69\x30\x6a\xa9\xc7\xf5\x5b\x25\xa5\xdc\x6a\x54\xab\x25\xe6\x80\x50\xda\x20\x13\x79\x51\x92\x58\x8e\x97\xd8\x6f\x14\xb8\x01\x91\x7d\x04\x62\x96\x61\xd5\x02\x53\xea\xe6\x79\x46\xae\x6b\xdd\x42\xb7\xc4\xca\x83\x8a\xac\x69\x45\x4d\xeb\x31\xbd\x92\x36\x18\xb4\x84\xfc\x40\xcb\x77\x9a\xd5\x9c\x36\x6c\xcb\x7d\x01\x6a\x0a\x77\x03\xe2\x2d\x16\xb9\x87\x20\x6a\xd5\xa2\xd0\x6a\x70\x4a\xa3\x9c\x6f\x66\xeb\x8d\x42\x06\xb2\x8c\xcc\xb1\xc2\x90\x6f\x36\x72\xed\x56\xad\xd8\xaf\xc2\x62\xa6\x96\xad\xab\xb5\x72\x41\xe1\xda\x30\x3f\xe8\xf7\xba\x07\x88\xe2\x09\x44\xee\x36\x8b\xfc\x45\x88\x57\x5c\xfb\x7c\x4b\xf0\x89\x28\xb9\xbe\xd1\xf7\xd1\x50\x39\xdd\xec\xdb\xf3\x28\xb0\x86\x24\x9a\x3c\x2b\x10\x22\x88\x06\xd0\x19\xa8\xf3\xba\x28\x99\x0c\x8b\x4c\x9e\x05\x40\x87\xbc\x20\x21\x86\x33\x91\x09\x38\x9a\x45\x06\xad\xf3\x8c\x2e\xb0\xac\x4e\x43\x9d\x48\xd2\x86\x2a\xfa\xc9\xcf\x46\x07\x0f\x19\xc4\x10\x96\x31\x4d\x86\x13\x11\x0d\x75\x9a\x40\xda\x34\x80\x29\x18\x2c\x10\x31\x30\x11\x36\x18\x5a\x17\x30\xa6\x45\xcc\xb2\x06\x0f\x21\xcf\xf0\x92\x28\x88\x80\xe1\x11\x10\x5e\x92\xfe\xa3\x37\x1d\xf7\x5f\xfb\xc9\x68\x55\x9b\x5b\xa5\x57\xed\x6a\x06\xe6\xbc\x9c\x54\x62\xe8\xe5\x38\x93\x0a\x69\x2b\x0a\x17\xe5\xc5\x1a\x68\x46\xbb\x3f\x40\x99\x0a\x2a\x58\x1b\xf9\x7c\x83\xab\xa1\xf5\x94\x51\xdf\xd5\x3c\x94\x35\xc0\x25\x62\x99\xc9\x5f\xd0\x90\x4f\xfd\xbc\x9c\xc5\xfa\x15\x47\x35\x59\x86\xa5\x69\x40\x74\xcc\xe8\x22\xd4\x0d\x9e\x08\x06\x6f\x8a\x50\x30\x30\xcd\xe9\x1c\x06\x1c\xe4\x19\x83\x87\xac\x64\x18\x82\xa1\x03\x5d\xe4\x75\x16\x60\x53\x97\x04\x00\x81\xa8\x6f\x9c\xec\x33\x9c\x9d\x18\xac\x04\x75\x46\x90\x00\x60\x78\x8c\x25\x28\x21\x1e\xea\x82\xc0\x21\x20\xb0\x98\x00\x8e\x70\x06\x43\x0c\x93\x87\xbc\x84\x68\x51\x02\x90\x40\x5e\x47\xa2\x64\x60\x88\x4d\xc2\xbe\x24\xa3\x06\xe0\x79\x89\x87\x92\x08\xa4\x9d\xc7\x66\x99\xe6\x70\x0c\x1a\x31\xef\xd3\x7a\x05\xf6\x39\x6f\xa5\xcc\xbb\xcb\x22\xdb\x9b\xfa\x93\xd4\xbc\x20\x2b\x51\x16\x54\x99\x3a\xcc\x40\x61\x28\x15\x17\x9a\x30\x13\xab\xeb\xa5\xd6\xcd\x4d\xd8\x94\x69\x0c\xc3\x51\xb8\xce\xf6\x35\xa6\xad\xc7\xb2\x57\x69\xd4\xed\xb6\x1f\x3b\xd9\xd5\xd6\x19\xb4\x66\xaf\x3e\x5b\x6c\xfe\x2a\xef\xff\xd9\xa6\xb7\xf0\xf0\xff\x0b\xb9\xa9\xee\x7c\x27\xbb\x9a\xa4\x49\xbf\x28\x0f\xf2\xca\xc8\x41\x52\x7b\x39\x2c\x8d\x27\xcb\x62\x59\x15\xc0\xb4\x6c\x8f\xdd\x66\x41\x1a\xf5\xa6\x40\x9d\xf3\x41\xa4\x68\xa1\x3b\x69\x55\xf0\x4a\x73\x1d\xc2\x0c\xab\x85\xf1\x7a\xd4\x99\xd0\x31\x0b\x8c\xa1\x5f\x9e\x68\x3c\x88\x7d\x0f\x9b\x4d\x6e\x6b\xff\x82\x47\xe7\xc3\x4b\x5e\xf1\xea\xd1\x39\xba\xf2\x0b\x7d\xef\xd7\x7c\xee\xf4\x68\xde\xe0\x59\x49\xe0\x04\x20\x42\x89\x40\x4e\x22\x9b\x31\x49\x82\x06\x2d\x88\x04\x41\xdd\xe4\x24\x4c\x03\x5a\xe4\x90\xce\xd1\x50\x37\x00\x36\x00\x64\x24\x1a\x48\x9c\x41\x78\xcc\x6e\x46\xdb\x4f\x89\x0a\x93\x31\x20\x26\x2c\x44\x86\xc1\x98\x2c\xc7\x8a\x82\x49\x00\x22\x3a\x0b\x79\x43\x30\x4d\xce\x90\x38\x01\x9b\xb4\x04\x4d\x96\xc1\x02\xa1\x05\x41\x37\x0c\x42\x24\x91\x60\x1d\xe9\xcc\x66\x62\xc2\x1e\x3c\x9a\x79\xcd\xc1\xd9\x74\x7d\x2c\x67\x04\xb1\xca\x11\x49\x73\x81\x39\x62\x58\xb9\x4d\x2f\xba\x46\x1b\x68\x8a\x01\xa2\x50\x1f\xe9\x75\x9c\xe2\x07\x5a\xb1\xb6\x8c\xab\x33\x65\x20\x74\xd5\xfc\x60\x3c\x06\x43\x71\xd0\x41\x2b\x81\x49\xb5\x23\x7d\x32\x04\x9d\x69\xac\x5a\xa8\x3c\xb4\xe7\x2b\x8d\xe3\x12\x86\x37\x1e\x1d\x1c\x31\x9e\x1d\xc2\x4a\x96\xcb\x97\xbc\x01\x5d\xd4\x5a\x8d\xfc\x02\xdb\xbe\x33\x80\x53\xa0\x78\x24\xd5\xe1\x23\x27\x53\x0d\x9c\xac\xb1\x40\x74\x6e\x05\x44\x8e\x0d\x8c\xda\x5a\xe5\xf4\x54\x31\x0e\x59\xad\x9f\xa6\x99\xae\xde\xcc\x6a\xe2\x6a\x19\x67\xdc\xb9\x01\xa7\xe3\x30\x0e\xca\x49\x0e\xae\x5f\xf0\xd8\x12\x7d\xa9\xd7\xff\x07\x78\xac\xc0\x20\x22\xf1\x8c\x28\x02\x9e\x25\x98\xe5\x08\x94\x38\xa2\xd3\x88\x25\x98\xd1\x25\x28\x8a\x06\x20\x22\x83\x38\x91\x10\x5a\x60\x24\x93\x03\xac\xc4\x02\x06\xb1\x50\x67\x79\x89\x49\x3c\xf6\x33\xbc\x9e\x98\x1c\x12\x01\x2d\x60\xd3\x84\x34\xab\x8b\xa6\x80\x05\x22\xb2\x88\xa3\x0d\x91\x43\x06\xc1\x2c\xe2\x59\xc6\x80\x02\x66\x39\x53\x12\x36\xd6\x4d\xc4\x8a\x06\x27\x01\x89\x15\xf9\x8d\x0e\xee\xc8\x63\xc1\xab\xc7\x02\xd0\x71\x26\x83\x01\x21\x46\x45\x18\x5a\x15\x53\x45\xca\x14\x4a\x95\x45\x26\x9b\x9f\xd1\x19\x48\x63\x5a\xab\xaa\xc5\x2e\xeb\x2c\xe8\xb1\xac\x8c\x85\xce\x92\x16\x79\x8d\x4d\x0f\x85\x0a\x74\x07\xa5\x15\x6e\x8b\x16\x8c\x79\xc0\xe5\xca\xa0\x92\x66\x83\xa9\x98\x6b\x94\x0e\x39\x38\x38\x72\xa2\x1c\x9c\x57\x98\xa2\x36\xf0\x24\x5f\x49\x9b\x3e\xaf\x06\x6e\xa9\xea\x75\x7a\xe5\x59\x06\x05\x73\x98\x71\xb3\x51\xa8\x2b\x91\x6e\x0a\x9d\x79\xdb\xcf\x17\xd7\x69\x9c\x8b\x9b\x7a\x51\xc8\x4d\x65\x26\x1f\x90\x85\xd0\x5d\x01\x66\x41\xa7\xfa\x64\xad\x09\x4a\xa3\xdd\x9a\x70\xbd\x44\xb3\x7a\xc1\x63\x2b\x83\x4b\xbd\xfe\x3f\xc0\x63\x91\x04\x05\x49\x62\x59\x43\x30\x09\x2f\xd1\xc9\x78\x2f\xb2\x86\x09\x00\x06\x90\x27\x2c\x40\x10\x43\x0c\x24\x83\xa3\x19\x4e\x14\x18\x9d\xc1\x10\xb3\x92\xc8\xf1\xa6\xc0\x20\x06\x25\xb3\x86\x4f\xf0\x7a\x83\xe7\x69\x8c\x69\x82\x31\x03\x39\x46\x37\x20\x47\x13\x91\x18\x92\xc4\x03\x46\x67\x45\x96\x66\x80\xc0\x23\xcc\x63\x80\x31\xc7\xd0\x22\x16\x74\x8e\xb0\x2c\xe0\x19\x86\xa3\x11\x67\xbe\x24\x4b\x90\xbd\xc7\x32\xfb\x59\x43\x35\x76\xda\x76\xa6\x9b\x5a\xd0\x3c\xdf\x09\xb2\x63\x98\x8d\x35\xbb\x51\xf2\xab\x93\x71\x9c\xb1\x3d\x3a\xcf\xd7\xdb\x3e\x1b\x82\xc9\x44\xd2\xe3\xd5\x74\xd2\x26\x72\x8e\x4c\xd3\xd3\x4e\xdf\x99\x66\xa4\xbc\x90\x9f\xc5\x13\x7e\xe9\x4e\xe3\x79\x61\x55\x58\xcc\x8c\x61\x6d\x20\x6d\x07\xe4\xc4\x63\xad\x03\xe3\x71\x3d\x53\xc7\x4b\x0b\x58\x9d\x89\xd3\x6b\x88\x31\xe3\x0e\xd2\x4a\x53\x75\xab\xd9\x7a\xd8\x6f\xb2\x8a\x1c\x14\x17\x42\xad\xbb\xea\x38\x5e\xaf\x5b\x5f\x28\xeb\xac\x91\x9d\x6b\xaa\x32\x8e\xdc\x5e\x3e\x50\x72\xf2\x68\x88\x96\xb8\x54\x57\xad\x71\x31\x52\xea\xcb\xae\xad\x56\x3b\xc9\xac\xa0\x7b\xc1\x63\xab\xe2\xa5\x5e\xff\xff\xdd\x63\xaf\xac\xf2\x2e\x3c\x15\xf0\xc4\x9a\xf1\xed\x91\xf2\x33\xca\xae\x9d\x79\x3e\xa7\xf3\xfc\xd8\xf2\x09\x6d\x57\x0e\x1d\x9f\xd0\x78\xe5\x78\xf0\xa3\x2b\xee\xa3\x23\xc2\xa3\xcd\x1f\x61\xc8\x34\x7b\x7c\xb3\xd9\x2e\xf4\xb5\x01\x33\xac\xb2\xea\xb0\x99\xe9\xd6\xf3\x05\x08\x2b\x5d\x2e\xcf\x34\x38\x86\x69\x15\x19\xb6\xc3\x96\x6a\xb5\x61\x26\xc7\xe5\xb4\x66\xae\xb1\x5d\x35\x6c\xd7\xb6\x39\xc6\x68\x06\x00\xf2\x85\xc8\x2c\x86\x33\x36\x57\x5b\xd0\x03\x75\x9e\x9e\x4e\x17\xae\x2b\x82\x59\x25\xd2\xbd\x50\x00\x7c\xb6\x69\xc1\x83\xf7\x25\x93\xfc\x6c\xf2\xe7\x26\xcc\xf2\x63\x5a\xcf\x98\xb3\x60\x11\x34\x0b\x86\xaa\x74\x4c\x5e\x02\xee\xaa\xb8\xae\x57\x86\xe6\xb0\x12\x73\x59\x3c\xa1\x57\x95\xaa\x2d\x74\x6b\xd5\xed\xba\x12\x4b\xdd\xd5\x76\xca\x65\xed\xff\xc9\x24\x4a\x17\xfb\xff\xcf\xc9\xb2\x94\x3d\x8a\xe2\x4c\x35\x6f\xaf\x83\xa9\x30\x18\x0d\xca\x61\x08\xd1\xd2\x2b\x82\x79\x21\x4e\xf7\x0c\x1f\x08\x8c\xcd\x94\x61\xbf\xcd\xaa\x08\x55\x8d\x49\x37\x51\x27\xd9\xa1\x0d\x32\x3d\x20\x04\xa8\x2d\x93\x5e\xbf\xb8\x24\xc6\xd4\x98\x17\xfa\x43\x05\xd1\xcd\x7e\x5a\x31\x59\x3c\x10\x5d\xdc\x24\x2b\x8d\x96\xa3\x1c\x58\xf8\x93\xa1\x0e\x30\x97\x8e\xd8\x94\xc7\x73\x8d\x4e\xcd\x65\xd6\x95\x29\x0d\x22\x2b\x1a\x09\x82\x8e\x53\xa6\xac\xfe\xf8\x71\x3e\x5a\x7c\x72\xd7\xb0\x4f\x75\x4d\xfd\xb4\x6b\x72\xb9\x22\x37\xf3\xf9\xf1\xb4\x25\xb7\x6c\xa5\xd9\xf3\x96\xa3\x46\x50\x0b\x74\xbe\x0a\xe2\x96\xd7\x53\x5c\x3e\x9b\xf1\x47\x6e\x35\x5d\x31\xc7\xd6\xbe\x6b\xce\x17\x51\x1f\xa6\x3e\x65\xa6\xf5\xf6\x8c\x0d\x5a\xb5\x16\xd6\x1b\xa5\xe6\xa4\x3d\xeb\x8d\x67\x6a\x4f\x6a\x10\x81\x1d\xb5\x0a\x53\xba\xcf\x85\x83\x62\x4f\xe8\x96\x21\x1e\xc7\x7e\x2a\x1b\x46\xb6\x35\x19\x0d\x06\x2d\x63\xd4\xaa\x0a\xa5\x4a\xa3\x6d\xe9\x2c\xd2\x32\x36\xb4\xc6\x9a\x45\x1c\xbf\x9b\x93\x7f\x39\xf5\xdc\x53\xd4\xab\x67\xd4\x67\xeb\xb2\xd0\x9c\x36\x4b\x9d\xb5\x63\x9a\x92\xe7\x7b\xf1\xd0\x32\x2b\xcb\xda\x2a\x17\x43\x4f\xb3\xea\xe3\xae\x97\x26\xb1\xb7\xa8\xd3\xe4\x10\x15\xd1\xb3\xd4\x33\x9e\x67\xf7\xea\x9a\x32\xb4\xe7\xfc\x44\xb2\x9d\x91\x27\xa6\x17\x76\x4b\x31\xd2\x51\x3d\x2b\x32\xb8\x55\x2f\x98\x4d\x69\xe6\x71\x38\x64\x38\x2d\x37\x99\x76\x74\xaf\xd7\x37\xd4\x7c\xce\x65\xfb\xee\x5a\x5f\xac\xfc\xd8\x81\xf9\x52\xb0\xf4\xda\xc3\x62\x14\xaf\x1d\x77\x96\xb3\x7e\x39\xf5\xfc\x53\xd4\x77\xcf\xbd\x1e\xc4\xb0\xea\xb6\x2a\x9c\xdc\x10\xbc\x94\xd3\x40\xfd\x49\x89\xee\xf8\xed\x99\xd0\xf1\x8a\xc8\x15\x44\xad\xac\x65\xa7\x60\x12\x8d\x99\xc5\x9e\xfa\xf8\x59\xea\xe7\xb9\x75\x29\xe7\x75\xf4\x81\x0e\x6c\x7a\x36\x12\xc2\x88\xab\x49\x66\xbb\x39\x77\x15\xc3\x9d\x38\xeb\xaa\x53\x73\xfa\x15\x6f\x3a\x1c\x72\x0b\x37\x95\xab\xa5\x34\x37\x74\x5a\x4a\x10\xc9\xbd\x36\x52\x33\x59\x54\xcb\xcc\x24\x49\x4e\x61\xa7\x92\xab\xe5\xd9\x6e\xda\x1d\xb4\xb3\xbb\x84\x73\x7d\x74\xb9\xf4\xe4\xc5\x03\xa3\xcb\xeb\xd3\x17\xfb\xce\x64\x44\x4e\xd4\x59\x44\x24\x22\x89\x22\x2f\x32\x0c\xd6\x59\x5d\xd0\x81\x84\x05\x43\x30\x81\x40\x4c\x83\x87\x82\x68\x40\x64\x20\xc6\x10\x45\x62\x08\x9c\x0e\x39\x80\x04\x11\x41\x81\xe3\x8f\x3b\x35\xf1\xef\x7c\xf2\x67\x73\x48\xa7\xe6\xda\x7c\xd2\x07\x22\x5a\x05\xb8\x3e\xcf\xb5\x46\xd9\x74\xca\xf5\xb2\x48\x5f\xf7\x7d\x17\xc4\x64\x1d\x68\x93\x72\x2a\x17\xbe\x37\xd3\xb9\xf2\xa4\xc5\x87\x1b\x7f\x78\xda\x62\xdf\x78\x07\x85\x51\xf2\x1c\xa7\xb1\x7b\x9e\xea\xec\xb3\x99\x86\x3f\xbd\x1c\x38\x8f\xa8\x0b\x38\x5e\x5f\xb3\xde\xbe\xc3\x71\x8e\x62\x8b\x03\xd0\xf7\x68\xf2\x48\xb4\xf0\x83\xc9\x14\x85\xe1\x74\x14\xa0\x90\x5c\xd0\xd4\x21\x61\x44\xb5\x73\x05\xaa\xb1\x15\xa6\xbe\x53\x6d\x32\x8d\x88\xab\x93\x80\x62\x68\xc0\xdf\x63\xc8\xf4\x03\x4c\x42\x3c\xf5\x3d\x8f\x2c\x23\x07\xc5\x1e\x1e\x9d\x1b\x4a\xde\x91\xb8\x47\xd9\x96\xfd\xdd\x19\x64\x78\xb9\xfd\xff\x37\x39\xb2\xfc\x2d\xb2\x5d\xf2\xdb\x9f\x14\xbd\x3d\xc1\xfc\x6d\xf7\xd2\xf9\x6f\x7f\x52\xdb\xeb\xc9\x97\x23\x14\xfe\xf6\xe7\xf6\x0d\x8d\xe4\xcb\xff\xec\x84\x4d\x42\xee\x13\x74\xd1\x32\x5a\x86\xf6\xfa\x4e\xf1\x80\x84\x24\x98\xbf\x27\xfc\xe5\x3f\xf7\x50\xb1\xcb\xb6\x28\xc0\x23\x7b\xbe\xbb\x78\x85\x8a\x43\xdb\xc1\x0e\x48\x02\x23\xf8\xed\x4f\xea\xb7\x39\x00\xff\x02\xff\xa2\x7f\xdb\x5d\xc0\x71\x10\x10\x2f\xaa\x25\x3c\xff\xf6\x27\xc5\x9f\x7e\x9f\x49\x9e\xba\xde\xe0\xfd\xdf\xfb\x06\x1c\x9a\xb2\x97\xdc\x28\xa6\x69\xd1\x94\x10\x34\x0c\x5a\x14\x39\x9a\x17\x38\x62\x12\x1e\xd1\x04\x98\x9b\x15\x2a\xc6\x2c\xcf\x4a\x18\x40\x8e\xd7\x4d\xc6\x64\x79\x03\xeb\x2c\x8f\x4d\x68\x08\x66\xb2\x5f\x23\xec\x10\xed\xf5\x6e\xbc\xe7\x84\xb8\xfd\x95\xa4\xed\x9b\xae\x3e\xb9\xf4\x9f\xb3\xfb\x43\x0f\x4d\x37\xb8\x18\x24\xb1\x3a\x23\x88\x58\x14\x0d\x44\x00\xc7\x72\x22\x24\x80\x13\x08\x83\x69\x13\xf3\x0c\xcb\x21\x5e\x12\x0c\x91\xc7\x90\xa7\x75\x0e\x12\x04\x10\x86\xba\x60\xd2\x3a\x63\x62\x91\xf9\xed\xcb\x05\x0b\x57\x38\x20\x26\x0b\x10\x43\x23\x56\x12\x09\x81\x2c\x26\x0c\xc3\x40\x9e\x20\x11\x40\x08\x45\x41\x47\x98\xe7\x04\x5e\x30\x59\xd6\xc0\x98\x33\x59\x93\x60\x81\x36\x78\xde\x30\x4c\x20\xb0\x86\xf4\x71\x0e\xc0\xb7\xb7\xd7\xfc\x38\x9a\xc6\xd1\xe7\xb6\xfd\x16\xc3\xcf\x1e\xd9\x7d\x84\xe1\xa7\x6d\xfd\x22\x2f\xfb\x87\x83\x7f\x38\xf8\x87\x83\x7f\x38\xf8\x87\x83\x7f\x38\xf8\x87\x83\x7f\x38\xf8\x85\x1c\x24\x7f\xfd\x9f\xfb\x16\x0d\x9b\x75\x6c\x88\xa7\xc9\xbb\x8d\x97\x3e\x2f\xaf\x2b\xf4\xed\xd9\x8c\xe4\x75\x04\x89\xa4\x5a\xba\xb6\x0c\xaa\xd1\x62\x25\x36\x8a\xf9\x5a\x5a\x40\xb8\x32\x9d\x37\x90\xad\xf7\x79\xa8\x44\x44\x1d\x73\xca\x62\xbf\x4d\x52\x48\xfe\x5d\x8d\xca\xa1\x20\x10\xb7\xdc\xcf\xd6\x6a\x0a\x13\x0e\x97\x91\xbe\xd4\xe7\x40\x43\x0d\x12\xf9\x91\xad\x80\x49\x44\x17\x5d\xdb\x1b\x16\xf6\x3b\x02\x95\xf1\x93\xdb\x34\x8f\xec\x28\x64\x64\x3b\xd3\x9c\x2f\x95\x52\xd9\xd6\x86\xed\xb1\x10\xae\x9d\xbe\x92\xcb\x0c\xcb\x11\xcf\xe5\x0b\x62\xb7\x93\x0f\xc6\x83\x75\x5f\xc3\xd3\x54\xda\xe9\xc5\x0e\x2c\x2f\xdd\x00\x59\x23\x55\xab\x2c\xba\x81\x33\x36\xd7\x65\x87\x76\xbb\xfc\xb2\x10\x88\x29\x7e\x44\x84\xe9\x32\xa3\x8a\xb9\xc5\x2b\x9e\xec\xe0\xc9\xb3\xb1\xcc\x23\xdb\x60\x6a\xd9\xea\x40\xb1\x33\x5a\x95\x1d\xa6\xeb\xa7\x82\x3a\xdf\x1b\x5b\x8b\x7e\xbb\x46\x48\x26\x63\x16\xf2\xcb\x2a\xc7\xd4\x81\xc3\x56\xcd\x39\xdf\xd3\xa7\x64\x55\x1f\xce\x18\xbf\xdc\x2d\xac\x70\xa1\xca\x0f\x58\x71\x55\x31\x2a\x8e\x82\x5b\x28\xdd\x8c\x07\x5a\x3c\xc3\x6a\xb7\x29\x8b\x09\x9c\xa0\xd8\xee\x34\x85\x55\xa4\xb6\xdc\xa1\x99\xaf\x04\xf2\x58\x88\x9a\xa4\x65\xa6\x06\xc5\x7a\x30\x5c\x8e\x7b\xc8\x50\x96\x8d\xfc\x0c\x4b\x46\x40\xc6\xa0\x8a\x94\x72\xb1\x5f\xe2\xf2\xcd\xd0\xaa\xe6\xec\x3c\x3b\x53\x2c\x12\xaf\x94\x3a\x19\xc3\x95\x11\xac\x9c\x61\xdd\xe8\x3c\xed\x6f\xd6\xbe\xff\x17\xcf\x9e\x45\x26\x9f\xf6\xc7\xfc\x57\xad\x2d\xc4\xe5\x82\xa7\x19\xa6\x28\x0d\xa2\xaa\x4f\x82\x1a\xc9\xa6\x35\x7a\x0c\xf9\xb1\x37\x9c\x56\xf0\x6a\xda\xe6\x7b\xf6\x50\xe8\xf7\x49\xbd\x32\xb7\x56\x69\x87\x0f\x2a\xdd\xce\x0c\xaa\x85\xae\x3b\x91\x55\xd7\x5e\xa0\xb9\xa9\x36\xbd\x4a\x5b\x5d\x2d\x1b\xa0\xc9\xbb\x79\x2b\x39\xdd\xcf\x0c\x66\x42\xaf\x5a\x2e\x74\x60\xae\xe3\x39\x4a\x58\x6d\x86\x55\x9e\x94\x69\x62\xcd\xda\x0a\x57\xac\x9a\x6a\x67\xb2\xac\x8e\xc9\xba\xdf\x56\x0f\xfe\x52\x15\xc6\xc4\x66\xc7\xae\x5f\x16\x3b\x45\x27\x97\x26\x16\x66\x61\x53\x8b\x4a\xd5\xea\xba\xdf\x13\x17\x3d\x7b\x98\x41\xd9\x98\xaf\xf1\xc9\x09\xc1\x30\xb9\xe9\xe8\x1c\x47\x3e\xf3\xbf\xa3\xf8\x52\x98\x6c\x5a\x56\x38\x7e\x90\xc9\xb1\x51\xa9\x57\x50\x40\x8b\x95\xe9\x3a\x99\x34\xc5\x4a\x4b\xf0\x1a\x40\x96\x48\xdf\x36\x56\xe5\x28\xd9\x86\xcd\xf4\x7a\x8d\xed\x8d\x72\x16\xc4\x19\xa3\xe4\x77\x62\xab\x3e\x57\xa3\x1c\xcc\x8c\xca\x35\xb6\x41\x24\xa3\xd7\x34\x8b\xe5\x54\xc5\xe6\x2b\xf3\xae\x92\x1a\xca\x11\xdc\xf6\x6f\x31\x5b\xed\x1f\x7a\x5a\x2e\xee\xf1\xaa\x8a\x11\x97\x46\x62\x2c\x78\x1c\xca\x77\x0a\xa5\xb4\x2c\x64\xec\x82\x63\xe6\x9b\xb3\x5c\xb8\xc6\xc3\x1e\xf6\xb3\xe5\xd6\x5c\x1e\xb0\xec\xb8\x92\x02\x48\x5d\x0e\xc4\xf2\xaa\xab\x4e\x0b\xb4\xaf\xe9\xb8\xda\x23\xd6\xba\x37\x6c\x28\x22\x50\xba\xf9\x46\x5a\x2a\xf3\x85\x74\xce\x2a\x1f\xda\xfb\x6b\x76\x28\xaf\xbc\x75\xf5\xd1\x1d\xca\xa3\x37\xaf\x3e\xe3\xc9\x6f\xf0\x8d\x7a\xe6\xa9\xec\x97\x6e\x3b\xf7\xf2\x8d\x92\x18\x86\x65\x21\x43\xb3\x82\xc8\x73\x10\xf2\x22\x0d\xbf\x51\x80\x06\x0c\xbb\x19\xaf\x12\x2b\xfc\x8d\xa7\xb0\x2f\xb6\xe9\xf1\xe7\xb0\x7f\x61\x9b\x24\x00\x00\xe0\xaf\xb5\xe9\x5a\xcf\x5f\x7b\x19\xe9\xc3\x7d\x7f\xfc\x42\xd2\x61\x5f\x58\x67\x25\x91\xe8\x1c\x22\xa2\x04\x79\x81\x65\x78\x81\x63\x31\x32\x18\x80\x25\x8e\x00\x56\x37\x31\x0d\x39\x9d\x65\x58\x42\x44\x96\x00\x0e\xe8\x26\xa4\x01\xe2\x0d\x89\xe6\x4c\xa0\xef\x1e\x1c\x3d\x19\xfd\xeb\x67\xd1\x9f\xb1\xd3\x19\xba\x46\x57\x8a\xab\x68\xb4\x68\x00\x67\x40\xa3\xd5\xd4\x07\x52\xa3\xb4\x9c\xd7\xb2\x2b\x85\x8f\x32\x79\x9c\xed\xcd\x17\x05\x69\xc1\x5a\x51\xa0\x78\x43\xf9\x8e\xcf\xd5\x07\x90\xf3\x67\xd9\xe8\xe3\xf6\x07\xe9\x14\x3e\xcf\x5e\xf7\xd9\x7f\x7b\xbe\x75\x99\x77\x53\x82\x18\x99\x26\xd2\x45\x0c\x04\x9a\x61\x11\x0b\x45\x91\x03\x02\x8f\x75\x5a\x67\x4d\x13\x20\xc4\x18\xc8\xe4\x68\x9a\x36\x89\xc9\x49\x06\x03\x88\x89\x45\x0e\x1a\x86\x6e\xea\x04\x6d\x79\x67\xde\xf2\xfe\x37\xb5\xfb\xb3\x78\x17\xb9\xc3\xfd\xe5\x5f\xc0\x3b\x64\x78\xc8\x0b\x3a\x30\x75\xc3\x14\x59\x9d\x16\x01\x03\x4d\x56\xe4\x89\x49\x0c\x93\x96\x68\x09\x63\x71\xfb\x44\x3f\x81\xc0\x04\x98\x16\x25\x68\x00\x9e\x63\x20\xd6\x79\x64\x18\x5b\xde\xd9\x4f\xe7\xfd\xd1\x76\x7f\x16\xef\xb0\x7b\xb8\xbf\xfe\x0b\x78\xa7\x69\xa4\x4b\xd8\xc4\x84\xd1\x39\xcc\x01\x0e\x18\xa2\xae\x0b\x50\x10\x0d\x83\x96\x38\xdd\xd0\x75\x80\x21\x47\x0b\x10\xd0\x86\xae\xb3\x3a\xa2\x89\x29\x89\x22\xa4\x4d\x81\x45\x2c\xc7\xed\x1e\xe7\xbd\xc9\xbb\x0c\x07\x35\x51\x86\x63\xc7\xca\x37\x09\x6d\x74\xbb\xb0\x57\xc2\x39\x75\x29\xa8\xe9\x85\x53\x9a\x61\xb6\x9b\x03\x3c\xaa\xb0\x65\x1b\x24\x6d\xa9\x74\xb3\xa9\x5d\xa3\xce\x67\x71\xf7\xf3\x9e\x7b\xce\xbe\x82\x1f\xb3\x7f\x2f\xef\xba\xc1\x89\x82\xa1\x1b\x06\xcd\x18\x9c\x40\x8b\x00\x0a\x10\x60\x0e\xf1\x08\x12\xc9\x10\x88\x28\xf0\x18\x31\x12\xd6\x39\x40\x04\xc6\x80\x08\x99\x90\x46\x8c\x49\x08\xaf\xb3\x82\x41\xb6\xbc\xdf\xce\x33\xd9\xd8\x67\xfd\x88\xe3\x67\xd9\x66\x7e\x39\x55\xd3\xac\x5f\x6a\xa4\xd6\x00\xb6\x56\x76\x08\x1c\xb3\x5e\x18\xb8\x6a\xdf\x0a\xe2\x76\xaa\x23\xff\x0a\xde\x1f\xb1\xff\xab\x79\xe7\x19\x8e\xc5\x82\xc4\x72\x26\x6d\xea\x3c\x0d\x36\x73\x00\x51\x90\x10\x62\x75\xd3\xe4\x59\xc3\xc0\xac\x28\x61\x53\x04\xa2\x00\xb0\x89\x88\x00\x68\x8c\x19\x86\x47\x88\x00\x11\x63\xbc\x7b\x18\xf8\x36\xef\x1f\x9c\x15\x7f\x0a\xef\xf9\xe7\xec\xff\x6a\xde\x0d\x51\x80\x22\xcf\x08\xb4\x68\x48\x08\x99\x0c\x20\xc0\x84\x3a\xc2\xba\x24\x12\xc8\x9b\x06\x8f\x75\x56\xd2\x09\xa0\x0d\x48\x63\x09\xeb\x18\x8b\x34\x2b\x01\x03\xb2\x90\xd9\x74\xd0\xee\x91\xd6\xb7\xbc\x7f\xa2\xbf\x25\x14\x66\x3e\xc8\x7b\xe1\x39\xfb\x75\xee\x31\xfb\x37\x1f\x1a\xb9\xfc\x0a\xf8\xc7\x27\xa6\xbf\x7a\x56\x5a\xac\x89\x25\x75\xae\x4e\xf4\x2a\x53\x92\xd9\x7e\x6f\xdc\x0a\xaa\xee\x58\xa3\x69\xb3\x28\x86\xb5\x32\x74\xe9\x7c\x6b\x51\xe9\xa7\x65\x8d\x95\xf7\x6b\x5a\xf9\x12\x4b\x6f\x58\x8b\x74\x4b\x6b\x09\x79\xe8\xe7\x6a\x74\x4d\x4d\x2d\x06\xed\xac\xb4\xd6\xe6\x5a\xaf\xc3\x2e\xed\xa6\x3d\x88\xdb\x3a\xc8\xcd\x5d\xb5\x46\x92\x47\x87\xb3\x3d\x79\x7e\xfc\x2e\x5c\x66\x3b\x0a\x27\x9d\x32\x18\xab\xb8\xd9\x61\x8a\xfc\x68\xe6\x65\x5c\xab\x58\x24\x96\x54\x11\x1d\x0e\x83\xbc\xd7\x75\x96\x13\x27\xef\x94\xa4\x70\x36\x0c\x68\x09\x82\x82\xa0\xd4\xfa\x26\x49\xbb\xdc\x64\x5a\x88\xca\xa9\xb0\x4c\xdb\x60\x56\xb3\x23\x5e\xa6\x2b\xab\xbe\xa7\x8f\x06\xb5\x3e\xef\x6f\xd6\x22\x2f\xcc\xda\x55\xa2\xaa\x50\x31\xfa\x75\x67\x98\x5b\x45\x65\xec\x28\x79\x98\x96\x8d\x5a\x7d\x0c\xfd\xe6\x48\xd5\xa5\x45\xd1\x61\xd4\xce\xf2\xf0\xbc\xde\x0d\x0e\x0e\x9e\x71\xf2\x54\xce\x91\x6c\x12\xed\x9f\x31\x2b\x7a\x74\x56\x22\x7f\xc2\xac\xa8\xd0\xe9\x67\x82\x27\xec\xcb\xf2\xdf\x97\xad\x2f\x65\xcb\x5f\xbd\x04\x79\x3c\xc8\x6e\x6c\x1c\x6d\x3f\xc1\xac\x21\xd4\x88\x82\xac\xf1\xb2\x8e\xba\x4d\x49\xc8\xac\xcd\x50\x22\x34\xf6\x83\xc6\x50\x5b\x67\xfa\x95\x49\xc1\xaf\xc2\xc9\x7c\x92\x30\x77\x23\xc8\x32\x6e\x75\xda\xb6\xe6\xc1\xa2\xaa\x30\xb4\x96\x55\xcc\x81\xa9\x85\xc5\x7c\xbe\x1b\x2d\x06\x08\xe5\xcd\x59\x3b\x16\x56\x6e\xc5\x75\x72\x2e\x4a\x95\x35\xa1\x0c\xcb\x96\xa5\x77\x87\x75\x1f\xab\xc6\x50\xe2\xca\x75\xd9\xac\x1a\xaa\xdc\x98\x69\x7a\x59\x81\xab\x70\x41\x48\x3d\xbb\x09\x84\x94\xb6\x9a\xa7\x82\x71\x66\x90\x55\xc6\xa4\xac\xf6\xb5\x5a\x76\x9d\x5e\xce\x6c\x66\xae\xca\xb9\x94\x54\xa1\x47\x50\x1c\x95\x58\x3d\x95\xf2\xf7\xc0\xfe\xfe\x20\x7b\xd6\xc9\x9f\x0c\xb2\x19\x4c\x77\x72\xfa\x67\x06\xd9\x5f\x38\x15\xbd\x2b\xc8\x3e\x79\xbd\xf9\x78\x90\xe5\xce\xd0\xbf\x71\xb8\x0f\xee\xce\xde\x0a\xb2\x31\x67\x65\xd4\x74\x46\xd6\xad\x99\x09\x67\x8a\x1f\xa1\xc8\x1a\x76\x4b\xe3\x9c\x13\x2a\x51\xae\x61\x4c\x21\x72\x86\x2d\x3e\x5d\x98\x48\x66\x71\x9c\x72\x96\xf9\x95\x25\x0f\xfb\xeb\x01\x4c\xd7\x06\x60\xc8\xb6\x0b\x02\xa6\x67\x21\x80\x4c\x6d\x24\x4f\x26\xf3\x9e\x38\xa5\xeb\x9b\x40\xc0\x8e\xd1\x0f\xcd\xb9\x69\xc1\x6c\xa6\x92\x56\x0a\x30\xc5\x2e\x26\x95\x75\xb9\x5c\xd3\xeb\xfc\x52\xc4\xd9\x8a\xd9\xea\x65\xcd\x5a\x3f\x3a\xbc\x0c\xf9\xb7\x07\xd9\xd3\x4e\xfe\x6c\x90\xad\x02\xb5\x50\xfb\xc4\x20\xfb\x2b\xd7\xd9\x77\x05\xd9\x27\x6f\x2e\xe4\x22\x6b\xbe\xc8\xc5\x4a\x5f\x56\x25\xd8\x02\xad\x4e\xd4\x35\x16\x8d\x5c\x69\x9a\x4b\x67\xbb\x64\xba\x36\xd4\xa6\xe6\xf8\x1e\xb6\x6b\xc9\xbb\x8d\x47\x47\x20\x37\xa6\x8b\xc9\xbb\x8e\x8f\x1d\x69\xb0\xe9\xfd\xe7\xa0\x2f\xbf\xb7\xaf\xd6\x7a\x7a\xb9\x9c\x02\x35\x62\xaf\x97\x96\x87\x73\x65\x4e\xa8\x96\x56\x99\x88\xe6\x53\x25\x89\xf1\x40\xaa\xc5\x32\x62\x45\x5a\x37\x1c\xc6\xb4\x2a\x7d\xc6\x33\x3d\xb6\x50\xf6\x6b\xbd\x90\x99\xf5\x40\x2a\xdb\x9d\x06\x80\x01\x88\xc9\x40\xb9\x2e\x94\xaa\x01\xe7\x65\x6a\x72\x79\x1b\x14\xd5\x18\xa7\x95\x2a\xbd\xcc\xa8\x86\x0d\x87\xcc\xd8\xc8\x76\xe7\x7a\x88\x0d\x79\xb8\xcc\xe9\x21\xf4\x95\xd4\x60\xb4\x90\xc6\x3e\x7d\xe8\xbd\xcb\x01\x37\x38\xed\xd4\x93\x80\x4b\xb8\xdb\x26\xa8\xa3\x43\x9b\x07\x12\xd2\xd8\x3b\xf4\xc5\x95\xcf\x95\x4d\xcd\x93\x80\xff\x14\xfb\x57\x92\xcd\x3d\xf6\xcf\x17\x9c\xcf\x6e\x2c\x3d\xb4\x91\xfb\xd9\xf6\x3f\xb0\xe0\x95\x0f\xf6\xd5\x47\xec\x17\x7a\xdd\x57\x7f\xac\xf5\xb9\x02\x4d\x46\x8a\x20\xaf\xa4\x2c\xdd\x0c\x8b\x79\x6b\x8e\x01\x04\xa0\x2b\x89\x83\x31\xe7\xd6\x26\xae\xa4\x42\x7e\x92\x65\xe7\x47\x5d\x71\x08\xb8\xc5\x39\x7f\x77\x25\xa4\x4f\xde\x75\x7b\xfc\x4c\xf6\x2f\x4c\x48\x47\x67\xac\x19\x69\xe2\x56\xfb\xcc\x8c\x9d\x43\xd5\x5c\x89\xcd\x3a\x99\xe4\x75\xd0\xe9\x94\x79\x7b\x39\x9b\x94\xe9\x8c\x6f\x69\x81\x12\x41\x4b\x01\x02\xa3\xea\x93\x11\x63\xb4\x3b\x5d\x93\xe4\xfc\x39\xa6\x9b\x32\x32\x47\x39\x6d\x19\x8d\x7a\xb2\x13\xd6\xe2\xb1\x93\x71\x57\xe3\x8c\x3c\x48\x92\xc6\xbc\x3b\x8a\xe6\x86\x1c\xb5\x2c\x4b\x1b\x2e\x97\xd5\xbe\x27\x18\xba\x3f\xc4\xfe\x74\x45\x97\xdc\x9a\x36\x9b\xe3\x6a\x2d\xc5\xeb\x8d\xe8\xb0\xa1\xfe\x59\x09\xe9\x81\x65\xc8\xa7\x26\xa4\x27\xed\x7f\x62\x42\xfa\x94\x1d\xb0\xb7\x9f\xbf\x6c\xc7\xf7\xd9\x84\xf4\x51\xfb\x7f\x7b\x42\xfa\xe4\xed\xe8\x0f\x36\xe2\xbe\x84\xb4\x6d\xd4\x07\x9d\xfc\x99\x87\x44\xc4\xde\xca\x3e\x2c\xc6\xe5\xd2\x1e\xaf\x9a\xc7\xa4\xa2\x0f\xe2\xa9\xd7\x77\xba\x24\xe8\x0a\xb4\x65\x4e\x0b\x96\xd8\x98\x30\x88\x95\x05\xb5\xde\x36\x7b\x96\xea\x37\x0a\x43\xa5\x36\x6e\xc0\x35\xe6\x16\x70\x9c\x59\x2e\xec\x42\xb9\x6b\x0b\xd3\x95\x56\x69\x34\xd4\x69\x8d\x51\xd4\x65\xc7\xeb\x71\x56\x28\x39\xb9\xc0\x52\x93\x24\xd3\x9d\x34\x8b\x13\x5a\x6c\x46\x6a\x81\xed\x97\x11\xf2\x61\x1a\x34\x8d\x05\xe7\x35\xad\xc1\x00\xa7\xe2\x81\xba\xce\x56\x50\x30\x1a\xd7\x0f\x91\x7f\x39\x81\x9d\x39\xc1\x95\x04\x76\x4c\xf8\x03\x9b\x95\x4f\x27\xb0\x4f\xb4\xff\x58\x02\x3b\xdf\xc2\xff\xaf\x0b\x60\xf9\xf4\x68\xe5\xaf\xc6\x97\x5b\x6a\xd5\xea\xe8\xd9\x04\xf3\xc9\xe7\x2e\xff\x3c\x85\xf6\xc8\x53\x68\x49\x12\x60\x8a\xa4\x50\xb1\xc6\xc3\xd9\xbc\x4c\x4a\x6c\x1c\xc6\x03\x1e\xa4\x7b\xab\xb5\x9b\xca\x37\x70\xdd\xab\xad\xcb\x32\x5f\xd2\x1a\x2b\xbb\x78\xd8\xbe\x79\x2a\xc1\x1c\x8d\x9a\x8f\xcc\x50\x94\x43\xdf\x1d\x3d\x41\xf7\x26\x38\x2e\x7d\x32\x9f\x6c\x3f\xfb\x90\xfd\xe4\xcf\xf3\x04\xf3\xdf\xb4\x64\x91\x4f\xcf\x10\xff\x72\x7c\x83\xf2\x54\x7f\x0f\x5f\x5d\xfe\xef\x4d\x80\x97\xf8\xfb\x2b\xf1\x0d\x15\x6b\xfe\x7e\x82\xbe\x72\x46\x7b\xe3\x67\xa5\x3f\x7a\x50\x7b\xf6\xd3\xd2\xaf\xb9\xff\xf8\xa4\x75\xfb\xfb\x8d\x87\x5c\x71\x61\xf0\xb8\xae\x65\xbf\xde\xdd\xfe\xea\xe3\x1b\x2d\x57\x4b\xe1\xbd\xad\x10\xba\x2f\x01\xf8\xfa\xf3\xd3\xef\x34\xf3\xb8\x54\x69\x52\xa0\xf4\x48\x63\xf2\x9a\x84\x9c\xcb\x5d\x28\xda\xb5\x37\x48\x35\x5b\xe5\xba\xdc\x1a\x50\xd5\xfc\x80\xfa\xba\xaf\x67\xf0\x6d\x5f\x2c\xef\x6a\xe9\xba\xb3\xa2\xa9\x9f\x05\x3c\xbc\x81\x3a\xbc\x05\xf9\x52\x29\xb1\x43\x9d\xd8\xa7\xe1\xe9\xc8\xbb\x84\xec\xd5\xc0\x29\xa8\x6d\xf5\x92\xdb\x75\xc6\x6e\x16\xc8\x7d\x1a\xee\x89\xf2\x4b\xc0\x6f\x58\xa7\xba\x8d\xb2\xda\xcd\x53\x87\x9f\x34\xff\x50\x4b\x3e\x87\xef\x0f\x36\xe0\x6d\x1f\x1c\x4a\xaf\x5d\x29\x1b\x76\x52\x56\xf9\x69\xbc\x5b\x65\x97\x80\x1e\x99\x39\x45\xb8\x2b\x66\x75\xb9\x88\xd5\x71\x0d\xe9\xa7\xc1\x25\xba\x2e\x61\x3b\x18\x39\x85\x66\x4f\xbf\x25\xa5\xad\x6e\x16\x6d\xba\x50\x3b\xfb\x79\xa4\x47\x2a\x2f\x02\x3e\x37\x79\xa9\xd3\xaf\x54\x76\x3a\xa9\x20\xfe\x19\x48\xc3\x58\xbf\x82\xf1\xd5\xcc\x29\xba\xa4\x28\xd4\x8d\x32\x4f\x6f\xca\xa6\x3f\x0d\xf2\xa0\xf0\x12\xd0\x33\x73\x77\xe5\xb0\xa3\x1f\xca\x39\x2f\x1e\xff\x34\xda\x83\xc2\x4b\x68\xcf\xcc\x9d\xa2\x7d\x2d\x96\x74\xa3\x18\xd1\x9b\x22\xfa\xcf\xe3\xdd\x2b\xbc\x88\xf7\xd4\xdc\x29\xde\x7d\x3d\xa3\x1b\x75\x8a\x8e\xab\xc1\x7c\x0e\xe0\x83\xc2\x4b\x80\xcf\xcc\x5d\x9d\x1a\x6c\xeb\x14\x7d\x3b\x14\x21\xba\x59\x88\xe6\xb4\x6c\xcb\x27\xb5\xe3\x48\xe5\xc5\x96\x9c\x9b\xbc\x94\x25\x42\x32\xfb\xf6\x5a\x79\xe5\x7a\x91\x98\xa3\x12\x29\x9f\x85\xfd\x26\xf0\xa7\x50\x9f\x4d\x51\xcf\x2a\x97\x7c\x0e\xfe\x53\xa5\x97\x1a\x71\xc1\xec\xd5\x96\x1c\x17\x70\xb9\x36\xd5\xdc\x55\x77\xda\xbf\x41\x56\x6e\xe4\xf2\xda\x7d\xa5\x65\x12\xd1\x73\x3d\x94\xd2\x38\xcc\x62\xbb\xed\x72\xa3\x48\xe9\x51\x40\x08\xf5\x5a\x47\xea\x77\xaa\x5f\xca\xb7\xf2\xd4\x71\x5d\x29\xb0\x7f\x11\xf9\xed\x44\x93\x84\xd1\x76\x2c\xdf\xb4\xe2\x61\x94\xa7\x6a\x36\x20\x77\xf3\x94\x13\x88\xc7\xc5\x45\xbf\x1d\x97\x12\xfd\xb6\x2d\xf1\xf9\x06\xdd\xa6\x1b\xf4\x55\x48\x66\x0f\x03\xdb\x6b\xd8\x60\x3a\x04\xc6\x09\xac\xeb\x53\xc5\x8d\xb8\x49\xc8\xf3\x10\x5e\x95\x6c\x51\x1c\x25\x98\x3b\x81\xec\xae\x3c\x07\xe4\x58\xc9\x06\xc8\xe9\x44\xf8\x4e\x24\x21\x9e\x12\x6f\xfe\x24\x92\x63\x25\x1b\x24\x47\x3f\x47\x78\x3f\x8c\xdd\x80\xfa\x34\x92\x63\x3d\x3b\x30\xaf\xb3\x84\x53\x30\xc7\x05\x04\x6f\xa5\xaf\xe7\x10\x9d\x2b\xda\x40\x3a\xcb\x8d\xef\x72\xd4\xf4\xc3\xc8\x0a\x48\x5b\xad\x51\xaf\xbf\x41\x47\x19\xb1\x3b\xa5\xb0\xef\x4e\x1d\x12\x91\xc4\xec\xff\x0b\x00\x00\xff\xff\x29\xf5\x9c\x4a\x38\x8c\x00\x00") - -func asset_stat_trustlines_7CoreSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_trustlines_7CoreSql, - "asset_stat_trustlines_7-core.sql", - ) -} - -func asset_stat_trustlines_7CoreSql() (*asset, error) { - bytes, err := asset_stat_trustlines_7CoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_trustlines_7-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x40, 0x2a, 0x37, 0x68, 0x92, 0x30, 0x7e, 0x37, 0x45, 0x9, 0x4e, 0x9d, 0x3, 0xbb, 0x92, 0x8e, 0xc8, 0xd4, 0xca, 0xfc, 0x6f, 0xbf, 0x63, 0x2c, 0x62, 0x67, 0xb4, 0x6b, 0x47, 0x70, 0xab, 0x7f}} - return a, nil -} - -var _asset_stat_trustlines_7HorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x7d\x79\x8f\x9b\xc8\xb6\xf8\xff\xf3\x29\x50\x74\xa5\x4e\xd4\x9d\x34\xc5\x4e\xe6\xe5\x4a\xd8\xc6\xbb\x71\x7b\x5f\x46\x23\x8b\xa5\xb0\xb1\x31\xd0\x80\xb7\xbe\x7a\xdf\xfd\x27\x83\x57\xcc\xe6\x25\x99\xdc\xf7\xb3\xa2\xc8\x86\x53\x67\xab\xb3\xd4\x39\x55\x34\x5f\xbf\xfe\xf1\xf5\x2b\xf2\x66\x3a\xee\xd8\x86\xad\x46\x15\x51\x44\x57\x94\x44\x07\x22\xca\x62\x6e\xfd\xf1\xf5\xeb\x1f\xdb\xfb\xb9\xc5\xdc\x82\x0a\xa2\xda\xe6\xfc\x08\xb0\x84\xb6\xa3\x99\x06\xc2\x7e\xa3\xbe\x81\x13\x28\x69\x83\x58\xe3\xd1\x76\x78\x00\xe4\x8f\x16\xdf\x46\x1c\x57\x74\xe1\x1c\x1a\xee\xc8\xd5\xe6\xd0\x5c\xb8\xc8\x0f\x04\xfd\xd3\xbb\xa5\x9b\xf2\xec\xf2\xaa\xac\x6b\x5b\x68\x68\xc8\xa6\xa2\x19\x63\xe4\x07\xf2\xd4\x69\xe7\x99\xa7\x3f\xf7\xe8\x0c\x45\xb4\x95\x91\x6c\x1a\xaa\x69\xcf\x35\x63\x3c\x72\x5c\x5b\x33\xc6\x0e\xf2\x03\x31\x8d\x1d\x8e\x09\x94\x67\x23\x75\x61\xc8\xae\x66\x1a\x23\xc9\x54\x34\xb8\xbd\xaf\x8a\xba\x03\xcf\xc8\xcc\x35\x63\x34\x87\x8e\x23\x8e\x3d\x80\x95\x68\x1b\x9a\x31\xfe\x73\xc7\x3b\x14\x6d\x79\x32\xb2\x44\x77\x82\xfc\x40\xac\x85\xa4\x6b\xf2\xcb\x56\x58\x59\x74\x45\xdd\xdc\x82\x71\xd5\x36\xdf\x44\xda\x5c\xa6\xca\x23\xa5\x3c\xc2\xf7\x4b\xad\x76\x0b\xa9\x0b\xd5\xc1\x0e\xfe\xdb\x44\x73\x5c\xd3\xde\x8c\x5c\x5b\x54\xa0\x83\xe4\x9a\xf5\x37\x24\x5b\x17\x5a\xed\x26\x57\x12\xda\x27\x83\xce\x01\x47\xb2\xb9\x30\x5c\x68\x8f\x44\xc7\x81\xee\x48\x53\x46\xea\x0c\x6e\xfe\xfc\x15\x04\x65\xef\xdb\xaf\x20\xb9\xb5\xab\x5f\x27\xa0\x4f\xed\x7a\xe9\x7c\x06\xb7\x86\x1c\x47\xec\x04\xea\x88\xdc\x03\x2f\x09\x39\xbe\x7f\x02\xb9\x43\xeb\x71\x35\x82\xaa\x0a\x65\xd7\x19\x49\x9b\x91\x69\x2b\xd0\x1e\x49\xa6\x39\x8b\x1f\xa8\x19\x0a\x5c\x8f\x4e\x84\x33\x1c\xd1\x33\x74\x67\x64\x1a\x23\x4d\xb9\x66\xb4\x69\x41\x5b\x3c\x8c\x75\x37\x16\xbc\x63\xf4\x91\x93\xbb\xb8\xb8\x6e\xac\x0e\x95\x31\xb4\xbd\x81\x0e\x7c\x5f\x40\x43\xbe\x4a\x84\x93\xe1\x96\x0d\x97\x9a\xb9\x70\x76\xd7\x46\x13\xd1\x99\xdc\x88\xea\x7e\x0c\xda\xdc\x32\xed\xad\x3b\xee\x62\xea\xad\x68\x6e\xd5\xa5\xac\x9b\x0e\x54\x46\xa2\x7b\xcd\xf8\xbd\x31\xdf\x60\x4a\x3b\xbf\xbc\x81\xe9\xd3\x91\xa2\xa2\xd8\xd0\x71\xe2\x87\x4f\x5c\x5b\xf1\xf2\xce\x48\x37\xcd\xd9\xc2\x4a\x01\x6d\x25\xb1\xe4\x43\x89\x9a\x7d\x25\xe2\x7d\xd0\x4d\x3d\x60\x1b\x27\x54\x15\xda\xe9\x40\xf7\xe8\x6f\x18\xb2\x53\x6b\xba\x41\x5e\x68\xbd\x82\xc8\x69\x28\x4e\x1a\x61\x6d\x07\x4c\xdc\xc4\x19\x70\xce\x02\x90\xb4\x49\x34\xa3\xc9\xc1\xd3\xd3\x00\x9b\x3e\x1f\x66\x22\xa0\xe6\xb8\x23\x77\x3d\xb2\x92\x51\x6e\x21\x4d\x2b\x2d\x24\x4c\x0b\xb6\x4f\x25\xf1\xc0\xd2\xde\xdd\x13\xc1\x92\xa3\x98\xb4\x49\x37\x99\x7e\x8e\xdc\x6a\xdb\x71\x16\x49\x94\x0f\xc0\xb2\xa9\xc0\x2b\xd7\x05\x07\x33\xb0\x44\xdb\xd5\x64\xcd\x12\x8d\xd8\xe4\x9d\x34\x74\x64\x5d\xb9\x36\x39\x64\xb4\x6b\x39\x08\x1f\x78\x35\x7d\x4f\x79\x69\xe8\xf9\x80\x3f\x1d\xbf\x3f\x99\xdb\x99\xdc\x7d\xdd\xe6\x87\xfd\xd2\xcf\x33\x86\x51\x4a\x0e\xc6\xa6\x6d\x8d\xe6\xda\x78\xb7\x60\x88\x61\x21\x00\x99\x5a\xc6\xeb\xd7\x7b\x71\x98\xd3\x1a\xa7\x3f\x3a\x5b\xaf\x76\x6a\x02\xa2\x29\x3e\xe5\x1c\x9f\xe7\x3a\xd5\x76\x4a\xdc\x11\x46\xf7\x00\xcc\xbb\xe9\x8e\xc7\xe4\xfd\x4a\x2f\xfe\x3e\x4b\xb7\xf8\x46\x87\x17\xb2\x37\xe8\x6c\xbb\xce\x76\xe0\xfb\xd5\x94\xcf\x90\xa4\x1e\xad\xc0\x94\xb0\xc7\xd5\x6c\x6a\x09\x23\xbc\xfe\x1a\xf9\xc2\x51\xa4\x1b\xbb\x5b\xf7\xa5\x03\xde\x2d\xf2\x52\xcb\xb6\x8b\x00\xd7\xc8\xe2\x0f\x49\x09\xbb\x5b\xfe\xa5\xe7\x67\xbf\x5e\x4c\xc3\x51\x20\x86\xc4\x03\x9f\x84\x84\x1d\x20\x57\x28\x34\xf9\x02\xd7\x0e\x01\x9e\x6b\xdb\x8a\x43\x93\xe1\x67\x63\x31\x87\xb6\x26\xff\xf5\xf7\x97\x14\xa3\xc4\xf5\x0d\xa3\x74\xd1\x71\x3f\x8b\xc6\x06\xea\x5e\x2b\x26\xc5\x08\x55\xb3\x43\x87\xe4\x3b\x42\xb6\x5d\xaa\x0b\x31\xf2\x8c\xc4\xf1\xf8\xc8\xdd\x0b\x72\xc1\x68\x0c\x8e\xbd\x74\x77\xe0\xd8\xca\xea\x0d\x3f\x32\xff\x82\x5c\x23\x88\x27\x7a\x0a\x0c\x7c\xbf\xcd\x0b\xad\x00\x0a\xdd\x1a\x3b\xef\xfa\xde\x16\xb3\x45\xbe\xc6\x5d\x50\xf8\xf3\x0f\xbf\x0b\x27\x88\x73\xf8\x7d\x7f\x0d\x69\x6f\x2c\xf8\x7d\x37\xe4\x4f\xa4\x25\x4f\xe0\x5c\xfc\x8e\x7c\xfd\x13\xa9\xaf\x0c\x68\x7f\x47\xbe\x7a\xcd\xb9\x6c\x93\xdf\xce\xd7\x0e\xf3\x1e\xdf\x1f\x67\x18\xcf\x6f\xee\x10\x67\xeb\xb5\x1a\x2f\xb4\x63\x30\xfb\x00\x48\x5d\x38\x47\x80\x94\x5a\xc8\xd3\xbe\xed\xb6\xbf\xe6\x78\x48\x9e\x82\x94\xf7\xe2\xef\x68\x1e\x34\x94\x28\xcf\x99\x2e\x85\x7a\x3b\xa0\x4f\xa4\x57\x6a\x17\x0f\x6c\x9d\xf6\xdf\xce\xc8\x1f\xb1\x04\x18\xb9\x46\xf8\x0b\x24\x9e\x02\xde\xaa\xaf\xd6\xb8\xd5\xa8\x22\x96\x6d\xca\x50\x59\xd8\xa2\x8e\xe8\xa2\x31\x5e\x88\x63\xe8\xa9\x21\x65\xbf\xf0\x94\xdd\x64\x43\xdb\xb1\xbf\xb7\xd5\x23\xff\xfb\xb9\x0d\xd3\xe5\xc1\xb2\x13\xf1\x23\x4d\xbe\xdd\x69\x0a\xad\x93\x6b\x7f\x20\x08\x82\x54\x39\xa1\xd0\xe1\x0a\x3c\xe2\x49\x5f\xab\x75\xfc\x78\xd7\x6a\x37\x4b\xd9\xb6\x07\xc1\xb5\x90\x7f\x8d\xfe\x85\xb4\xf8\x2a\x9f\x6d\x23\xff\x02\xdb\x5f\xc1\xd9\x48\x74\xc4\xfb\xa4\x4b\x42\xff\x30\xe1\xb0\x30\xe1\xd2\x44\xaa\xfb\xe4\x4b\x41\xe1\x20\xe2\xe1\xd2\x4d\x12\x7e\xfe\x03\x41\xb2\x5c\x8b\x47\x7a\x45\x5e\x40\xfe\x05\xfe\x02\x7f\xbf\xfe\x0b\xfc\x85\xfd\xfd\xef\x7f\x61\xde\x77\xec\x2f\xec\x6f\xa4\xed\xdf\x44\xf8\x6a\x8b\xdf\x2a\x85\x17\x72\x5f\x42\x35\x93\x22\x0f\xdc\xa9\x99\x64\x0a\x3f\x5b\x33\xff\x73\x8b\x66\x2e\x73\xea\x4e\x0f\x87\x3c\x9c\x4e\x11\xc7\xb4\x7d\x81\xd1\xe3\x18\x41\x5a\x5b\x5d\x21\x3f\x8e\x11\xe0\xc5\xbf\xdc\x1e\xbc\xf1\xc8\x8f\x53\x8f\xf8\x12\xe6\xb5\x0f\xe5\x31\x88\x30\xc0\xe2\xde\x8d\xd3\x73\x18\xba\x04\xba\x97\xcb\x30\xa4\x01\x4e\xcf\x1c\xf2\x9c\xdd\xa3\x95\x5d\x72\x1b\xb6\xcc\xbb\x9b\xdb\x10\xa4\x41\x6e\x4f\x9d\x24\x96\xdb\x6d\xe6\x52\xa0\x2a\x2e\x74\x77\xe4\x8a\x92\x0e\x1d\x4b\x94\x21\xf2\x03\x79\x7a\xfa\xf3\xfc\xee\x4a\x73\x27\x23\x53\x53\x4e\xb6\xd2\xce\x64\x3d\x5d\xff\xee\x44\xf4\x1c\x2c\x9d\x78\xbe\x2f\x9e\x16\xdf\xbe\x44\x9a\x82\x48\xda\x58\x33\x5c\x6f\x61\x20\x74\xaa\x55\x5f\x1c\x71\xbe\x5d\xc6\x23\xf2\x44\xb4\x45\xd9\x85\x36\xb2\x14\xed\x8d\x66\x8c\x03\x60\xc6\x62\x7e\x58\xf2\x23\x9a\xe1\xc2\x31\xb4\x03\x20\xaa\x2e\x8e\x1d\xc4\x99\x8b\xba\x7e\x49\xc6\x35\xe7\xfa\x25\x91\xcf\x18\x49\x7e\x39\x40\x5e\x4e\x7b\xb0\x6e\xb8\x55\x1d\xc1\x6e\xc7\x41\x25\x2e\x5c\x5f\x28\xc4\xb2\x74\xcd\xeb\xd9\x23\xae\x36\x87\x8e\x2b\xce\x2d\x64\x3b\x67\xde\x4f\xe4\xc3\x34\xe0\x25\xa3\x51\x55\xd1\x7e\x3d\xba\x2b\xa7\xd2\xf1\x7c\x28\xbe\x22\xb0\xee\xcc\x90\x6b\xb6\xfd\x15\x1d\xf0\x2e\x94\x84\x6c\x93\xf7\x96\x5f\x99\xc1\xee\x92\x50\x47\x6a\x25\xa1\xcb\x55\x3b\xfc\xe1\x37\xd7\x3f\xfe\xce\x72\xd9\x22\x8f\x80\x24\x61\x6e\x56\x7b\x10\xd1\x85\x29\xee\x9a\x1e\x88\x01\xd7\xee\x52\xd4\x3f\x3f\x45\x48\xfc\xf4\xfd\xbb\x0d\xc7\xb2\x2e\x3a\xce\x97\xe0\x74\xf9\x7b\x15\x21\xb6\x45\x11\x5f\x62\x26\xca\xaf\x8d\xef\x96\xcc\xef\xe8\x1c\xe4\x0a\xf7\x8c\x63\xaf\x2e\x9c\xcd\x50\x70\xd9\x54\xc2\xc0\x01\x16\x0e\xee\xb7\xff\x42\x06\x90\x54\x9c\x87\x85\xb7\x17\x1e\x64\xb6\xa7\x38\x7f\x99\xd1\xc6\x09\x82\xd4\x7b\x02\x9f\x43\x32\x83\x04\x89\xfc\x0e\x5d\xbc\x40\x07\x5c\x81\xdb\xdf\x34\x25\x8a\xb7\x7d\xcf\xe7\x5e\xab\xdb\xe1\xd9\x99\x5d\xc0\x67\x46\x51\x91\xfe\xb2\xc5\x15\x05\xf9\xc9\xdb\xf8\xf8\x14\x61\xcd\x9e\x1d\x87\xdf\x52\xa0\x2b\x6a\xba\x83\x4c\x1d\xd3\x90\xa2\x8d\x6d\xdf\x28\xbb\x57\x0f\x3b\x3c\x3b\x3d\xec\xf7\xad\x23\x78\x3b\xd9\x4c\x4e\xe5\x85\x61\xfb\xd8\xe1\x03\x77\x6a\x39\xe9\x8c\x7a\x13\x71\xe0\x63\x1f\xe5\xd0\x00\x85\xe3\x44\xa4\x83\x3f\x6c\x26\x07\x12\x93\xb9\x70\x8f\xb9\x29\x38\xc6\x86\xa2\x9b\x38\xc8\x87\x5d\x58\x4a\x6a\xd8\x83\xe9\xec\x7e\x06\xf6\xd9\x2f\x64\x01\x17\xeb\x01\x57\xd4\x47\xb2\xa9\x19\x4e\xb8\x0d\xaa\x10\x8e\x2c\xd3\xd4\xc3\xef\x7a\x3b\x9f\x2a\x8c\x9a\x6b\xef\xb6\x0d\x1d\x68\x2f\xa3\x40\xb6\xeb\x50\x77\x3d\xf2\x96\x49\xda\x47\x14\x94\x65\x9b\xae\x29\x9b\x7a\xa4\x5c\xc1\x39\xda\x1b\x0b\x14\x15\x68\x7b\xcb\x0b\xff\xba\xb3\x90\x65\xe8\x38\xea\x42\x1f\x45\x1a\xca\x4e\x70\x51\xd3\xa1\x12\x0d\x15\xed\x56\x11\xbd\xeb\x7b\xbd\x2c\x62\x3f\x24\x21\xe7\xa5\x8f\x36\xc9\xf1\xeb\x5a\x91\x1f\x9b\xc6\x62\x69\xfc\xaa\xb4\x76\x95\xa0\x77\xa6\xb9\x58\x5a\x97\x69\x2f\x1c\x3c\x26\x0d\x9e\xec\xec\x3c\xcc\x36\x93\xca\x9c\xf3\x53\x55\x11\xa5\xd0\x76\xe5\x2f\xfb\xa2\x78\x19\xf0\xce\x04\xb8\xf3\x7c\x73\x61\xcb\x87\x63\x1a\x11\xa9\x67\x1f\x4e\x9e\x9e\xbe\x7f\x8f\x2e\xc5\xa2\xfd\x60\xb7\xb1\x76\xaf\x3a\x77\x67\x01\x3f\x3f\x74\xbd\xb0\x0b\x89\xb7\x64\x2f\xef\x2c\x4c\x24\xd9\xc0\x49\xc4\x38\xa0\xdd\xe1\xc8\x38\x10\xbf\x0e\x0e\x05\xb8\x3c\xd3\x99\x00\x17\x4b\xee\x00\x15\x43\xd1\x63\x49\x73\x46\x0e\xd4\x75\x68\x23\x92\x69\xea\x50\x34\xf6\x39\x49\x93\xe1\xc8\x38\xcb\xbf\xfe\xb5\xf3\x9c\x7c\x3c\x4d\x34\x0a\x64\xeb\xb3\xf3\x4c\xc1\x9b\x27\xdb\xf4\xa1\x27\x3f\x3d\xae\x47\xde\xd9\x60\x24\x5b\xe4\xb3\x15\xe4\xf3\xe7\x53\x0d\xfe\x1b\x41\xbf\x7c\x49\x42\x15\x36\x7c\xaf\xb4\xff\xb9\xd0\x63\x0a\x7c\x67\x3a\x0d\xa0\x0f\x28\xdc\x63\x30\xd6\x95\xc2\x77\xb8\x1f\xe0\x5c\xe1\x67\x16\x52\x66\xd2\x34\x21\xec\x9e\x5c\x9a\x74\x3e\xe0\x31\xd9\x34\x81\xca\xaf\xca\xa7\x57\x0a\x7b\x67\x46\x4d\xa0\x76\x99\x53\xa3\x06\xc4\x64\xd5\xb3\x33\x21\x0f\xb4\xd5\xbd\x7d\x9e\xb2\x94\xba\x88\xda\xc5\xfe\x84\xd2\x2c\x6d\xe2\x8d\xcf\xa1\xa1\xb0\x47\xd2\xa1\xfe\xb2\xad\x02\xa2\xcb\x88\xa8\x02\xed\x1f\x29\xb1\xdc\xf5\x08\x1a\x4b\xa8\x9b\x16\x0c\x6b\x5b\xba\xeb\x6d\xc1\xb3\xd0\xdd\x88\x9b\x73\xe8\x8a\x11\xb7\xb6\xa5\x56\xd4\x6d\x47\x1b\x1b\xa2\xbb\xb0\x61\x58\x87\x8d\xa5\xbe\xfc\xf5\xf7\x71\xed\xf2\x9f\xff\x0d\x5b\xbd\xfc\xf5\x77\x50\xe7\x70\x6e\x46\x34\xc3\x8e\xb8\x0c\xd3\x80\xb1\x6b\xa1\x23\xae\x4b\x34\x3b\xc9\xb4\x39\x1c\x49\xe6\xc2\x50\xbc\x8e\x35\x63\x8b\xc6\x18\x06\xab\xb1\xf3\xd4\xba\xd5\xc4\x16\xdb\x18\x2a\xc9\xe5\xd6\xae\xf7\xa7\x29\x7b\x6f\xdb\x1f\xe1\x4a\x13\x22\x7c\x77\xf3\xce\xcb\x25\x9c\x0e\x6b\xf1\xed\x98\x3e\xe9\x69\x47\xea\xb4\x4b\x7a\x5d\x1d\xf1\x38\x21\x52\x1e\x9e\x8b\x15\x2a\xb6\xfe\x48\x23\x64\x64\xa6\x7d\x98\x98\xa9\xcf\x1f\xc6\x0a\x9a\x90\x16\xc2\x45\xcd\x89\xae\x88\xa8\xa6\x9d\xb0\x5b\x84\xe4\xb8\x36\x97\x20\x5e\x49\x68\xf1\xcd\x36\x52\x12\xda\xf5\xb3\x1d\x23\x2f\x8b\xb6\x90\xcf\xe0\x05\x79\x02\x28\xc0\x70\x82\x44\x51\xf4\xe9\x05\xc1\x5e\x10\xf4\x05\x79\x7a\x8a\x66\x27\x6e\xc7\xe6\x5a\x96\x82\xbb\x36\x7b\xb6\x9e\xc0\x48\x33\x34\x57\x13\xf5\x91\x7f\x82\xe6\x9b\xf3\xae\x3f\xbd\x20\x4f\x18\x0a\xd8\xaf\x28\xf5\x15\xc5\x11\xc0\x7c\xc7\x98\xef\x04\xfd\x0d\xc5\x31\x82\xa5\x9e\x51\x6c\xcb\x74\x2a\xec\xd8\xc8\x7f\x32\xe2\x6c\x46\xa4\xcd\xc8\x35\x35\x25\x9e\x12\x4b\x91\xf4\x35\x94\xf0\xd1\xc2\x81\x87\x0c\x35\xd2\x8c\x8b\xa7\x31\x62\xe9\x11\x04\x4a\x30\xd7\xd0\x23\x46\xa2\xa2\x8c\x82\x3d\xad\x58\x1a\x24\x41\xe2\xd8\x35\x34\xc8\x91\x9f\x0f\xf7\x2b\x73\x6f\x2f\x34\x96\x04\x85\xa3\xd8\x55\x62\x50\x7b\x12\xbb\xe8\x97\x82\x04\x43\x00\xf2\x1a\x12\xf4\x68\x6e\x2a\x9a\xba\x49\x2f\x05\x03\x28\xec\x2a\x12\xcc\x99\x14\xbb\x23\xd0\x29\xe8\xd0\x04\x85\x5f\x47\x67\x3b\xe9\xe2\x78\x6c\xc3\xb1\xe8\x9a\x76\xbc\x4d\xb1\x28\x40\xd9\x6b\xd0\xb3\x1e\x7a\xbf\xdf\x39\x5a\x2b\x76\x3c\x76\x8c\x06\x57\x4d\x35\x40\x3d\xf4\xbb\x59\xf0\xaa\xdc\x78\x02\x24\x4b\x5f\xa5\x1d\x00\x4e\x09\x1c\xca\xa6\x6d\x00\x88\x27\xc4\x52\xec\x75\x92\x60\x67\x13\xbd\x2b\x54\xfd\x87\x6e\xe3\x28\x01\x94\x26\x89\xab\x66\x04\xe0\xbe\x38\x87\xf2\x3e\x76\xc6\x01\xc0\x68\xea\x3a\x49\x88\x91\xaa\xad\xf7\x0f\x20\x98\x73\x7d\xa4\x6a\x50\x8f\x0d\x8d\x00\x90\x00\x5c\x15\x84\x01\xb9\xdf\x77\xd9\xf7\xc3\xd7\x09\x62\x50\xf4\x75\x61\x1e\x50\x23\xcd\x18\x43\xc7\x1d\x5d\x76\xdc\x13\x48\xd1\x2c\x73\xdd\x8c\xd0\x67\xa9\xde\xdb\xda\x10\xe3\x93\x09\xc0\x50\x14\x27\x76\x44\x22\x72\x6d\xec\x3e\xfd\xb5\xc9\xf6\x62\xaf\xfe\x74\x11\x50\xc8\xf6\x2b\x05\xaa\x29\x10\x75\xa1\xc4\xbf\x65\x6b\x42\x3e\x43\xe3\x18\x47\xe0\xd4\x90\x7c\x13\x72\xad\x66\xb5\xd0\xab\xd0\x85\x4c\x35\x5b\x6b\x54\x4b\xf9\x3a\xd1\xa2\xf9\x41\xaf\xdb\x09\x6a\x28\x92\x08\xb6\x25\xc2\x91\xbd\xcc\xdb\x80\x23\x07\x44\x8f\xe3\x8b\xfd\x5e\x13\xeb\x54\xea\x58\xa7\x4e\x64\x3a\x85\x62\xa7\x41\x13\x7c\xe7\xad\x52\x17\xb0\x46\xb1\x4b\xf4\x9a\xc5\x7a\xa9\x29\x54\x2a\xc5\x8b\x69\x88\x24\x82\x7b\x92\x60\x78\x23\x8f\x15\x3b\x3c\x89\x71\xb5\x7e\x27\xdf\x29\xe2\xdc\xa0\xcc\xf5\xfb\x85\x7e\xbf\x8b\x75\x8b\xfd\xc1\xa0\x49\xf1\x83\x3e\xdf\x7e\xab\xe4\xfa\xc3\x16\xd7\xa3\xe8\x7e\x9d\x48\x4d\x84\xd8\x12\xc9\x34\xdf\x06\xc5\x52\x15\xcb\x96\xf0\xbc\xd0\x20\x32\xfd\x6a\xbe\x26\xe4\xaa\xf9\x72\x47\x78\xeb\x60\xc5\x01\x3e\xac\xe5\x5b\xc5\xba\xd0\xc9\xf2\x75\xae\xd5\xa3\x1b\x59\xba\xde\xc7\x8a\x4f\xb7\x9e\x2b\xd9\x2e\x33\x13\xe6\x7a\x77\x16\xef\x78\x8c\xf6\x9b\x03\xe3\xcf\x5c\xbc\x20\xc4\x0b\xe2\xda\x0b\x98\xc2\x02\x2f\x4f\x53\xdc\x6c\x7f\x7e\x15\x74\x6a\x7d\xb2\x0d\x15\xcd\x1d\x89\xba\x35\x11\x8d\xc5\x9c\xd8\xfa\x4c\xa7\x95\x7b\xba\x73\x3a\x6f\x39\x3f\xf0\x10\x3d\x9f\xd5\x6c\x2f\x08\x48\xab\xe5\xb0\xe3\x03\xb7\xaa\x79\x7f\x84\xe0\xc4\x01\x31\x40\xd0\x04\x43\xa0\x24\x4d\x7b\x4c\x6d\x7d\xf2\x3f\x9f\xfc\x44\xf5\xe9\x3b\xf2\x09\xa0\xdf\x00\x86\xa3\x28\x8a\x7e\x7a\x41\x3e\x1d\x0f\xa9\x6c\xef\x75\x5a\xb9\xe3\xc5\x6d\x6d\xbf\xbd\x18\x9c\xb7\x23\x84\x7f\x58\x65\x0b\x73\xeb\x04\x7e\xfa\xdf\x28\x8f\x0c\x4a\x06\x02\x92\x61\x2f\x08\xfe\x7f\x46\x32\x40\x6f\x93\x11\x8d\x63\x0c\x88\x98\x33\xf0\x6d\x57\xbe\xfd\x57\x89\x86\x07\x44\x0b\x9d\xb4\xff\x4e\xd1\xb0\x17\x04\x60\x0c\x43\xb0\x28\xc9\x32\xa4\x3f\x6b\xa8\x27\x9b\xae\xcd\x35\x4f\x34\x16\xc3\x70\x9c\xc6\x50\x9c\x62\xc8\x6f\x04\x4d\x93\x0c\x4a\xff\x57\xc9\x08\xf6\x32\x02\x14\xdd\x5b\xe6\xff\x35\x19\xf1\x17\x84\x21\x19\x96\xc5\x19\x8a\x61\x3d\x11\x7d\x09\x1d\x57\xb4\x5d\xcd\x18\x8f\x24\x51\x17\x0d\x19\xfa\xb6\x8a\xa2\xdf\x50\xff\x93\x9e\x02\x71\x4e\x21\xd4\x07\x4e\xf0\x5e\xe8\xc9\x10\x5d\x6d\x09\x6f\x96\x68\xeb\x83\xbe\x48\x2b\xa8\x8d\x27\x5b\x82\xe0\x05\xf9\xe4\xa7\x98\xd1\x0c\x6e\x7e\x99\x2d\x79\x5c\x11\x18\xbd\x73\x97\x9f\xa5\xe7\x1d\x85\x9f\xae\xe7\x80\x44\x29\xf5\x7c\xdb\x0a\xfc\xaa\xb8\xe4\x73\x45\x31\x3b\x97\xfd\x69\x7a\xf6\x29\xfc\x74\x3d\x07\x24\x4a\xa7\xe7\x1b\x8b\x10\x9f\xab\x84\x05\x5c\xd8\xb9\xc7\x5b\x17\x70\xfb\xb3\x8f\x7b\x61\xc9\x17\xe4\x49\x64\x69\x8a\x65\x71\x5c\xa1\x54\x48\xb2\x28\x2d\x91\x12\xc3\xe0\x8a\x0a\x80\x0c\x68\x12\xe2\x40\xa4\x65\x5a\x06\xac\x42\xa0\x18\xc1\x50\x98\x84\xc9\xb4\x8c\xb3\x0c\x41\xaa\x14\x26\x62\xe2\x76\x45\x4d\x61\x22\x64\x49\x8c\x61\x00\x89\x43\x19\x27\x20\xcd\x12\x50\x42\x45\x1c\xca\x98\xc4\xd2\x0c\xa3\x00\xc8\x60\x22\xc1\x40\x88\x52\x18\xab\x12\x00\x67\x71\x80\x89\x38\x2d\xe1\x24\x8b\x11\xfe\x82\x16\x04\xca\x5a\xea\x3b\x4e\x7f\x47\xb1\x60\xb5\xbb\xbb\xfc\x0d\xe0\x38\x8e\xe1\x89\x77\xfd\x75\x1c\x4e\x11\x0c\xfa\x82\x00\x6a\x3b\x9f\x17\x9f\x17\x84\xde\xfe\x07\x76\xff\xed\x2f\x82\xc3\x97\x2d\x6b\x1c\xc7\x71\x59\xac\xb2\xd0\x5b\x5a\xa6\xf3\xbc\x42\x49\xb2\x6d\x67\xa7\x74\x76\xd1\xd7\x84\xa2\x59\x99\x4d\x17\x19\xcd\x40\x79\xb2\xd6\x32\x71\x07\xcc\x66\xac\xb4\xd8\x58\xb3\x16\xe4\x72\xd0\x7a\xb5\xda\x3d\xdd\xca\xb0\x3c\xc5\xbf\x2f\x66\xe4\x7a\x6e\x2d\x96\xf9\x4d\x7e\xf5\xae\x0c\xab\x03\xd6\xd9\xa2\xe6\xfa\x6f\xdd\x9a\x3d\xe6\x0e\x9f\x45\x2d\x53\x93\xd7\x63\x30\x6e\xcf\xf4\xae\xc0\x2c\xb0\xf9\xe0\xb5\xfe\xd6\x98\x57\xb2\x35\xa7\xf7\x86\xd7\x39\xbb\xb0\xa2\xaa\x9d\x4d\x5b\x37\xba\x9d\xda\xaa\xfe\x91\x55\xb2\xcb\x7e\xa3\x3e\x75\xe7\x5d\xde\xae\xe7\xb8\xc9\x50\x5c\xcb\xc5\x5a\x63\x3c\x2d\xb8\xf5\xda\xba\xa3\x35\x2a\xed\xd5\x16\x73\x47\x20\xaa\xe2\x87\x85\x35\x8e\xc4\xb8\x0a\xc3\x85\x7c\x86\x5c\x1f\x10\x0d\x8e\xcb\xa1\xe5\xb0\xdb\xbf\xf5\xc7\x37\x2a\x34\xc2\xef\x83\xae\x40\x3c\xc6\x8c\x9f\x48\x85\xc4\x59\x8a\xa0\x00\x43\xb3\x90\x26\x58\xc8\xb2\x0c\xca\xd2\x0a\x4a\x31\x50\xa4\x25\x95\x60\x65\x14\xa0\x0c\x21\x4a\x04\x4a\x4b\x0a\x90\x15\x40\x63\x2c\x0a\x58\x42\x81\xa4\x8c\xc7\xba\x02\x88\x34\x76\x12\x10\x38\x99\x78\xd7\x5f\x1d\x53\x2c\x60\x88\x18\x57\xa0\x52\xba\x02\x00\x6d\x7d\x36\x18\x40\xa8\x94\xa9\xe1\xb8\xac\x36\xc4\xba\x45\xb3\xe5\x55\x26\xcb\xbf\xa3\x19\x1a\x95\xd1\x7e\xa5\x51\xe8\xe0\xfa\x0a\x9d\x72\xf5\x29\xd5\x5e\xa3\x0c\xd9\xc7\x5f\x87\x54\x99\x9e\x0f\x8a\x1b\xb9\xc5\x8c\xe9\x05\x09\x88\x5c\x09\x94\x5f\x71\xdb\x62\x72\x42\x71\xe6\x4d\x9d\xe7\x0a\x27\xd6\x99\xa3\x97\x65\xac\xd0\x1f\x18\xac\x59\x7f\x55\x4d\xb2\x61\xcf\x8b\x15\xa3\xdd\x2d\xbd\x67\x44\x7b\x49\x67\xe6\x59\xd7\x91\xea\xae\xa4\x52\xed\x65\xcb\xe4\x0b\x1f\xaf\x72\x6e\xf1\x26\x15\xa8\x9c\xc5\x61\xbc\x0d\x57\x54\x67\x03\xb0\x15\xfa\xdc\x83\x1f\x7d\xaa\x2e\xb4\x9a\x33\xa2\xeb\x61\x6e\x84\xb8\x42\x79\x10\x66\x4e\xff\xff\xb8\x02\xfe\x18\x33\x7e\x52\xf1\x6d\x7d\x0c\xa0\x24\x63\x12\x43\x4b\x0a\x09\x29\x85\x54\x19\x9a\x52\x64\x94\x90\x08\x19\x10\x34\x89\x29\x24\x8d\xb3\x8a\x42\x29\x12\x90\x18\x52\xc2\x81\xac\x4a\x2c\x05\x68\xc0\x48\xfe\xde\x21\x16\x6a\xd5\x68\xa4\xb1\x53\x18\xcb\x32\xb1\x77\xd9\xa7\x43\x35\x05\x18\x86\x89\x71\x05\x32\xa5\x2b\xbc\xd6\xa6\x5c\x86\x62\x2a\x04\x64\xfb\x73\xa0\x4e\x30\x9c\x6b\xa1\xab\x8e\xd2\x02\xfd\xba\x02\x5c\x47\x9a\x48\x35\xf9\x99\x1c\xf4\x0b\xd5\xf5\xa2\xf2\x5e\x1f\x50\x9d\x06\x3f\x98\x4e\xc1\x90\x19\xb4\xc5\x0d\x85\x3d\xb7\x5c\x69\x36\x04\x6d\x6b\xd1\x18\x8b\xa5\xa1\xb6\xdc\xf4\x09\xc2\x9b\x3a\xcf\x15\x4e\xa6\x32\x3b\xa4\xcb\x59\x82\x2f\x1a\x03\xb4\xd0\x6f\x0a\xfc\x4a\xd6\x4c\x7d\x40\x5b\xa0\x6e\xc0\xe7\x36\xe9\xea\x99\x8a\xad\x67\x95\x95\x88\xe6\x36\x80\x21\x70\x5b\xa9\x7e\x34\x08\xe9\xb9\xb0\x70\xf0\x7e\xef\x15\xc5\x3a\xd2\x5b\xb6\xcf\x6c\xd6\x8b\xcc\x7c\xa9\xd0\xd6\xd4\x59\xd8\x25\x2f\xeb\xd4\x42\x5c\xa1\x88\x86\x99\xd3\x7f\xb9\x2b\x60\xe9\x5d\x01\x7b\x8c\x19\x3f\x51\xb8\xc2\x32\x2a\x89\x53\x10\x52\x8c\x02\x24\xcc\x5b\x66\xb1\x2a\x86\x8b\x2a\x89\x03\x20\xd1\x24\xc5\x8a\x18\xa1\x8a\x2a\x20\x50\x5c\x54\x50\x89\xc4\x24\x0a\xc7\x25\x94\x96\xa0\x67\xb1\xb8\xbf\xf2\x0d\x58\x35\xf5\x9d\x64\x23\x8d\x9d\xc6\x29\x34\xf9\xae\x5f\xbe\x11\x24\x8b\xc5\x78\x02\x9e\x76\x7d\xf4\x36\x9c\x02\x61\x41\x9a\xa8\x54\xa6\x7b\x84\xb1\xa9\x2f\x3b\xeb\x02\xde\xb5\xcc\xd9\xf3\x32\xcf\xd5\xdd\x2c\xa8\x60\x35\x3a\x43\x53\x43\xb6\xb0\xea\x53\xef\x4c\xe5\x63\xdd\xef\xe4\x66\xf8\xb3\xaa\x0c\x9d\x89\xf3\x91\xed\xf5\xb1\x96\xb4\xe0\x8c\xb2\x50\xd3\x5a\xe6\x42\xcf\x6e\x8e\x49\xe1\xdd\x5b\xbf\x94\x0e\xff\x71\x9e\xb1\x3a\xc7\xdf\x2b\xee\xad\xe1\x83\x73\xd9\xcd\xec\x15\xf6\x0a\xdc\x80\xaf\x4f\x74\x91\x6d\xad\x87\xc5\xe9\x6c\x5d\x28\x35\x28\x60\x95\xb4\xe9\xfc\x2d\xcf\x4e\xba\x16\x68\x2c\x49\xdb\xad\xf7\x9d\xf9\xac\x59\x96\x37\xfd\xb9\x0e\xb1\x61\x25\x3f\xfd\x98\xb4\x67\xe8\x02\x07\xca\xd0\x2c\xcd\xfa\x24\x58\x98\x86\xac\xbe\x11\x3e\xfd\x10\x4f\xe1\x9d\x30\x6b\xfb\x2f\xf7\x14\x3c\xbd\xa7\x80\xc7\x58\xb9\x77\x4a\x6b\x5b\x44\x6e\x8b\x2e\xc0\xd2\xe8\x57\x14\x7c\x45\x01\x82\xa2\xdf\xbd\x7f\x91\xd6\xcc\xd0\x14\x11\x5d\x2a\xec\xef\x12\x18\x4b\xb0\x14\x8d\xb1\x54\x8c\xad\x87\x5b\xba\xcf\xd2\x3f\x3d\x29\xd1\x9f\x4c\xbf\xa2\x11\x9b\xd7\x4d\xab\x92\xa1\x73\x46\x8e\x2d\x62\xe8\x7a\x9a\x79\x76\xd0\xb1\xeb\xac\x4a\xab\x0f\xd0\x57\x5a\xbd\x81\x98\x29\x8b\x79\x2f\xdc\xf3\x21\x46\x1c\xfe\xd9\x1b\x31\xc7\x65\x66\xbf\x40\x90\x87\x7e\x9e\x7c\x63\x4a\x2e\xb3\x53\x3c\x07\x75\x6b\xd5\x1d\x71\xbc\x2d\x6a\xaf\x01\x44\x78\x5c\x02\x9a\xe0\x66\x0c\x76\x1b\x9a\x60\x13\x1d\xbf\x0d\x0d\x11\xdc\x66\xb8\x0d\x0d\x19\xe8\x7b\xdf\x28\x14\x15\x6c\x2d\xdf\x86\x86\x3e\xef\x75\x12\xb7\x61\x61\x02\x1d\xd3\xdb\xb0\xb0\xe7\xfd\xc0\x1b\x79\x01\x68\xa0\x51\x7a\x23\x1a\x70\xde\x35\xbb\x95\x9b\x40\xf3\x0d\x7b\xcc\x23\x7c\x0f\xd9\x80\x8d\x3f\x5f\xba\xb5\xaf\xb4\x3b\xb2\x11\x4f\xb2\xdd\x1d\x5d\x4e\x42\xc1\x59\x1c\x38\xfc\xa0\x0e\xad\x85\xff\x7c\x72\xcd\xbb\x1a\x97\x2f\xc8\x27\xd5\x36\xe7\x77\x35\x99\x5f\x90\xdf\x78\x37\xf5\x27\x9c\x5f\x09\x99\xa8\xf3\x10\x79\xf8\x81\x5e\x4e\xd4\x1d\x4a\x3e\x4e\xd4\x8d\xda\x08\x4c\xd4\x6f\xb6\x83\xfa\x13\xce\xe7\x84\xcd\xd4\xd9\xee\xeb\xe1\x07\xe1\x4d\x13\x95\x6e\x97\xd2\xb5\x17\x8e\x0b\xe1\xbd\x73\xe1\xa1\x31\xed\x7b\xfd\xf7\xf7\x98\xb9\x07\x1f\xdf\x8a\x9c\xb9\x7d\xe2\x3f\xfc\x40\xff\xe1\x99\xbb\x27\x6a\xfe\x16\x33\xf7\xf3\xa3\xe3\xe9\x2a\xe9\xf0\x9d\x39\xd9\x65\x54\x17\x86\xb2\x93\xe5\xc6\xc3\x73\x9e\x5e\xfc\x23\x6c\xf7\x4e\x6e\x8a\x2d\xcf\x3b\x4f\xf9\x5d\xa3\xb6\xdd\x7a\xee\xf0\x9d\xf8\xb9\x6a\xbb\xdd\x98\x7f\x33\xb5\xf9\x0b\xcf\xc3\x77\xf4\xa7\xaa\xed\x8e\xe8\xfd\xf3\xd5\x96\xb0\x8a\x0d\xf9\xe3\x01\x69\x56\xb0\xc9\x58\x93\x9f\xa3\xbe\x75\xa5\x1c\xf9\xfc\x55\x68\x25\x4e\x45\x57\x43\x89\x88\xb0\x00\xa2\xa8\xb2\x35\x11\x11\x1e\x58\x16\x46\x15\x8b\x89\x88\x88\xe0\xfa\xf2\x56\x44\xc1\xe5\xcf\xcd\xa2\x51\xc1\x6c\x7c\x2b\x22\xfa\x3c\x3b\x44\xd5\x9e\x89\x78\x98\x73\x3c\x37\xab\x9a\x3d\x0f\xbb\x37\xf3\x73\x56\x9b\x13\x77\x28\x08\x04\x22\xda\xed\x1c\x61\xe7\x88\xa2\xeb\xf3\x6b\x9f\x94\x7f\x44\x85\x9e\xf4\x60\xe4\x35\x35\x7a\xe4\x73\xf1\x0f\x88\x3d\x27\xcf\x78\x28\x0c\x45\x33\x24\x46\xa1\x8c\xc2\x8a\xa2\x8a\x01\x08\x54\x5a\x12\x65\x89\x65\x20\x4d\xaa\x0a\x29\x4b\x38\x2b\x41\x80\x2a\x34\x2a\xb3\xb2\x24\xcb\x0c\x8a\xb3\x40\xa1\x71\x1a\x63\x18\x8a\x7d\x7a\x41\xfc\xd3\x6d\xb7\x2f\xc7\x4e\xf6\x7f\x88\x7d\xdf\x3b\xfa\x48\x0d\x49\xc6\x1d\xb8\xf1\xef\x9e\x45\x3e\xbf\x61\x5e\xa1\xa6\x50\xc3\xa7\x73\xb3\xc4\xb4\x0b\x7a\xee\x15\x8e\x65\x9c\x7e\xeb\xbb\xc5\x4a\xe5\xa3\xd7\x65\x56\x5d\x6d\x98\x11\xb3\x0b\xb2\x4a\xd6\x38\xaf\xe1\xcc\xed\x37\x74\xb2\x81\x7e\x6e\xe6\xf8\x95\xf7\xfe\xaf\x63\xd9\x57\xae\x4e\x90\x83\x4c\x0e\x77\x8b\xdd\x7c\x1d\x34\x71\x0e\xad\xc1\xd9\x1b\x53\x6e\x52\x86\x00\x38\x16\xf6\x34\x65\x53\x72\x3b\xde\xf8\x6e\x57\xf0\x07\x72\x59\xb0\xc8\x28\x45\xb3\xbd\x18\xd7\x96\x0d\x37\x47\x67\x26\xa5\x2a\x2e\x40\x56\xe9\xbe\xa9\x85\xd2\x73\x59\x23\xcb\xcb\x4e\xfd\x79\xc8\xb9\xb4\xb7\xeb\xc3\x15\xb2\x95\xde\xea\x48\xbf\x70\xe0\xb7\x51\x57\x16\xc5\x09\xb3\xa0\x0c\x42\xe4\xdb\xf9\xe2\x2b\x47\x65\xb4\xbc\xae\xf2\x6f\xef\x39\xe7\x43\x1e\x76\x65\x33\x5b\x6a\x2e\xb9\x01\x8e\x4f\xcb\xcf\x40\x6c\xac\x07\x4c\x69\xd3\x69\x58\x79\xd4\xec\x4b\x72\xa5\x0b\xc7\x1f\xdd\xa1\x50\x67\x40\xbd\xc3\x0b\xaf\x6c\x89\xcc\xbf\xe6\xc6\xa5\x1f\x4f\xa7\x1b\x0e\x85\x93\x46\x7d\x23\x4c\x1f\xdc\x11\xbe\x71\xd0\x5f\xce\x03\x3a\x19\x6a\xbf\x0b\x54\x15\xd6\xc5\xf1\x74\x5d\x13\x3b\x6f\x2c\x95\xf9\x50\x1d\x16\xa2\xb2\x69\x0b\xc3\xfe\x47\xa6\x57\x9e\xe5\xcd\x0a\x3d\x5b\xce\x3c\x51\xb3\x5d\x6e\x39\xad\x1f\xe7\x23\x13\xa0\x7f\x36\x17\x21\x9f\xcc\x83\xe9\x67\x6f\xa2\xef\x7d\xad\x1d\xf4\xb1\x1b\x4f\x0f\xaa\x0c\x47\x4f\xf5\x31\xff\x06\x51\xa5\xd3\xa1\xbb\x45\x39\xd7\x58\x53\x8d\xd7\x95\x5e\x7c\x97\xf1\x4e\x0e\x90\x62\x19\x2f\x69\xc0\x83\xcf\x77\x3b\xe8\x8e\x70\xb5\x47\xe4\x51\x38\xa9\x53\xdc\x86\xcd\xa2\x6f\x4e\x81\x1f\x2f\x65\x40\x03\xd0\x61\x99\xc1\x94\x98\x57\x67\x73\xb6\x41\x93\xb3\x2c\xbe\x3c\x61\xe5\xf5\xf0\x59\x85\xf1\xec\xfd\xce\xff\x33\xfc\x0d\x4a\x96\x94\xc4\x5f\xed\x78\xd1\x23\x93\x5d\x98\xb8\xe9\x12\xe4\x7b\xf6\x8d\x5f\x5b\x8d\x57\xdc\x2c\x0a\xcf\x1f\x80\x6e\x6e\x34\x07\xe8\x6a\x2d\x3f\x98\x37\x7a\x63\x7b\xd1\x7a\x6e\x73\x77\xf2\x97\x5b\xf7\x2b\x95\xc9\x95\xfa\xfb\x95\xfc\x0d\xeb\xe3\x65\x1c\x7f\x3f\x8e\xbe\x39\x0e\xd8\x22\x77\x0b\xaf\xe5\x4e\xf6\xb9\x2e\x1f\xf1\xf1\x5c\x20\x16\x70\x27\x76\x14\xf2\x39\xd1\xd5\xcd\xf4\x6b\xc4\x6d\xf4\x7d\x5d\xfc\x87\xc4\x08\x58\xdc\xd0\xef\xea\xc4\x6c\xd6\x3a\x2a\x93\x33\x0b\xa5\x5e\x97\x69\x3c\x9b\xf5\x0f\x61\xad\x77\x37\xe3\xd2\xa4\xc0\x64\xa6\x2a\xac\x19\x74\xd7\xca\xe5\xa7\xab\x69\xb9\x99\x9d\xf5\x5b\x13\xc5\x5d\x59\x5d\x2a\x27\x74\x67\x28\xfd\xd1\x21\x1b\x0d\xfc\x15\x9d\xce\xfa\x4c\x9d\x1b\xff\xf8\xe1\x15\x3e\xde\x5f\x02\xd9\xef\x26\xfb\xff\x6f\x13\xbf\x97\xe0\x92\x57\x3f\xa7\x4f\xa6\x63\x04\x2e\x53\x2c\x4e\xa8\xa8\x2a\x91\x28\xa0\x69\x72\x9b\x78\x45\x11\x97\x54\x95\xc4\x15\x45\xc6\x19\x56\x56\x19\xc0\x50\x40\x56\x45\x48\x01\x54\x96\x31\x8c\x14\x45\x08\x18\x59\x96\xfd\x07\xe2\xc0\x3d\x4d\xca\x93\x0c\x8d\x27\x65\x68\x12\xc4\x1c\x07\xd9\xdd\x3c\xab\x03\x9e\x6e\xb1\xf7\x93\xfc\x1c\x9c\xf3\x8b\xfc\x7c\x65\xbc\xbf\x27\x3f\x33\xdd\x8d\x66\x1e\xe9\x17\x0f\xfc\x36\x78\x19\x96\xa5\xc1\xc2\x32\x7a\x7a\x07\xda\x1d\x0a\x1d\xab\x56\x7e\xcc\x08\x33\x4c\xc4\x39\xaa\x51\x6b\xa9\xdd\x71\xc3\x14\xf2\xc3\x7a\x75\x2a\xd0\x1f\x32\xb1\xa2\xa7\x99\xf5\x4a\xcb\x97\x3a\x1a\x65\x6d\xfa\x65\x41\x68\x58\x55\xac\xde\x58\xb7\x8d\x2e\x31\x76\x58\x3d\x67\x8f\x1b\x8f\xcb\xcf\x27\x40\xae\x34\xee\x37\x29\x9e\x36\x73\x55\xb4\xda\x78\x5e\x0d\x5a\x59\xf6\xa3\xbf\xec\x77\xdb\xf8\x5a\x7b\xd3\x06\x8b\x96\x04\x72\xcb\x79\xa3\x0a\xbd\x03\xbb\x5e\x7e\x34\x8e\xf3\x11\xf1\x49\x93\x1f\x1f\x42\xff\x32\x06\xa4\xa0\x7f\x11\x13\x7f\x75\xfc\xf6\x59\x49\x93\x5f\x7e\xd3\xfc\x17\x9a\x5f\x4e\xd6\xce\xd7\xfa\xd2\x36\xbe\xef\x78\x1d\x47\x4d\x5d\x62\x7e\xe1\xef\xa3\x7f\x9a\xdf\xae\xa1\xbf\xcb\x2f\xcd\x35\xa1\xbb\x1a\x35\x57\xc4\x6e\x93\x72\xdb\x76\x2b\xf3\x3c\xeb\xe5\x56\x58\x7b\x68\xcb\x39\x8b\x5b\x97\xd9\x5e\x26\x3b\x46\xbb\x33\x62\x51\xc3\x97\xc2\xc7\x34\xb7\xa8\x15\x8b\xd9\x52\x67\xd2\xaa\xbe\x1b\x65\x79\x86\x82\xec\x6c\x39\x20\x73\xf9\xba\xd2\xd7\xb2\x1f\x58\xa7\xbe\xc8\x70\x8f\xce\x2f\x28\x2a\x4a\xac\xac\xca\x10\x93\x08\x99\x00\x04\x50\x18\x49\xa2\x68\x8a\x51\x14\x94\x25\x24\x45\x92\x80\x4c\x13\x28\x45\x03\x54\x91\x24\x5c\x12\x51\xa8\xb2\x0c\x43\xa3\x2a\x85\x8b\x38\x41\xf8\x87\xb4\xc0\x3d\x5b\x29\xd7\xe4\x17\x0a\x07\x64\xf4\x29\xab\xfd\xdd\xb3\x06\x91\x6f\x95\x39\x77\xbc\x5c\xe5\x16\xf5\x1e\xd7\x60\xe9\x26\x68\xb6\xdd\x8e\xb2\x12\x72\x45\x2b\xf7\x9a\xed\x40\xeb\x43\x69\xbc\xf5\x75\xd3\x90\xb5\xaa\x77\x2e\x3b\x5d\x86\xf1\xce\x69\xdf\x96\x31\xf0\xa3\x33\x9d\x58\xed\x81\x7e\xa3\xda\x95\x4a\xa5\x67\x50\x85\xda\xc7\x7a\x6c\xc8\xb9\x12\x41\x55\x8a\x9b\x8c\x8b\x92\xcf\x45\x16\x33\xc0\x73\x13\xc7\x98\x32\xfb\x21\xe8\x98\x3a\x2e\xf7\x30\x43\x35\xf0\x7c\xc9\xac\x76\x1d\xec\xbd\x0b\x9e\xb3\x1d\xcb\x06\x18\x10\xb1\x0c\xcd\xd5\xa8\x62\xc5\x26\x8c\x4c\x95\x4b\x55\xd1\x15\x4e\x4d\x39\x2a\x63\x70\x27\x75\xe8\x95\x15\xf0\x43\x32\xc6\x03\xe9\xdf\x96\x31\x3c\xfa\xc1\x55\xf4\xb5\x15\x53\xe8\x2a\xfa\xf2\x13\x1f\xe5\x1e\x4d\xff\x8a\x55\x3c\xc7\xfd\xbe\x15\x6d\x52\x46\xba\x45\x57\x77\x67\xa4\x07\xce\xd5\x35\xf4\x77\x19\xc9\xed\x3a\xe3\x29\xdd\x71\xa9\xea\x5b\x21\xab\xac\x6a\xd3\xa9\x69\xaa\xa5\x02\xde\x36\x08\x15\x17\xd5\x3e\x59\x54\xa5\x95\x81\xd7\xb0\xfe\xf0\x99\xd3\x25\x51\x79\x56\xe5\x8e\x36\x76\x7b\x1f\xa2\xd5\xef\x13\xe5\xd6\x7c\xd9\x97\xba\xf6\xa0\xe8\x70\x1f\xa6\xfc\xbe\xd4\x64\xde\x79\x7c\xc5\x23\x29\x04\x43\x29\x92\xa2\xa0\x98\x42\x50\x28\x03\x68\x8a\x06\x32\x21\x92\x22\x0d\x59\x85\x82\x0c\x45\xca\x22\xc6\xca\x12\x01\x20\x85\x29\xb4\x28\xaa\x34\x2a\x62\x2a\x84\xa4\x84\x53\x0a\xf4\x33\x12\xf6\xa0\x9e\x64\x8a\x8c\x84\xc7\x66\x24\xfc\x24\x23\xed\x76\x1a\xee\xed\x49\xfe\xc2\x8c\x74\xd2\x63\xcc\xb0\xb3\x79\xa5\x87\xbd\xe3\x4b\xba\xa1\x6e\x98\xb7\x1a\x9c\xf1\x12\x68\xb7\x4b\xa4\xb6\x7e\x9f\x95\xd0\x8c\x39\xee\xdb\x75\x97\x1e\xd7\x01\x85\x35\xa4\xd9\x04\x53\x5a\xed\x8e\x0a\x73\xe6\x52\x46\xdf\x38\x51\x9d\xe4\xfa\x6b\x77\xd2\xe5\x74\xa7\xba\x98\xea\x99\xf9\x66\x9a\xe1\x06\x3f\x25\x23\xdd\xd2\xe3\x7b\x64\x46\xba\x93\xfe\x03\x33\xd2\x43\xfa\x3a\x97\x9f\xd4\x51\xee\x57\xf7\x95\x38\xee\xf7\xad\xe1\x12\x6b\xa4\x1b\x74\xf5\xc8\x8c\x74\xef\x5c\x5d\x43\x7f\x97\x91\x8a\x58\x6b\x60\x49\xa2\x0d\x5f\xdd\xcc\x6b\x75\xc5\xac\xa9\x46\x73\xd9\x15\x6a\xd3\x79\xb5\xf0\xde\x98\x36\x0a\x5a\x06\x3a\x14\xbe\xe0\xe8\xbe\x3d\xcc\x2c\x5a\xc5\x21\x28\x0b\x4d\x96\xa8\x6b\xec\x47\x83\xc9\x58\xcf\xbc\xa0\x16\xb0\x7c\x27\xdb\x5b\x2d\xa8\x7a\xa7\x20\x55\x6a\x7c\xe6\xe1\x19\x49\x91\x70\x96\x81\x12\x21\x42\x86\xa5\x49\x0a\xc7\x48\x8a\xc0\x65\x51\xc1\x80\xcc\x12\x10\xe0\x92\x2a\xa3\x34\x21\xe1\x18\x0e\x21\x83\x43\x40\x00\x49\xa5\x51\x20\x92\x0a\x8b\x12\x2a\xd8\x3d\x47\x08\xee\x39\x0f\xe1\x1f\xc8\x8c\x4d\x44\x34\x4e\x93\x44\xcc\xc3\x56\xfe\xdd\xd3\x1d\x66\xdf\x16\x0b\x55\xa6\xd8\x58\x36\x66\x52\x05\x2b\x72\x78\xaf\x3b\x6d\xda\x95\xf9\xb4\x8f\xa2\x6a\x81\x71\xaa\x25\x7a\x8e\xf2\xcd\x55\xb9\xf7\xca\xf5\x71\xee\x90\x87\xbc\x4f\x4c\x1e\xf2\x3f\x37\xf4\x72\x4e\x1f\xf0\xc8\x74\x97\xab\x3c\xbb\xf2\x4c\x75\x30\x6d\xc8\x6f\x6d\xac\x40\x4e\xde\x8d\xcc\x7c\x5c\x28\xc0\x31\x5b\x66\x74\x42\x06\xbc\xd1\xd1\xd7\x33\x9d\xd7\x8b\xac\xf3\x3e\xb4\x51\x96\x06\x79\xaa\x5e\xed\xa9\xf0\x75\x4e\xcc\xac\xbc\x5b\x7a\x76\x4a\xa8\x06\xde\xab\x9a\x4b\x72\x68\x79\xd3\x33\xa4\xc9\xa0\xda\x23\xcd\x5c\x8a\xdc\x73\x66\xb4\xe7\xb9\xe7\x44\xe6\x63\xec\x3d\xf1\xe7\x8c\xf6\x9a\x41\xab\x68\xb9\xb0\x71\x27\x2b\x01\xe8\x03\x54\xdc\x58\x26\x60\x85\xe2\x7a\x59\xcd\x6e\xea\xa4\x9b\xe1\xe5\xac\x2f\x23\x3e\x76\xed\xba\x31\x78\xa5\x3b\xc7\xf1\xb5\x50\x26\x12\xfc\xf9\x0e\xfa\xf9\x76\x2f\x63\xdf\x41\x9f\xe3\xfe\xb9\x9e\x4f\x68\x6c\xcd\xdc\xae\x8b\xba\x31\x8c\x15\x33\x49\x17\xf7\xce\xc5\xd6\x16\x9e\xe5\x00\xbe\xab\x74\xf1\x9f\x42\x09\x2d\xe6\x50\x76\xb2\x18\x88\xd6\x6a\x68\x66\x26\x86\xf9\xd6\x52\xcb\xb0\x28\x34\xcb\xa0\x2c\x0f\xcb\xcd\x72\xf3\x55\xaa\xcc\x45\xf6\x0d\xb2\x4d\x38\xd5\x80\x81\x2f\xc9\x45\xb9\xd2\x94\x5a\x6f\x76\x56\x28\xb9\xa2\x46\xd8\xb0\x21\x64\x65\xdd\xc2\x88\x5e\x16\x2c\x44\x6e\xf5\xe8\xd8\xaa\xb2\xb4\x2c\xaa\xaa\x28\x31\x32\xa0\x50\x0c\x17\x71\x9a\x61\x08\x40\x91\xb2\x84\x4a\xb8\xaa\x02\x51\xc4\x14\x51\x25\x50\x14\x55\xa1\x4a\xb0\x0a\x06\xa0\x2a\x33\x04\xad\x28\x92\x2a\x41\xf1\xf8\x8c\xf6\x1d\xb1\x15\x4b\x8e\xad\x2c\x1e\xfd\x4c\xf7\xfe\xee\xe9\x61\x99\x7b\x63\x6b\xcc\xb9\x03\xff\x73\xc3\x1a\x33\x22\xb6\x66\xe6\x15\xab\x35\x5e\xda\xab\x4a\x1d\x43\xfb\xd9\xba\x3a\x50\xfb\x4e\x81\xe7\x3b\xee\x6a\x20\x8a\xbc\xfa\xde\x5a\x50\x9b\x79\x79\xae\xe7\xe6\xe2\x73\xa9\x4f\x95\xe8\xd2\x78\x2c\x75\x86\x35\x53\x6e\x28\x43\x96\x28\xd5\x38\xb5\xa2\x34\x38\xe1\xbd\x2f\x95\xea\xf4\xc6\x59\x41\x58\xcb\xfe\x5e\xb1\xf5\xde\xd8\x76\xa7\x3f\xbf\xd3\xaf\xed\x9c\xf4\xc8\xd8\xfa\x0b\xd7\x8a\x49\xeb\xd6\x5f\x19\xdb\xb8\x07\xc5\x56\x86\x38\x8e\x8f\xa8\xf9\xe2\x62\xeb\x50\x7b\xef\x98\x55\x8a\xc9\x4e\x5d\x37\xbf\x9a\x1a\x58\x11\xd0\x99\x49\x26\x5f\x95\x0b\x85\xf9\xa4\x48\xcd\xec\x85\x63\x69\x43\xab\x41\xce\x97\x5a\xfe\x59\xab\x6f\x4a\xa5\x02\x28\xb4\x2b\x45\xbe\xd8\x53\x61\x36\xc7\x15\x37\x46\x87\xcb\x89\x3a\xb6\xc9\x2d\x18\xbb\x56\x34\xa6\x8f\xef\xa4\xd0\x18\x49\x93\x94\x04\x54\x49\x51\x19\x5c\x42\x19\x80\xd1\x2a\xce\x90\x50\x85\x8a\x8a\xb2\x28\x2b\xcb\x0c\x86\x4a\x94\x2c\x43\x1a\xa8\x40\x46\x19\x96\x56\x00\x49\x60\xb4\x2c\x91\xa2\xa2\x3c\x1d\xfe\xdc\xd5\x1d\xb1\x35\xb1\x81\x42\x13\x28\x49\x45\xc7\x56\x02\x25\xe9\xa7\xf3\x63\x7f\xf7\xc6\xd6\x5c\x60\x52\x2f\x62\xeb\x0d\x1d\xe5\xa8\xd8\x3a\x25\xc6\x99\xc6\x6b\x86\x93\xc6\xef\x2a\xfd\x5e\x37\x5d\xd1\x1d\x0f\x3b\xc5\x69\x4e\x77\xea\x6e\x4e\x50\x2c\x5a\xd4\x87\x4d\xf2\x35\x3f\x63\xd5\xc2\xf4\x59\x5f\xf3\x9b\x31\x37\xec\x7d\x0c\xe8\xd7\xea\x00\x0c\xf1\x56\x9e\x92\xd1\x77\x07\xd0\x58\x75\xc2\xcd\x66\xcb\x2e\x63\xa1\xb5\xdf\x2a\xb6\xde\x1d\xdb\xee\x8d\xad\x1b\xbb\x91\xaf\x3e\x30\xb6\xfe\xca\xce\xf0\xcf\x88\xad\xb7\xc6\x36\xee\x41\xb1\xf5\xd6\x1a\x66\x17\x5b\x07\xcf\x25\xae\xf3\xb6\x6a\x14\x88\x8a\xf1\x4c\x4d\xdf\xab\x3d\x7b\x50\xe8\x66\x88\x15\x29\xe5\xec\xc6\x47\x5f\x84\x98\xd5\xeb\x40\x75\x3d\x7c\xeb\xaf\xcd\x57\x4b\x6e\xd6\x4c\xae\xd0\x75\xb0\xfa\xeb\x06\x13\x7a\x0a\x3a\x81\x86\x50\xb1\x05\xc8\x6a\x44\xa3\x5c\xae\x02\xb5\xa2\xe4\x52\xee\x9b\x46\xbe\xd3\xfe\xf4\xfb\xc8\x9a\xc1\xcd\xfe\x50\xee\xf1\xed\x6e\xd7\xbe\x95\xe5\x04\xa3\xf7\x1a\x1f\x2e\x97\x3b\x7d\x57\x5c\x90\x20\xf2\xd6\x2c\xd5\xb8\xe6\x00\xa9\xf0\x03\xe4\xb3\xa6\x24\xbd\x76\x3e\xf8\xfb\x41\x5c\x07\xb0\x86\x71\x1e\x46\x38\x91\xfb\xc0\x5f\xd2\x0e\xfc\xd9\xe9\xe3\x13\x67\xa3\xe3\x73\x66\xa3\xd3\x07\xca\x46\x0f\x91\xee\x9c\x6c\x98\x70\x37\x31\x86\x74\x84\x52\xa3\xc3\x23\x9f\x8f\xe0\x2f\x27\xef\x57\x7f\x39\x7b\x1b\xfa\x95\xaa\x79\xcc\xb4\x5e\x2d\xf8\x55\x93\x1a\xf1\xd8\x7d\xc2\xa3\xed\x8f\x95\x2c\x9c\x48\x9c\xa4\x31\x6c\xa5\x96\x3c\xf2\x91\x86\xc4\x87\x06\x1e\x2b\x7d\x14\x99\x38\xf9\x63\x59\x4b\xd4\x80\x6f\xd2\xd2\xc6\xb3\xf6\xbd\x20\x25\x21\xc7\xf7\xd3\xbd\xda\xcf\x03\x3d\xc7\x82\xd4\x85\xa0\x33\x74\x5a\x25\xa1\x80\x48\xae\x0d\xe1\xa9\x77\x45\x73\xe3\xfb\xd8\xfd\xfc\xf8\x78\xd2\x71\x14\xe1\xd7\xd2\xe1\xed\x05\x37\xb3\x73\x44\x71\xca\xc9\x59\x35\x70\xce\x8f\x0f\xfc\x72\xf1\xa2\xc1\x30\xe6\x26\xa2\x33\xb9\x87\x33\xef\x7d\x8b\xa9\xd8\x0a\xbe\xa5\x31\x8c\x1b\xff\xef\x3d\xdd\xc3\x8f\x8f\x21\x1d\x47\x81\x57\x40\xbe\x5c\xbe\xed\x31\xd4\xe5\x47\x70\x6b\x1b\xde\xfd\x1b\x38\xdd\x65\x09\x9f\xe1\x00\xba\x53\xb6\xf7\x7f\x32\xf8\x8c\xe3\xcb\xa8\xa5\x29\x2f\xfb\x97\x1c\x47\x31\x7b\x7c\xb5\xdc\x9d\x6c\x6a\x4a\x6a\x06\x8f\x6f\x79\x7d\x09\x7d\x5b\x73\x02\xd3\xa6\x35\xb2\x1e\xc5\xf7\x0e\xd7\x29\xeb\x11\xa9\xea\x26\x49\xc2\x05\x70\xd7\x8f\x13\x60\x87\x2b\xc2\xa6\x6f\x14\xe1\xfc\x95\xbd\x97\x42\x98\xd6\xd6\x2a\x27\xe6\x4d\x32\xec\x98\x3f\xe2\xb8\x55\xf9\xf1\x8a\x76\xf6\x2f\x62\xda\x86\xea\xfb\x75\x7d\x8e\xee\x94\xe5\xfd\x9f\xa1\x3b\xe3\x31\x9c\xa3\x53\xbd\x3e\x8a\xad\x0b\x9c\xe9\xc2\x5b\x18\x83\xae\x3f\x25\xee\x3d\xd3\x7a\xc4\x71\xbb\x49\x26\x99\x9f\x6b\x2b\x5b\x22\xa7\xef\x51\xbf\x83\xe1\x4b\x64\x01\xce\x15\x18\xe0\x33\xf0\x02\xf7\x78\x06\xbd\xb7\x99\x3d\x86\x3d\x0f\x55\x2a\xe6\xf6\xaf\x50\x8b\x64\x2d\xf0\x6a\xf8\xbb\xf9\x0b\xe0\x4b\x62\xf2\xf2\xcd\xf4\x89\x9c\x3e\x46\x8f\x67\xd8\xd2\x72\x99\xa8\xcd\xc7\xf0\x96\x8a\xa7\x78\x5e\xf6\x1c\xeb\xa6\x39\x5b\x58\xf7\x71\x74\x8e\x2b\xf5\x8c\xee\xdf\x7d\x1f\xca\x9f\x25\x6a\xf6\xc8\x7b\xc1\xf1\x23\x38\x0c\x62\x4b\xe7\xb7\x3b\x06\x5f\x2e\x5e\xd7\xff\xb2\x7f\xed\xb7\xac\x9b\x8e\xf7\xb2\xeb\x08\x21\x1e\x10\xb7\x77\x78\x92\x38\xbe\x72\x75\xb4\xc5\xfa\x30\xed\x5e\xa1\xd8\x44\xbd\xf9\x6f\xa6\x9d\x04\xdf\xd8\x66\x1a\x23\x51\x51\x6c\xe8\x38\xf7\x2a\x34\x91\xc0\x59\x9d\xb6\x7f\xf9\xdd\x79\x65\xe4\x03\x5e\xc1\xfb\xfd\x76\x10\x87\x3b\x99\xe3\x10\x2f\x3b\x47\xb8\x5b\x85\x6f\xf1\xb9\x1b\xeb\xf6\x1a\x3c\x16\x6b\xe2\xb2\x7f\x0b\x94\xc0\xe8\x6e\x0d\xb5\x45\x79\x30\xa2\x07\x71\x1b\x86\x3a\x71\xf9\x96\xd6\x92\x4f\x90\x3f\xda\x18\xce\x50\xdf\xb2\xde\x8c\x46\x37\xb7\x4c\x7b\x1b\xf8\x76\x2f\x52\x7e\xbc\xa2\x83\x14\x92\xd9\x0f\x0c\x48\x2f\xcc\x2e\xf4\xdc\xd8\xa9\x48\xa7\xff\x13\x1a\x89\x92\x9c\xc0\xa6\x17\xc2\xb2\xe1\x52\x33\x17\xce\x2f\x91\x26\x8c\x58\xa2\x58\x61\x83\xd2\xcb\xb7\x6f\xa2\xfc\x34\x99\xf6\x04\x12\xe5\x88\xec\x76\x9d\xa3\x3e\xfe\x71\xae\x9f\xe1\xda\x41\xec\xa1\x05\xf0\xb5\x0e\x7e\x8e\xf4\xbc\x84\x7a\x90\x87\xc7\x91\x48\x23\x43\x42\x5d\x17\x4b\xec\x71\xe9\xeb\x12\x71\x2a\xde\x93\x93\xd8\x69\xb1\xfd\x33\xcc\xe6\x12\xff\xcd\xa5\xbe\xff\xa2\xed\x7d\x22\xdf\x77\x18\x47\x92\x69\xce\x6e\xd6\x72\x0c\xce\xc4\x25\xc2\xe7\xcf\x0a\x74\x45\x4d\x77\x90\xaf\xff\xfe\x37\xf2\xe4\x98\xba\x72\xb2\x9b\xf6\xf4\xfd\xbb\x0b\xd7\xee\x97\x2f\x2f\x48\x34\xa0\x6c\x2a\xe9\x00\xfd\x5e\x7c\x34\xa8\x64\x2e\xc6\x13\x37\x15\xf9\x33\xd0\x78\x06\xce\x40\x03\x2c\x7c\x41\x7a\x45\xbe\xc9\xfb\x46\x86\xfc\x40\x70\x3c\xf5\x46\xb4\xa6\x8c\xd4\x93\x6d\xa2\x7c\xe5\xd7\x6c\x47\xef\xc8\x22\xf9\x7a\x93\x2f\x15\x84\xc3\x16\x10\xd2\xe4\xf3\x7c\x93\x17\xb2\x7c\x2b\xb0\x2b\xe2\xdd\xad\x0b\x48\xe7\x2d\xb7\x35\x99\x26\xdf\x6a\x37\x4b\xd9\xf6\xf6\x52\x8e\xaf\xf2\x6d\x1e\xc9\x72\xad\x2c\x97\xe3\x63\xf6\xd1\xb6\x75\xc7\xf9\xcf\x51\xa0\x15\xf3\x38\x65\x9c\xd3\x49\xd8\x24\x8b\xe2\xe4\x5c\x3f\xc1\xb6\x51\xa8\xb2\x76\x0b\xfd\x84\x1d\xc5\x48\x4d\xec\x4a\xd9\x7f\x5c\x0f\xa7\x7c\x84\x69\x61\xdf\x25\x88\x37\x98\xeb\x34\x70\xd9\x54\xfa\x07\xd5\x10\xc1\xcc\xb9\x2e\x42\xda\x60\x8f\x35\x8a\x60\x8b\xe3\x77\x50\x48\xb4\x69\x5c\xf4\x90\xd2\x5a\xc7\x9b\xe9\xb8\x63\x1b\xb6\x1a\x55\x44\x11\x5d\x71\x6b\x62\x88\xb2\x98\x5b\x88\x6c\xce\x2d\x1d\xba\xd0\x93\xe1\xff\x05\x00\x00\xff\xff\x0a\x5b\x56\x5a\xfe\xbe\x00\x00") - -func asset_stat_trustlines_7HorizonSqlBytes() ([]byte, error) { - return bindataRead( - _asset_stat_trustlines_7HorizonSql, - "asset_stat_trustlines_7-horizon.sql", - ) -} - -func asset_stat_trustlines_7HorizonSql() (*asset, error) { - bytes, err := asset_stat_trustlines_7HorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "asset_stat_trustlines_7-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdb, 0xd4, 0x77, 0xbe, 0xee, 0xcc, 0x3c, 0xca, 0xea, 0xc4, 0xfa, 0xd4, 0x6b, 0xb3, 0x22, 0xf0, 0xab, 0x1e, 0x6a, 0xd8, 0x3f, 0x9f, 0x6b, 0x21, 0xf8, 0xd8, 0x55, 0xf2, 0xdf, 0x89, 0xa1, 0x4d}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6d, 0x3a, 0x55, 0x79, 0x80, 0xdc, 0x87, 0x4e, 0x2c, 0x66, 0x25, 0xc8, 0x9d, 0x9d, 0xf2, 0x1, 0xc9, 0x76, 0x42, 0x95, 0x6d, 0x48, 0x27, 0xe6, 0x15, 0xbb, 0x4, 0xab, 0x4e, 0xd4, 0xa4, 0x14}} return a, nil } @@ -590,7 +152,7 @@ func baseCoreSql() (*asset, error) { return a, nil } -var _baseHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x7d\x79\x6f\xe2\x48\xf3\xf0\xff\xf3\x29\xac\xd1\x4a\x99\x68\x32\x1b\xdf\xd8\x33\xbf\x79\x24\x03\x26\x10\xee\x2b\x24\x59\xad\xac\xb6\xdd\x06\x27\xc6\x26\xb6\x09\x30\xab\xe7\xbb\xbf\xf2\x05\xb6\xf1\x09\x64\x9e\x7d\xa3\xd5\x2c\xe0\xea\xba\x5c\x5d\x5d\x5d\x5d\xdd\xfd\xed\xdb\xa7\x6f\xdf\x90\x81\x61\xd9\x73\x13\x8e\x87\x1d\x44\x06\x36\x10\x81\x05\x11\x79\xbd\x5c\x7d\xfa\xf6\xed\x93\xf3\xbc\xbe\x5e\xae\xa0\x8c\x28\xa6\xb1\x3c\x00\xbc\x43\xd3\x52\x0d\x1d\x61\xff\xa4\xff\xc4\x42\x50\xe2\x0e\x59\xcd\x05\xa7\x79\x0c\xe4\xd3\x98\x9f\x20\x96\x0d\x6c\xb8\x84\xba\x2d\xd8\xea\x12\x1a\x6b\x1b\xf9\x89\xa0\x3f\xdc\x47\x9a\x21\xbd\x1e\xff\x2a\x69\xaa\x03\x0d\x75\xc9\x90\x55\x7d\x8e\xfc\x44\xae\xa6\x93\x06\x73\xf5\x23\x40\xa7\xcb\xc0\x94\x05\xc9\xd0\x15\xc3\x5c\xaa\xfa\x5c\xb0\x6c\x53\xd5\xe7\x16\xf2\x13\x31\x74\x1f\xc7\x02\x4a\xaf\x82\xb2\xd6\x25\x5b\x35\x74\x41\x34\x64\x15\x3a\xcf\x15\xa0\x59\x30\x42\x66\xa9\xea\xc2\x12\x5a\x16\x98\xbb\x00\x1b\x60\xea\xaa\x3e\xff\xe1\xf3\x0e\x81\x29\x2d\x84\x15\xb0\x17\xc8\x4f\x64\xb5\x16\x35\x55\xba\x71\x84\x95\x80\x0d\x34\xc3\x01\xe3\x3a\x13\x7e\x84\x4c\xb8\x6a\x87\x47\x5a\x0d\x84\x7f\x6c\x8d\x27\x63\xa4\xdf\xeb\x3c\xf9\xf0\x7f\x2e\x54\xcb\x36\xcc\x9d\x60\x9b\x40\x86\x16\x52\x1f\xf5\x07\x48\xad\xdf\x1b\x4f\x46\x5c\xab\x37\x09\x35\x8a\x02\x0a\x92\xb1\xd6\x6d\x68\x0a\xc0\xb2\xa0\x2d\xa8\xb2\xa0\xbc\xc2\xdd\x8f\xdf\x41\x50\x72\x3f\xfd\x0e\x92\x8e\x5d\xfd\x3e\x01\x3d\x6a\xe5\xa5\xf3\x18\x74\x0c\x39\x8b\x58\x08\xea\x80\xdc\x05\x6f\xf5\xea\xfc\x63\x08\xd2\x47\x6b\x9b\x6b\xcb\x16\x34\x55\x77\x58\xdb\x09\xf6\x6e\x05\x05\xc9\x90\xa1\xa0\x5a\xd6\x1a\x9a\xa5\x1a\x9f\xd0\xe4\xa0\x88\xbc\x66\x40\x86\x02\x54\x14\x28\xd9\x6e\x43\xc3\x94\xa1\x29\x88\x86\xf1\x9a\xdd\xd0\x52\xe7\x3a\x34\xc3\xb4\xb2\xe1\x0d\x45\xf1\xc1\x2d\xa8\x69\x4e\xc7\x76\x55\x5a\xa6\x51\x9e\x0a\x0e\xd0\x1a\xb0\x6c\x61\x69\xc8\xaa\xa2\x42\x59\xd0\xa0\x3c\x2f\xde\x56\x5c\xef\x0a\x72\xa7\xea\x32\xdc\x0a\x21\x33\xd4\x2d\xe0\xba\x24\x4b\x30\xf4\x5c\xcd\x47\x5b\x1b\x2b\x68\x82\x7d\x5b\xc7\x5a\xce\x68\x7d\xe0\xe4\x2c\x2e\xca\xb5\xf5\xb4\xec\x36\xb4\xe0\xdb\x1a\xea\x52\x29\x11\x42\xcd\x57\x26\x7c\x57\x8d\xb5\xe5\xff\x26\x2c\x80\xb5\x38\x11\xd5\xf9\x18\xd4\xe5\xca\x30\x1d\xc7\xe9\x8f\x7e\xa7\xa2\x39\x55\x97\x92\x66\x58\x50\x16\x40\x29\x5b\x0c\xfa\xf3\x09\xa6\xe4\x77\xe6\x13\x98\x0e\xb7\x04\xb2\x6c\x42\xcb\xca\x6e\xbe\xb0\x4d\xd9\x8d\x10\x04\xcd\x30\x5e\xd7\xab\x02\xd0\xab\x3c\x96\x3c\x28\xa0\x9a\x25\x11\x07\xc3\x63\xe1\x06\x8e\xab\x74\x7c\x46\x31\xd0\x00\xfd\x09\x4d\x0a\x79\xd7\xa0\x91\x3b\x08\x96\x20\x12\x1e\x34\xf3\x5a\xac\x9c\x06\x0b\x3b\xf7\x0d\x58\x11\x07\xe4\x0c\x5f\xf9\x2d\xfc\x7e\x5a\x04\xd8\xf0\xf8\x30\x72\x01\x55\xcb\x16\xec\xad\xb0\xca\x47\xe9\x40\x1a\xab\xa2\x90\xb0\x28\x58\x30\x9a\x66\x03\xc3\xed\x4a\x08\x47\x17\x05\xc7\xfb\x84\x66\x4e\x78\x91\xdd\x48\xdc\x15\x1a\x0c\x1d\xfd\xe6\x7a\xcc\xa2\x03\xbf\xc7\x64\x41\xa9\xf6\xc0\xf9\xb2\xec\xdd\x8d\xaa\x2b\x9a\x3b\x68\x09\x32\xb4\x6c\x55\x77\x3f\x17\x6c\xbb\x30\x96\x50\x90\x8d\x25\x50\x8b\xb6\x70\x26\x4c\xe1\x30\x53\x07\x4b\x58\x24\xcc\x0c\xc5\x67\x19\x61\x66\x38\x8a\x5b\x15\x0c\x60\xbd\xd0\x25\x03\xa9\x1f\xdb\x14\xc5\xf7\x0a\x77\xc2\x3b\xd0\xd6\x50\x70\xfc\x3a\xcc\x40\x1c\x83\x2c\x4c\x21\x21\x64\x12\x56\xc0\xb4\x55\x49\x5d\x01\x3d\x33\x0e\xcf\x6b\x5a\x9a\x87\x7d\xc8\x53\x96\x83\xe4\x86\xa5\xe9\xbb\x16\x5f\x84\x9e\x07\xf8\xe1\xf8\xbd\x1e\xe8\xce\x54\xbc\x8f\xee\xcc\xc5\x9f\xc5\xb9\x3d\x58\x28\xc8\xc1\xdc\x30\x57\xc2\x52\x9d\xfb\x11\x65\x06\x0b\x31\xc8\xc2\x32\xc6\x7c\x60\x06\x85\xb8\xb7\x2c\x4a\xa1\xfc\xe4\xb0\x30\xe6\xc0\xa1\xf8\x13\xa9\x2c\xf4\x31\xd0\xd2\x34\x8a\xe0\x2e\xcd\xb7\xe3\x08\x8b\x20\x76\x1d\x66\x16\xf6\xa2\x4e\xc1\x6b\x5d\xeb\x77\xa6\xdd\x1e\xa2\xca\x1e\xed\x3a\xdf\xe0\xa6\x9d\x49\x41\xdc\x29\x9d\xfd\x02\x98\xfd\x6e\x96\x8d\xc9\xfd\x96\x82\x28\xe4\xf9\xb3\x01\x3d\x6f\x9e\x0d\x13\x73\xcc\xd9\xc0\x49\x13\x58\xbf\xc5\x98\x1f\x4e\xf9\x5e\xed\x84\xb7\xe5\x0c\x8d\x16\x7c\x2b\x4d\x39\x82\xa4\x70\x6b\x39\x4f\x69\xc7\x13\xdc\xc2\x12\xa6\xf8\xf9\x32\xf2\x25\xa3\x28\xd6\xd6\x9f\x0a\x16\x03\xf6\xe7\x7d\x85\x65\xf3\x7d\x7e\x19\x59\xbc\x26\x05\x61\x7d\x1f\x50\x9c\x9f\x7d\x4c\x57\x80\xa3\xd8\xa8\x91\x0d\x1c\x1b\x00\xb2\x81\x8b\x03\xc6\x3c\x73\x41\x68\xc7\x25\x16\x03\xf5\xa1\xb8\xbb\xbb\x11\x7f\xc7\x4d\x12\x20\x97\xaa\x2e\xac\x4c\x55\x82\x5f\xf4\xf5\x12\x9a\xaa\xf4\xd7\xdf\xd7\x05\x5a\x81\xed\x09\xad\x34\x60\xd9\x5f\x80\xbe\x83\x9a\x9b\xf3\x2f\xd0\x42\x51\xcd\xc4\x26\x8d\x69\xaf\x36\x69\xf5\x7b\x19\xf2\x08\x60\x3e\x3f\x70\x77\x83\x1c\x31\x9a\x81\x23\x90\xee\x0c\x1c\x6e\x0a\xd1\x69\x7e\x60\xfe\x06\x29\x23\x88\x2b\x7a\x01\x0c\xfc\xe3\x84\xef\x8d\x63\x28\xb4\xd5\xdc\x7a\xd3\x82\x7e\x53\x6b\xf2\x5d\xee\x88\xc2\x8f\x4f\xde\x72\x4f\x0f\x2c\xe1\xf7\xe0\x37\x64\xb2\x5b\xc1\xef\x7e\x93\x1f\xc8\x58\x5a\xc0\x25\xf8\x8e\x7c\xfb\x81\xf4\x37\x3a\x34\xbf\x23\xdf\xdc\x55\xa0\xda\x88\x77\xde\x97\x8f\x39\xc0\xf7\x29\x82\x31\xfa\xd0\x47\x5c\xeb\x77\xbb\x7c\x6f\x92\x81\xd9\x03\x40\xfa\xbd\x28\x02\xa4\x35\x46\xae\x82\xf5\x9d\xe0\x37\xcb\x45\x72\x15\xa7\x1c\x88\xef\xd3\xdc\x6b\x28\x57\x9e\x88\x2e\x7b\xfd\x49\x4c\x9f\xc8\xac\x35\x69\xee\xd9\x0a\x2f\xf4\x44\xc8\x1f\xb0\xc4\x18\x29\x23\xfc\x11\x12\x57\x01\x83\xce\xed\x6a\x3e\x1e\x76\x90\x95\x69\x48\x50\x5e\x9b\x40\x43\x34\xa0\xcf\xd7\x60\x0e\x5d\x35\x14\x5c\x98\x0a\xb3\x9b\x6f\x68\x3e\xfb\x81\xad\x1e\xf8\x0f\xde\x6d\x92\x2e\xf7\x96\x9d\x8b\x1f\x19\xf1\x93\xe9\xa8\x37\x0e\xfd\xf6\x09\x41\x10\xa4\xc3\xf5\xee\xa6\xdc\x1d\x8f\xb8\xd2\x77\xbb\x53\xcf\xd9\x8d\x27\xa3\x56\x6d\xe2\x42\x70\x63\xe4\x0f\xe1\x0f\x64\xcc\x77\xf8\xda\x04\xf9\x03\x73\xbe\xc5\xdf\x46\x6e\x47\x3c\x4f\xba\x3c\xf4\x17\x13\x0e\x4f\x12\xae\x88\xa7\x3a\x4f\xbe\x02\x14\xf6\x22\xee\x7f\x3a\x49\xc2\x2f\x9f\x10\xa4\xc6\x8d\x79\x64\xd6\xe4\x7b\xc8\x1f\xd8\x5f\xd8\xdf\xb7\x7f\x60\x7f\xe1\x7f\xff\xe7\x0f\xdc\xfd\x8c\xff\x85\xff\x8d\x4c\xbc\x87\x08\xdf\x19\xf3\x8e\x52\xf8\x5e\xfd\x3a\x51\x33\x05\xc6\x81\x33\x35\x93\x4f\xe1\xa3\x35\xf3\x7f\xa7\x68\xe6\x78\x4c\xf5\xf5\xb0\x1f\x87\x8b\x29\xe2\x30\x6c\x1f\x61\x74\x39\x46\x90\xb1\xa3\x2b\xe4\xe7\xc1\x03\xdc\x78\x3f\x4f\x9e\x06\x3c\xf2\x33\xdc\x23\xae\x93\x7a\xed\x45\x79\x8c\x23\x8c\xb1\x18\x74\xe3\xe2\x1c\x26\x86\x40\xe7\x72\x99\x84\x34\xc6\x69\xa4\x43\x46\xd9\x3d\x58\xd9\x31\xb7\x49\x61\xde\xd9\xdc\x26\x20\x8d\x73\x1b\xee\x24\x99\xdc\x3a\x23\x97\x0c\x15\xb0\xd6\x6c\xc1\x06\xa2\x06\xad\x15\x90\x20\xf2\x13\xb9\xba\xfa\x11\x7d\xba\x51\xed\x85\x60\xa8\x72\xa8\x66\x23\x22\xeb\x3e\xf8\xf5\xe5\x73\x7b\x57\x31\xd9\xbc\x8e\xb8\xcf\x7b\x78\xb2\x1c\xb2\xb5\x88\xb4\x00\x26\x90\x6c\x68\x22\xef\xc0\xdc\xa9\xfa\xfc\x0b\x45\x5f\xbb\x91\x42\x6f\xda\xe9\x78\xf2\x89\x40\x03\xba\x04\x11\x51\x9d\xab\xba\x1d\x7f\xe8\xad\x0e\x6b\x2a\x10\x55\x4d\xb5\x55\x68\x25\xc3\x05\x8b\xdc\x05\x00\xbd\xb5\x52\x41\x5f\x2f\x45\x68\x26\x03\xe9\xeb\xa5\x60\xad\x45\xa8\xdb\xa6\x83\x48\xd5\x6d\x38\x87\x66\x0c\x28\x31\x0f\x5e\x48\x62\x45\x03\xf3\x34\xac\xa1\x0c\x79\x02\x2e\x02\x8f\xe3\x5a\x02\xcb\x86\xa6\xb0\x81\xea\x7c\x61\x23\xd6\x12\x38\x7a\x88\xcb\x63\x2f\x4c\x68\x2d\x0c\x4d\x16\x34\x63\x93\x0f\xb4\x84\xb2\xba\x5e\xe6\xc3\x2d\xd4\xf9\x22\x0d\x2a\xa9\x24\xe0\x48\xe4\xe3\x7e\x17\x9d\xb3\x9d\x6b\x90\x5e\xd2\xcc\xb3\x4a\x7f\xc9\xeb\x15\xee\x12\xf4\x8a\x51\x68\x5c\xb1\x25\xad\x58\x07\x4b\x98\x00\x48\x93\x71\x40\x37\x4f\x94\x00\xc9\x1e\x71\x70\xae\x0a\x83\x49\xf2\xd9\x5a\x0c\x52\xa6\x05\xba\xf7\xb1\xbc\x5e\xe3\x42\xa0\xbe\x11\x27\x77\x0c\x6b\x65\xe8\x96\x91\x84\x88\xa2\xaf\x5d\x2d\xf8\xcc\x7b\x2b\x4a\x47\x49\x5c\x71\x27\x04\x28\xfa\xbd\x63\xd9\xa6\xe3\x56\xef\x0e\xa9\x4e\x46\x3c\xff\xc5\x87\x3b\xd6\x6c\x28\x4f\x71\xb2\x52\x43\x19\x6e\x4f\x9f\xaa\x9c\xec\x84\xc0\xd2\xe1\xf0\x58\xde\x04\x5f\xb5\x77\xc0\xc9\xaa\xf3\xfc\x4d\x5a\x77\x36\x96\x5a\x82\x52\x71\x8a\xba\xce\x30\xb2\x78\x7e\xe7\x54\x75\xc4\x97\x14\x7c\x13\xdb\xaf\x84\xa4\x48\x74\x58\x35\x49\xea\xcc\x47\x4e\x32\xbc\x9c\x52\xa8\x37\xfb\xba\xb7\xe1\x36\x69\x68\x48\x55\xf7\xb1\x9e\xe2\x49\xb3\x53\xf5\x14\x5f\xdc\xd9\x9b\x4e\x02\x8b\x60\xb5\xd2\x54\xb7\x86\x05\xb1\xd5\x25\xb4\x6c\xb0\x5c\x21\x4e\x10\xe0\x7e\x45\x7e\x19\x3a\x3c\x66\x34\x2d\x25\x18\x24\x38\xfc\x5c\x62\x31\x9e\xf7\x99\xc7\x14\xac\x7e\x5c\xc3\x8d\x26\x5e\x8a\x00\x73\x7f\x68\xf5\x6a\x23\xde\x9d\xcf\x57\x9f\xfc\x9f\x7a\x7d\xa4\xdb\xea\x3d\x70\x9d\x29\xbf\xff\xce\x3d\x1e\xbe\xd7\xb8\x5a\x93\x47\xb0\x3c\x61\x4e\x56\x7b\x1c\xd1\x51\x97\xf5\xd7\x1a\x10\x1d\x6e\xed\x77\xa0\x7d\xb9\x4a\x91\xf8\xea\xfb\x77\x13\xce\x25\x0d\x58\xd6\x91\xad\x79\xb5\x3b\xc9\x1e\x32\x78\x51\x7b\x4e\x24\x0d\xa8\x4b\x27\xdc\x13\xfc\xb8\xc9\x42\xbe\x2c\x81\xbe\x06\x9a\xb6\x73\x50\x41\xf9\x3a\xf5\x2d\x1c\xb7\xfd\xb8\xf7\x91\xa8\xc6\x24\xe6\x53\x7c\x60\xba\x66\x53\xa5\x08\xeb\xd8\x53\xed\x11\xa8\x10\xef\x31\xe1\x81\x63\xda\x6b\x0d\xa7\xc1\xf8\xf1\x39\x5a\x6c\x95\x40\xd4\x2d\xd8\xfa\xec\x0c\x26\x19\xe2\x79\xc3\x8a\x68\x9b\x10\x22\x5f\x54\xf9\xfa\xc7\xe9\xc4\x92\x84\x29\x45\x3e\x09\xc1\x75\xda\xab\x3a\xac\xa1\xa4\xbe\xb4\x63\xd0\xb4\xa1\x2c\x95\xc3\x84\x16\x45\xdf\x48\x16\x83\xde\xbb\xb1\x22\xda\xc9\x14\x28\xa2\xa7\x44\xb9\x6e\x32\x85\x38\xbc\xd7\x93\x78\x0d\x53\xba\x20\xd3\xa9\x2f\x37\xbc\x00\x98\xfb\x7a\xa3\xe5\xad\xbf\xef\x05\x67\x33\x99\xf4\x8a\x73\xc4\x4a\xd4\x57\x4c\xba\xb3\x5e\x73\x3e\xc7\x51\x6a\x17\x66\xde\x1d\x2a\x5a\xbd\x31\x3f\x9a\x20\xad\xde\xa4\x9f\xe5\x18\x5c\x97\x3d\x46\xbe\x60\x37\xc8\x15\xea\xff\x61\x15\x86\xc1\x69\x45\x54\x20\x41\xb0\x10\x53\x28\x89\x22\x48\xac\x22\xd1\x0a\x94\x15\x88\x4b\x28\x05\x19\x11\x4a\x18\x49\xa0\x04\x46\x12\x50\x22\x69\x91\x60\x58\x06\x13\x51\x56\x22\x14\xf6\xea\xfa\xc7\x27\x3f\x03\x77\x48\x9e\xff\x69\xc1\xa2\xee\xfb\x06\xc1\x6e\x10\xdb\x5c\xc3\xeb\x1f\xce\x88\x37\x59\x40\xe4\xb0\x7e\x7c\x1b\x5e\x2e\x47\x80\x09\x91\xb9\xe1\x04\xc3\xb6\x81\x88\x10\x59\xeb\x26\xd4\x80\x0d\x65\xe7\xfb\x9e\x42\x90\x5a\xb0\x6e\x10\x71\x6d\x23\xaa\x8d\xc8\x06\xb4\xf4\x2b\x1b\x59\x02\xdb\x19\x68\x15\xc3\x44\x6c\x77\xf2\x3e\x4f\x54\x5c\x66\xf7\xdb\xab\x10\x67\x18\x92\x45\x29\x96\xa1\x6e\x10\xec\xfa\xc7\xe9\x98\x18\x8a\x61\x59\x82\xa1\x19\x36\x1d\x51\x8e\x99\x1c\x33\x45\x9e\x8d\x6b\xcf\x16\xe3\xa1\x4a\x0e\xb5\xbc\x75\xea\xb3\x03\x2d\xaf\xae\x63\x1f\x15\x64\x85\xff\xee\xfc\xa0\xc8\xbc\xf2\xe3\x66\x0b\x19\x71\x74\x64\xa9\xff\x42\x51\x74\x18\xe7\x6f\x8b\xa1\xb3\x04\x41\xfa\xb3\x1e\x5f\x47\xaa\x4f\x39\x12\x79\x75\x3a\xd9\x02\xed\x71\xc5\x1e\xff\xa9\xca\x69\xbc\x05\xf5\x17\xe7\x5a\x9d\x8f\x27\x36\xf0\x85\x12\x1d\x99\x83\x5e\x7e\xfc\xf3\xd9\xad\x4b\xfe\x9c\x62\xcd\x19\xf3\x5c\x19\xda\x40\xd5\x2c\xe4\xc5\x32\x74\x31\xdd\xd8\x82\xa2\x95\x73\xf5\xe0\xe3\xf1\xf5\x10\xa4\x4a\x53\x78\x0b\xed\xf5\x28\xd4\x0b\x93\xb6\x99\x24\x37\xf4\xd5\x12\xf6\x4e\xee\x74\x3c\xe0\x23\x98\x1a\xa0\x31\x0a\x21\x27\x5b\x08\x7e\xbf\xd7\x23\x36\x4f\x36\xd6\xf6\x61\xaa\x1c\x6f\x63\x42\x67\x9c\xc9\x69\xe4\xc1\xae\x57\x72\x61\xd8\xbd\xe9\xf8\x5f\x63\xdb\x60\x8e\x64\xc1\x8e\xd2\x38\x36\xd0\x04\xc9\x50\xf5\x94\xc4\xb7\x02\xa1\xb0\x32\x0c\x2d\x25\xcf\x0e\x2c\x28\x28\x30\xed\x5d\xbb\x8f\x4d\x68\x41\xf3\x3d\x0d\x64\x09\xb6\x82\xbd\x15\xdc\x54\x8e\xfa\x2b\x0d\x6a\x65\x1a\xb6\x21\x19\x5a\xaa\x5c\xf1\x77\x14\x18\x0b\x04\x32\x34\xdd\xb9\x9b\x9f\x0e\x5c\x4b\x12\xb4\x2c\x65\xad\x09\xa9\x86\xe2\x0b\x0e\x54\x0d\xca\x79\x50\x3e\xeb\x29\x26\x94\xde\xf5\x52\x6a\xcd\xce\xed\x89\x29\x95\x93\x39\xe3\x62\xf9\x19\x59\xba\x8f\x2b\x2b\xf2\x65\x87\xba\x4c\x1a\xbf\x6b\xe8\x2b\x25\xe8\x99\x43\x61\x26\xad\xe3\xa1\x31\x19\x3c\x63\xa8\x0c\x55\x62\x5e\xcc\x36\xf3\x32\xd8\x45\x66\x8e\x6e\xb2\x52\xf2\x44\x71\x47\xc9\x33\x07\x49\xdf\x3b\x18\x6b\x53\xda\xef\xb4\x4a\x19\x9e\x02\x97\x73\x75\xf5\xfd\x7b\x7a\x96\x3d\xbd\x1f\xf8\x85\xb0\xe7\xaa\xd3\xdf\x78\x5d\x36\xa7\x92\x1d\x53\xf8\x6e\xf3\x94\x11\xce\x2d\x78\x4e\x25\x1b\xdb\xf6\x9d\x05\xe4\xef\x44\xcf\x02\xf1\xd2\xec\x89\x00\xc7\x1b\xe8\x73\xe0\x32\xc9\xed\xa1\x32\x28\xba\x2c\xa9\x96\xbf\xf7\x19\x11\x0d\x43\x83\x40\x0f\xc6\x2d\x55\x82\x82\x1e\x19\xa3\xbd\xdf\xa2\xe3\xf6\x61\x43\xa0\x10\x1b\xd1\x23\x5b\x12\xe3\x0f\x43\x25\xfd\x89\xdb\xec\x5d\xae\x05\xf7\x20\x06\xa4\xd6\xe4\x6b\x6d\xe4\xcb\x97\xb0\x06\xff\xf3\x13\x41\xaf\xaf\xf3\x70\x25\xb5\x0f\xb4\xf6\x7f\x47\x8a\x2c\x80\x2f\xa2\xd4\x18\xfa\x98\xc6\x3d\x0e\x33\x3b\x53\x72\x4d\xfa\x05\xba\x57\xf2\xfe\x86\x82\x63\x69\x99\xf4\xd7\x29\xa3\x69\x5e\x45\xff\x65\xc6\xd3\x1c\x2a\xbf\x6b\x44\x2d\x29\xec\x99\x63\x6a\x0e\xb5\xe3\x51\x35\xad\x41\xc6\xb8\x1a\xd9\xc5\x71\xaa\xad\x66\xec\x0c\xf1\xcd\x34\xcc\x59\xe1\x19\x97\x3f\x08\xe4\xcc\xe3\x8a\x8e\xc0\xd9\x83\x69\x72\xf1\xc4\x9e\x74\x62\xb7\x71\xa6\x0c\xe9\x73\x8e\xb4\xd9\xdc\xff\x64\x3e\x66\x6f\x05\xa8\xbf\x43\xcd\x58\xc1\xa4\x25\x57\x7b\xeb\xcc\x8e\xd6\x5a\xe2\x92\xb1\xbd\x15\x96\xd0\x06\x29\x8f\x9c\x79\x59\xda\x63\x4b\x9d\xeb\xc0\x5e\x9b\x30\x69\x75\x90\xa5\xaf\xff\xfa\xfb\x10\xc4\xfc\xf3\xdf\xa4\x30\xe6\xaf\xbf\xe3\x3a\x87\x4b\x23\x25\x73\x76\xc0\xa5\x1b\x3a\xcc\x0c\x8a\x0e\xb8\x8e\xd1\xf8\x92\xa9\x4b\x28\x88\xc6\x5a\x97\xdd\x65\x72\xc6\x04\xfa\x1c\xc6\xa7\x6e\xd1\x31\xd6\xd1\x84\x83\x6d\x0e\x63\x73\x61\x5d\x87\xa6\x50\xac\x07\x1c\x30\x65\x9a\x6b\x18\x71\xbe\x92\xfd\x95\x7f\xb8\x11\x02\x8b\xf5\xd8\xfb\x14\x4f\x86\xc6\xf7\x81\x9d\xea\x0f\xe2\x5b\x82\x3d\x1f\x90\x5c\xba\x14\x29\xd4\xc8\x2e\x31\xca\xa9\xe9\xf0\x77\xba\x9d\xca\xb4\xbf\x2f\x3a\xc8\x1d\x39\x31\x54\xd1\xe2\xa9\xec\x90\x33\x72\x80\x4d\x52\x37\x09\x1f\x21\x93\x58\x10\x91\x11\xf4\xb9\x41\x9c\x9e\x9a\xad\x50\x25\x98\x16\x20\xb8\x0f\x11\xd9\x58\x8b\x1a\x44\x56\x26\x94\x54\x37\xa1\x51\xbc\xd4\xef\xc4\xfa\xae\xf0\xce\xc5\x53\xdf\x55\x78\x77\xfc\x6f\x29\x8f\x2b\x58\xd1\x53\xa6\x44\xa7\x5c\x52\x3f\xb3\xca\xf4\xa0\x0e\x41\x53\x97\x6a\xda\xfc\xe0\xd2\xb5\xa8\x1f\x60\x1c\xb1\x75\x14\x55\x0e\x4c\x24\xd8\x14\x5b\x24\x90\xf2\x6c\xc4\xdd\x85\x9c\xb3\xdf\x76\xcc\x4f\x32\x4a\x60\xc2\xd9\xfd\x70\x71\x46\xb9\x7c\xcb\xe5\x84\x28\xb8\x1d\x39\x53\xa8\xcc\x3c\x4d\x11\x21\x53\xe7\x23\x17\x13\xb3\xf0\x8e\xee\x4c\x41\x73\x82\xe7\x64\x51\xeb\xc0\x06\xee\xaa\x6a\x46\x65\x39\x52\xe7\x26\x5c\x8e\x6c\x39\xf8\x8e\xab\x83\x2f\x81\x34\xa9\x5e\xf6\x1c\xbc\x29\xe5\x91\x67\xa0\xcc\xaa\xba\x3c\x03\x6d\x56\x91\x62\x11\xb4\xe1\xb5\xe5\x78\xa1\x62\xb0\x88\x7c\x85\x09\xaa\xae\xda\x2a\xd0\x04\x6f\x17\xe2\x9f\xd6\x9b\x76\x75\x83\x5c\xe1\x28\xc6\x7e\xc3\xd0\x6f\x04\x86\x60\xe4\x77\x8c\xfd\x4e\xb2\x7f\xa2\x04\x43\x10\x5f\x51\xec\x2a\xb6\x70\x9d\x8a\x1c\x17\xbc\x4a\x8c\x88\xa1\x8a\x3b\xc1\x36\x54\x39\x93\x10\x89\xd3\x95\x32\x84\x08\x61\x6d\xc1\xfd\xb4\x46\x50\xf5\xa3\xe3\xb8\xb2\xc9\x51\x2c\x4e\x97\xa1\x47\x0a\x40\x96\x85\xf8\xaa\x49\x26\x0d\x8a\xc4\xc8\x52\x32\x51\x82\x37\x89\x0a\xd2\x3a\xee\x6e\x92\x4c\x12\x34\xc6\xa0\x64\x19\x12\x74\x40\xc2\x1f\x13\x0a\x90\xa8\xa0\x6c\x29\x13\xa8\x78\xa3\xe5\xae\xb8\x14\x0c\x86\x96\x53\x14\xe3\xbe\x0c\x30\x9f\x9b\x70\x0e\x6c\xc3\xcc\x7e\xd7\x0c\x85\xe1\x4c\x39\xf4\x61\x25\xf9\xe7\x9b\x14\x10\x83\xa5\x2a\xa5\x5e\x06\xeb\x8a\xe1\xad\xa8\x09\x5b\xd9\xcc\xc4\xce\xe2\x04\x5d\xca\x62\x31\xd4\x45\xef\xbf\x05\x37\x48\xce\x26\x40\xd1\x15\xac\x14\x01\x2c\x4c\x60\x1f\x87\x3a\xfd\x3f\x9b\x10\x8b\x33\x6c\x29\x42\x78\xe4\x4d\xf8\x59\x4e\xef\x7c\xdc\x2c\x4a\x18\x4a\xb1\x74\x39\x91\x08\x4f\x9c\x7d\x72\x38\xd3\xb2\x30\x0c\xab\x50\xa5\x0c\x17\x23\x05\x45\xdd\x06\x07\x0c\x19\x4b\x4d\x50\x54\xa8\x65\x7a\x46\x0c\x23\x2a\x44\xb9\x17\x4f\x05\x2b\xfb\xc1\x8a\xeb\x36\x47\x0c\x8a\xaa\x94\xea\x20\x18\x2d\xa8\xfa\x1c\x5a\xb6\x70\xbc\xa6\x9b\x43\x8a\x66\xcb\xf5\x45\xac\x12\x09\x80\xdc\xc5\x73\x90\x3d\x96\x60\x18\x43\xd1\x78\x29\x22\xcc\xde\x7c\x15\xc3\x0c\xe2\x8f\x4c\x1a\x38\xc1\x10\x54\x29\x1a\xac\x67\x54\xd9\x68\x09\x02\x43\x4b\x59\x14\x8e\x26\xb0\x9e\xdf\x09\x31\x82\x22\xd9\x52\x9d\x10\xc7\x82\x9e\x6e\xc2\xa5\xf1\x0e\x85\x5f\xd0\x34\xf6\x2b\x0e\x86\x6e\xd9\x26\x50\x73\x86\x5d\x8c\x60\x50\xa2\x54\x87\xc4\x71\x21\x34\x45\xce\xc4\x4d\x92\x15\xb4\x94\x69\xe1\x84\x10\x8b\xe3\x32\xf1\x53\x38\x5e\xca\xa8\x70\xb2\x50\x28\x82\xd1\x28\x43\x96\x1a\x36\x70\xca\xe1\xdb\xef\x80\x26\xd4\xc1\x12\x0a\x92\xa1\xad\x97\x39\x7d\x8f\x26\x2a\x58\xb9\x18\x8b\x08\xde\xf5\x5a\x5f\x5b\x30\xd6\xe9\xb0\x6f\x04\x8a\x60\x68\x18\x7b\x29\xf5\x13\xa4\xdb\x9b\xc5\xf5\x72\x95\xe1\x3f\x3c\x2a\xd8\xe9\x54\x28\x41\x36\x8d\x55\x38\x20\x15\xe2\xee\xc3\xa3\x11\xd6\x53\x39\x1f\x45\x54\xbc\x81\x30\xb1\x72\x45\xb0\x8d\xa0\x9c\x2b\x89\x2a\x7e\x32\x55\xd2\x1b\x7e\xfd\x3d\x72\x0e\x19\xf7\x50\x7a\x7f\x0f\x72\x12\x2d\xe2\x64\x2d\x92\x94\x4b\x2b\xa1\x64\xd8\x8f\xba\xf3\x14\xba\x27\x97\x32\xf3\xc9\xdc\x28\x54\x76\xea\x73\xb4\x59\x28\x5c\x64\x7d\x57\x7b\x6c\xdf\xd1\xa3\x1e\xd9\xef\xb5\xf8\x41\xad\xdb\x6b\x54\x2b\x04\xce\x91\x04\xfd\x4c\x0d\x7a\xf5\xf1\xa8\x73\x37\x6b\x57\xee\xaa\x9d\x5a\x77\xd8\x69\x35\xfa\xe4\xb8\xc2\x3f\xcd\x1e\xa6\x71\x5d\xa5\x12\xc1\x1d\x22\xd5\xc7\xbb\xe1\xfd\xec\xa1\x33\xeb\x3f\x35\x1b\x9d\x87\x49\x7b\xf6\x40\x35\xee\x9a\x1c\xd1\xe9\x3d\x3d\xe1\xf7\xc3\x76\xb7\xd2\xe7\xee\xb9\x29\x3f\x6c\x4c\xe9\xce\xa0\x36\xe6\x1b\x0f\x8f\xfd\x5e\x61\x22\x84\x4b\x64\x34\x78\x6a\xb6\x3a\x78\xad\x45\x34\x7a\x43\xb2\xfa\xd8\x69\x74\x7b\xf5\x4e\xe3\x7e\xda\x1b\x4c\xf1\xe6\x13\xf1\xdc\x6d\x8c\x9b\xfd\xde\xb4\xc6\xf7\xb9\xf1\xac\x32\xac\x55\xfa\x8f\x78\xb3\x30\x11\xd2\x21\xc2\x51\xb3\xea\xe0\x89\xa3\x9e\xc8\x19\xc7\x37\x1f\x67\x23\x7c\xda\xee\xe3\xd3\x3e\x59\x9d\xde\x35\xa7\xc3\x0a\xc9\x4f\x07\xed\x7e\x0f\x1f\x36\x1f\xc8\xd9\xa8\xd9\x6f\x8d\x7a\xed\x76\x13\xbf\x3a\x75\x63\x1b\x32\xe6\xf3\x12\x2e\xf9\xb5\xed\xf1\x4d\x5f\x37\x08\xb9\xaf\x68\xcf\xb3\xc0\xe3\xfa\xe9\x32\x33\xfa\x32\x35\xbb\x17\x91\x34\x92\xdb\x73\x2b\xf7\xdd\xa3\x05\xf2\x05\x4d\xaa\xd9\x3d\xb5\xa7\x05\x75\xbb\xa1\x3e\x10\xad\xc6\xbf\x41\x9c\x6e\xf1\xcf\x67\x2f\x5e\xf8\xfc\x1d\xf9\x4c\xfd\xe9\xef\x76\xf8\x7c\x83\x7c\x3e\x64\xa5\x9d\x47\x3a\xb0\xd5\x77\xf8\xf9\xbf\x69\x86\x1a\xa7\x86\xc5\xa8\xe1\x37\x08\xf1\xa1\xd4\x22\xfb\x03\x6e\x10\xd4\x25\x66\xd9\xce\x10\xa3\xcf\x03\xdf\xe8\xe0\xc6\x50\x74\x4f\xb8\x30\x01\x22\x4a\x20\x41\x9a\x30\xda\x4b\xcb\x43\xdc\x20\x98\x27\x90\xb7\x0b\xfc\xf3\x77\x47\xc4\xcf\x9e\x29\x08\xaf\x70\xe7\xd0\x38\xd5\x89\x16\xe7\x8a\xf4\xb9\x22\xf1\x8a\x6f\x40\x1f\xa4\x65\x9f\xc0\x47\x6b\x39\x26\x4f\x31\x2d\x9f\xe8\x7b\x8b\x73\x85\x07\x5c\xd1\x0c\x83\x7d\xa8\x96\x3d\x02\x1f\xad\xe5\x98\x3c\xc5\xb4\x7c\xe2\x58\xed\x71\x95\xe3\x64\x93\x36\x04\x9c\xea\x64\x83\x4d\x01\xe1\x18\x80\xa2\x00\x8b\x89\x14\x4d\x33\x12\x09\x01\x4b\x89\x12\xab\xa0\x0a\x4a\x92\x40\x54\x70\x89\x40\x25\x82\xa1\x81\x2c\x33\x95\x0a\x81\x42\x11\x52\x34\x29\xca\x14\x25\xa3\x2c\xa0\x65\xa5\x82\x29\x4e\xcc\xc6\x8a\x15\x89\x11\x15\x80\x01\x56\xa2\x08\x0c\x13\x19\x9c\x46\xd1\x8a\xc2\xa2\x8a\x58\xa1\x68\x20\xa1\x24\x01\x65\x8c\xc4\x71\x40\x48\x38\x8b\xa3\x0c\x23\xe1\x04\x06\x68\x1c\xa5\x21\x4d\xa3\xde\xa8\x83\xc5\xa6\x1d\x5e\xb0\x49\xc7\x67\x23\x41\x0c\x4a\xb0\x24\x43\x93\xb9\x4f\x7d\xbf\x8e\x31\xee\x9e\x27\xda\x79\x9f\x47\x7f\x37\x08\xe9\xfc\x83\xf9\xff\x04\x3f\x62\xfb\x0f\xce\xd0\xc3\x71\x1c\x57\xbf\xb7\x19\xf5\xd6\x00\x7a\xa3\x3b\x5a\xd7\x9e\x38\x85\xaa\x57\xe4\x99\xc9\x0d\xbf\xa2\xd3\xd6\xdb\xa0\xf6\x3a\x57\xbb\xad\xed\x4a\xad\xae\x9f\xe7\xe3\x01\x06\xba\xc6\xe0\x69\x45\xbc\xd5\xc6\x35\xe5\x19\xab\xbe\xcc\x66\x5b\x7d\x67\xd9\x8a\xb9\x33\x87\x7a\x8f\x52\x20\xf3\xf4\xfc\x8c\x6d\x25\x07\x35\xf7\x28\x9a\x8a\x34\x77\x3e\xb5\xf6\xff\x70\x43\xe7\x9f\xcd\xe1\xfb\x86\x1b\x0c\x5f\xdd\x4f\x5c\xa3\xdb\xbe\x7f\x07\xf4\x70\xd9\xd7\xea\x1d\x1b\xbe\x3c\x89\x8b\xd5\x53\xab\x32\x9e\xb6\xfb\x0a\xbc\x17\x5b\xf2\xeb\xdb\x0b\xbb\xe9\x63\x9c\x6d\xde\x2a\x4c\x97\x17\x8d\x96\x2a\x6d\xc8\x5a\x95\xdb\x61\xb4\xbd\xb4\x67\x77\x0d\xb1\xd9\x5c\x83\x0d\x5f\x59\x3c\x32\x2d\x9e\x68\xfc\x7a\x54\x5d\xfa\xdd\x1e\xd9\x01\xbf\x56\xf8\x90\x3b\xfc\xdd\x85\xbf\xec\xff\x9e\xb9\x47\x8c\x1c\x72\x5c\x1d\xbd\x4f\x7a\xfc\xaf\xfe\xbb\x0a\xbc\x55\x6f\xda\xe9\xa4\x78\x87\x78\x87\xc1\x2f\x63\xec\x57\x34\x21\xb3\x8c\x42\x11\x34\x84\x34\x23\x63\x22\x5e\x11\x29\x91\x61\x15\x9c\x00\x8a\x8b\xb3\x42\xd1\x2c\xc0\x49\x05\x28\x18\x89\x12\x40\x46\x45\x0a\x17\x69\x82\x10\xd1\x8a\x08\x59\xf6\xca\xf5\x4c\x44\xa2\xed\x53\x69\x5d\x82\x44\x59\x1a\x25\x72\x9f\x7a\x43\x39\x49\xb1\x78\x46\x7f\x21\x52\xfa\x8b\xe7\xfe\x5d\xfd\xde\x0d\x9e\x5f\xb0\xde\x9a\x32\x50\xf1\xbe\x32\x23\xf5\x5d\xff\x7d\xba\xbd\x23\x1e\x56\xc6\xeb\xd7\xf7\x06\xd7\xb7\x6b\x58\x1b\xef\x56\xaa\x15\xfa\x59\x5b\xf2\x72\x7f\xf5\x50\xeb\x52\xcd\x8e\xc9\x36\x7a\x2f\x14\xf5\x06\xe8\x0d\xde\x6c\x77\xed\xb7\xc9\xa0\xd1\x79\xbf\x63\x76\x83\xe9\x2d\xe0\x0c\x17\xb5\xdb\x55\x42\x06\x39\x9a\x72\x0f\xdb\xfb\x25\xa6\xd5\xbb\x9b\xcd\xdb\xfa\xa5\x2d\xed\x86\xbf\x2c\xb6\xd2\xb8\xe5\xf8\x89\x5a\x9b\x0f\x07\xe6\x86\x26\x36\x6f\x60\x70\xd7\xb7\x5f\xd0\x87\x37\xf8\x52\x1b\xdd\xe9\x0c\x47\xb6\x37\xf7\xba\x5a\xd1\xdf\x20\x58\xdf\xa2\xfc\x62\x71\x7b\xf7\xca\xec\xf8\xfa\xb2\xa2\x37\xbd\xae\x98\xd0\x15\x78\x2b\xc9\x9c\x82\xae\xc0\x71\xd5\xd7\x0f\xb5\xdb\x0f\xf8\xf3\xcc\xa9\x5c\x57\xc0\x2e\x63\xc6\x6e\x99\x04\xe2\xdb\x0d\xc6\x56\xd0\x6f\x28\xf6\x0d\xc5\x10\x14\xfd\xee\xfe\x97\x6a\xae\x38\x46\xe3\x78\xee\x53\x12\x67\x49\x96\xae\xe0\x2c\x9d\x61\xcc\xb9\xa6\xfc\xaf\xfc\xab\x3e\xb6\x55\x72\x77\xbb\x1b\xb7\xab\x95\xba\x5e\x67\x9b\x38\xba\x7d\xa9\x7e\xb5\xd0\xb9\x6d\x6d\x5a\x9b\x5f\xd8\xa3\x3c\x9e\x3d\x81\xea\x3d\x68\xb8\xa6\xcc\x27\x98\x72\xf2\xdf\xff\xe7\xa6\x8c\x86\x4d\x39\x27\xba\x2a\xb0\xe7\xeb\xd4\x60\x2b\xa5\x44\x25\x6d\xca\x99\xbf\xdd\x3c\x11\x4d\x7c\x9e\x8c\x9f\x86\x26\x36\x63\x24\x4e\xc3\x42\xc6\x26\xb6\xa7\x61\xa1\x62\x13\x9d\xd3\xb0\xd0\x51\x2c\xe4\x69\x58\x2a\xb1\xe9\xc0\x69\x58\x98\xd8\x1c\xe6\x32\xfb\xf1\x2e\x92\xfd\xc9\x2e\x82\xba\x41\x98\xa2\x59\xaf\x94\x5d\x69\x67\xf7\x9e\xb4\xd3\x19\x22\xa7\x22\x78\x93\x87\x7f\x3e\xdb\xc6\x59\xf3\xb1\x1b\xe4\xb3\x62\x1a\xcb\xb3\xf2\x13\xce\x0c\xb4\x54\xd2\xe8\x03\x32\xca\x09\xca\x0b\xf7\xcb\xc8\x29\x10\xc1\x84\x5d\x59\xeb\x32\x34\x3d\xf5\x9d\x96\x15\x76\x65\xf4\xd2\xa6\xe7\x6a\x30\x3f\x7b\xf0\x01\xd9\xeb\x34\xad\xf9\x1e\x64\xff\x99\xfc\x50\xad\x9d\x9a\xb1\xf9\xd7\x69\xcd\xf3\x75\xfb\xcf\xe8\x87\x6a\xed\x8c\x1e\xff\xe1\x5a\xcb\x71\x9c\x09\x7b\x4f\xcf\x28\x00\x2c\xb5\x09\xef\x54\xe7\x9c\x5a\x96\x9a\x18\xdc\x14\x3c\xb6\x26\x3f\xbc\x21\xd3\xc3\x9b\x5c\x44\x44\xd4\xed\xa5\x0d\xe4\xb9\x78\xc8\x98\xfb\x3c\x15\x4f\xcc\xa1\x9c\xcc\x0f\x1d\xc5\x93\x16\xe6\xe4\xe2\xa9\x44\xbb\xea\xc9\xfc\x30\x51\x3c\xe9\xa1\x4e\xd9\xfd\x83\x97\x08\x76\xf2\x0a\xa1\x4b\x84\x3b\xa9\x9b\x05\x2f\xd0\xa7\x42\xcb\xe6\x12\x14\x45\xa6\x42\x01\x14\x55\x14\x1a\x62\x04\x43\x00\xa8\xa0\x8a\x8c\x53\x18\xa8\xd0\x0a\x8e\x4b\x98\xc2\x02\x11\x07\xb8\xac\x28\x92\x88\x56\x2a\x0c\x45\x55\x08\x1a\xc8\x10\xa7\x29\x16\x78\x33\xfb\xb3\x56\xad\x43\x19\x21\x22\x98\x28\xa7\x26\x5d\x29\x14\xcb\x48\xd8\xfa\x4f\x23\x3d\xda\x9b\x61\xb7\xe9\x17\xa8\x12\x2f\x4b\xa3\xc5\x4c\xee\xb4\xfa\x2d\x9c\x4b\x44\x65\xf0\x68\x37\xdb\xed\x5f\xb3\x07\x66\xf3\xa0\x3e\x57\x41\x6d\x4d\x75\xa8\x2e\xe7\xce\x50\xb9\x20\x25\x5a\x8d\x4d\x00\x43\xdf\x79\xf7\x5f\x71\x39\x5f\x62\x0f\xb8\x3c\xa7\x1e\xb0\xe5\x1b\x06\xb5\xae\x74\x87\xd9\xdb\x97\xf1\x53\xfb\x99\xdd\xf0\x73\x63\x5c\x05\x70\xc6\x4c\xd5\x86\x11\x42\xd3\xa1\x99\x56\xe8\x2b\xa8\xbc\xbe\xbf\x6e\x5c\xf4\xec\x60\xcd\xae\x5e\x76\xaf\xd2\x68\x4c\xa3\xda\x5b\xbf\xf3\xd6\x63\x1a\xcd\x5f\x38\x49\x0e\x07\x8c\x08\x9e\x7a\x70\x32\xb9\x7f\x6e\x69\x26\x31\x16\x47\x35\x8c\x78\xe3\x4d\x76\x3d\x20\xfb\xa3\xfa\x7c\x57\xab\xde\xce\xa5\xf5\x1c\xbf\x6b\x9b\xf5\xee\xba\x8d\x8e\x27\xc4\xb0\x0f\xda\xd3\xea\xe6\xe7\xcf\xab\x70\xb6\x21\x9c\x6e\x1d\x26\xc9\xc6\x1d\xe0\x63\xcf\x3d\x20\x57\x4d\xb5\x90\x5a\xd6\xa0\x26\x3e\x3c\x3e\xe3\x75\xed\x71\x06\xcc\x07\x7a\xba\xdd\x88\x33\xe2\xae\x77\x3f\x5f\xe9\x04\x37\xae\x2d\x5a\x8d\x15\x25\x6e\xc7\xad\x99\x9b\x2d\xe0\x2a\x4b\xcb\xd7\xc7\x3c\x63\xba\x9d\x9a\x4c\x70\x75\x5f\x3f\x83\xfe\x57\x4d\x7c\x3b\x83\x7e\x37\x46\xbf\xb6\x36\x08\xc3\x26\xa9\xb7\xda\x80\xdf\xae\x86\xb7\x84\xd1\xec\x7d\xfd\x85\x55\x46\x3b\xd5\xc2\x34\xa5\xdb\x78\x5a\x0e\x67\x73\x73\x3d\xfe\x3a\xe1\x02\xf9\x97\xd2\x81\x3e\x7f\xa6\xfc\xa5\xe9\x93\x3a\xfb\x7a\x22\xfd\x90\x2d\xcd\xb9\x04\x5b\x38\x45\x17\x97\xb4\x85\xdf\xf9\x2e\x3c\x5d\xfc\xf3\x51\x9d\xd6\x0d\x0e\xdd\x3d\xb6\x41\x2a\xd3\xfb\xd7\x19\x44\x5c\x67\x99\x3f\x8e\x46\xea\x09\x2b\x24\x74\x5c\x2d\x2b\xb2\x50\xa9\xc8\x22\x60\x01\x25\x8b\x04\x41\xb0\x62\x85\x51\x64\xc0\x28\x04\x59\xa9\x54\x44\x0c\x28\x04\x21\x02\x92\x66\x80\x4c\x49\xa8\xac\xb0\x24\x2d\x93\xf2\x95\xbb\x3e\x8a\x9d\x13\xaf\x7a\x93\xe9\x2c\x27\x4f\xa2\x6c\x05\x4b\x5d\x77\xdb\x3f\x0d\x47\x49\xfe\x82\x40\x87\x69\x0e\xdf\x87\xaf\x62\x1b\x6f\x72\xc4\xec\xe1\x65\x64\xb6\x97\x2f\x8f\x28\xaa\xdc\x31\x56\xa7\x55\x59\xa2\xfc\x68\x73\x3f\xbb\xe5\x1e\x09\x6e\xef\xe3\xdd\xbf\x0c\x1f\xef\xfd\x99\x6f\x3d\xba\x03\xfb\x60\xfe\xb2\xed\x82\xe9\x80\xa5\xab\xbf\x14\x8b\x85\xa8\x64\x98\xbd\xe7\xc7\x5f\xd5\xd9\xfd\x6b\xc3\x68\x07\x3e\x9c\xe3\xfa\x94\xd9\x0e\xe3\x7b\x78\xdf\x34\x58\xe7\x11\x5f\xab\xff\x7a\x7b\x7f\x1d\x56\x87\x46\x8f\xbb\x57\x95\xc1\xe8\xb1\x6e\x74\x16\xef\xf6\x4e\x9a\x10\x5a\x63\x50\x1b\x52\xd8\xfc\x55\xb6\x1a\x4d\x50\xed\xcd\x36\x28\x35\xbe\x7d\x58\xcc\xd0\xc7\xf9\xab\x89\xd6\xaa\x03\x9e\xec\x81\xc6\x03\xde\x5e\x4a\x16\xf1\xbc\xe9\x2c\x55\x91\x9c\x8c\xcc\x6e\xa7\x80\x6f\x8f\x18\x6d\x9a\x6f\xf7\x96\x02\x8f\x7c\xbb\x7a\x5b\x45\x3b\xe8\xfd\xdd\xce\x5e\x6c\x7a\x98\xf6\x84\x82\xdd\xca\xc0\xd8\x5e\x73\xfb\xde\xa9\xed\xfa\x94\x5d\xe5\xa5\x9a\x27\x23\x31\xb7\xcd\xbe\xfe\x74\x5b\x99\x1e\xda\x77\x13\x99\xc8\xe9\xcf\x67\xd0\xef\x99\xbb\xc9\xe4\x0c\xfa\x1c\xf7\xbf\xf3\x67\x89\xbe\xb5\x7a\xba\x2e\xfa\xfa\x73\xa6\x98\x79\xba\x38\xf7\x5d\x38\xb6\xf0\x55\x8a\xe1\x2b\xa5\x8b\x7f\xe6\x0c\x6d\x52\x3c\x37\x6d\xd7\x87\xb5\x27\xfd\x17\xfa\xb0\xa1\x6b\xa4\x58\x91\x74\x9e\xa5\x46\x93\xcd\x6b\x5f\x7e\xba\x6f\x8a\xd5\x11\x3e\x9f\x3c\x58\xbd\xfe\xf4\x1d\x7b\x7a\xb0\x1b\xe4\x7d\x9b\xe5\xe6\x93\x6d\xbf\x3e\x5b\x3c\xc8\xea\x4a\xef\xf4\x70\xa9\x46\x19\xcb\xaf\x3c\x0a\x7e\xd5\x2e\xee\x5b\x31\x9a\x04\x14\x4a\x93\x50\x04\x34\xa9\xe0\x92\x2c\x02\x59\x64\x28\x5a\x54\x08\x92\x64\x48\x86\x52\x24\x1a\xa7\x71\xb2\x02\x64\x40\x40\x99\x60\x25\x59\x56\x50\x85\x66\x51\x1c\x23\x08\x91\xf6\x7c\x2b\x7e\x9e\x6f\xc5\xf3\x7d\x2b\x43\xb0\x19\xbe\xd5\x7b\x1a\x9e\xf1\x9d\xeb\x5b\x6b\xb1\x97\x7a\xe4\x5b\xfb\x78\xed\x96\xeb\x93\xd4\x53\xb5\x4e\xd8\xcd\x87\x46\x1f\x1b\x11\x1c\xda\x85\xaf\x03\xe6\x7e\x44\xeb\x3d\x8c\x63\xe1\x4c\x95\x77\x2d\xdb\xeb\xd2\xe9\xbe\x95\x1b\xf3\xcf\xea\xb3\x08\x1b\x9b\x9a\x65\xb6\xab\x7a\xbb\xb5\xb6\x6e\x51\xea\xc1\xbe\xaf\x57\xcd\xb9\x61\xad\x17\x9d\xe1\xed\x94\x7e\x9c\xbe\x90\xf6\x66\xb6\x5b\x58\x95\xa9\x3d\x26\x6b\x5d\xb8\xed\x77\xe9\xfb\x37\x49\x79\xbb\x6f\x63\xe8\x4c\xab\xbe\xbe\x6e\x74\x72\xce\x0c\x5a\xca\x4b\xeb\xee\xdf\xe5\x5b\xcf\xf5\x6d\xe7\xf6\xe7\xee\xa6\xb3\x34\x2f\xe8\x5b\xb9\xca\x53\x87\xe1\x2a\x2f\xda\x9c\x1f\x40\x54\x9e\x4e\x2b\x0f\x4d\xa9\x3e\xdc\xd2\xc3\xdb\x8d\xd6\x7c\x93\x88\x69\x1d\xa3\xc0\x3d\xd1\x52\x31\x0f\xe7\xa5\x7d\xeb\xff\xc8\xb7\x71\x17\xf2\xad\x0c\x79\x68\xdf\x2a\xad\x8b\x7f\xf8\xc5\xdd\xd3\x72\x46\x2c\x24\xce\x6c\xef\xe6\xcf\x3b\xb5\x63\x0e\xd8\xfe\x83\x38\x1e\x6e\x00\xd9\xee\x74\x8c\x31\x3a\xc0\xfa\x1a\xd6\xfa\xda\x91\x1a\x96\x21\xf6\xb1\xce\x74\xcd\xbd\x34\xad\xc9\x4b\x5f\x05\x7a\x93\x56\xc7\xb6\xdc\x58\x0d\x9f\xef\xbb\xf7\x5f\x5b\x83\xfa\xae\x49\xee\xaa\xf3\x8b\xc7\xad\x22\x0e\x19\x5c\x16\x81\x28\xa2\x38\x29\xe2\x15\x80\x4a\x04\x46\xa2\x12\xa8\x60\x32\x03\x24\x56\x94\x2a\x18\x43\x60\x0a\xab\x50\x80\x10\x65\x9a\x85\x12\x20\x64\x86\x51\x44\x14\x4a\x94\x74\xb5\xaf\xeb\x3b\xc3\xb7\xe6\x25\x27\x48\x94\x65\xa9\xac\xf2\x17\xef\x69\x38\x7b\x75\xae\x6f\xad\xc7\x5e\xea\x91\x6f\x2d\x9b\x9b\x48\xf7\xad\xf5\xfb\xb5\x86\xd9\x9d\xbb\x4e\x83\x7c\xd8\x6e\x6c\x54\xae\xd7\x1e\x78\x85\xb6\x45\x4a\x23\xc5\x5d\xd7\xbc\x9b\xd7\x56\x5f\xb5\x87\xe7\xee\x72\x2b\xd9\x14\xa9\xf6\x14\x7c\xb9\xb5\x5f\xb6\x74\x57\xa6\x9e\xef\x49\x9e\xac\x6b\x92\xa5\x90\x34\xcf\x2d\xaa\x77\xe3\xe9\xc0\xd2\x19\xe5\xa9\xfe\xef\xf2\xad\xe7\xfa\xb6\x73\xfb\x73\x07\x7d\xa5\xeb\x17\xf4\xad\xbf\x33\x27\xf3\x11\xbe\xf5\x54\xdf\xc6\x5d\xc8\xb7\x9e\x3a\x87\xf1\x7d\xeb\x4e\x5c\xc9\xe2\x78\xab\x6e\x61\x43\x92\x3a\x72\x73\xb8\xd1\x46\xcd\xaf\xe6\xec\xeb\x33\xbc\x63\x5e\xda\x5b\x83\x7b\x53\x56\x0f\xb3\xc9\xbd\xf5\xd8\x81\xb0\xf5\xf2\xc8\xae\x2c\xf1\x89\x81\x2f\x4d\x38\x1b\xc3\x6a\x9f\xa3\x1e\x3b\xcd\xaf\xfd\x05\xd7\x1a\x8e\x5e\xb5\x7a\xe5\xfe\xb6\x89\x73\x05\xe3\xd6\x94\xec\x72\xd6\xa9\x53\x65\x13\xcb\xf1\x93\xa7\xf6\xde\x1a\x6e\x57\xc1\xe6\x5b\xf7\x68\x1a\xaf\xb2\xcb\x61\x1a\xcd\x58\xae\x4a\x38\x52\xea\x8c\x65\xaa\xb4\x93\x8f\xca\x6f\x94\x89\x5e\x10\x18\xf9\x26\xac\x5e\xe1\xee\x70\x03\x75\x70\xf6\x65\xd9\xc3\x58\x22\x38\xdd\x13\x7d\xb8\x7a\x3d\x7c\x96\xe6\x31\x51\x64\x30\x6a\x75\xb9\xd1\x13\xd2\xe6\x9f\x90\x2f\x87\x03\x99\x52\x6f\xf8\x3b\xe0\xb8\x2c\xcf\x99\xec\x1e\x73\x7a\x38\x0a\x2a\xf7\x2e\xc2\xe3\x6b\xf9\x2e\xac\x6d\x1f\x6d\xa6\x04\x61\xd2\x51\x49\xbc\x27\x37\x48\x96\x44\xa1\xcb\xea\xc2\xa7\x03\x5c\x48\x8e\x03\xc6\x44\x11\x62\x04\xa3\xdc\x27\x70\x1b\xbf\x5e\x2f\xf6\xfd\x42\x5c\xc7\xb0\x26\x71\x9e\x44\x38\x66\x45\xfb\xf3\xbc\x6e\x22\x87\x81\xdd\x84\xce\x0e\xcb\xbb\x5e\x2f\xfe\xfd\x42\xf2\xc5\xb0\x26\xc9\x97\x44\x38\xf7\xed\xc4\x0e\xd7\x8a\xed\xad\x3b\x28\x44\x38\x68\x40\x08\xab\x46\xb8\x88\x74\x51\xb2\x49\xc2\x9d\xc4\x58\x70\xb7\x53\xc2\x8b\x75\xe0\xa3\x2f\xb9\xa4\x6a\x2e\xf3\x5a\x4b\x0b\x5e\xea\xa5\xa6\x54\xf7\xe5\x94\xd0\x5d\x56\xb2\x64\x22\x59\x92\x66\xb0\x55\x58\xf2\xd4\xe5\xfe\xdc\x15\xf5\xcb\x4a\x9f\x46\x26\x4b\xfe\x4c\xd6\x72\x35\x10\x8f\x9e\x62\xdf\x2f\x24\x5f\x0c\x6b\x92\x38\x49\x84\xa3\xdc\x27\xc5\x15\xfe\x09\x9e\xde\xff\x2e\xc4\xac\x87\x2c\x89\xc7\x10\x99\x28\x6b\xc1\x21\x38\x59\x27\x5f\x86\x3f\x5f\x88\xd3\x10\xc6\x24\x76\xe3\x04\x4b\x47\x6b\x5e\xa0\x77\x08\x2d\x04\x1d\x2c\xf7\xc1\xba\x7b\x9f\x5c\xb1\x13\x3c\x23\x77\xe6\x65\x22\x8f\x5c\x74\xec\x46\xba\x91\x5b\xe4\x0e\xd0\x37\xee\xf5\xd5\xe9\x9c\x87\x2e\x25\x3f\x81\xe1\x18\xa7\xe1\x1b\xce\x43\x0c\xc6\x6e\xb8\x3b\x00\xa5\xb3\x95\x78\x03\xfb\xf9\x0c\x26\x5f\xec\x9e\xca\x6a\x22\x78\x4a\xdc\x28\xee\xdc\x81\xf0\x74\x1e\xc3\x58\xc2\xb7\x07\xfa\xe3\x64\xf4\xfd\xee\x07\xde\x74\x6e\xbc\xe1\xf7\x7c\x7e\xfc\x83\x5b\x0b\x71\x94\x32\xe4\x8b\xfb\xf3\x13\x4e\x66\xe7\x80\x22\xe5\x66\xc5\x38\x3f\x1e\xf0\xcd\xd1\x79\xe5\x49\xcc\x85\x0e\x95\x2e\xc6\xe0\xca\xb0\xec\xb9\x09\xad\x44\x3e\xc3\x47\x54\x17\xe2\x35\xd4\xe0\x1a\x99\x35\xf9\x11\x1f\x39\xe6\xba\x35\xde\x9f\x0a\xfb\xe3\x88\xf5\x05\xb0\x16\x17\xe0\xd9\x3d\x76\xbb\xdf\xcb\x3c\xae\x3e\xc2\x73\xfc\xcc\xee\x24\xb5\x7a\x87\x70\x5f\x88\xc3\x03\xb2\x62\x4a\x4d\x3e\x5a\x3c\xd0\x6f\xca\xc1\xe3\x99\xaa\xf6\x06\x82\x73\x2c\xd8\x3f\xeb\xb7\x10\xff\xb1\x13\xfe\x6f\x8e\x0f\xf3\xcf\x9b\x12\x9e\xed\x92\x52\xf0\x39\xfc\xc7\x67\x9f\x45\xbd\x53\x02\xca\x33\xfd\x54\x2a\xc6\x82\x6c\x66\xcc\x52\x04\xe8\x60\x73\x75\x7d\xee\x60\x1e\x43\x17\x36\x81\xe0\xc4\x81\xdc\x3b\x7f\x6f\x82\x8b\x81\xd2\x98\x3d\x1c\x33\x7c\x26\x9b\xaa\x5c\x98\xc1\x70\xa4\x71\x02\xd3\xc6\x4a\x58\x5d\x8a\x6f\x1f\x57\xf2\x25\xcb\x91\xd9\xca\x49\x92\x24\x0b\x60\x6f\x2f\x27\x80\x8f\x2b\xed\xea\xe0\xd3\x44\x48\xb8\x48\x38\x22\x84\xb1\x72\xac\x72\x61\x9c\x24\x83\xcf\xfc\x01\xc7\xa9\xca\xcf\x56\xf4\xfe\x62\x49\xa7\x73\x9f\xaf\xeb\x28\xba\x30\xcb\xc1\xa6\xe6\xe3\xbb\xdd\x8f\x38\x0a\xeb\xf5\x52\x6c\x1d\xe1\x2c\x38\xd4\x25\x30\x68\x7b\xaf\xc4\x3e\xe7\xb5\x1e\x70\x9c\x6e\x92\x79\xe6\x67\x9b\xb2\x43\x24\x7c\xf7\xd8\x19\x0c\x1f\x23\x8b\x71\x2e\xc7\xef\xdb\x8e\x5d\x7a\x96\xcd\xa0\x3b\x7d\xbd\x0c\x7b\x2e\xaa\x42\xcc\xa5\xce\x99\x03\x7c\xb1\xeb\xd4\xce\xe6\x2f\x86\x2f\x8f\xc9\xe3\xdb\xdc\x72\x39\xbd\x8c\x1e\x23\xd8\x8a\x72\x99\xab\xcd\xcb\xf0\x56\x88\xa7\x6c\x5e\x02\x8e\x35\xc3\x78\x5d\xaf\xce\xe3\x28\x8a\xab\xf0\x1b\x0d\xae\x8b\x4b\xe4\x6f\x05\x54\x53\x70\xef\x02\xba\x04\x87\x71\x6c\xc5\xfa\xad\xcf\xe0\xcd\xd1\x0d\x77\x37\x47\xd7\x24\xa6\x08\x71\x01\xbf\xed\xe3\xc9\xe3\xb8\x64\x74\xe4\x60\xbd\x98\x76\x4b\x28\x36\x57\x6f\xde\x71\xfc\x47\xe7\x22\x1a\xba\x00\x64\xd9\x84\x96\x75\xae\x42\x73\x09\x44\x72\x11\x89\x89\x1b\x1f\xb0\x04\xef\xe7\xdb\x41\x16\xee\x7c\x8e\x13\x7a\x59\x14\xa1\x1f\x85\x3b\xf8\xec\xdd\xea\xf4\x49\x5d\x26\xd6\xdc\xb0\x3f\x71\xa9\x2e\x8a\xd2\x8f\xa1\x1c\x94\x7b\x23\xba\x10\xb7\x49\xa8\x73\xc3\xb7\xa2\x96\x1c\x42\x7e\x69\x63\x88\xa0\x3e\x25\xde\x4c\x47\x17\xbb\x4c\xfc\xf2\x8a\x3e\xba\xae\x3c\x97\xfd\x58\x83\xe2\xc2\x84\x6e\x8f\xff\x30\xfd\x87\x6f\xa8\xcf\x93\x24\x04\x5b\x5c\x88\xa4\xbb\xf0\x3f\x4c\x9a\xc4\x8b\xf7\xf3\xc4\x4a\x6a\x54\x5c\xbe\x20\x21\xf5\x61\x32\xed\x2f\x96\xcc\x93\x23\x35\xa3\x1b\x45\x7d\x38\x90\xe0\x23\xba\x76\x1c\x7b\xe2\x04\xb8\x6c\x07\x8f\x22\x8d\x4e\xa1\x2e\xd4\xc3\xb3\x48\x14\x91\x21\x67\x5e\x97\x49\xec\x72\xc3\xd7\x31\xe2\x42\xbc\xe7\x0f\x62\xe1\xc9\xf6\x47\x98\xcd\x31\xfe\x93\xa7\xfa\xfe\x62\xab\x33\xb1\x0c\x5d\x96\x78\xb2\x82\x93\xd1\x39\xdc\xf9\x6b\xc8\xd1\x30\x3c\x04\x93\xc1\x59\xd2\x95\x77\x17\xe0\x30\xf1\x26\xbd\x14\x4e\x93\x60\x33\x38\xf6\x6e\xb9\xbc\x00\x8f\xfe\x95\xe3\x29\x5c\xed\x2f\xd3\xcc\x61\xe5\x92\xef\x35\x7a\xe9\x66\x06\x63\xe9\x6f\x36\xa8\xb3\xbb\xc0\xc2\xde\x31\xaa\xc8\xda\x76\x50\x5d\x98\xb2\xbc\x9d\x50\x48\x00\x64\xb8\x0f\x6b\x83\x7c\xbb\x20\x1a\xc6\xeb\xc9\x2c\x66\xe0\xcc\x0d\x98\xbf\x7c\x91\xa1\x0d\x54\xcd\x42\xbe\xfd\xe7\x3f\xc8\x95\x65\x68\x72\xa8\xb4\xea\xea\xfb\x77\x1b\x6e\xed\xeb\xeb\x1b\x24\x1d\x50\x32\xe4\x62\x80\xde\x52\x46\x3a\xa8\x68\xac\xe7\x0b\xbb\x10\xf9\x08\x68\x36\x03\x11\xd0\x18\x0b\xc1\x72\x9b\xeb\x72\x91\x9f\x08\x41\x64\x55\x7e\x84\x6c\xe0\x9c\x81\x2e\x15\xa3\xf3\xb2\xc2\x85\x26\xc5\x6d\x2a\x82\xf0\xcc\x05\xab\x44\x6c\xd9\xac\x65\x2d\x54\xc5\xd0\xb9\x05\x7b\x6e\x01\xdf\x65\xd9\x8c\xe3\x2d\xc0\x70\xb8\x16\xf0\xb8\xf8\xb3\x70\xf9\xad\x2a\x0b\x4a\xa8\x0a\xa8\xd1\xfe\x3d\x45\xb8\x3e\x59\xa4\xd1\x1f\xf1\xad\xbb\xde\xbe\x30\x0c\x19\xf1\x0d\x7e\xc4\xf7\x6a\xfc\x38\x56\x10\xe1\x3e\xed\xf7\x90\xe9\xa0\xee\xa8\x71\xc4\x8f\x27\xa3\x56\x6d\xe2\xfc\x54\xe7\x3b\xfc\x84\x47\x6a\xdc\xb8\xc6\xd5\xf9\x8c\xea\x3a\x19\x5a\xb1\xaf\x42\x2c\x43\x7d\x39\x65\x44\xe9\xe4\x94\xce\xa5\x71\x12\xd5\x4f\x3c\x9b\x9e\xa8\x2c\xdf\xb5\xe7\xd4\x19\xa6\x6a\xc2\xcf\xf0\xfd\xcf\xf5\x10\xe6\x23\x49\x0b\x41\xf2\x34\xdb\x60\xca\x69\xe0\x38\xd7\xfe\x3f\x54\x43\x0a\x33\x51\x5d\x24\xac\x0e\x5c\xd6\x28\xe2\x99\xdf\x7f\x83\x42\xd2\x4d\xe3\x28\xb5\x5e\xd4\x3a\x06\x5e\x6d\xcc\x78\xd8\x41\x64\x60\x03\xc7\xc4\x10\x79\xbd\x5c\x21\x92\xb1\x5c\x69\xd0\x86\xae\x0c\x0e\xa4\x0e\xa1\x0c\x65\x77\x6f\x4d\xa8\x7c\xde\x36\x90\x8d\x61\xbe\x46\xa4\xdc\x67\x22\x1d\xb1\xfc\x5b\x9f\x90\x09\xff\x38\xf9\x91\x52\x3e\xe7\x04\x8f\x3e\xd8\x71\xcd\x5c\x75\x32\xe2\xf9\x2f\xfe\x73\x87\xf3\x24\x52\x5e\xad\x62\x51\x7a\x6e\xe5\x63\x32\xd1\x70\xd1\x63\x26\xe5\xf0\x20\x95\x43\x37\x36\xe4\x85\xa8\x1e\x8f\x74\x99\x34\xfd\x80\x3a\x87\x5c\x28\x22\x3f\x50\x8a\xc4\xe2\x99\x44\x0a\x54\x82\xd7\x47\xfd\xc1\xe1\x52\xe8\x94\xf6\x99\xb5\xd4\x47\x18\xdc\x1f\xfc\x77\x1a\x1a\xb0\x25\x60\x49\x40\x86\x01\x40\x66\xfd\x50\x14\x28\x77\xde\x9d\x01\x1d\x4d\xd9\x46\x00\xa3\x45\x99\x9f\xfe\x5f\x00\x00\x00\xff\xff\x49\xc4\xbe\x0d\xcf\xcb\x00\x00") +var _baseHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x7d\x79\x6f\xe2\x48\xf3\xf0\xff\xf3\x29\xac\xd1\x4a\x99\x68\x32\x1b\xdf\xd8\x33\xbf\x79\x24\x03\x26\x10\xee\x2b\x24\x59\xad\xac\xb6\xdd\x06\x27\xc6\x26\xb6\x09\x30\xab\xe7\xbb\xbf\xf2\x05\xb6\xf1\x09\x64\x9e\x7d\xa3\xd5\x2c\xe0\xea\xba\x5c\x5d\x5d\x5d\x5d\xdd\xfd\xed\xdb\xa7\x6f\xdf\x90\x81\x61\xd9\x73\x13\x8e\x87\x1d\x44\x06\x36\x10\x81\x05\x11\x79\xbd\x5c\x7d\xfa\xf6\xed\x93\xf3\xbc\xbe\x5e\xae\xa0\x8c\x28\xa6\xb1\x3c\x00\xbc\x43\xd3\x52\x0d\x1d\x61\xff\xa4\xff\xc4\x42\x50\xe2\x0e\x59\xcd\x05\xa7\x79\x0c\xe4\xd3\x98\x9f\x20\x96\x0d\x6c\xb8\x84\xba\x2d\xd8\xea\x12\x1a\x6b\x1b\xf9\x89\xa0\x3f\xdc\x47\x9a\x21\xbd\x1e\xff\x2a\x69\xaa\x03\x0d\x75\xc9\x90\x55\x7d\x8e\xfc\x44\xae\xa6\x93\x06\x73\xf5\x23\x40\xa7\xcb\xc0\x94\x05\xc9\xd0\x15\xc3\x5c\xaa\xfa\x5c\xb0\x6c\x53\xd5\xe7\x16\xf2\x13\x31\x74\x1f\xc7\x02\x4a\xaf\x82\xb2\xd6\x25\x5b\x35\x74\x41\x34\x64\x15\x3a\xcf\x15\xa0\x59\x30\x42\x66\xa9\xea\xc2\x12\x5a\x16\x98\xbb\x00\x1b\x60\xea\xaa\x3e\xff\xe1\xf3\x0e\x81\x29\x2d\x84\x15\xb0\x17\xc8\x4f\x64\xb5\x16\x35\x55\xba\x71\x84\x95\x80\x0d\x34\xc3\x01\xe3\x3a\x13\x7e\x84\x4c\xb8\x6a\x87\x47\x5a\x0d\x84\x7f\x6c\x8d\x27\x63\xa4\xdf\xeb\x3c\xf9\xf0\x7f\x2e\x54\xcb\x36\xcc\x9d\x60\x9b\x40\x86\x16\x52\x1f\xf5\x07\x48\xad\xdf\x1b\x4f\x46\x5c\xab\x37\x09\x35\x8a\x02\x0a\x92\xb1\xd6\x6d\x68\x0a\xc0\xb2\xa0\x2d\xa8\xb2\xa0\xbc\xc2\xdd\x8f\xdf\x41\x50\x72\x3f\xfd\x0e\x92\x8e\x5d\xfd\x3e\x01\x3d\x6a\xe5\xa5\xf3\x18\x74\x0c\x39\x8b\x58\x08\xea\x80\xdc\x05\x6f\xf5\xea\xfc\x63\x08\xd2\x47\x6b\x9b\x6b\xcb\x16\x34\x55\x77\x58\xdb\x09\xf6\x6e\x05\x05\xc9\x90\xa1\xa0\x5a\xd6\x1a\x9a\xa5\x1a\x9f\xd0\xe4\xa0\x88\xbc\x66\x40\x86\x02\x54\x14\x28\xd9\x6e\x43\xc3\x94\xa1\x29\x88\x86\xf1\x9a\xdd\xd0\x52\xe7\x3a\x34\xc3\xb4\xb2\xe1\x0d\x45\xf1\xc1\x2d\xa8\x69\x4e\xc7\x76\x55\x5a\xa6\x51\x9e\x0a\x0e\xd0\x1a\xb0\x6c\x61\x69\xc8\xaa\xa2\x42\x59\xd0\xa0\x3c\x2f\xde\x56\x5c\xef\x0a\x72\xa7\xea\x32\xdc\x0a\x21\x33\xd4\x2d\xe0\xba\x24\x4b\x30\xf4\x5c\xcd\x47\x5b\x1b\x2b\x68\x82\x7d\x5b\xc7\x5a\xce\x68\x7d\xe0\xe4\x2c\x2e\xca\xb5\xf5\xb4\xec\x36\xb4\xe0\xdb\x1a\xea\x52\x29\x11\x42\xcd\x57\x26\x7c\x57\x8d\xb5\xe5\xff\x26\x2c\x80\xb5\x38\x11\xd5\xf9\x18\xd4\xe5\xca\x30\x1d\xc7\xe9\x8f\x7e\xa7\xa2\x39\x55\x97\x92\x66\x58\x50\x16\x40\x29\x5b\x0c\xfa\xf3\x09\xa6\xe4\x77\xe6\x13\x98\x0e\xb7\x04\xb2\x6c\x42\xcb\xca\x6e\xbe\xb0\x4d\xd9\x8d\x10\x04\xcd\x30\x5e\xd7\xab\x02\xd0\xab\x3c\x96\x3c\x28\xa0\x9a\x25\x11\x07\xc3\x63\xe1\x06\x8e\xab\x74\x7c\x46\x31\xd0\x00\xfd\x09\x4d\x0a\x79\xd7\xa0\x91\x3b\x08\x96\x20\x12\x1e\x34\xf3\x5a\xac\x9c\x06\x0b\x3b\xf7\x0d\x58\x11\x07\xe4\x0c\x5f\xf9\x2d\xfc\x7e\x5a\x04\xd8\xf0\xf8\x30\x72\x01\x55\xcb\x16\xec\xad\xb0\xca\x47\xe9\x40\x1a\xab\xa2\x90\xb0\x28\x58\x30\x9a\x66\x03\xc3\xed\x4a\x08\x47\x17\x05\xc7\xfb\x84\x66\x4e\x78\x91\xdd\x48\xdc\x15\x1a\x0c\x1d\xfd\xe6\x7a\xcc\xa2\x03\xbf\xc7\x64\x41\xa9\xf6\xc0\xf9\xb2\xec\xdd\x8d\xaa\x2b\x9a\x3b\x68\x09\x32\xb4\x6c\x55\x77\x3f\x17\x6c\xbb\x30\x96\x50\x90\x8d\x25\x50\x8b\xb6\x70\x26\x4c\xe1\x30\x53\x07\x4b\x58\x24\xcc\x0c\xc5\x67\x19\x61\x66\x38\x8a\x5b\x15\x0c\x60\xbd\xd0\x25\x03\xa9\x1f\xdb\x14\xc5\xf7\x0a\x77\xc2\x3b\xd0\xd6\x50\x70\xfc\x3a\xcc\x40\x1c\x83\x2c\x4c\x21\x21\x64\x12\x56\xc0\xb4\x55\x49\x5d\x01\x3d\x33\x0e\xcf\x6b\x5a\x9a\x87\x7d\xc8\x53\x96\x83\xe4\x86\xa5\xe9\xbb\x16\x5f\x84\x9e\x07\xf8\xe1\xf8\xbd\x1e\xe8\xce\x54\xbc\x8f\xee\xcc\xc5\x9f\xc5\xb9\x3d\x58\x28\xc8\xc1\xdc\x30\x57\xc2\x52\x9d\xfb\x11\x65\x06\x0b\x31\xc8\xc2\x32\xc6\x7c\x60\x06\x85\xb8\xb7\x2c\x4a\xa1\xfc\xe4\xb0\x30\xe6\xc0\xa1\xf8\x13\xa9\x2c\xf4\x31\xd0\xd2\x34\x8a\xe0\x2e\xcd\xb7\xe3\x08\x8b\x20\x76\x1d\x66\x16\xf6\xa2\x4e\xc1\x6b\x5d\xeb\x77\xa6\xdd\x1e\xa2\xca\x1e\xed\x3a\xdf\xe0\xa6\x9d\x49\x41\xdc\x29\x9d\xfd\x02\x98\xfd\x6e\x96\x8d\xc9\xfd\x96\x82\x28\xe4\xf9\xb3\x01\x3d\x6f\x9e\x0d\x13\x73\xcc\xd9\xc0\x49\x13\x58\xbf\xc5\x98\x1f\x4e\xf9\x5e\xed\x84\xb7\xe5\x0c\x8d\x16\x7c\x2b\x4d\x39\x82\xa4\x70\x6b\x39\x4f\x69\xc7\x13\xdc\xc2\x12\xa6\xf8\xf9\x32\xf2\x25\xa3\x28\xd6\xd6\x9f\x0a\x16\x03\xf6\xe7\x7d\x85\x65\xf3\x7d\x7e\x19\x59\xbc\x26\x05\x61\x7d\x1f\x50\x9c\x9f\x7d\x4c\x57\x80\xa3\xd8\xa8\x91\x0d\x1c\x1b\x00\xb2\x81\x8b\x03\xc6\x3c\x73\x41\x68\xc7\x25\x16\x03\xf5\xa1\xb8\xbb\xbb\x11\x7f\xc7\x4d\x12\x20\x97\xaa\x2e\xac\x4c\x55\x82\x5f\xf4\xf5\x12\x9a\xaa\xf4\xd7\xdf\xd7\x05\x5a\x81\xed\x09\xad\x34\x60\xd9\x5f\x80\xbe\x83\x9a\x9b\xf3\x2f\xd0\x42\x51\xcd\xc4\x26\x8d\x69\xaf\x36\x69\xf5\x7b\x19\xf2\x08\x60\x3e\x3f\x70\x77\x83\x1c\x31\x9a\x81\x23\x90\xee\x0c\x1c\x6e\x0a\xd1\x69\x7e\x60\xfe\x06\x29\x23\x88\x2b\x7a\x01\x0c\xfc\xe3\x84\xef\x8d\x63\x28\xb4\xd5\xdc\x7a\xd3\x82\x7e\x53\x6b\xf2\x5d\xee\x88\xc2\x8f\x4f\xde\x72\x4f\x0f\x2c\xe1\xf7\xe0\x37\x64\xb2\x5b\xc1\xef\x7e\x93\x1f\xc8\x58\x5a\xc0\x25\xf8\x8e\x7c\xfb\x81\xf4\x37\x3a\x34\xbf\x23\xdf\xdc\x55\xa0\xda\x88\x77\xde\x97\x8f\x39\xc0\xf7\x29\x82\x31\xfa\xd0\x47\x5c\xeb\x77\xbb\x7c\x6f\x92\x81\xd9\x03\x40\xfa\xbd\x28\x02\xa4\x35\x46\xae\x82\xf5\x9d\xe0\x37\xcb\x45\x72\x15\xa7\x1c\x88\xef\xd3\xdc\x6b\x28\x57\x9e\x88\x2e\x7b\xfd\x49\x4c\x9f\xc8\xac\x35\x69\xee\xd9\x0a\x2f\xf4\x44\xc8\x1f\xb0\xc4\x18\x29\x23\xfc\x11\x12\x57\x01\x83\xce\xed\x6a\x3e\x1e\x76\x90\x95\x69\x48\x50\x5e\x9b\x40\x43\x34\xa0\xcf\xd7\x60\x0e\x5d\x35\x14\x5c\x98\x0a\xb3\x9b\x6f\x68\x3e\xfb\x81\xad\x1e\xf8\x0f\xde\x6d\x92\x2e\xf7\x96\x9d\x8b\x1f\x19\xf1\x93\xe9\xa8\x37\x0e\xfd\xf6\x09\x41\x10\xa4\xc3\xf5\xee\xa6\xdc\x1d\x8f\xb8\xd2\x77\xbb\x53\xcf\xd9\x8d\x27\xa3\x56\x6d\xe2\x42\x70\x63\xe4\x0f\xe1\x0f\x64\xcc\x77\xf8\xda\x04\xf9\x03\x73\xbe\xc5\xdf\x46\x6e\x47\x3c\x4f\xba\x3c\xf4\x17\x13\x0e\x4f\x12\xae\x88\xa7\x3a\x4f\xbe\x02\x14\xf6\x22\xee\x7f\x3a\x49\xc2\x2f\x9f\x10\xa4\xc6\x8d\x79\x64\xd6\xe4\x7b\xc8\x1f\xd8\x5f\xd8\xdf\xb7\x7f\x60\x7f\xe1\x7f\xff\xe7\x0f\xdc\xfd\x8c\xff\x85\xff\x8d\x4c\xbc\x87\x08\xdf\x19\xf3\x8e\x52\xf8\x5e\xfd\x3a\x51\x33\x05\xc6\x81\x33\x35\x93\x4f\xe1\xa3\x35\xf3\x7f\xa7\x68\xe6\x78\x4c\xf5\xf5\xb0\x1f\x87\x8b\x29\xe2\x30\x6c\x1f\x61\x74\x39\x46\x90\xb1\xa3\x2b\xe4\xe7\xc1\x03\xdc\x78\x3f\x4f\x9e\x06\x3c\xf2\x33\xdc\x23\xae\x93\x7a\xed\x45\x79\x8c\x23\x8c\xb1\x18\x74\xe3\xe2\x1c\x26\x86\x40\xe7\x72\x99\x84\x34\xc6\x69\xa4\x43\x46\xd9\x3d\x58\xd9\x31\xb7\x49\x61\xde\xd9\xdc\x26\x20\x8d\x73\x1b\xee\x24\x99\xdc\x3a\x23\x97\x0c\x15\xb0\xd6\x6c\xc1\x06\xa2\x06\xad\x15\x90\x20\xf2\x13\xb9\xba\xfa\x11\x7d\xba\x51\xed\x85\x60\xa8\x72\xa8\x66\x23\x22\xeb\x3e\xf8\xf5\xe5\x73\x7b\x57\x31\xd9\xbc\x8e\xb8\xcf\x7b\x78\xb2\x1c\xb2\xb5\x88\xb4\x00\x26\x90\x6c\x68\x22\xef\xc0\xdc\xa9\xfa\xfc\x0b\x45\x5f\xbb\x91\x42\x6f\xda\xe9\x78\xf2\x89\x40\x03\xba\x04\x11\x51\x9d\xab\xba\x1d\x7f\xe8\xad\x0e\x6b\x2a\x10\x55\x4d\xb5\x55\x68\x25\xc3\x05\x8b\xdc\x05\x00\xbd\xb5\x52\x41\x5f\x2f\x45\x68\x26\x03\xe9\xeb\xa5\x60\xad\x45\xa8\xdb\xa6\x83\x48\xd5\x6d\x38\x87\x66\x0c\x28\x31\x0f\x5e\x48\x62\x45\x03\xf3\x34\xac\xa1\x0c\x79\x02\x2e\x02\x8f\xe3\x5a\x02\xcb\x86\xa6\xb0\x81\xea\x7c\x61\x23\xd6\x12\x38\x7a\x88\xcb\x63\x2f\x4c\x68\x2d\x0c\x4d\x16\x34\x63\x93\x0f\xb4\x84\xb2\xba\x5e\xe6\xc3\x2d\xd4\xf9\x22\x0d\x2a\xa9\x24\xe0\x48\xe4\xe3\x7e\x17\x9d\xb3\x9d\x6b\x90\x5e\xd2\xcc\xb3\x4a\x7f\xc9\xeb\x15\xee\x12\xf4\x8a\x51\x68\x5c\xb1\x25\xad\x58\x07\x4b\x98\x00\x48\x93\x71\x40\x37\x4f\x94\x00\xc9\x1e\x71\x70\xae\x0a\x83\x49\xf2\xd9\x5a\x0c\x52\xa6\x05\xba\xf7\xb1\xbc\x5e\xe3\x42\xa0\xbe\x11\x27\x77\x0c\x6b\x65\xe8\x96\x91\x84\x88\xa2\xaf\x5d\x2d\xf8\xcc\x7b\x2b\x4a\x47\x49\x5c\x71\x27\x04\x28\xfa\xbd\x63\xd9\xa6\xe3\x56\xef\x0e\xa9\x4e\x46\x3c\xff\xc5\x87\x3b\xd6\x6c\x28\x4f\x71\xb2\x52\x43\x19\x6e\x4f\x9f\xaa\x9c\xec\x84\xc0\xd2\xe1\xf0\x58\xde\x04\x5f\xb5\x77\xc0\xc9\xaa\xf3\xfc\x4d\x5a\x77\x36\x96\x5a\x82\x52\x71\x8a\xba\xce\x30\xb2\x78\x7e\xe7\x54\x75\xc4\x97\x14\x7c\x13\xdb\xaf\x84\xa4\x48\x74\x58\x35\x49\xea\xcc\x47\x4e\x32\xbc\x9c\x52\xa8\x37\xfb\xba\xb7\xe1\x36\x69\x68\x48\x55\xf7\xb1\x9e\xe2\x49\xb3\x53\xf5\x14\x5f\xdc\xd9\x9b\x4e\x02\x8b\x60\xb5\xd2\x54\xb7\x86\x05\xb1\xd5\x25\xb4\x6c\xb0\x5c\x21\x4e\x10\xe0\x7e\x45\x7e\x19\x3a\x3c\x66\x34\x2d\x25\x18\x24\x38\xfc\x5c\x62\x31\x9e\xf7\x99\xc7\x14\xac\x7e\x5c\xc3\x8d\x26\x5e\x8a\x00\x73\x7f\x68\xf5\x6a\x23\xde\x9d\xcf\x57\x9f\xfc\x9f\x7a\x7d\xa4\xdb\xea\x3d\x70\x9d\x29\xbf\xff\xce\x3d\x1e\xbe\xd7\xb8\x5a\x93\x47\xb0\x3c\x61\x4e\x56\x7b\x1c\xd1\x51\x97\xf5\xd7\x1a\x10\x1d\x6e\xed\x77\xa0\x7d\xb9\x4a\x91\xf8\xea\xfb\x77\x13\xce\x25\x0d\x58\xd6\x91\xad\x79\xb5\x3b\xc9\x1e\x32\x78\x51\x7b\x4e\x24\x0d\xa8\x4b\x27\xdc\x13\xfc\xb8\xc9\x42\xbe\x2c\x81\xbe\x06\x9a\xb6\x73\x50\x41\xf9\x3a\xf5\x2d\x1c\xb7\xfd\xb8\xf7\x91\xa8\xc6\x24\xe6\x53\x7c\x60\xba\x66\x53\xa5\x08\xeb\xd8\x53\xed\x11\xa8\x10\xef\x31\xe1\x81\x63\xda\x6b\x0d\xa7\xc1\xf8\xf1\x39\x5a\x6c\x95\x40\xd4\x2d\xd8\xfa\xec\x0c\x26\x19\xe2\x79\xc3\x8a\x68\x9b\x10\x22\x5f\x54\xf9\xfa\xc7\xe9\xc4\x92\x84\x29\x45\x3e\x09\xc1\x75\xda\xab\x3a\xac\xa1\xa4\xbe\xb4\x63\xd0\xb4\xa1\x2c\x95\xc3\x84\x16\x45\xdf\x48\x16\x83\xde\xbb\xb1\x22\xda\xc9\x14\x28\xa2\xa7\x44\xb9\x6e\x32\x85\x38\xbc\xd7\x93\x78\x0d\x53\xba\x20\xd3\xa9\x2f\x37\xbc\x00\x98\xfb\x7a\xa3\xe5\xad\xbf\xef\x05\x67\x33\x99\xf4\x8a\x73\xc4\x4a\xd4\x57\x4c\xba\xb3\x5e\x73\x3e\xc7\x51\x6a\x17\x66\xde\x1d\x2a\x5a\xbd\x31\x3f\x9a\x20\xad\xde\xa4\x9f\xe5\x18\x5c\x97\x3d\x46\xbe\x60\x37\xc8\x15\xea\xff\x61\x15\x86\xc1\x69\x45\x54\x20\x41\xb0\x10\x53\x28\x89\x22\x48\xac\x22\xd1\x0a\x94\x15\x88\x4b\x28\x05\x19\x11\x4a\x18\x49\xa0\x04\x46\x12\x50\x22\x69\x91\x60\x58\x06\x13\x51\x56\x22\x14\xf6\xea\xfa\xc7\x27\x3f\x03\x77\x48\x9e\xff\x69\xc1\xa2\xee\xfb\x06\xc1\x6e\x10\xdb\x5c\xc3\xeb\x1f\xce\x88\x37\x59\x40\xe4\xb0\x7e\x7c\x1b\x5e\x2e\x47\x80\x09\x91\xb9\xe1\x04\xc3\xb6\x81\x88\x10\x59\xeb\x26\xd4\x80\x0d\x65\xe7\xfb\x9e\x42\x90\x5a\xb0\x6e\x10\x71\x6d\x23\xaa\x8d\xc8\x06\xb4\xf4\x2b\x1b\x59\x02\xdb\x19\x68\x15\xc3\x44\x6c\x77\xf2\x3e\x4f\x54\x5c\x66\xf7\xdb\xab\x10\x67\x18\x92\x45\x29\x96\xa1\x6e\x10\xec\xfa\xc7\xe9\x98\x18\x8a\x61\x59\x82\xa1\x19\x36\x1d\x51\x8e\x99\x1c\x33\x45\x9e\x8d\x6b\xcf\x16\xe3\xa1\x4a\x0e\xb5\xbc\x75\xea\xb3\x03\x2d\xaf\xae\x63\x1f\x15\x64\x85\xff\xee\xfc\xa0\xc8\xbc\xf2\xe3\x66\x0b\x19\x71\x74\x64\xa9\xff\x42\x51\x74\x18\xe7\x6f\x8b\xa1\xb3\x04\x41\xfa\xb3\x1e\x5f\x47\xaa\x4f\x39\x12\x79\x75\x3a\xd9\x02\xed\x71\xc5\x1e\xff\xa9\xca\x69\xbc\x05\xf5\x17\xe7\x5a\x9d\x8f\x27\x36\xf0\x85\x12\x1d\x99\x83\x5e\x7e\xfc\xf3\xd9\xad\x4b\xfe\x9c\x62\xcd\x19\xf3\x5c\x19\xda\x40\xd5\x2c\xe4\xc5\x32\x74\x31\xdd\xd8\x82\xa2\x95\x73\xf5\xe0\xe3\xf1\xf5\x10\xa4\x4a\x53\x78\x0b\xed\xf5\x28\xd4\x0b\x93\xb6\x99\x24\x37\xf4\xd5\x12\xf6\x4e\xee\x74\x3c\xe0\x23\x98\x1a\xa0\x31\x0a\x21\x27\x5b\x08\x7e\xbf\xd7\x23\x36\x4f\x36\xd6\xf6\x61\xaa\x1c\x6f\x63\x42\x67\x9c\xc9\x69\xe4\xc1\xae\x57\x72\x61\xd8\xbd\xe9\xf8\x5f\x63\xdb\x60\x8e\x64\xc1\x8e\xd2\x38\x36\xd0\x04\xc9\x50\xf5\x94\xc4\xb7\x02\xa1\xb0\x32\x0c\x2d\x25\xcf\x0e\x2c\x28\x28\x30\xed\x5d\xbb\x8f\x4d\x68\x41\xf3\x3d\x0d\x64\x09\xb6\x82\xbd\x15\xdc\x54\x8e\xfa\x2b\x0d\x6a\x65\x1a\xb6\x21\x19\x5a\xaa\x5c\xf1\x77\x14\x18\x0b\x04\x32\x34\xdd\xb9\x9b\x9f\x0e\x5c\x4b\x12\xb4\x2c\x65\xad\x09\xa9\x86\xe2\x0b\x0e\x54\x0d\xca\x79\x50\x3e\xeb\x29\x26\x94\xde\xf5\x52\x6a\xcd\xce\xed\x89\x29\x95\x93\x39\xe3\x62\xf9\x19\x59\xba\x8f\x2b\x2b\xf2\x65\x87\xba\x4c\x1a\xbf\x6b\xe8\x2b\x25\xe8\x99\x43\x61\x26\xad\xe3\xa1\x31\x19\x3c\x63\xa8\x0c\x55\x62\x5e\xcc\x36\xf3\x32\xd8\x45\x66\x8e\x6e\xb2\x52\xf2\x44\x71\x47\xc9\x33\x07\x49\xdf\x3b\x18\x6b\x53\xda\xef\xb4\x4a\x19\x9e\x02\x97\x73\x75\xf5\xfd\x7b\x7a\x96\x3d\xbd\x1f\xf8\x85\xb0\xe7\xaa\xd3\xdf\x78\x5d\x36\xa7\x92\x1d\x53\xf8\x6e\xf3\x94\x11\xce\x2d\x78\x4e\x25\x1b\xdb\xf6\x9d\x05\xe4\xef\x44\xcf\x02\xf1\xd2\xec\x89\x00\xc7\x1b\xe8\x73\xe0\x32\xc9\xed\xa1\x32\x28\xba\x2c\xa9\x96\xbf\xf7\x19\x11\x0d\x43\x83\x40\x0f\xc6\x2d\x55\x82\x82\x1e\x19\xa3\xbd\xdf\xa2\xe3\xf6\x61\x43\xa0\x10\x1b\xd1\x23\x5b\x12\xe3\x0f\x43\x25\xfd\x89\xdb\xec\x5d\xae\x05\xf7\x20\x06\xa4\xd6\xe4\x6b\x6d\xe4\xcb\x97\xb0\x06\xff\xf3\x13\x41\xaf\xaf\xf3\x70\x25\xb5\x0f\xb4\xf6\x7f\x47\x8a\x2c\x80\x2f\xa2\xd4\x18\xfa\x98\xc6\x3d\x0e\x33\x3b\x53\x72\x4d\xfa\x05\xba\x57\xf2\xfe\x86\x82\x63\x69\x99\xf4\xd7\x29\xa3\x69\x5e\x45\xff\x65\xc6\xd3\x1c\x2a\xbf\x6b\x44\x2d\x29\xec\x99\x63\x6a\x0e\xb5\xe3\x51\x35\xad\x41\xc6\xb8\x1a\xd9\xc5\x71\xaa\xad\x66\xec\x0c\xf1\xcd\x34\xcc\x59\xe1\x19\x97\x3f\x08\xe4\xcc\xe3\x8a\x8e\xc0\xd9\x83\x69\x72\xf1\xc4\x9e\x74\x62\xb7\x71\xa6\x0c\xe9\x73\x8e\xb4\xd9\xdc\xff\x64\x3e\x66\x6f\x05\xa8\xbf\x43\xcd\x58\xc1\xa4\x25\x57\x7b\xeb\xcc\x8e\xd6\x5a\xe2\x92\xb1\xbd\x15\x96\xd0\x06\x29\x8f\x9c\x79\x59\xda\x63\x4b\x9d\xeb\xc0\x5e\x9b\x30\x69\x75\x90\xa5\xaf\xff\xfa\xfb\x10\xc4\xfc\xf3\xdf\xa4\x30\xe6\xaf\xbf\xe3\x3a\x87\x4b\x23\x25\x73\x76\xc0\xa5\x1b\x3a\xcc\x0c\x8a\x0e\xb8\x8e\xd1\xf8\x92\xa9\x4b\x28\x88\xc6\x5a\x97\xdd\x65\x72\xc6\x04\xfa\x1c\xc6\xa7\x6e\xd1\x31\xd6\xd1\x84\x83\x6d\x0e\x63\x73\x61\x5d\x87\xa6\x50\xac\x07\x1c\x30\x65\x9a\x6b\x18\x71\xbe\x92\xfd\x95\x7f\xb8\x11\x02\x8b\xf5\xd8\xfb\x14\x4f\x86\xc6\xf7\x81\x9d\xea\x0f\xe2\x5b\x82\x3d\x1f\x90\x5c\xba\x14\x29\xd4\xc8\x2e\x31\xca\xa9\xe9\xf0\x77\xba\x9d\xca\xb4\xbf\x2f\x3a\xc8\x1d\x39\x31\x54\xd1\xe2\xa9\xec\x90\x33\x72\x80\x4d\x52\x37\x09\x1f\x21\x93\x58\x10\x91\x11\xf4\xb9\x41\x9c\x9e\x9a\xad\x50\x25\x98\x16\x20\xb8\x0f\x11\xd9\x58\x8b\x1a\x44\x56\x26\x94\x54\x37\xa1\x51\xbc\xd4\xef\xc4\xfa\xae\xf0\xce\xc5\x53\xdf\x55\x78\x77\xfc\x6f\x29\x8f\x2b\x58\xd1\x53\xa6\x44\xa7\x5c\x52\x3f\xb3\xca\xf4\xa0\x0e\x41\x53\x97\x6a\xda\xfc\xe0\xd2\xb5\xa8\x1f\x60\x1c\xb1\x75\x14\x55\x0e\x4c\x24\xd8\x14\x5b\x24\x90\xf2\x6c\xc4\xdd\x85\x9c\xb3\xdf\x76\xcc\x4f\x32\x4a\x60\xc2\xd9\xfd\x70\x71\x46\xb9\x7c\xcb\xe5\x84\x28\xb8\x1d\x39\x53\xa8\xcc\x3c\x4d\x11\x21\x53\xe7\x23\x17\x13\xb3\xf0\x8e\xee\x4c\x41\x73\x82\xe7\x64\x51\xeb\xc0\x06\xee\xaa\x6a\x46\x65\x39\x52\xe7\x26\x5c\x8e\x6c\x39\xf8\x8e\xab\x83\x2f\x81\x34\xa9\x5e\xf6\x1c\xbc\x29\xe5\x91\x67\xa0\xcc\xaa\xba\x3c\x03\x6d\x56\x91\x62\x11\xb4\xe1\xb5\xe5\x78\xa1\x62\xb0\x88\x7c\x85\x09\xaa\xae\xda\x2a\xd0\x04\x6f\x17\xe2\x9f\xd6\x9b\x76\x75\x83\x5c\xe1\x28\xc6\x7e\xc3\xd0\x6f\x04\x86\x60\xe4\x77\x8c\xfd\x4e\xb2\x7f\xa2\x04\x43\x10\x5f\x51\xec\x2a\xb6\x70\x9d\x8a\x1c\x17\xbc\x4a\x8c\x88\xa1\x8a\x3b\xc1\x36\x54\x39\x93\x10\x89\xd3\x95\x32\x84\x08\x61\x6d\xc1\xfd\xb4\x46\x50\xf5\xa3\xe3\xb8\xb2\xc9\x51\x2c\x4e\x97\xa1\x47\x0a\x40\x96\x85\xf8\xaa\x49\x26\x0d\x8a\xc4\xc8\x52\x32\x51\x82\x37\x89\x0a\xd2\x3a\xee\x6e\x92\x4c\x12\x34\xc6\xa0\x64\x19\x12\x74\x40\xc2\x1f\x13\x0a\x90\xa8\xa0\x6c\x29\x13\xa8\x78\xa3\xe5\xae\xb8\x14\x0c\x86\x96\x53\x14\xe3\xbe\x0c\x30\x9f\x9b\x70\x0e\x6c\xc3\xcc\x7e\xd7\x0c\x85\xe1\x4c\x39\xf4\x61\x25\xf9\xe7\x9b\x14\x10\x83\xa5\x2a\xa5\x5e\x06\xeb\x8a\xe1\xad\xa8\x09\x5b\xd9\xcc\xc4\xce\xe2\x04\x5d\xca\x62\x31\xd4\x45\xef\xbf\x05\x37\x48\xce\x26\x40\xd1\x15\xac\x14\x01\x2c\x4c\x60\x1f\x87\x3a\xfd\x3f\x9b\x10\x8b\x33\x6c\x29\x42\x78\xe4\x4d\xf8\x59\x4e\xef\x7c\xdc\x2c\x4a\x18\x4a\xb1\x74\x39\x91\x08\x4f\x9c\x7d\x72\x38\xd3\xb2\x30\x0c\xab\x50\xa5\x0c\x17\x23\x05\x45\xdd\x06\x07\x0c\x19\x4b\x4d\x50\x54\xa8\x65\x7a\x46\x0c\x23\x2a\x44\xb9\x17\x4f\x05\x2b\xfb\xc1\x8a\xeb\x36\x47\x0c\x8a\xaa\x94\xea\x20\x18\x2d\xa8\xfa\x1c\x5a\xb6\x70\xbc\xa6\x9b\x43\x8a\x66\xcb\xf5\x45\xac\x12\x09\x80\xdc\xc5\x73\x90\x3d\x96\x60\x18\x43\xd1\x78\x29\x22\xcc\xde\x7c\x15\xc3\x0c\xe2\x8f\x4c\x1a\x38\xc1\x10\x54\x29\x1a\xac\x67\x54\xd9\x68\x09\x02\x43\x4b\x59\x14\x8e\x26\xb0\x9e\xdf\x09\x31\x82\x22\xd9\x52\x9d\x10\xc7\x82\x9e\x6e\xc2\xa5\xf1\x0e\x85\x5f\xd0\x34\xf6\x2b\x0e\x86\x6e\xd9\x26\x50\x73\x86\x5d\x8c\x60\x50\xa2\x54\x87\xc4\x71\x21\x34\x45\xce\xc4\x4d\x92\x15\xb4\x94\x69\xe1\x84\x10\x8b\xe3\x32\xf1\x53\x38\x5e\xca\xa8\x70\xb2\x50\x28\x82\xd1\x28\x43\x96\x1a\x36\x70\xca\xe1\xdb\xef\x80\x26\xd4\xc1\x12\x0a\x92\xa1\xad\x97\x39\x7d\x8f\x26\x2a\x58\xb9\x18\x8b\x08\xde\xf5\x5a\x5f\x5b\x30\xd6\xe9\xb0\x6f\x04\x8a\x60\x68\x18\x7b\x29\xf5\x13\xa4\xdb\x9b\xc5\xf5\x72\x95\xe1\x3f\x3c\x2a\xd8\xe9\x54\x28\x41\x36\x8d\x55\x38\x20\x15\xe2\xee\xc3\xa3\x11\xd6\x53\x39\x1f\x45\x54\xbc\x81\x30\xb1\x72\x45\xb0\x8d\xa0\x9c\x2b\x89\x2a\x7e\x32\x55\xd2\x1b\x7e\xfd\x3d\x72\x0e\x19\xf7\x50\x7a\x7f\x0f\x72\x12\x2d\xe2\x64\x2d\x92\x94\x4b\x2b\xa1\x64\xd8\x8f\xba\xf3\x14\x5a\x92\x1c\xed\x92\x5b\xae\xb7\x50\x4e\xe9\x44\x78\x3a\x89\x94\xc9\x55\xe6\x5e\xa4\xb2\xb3\xab\xa3\xfd\x48\xe1\x3a\xee\xbb\xda\x63\xfb\x8e\x1e\xf5\xc8\x7e\xaf\xc5\x0f\x6a\xdd\x5e\xa3\x5a\x21\x70\x8e\x24\xe8\x67\x6a\xd0\xab\x8f\x47\x9d\xbb\x59\xbb\x72\x57\xed\xd4\xba\xc3\x4e\xab\xd1\x27\xc7\x15\xfe\x69\xf6\x30\x8d\xeb\x27\x95\x08\xee\x10\xa9\x3e\xde\x0d\xef\x67\x0f\x9d\x59\xff\xa9\xd9\xe8\x3c\x4c\xda\xb3\x07\xaa\x71\xd7\xe4\x88\x4e\xef\xe9\x09\xbf\x1f\xb6\xbb\x95\x3e\x77\xcf\x4d\xf9\x61\x63\x4a\x77\x06\xb5\x31\xdf\x78\x78\xec\xf7\x0a\x13\x21\x5c\x22\xa3\xc1\x53\xb3\xd5\xc1\x6b\x2d\xa2\xd1\x1b\x92\xd5\xc7\x4e\xa3\xdb\xab\x77\x1a\xf7\xd3\xde\x60\x8a\x37\x9f\x88\xe7\x6e\x63\xdc\xec\xf7\xa6\x35\xbe\xcf\x8d\x67\x95\x61\xad\xd2\x7f\xc4\x9b\x85\x89\x90\x0e\x11\x8e\x9a\x55\x07\x4f\x1c\xf5\x44\xce\x38\xbe\xf9\x38\x1b\xe1\xd3\x76\x1f\x9f\xf6\xc9\xea\xf4\xae\x39\x1d\x56\x48\x7e\x3a\x68\xf7\x7b\xf8\xb0\xf9\x40\xce\x46\xcd\x7e\x6b\xd4\x6b\xb7\x9b\xf8\xd5\xa9\x7b\xe7\x90\x31\x9f\x97\xd3\xc9\x2f\x9f\x8f\xef\x2b\xbb\x41\xc8\x7d\xd1\x7c\x9e\x05\x1e\x97\x68\x97\x49\x1a\x94\x29\x0b\xbe\x88\xa4\x91\xf4\xa1\xbb\x39\xc0\x3d\xbd\x20\x5f\xd0\xa4\xb2\xe0\x53\x7b\x5a\x50\x1a\x1c\xea\x03\xd1\x82\xff\x1b\xc4\xe9\x16\xff\x7c\xf6\x42\x92\xcf\xdf\x91\xcf\xd4\x9f\xfe\x86\x8a\xcf\x37\xc8\xe7\x43\xe2\xdb\x79\xa4\x03\x5b\x7d\x87\x9f\xff\x9b\x66\xa8\x71\x6a\x58\x8c\x1a\x7e\x83\x10\x1f\x4a\x2d\xb2\x05\xe1\x06\x41\x5d\x62\x96\xed\x8c\x62\xfa\x3c\x70\xbf\x0e\x6e\x0c\x45\xf7\x84\x0b\x13\x20\xa2\x04\x12\xa4\x09\xa3\xbd\xb4\x3c\xc4\x0d\x82\x79\x02\x79\x1b\xcd\x3f\x7f\x77\x44\xfc\xec\x99\x82\xf0\x0a\x77\x0e\x8d\x53\x9d\x68\x71\xae\x48\x9f\x2b\x12\xaf\xf8\x06\xf4\x41\x5a\xf6\x09\x7c\xb4\x96\x63\xf2\x14\xd3\xf2\x89\xbe\xb7\x38\x57\x78\xc0\x15\xcd\x30\xd8\x87\x6a\xd9\x23\xf0\xd1\x5a\x8e\xc9\x53\x4c\xcb\x27\x8e\xd5\x1e\x57\x39\x4e\x36\x69\xcf\xc1\xa9\x4e\x36\xd8\x77\x10\x8e\x01\x28\x0a\xb0\x98\x48\xd1\x34\x23\x91\x10\xb0\x94\x28\xb1\x0a\xaa\xa0\x24\x09\x44\x05\x97\x08\x54\x22\x18\x1a\xc8\x32\x53\xa9\x10\x28\x14\x21\x45\x93\xa2\x4c\x51\x32\xca\x02\x5a\x56\x2a\x98\xe2\xc4\x6c\xac\x58\x91\x18\x51\x01\x18\x60\x25\x8a\xc0\x30\x91\xc1\x69\x14\xad\x28\x2c\xaa\x88\x15\x8a\x06\x12\x4a\x12\x50\xc6\x48\x1c\x07\x84\x84\xb3\x38\xca\x30\x12\x4e\x60\x80\xc6\x51\x1a\xd2\x34\xea\x8d\x3a\x58\x6c\x66\xe3\xc5\xb3\x74\x7c\xc2\x13\x84\xb9\x04\x4b\x32\x34\x99\xfb\xd4\xf7\xeb\x18\xe3\x6e\xab\xa2\x9d\xf7\x79\xf4\x77\x83\x90\xce\x3f\x98\xff\x4f\xf0\x23\xb6\xff\xe0\x0c\x3d\x1c\xc7\x71\xf5\x7b\x9b\x51\x6f\x0d\xa0\x37\xba\xa3\x75\xed\x89\x53\xa8\x7a\x45\x9e\x99\xdc\xf0\x2b\x3a\x6d\xbd\x0d\x6a\xaf\x73\xb5\xdb\xda\xae\xd4\xea\xfa\x79\x3e\x1e\x60\xa0\x6b\x0c\x9e\x56\xc4\x5b\x6d\x5c\x53\x9e\xb1\xea\xcb\x6c\xb6\xd5\x77\x96\xad\x98\x3b\x73\xa8\xf7\x28\x05\x32\x4f\xcf\xcf\xd8\x56\x72\x50\x73\x8f\xa2\xa9\x48\x73\xe7\x53\x6b\xff\x0f\x37\x74\xfe\xd9\x1c\xbe\x6f\xb8\xc1\xf0\xd5\xfd\xc4\x35\xba\xed\xfb\x77\x40\x0f\x97\x7d\xad\xde\xb1\xe1\xcb\x93\xb8\x58\x3d\xb5\x2a\xe3\x69\xbb\xaf\xc0\x7b\xb1\x25\xbf\xbe\xbd\xb0\x9b\x3e\xc6\xd9\xe6\xad\xc2\x74\x79\xd1\x68\xa9\xd2\x86\xac\x55\xb9\x1d\x46\xdb\x4b\x7b\x76\xd7\x10\x9b\xcd\x35\xd8\xf0\x95\xc5\x23\xd3\xe2\x89\xc6\xaf\x47\xd5\xa5\xdf\xed\x91\x1d\xf0\x6b\x85\x0f\xb9\xc3\xdf\x5d\xf8\xcb\xfe\xef\x99\x7b\xc4\xc8\x21\xc7\xd5\xd1\xfb\xa4\xc7\xff\xea\xbf\xab\xc0\x5b\xf5\xa6\x9d\x4e\x8a\x77\x88\x77\x18\xfc\x32\xc6\x7e\x45\x13\x32\xcb\x28\x14\x41\x43\x48\x33\x32\x26\xe2\x15\x91\x12\x19\x56\xc1\x09\xa0\xb8\x38\x2b\x14\xcd\x02\x9c\x54\x80\x82\x91\x28\x01\x64\x54\xa4\x70\x91\x26\x08\x11\xad\x88\x90\x65\xaf\x5c\xcf\x44\x24\xda\x3e\x95\xd6\x25\x48\x94\xa5\x51\x22\xf7\xa9\x37\x94\x93\x14\x8b\x67\xf4\x17\x22\xa5\xbf\x78\xee\xdf\xd5\xef\xdd\xe0\xf9\x05\xeb\xad\x29\x03\x15\xef\x2b\x33\x52\xdf\xf5\xdf\xa7\xdb\x3b\xe2\x61\x65\xbc\x7e\x7d\x6f\x70\x7d\xbb\x86\xb5\xf1\x6e\xa5\x5a\xa1\x9f\xb5\x25\x2f\xf7\x57\x0f\xb5\x2e\xd5\xec\x98\x6c\xa3\xf7\x42\x51\x6f\x80\xde\xe0\xcd\x76\xd7\x7e\x9b\x0c\x1a\x9d\xf7\x3b\x66\x37\x98\xde\x02\xce\x70\x51\xbb\x5d\x25\x64\x90\xa3\x29\xf7\xb0\xbd\x5f\x62\x5a\xbd\xbb\xd9\xbc\xad\x5f\xda\xd2\x6e\xf8\xcb\x62\x2b\x8d\x5b\x8e\x9f\xa8\xb5\xf9\x70\x60\x6e\x68\x62\xf3\x06\x06\x77\x7d\xfb\x05\x7d\x78\x83\x2f\xb5\xd1\x9d\xce\x70\x64\x7b\x73\xaf\xab\x15\xfd\x0d\x82\xf5\x2d\xca\x2f\x16\xb7\x77\xaf\xcc\x8e\xaf\x2f\x2b\x7a\xd3\xeb\x8a\x09\x5d\x81\xb7\x92\xcc\x29\xe8\x0a\x1c\x57\x7d\xfd\x50\xbb\xfd\x80\x3f\xcf\x9c\xca\x75\x05\xec\x32\x66\xec\x56\x62\x20\xbe\xdd\x60\x6c\x05\xfd\x86\x62\xdf\x50\x0c\x41\xd1\xef\xee\x7f\xa9\xe6\x8a\x63\x34\x8e\xe7\x3e\x25\x71\x96\x64\xe9\x0a\xce\xd2\x19\xc6\x9c\x6b\xca\xff\xca\xbf\xea\x63\x5b\x25\x77\xb7\xbb\x71\xbb\x5a\xa9\xeb\x75\xb6\x89\xa3\xdb\x97\xea\x57\x0b\x9d\xdb\xd6\xa6\xb5\xf9\x85\x3d\xca\xe3\xd9\x13\xa8\xde\x83\x86\x6b\xca\x7c\x82\x29\x27\xff\xfd\x7f\x6e\xca\x68\xd8\x94\x73\xa2\xab\x02\xdb\xca\x4e\x0d\xb6\x52\xaa\x60\xd2\xa6\x9c\xf9\x3b\xda\x13\xd1\xc4\xe7\xc9\xf8\x69\x68\x62\x33\x46\xe2\x34\x2c\x64\x6c\x62\x7b\x1a\x16\x2a\x36\xd1\x39\x0d\x0b\x1d\xc5\x42\x9e\x86\xa5\x12\x9b\x0e\x9c\x86\x85\x89\xcd\x61\x2e\xb3\xe5\xef\x22\xd9\x9f\xec\x3a\xab\x1b\x84\x29\x9a\xf5\x4a\xd9\xf8\x76\x76\xef\x49\x3b\x00\x22\x72\xf0\x82\x37\x79\xf8\xe7\xb3\x6d\x9c\x35\x1f\xbb\x41\x3e\x2b\xa6\xb1\x3c\x2b\x3f\xe1\xcc\x40\x4b\x25\x8d\x3e\x20\xa3\x9c\xa0\xbc\x70\xbf\x8c\x1c\x34\x11\x4c\xd8\x95\xb5\x2e\x43\xd3\x53\xdf\x69\x59\x61\x57\x46\x2f\x6d\x7a\xae\x06\xf3\xb3\x07\x1f\x90\xbd\x4e\xd3\x9a\xef\x41\xf6\x9f\xc9\x0f\xd5\xda\xa9\x19\x9b\x7f\x9d\xd6\x3c\x5f\xb7\xff\x8c\x7e\xa8\xd6\xce\xe8\xf1\x1f\xae\xb5\x1c\xc7\x99\xb0\xbd\xf5\x8c\x1a\xc3\x52\xfb\xfc\x4e\x75\xce\xa9\x95\xaf\x89\xc1\x4d\xc1\x93\x71\xf2\xc3\x1b\x32\x3d\xbc\xc9\x45\x44\x44\xdd\x5e\xda\x40\x9e\x8b\x87\x8c\xb9\xcf\x53\xf1\xc4\x1c\xca\xc9\xfc\xd0\x51\x3c\x69\x61\x4e\x2e\x9e\x4a\xb4\xab\x9e\xcc\x0f\x13\xc5\x93\x1e\xea\x94\xdd\xa2\x78\x89\x60\x27\xaf\xd6\xba\x44\xb8\x93\xba\x1f\xf1\x02\x7d\x2a\xb4\x54\x2e\x41\x51\x64\x2a\x14\x40\x51\x45\xa1\x21\x46\x30\x04\x80\x0a\xaa\xc8\x38\x85\x81\x0a\xad\xe0\xb8\x84\x29\x2c\x10\x71\x80\xcb\x8a\x22\x89\x68\xa5\xc2\x50\x54\x85\xa0\x81\x0c\x71\x9a\x62\x81\x37\xb3\x3f\x6b\xd5\x3a\x94\x11\x22\x82\x89\x72\x6a\xd2\x95\x42\xb1\x8c\x84\xad\xff\x34\xd2\xa3\xbd\x19\x76\x9b\x7e\x81\x2a\xf1\xb2\x34\x5a\xcc\xe4\x4e\xab\xdf\xc2\xb9\x44\x54\x06\x8f\x76\xb3\xdd\xfe\x35\x7b\x60\x36\x0f\xea\x73\x15\xd4\xd6\x54\x87\xea\x72\xee\x0c\x95\x0b\x52\xa2\xd5\xd8\x04\x30\xf4\x9d\x77\xff\x15\x97\xf3\x25\xf6\x80\xcb\x73\xea\x01\x5b\xbe\x61\x50\xeb\x4a\x77\x98\xbd\x7d\x19\x3f\xb5\x9f\xd9\x0d\x3f\x37\xc6\x55\x00\x67\xcc\x54\x6d\x18\x21\x34\x1d\x9a\x69\x85\xbe\x82\xca\xeb\xfb\xeb\xc6\x45\xcf\x0e\xd6\xec\xea\x65\xf7\x2a\x8d\xc6\x34\xaa\xbd\xf5\x3b\x6f\x3d\xa6\xd1\xfc\x85\x93\xe4\x70\xc0\x88\xe0\xa9\x07\x27\x93\xfb\xe7\x96\x66\x12\x63\x71\x54\xc3\x88\x37\xde\x64\xd7\x03\xb2\x3f\xaa\xcf\x77\xb5\xea\xed\x5c\x5a\xcf\xf1\xbb\xb6\x59\xef\xae\xdb\xe8\x78\x42\x0c\xfb\xa0\x3d\xad\x6e\x7e\xfe\xbc\x0a\x67\x1b\xc2\xe9\xd6\x61\x92\x6c\xdc\x01\x3e\xf6\xdc\x03\x72\xd5\x54\x0b\xa9\x65\x0d\x6a\xe2\xc3\xe3\x33\x5e\xd7\x1e\x67\xc0\x7c\xa0\xa7\xdb\x8d\x38\x23\xee\x7a\xf7\xf3\x95\x4e\x70\xe3\xda\xa2\xd5\x58\x51\xe2\x76\xdc\x9a\xb9\xd9\x02\xae\xb2\xb4\x7c\x7d\xcc\x33\xa6\xdb\xa9\xc9\x04\x57\xf7\xf5\x33\xe8\x7f\xd5\xc4\xb7\x33\xe8\x77\x63\xf4\x6b\x6b\x83\x30\x6c\x92\x7a\xab\x0d\xf8\xed\x6a\x78\x4b\x18\xcd\xde\xd7\x5f\x58\x65\xb4\x53\x2d\x4c\x53\xba\x8d\xa7\xe5\x70\x36\x37\xd7\xe3\xaf\x13\x2e\x90\x7f\x29\x1d\xe8\xf3\x67\xca\x5f\x9a\x3e\xa9\xb3\xaf\x27\xd2\x0f\xd9\xd2\x9c\x4b\xb0\x85\x53\x74\x71\x49\x5b\xf8\x9d\xef\xc2\xd3\xc5\x3f\x1f\xd5\x69\xdd\xe0\xd0\xdd\xc6\x1b\xa4\x32\xbd\x7f\x9d\x41\xc4\x75\x96\xf9\xe3\x68\xa4\x64\xb1\x42\x42\xc7\xd5\xb2\x22\x0b\x95\x8a\x2c\x02\x16\x50\xb2\x48\x10\x04\x2b\x56\x18\x45\x06\x8c\x42\x90\x95\x4a\x45\xc4\x80\x42\x10\x22\x20\x69\x06\xc8\x94\x84\xca\x0a\x4b\xd2\x32\x29\x5f\xb9\xeb\xa3\xd8\x39\xf1\xaa\x37\x99\xce\x72\xf2\x24\xca\x56\xb0\xd4\x75\xb7\xfd\xd3\x70\x94\xe4\x2f\x08\x74\x98\xe6\xf0\x7d\xf8\x2a\xb6\xf1\x26\x47\xcc\x1e\x5e\x46\x66\x7b\xf9\xf2\x88\xa2\xca\x1d\x63\x75\x5a\x95\x25\xca\x8f\x36\xf7\xb3\x5b\xee\x91\xe0\xf6\x3e\xde\xfd\xcb\xf0\xf1\xde\x9f\xf9\xd6\xa3\x3b\xb0\x0f\xe6\x2f\xdb\x2e\x98\x0e\x58\xba\xfa\x4b\xb1\x58\x88\x4a\x86\xd9\x7b\x7e\xfc\x55\x9d\xdd\xbf\x36\x8c\x76\xe0\xc3\x39\xae\x4f\x99\xed\x30\xbe\x87\xf7\x4d\x83\x75\x1e\xf1\xb5\xfa\xaf\xb7\xf7\xd7\x61\x75\x68\xf4\xb8\x7b\x55\x19\x8c\x1e\xeb\x46\x67\xf1\x6e\xef\xa4\x09\xa1\x35\x06\xb5\x21\x85\xcd\x5f\x65\xab\xd1\x04\xd5\xde\x6c\x83\x52\xe3\xdb\x87\xc5\x0c\x7d\x9c\xbf\x9a\x68\xad\x3a\xe0\xc9\x1e\x68\x3c\xe0\xed\xa5\x64\x11\xcf\x9b\xce\x52\x15\xc9\xc9\xc8\xec\x76\x0a\xf8\xf6\x88\xd1\xa6\xf9\x76\x6f\x29\xf0\xc8\xb7\xab\xb7\x55\xb4\x83\xde\xdf\xed\xec\xc5\xa6\x87\x69\x4f\x28\xd8\xad\x0c\x8c\xed\x35\xb7\xef\x9d\xda\xae\x4f\xd9\x55\x5e\xaa\x79\x32\x12\x73\xdb\xec\xeb\x4f\xb7\x95\xe9\xa1\x7d\x37\x91\x89\x9c\xfe\x7c\x06\xfd\x9e\xb9\x9b\x4c\xce\xa0\xcf\x71\xff\x3b\x7f\x96\xe8\x5b\xab\xa7\xeb\xa2\xaf\x3f\x67\x8a\x99\xa7\x8b\x73\xdf\x85\x63\x0b\x5f\xa5\x18\xbe\x52\xba\xf8\x67\xce\xd0\x26\xc5\x73\xd3\x76\x7d\x58\x7b\xd2\x7f\xa1\x0f\x1b\xba\x46\x8a\x15\x49\xe7\x59\x6a\x34\xd9\xbc\xf6\xe5\xa7\xfb\xa6\x58\x1d\xe1\xf3\xc9\x83\xd5\xeb\x4f\xdf\xb1\xa7\x07\xbb\x41\xde\xb7\x59\x6e\x3e\xd9\xf6\xeb\xb3\xc5\x83\xac\xae\xf4\x4e\x0f\x97\x6a\x94\xb1\xfc\xca\xa3\xe0\x57\xed\xe2\xbe\x15\xa3\x49\x40\xa1\x34\x09\x45\x40\x93\x0a\x2e\xc9\x22\x90\x45\x86\xa2\x45\x85\x20\x49\x86\x64\x28\x45\xa2\x71\x1a\x27\x2b\x40\x06\x04\x94\x09\x56\x92\x65\x05\x55\x68\x16\xc5\x31\x82\x10\x69\xcf\xb7\xe2\xe7\xf9\x56\x3c\xdf\xb7\x32\x04\x9b\xe1\x5b\xbd\xa7\xe1\x19\xdf\xb9\xbe\xb5\x16\x7b\xa9\x47\xbe\xb5\x8f\xd7\x6e\xb9\x3e\x49\x3d\x55\xeb\x84\xdd\x7c\x68\xf4\xb1\x11\xc1\xa1\x5d\xf8\x3a\x60\xee\x47\xb4\xde\xc3\x38\x16\xce\x54\x79\xd7\xb2\xbd\x2e\x9d\xee\x5b\xb9\x31\xff\xac\x3e\x8b\xb0\xb1\xa9\x59\x66\xbb\xaa\xb7\x5b\x6b\xeb\x16\xa5\x1e\xec\xfb\x7a\xd5\x9c\x1b\xd6\x7a\xd1\x19\xde\x4e\xe9\xc7\xe9\x0b\x69\x6f\x66\xbb\x85\x55\x99\xda\x63\xb2\xd6\x85\xdb\x7e\x97\xbe\x7f\x93\x94\xb7\xfb\x36\x86\xce\xb4\xea\xeb\xeb\x46\x27\xe7\xcc\xa0\xa5\xbc\xb4\xee\xfe\x5d\xbe\xf5\x5c\xdf\x76\x6e\x7f\xee\x6e\x3a\x4b\xf3\x82\xbe\x95\xab\x3c\x75\x18\xae\xf2\xa2\xcd\xf9\x01\x44\xe5\xe9\xb4\xf2\xd0\x94\xea\xc3\x2d\x3d\xbc\xdd\x68\xcd\x37\x89\x98\xd6\x31\x0a\xdc\x13\x2d\x15\xf3\x70\x5e\xda\xb7\xfe\x8f\x7c\x1b\x77\x21\xdf\xca\x90\x87\xf6\xad\xd2\xba\xf8\x87\x5f\xdc\x3d\x2d\x67\xc4\x42\xe2\xcc\xf6\x6e\xfe\xbc\x53\x3b\xe6\x80\xed\x3f\x88\xe3\xe1\x06\x90\xed\x4e\xc7\x18\xa3\x03\xac\xaf\x61\xad\xaf\x1d\xa9\x61\x19\x62\x1f\xeb\x4c\xd7\xdc\x4b\xd3\x9a\xbc\xf4\x55\xa0\x37\x69\x75\x6c\xcb\x8d\xd5\xf0\xf9\xbe\x7b\xff\xb5\x35\xa8\xef\x9a\xe4\xae\x3a\xbf\x78\xdc\x2a\xe2\x90\xc1\x65\x11\x88\x22\x8a\x93\x22\x5e\x01\xa8\x44\x60\x24\x2a\x81\x0a\x26\x33\x40\x62\x45\xa9\x82\x31\x04\xa6\xb0\x0a\x05\x08\x51\xa6\x59\x28\x01\x42\x66\x18\x45\x44\xa1\x44\x49\x57\xfb\xba\xbe\x33\x7c\x6b\x5e\x72\x82\x44\x59\x96\xca\x2a\x7f\xf1\x9e\x86\xb3\x57\xe7\xfa\xd6\x7a\xec\xa5\x1e\xf9\xd6\xb2\xb9\x89\x74\xdf\x5a\xbf\x5f\x6b\x98\xdd\xb9\xeb\x34\xc8\x87\xed\xc6\x46\xe5\x7a\xed\x81\x57\x68\x5b\xa4\x34\x52\xdc\x75\xcd\xbb\x79\x6d\xf5\x55\x7b\x78\xee\x2e\xb7\x92\x4d\x91\x6a\x4f\xc1\x97\x5b\xfb\x65\x4b\x77\x65\xea\xf9\x9e\xe4\xc9\xba\x26\x59\x0a\x49\xf3\xdc\xa2\x7a\x37\x9e\x0e\x2c\x9d\x51\x9e\xea\xff\x2e\xdf\x7a\xae\x6f\x3b\xb7\x3f\x77\xd0\x57\xba\x7e\x41\xdf\xfa\x3b\x73\x32\x1f\xe1\x5b\x4f\xf5\x6d\xdc\x85\x7c\xeb\xa9\x73\x18\xdf\xb7\xee\xc4\x95\x2c\x8e\xb7\xea\x16\x36\x24\xa9\x23\x37\x87\x1b\x6d\xd4\xfc\x6a\xce\xbe\x3e\xc3\x3b\xe6\xa5\xbd\x35\xb8\x37\x65\xf5\x30\x9b\xdc\x5b\x8f\x1d\x08\x5b\x2f\x8f\xec\xca\x12\x9f\x18\xf8\xd2\x84\xb3\x31\xac\xf6\x39\xea\xb1\xd3\xfc\xda\x5f\x70\xad\xe1\xe8\x55\xab\x57\xee\x6f\x9b\x38\x57\x30\x6e\x4d\xc9\x2e\x67\x1d\x6c\x55\x36\xb1\x1c\x3f\xdc\x6a\xef\xad\xe1\x76\x15\xec\xef\x75\x4f\xbf\xf1\x2a\xbb\x1c\xa6\xd1\x8c\xe5\xaa\x84\x53\xab\xce\x58\xa6\x4a\x3b\x5c\xa9\xfc\x46\x99\xe8\x1d\x84\x91\x6f\xc2\xea\x15\xee\x0e\x97\x5c\x07\xc7\x6b\x96\x3d\xef\x25\x82\xd3\x3d\x34\x88\xab\xd7\xc3\xc7\x75\x1e\x13\x45\x06\xa3\x56\x97\x1b\x3d\x21\x6d\xfe\x09\xf9\x72\x38\xf3\x29\xf5\x12\xc1\x03\x8e\xcb\xf2\x9c\xc9\xee\x31\xa7\x87\xd3\xa6\x72\xaf\x3b\x3c\xbe\xf9\xef\xc2\xda\xf6\xd1\x66\x4a\x10\x26\x1d\x95\xc4\x7b\x72\x83\x64\x49\x14\xba\x0f\x2f\x7c\x00\xc1\x85\xe4\x38\x60\x4c\x14\x21\x46\x30\xca\x7d\x02\xb7\xf1\x1b\xfc\x62\xdf\x2f\xc4\x75\x0c\x6b\x12\xe7\x49\x84\x63\x56\xb4\x3f\x32\xec\x26\x72\xde\xd8\x4d\xe8\x78\xb2\xbc\x1b\xfc\xe2\xdf\x2f\x24\x5f\x0c\x6b\x92\x7c\x49\x84\x73\xdf\x4e\xec\xfc\xae\xd8\xde\xba\x83\x42\x84\x83\x06\x84\xb0\x6a\x84\x8b\x48\x17\x25\x9b\x24\xdc\x49\x8c\x05\xd7\x47\x25\xbc\x58\x07\x3e\xfa\x92\x4b\xaa\xe6\x32\xaf\xb5\xb4\xe0\xa5\x5e\x6a\x4a\x75\x5f\x4e\x09\xdd\x65\x25\x4b\x26\x92\x25\x69\x06\x5b\x85\x25\x4f\x5d\xee\xcf\x5d\x51\xbf\xac\xf4\x69\x64\xb2\xe4\xcf\x64\x2d\x57\x03\xf1\xe8\x29\xf6\xfd\x42\xf2\xc5\xb0\x26\x89\x93\x44\x38\xca\x7d\x52\x5c\xe1\x1f\x12\xea\xfd\xef\x42\xcc\x7a\xc8\x92\x78\x0c\x91\x89\xb2\x16\x9c\xb3\x93\x75\xb8\x66\xf8\xf3\x85\x38\x0d\x61\x4c\x62\x37\x4e\xb0\x74\xb4\xe6\x05\x7a\x87\xd0\x42\xd0\xc1\x72\x1f\xac\xbb\x57\xd6\x15\x3b\x24\x34\x72\x2d\x5f\x26\xf2\xc8\x5d\xca\x6e\xa4\x1b\xb9\xa8\xee\x00\x7d\xe3\xde\x90\x9d\xce\x79\xe8\xde\xf3\x13\x18\x8e\x71\x1a\xbe\x44\x3d\xc4\x60\xec\x12\xbd\x03\x50\x3a\x5b\x89\x97\xbc\x9f\xcf\x60\xf2\xdd\xf1\xa9\xac\x26\x82\xa7\xc4\x8d\xe2\xce\x1d\x08\x4f\xe7\x31\x8c\x25\x7c\x41\xa1\x3f\x4e\x46\xdf\xef\x7e\xe0\x4d\xe7\xc6\x1b\x7e\xcf\xe7\xc7\x3f\x1b\xb6\x10\x47\x29\x43\xbe\xb8\x3f\x3f\xe1\x64\x76\x0e\x28\x52\x2e\x6f\x8c\xf3\xe3\x01\xdf\x1c\x1d\x89\x9e\xc4\x5c\xe8\xdc\xea\x62\x0c\xae\x0c\xcb\x9e\x9b\xd0\x4a\xe4\x33\x7c\x0a\x76\x21\x5e\x43\x0d\xae\x91\x59\x93\x1f\xf1\x91\x93\xb4\x5b\xe3\xfd\xc1\xb3\x3f\x8e\x58\x5f\x00\x6b\x71\x01\x9e\xdd\x93\xbd\xfb\xbd\xcc\x13\xf1\x23\x3c\xc7\x8f\x05\x4f\x52\xab\x77\xce\xf7\x85\x38\x3c\x20\x2b\xa6\xd4\xe4\xd3\xcb\x03\xfd\xa6\x9c\x6d\x9e\xa9\x6a\x6f\x20\x38\xc7\x82\xfd\xe3\x84\x0b\xf1\x1f\xbb\x44\xe0\xe6\xf8\xbe\x80\xbc\x29\xe1\xd9\x2e\x29\x05\x9f\xc3\x7f\x7c\xf6\x59\xd4\x3b\x25\xa0\x3c\xd3\x4f\xa5\x62\x2c\xc8\x66\xc6\x2c\x45\x80\x0e\x36\x57\xd7\xe7\x0e\xe6\x31\x74\x61\x13\x08\x4e\x1c\xc8\xbd\x56\xf8\x26\xb8\x7b\x28\x8d\xd9\xc3\x49\xc6\x67\xb2\xa9\xca\x85\x19\x0c\x47\x1a\x27\x30\x6d\xac\x84\xd5\xa5\xf8\xf6\x71\x25\xdf\xe3\x1c\x99\xad\x9c\x24\x49\xb2\x00\xf6\xf6\x72\x02\xf8\xb8\xd2\x6e\x27\x3e\x4d\x84\x84\xbb\x8a\x23\x42\x18\x2b\xc7\x2a\x17\xc6\x49\x32\xf8\xcc\x1f\x70\x9c\xaa\xfc\x6c\x45\xef\xef\xae\x74\x3a\xf7\xf9\xba\x8e\xa2\x0b\xb3\x1c\x6c\x6a\x3e\xbe\x3e\xfe\x88\xa3\xb0\x5e\x2f\xc5\xd6\x11\xce\x82\x43\x5d\x02\x83\xb6\xf7\x4a\xec\x73\x5e\xeb\x01\xc7\xe9\x26\x99\x67\x7e\xb6\x29\x3b\x44\xc2\xd7\x9b\x9d\xc1\xf0\x31\xb2\x18\xe7\x72\xfc\x4a\xef\xd8\xbd\x6a\xd9\x0c\xba\xd3\xd7\xcb\xb0\xe7\xa2\x2a\xc4\x5c\xea\x9c\x39\xc0\x17\xbb\xb1\xed\x6c\xfe\x62\xf8\xf2\x98\x3c\xbe\x30\x2e\x97\xd3\xcb\xe8\x31\x82\xad\x28\x97\xb9\xda\xbc\x0c\x6f\x85\x78\xca\xe6\x25\xe0\x58\x33\x8c\xd7\xf5\xea\x3c\x8e\xa2\xb8\x0a\xbf\xd1\xe0\x46\xba\x44\xfe\x56\x40\x35\x05\xf7\xba\xa1\x4b\x70\x18\xc7\x56\xac\xdf\xfa\x0c\xde\x1c\x5d\xa2\x77\x73\x74\x13\x63\x8a\x10\x17\xf0\xdb\x3e\x9e\x3c\x8e\x4b\x46\x47\x0e\xd6\x8b\x69\xb7\x84\x62\x73\xf5\xe6\x9d\xf8\x7f\x74\x2e\xa2\xa1\x0b\x40\x96\x4d\x68\x59\xe7\x2a\x34\x97\x40\x24\x17\x91\x98\xb8\xf1\x01\x4b\xf0\x7e\xbe\x1d\x64\xe1\xce\xe7\x38\xa1\x97\x45\x11\xfa\x51\xb8\x83\xcf\xde\xad\x4e\x9f\xd4\x65\x62\xcd\x0d\xfb\x13\x97\xea\xa2\x28\xfd\x18\xca\x41\xb9\x37\xa2\x0b\x71\x9b\x84\x3a\x37\x7c\x2b\x6a\xc9\x21\xe4\x97\x36\x86\x08\xea\x53\xe2\xcd\x74\x74\xb1\xfb\xca\x2f\xaf\xe8\xa3\x1b\xd1\x73\xd9\x8f\x35\x28\x2e\x4c\xe8\x82\xfa\x0f\xd3\x7f\xf8\x12\xfc\x3c\x49\x42\xb0\xc5\x85\x48\xba\x6e\xff\xc3\xa4\x49\xbc\xdb\x3f\x4f\xac\xa4\x46\xc5\xe5\x0b\x12\x52\x1f\x26\xd3\xfe\xee\xca\x3c\x39\x52\x33\xba\x51\xd4\x87\x03\x09\x3e\xa2\x6b\xc7\xb1\x27\x4e\x80\xcb\x76\xf0\x28\xd2\xe8\x14\xea\x42\x3d\x3c\x8b\x44\x11\x19\x72\xe6\x75\x99\xc4\x2e\x37\x7c\x1d\x23\x2e\xc4\x7b\xfe\x20\x16\x9e\x6c\x7f\x84\xd9\x1c\xe3\x3f\x79\xaa\xef\x2f\xb6\x3a\x13\xcb\xd0\x7d\x8c\x27\x2b\x38\x19\x9d\xc3\x9d\xbf\x86\x1c\x0d\xc3\x43\x30\x19\x9c\x25\xdd\xaa\x77\x01\x0e\x13\x2f\xeb\x4b\xe1\x34\x09\x36\x83\x63\xef\x22\xcd\x0b\xf0\xe8\xdf\x6a\x9e\xc2\xd5\xfe\xbe\xce\x1c\x56\x2e\xf9\x5e\xa3\xf7\x7a\x66\x30\x96\xfe\x66\x83\x3a\xbb\x0b\x2c\xec\x1d\xa3\x8a\xac\x6d\x07\xd5\x85\x29\xcb\xdb\x09\x85\x04\x40\x86\xfb\xb0\x36\xc8\xb7\x0b\xa2\x61\xbc\x9e\xcc\x62\x06\xce\xdc\x80\xf9\xcb\x17\x19\xda\x40\xd5\x2c\xe4\xdb\x7f\xfe\x83\x5c\x59\x86\x26\x87\x4a\xab\xae\xbe\x7f\xb7\xe1\xd6\xbe\xbe\xbe\x41\xd2\x01\x25\x43\x2e\x06\xe8\x2d\x65\xa4\x83\x8a\xc6\x7a\xbe\xb0\x0b\x91\x8f\x80\x66\x33\x10\x01\x8d\xb1\x10\x2c\xb7\xb9\x2e\x17\xf9\x89\x10\x44\x56\xe5\x47\xc8\x06\xce\x19\xe8\x52\x31\x3a\x2f\x2b\x5c\x68\x52\xdc\xa6\x22\x08\xcf\x5c\xb0\x4a\xc4\x96\xcd\x5a\xd6\x42\x55\x0c\x9d\x5b\xb0\xe7\x16\xf0\x5d\x96\xcd\x38\xde\x02\x0c\x87\x6b\x01\x8f\x8b\x3f\x0b\x97\xdf\xaa\xb2\xa0\x84\xaa\x80\x1a\xed\xdf\x53\x84\xeb\x93\x45\x1a\xfd\x11\xdf\xba\xeb\xed\x0b\xc3\x90\x11\xdf\xe0\x47\x7c\xaf\xc6\x8f\x63\x05\x11\xee\xd3\x7e\x0f\x99\x0e\xea\x8e\x1a\x47\xfc\x78\x32\x6a\xd5\x26\xce\x4f\x75\xbe\xc3\x4f\x78\xa4\xc6\x8d\x6b\x5c\x9d\xcf\xa8\xae\x93\xa1\x15\xfb\x2a\xc4\x32\xd4\x97\x53\x46\x94\x4e\x4e\xe9\x5c\x1a\x27\x51\xfd\xc4\xb3\xe9\x89\xca\xf2\x5d\x7b\x4e\x9d\x61\xaa\x26\xfc\x0c\xdf\xff\x5c\x0f\x61\x3e\x92\xb4\x10\x24\x4f\xb3\x0d\xa6\x9c\x06\x8e\x73\xed\xff\x43\x35\xa4\x30\x13\xd5\x45\xc2\xea\xc0\x65\x8d\x22\x9e\xf9\xfd\x37\x28\x24\xdd\x34\x8e\x52\xeb\x45\xac\x03\xd1\x21\x94\xa1\xec\x6e\x97\x09\x55\xc4\xdb\x06\xb2\x31\xcc\xd7\x08\xe3\xfb\xe4\xa2\xc3\xa9\x7f\x57\x14\x32\xe1\x1f\x27\x3f\x52\x2a\xe2\x9c\x78\xd0\x07\x3b\x2e\x83\xab\x4e\x46\x3c\xff\xc5\x7f\xee\x30\x93\x44\xca\x2b\x3f\x2c\x4a\xcf\x2d\x66\x4c\x26\x1a\xae\x63\xcc\xa4\x1c\x1e\x77\x72\xe8\xc6\x46\xb1\x10\xd5\xe3\xc1\x2b\x93\xa6\x1f\x23\xe7\x90\x0b\x05\xd9\x07\x4a\x91\xf0\x3a\x93\x48\x81\xe2\xee\xfa\xa8\x3f\x38\x5c\x25\x9d\xd2\x3e\xb3\x3c\xfa\x08\x83\xfb\x83\xff\x4e\x43\x63\xb0\x04\x2c\x09\xc8\x30\x00\xc8\x2c\x09\x8a\x02\xe5\x4e\xa5\x33\xa0\xa3\x59\xd8\x08\x60\xb4\xce\x32\x57\x72\xef\x65\x05\x7e\xc7\xbd\x5c\x0c\x79\x07\xa6\xb4\x00\xe6\x17\x9a\xbd\xf6\x37\xe1\x39\x30\xa1\x62\xbb\x14\xb8\x1f\xd9\xaf\xc9\xb7\x0b\x63\x6d\x4a\xa7\x61\x0a\xa6\x0e\x2e\xc7\xde\xda\x45\x6a\xfb\xc0\x39\x0e\xbc\x6a\xb9\xf1\xb0\x83\x38\x1d\xc7\x19\x74\x10\x79\xbd\x5c\x21\x92\xb1\x5c\x69\xd0\x86\x0e\xdc\xff\x0b\x00\x00\xff\xff\xbf\x08\x61\xd3\x2a\xcd\x00\x00") func baseHorizonSqlBytes() ([]byte, error) { return bindataRead( @@ -606,87 +168,7 @@ func baseHorizonSql() (*asset, error) { } info := bindataFileInfo{name: "base-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x65, 0xb0, 0x7b, 0xdf, 0x3d, 0xc2, 0x19, 0x1, 0x51, 0x97, 0x38, 0x94, 0xc7, 0xa4, 0x95, 0xe, 0x6a, 0x91, 0xe, 0x5a, 0x1b, 0xb6, 0xd1, 0xb2, 0x0, 0xd9, 0x93, 0x1b, 0xe9, 0xde, 0xa6, 0xdb}} - return a, nil -} - -var _change_trustCoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x6b\xb3\xa2\xc8\xd2\xee\xf7\xfe\x15\x44\x7f\xe9\x9e\xb0\x67\x04\xaa\xb8\x75\x9f\xde\x11\xa8\x78\xc5\xfb\xdd\x13\x27\x3a\x0a\xaa\x0a\x51\x01\x05\xbc\xbe\xf1\xfe\xf7\x13\xa2\x4b\xd1\xa5\x2e\x97\xae\xde\xb3\x23\xf6\xf0\x61\xcd\xb4\xa4\x4f\x66\x3d\x95\x99\x55\x59\x60\xd5\x9f\x7f\x7e\xfa\xf3\x4f\xa6\xe6\x05\xa1\xe5\x93\x66\x5d\x67\x30\x0a\x91\x81\x02\xc2\xe0\xb9\x33\xfd\xf4\xe7\x9f\x9f\xb6\xf7\x33\x73\x67\x4a\x30\x43\x7d\xcf\x39\x0a\x2c\x88\x1f\xd8\x9e\xcb\x28\x7f\x89\x7f\x71\x31\x29\x63\xcd\x4c\xad\x5f\xdb\xaf\x9f\x89\x7c\x6a\x6a\x2d\x26\x08\x51\x48\x1c\xe2\x86\xbf\x42\xdb\x21\xde\x3c\x64\x7e\x32\xec\x8f\xe8\xd6\xc4\x33\xc7\xaf\x3f\xb5\xf1\x84\xfc\xb2\xdd\x5f\xa1\x8f\xdc\x00\x99\xa1\xed\xb9\xbf\x02\x12\x6c\x71\x5f\x0b\x9b\x13\x7b\x0b\x4d\x5c\xd3\xc3\xb6\x6b\x31\x3f\x99\x2f\xed\x56\x56\xfe\xf2\xe3\x45\xb7\x8b\x91\x8f\x7f\x99\x9e\x4b\x3d\xdf\xb1\x5d\xeb\x57\x10\xfa\xb6\x6b\x05\xcc\x4f\xc6\x73\xf7\x18\x43\x62\x8e\x7f\xd1\xb9\xbb\xd3\x65\x78\xd8\x26\xdb\xfb\x14\x4d\x02\x72\xa2\xc6\xb1\xdd\x5f\x0e\x09\x02\x64\x45\x02\x4b\xe4\xbb\xb6\x6b\xed\x44\x7c\x6f\xf9\x2b\x20\xe6\xdc\xb7\xc3\xf5\x16\x9c\xd2\x1f\x7b\x02\x08\xf2\xcd\xe1\xaf\x29\x0a\x87\xcc\x4f\x66\x3a\x37\x26\xb6\xf9\x6d\xcb\x98\x89\x42\x34\xf1\xac\x1f\x9f\x3e\x65\x1a\xd5\x1a\x53\xa8\x64\xb4\x1e\x53\xc8\x32\x5a\xaf\xd0\x6c\x35\xf7\x92\x7f\xcd\xa7\x96\x8f\x30\x19\xda\x41\x68\xac\x03\x32\xfb\x71\x53\x3a\x30\xa7\xb3\xb9\xe7\xcf\x9d\xe0\x3e\x61\xe2\x2e\xee\x91\x9c\x10\x6c\x11\xff\x1e\xc9\xad\x9d\x94\x90\x3b\x25\xef\x10\x33\x48\x10\x7a\x94\x12\xdf\x76\x31\x59\xdd\x96\x45\xa6\xe9\xcd\xdd\xd0\x40\x13\xe4\x9a\x24\xf8\xf1\x49\xd5\x5b\x5a\x83\x69\xa9\x29\x5d\x8b\x49\x57\x2b\x7a\xff\x02\xbd\x9e\xbf\x66\x22\xf4\x74\xb5\xd2\x6c\x35\xd4\x42\xa5\x15\xfb\xd2\xa9\xe0\xaf\xe9\x98\xac\xef\xc1\x0f\x57\x6f\x43\x1f\x64\xde\x81\x4a\xc9\x1d\x36\xc7\xc5\xee\xc7\xf6\xe7\x41\x38\xb1\x5d\x12\xdc\x42\x3e\x08\xdd\x8d\xbb\xb5\x82\x44\xd9\xe0\x06\xee\x51\xe8\x7e\xdc\x83\xcb\xdf\xc2\x3d\x08\xdd\x8d\xbb\x93\xb7\x5d\xea\xdd\xc0\x3d\x0a\xdd\x8d\x3b\x9d\x1b\xc1\xdc\xb8\x81\xb9\x13\x78\x0f\xde\xc4\x0e\x86\xb3\x39\x99\xdf\x62\x36\x2e\x76\x3f\x36\x21\xfe\x2d\x5a\xa3\xfb\x77\xa3\x45\x61\x7c\x0b\x6e\x27\x70\x37\xde\x2e\x2b\x0d\x09\xc2\xb7\x61\x4f\xe4\x7e\x33\xfa\x3e\x53\x92\xd9\xaf\x3b\xd5\x18\xc8\xbd\x01\x6e\x20\xf7\x6e\x83\xf7\xd9\xef\x96\xad\x2f\x22\xef\xc5\xdc\xce\x01\xde\x86\xdd\x4a\xed\x91\x23\xd9\x73\xe0\x8b\x29\xf7\xb6\xec\x21\x35\xbe\x25\x76\x4c\x74\x6f\x48\x1e\x12\xd7\x6d\xb9\x63\x22\x7a\x43\xee\x90\x58\xde\x94\xbb\xcb\xbe\x63\x42\xb9\x2d\xb7\x4b\x12\x6f\xca\x1c\x42\xfe\x0d\xc9\x6d\x1c\xdf\x16\xd9\xc5\xe6\x6d\x99\x93\x50\xb8\x2d\x6a\x20\xf7\xb6\xc0\x8b\xab\xde\x25\xb5\xf5\xbc\xbd\xa0\xd6\x6b\x69\x95\x66\xa1\x5a\x89\x0b\x4f\xa6\x56\x30\x9b\xec\x25\x9a\xe9\xbc\x56\x56\x5f\x61\xfd\xf8\xb4\x9b\x1b\x57\x90\x43\xbe\xbf\x7c\xc6\xb4\xd6\x53\xf2\x7d\xff\x95\x1f\x4c\xd3\x1c\x12\x07\x7d\x67\xfe\xfc\xc1\x54\x97\x2e\xf1\xbf\x33\x7f\x46\x53\xe6\x74\x43\x53\x5b\xda\x0b\xf2\x0b\xde\xa7\x13\xc4\xd3\x9b\x7b\xe0\x74\xb5\x5c\xd6\x2a\xad\x1b\xc8\x3b\x01\xa6\x5a\x39\x05\x60\x0a\x4d\xe6\xcb\xcb\xfc\xf6\xe5\xb3\x20\x02\xf9\x72\xae\xf9\xa5\xf9\x7b\x9d\x07\x86\xde\x6c\xcf\x09\x97\x95\x6a\xeb\x8c\x4f\xa6\x5b\x68\xe5\x0f\x66\xc5\x27\xb4\x27\xea\x8f\x28\x67\x86\xbc\xa7\xf1\xaf\x40\x22\x02\x6a\x7a\x72\x6a\x6d\xab\x98\xa9\xef\x99\x04\xcf\x7d\x34\x61\x26\xc8\xb5\xe6\xc8\x22\x11\x0d\x77\x4e\xc0\xb7\x62\x98\x50\x34\x9f\x84\xbf\x42\x64\x4c\x48\x30\x45\x26\xd9\x56\x13\x5f\xce\xee\x2e\xed\x70\xf8\xcb\xb3\x71\xac\x40\x38\x69\x6c\xdc\x21\xf7\xcd\x8c\x5c\xf7\xd8\xc8\x17\x07\xb8\x44\xf8\xce\xcb\xe3\x49\xf7\xeb\x27\x86\x61\x5e\x3e\xb1\x31\x63\x0e\x91\x8f\xcc\x90\xf8\xcc\x02\xf9\x6b\xdb\xb5\xbe\x0a\xe2\x1f\x51\xdf\x54\xda\xba\xfe\x2d\x92\xde\x7e\xd1\x45\x0e\xb9\x20\x2c\xcb\x97\x84\x17\x68\x32\xbf\x24\xcd\x71\xfc\xb9\xf8\x04\x05\xa1\xe3\x61\x9b\xda\x04\x33\xb6\x1b\x12\x8b\xf8\x07\x91\x4f\x7f\x9c\xf7\xfd\x21\x8a\x9f\xe4\x22\x78\x88\x88\x7d\x21\xc0\x18\xb6\x65\xbb\xe1\xd9\xcd\x80\xcc\xdc\xb9\x73\xf9\x9e\x3b\x77\x82\xb9\x41\xdc\xd0\xdf\x96\x82\xe7\xcd\xdc\xc9\xd8\x2e\x9d\xa0\x6d\xc5\x88\x49\x10\x5e\x36\x67\x27\x38\xf4\x1c\x82\x3d\x07\xd9\xee\x05\x29\x08\xcf\x8d\x0e\x87\x3e\x09\x86\xde\x04\x07\x4c\x48\x56\xe7\x96\xd1\x09\xb2\xae\x59\x74\xb3\x6f\xf6\x8c\xcc\xb7\x5a\x27\x36\x32\xec\x89\x1d\x6e\x1b\xb7\x6b\xff\x0b\x25\x93\xc9\xad\xdb\xb6\xe5\x6e\xe7\x42\x5b\xb3\x76\x9f\xc4\x66\x03\x87\xa9\xc5\x9e\xf4\x5f\x51\x59\xcd\xa4\xf3\x5a\xba\xc4\x7c\xfd\xfa\xd2\x15\xff\xfa\xc9\xb0\x7f\xfc\x71\xe3\xdb\xe7\x06\x9e\xe3\xbc\x6a\xc0\x5b\x88\x27\x7d\x79\x86\x76\xda\xcf\x6f\x21\xbd\xa6\xe7\x0c\xee\x02\x7f\x3b\xcc\xd7\x81\xb1\x1d\xff\x1e\x8d\x89\xed\x94\x71\x17\x0e\xae\x87\x49\x3c\x16\x4e\x62\xe0\xb5\xd2\xd3\xf1\xf9\x51\xf5\xa7\x13\xe3\x9d\x21\xfb\xcf\x50\x30\x8c\x19\x23\xbe\xf2\xed\xa9\x4f\x16\x6f\x0a\x19\x73\x73\x4c\xc2\x89\x1d\x84\x6f\x8a\x1e\x66\xdb\x2f\xee\xbe\xfb\xd8\x9c\x78\x01\x09\x6d\xe7\x4a\xe4\x47\x89\xf5\x42\x6c\xc5\xfa\xfc\x74\x52\x7f\xc0\x3b\xeb\xef\xa3\x9e\x2b\xae\x73\xad\x36\x38\x85\x39\xb6\xe2\x9a\xb7\xec\x27\x5f\x8f\xf6\xd8\xbe\xf0\xfa\x7a\x08\x72\xe2\xdf\x99\x41\x77\x2b\x2f\xf8\x5a\x06\x8d\xdc\x1d\x05\x01\x09\x2f\xf1\xb9\x8b\xd5\xab\xb7\x91\xb3\x0d\xab\xcb\xd0\x53\xdf\x36\x89\x7b\x25\x89\x45\x37\xaf\x65\xb8\xe8\x26\x83\xbd\xb9\x31\x21\x5b\x7f\x33\xed\x68\x45\xf2\x43\xb3\x68\xac\x87\xf7\x25\xeb\xae\x2d\x67\xfd\xba\x6f\xe0\x15\xdf\xd8\x7f\x73\xcf\xf0\xd9\x57\x5f\x78\xbf\xe6\x10\xbb\x09\xfb\xa3\xfe\xb0\x2b\xeb\x77\xee\x60\x4f\x2f\x0d\xfc\xc2\xab\xc8\xf5\xfc\xf0\xc0\x46\x46\xcb\xaa\x6d\xbd\xc5\xb0\xe7\xc3\x26\x59\x85\x28\x0c\x89\x33\x0d\x99\x6d\x58\x04\x21\x72\xa6\xcc\x76\xca\xe4\xcd\x77\x9f\x30\x1b\xcf\x25\xaf\x07\x5b\x8a\xec\xc9\xdc\x8f\x0d\xb5\xd7\x34\x84\xeb\x29\x79\xbb\x53\x76\xcb\x12\x31\xdc\xd7\x69\xff\xa0\xf1\x4a\xef\xec\x57\x36\x3c\xff\xbc\x53\xbf\x46\x4c\xfc\x8b\x61\xff\x60\xd4\x4a\x86\xd9\xfd\xf3\xff\xfc\x64\x44\x41\x00\xc2\x1f\x17\xfb\x2a\x5e\x86\x3d\xdc\x65\xf1\x55\x9e\x78\xce\xbd\xc2\xc6\x6e\xa1\x6d\x1b\x75\x17\x0d\xda\xd6\x8e\x4f\x98\x12\xcc\x8d\xbd\x11\x3e\x09\x4e\x06\x20\x70\x71\xc6\xe8\x13\x74\x88\xa5\xd7\xf6\xc4\x6a\xde\x47\x6d\x8a\x2d\xd6\xdd\x31\x32\xee\x0c\x9b\x05\xe4\xd6\x08\xf3\xda\xce\x58\x0d\xff\xa8\x9d\x47\x88\xfb\xed\x7c\x35\xc8\x9d\xdd\x27\xee\x82\x4c\xbc\x29\x79\x63\x48\x3b\xaa\x7e\x62\x20\x8a\x2d\x77\x3c\x41\xc1\xcb\x7a\xed\xd7\x7b\xfa\xe1\xe8\x45\x6f\x11\x31\xbb\x32\xd0\x9c\x92\xf0\xb2\x0e\x7c\x82\x78\x4e\xc4\x89\xb6\xab\x64\x1c\xd7\x88\x1e\x26\xe3\xb8\x28\xfe\xf5\x18\xb7\xa7\xc5\xdb\x85\x98\xba\x15\xdd\xb1\x15\xae\x47\xad\x8a\x3d\x02\x78\xa4\xec\x8a\x46\xfc\x1b\x99\xda\x0e\x82\x39\xf1\xef\x87\x32\x3d\x7c\xb1\x3a\x7d\x45\x4b\x38\xb1\x1d\xfb\xca\x8c\xe2\x66\x2d\xf8\x77\x56\x55\x31\xef\x8c\x3d\x55\x79\xa8\x8a\x8a\x7f\xff\xa3\xea\xa8\x18\xe6\xe3\xf5\xcf\x2d\xd4\x5d\xa7\x9d\x21\xed\x7b\xf2\x5f\x97\x03\xef\x64\xb9\xf7\x61\x27\x8f\x3f\x43\xdb\xb9\x79\xb8\x3a\x49\xc5\x77\xd4\x1b\xe7\x0e\xb8\x8a\x9e\x52\x5e\xbd\x6b\x0e\x91\x6b\x91\x8b\x85\x7d\x9c\x9c\xf8\x63\xbb\xc7\x73\xf5\x71\xed\xfc\x71\x8a\xfe\xcd\xfc\x18\x1e\x5e\x5f\x22\x27\x5c\xf9\x24\x98\x4f\x2e\x66\xf7\x70\xe5\x90\x37\xeb\xb9\xe3\x23\xd6\xc7\xf9\x3c\x7b\x6e\xf1\x28\xa9\x67\x4f\x9c\xbf\xde\x45\xdc\xfe\x4b\xb7\xd8\xdb\x8b\x5c\x22\xe2\x3e\xb7\x3b\x7b\xc2\xfd\x08\x51\x99\x6d\x65\x4d\x3d\xff\x8d\xc5\x50\x26\xa3\xb6\xd4\x37\x38\xbb\x0d\x19\xbc\x1b\xaf\x50\x69\x6a\x8d\x16\x53\xa8\xb4\xaa\xc7\x45\xc5\x8e\xaa\xb7\xb5\x26\xf3\xf5\x4b\x2e\xd5\xa8\xf5\xf3\x05\x9d\x4f\x17\x40\xb6\x52\x87\xa9\x9e\x9e\x2d\x57\x32\x7a\xb6\xd8\xae\xd4\xda\x7c\xbe\x0f\x06\xe5\x6c\x33\x5f\xad\xb4\xd3\x5a\x55\x6d\x76\xa5\x7a\x5a\xaa\xf6\xf8\xfc\x97\x6f\x8c\xb2\xbb\xa4\xfd\x7f\x65\x96\xfd\xc6\xf0\xdf\x18\xf6\xdb\x8e\x65\xe6\xcb\x97\x6f\xcc\x17\xb5\xae\xaa\xaa\xfa\xf3\xe7\x97\xe8\x06\xff\x72\xef\xf8\xf7\x8f\x1f\x6f\x59\x98\xe6\x41\x3d\xcb\xe7\xdb\x9a\xc0\xab\xe5\x5e\x3b\xdb\xce\x03\xb5\x5f\x54\x7b\xbd\x5c\xaf\xd7\xe1\x3b\xf9\x5e\xbf\xdf\x10\xb5\x7e\x4f\x6b\xd5\x4a\x99\xde\xa0\xa9\x76\x45\xa9\x57\x85\x5f\xbe\x31\x1c\x7b\xb8\xbe\x31\xb2\x20\x2b\x0a\x80\x82\xf2\x5b\x6c\xec\x95\x72\x62\xa3\x02\xab\x95\x82\x56\x4b\x97\x2b\xd9\x94\x04\x78\x15\x02\x71\x20\xd4\x2a\x99\x66\x43\xcf\x75\x4b\x52\x2e\xa5\xa7\xcb\x75\xbd\x90\xad\xc2\xa6\xa4\xf5\xbb\x9d\x76\x8c\xc5\x13\x13\x85\xdb\x26\x0a\x17\x4d\xbc\xe2\x38\xe7\x0b\x6e\x4f\xf8\xe0\xf5\x65\xb4\xf7\x3a\xe2\xe9\x52\xda\x81\x47\x11\x60\x45\xa6\x02\x10\x09\x11\x65\xcc\x19\xbc\x64\x08\x86\xac\x50\x1e\x20\x2a\x00\x8e\x33\x24\x41\x54\x10\x0f\x29\xa2\x1c\x64\x01\xc2\xac\x21\xf0\x86\x08\x80\xc1\x4a\x06\x51\x94\x2d\x55\xec\x93\xd7\x16\x43\x90\x78\xc4\x13\xc0\x53\xca\x43\x19\xb1\x92\xc1\x12\x89\xa5\x98\xa3\x22\x06\x9c\x6c\x72\x14\x99\x98\x67\x0d\xd1\x34\x59\xd9\x04\x00\x0b\x92\x24\xf0\x82\x22\x8b\x32\xc7\x0b\x88\x13\xb7\xbe\x17\xf5\xd4\x17\xf5\x3f\xf6\x4a\xf5\x4a\x36\x5c\x27\xd7\xcd\x52\x4a\xca\xb8\x19\x25\xcf\xb3\xab\x51\x2a\x11\xb0\x56\x18\x2c\x0b\xcb\x0d\xd7\xc3\xcd\x6e\x1f\xa5\x8a\x28\x6b\x6d\xe5\xb5\x0a\xd4\xd1\x66\xca\xd7\xdf\x44\x1e\xa8\x3d\x0e\x46\x62\xa9\xf1\xbf\xa1\x21\x1f\x7a\x7d\x39\x8b\xf5\x2b\x8e\xca\xc9\xa2\x01\x0c\x43\x64\x45\x84\xa1\xcc\xcb\x10\x99\x32\x11\x09\xa7\xf0\x94\x12\x53\x20\x98\xe3\x0c\x96\x72\x1c\xc0\x1c\x04\xb2\x2c\x4b\x82\xc2\xb1\x12\x67\x72\x86\x28\x48\x82\xc1\x6f\x9d\xec\x23\x9c\x5d\x54\x0c\x9e\xe7\x45\x42\x78\x08\xa0\x04\x25\x19\x71\x12\x67\x42\x68\xca\x92\x24\x63\x48\x01\x54\x04\x6a\x20\xa8\x20\x24\x63\x20\xb2\x40\x46\x80\x10\x51\x82\x82\x81\x29\x30\x8c\x2f\x51\xbe\xe3\x04\x41\x11\x24\x45\x62\xf9\xbd\xc7\xa6\xf9\xda\x60\xc4\x55\xe6\x82\xc7\x1a\x45\xa9\x0b\xdd\x75\x75\xd1\x5e\xe5\x40\x67\xea\x8d\x13\x8b\xac\x5a\x0d\xd3\x5c\x89\x2f\x4b\x29\x49\x1c\xcc\x85\xbc\x62\xe6\x31\x3b\x53\x83\xc1\x48\xa9\x8b\x7d\x79\x5d\x28\x98\xe2\x3c\x1c\xd3\x64\xba\x9a\xd0\x9d\x24\x5b\x32\x02\xea\x6f\x6a\xed\x88\xe1\x5e\xad\x53\xae\x44\x1e\x55\x38\xfc\xd9\xa5\xb7\xe0\xf8\xef\xa5\x5a\xab\xef\x7d\xa7\xc6\xd6\x46\x4d\xd0\xa0\xd2\x30\x90\x57\x9d\x42\xca\xe2\x2d\x79\x55\x5a\xcc\xaa\xd5\xa4\x9b\xb4\x92\xbd\xa5\x55\x6b\x24\xf3\x29\x69\x46\x94\x69\x60\x17\xe7\x70\x5c\xc9\x37\xa0\xd7\xcb\x6b\xad\x02\x86\x5c\xad\x52\xec\x49\xd3\xe2\xcc\x63\x79\x15\x7a\x09\xc1\x6d\x18\x60\x33\x5f\x46\xaa\x2e\x78\x74\xa6\x70\xc9\x2b\x5e\x3c\x3a\xc3\x16\x7f\xa3\xef\xfd\x9e\xeb\x4e\x8f\x56\x08\x25\x8a\xc2\x12\x81\x13\x08\x51\x10\x35\x15\x2c\x49\x26\xa7\x40\xce\xc0\x92\x6c\x88\x2c\x00\x3c\x85\xd4\xe0\x89\x24\x11\x99\x17\xa8\x44\x15\x28\x40\xc0\x9a\x12\x22\xb2\x19\x79\xe3\x47\x44\x85\xc2\x62\x16\x03\x6a\x88\x8a\x60\x48\x84\x05\x86\x60\xf2\x98\x48\x32\x47\x24\x24\xcb\x40\x31\x39\xd9\xe0\x31\x34\x25\x0e\x6c\x8d\xe1\x25\xca\xcb\x58\x41\x8a\xc2\xcb\x22\xab\x88\xe0\xcb\x37\x06\xc4\x3c\x1a\xbc\x78\xf4\x6a\xe8\x57\xa5\x7e\xce\x6f\x5b\x5e\x33\x18\x39\x70\xa0\x27\xa5\xac\xd4\xc8\x2d\xe5\x46\xad\x51\x87\x76\xbe\xdb\x48\xad\x96\xc6\xa0\xd7\x5d\x0f\xb0\xbe\xc2\xa9\x4e\xd3\xae\xb9\x81\xaf\x8a\x8e\x66\xa6\x79\xd8\x11\xd6\xe5\x64\xb5\xc6\x25\x95\xee\x64\x36\xe9\xe4\x6d\xb2\x69\x34\x76\x0c\x47\x1e\xbd\x3c\x32\xae\xeb\xa5\x9a\x51\xf6\x46\xf9\x44\xa3\x91\x68\x35\x53\x99\x52\x2e\x95\x0c\xe7\x34\xcf\x3b\x3a\xc7\x9b\x66\x3a\xef\x73\x45\x97\x97\xd6\xb5\x74\x9d\xad\xd4\x24\xd4\x09\x13\xaa\xd4\x4b\x03\xd7\x22\xc4\xb3\x84\x65\x3f\x08\x5b\x79\x2d\x19\xcc\x8b\xc9\x52\xc5\x99\x8e\xbd\x7e\xb1\x1f\xe1\x97\x2f\x78\xac\x16\x5c\xea\xf5\xff\x02\x8f\x35\x44\x22\x0b\x14\xcb\x32\x6f\x98\x00\x43\x2c\x49\x0a\x0f\xa0\xc9\x51\x4e\x34\xa1\xc2\xca\x3c\x21\xbc\x24\xf1\x9c\x88\x38\xaa\x50\x19\x73\xc4\x14\x24\x4e\xe4\x24\x01\x00\x49\x80\x46\xe4\x6d\x1f\xe0\xf5\x54\x42\x22\xcf\x63\x19\x11\x96\x9a\x2c\x00\xa6\x24\x40\x81\xb2\x0a\x2f\x0b\x0a\x82\x1c\x67\x18\xd4\xe0\x91\xac\x40\xcc\x62\x96\x50\x4e\x26\x90\x40\x13\x8a\x88\xca\xb2\x02\xc8\xd6\xeb\x61\xcc\x63\xe1\x8b\xc7\x0a\x52\xc2\xa9\x0b\x8d\xde\xdc\x59\xac\x31\x96\x73\xed\x9c\x42\xf4\x7e\xa6\xbc\x68\x49\xba\x4b\xbd\x22\xa5\x42\xa3\x5d\x2e\x93\xf9\xa8\xa8\x26\xfb\x69\x12\x3a\xb5\xda\x06\xe0\x59\xb9\xdd\x0a\xd7\xb2\xd8\x92\xd1\xa2\x98\xce\x2f\x1a\xad\x7c\x46\x1b\xa4\xd4\xa6\xd3\xaf\xd4\x4a\x30\x62\x78\xeb\xb1\xd5\x18\xe3\x7a\x8e\x6b\x0f\xdc\xf4\x26\x8d\x9c\xbe\xce\xe2\xea\x82\x5d\x77\x9c\x95\x12\x14\x0b\xbd\x7a\x95\x9f\x24\x72\xbe\x92\x6a\xb9\xb5\x60\x58\x73\xc1\xd4\xd6\xfb\xbe\x95\x54\xcb\x32\x6e\xf7\x96\x63\xaf\x8b\xea\x8d\x79\x32\x98\xd9\x6d\xb6\x92\x59\xe4\xaa\xad\xf1\x2a\xe7\x43\xbb\x05\xa3\x1c\x5f\xbf\xe0\xb1\xb9\x8b\x53\x88\xff\x02\x8f\x15\xa0\xc0\x4b\xb2\x64\xb0\x12\x11\x28\x6b\x98\x00\x08\x8a\x00\x39\x56\x12\x4d\x83\xe5\x65\x9e\x97\x45\x02\x88\x2c\x42\x09\x0b\x98\xb0\x0a\xc5\x92\xcc\x72\x02\xc7\xf1\x22\x34\x04\xb8\x2d\x69\x3e\xc4\xeb\x65\x00\x08\x4b\x79\x53\x80\x80\x97\x59\x99\x43\x04\x60\xd9\x94\x58\x59\x86\x22\x07\x09\x12\x44\x53\x92\x4c\xc0\x22\x85\x63\x15\x80\x44\x2c\xb3\x3c\x34\x4d\x8a\x78\x08\xa1\xcc\x73\x5f\xa2\x12\xe4\xe0\xb1\xc2\x8b\xc7\x4a\x86\xd7\x53\xec\xf4\x22\xc3\x55\xb0\x50\x60\x97\x34\x1b\x34\xeb\xd6\x1c\xba\xe6\x10\x0d\x13\x74\xd4\x90\xb2\x66\x37\xcb\x95\x41\x47\xef\x89\xda\x34\xd3\x25\x99\x29\xb6\xaa\xb4\x5f\x2c\x8c\x69\x86\xef\x87\x96\x04\x93\x46\x16\xf8\x5a\x86\x4c\x2b\x99\x40\x9f\x5a\x79\xd2\x8f\x18\x8e\x3c\x36\xe6\x37\xe1\x2c\x23\x0d\x16\xb9\xcd\x58\x70\x16\x49\x35\x1c\x48\x2a\x0d\x52\xe3\x89\x9d\x2b\x77\xda\x61\x48\xda\x8b\xb9\x9e\xf0\x3b\x8b\x7e\x3a\x29\x66\x6a\x96\x1c\x74\x32\x25\xd5\x42\x50\x19\xe5\xd3\x85\xc6\xb0\x35\xeb\x04\x58\x2e\x97\xc6\xf5\xb1\x68\xf4\xd5\xf1\xa6\xe6\x8d\x1b\x85\x42\x84\xdf\xbe\xe0\xb1\x79\xf6\x52\xaf\xff\x17\x78\x2c\xe0\x05\x01\x03\xc3\x94\x29\x85\x80\x00\x51\x36\xa2\x81\xd9\x64\x05\x56\x91\xe0\x36\x3f\x2a\x12\x81\x86\x81\xa8\x28\xb2\x06\x34\x4d\x40\x05\x19\xb0\xa2\x80\x05\x41\x34\xe5\xc8\xdb\x3e\xc2\xeb\x59\x51\x86\x06\x4f\x15\x0c\x0c\x91\x17\x58\xc9\x34\x30\x52\x14\x51\x50\x04\x16\x23\x5e\x14\x89\x00\xa0\xc0\x0a\x3c\x2f\x00\x04\x0d\x89\x93\x39\x91\x87\x32\xde\x4a\xc8\x92\x02\xe8\x97\x6f\x8c\x18\xf3\x58\xf1\xc5\x63\xb9\x46\x93\xe4\x83\xbc\x40\xd3\x72\x99\x9b\xb4\xb5\xbc\xa1\xab\x5e\xc1\x33\x46\x62\xae\xa1\xf4\x48\x9a\x72\x50\xed\x68\xcd\x81\xde\xd1\x90\xd8\x9a\xb2\x12\xdf\x65\xb5\xf1\xbc\x2f\x26\x79\x6c\x26\x3c\x53\x41\xbd\x8e\x06\xda\x61\x62\x99\x1c\x29\x5a\xa1\xda\x9a\x35\x47\xbd\x58\x8e\xb5\x8e\x8c\x83\x8d\x32\x74\xd4\xe6\x54\x57\x42\xb5\xb3\x1a\x87\xab\x0c\xe8\x35\xab\x53\x60\x87\xab\xe6\x42\x73\xca\xa2\xda\x1e\x2f\x53\x4d\xa8\x35\xc6\xb9\xa1\xae\x0b\xac\xd4\x9f\xa4\xe4\x05\x72\xba\xdd\x4e\x06\x15\x1d\xa1\xd5\xa8\xb7\xed\xb6\xd8\x04\xb9\x54\x7f\x3c\x1a\x0c\x06\x43\xa1\x16\xcd\x0a\xfa\xff\x35\x1e\x7b\x65\x5d\xe2\xc2\x5b\x22\x4f\xac\x72\xbc\x7e\xc5\xe0\x19\xb0\x6b\xcf\xc0\x9f\xc3\x3c\x7f\x8c\xfd\x04\xda\x95\x87\xd0\x4f\x20\x5e\x79\x5c\xfc\xde\x35\xa2\xd8\x23\xe3\xe3\x42\x9b\x5a\x6e\x94\xea\xf9\x66\x53\xcf\xe8\xd9\x9e\xa4\xf7\x9b\xb9\x46\xba\x91\x29\xb4\xd4\x54\x35\x97\x2f\xd7\x6a\x9d\x4e\x59\xaa\x14\x0a\x20\x5f\x18\xb4\xc5\x46\xaf\x01\x1a\x15\xbd\x07\x4b\xbb\x3a\x77\xb7\x1a\x93\x1a\x77\xea\xb5\x52\x73\xe5\xeb\x54\x94\x9b\x15\xad\xdd\xf0\x1c\x55\x1f\xe5\xfb\x8a\x82\x82\x04\x97\xae\xb8\x0d\xc7\xf5\xc0\x68\xae\x77\x8e\xde\x17\x95\x85\xe9\xe8\x7f\xb7\x61\xa6\xd9\xd2\x98\x72\x4b\x0c\x9a\x5e\x7a\xe5\xd4\xb8\xcc\x74\xb4\x29\x58\xc3\xcd\x4c\xe4\x1b\x49\xb9\x20\xc1\xb9\x91\xac\x4f\xe7\xab\xc4\xa2\xac\xec\x56\x42\x4c\xa5\xbd\xe4\xa3\xef\x5b\x87\x3f\xa9\x08\x74\x79\xf8\x77\x46\x55\x95\x74\x2c\x8a\x53\x70\x3a\xcc\x2b\x8b\x5c\x69\xcc\x16\xad\xc0\x1f\x2f\xfb\xaa\x2b\x42\x58\xa9\x17\x56\x52\x37\x57\x17\x4b\xbc\x0e\x45\x5d\xd1\x06\x4d\xbe\x1f\xc1\x81\xe1\x18\x25\xc7\xd0\xe7\x38\x3a\xed\x02\x25\xe7\x9b\xa6\xd3\x6e\xfb\xbc\x5e\xe4\x07\xc4\x10\x5a\xaa\x35\x17\xc4\x6e\x67\x55\x13\xfb\x33\x69\x96\xac\x8c\xac\x19\x49\x25\x07\x56\xc3\x17\xec\xc9\x8c\x15\xb5\x7a\x27\x69\x07\x9d\x74\xbe\xbe\x94\xe6\x7e\x69\x94\x93\x7a\x33\x75\xf9\xf3\xe7\xf9\x68\xf1\xc1\x5d\x03\x9e\xea\x9a\xf2\x69\xd7\x64\x52\x13\x76\x91\x65\xb3\x9d\x52\x21\x41\xd6\x41\x66\xd6\x6f\x2c\x75\x63\xd8\x73\x0b\x1b\x19\x26\x7b\x49\x0e\x75\x67\x9d\x36\x29\x4a\x95\xac\xa6\x1e\xba\x06\x9c\x65\x9b\x77\x53\x9f\xae\xc9\x6e\xad\x9a\x30\x16\xed\xfa\xa2\x30\x50\x38\xca\x05\xdd\x4c\xe8\x5b\x2b\x8f\x1d\xb9\xd9\x6c\x39\x94\x96\x95\x56\x38\x08\x12\xad\xa4\x3e\x04\xd9\x12\x1a\x37\x9d\x99\xe6\x17\x5b\x2b\xa9\x97\x14\x7c\x97\x2e\xc7\x3d\xa8\x24\xe6\x23\x03\x07\x83\xb1\x86\x97\x13\xd9\x53\xeb\xbf\x9d\x7a\xf8\x14\xf5\xf5\x33\xea\xd5\x8c\x62\x15\x45\xbe\x2f\x27\x6b\x98\xf7\x56\x8d\x2a\xd0\x37\xd3\xda\x6a\x26\x8f\x0b\x44\xc9\x96\xcd\x72\x63\xac\xa5\x4a\x03\x8b\x95\x7d\xeb\x40\x3d\x7c\x96\xfa\x6a\x4d\x4a\x4c\x7a\x75\xd4\x93\x0b\x62\xaa\x3e\x99\x66\x4a\xb2\x61\xb9\xba\x58\x4e\xb2\xa0\x3c\x6b\x67\x52\xf5\x5e\x41\xa5\xc5\xd9\x50\x84\x78\xbe\x5e\x2a\x6e\x6e\xd1\x87\x29\x3d\xc7\x62\x43\x58\x8f\x93\xde\xb4\x01\x66\x48\xb4\x73\xf9\x6a\x77\xdc\x97\x94\x5a\xce\xca\xb9\x69\xeb\xb7\x53\x2f\x3c\x45\x7d\xfb\xdc\xeb\xa9\xd7\x1c\x57\x06\xb0\x3a\xe1\x55\x41\xb1\xc6\x76\x43\xae\x0d\x6c\x3e\xb3\x18\x29\x41\x8f\x04\xf5\x8a\x38\x66\xab\xcb\xb9\xa3\x62\xe1\x48\xbd\xf0\x2c\xf5\x41\x29\x59\x5c\xb0\xb8\xb0\x69\x2b\xcb\xc2\xc2\x5d\x76\x27\x95\x1a\x2b\x6a\x53\x90\x29\x23\x27\x5d\xaa\xf7\xa6\xf5\xc9\xb4\xd1\x97\xb8\x15\x48\x8d\x55\x6e\x3a\xef\xf4\x9b\x2d\xdd\x80\x89\x2a\x5e\x6e\x66\xf9\xa9\x97\xa8\x29\xee\xd0\x15\x58\xa1\x88\x46\x58\x69\xf4\xc6\x8b\x4e\xe6\xf7\x27\x1c\xf1\x29\xea\xfb\xe7\xd4\xfb\xd3\xaa\xdb\x5a\x0c\x8c\x7a\xb3\x29\x8c\xfc\xe4\x80\xdb\x88\xc3\x0d\x37\xc5\xed\x16\x6e\x02\x29\x93\xa8\xb1\x75\x4b\xa8\x4e\x4b\x15\x7a\xa4\x5e\x7c\x3a\xe1\xe0\x60\xde\x1b\xcd\x66\x8d\xe5\x14\x19\x4b\x02\x95\x6e\x39\x93\xc6\xdd\x0e\xeb\x07\xfa\xd2\x13\xbb\x9b\x49\xa7\x60\x90\xf1\x24\x6b\xd3\xb1\xa4\x34\x16\x1b\x93\x33\x69\xaa\x26\x07\xb8\xd8\x97\x3b\x09\x79\x8e\xa7\x20\x6f\xd5\x07\x22\x26\xa9\x45\xb2\x6c\x0a\x2b\x4d\xcb\xa8\x3b\xea\xaf\x0f\xec\x97\x5e\x82\x7a\x60\x60\x7f\x79\x11\xea\xd0\x99\x84\x57\x64\x28\x51\x91\x72\x32\x52\x00\xe4\x45\xd6\xe0\x0d\x05\xb0\x22\xcb\x2a\x14\x11\x20\x03\x81\xe5\x01\x47\xb0\xc8\x29\x2c\x91\x11\x96\x0d\x02\x10\x4f\x31\xc7\x29\xd0\x10\xc5\x78\xa7\x46\x59\x69\x97\xdb\x73\x8d\x8e\x2a\x4f\xf5\x5c\x10\x26\xfd\x55\x81\x6d\x34\x72\x76\x5f\x9d\x97\xf1\x08\x70\xb3\x8d\xd4\x2e\xf0\x38\x87\xc8\x88\x54\x61\xb8\x5b\x9c\xbe\xd5\xf8\xcb\x2f\x3d\xbd\xbb\xf1\xc7\x17\x9f\x0e\x8d\x9f\xa0\x20\x8c\x5e\xa9\xc6\xfb\x57\x1b\xcf\xae\x6d\x05\xf4\x74\x25\x76\x1e\x51\x17\xec\xd8\x87\x18\xf2\xcd\xa1\xbd\xd8\xdf\x3c\xb7\xe3\x7f\xa2\xa7\xe7\x9f\xf7\x1b\x1e\x7c\xfe\xce\x70\xbb\xe7\xe9\x9f\x03\xe2\x2f\x88\xff\xf9\x3b\xf3\x79\xc1\x71\x7f\x71\x7f\xb1\x9f\xf7\x37\xcc\xb9\xef\x13\x37\xd4\xa3\xa6\x7d\xfe\xce\x88\xa7\x9f\xa7\xa2\xb7\xde\x83\xcf\xdf\x99\xff\xfb\xe9\x45\xd1\xff\x7c\x8a\xab\x8d\x24\xb7\xc0\xac\x20\x9a\x78\xeb\x0f\xbc\x2c\x1a\x3c\x26\x1c\xa5\x80\x57\x0c\x9e\x87\xbc\xa0\x18\xb2\x20\x53\x05\x12\x93\xc3\xa6\xa9\x00\xca\x12\x56\xe0\x78\x83\xa7\xa2\xcc\x29\x00\xca\x8a\xc0\xed\x2d\x3a\xe0\xba\x64\x15\x7e\xfe\x7e\xa6\x6d\xd7\x98\x6d\xdb\x3f\x7f\x67\xd8\x93\x5b\xff\x7b\xf6\xfd\xc0\x45\xd3\xad\x5d\x12\x06\xa2\x81\x4d\xc5\x00\xa6\x60\x42\x05\x53\x5e\x30\x00\x56\x38\x05\x03\xd6\x10\x21\xc6\xa2\x04\x00\x0f\x78\x62\x2a\x00\x01\x60\xca\x1c\x52\x30\x92\x80\xa4\x20\x13\x98\x2c\xff\xf9\xd3\x05\x0d\x57\x38\x10\x88\x62\x88\x26\x55\x80\x09\xb0\x24\x01\xc8\x4a\x94\x35\x30\x90\x80\x40\x64\xcc\xf2\x08\x01\x64\x40\x22\x12\x11\x41\x53\xe4\x28\xcb\xf1\x22\xcb\xca\x04\x9a\x92\x49\x25\x83\xb2\xef\xe7\x80\xfb\xf6\xfa\x9e\x37\x0f\xa7\xf3\xf0\x63\xdb\x7e\x8b\xe1\x67\x1f\xea\xbe\x87\xe1\xa7\x75\xfd\x26\x2f\xfb\x87\x83\x7f\x38\xf8\x87\x83\x7f\x38\xf8\x87\x83\x7f\x38\xf8\x87\x83\x7f\x38\xf8\x8d\x1c\x44\xff\xf7\xff\x3e\xfd\xef\x3d\x45\xc3\xcb\x36\x69\xbb\x3d\x18\xce\xdb\xb0\x2b\x1a\x38\xf6\x1e\x24\x97\x84\x4b\xcf\x1f\x4f\x51\x10\x4c\x87\x3e\x0a\xc8\x05\xa4\x16\x09\x42\xa6\x99\xc9\x32\x95\x9d\x30\xf3\x83\x69\x92\x69\x48\x1c\x83\xf8\x0c\xcf\x72\xc2\x3d\x8a\xa8\xe7\x9b\x24\x30\xa7\x9e\xbb\xe5\x7e\x82\xe6\xae\x39\x3c\x57\x14\xed\x71\x70\x0f\xd8\xae\x64\xdb\xbf\x43\x1c\x5c\x6e\xff\xbe\x68\x0a\x6d\x27\xea\xce\x6f\xe7\x35\xd4\xb1\xef\x3f\x0f\xd1\xb6\x14\x8a\xb4\x7f\x8a\xf5\xf6\x67\x4a\xc8\x7d\x82\x0e\x5a\x85\xab\xc0\xde\xdc\x29\xee\x93\xa8\x70\x7b\x43\xf8\x3e\x57\xd8\xd6\xb1\x81\x39\x8d\x7e\x66\x7c\xe9\xfa\xf2\x52\xa1\xef\x1e\x8b\x0d\xb2\xed\xcc\x7a\x1c\xa0\x35\x48\x2c\xb4\x51\x23\xab\xa1\xa2\x95\x86\x2b\xbe\x46\xbb\x7e\x2d\xac\x8f\x06\xec\x60\x2a\x56\xa0\x64\x73\xc7\x35\xf1\x5c\xf4\x37\x51\xea\x37\x92\xc6\xca\x9e\x56\xd2\x7d\xbd\x24\x94\x73\x6a\x31\x31\xaf\x66\xda\xe9\x32\xe1\x86\xe3\xaa\x1d\xda\x89\xaa\x9d\x6c\xe4\xda\xa1\x73\x58\x11\x28\x0e\x9f\x5c\xa6\x79\x64\x45\x21\xa5\x4a\x9a\x36\x6c\x6a\xa8\x01\x5c\x5d\xcc\x79\xc9\x2c\x50\xcb\x24\x5d\x5c\x97\x97\x2d\x6d\xda\x91\xe7\xb9\x69\x52\x2b\x65\x7a\x29\x59\x55\x94\x32\xa9\xb0\xec\xa4\xe2\xac\xd2\xe5\x85\x39\x21\xb6\xb8\x36\xd3\x28\x95\x6f\x4c\x8b\xcd\x85\xd5\xcc\x2b\x6e\x5f\xaa\xaf\x96\x18\x71\xa9\x83\x3d\xe9\xfe\x93\x8f\x25\x53\x8f\x2c\x83\xd5\xab\xab\x54\xa1\x3d\xcc\x8d\xb1\xb0\x4e\x0c\x67\xb5\x15\x5e\x66\xf2\x96\x6d\x8e\xca\xda\xaa\xd4\xa1\xfa\x70\x46\x57\x69\x8b\x5b\x52\xb5\x46\x5b\xf9\x11\xae\x14\x5b\x83\xa0\x3e\xd2\x41\xb1\xe7\xcd\x03\x57\x75\xac\x06\x8b\x9a\x6d\x1f\x6a\xc3\xe4\x80\xaf\xb2\x65\x33\xdf\x0d\xeb\xf5\xc8\x9c\x11\x87\x4c\xb3\x30\xe1\xbb\x1d\x99\x1f\x78\xfd\x42\xb5\xe7\xe4\xad\xa1\x49\x24\xb0\x9c\x39\x21\x0f\x55\x5a\xed\x04\x72\x61\x54\x5d\x74\x93\xd5\x65\x3e\x9d\x83\x9b\x0d\x54\x73\x24\xc5\xf5\x1d\xa5\xb0\x4c\x39\xc3\x52\x6d\xdd\x2f\xf9\x8e\x96\x4f\x36\x13\x1d\xd4\x6e\x00\x77\xb7\x56\xf7\x84\xbf\x59\x87\xfe\x5f\x3e\xfb\x18\x38\xba\xc8\xfb\xfc\xb7\xae\xba\x86\x3e\x81\xe2\x6c\x6c\x96\xba\x8e\x9c\x9f\xd7\x3a\x23\x75\xe9\x76\x26\xb8\x24\xa5\xe5\x52\x75\x12\x08\x9d\x66\x0e\x4c\x8b\x8d\xbe\x2b\x54\x93\x6d\x43\x06\x95\x5e\x7e\xd9\x4a\xea\xf9\x66\xb7\x96\xa5\x0b\xdd\x45\x78\x05\xb5\x1c\x71\x7b\x96\x91\xdc\xe4\xab\x66\x23\xa5\x46\xcf\x9d\x52\x9d\x6c\x11\x92\x25\x9d\xc8\xfa\x72\xd3\xed\xd4\xeb\x38\x08\xd2\x96\x3d\x9c\xd7\xbc\x41\x9e\xc3\xb0\x98\xec\x59\xa9\x76\xa3\x38\x0e\xdb\xb1\x07\x53\xc7\x15\xb6\x87\xfc\x47\xbd\xbd\xcc\x78\xe5\x87\x7c\x4f\x3c\x91\xbc\xfa\xbb\xa9\xf7\xae\xde\x9d\xfc\x76\xea\x38\x04\x1a\x40\x91\x89\x01\x11\x91\x15\x49\x10\x01\x2f\x88\x10\x98\x08\xf3\x9c\xa9\x40\xc2\x01\x83\x9a\xac\x04\x0d\xc0\x03\x42\x64\x40\x38\xc8\x19\x54\x62\x39\x24\x60\x85\x85\x94\x7b\x79\x0b\xf7\x24\x3b\x96\x8f\xec\xee\x28\xb6\x93\x29\x56\x67\x8b\xb9\x75\x38\x5c\x56\xb8\x49\x9f\x45\xeb\xa9\xc7\x29\x95\xfc\x6a\xa1\xa7\xd7\x55\x21\x4c\x69\x66\xba\xb3\x58\x66\x95\x25\xb0\x42\xbf\xea\x0e\xd4\x3b\xae\xab\x6f\x73\x47\xbd\x9b\x7e\x46\x7f\x3f\x99\x30\xcf\xf0\xee\xd4\xff\x7a\xfd\xff\x32\xef\x54\x91\x4c\x44\x29\x32\x64\x93\x13\x59\x1e\x20\x20\xc9\x32\xe4\x44\xc1\x34\x58\x03\x50\xca\x21\xc4\x63\x44\x21\xcb\xb2\x94\x50\xa8\x60\x9e\x23\xd4\x94\xa1\x84\xb1\x41\x0d\x82\x76\xbc\xf3\xaf\x79\xff\x9b\xda\xfd\x51\xbc\xcb\xb1\x47\x6a\x17\xdf\x67\x7e\x92\x77\x03\x43\x59\xc4\x06\xc6\x2c\x8f\xa1\xc8\xca\x9c\x24\x4a\x9c\x09\x91\x80\x24\xa2\x60\x91\xc8\xa2\x60\x22\x5e\x31\x0d\xc8\x11\x91\xc7\x12\x42\x54\x62\x11\x4f\x09\x11\x0c\x20\x62\xb2\x7f\x47\xf7\x26\xef\xe9\xb9\x07\xbc\x10\x0a\xb3\x74\x4d\x5b\x4d\xeb\x49\xe0\xe5\x2b\x89\x0d\x27\x35\xd6\x76\xc0\x4d\x68\x39\xdb\x77\xea\x5d\xcb\x9f\x37\x13\xad\x48\xbe\xd8\x4e\x27\xf6\x8d\x3a\xcf\xb6\xf7\xf3\x9e\x79\x4e\x7f\xd5\x7c\x4c\xff\xbd\xbc\xcb\x82\x44\xb1\x4c\x29\x4f\x31\x05\x98\x87\x48\x94\x64\xce\x54\x84\x6d\x1e\xe1\x11\xe1\x58\x16\x9b\xbc\xc4\x09\x32\x07\x29\x2f\x10\x89\x97\x79\x83\x27\x82\x28\x41\x49\x31\x45\x01\xed\xdf\x34\x7d\xcd\xfb\x07\xb6\x3b\x36\x2a\xdc\xcf\xbb\xf6\x9c\xfe\x32\x7c\x4c\xff\xbd\xbc\x03\x8e\xf2\x1c\x8b\x45\x48\x4d\x82\xa1\x80\x00\x24\x48\x04\x2c\x55\x20\x84\x00\x60\x22\x50\x00\x14\x03\x40\x99\x35\x25\x0c\x28\xa5\x0a\x4f\x79\x03\x40\x5e\xa4\x86\x29\x28\x70\xff\xbe\xe4\x6b\xde\x3f\xb0\xdd\x85\x47\x78\xcf\x3e\xa7\x5f\x6f\x3f\xa6\xff\xf6\xe8\x7f\xf1\xd7\xbb\xef\x1f\xa8\x7f\xf7\x28\x9d\xd3\xe5\x7c\x7d\x51\x1f\x1b\x25\x3e\xaf\x82\x6e\x67\xd4\xf0\x4b\xce\xa8\xc7\xb2\x34\x27\x07\x7a\x41\x72\x58\xad\xb1\x2c\x76\x93\x6a\x2f\x7a\xb7\x24\x36\x1a\x9f\xb3\xf4\x8a\xb5\xd0\xb0\x7a\x0d\x51\x93\xbc\x8c\xce\xea\xf5\xc4\xb2\xdf\x4c\x2b\x9b\xde\xa2\xd7\x69\x81\x95\x5d\xb3\xfb\xf3\xa6\xc1\x65\x16\x4e\x5d\x27\x72\xd4\x75\x1d\x75\x11\xff\xa1\x55\x6a\x37\x1a\x44\x9d\xdc\x1f\xd5\xcd\x5a\x8b\xcf\x09\xc3\x99\x9b\x72\xac\x5c\x8e\x58\x4a\x51\x9e\x40\x93\xd3\xdc\xf6\x64\x35\x9e\x68\x93\xbc\x12\xcc\x06\x3e\xab\x48\x5c\x56\xac\xea\x5d\x4a\x92\x0e\x1c\x4f\xb3\x61\x21\x11\x14\x58\x9b\x9b\xe9\x76\x28\xa8\x6c\x71\xdd\x75\x8d\x61\x5f\xef\x0a\x5e\x66\x5b\xc7\xf1\x1b\xa7\x1a\x96\xc4\x22\xee\x96\x27\x83\xcc\x3a\x2c\x98\x93\xaa\x26\x25\x55\xac\x97\x47\x92\x57\x1b\xd6\x0d\x65\x99\x9b\xf0\xf5\xd6\xea\xf8\xfb\x84\x1b\x1c\x1c\x3d\xe3\xe4\x29\x6e\x4c\x76\xf7\x03\x08\xf5\xef\x1b\x1d\xd5\x0f\x18\x9d\xb3\xad\x6e\x2a\x78\x42\xbf\x7a\xa6\x3f\xcd\xcd\x53\x38\xef\xb5\xe6\x56\x79\x51\x0f\x33\x52\x6a\x58\xd0\x41\x85\x28\xb8\x53\xa3\xb9\x42\xa2\x68\x0b\xc5\x45\xbb\x9a\x18\xa8\xa1\x14\xf1\xf7\xcc\x28\x79\x29\x5b\xfe\xee\x29\xd9\xe3\x41\x96\x3e\xb3\xfe\x95\xc3\xf9\xb3\x8a\xa8\x93\x2a\xb2\x46\xab\x32\x6a\xd7\x14\x31\xb5\xa1\x81\x42\x58\xd3\xf3\x2b\x83\xde\x26\xd5\x2d\x8e\xb3\x5e\x49\x1a\x2f\xc6\x11\x73\x37\x82\x2c\xe5\x94\xa6\x4d\x6b\xe1\x2f\x4b\x55\x9e\xed\xa5\xab\xb4\x4f\x7b\x41\x4e\xd3\xda\xe1\xb2\x8f\x90\x46\x67\xcd\xb9\xb8\x76\x8a\xce\x24\xe3\xa0\x44\xa1\x27\x16\xa4\x82\x65\x19\xed\x41\xd9\x33\xeb\x78\xa0\xc0\x42\x59\xa5\x25\x5c\x57\x2b\xb3\x9e\x51\xa8\x4a\xeb\x60\x49\x48\x39\xbd\x0d\x84\x44\x6f\xbd\x48\xf8\xa3\x54\x3f\x5d\x1d\x91\x42\xbd\xdb\xd3\xd3\x9b\xe4\x6a\x66\xf3\x8b\xba\x9a\x49\x28\x45\x76\x28\xc9\xc3\x3c\x30\x12\x09\xef\x60\xd8\xdf\x1f\x64\xcf\x3a\xf9\x93\x41\x36\x93\x92\xad\x8c\xf9\x91\x41\xf6\x6f\x9c\x8a\xde\x15\x64\x1f\x3c\xff\x2e\x89\x23\x62\x83\x91\xe3\x15\xe4\x56\x6e\x92\x49\x12\xcb\x04\x52\xad\x17\xe6\x4b\xa5\x4d\xb7\x23\x2f\x3b\xf6\x20\x85\xd2\x73\x41\x17\x22\xcf\x18\x1c\x49\xbd\x31\x92\x45\x2f\x49\xa5\x3a\x9d\xca\x7e\x8e\xf3\x8e\x4c\x05\x92\x87\xeb\x88\x97\x3b\xe8\xaf\xa7\x94\xb1\x53\xea\xf2\x33\xb0\x90\xea\x74\x2d\xd7\xca\x64\xac\x19\x5c\xab\x55\x10\xec\xd5\x6c\x5c\x60\x53\x9e\xd5\xf3\xab\xa1\x64\x55\x39\x91\xaf\x1b\xe3\x21\x8f\x9b\xad\x36\x25\x19\x6f\x61\xb2\x35\x15\xd1\x61\xa6\xb7\x0a\x87\x1d\x75\x12\xe8\xf3\xd1\x24\xe5\xac\x47\x29\xb5\x1f\x05\xc5\xa2\x3d\x0c\x17\x58\x0d\x1b\x96\xd5\x1b\xac\x56\xa5\xae\x2b\x62\xc3\x1b\x98\xde\x74\xcd\xe6\x1d\xbd\x37\x5b\x98\x25\x3d\x21\x18\x95\xf0\xe8\x5f\x97\x03\xae\x7f\xda\xa9\x27\x01\x17\x71\xb7\x9b\x73\xc7\x7e\x36\xf8\x40\x42\x1a\xb9\xc7\xbe\xb8\x72\x5d\xa9\x3f\x4f\x02\xfe\x43\xf4\x5f\x49\x36\xf7\xe8\xff\x2d\x35\xc8\xeb\xeb\xdf\x56\xfb\xbd\xb7\x06\x52\x8f\xfa\xeb\x8f\xe8\xcf\x76\xda\xec\x1e\x5c\xef\xc2\x2c\x4b\x86\x55\x51\x5d\x2b\x69\xb6\x16\xe4\x34\x6b\x61\x72\x12\xc7\xb5\x15\xb9\x3f\x82\x8e\x3e\x76\x94\xba\x24\x8c\xd3\x60\x11\xeb\x8a\x63\xc0\x2d\xcf\xf9\xbb\x2b\x21\x7d\x70\x61\xfa\x78\x42\xba\x31\xea\x3f\x91\x90\x22\x52\x26\x75\xfd\xe4\x75\xd9\x58\x42\xca\xf6\x2a\xfd\x3a\xe7\x56\x64\xcd\x69\x8c\x17\x65\x13\xf3\x94\x74\x2d\x53\xf5\x0b\xab\x06\x9d\x98\x43\x69\x33\x9f\x9a\xad\x6c\x7a\xbc\x91\xfd\x54\x31\xbb\xf4\x0c\x0b\x6e\x12\xc3\x00\xb6\x1d\x17\xb4\xf4\xae\x2e\x54\x26\x3e\xd7\xa4\x4a\xba\x26\x17\x4d\x2b\xd7\x0b\x32\x4d\xab\x1e\x25\x8d\x61\x2f\xd9\x4f\xae\x93\xb4\xd6\x6c\x3a\x24\xb5\xee\xf4\x06\xea\x0c\xd6\x33\x66\x71\xd5\x4d\xb5\xd6\x3d\xb7\x94\x0e\xe6\x1d\xb7\x21\xac\x26\x6f\xcd\x00\xee\x4b\x48\x71\xaf\x7d\x24\x21\x54\x8f\x7d\x91\x3a\xe2\xc7\xaf\xdb\x09\xe1\x03\xf5\xa7\x1f\xd1\xff\x6a\x51\xe4\x3f\x2e\x20\xd5\xd3\x45\x93\xbf\xc5\xbe\xe8\x8a\x4d\x73\xde\x9d\x30\x3e\x78\x45\xe5\xf1\x84\x91\xb9\xe8\x04\xd1\xf5\x6c\xc2\x38\xbf\x62\x09\x23\xb7\x0c\x66\xe5\xc2\x66\xe9\x37\x0a\x05\xdc\xcf\xf5\x9a\x1b\x6b\xed\x88\x99\xb6\x51\xce\xfb\x6d\x9f\x24\x8a\x1d\xae\xd0\x0d\x2a\xbe\x5d\xf0\x1c\xdc\x07\x9b\xdc\x9c\x0e\xc2\x74\xba\x23\x28\x6a\xa6\xa8\xac\x39\x51\xa8\x75\xb4\x6c\x27\xe8\x41\x41\x22\x70\xc4\x96\x93\x8d\xee\x92\x8d\x82\xba\x4c\x0b\x75\x6e\x9c\xac\x72\x59\x8f\x15\x9d\x72\x6d\xa2\xd5\x37\x60\x22\x6f\x9c\x4d\x53\x5d\x29\xb5\x64\xa2\x29\xfb\x95\xb4\x21\xad\x06\xc7\xc8\x78\x2a\x61\xc4\x02\xec\x81\x80\xb5\xb9\x63\x5f\x3c\x14\xb0\x1f\xa8\x3f\xf3\x90\xfe\xe8\x7f\x63\xab\x79\xff\x71\x01\xa9\x9e\x26\xe4\x77\xc6\x8a\xda\xe9\xb4\xf6\xfb\x5c\xbc\x77\x5d\xea\xa3\xfd\xe3\xb1\xfe\xf9\x68\xfd\xaf\xae\x8b\xfa\x6f\xad\x70\xde\xd8\x4f\xef\xbd\xcb\x9c\x67\x7b\xea\xbd\xe4\xd7\xf8\x3a\xe5\x6e\x6b\x9d\x63\xfc\x5e\x48\xd0\xd7\x51\x0e\x0b\x31\xbb\x0d\x79\x5e\xa1\x5c\x3d\x03\xe4\xf5\xd1\x48\x87\xb3\x4f\x5e\xf6\xdd\x7b\xa3\x99\xf1\x33\x9a\xa2\x93\x99\x62\x88\xd1\x4b\x29\x6a\x26\x73\xe1\xb4\x82\x83\x42\xa6\xd6\x28\x94\xd5\x46\x9f\x29\x69\x7d\xe6\xeb\x61\x23\xd7\x6f\x87\x53\x42\xae\x9e\xd9\x71\x76\x5a\xd4\x47\x19\x1e\xdc\xb0\x3a\xb8\x65\xf2\xa5\x33\x14\x8e\x07\x64\x3d\x6d\x9e\x81\xdc\x4b\x96\xbd\x28\x38\x35\x6a\xb7\x6d\xf3\xed\x03\x16\x6e\x9e\x0c\xf6\xb4\xb9\x27\xe0\x97\x0c\xbf\xa1\x9d\x69\x57\x0a\xf5\xb6\xc6\x1c\xf7\x72\x7c\x57\x4b\x3e\x86\xef\x77\x36\xe0\x75\x1f\x1c\xcf\x9c\xb8\x72\x5e\xc2\xc9\x79\x72\x4f\xdb\xbb\x03\xbb\x64\x68\x4c\xcd\xa9\x85\xfb\x5d\xfc\x2f\xef\xde\x1f\x3f\x3c\xef\x69\xe3\x22\xac\x4b\xb6\x1d\x95\x9c\x9a\x66\x4f\xbf\x45\x7b\xfa\xdf\xdc\xad\xfe\xc2\xa1\x81\xcf\x5b\x1a\x83\xbc\x68\xf0\xb9\xca\x4b\x9d\x7e\x65\x4b\xfb\x93\xa3\x13\x3f\xc2\xd2\x60\x6e\x5c\xb1\xf1\x45\xcd\xa9\x75\xd1\x6e\xf8\x37\xf6\xb7\x7f\x75\x5e\xe4\xd3\x46\x1e\x01\x2f\x19\x7a\xa6\xee\xae\x1c\x16\xfb\x59\xe2\xf9\xa9\x99\x4f\x5b\x7b\x04\xbc\x64\xed\x99\xba\x53\x6b\x5f\x76\x89\xbf\xb1\x0b\xfb\xab\xd3\x43\x9f\xb7\xf7\x00\x78\xd1\xde\x53\x75\xa7\xf6\x1e\x36\x72\xbf\xb1\x41\xfb\xab\x63\x54\x9f\x36\xf8\x08\x78\xc9\xe0\x33\x75\x57\xa7\x06\xbb\x0d\xda\xbf\x1d\x77\x5f\xbf\xb9\x03\xf7\x85\x63\x66\x9f\x6f\x47\x0c\xf2\x62\x4b\xce\x55\x5e\xca\x12\x01\x99\x7d\x7b\xd9\x72\xfa\xfa\xee\xd8\xe7\xc7\xef\x7e\x80\xed\x37\x0d\x7f\xca\xea\xb3\x29\xea\xa5\x43\x89\x9f\xb6\xff\x14\xf4\x52\x23\x2e\xa8\xbd\xda\x92\xf8\xce\xd5\xd7\xa6\x9a\x87\x03\x9b\xf7\xb6\x47\xc7\x3b\xdf\xb7\xa7\xf6\xee\x24\xe8\x33\x1c\xa6\x5a\x39\xce\x62\xdb\xcd\x42\x25\xc7\x18\xa1\x4f\x08\xf3\xb2\x81\xfe\x1f\x4c\x37\xaf\x35\x34\x26\xbe\xa1\xfe\x71\x97\xe4\xd7\x13\xcd\xd3\x33\xa8\x1f\xb5\xf2\x14\x66\x6b\xe4\x7e\x9e\x72\x62\x62\xfc\x54\xa5\x6f\xf1\x33\x94\xbe\xed\xce\x36\x7a\x65\xdd\xf1\x20\xed\x47\x0d\x3b\x20\x6c\x6d\x3a\x06\xc6\x89\x59\xd7\xa7\x8a\x27\x47\x7e\x3f\x63\xc2\x0b\xc8\xce\x8a\x58\x82\xb9\xd3\x90\x93\x53\xca\x1f\x35\x24\x0e\xb2\x35\xe4\x74\x22\x7c\xa7\x25\x27\x27\xab\x3f\x6a\x49\x1c\x64\x6b\x49\x6c\xf3\x87\xfb\xcd\x38\x39\x0d\xfe\x09\x4b\xe2\x38\x7b\x63\x5e\x66\x09\xa7\xc6\xc4\x4f\x4e\xb9\x95\xbe\x9e\xb3\xe8\x1c\x68\x6b\xd2\x59\x6e\x7c\x93\xa3\x9a\x17\x84\x96\x4f\x9a\x75\x9d\x79\xf9\xf1\x0e\x83\xe7\xce\x94\x31\x3d\x67\x3a\x21\x21\x89\xd4\xfe\xff\x00\x00\x00\xff\xff\x39\x45\x2a\xc6\x31\x81\x00\x00") - -func change_trustCoreSqlBytes() ([]byte, error) { - return bindataRead( - _change_trustCoreSql, - "change_trust-core.sql", - ) -} - -func change_trustCoreSql() (*asset, error) { - bytes, err := change_trustCoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "change_trust-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb8, 0xd6, 0xff, 0xe6, 0xf4, 0x97, 0x9d, 0x9b, 0x9a, 0xdd, 0x6e, 0x91, 0xe8, 0xcd, 0xd9, 0x21, 0xb, 0xf9, 0x76, 0x49, 0xb5, 0x6d, 0xb5, 0xf0, 0xed, 0xf6, 0x3d, 0x1b, 0x86, 0xe3, 0x10, 0xc0}} - return a, nil -} - -var _change_trustHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3d\x69\x8f\xe2\xc8\x92\xdf\xe7\x57\x58\xad\x91\xaa\x5b\x55\xdd\x38\x7d\xbb\x67\xfb\x49\x06\xcc\x55\xdc\x37\x8c\x46\xc8\x47\x1a\x5c\x80\x4d\xd9\xe6\xaa\xa7\xfd\xef\x2b\x1f\x80\x31\xbe\x38\xba\x67\x9e\xde\x5a\x33\xad\xc2\x8e\x8c\x2b\x23\x32\x22\x23\xd3\xce\xaf\x5f\x7f\xfb\xfa\x15\x69\xea\xa6\x35\x35\x60\xa7\x55\x45\x64\xc1\x12\x44\xc1\x84\x88\xbc\x5e\xae\x7e\xfb\xfa\xf5\x37\xfb\x79\x7e\xbd\x5c\x41\x19\x51\x0c\x7d\x79\x02\xd8\x40\xc3\x54\x75\x0d\x61\xbf\x51\xdf\x80\x0f\x4a\xdc\x23\xab\xe9\xc4\x6e\x1e\x00\xf9\xad\xc3\x77\x11\xd3\x12\x2c\xb8\x84\x9a\x35\xb1\xd4\x25\xd4\xd7\x16\xf2\x03\x41\xff\x70\x1e\x2d\x74\x69\x7e\x79\x57\x5a\xa8\x36\x34\xd4\x24\x5d\x56\xb5\x29\xf2\x03\x79\xea\x75\x0b\xcc\xd3\x1f\x07\x74\x9a\x2c\x18\xf2\x44\xd2\x35\x45\x37\x96\xaa\x36\x9d\x98\x96\xa1\x6a\x53\x13\xf9\x81\xe8\x9a\x87\x63\x06\xa5\xf9\x44\x59\x6b\x92\xa5\xea\xda\x44\xd4\x65\x15\xda\xcf\x15\x61\x61\xc2\x33\x32\x4b\x55\x9b\x2c\xa1\x69\x0a\x53\x07\x60\x2b\x18\x9a\xaa\x4d\xff\xf0\x78\x87\x82\x21\xcd\x26\x2b\xc1\x9a\x21\x3f\x90\xd5\x5a\x5c\xa8\xd2\x8b\x2d\xac\x24\x58\xc2\x42\xb7\xc1\xb8\x6a\x97\x6f\x23\x5d\x2e\x5b\xe5\x91\x72\x01\xe1\x87\xe5\x4e\xb7\x83\x34\xea\xd5\x91\x07\xff\x6d\xa6\x9a\x96\x6e\xec\x27\x96\x21\xc8\xd0\x44\xf2\xed\x46\x13\xc9\x35\xea\x9d\x6e\x9b\x2b\xd7\xbb\xbe\x46\xe7\x80\x13\x49\x5f\x6b\x16\x34\x26\x82\x69\x42\x6b\xa2\xca\x13\x65\x0e\xf7\x7f\xfc\x0a\x82\x92\xf3\xd7\xaf\x20\x69\xdb\xd5\xaf\x13\xd0\xa5\x76\xbd\x74\x2e\x83\xb6\x21\xc7\x11\xf3\x41\x9d\x90\x3b\xe0\xe5\x7a\x9e\x1f\xfa\x20\x3d\xb4\x0e\x57\x13\xa8\x28\x50\xb2\xcc\x89\xb8\x9f\xe8\x86\x0c\x8d\x89\xa8\xeb\xf3\xf8\x86\xaa\x26\xc3\xdd\xc4\x27\x9c\x66\x0a\x8e\xa1\x9b\x13\x5d\x9b\xa8\xf2\x35\xad\xf5\x15\x34\x84\x63\x5b\x6b\xbf\x82\x77\xb4\x3e\x71\x72\x17\x17\xd7\xb5\x5d\x40\x79\x0a\x0d\xa7\xa1\x09\xdf\xd7\x50\x93\xae\x12\xc1\xd7\x7c\x65\xc0\x8d\xaa\xaf\x4d\xef\xde\x64\x26\x98\xb3\x1b\x51\xdd\x8f\x41\x5d\xae\x74\xc3\x76\x47\x6f\x4c\xbd\x15\xcd\xad\xba\x94\x16\xba\x09\xe5\x89\x60\x5d\xd3\xfe\x60\xcc\x37\x98\x92\xe7\x97\x37\x30\xed\x6f\x29\xc8\xb2\x01\x4d\x33\xbe\xf9\xcc\x32\x64\x27\xee\x4c\x16\xba\x3e\x5f\xaf\x52\x40\xaf\x92\x58\x72\xa1\x04\xd5\xb8\x12\xf1\x61\xd0\x4d\xdd\xc0\x1e\x27\x14\x05\x1a\xe9\x40\x0f\xe8\x6f\x68\xe2\xa9\x35\x5d\x23\x67\x68\xbd\x82\x88\x7f\x28\x4e\x6a\xb1\xb2\x1b\xcc\xac\xc4\x1e\x30\xcf\x06\x20\x71\x9f\x68\x46\xb3\xa3\xa7\xa7\x01\xd6\x5d\x3e\xf4\x44\x40\xd5\xb4\x26\xd6\x6e\xb2\x4a\x46\x69\x43\xea\xab\xb4\x90\x30\x2d\xd8\x21\x94\xc4\x03\x8b\x07\x77\x4f\x04\x4b\x1e\xc5\xc4\x7d\xba\xce\x74\x63\xa4\xad\x6d\xd3\x5c\x27\x51\x3e\x02\x4b\xba\x0c\xaf\xcc\x0b\x8e\x66\xb0\x12\x0c\x4b\x95\xd4\x95\xa0\xc5\x06\xef\xa4\xa6\x93\xd5\x95\xb9\xc9\x31\xa2\x5d\xcb\x41\x78\xc3\xab\xe9\x3b\xca\x4b\x43\xcf\x05\xfc\xe9\xf8\xdd\xce\xb4\x7b\xd2\xfb\xd3\x8e\x0f\x87\xd4\xcf\x31\x86\x49\x4a\x0e\xa6\xba\xb1\x9a\x2c\xd5\xa9\x97\x30\xc4\xb0\x10\x80\x4c\x2d\xe3\xf5\xf9\x5e\x1c\xe6\xb4\xc6\xe9\xb6\xce\x35\xaa\xbd\x5a\x1d\x51\x65\x97\x72\x9e\x2f\x70\xbd\x6a\x37\x25\xee\x08\xa3\x7b\x00\x66\xaf\xbb\xe3\x31\x39\xbf\xd2\x8b\x7f\x88\xd2\x1d\xbe\xd5\xe3\xeb\xb9\x1b\x74\x66\xe7\xd9\x26\x7c\xbf\x9a\xf2\x19\x92\xd4\xad\x65\x98\x12\xf6\x94\xcd\xa6\x96\x30\xc2\xeb\xaf\x91\x2f\x1c\x45\xba\xb6\x5e\xde\x97\x0e\xd8\x4b\xf2\x52\xcb\xe6\x8d\x00\xd7\xc8\xe2\x36\x49\x09\xeb\xa5\x7f\xe9\xf9\x39\xe4\x8b\x69\x38\x0a\x8c\x21\xf1\xc0\xbe\x21\xc1\x03\xe4\x8a\xc5\x36\x5f\xe4\xba\x21\xc0\x4b\xd5\x9e\x71\xa8\x12\xfc\xac\xad\x97\xd0\x50\xa5\x3f\xff\xfa\x92\xa2\x95\xb0\xbb\xa1\xd5\x42\x30\xad\xcf\x82\xb6\x87\x0b\xa7\x14\x93\xa2\x85\xa2\x1a\xa1\x4d\x0a\xbd\x7a\xae\x5b\x6e\xd4\x63\xe4\x99\x08\xd3\xe9\x89\xbb\x17\xe4\x82\xd1\x18\x1c\x07\xe9\xee\xc0\x61\xcb\xea\x34\x3f\x31\xff\x82\x5c\x23\x88\x23\x7a\x0a\x0c\xfc\xb0\xcb\xd7\x3b\x01\x14\x8b\xd5\xd4\x7c\x5f\x1c\x6c\x31\x57\xe2\x6b\xdc\x05\x85\x3f\x7e\x73\xab\x70\x75\x61\x09\xbf\x1f\xee\x21\xdd\xfd\x0a\x7e\xf7\x9a\xfc\x81\x74\xa4\x19\x5c\x0a\xdf\x91\xaf\x7f\x20\x8d\xad\x06\x8d\xef\xc8\x57\xa7\x38\x97\x6b\xf3\x76\x7f\x79\x98\x0f\xf8\x7e\x3b\xc3\x78\xfe\xd0\x43\x9c\x6b\xd4\x6a\x7c\xbd\x1b\x83\xd9\x05\x40\x1a\xf5\x73\x04\x48\xb9\x83\x3c\x1d\xca\x6e\x87\x7b\xa6\x83\xe4\x29\x48\xf9\x20\xbe\x47\xf3\xa8\xa1\x44\x79\xce\x74\x59\x6f\x74\x03\xfa\x44\x06\xe5\x6e\xe9\xc8\x96\xbf\xfe\x76\x46\xfe\x84\x25\xc0\xc8\x35\xc2\x5f\x20\x71\x14\xd0\xac\x66\x56\xd3\x4e\xab\x8a\xac\x0c\x5d\x82\xf2\xda\x10\x16\xc8\x42\xd0\xa6\x6b\x61\x0a\x1d\x35\xa4\xac\x17\xfa\xd9\x4d\x36\x34\x8f\xfd\x83\xad\x9e\xf8\x3f\xf4\x6d\x98\x2e\x8f\x96\x9d\x88\x1f\x69\xf3\xdd\x5e\xbb\xde\xf1\xdd\xfb\x0d\x41\x10\xa4\xca\xd5\x8b\x3d\xae\xc8\x23\x8e\xf4\xb5\x5a\xcf\x1d\xef\x3a\xdd\x76\x39\xd7\x75\x20\xb8\x0e\xf2\xfb\xe4\x77\xa4\xc3\x57\xf9\x5c\x17\xf9\x1d\xd8\xbf\x82\xbd\x91\xe8\x88\xf7\x49\x97\x84\xfe\x61\xc2\x61\x61\xc2\xa5\x19\xa9\xee\x93\x2f\x05\x85\xa3\x88\xc7\x5b\x37\x49\xf8\xf9\x37\x04\xc9\x71\x1d\x1e\x19\x94\xf8\x3a\xf2\x3b\xf8\x13\xfc\x95\xf9\x1d\xfc\x89\xfd\xf5\xaf\xdf\x31\xe7\x6f\xec\x4f\xec\x2f\xa4\xeb\x3e\x44\xf8\x6a\x87\xb7\x95\xc2\xd7\xf3\x5f\x42\x35\x93\x22\x0e\xdc\xa9\x99\x64\x0a\x3f\x5b\x33\xff\x73\x8b\x66\x2e\x63\xaa\xa7\x87\x63\x1c\x4e\xa7\x88\x53\xd8\xbe\xc0\xe8\x70\x8c\x20\x1d\x5b\x57\xc8\x8f\xd3\x08\xf0\xe2\xde\xee\x8e\x9a\x3c\xf2\xc3\xef\x11\x5f\xc2\xbc\xf6\xa1\x3c\x06\x11\x06\x58\x3c\xb8\x71\x7a\x0e\x43\x53\xa0\x7b\xb9\x0c\x43\x1a\xe0\xf4\xcc\x21\xcf\xd9\x3d\x59\xd9\x25\xb7\x61\x69\xde\xdd\xdc\x86\x20\x0d\x72\xeb\x77\x92\x58\x6e\xed\xc8\x25\x43\x45\x58\x2f\xac\x89\x25\x88\x0b\x68\xae\x04\x09\x22\x3f\x90\xa7\xa7\x3f\xce\x9f\x6e\x55\x6b\x36\xd1\x55\xd9\xb7\x94\x76\x26\xab\x3f\xff\xf5\x44\x74\x1c\x2c\x9d\x78\xae\x2f\xfa\x27\xdf\xae\x44\xaa\x8c\x88\xea\x54\xd5\x2c\x27\x31\xa8\xf7\xaa\x55\x57\x1c\x61\x69\xa7\xf1\x88\x34\x13\x0c\x41\xb2\xa0\x81\x6c\x04\x63\xaf\x6a\xd3\x00\x98\xb6\x5e\x1e\x53\x7e\x44\xd5\x2c\x38\x85\x46\x00\x44\x59\x08\x53\x13\x31\x97\xc2\x62\x71\x49\xc6\xd2\x97\x8b\x4b\x22\x9f\x31\x92\xfc\x72\x84\xbc\xec\xf6\xe0\xbc\xe1\x56\x75\x04\xab\x1d\x47\x95\x58\x70\x77\xa1\x90\xd5\x6a\xa1\x3a\x35\x7b\xc4\x52\x97\xd0\xb4\x84\xe5\x0a\xb1\xfb\xcc\xf9\x89\x7c\xe8\x1a\xbc\x64\x34\x6a\x56\x74\xc8\x47\xbd\xe9\x54\x3a\x9e\x8f\x93\xaf\x08\xac\x9e\x19\x72\xed\xae\x9b\xd1\x01\xe7\x46\xb9\x9e\x6b\xf3\x4e\xfa\x95\x1d\x79\xb7\xea\x0d\xa4\x56\xae\xf7\xb9\x6a\x8f\x3f\xfe\xe6\x86\xa7\xdf\x39\x2e\x57\xe2\x11\x90\x24\xcc\xcd\x6a\x0f\x22\xba\x30\x45\xaf\xe8\x81\x68\x70\x67\x6d\x84\xc5\xe7\xa7\x08\x89\x9f\xbe\x7f\x37\xe0\x54\x5a\x08\xa6\xf9\x25\xd8\x5d\xee\x5a\x45\x88\x6d\x51\xc4\x97\x98\x8e\x72\xe7\xc6\x77\x4b\xe6\x56\x74\x8e\x72\x85\x7b\xc6\xa9\x56\x17\xce\x66\x28\xb8\xa4\xcb\x61\xe0\x00\x0b\x07\x77\xcb\x7f\x21\x0d\x48\x2a\xce\xc3\xc2\xcb\x0b\x0f\x32\x5b\x3f\xce\x5f\x66\xb4\x71\x82\x20\x8d\x41\x9d\xcf\x23\xd9\x51\x82\x44\x6e\x85\x2e\x5e\xa0\x23\xae\xc0\xe3\x6f\xaa\x1c\xc5\xdb\xa1\xe6\x73\xaf\xd5\x79\x78\x3c\xb3\x0b\xf8\xcc\x24\x6a\xa4\xbf\x2c\x71\x45\x41\x7e\x72\x16\x3e\x3e\x45\x58\xb3\x63\xc7\xe1\x8f\x64\x68\x09\xea\xc2\x44\xde\x4c\x5d\x13\xa3\x8d\xed\x50\x28\xbb\x57\x0f\x1e\x1e\x4f\x0f\x87\x75\xeb\x08\xde\x7c\x8b\xc9\xa9\xbc\x30\x6c\x1d\x3b\xbc\xa1\xa7\x16\x5f\x65\xd4\xe9\x88\x23\x1f\x87\x51\x0e\x0d\x50\x38\x75\x44\x3a\xf8\xe3\x62\x72\x20\x30\xe9\x6b\xeb\x14\x9b\x82\x6d\x0c\x28\x58\x89\x8d\x5c\xd8\xf5\x4a\x4e\x0d\x7b\x34\x1d\xef\x67\x60\x9d\xfd\x42\x16\x70\x91\x0f\x58\xc2\x62\x22\xe9\xaa\x66\x86\xdb\xa0\x02\xe1\x64\xa5\xeb\x8b\xf0\xa7\xce\xca\xa7\x02\xa3\xfa\xda\x79\x6c\x40\x13\x1a\x9b\x28\x10\x3b\x0f\xb5\x76\x13\x27\x4d\x52\x3f\xa2\xa0\x56\x86\x6e\xe9\x92\xbe\x88\x94\x2b\xd8\x47\x07\x63\x81\x82\x0c\x0d\x27\xbd\x70\xef\x9b\x6b\x49\x82\xa6\xa9\xac\x17\x93\x48\x43\xf1\x04\x17\xd4\x05\x94\xa3\xa1\xa2\xdd\x2a\xa2\x76\x7d\xaf\x97\x45\xac\x87\x24\xc4\xbc\xf4\xa3\x4d\xf2\xf8\x75\xad\xc8\x8f\x0d\x63\xb1\x34\x7e\x55\x58\xbb\x4a\xd0\x3b\xc3\x5c\x2c\xad\xcb\xb0\x17\x0e\x1e\x13\x06\x7d\x2b\x3b\x0f\xb3\xcd\xa4\x69\xce\xf9\xae\xaa\x88\xa9\x90\x9d\xf9\x4b\xae\x28\x4e\x04\xbc\x33\x00\x7a\x9e\xaf\xaf\x0d\xe9\xb8\x4d\x23\x22\xf4\x1c\x86\x93\xa7\xa7\xef\xdf\xa3\xa7\x62\xd1\x7e\xe0\x2d\xac\xdd\xab\x4e\x6f\x2f\xe0\xe7\x87\xe6\x0b\xde\x90\x78\x4b\xf4\x72\xf6\xc2\x44\x92\x0d\xec\x44\x8c\x03\xf2\x36\x47\xc6\x81\xb8\xf3\xe0\x50\x80\xcb\x3d\x9d\x09\x70\xb1\xe4\x8e\x50\x31\x14\x1d\x96\x54\x73\x62\xc2\xc5\x02\x1a\x88\xa8\xeb\x0b\x28\x68\x87\x98\xa4\x4a\x70\xa2\x9d\xc5\x5f\xf7\xde\x79\x4c\x3e\xed\x26\x9a\x04\xa2\xf5\xd9\x7e\xa6\xe0\x43\xdf\x32\x7d\xe8\xce\x4f\x87\xeb\x89\xb3\x37\x18\xc9\x95\xf8\xdc\x2b\xf2\xf9\xb3\x5f\x83\xff\x42\xd0\x2f\x5f\x92\x50\x85\x35\x3f\x28\xed\x7f\x2e\xf4\x98\x02\xdf\x99\x4e\x03\xe8\x03\x0a\x77\x18\x8c\x75\xa5\xf0\x15\xee\x07\x38\x57\xf8\x9e\x85\x94\x91\x34\xcd\x10\x76\x4f\x2c\x4d\xda\x1f\xf0\x98\x68\x9a\x40\xe5\x57\xc5\xd3\x2b\x85\xbd\x33\xa2\x26\x50\xbb\x8c\xa9\x51\x0d\x62\xa2\xea\xd9\x9e\x90\x07\xda\xea\xc1\x3e\xfd\x2c\xa5\x9e\x44\x79\x63\x7f\xc2\xd4\x2c\x6d\xe0\x8d\x8f\xa1\xa1\xb0\x27\xd2\xa1\xfe\x62\xcf\x02\xa2\xa7\x11\x51\x13\xb4\xbf\x65\x8a\x65\xed\x26\x50\xdb\xc0\x85\xbe\x82\x61\x65\x4b\x6b\x67\x4f\x78\xd6\x0b\x2b\xe2\xe1\x12\x5a\x42\xc4\x23\x7b\xaa\x15\xf5\xd8\x54\xa7\x9a\x60\xad\x0d\x18\x56\x61\x63\xa9\x2f\x7f\xfe\x75\xca\x5d\xfe\xfd\xbf\x61\xd9\xcb\x9f\x7f\x05\x75\x0e\x97\x7a\x44\x31\xec\x84\x4b\xd3\x35\x18\x9b\x0b\x9d\x70\x5d\xa2\xf1\x24\x53\x97\x70\x22\xea\x6b\x4d\x76\x2a\xd6\x8c\x21\x68\x53\x18\x9c\x8d\x9d\x87\x56\x5b\x13\x36\xb6\x29\x94\x93\xa7\x5b\x5e\xed\x4f\x95\x0f\xde\x76\xd8\xc2\x95\x66\x88\x70\xdd\xcd\xd9\x2f\x97\xb0\x3b\xac\xc3\x77\x63\xea\xa4\xfe\x8a\x94\xbf\x4a\x7a\xdd\x3c\xe2\x71\x42\xa4\xdc\x3c\x17\x2b\x54\xec\xfc\x23\x8d\x90\x91\x91\xf6\x61\x62\xa6\xde\x7f\x18\x2b\x68\x42\x58\x08\x17\x35\x2f\x58\x02\xa2\xe8\x46\xc2\x6a\x11\x92\xe7\xba\x5c\x82\x78\x11\x28\xe3\x56\x5d\xd2\xa0\x2d\xd7\x3b\x7c\xbb\x8b\x94\xeb\xdd\xc6\xc5\xca\x8b\x13\xa0\x3b\xc8\xe7\x27\x30\x51\x35\xd5\x52\x85\xc5\xc4\xdd\x05\xf3\xcd\x7c\x5f\x3c\xbd\x20\x4f\x18\x0a\xd8\xaf\x28\xf5\x15\xc5\x11\xc0\x7c\xc7\x98\xef\x04\xfd\x0d\xc5\x31\x82\xa5\x9e\x51\xec\xe9\xcb\x1f\xe9\xb0\x63\x13\xf7\xed\x86\x33\xad\x8a\xfb\x89\xa5\xab\x72\x3c\x25\x96\x22\xe9\x6b\x28\xe1\x93\xb5\x09\x8f\x51\x66\xa2\x6a\x17\x6f\x54\xc4\xd2\x23\x08\x94\x60\xae\xa1\x47\x4c\x04\x59\x9e\x04\xeb\x52\xb1\x34\x48\x82\xc4\xb1\x6b\x68\x90\x13\x37\xa6\x1d\xb2\x6b\x67\x3d\x33\x96\x04\x85\xa3\xd8\x55\x62\x50\x07\x12\xde\x08\x96\x82\x04\x43\x00\xf2\x1a\x12\xf4\x64\xa9\xcb\xaa\xb2\x4f\x2f\x05\x03\x28\xec\x2a\x12\xcc\x99\x14\xde\x36\xe6\x14\x74\x68\x82\xc2\xaf\xa3\x63\x77\xba\x30\x9d\x1a\x70\x2a\x58\xba\x11\x6f\x53\x2c\x0a\x50\xf6\x1a\xf4\xac\x83\xde\xad\x59\x4e\x76\xb2\x11\x8f\x1d\xa3\xc1\x55\x5d\x0d\x50\x07\xbd\xd7\x0b\xce\x4c\x35\x9e\x00\xc9\xd2\x57\x69\x07\x00\x3f\x81\xe3\xd4\xc7\x1e\x00\xe2\x09\xb1\x14\x7b\x9d\x24\xd8\x59\x47\x7b\x93\x4d\xf7\xc5\xd9\x38\x4a\x00\xa5\x49\xe2\xaa\x1e\x01\xb8\x2b\xce\x71\x8a\x1e\xdb\xe3\x00\x60\x34\x75\x9d\x24\xc4\x44\x51\x77\x87\x97\x08\xf4\xe5\x62\xa2\xa8\x70\x11\x3b\x34\x02\x40\x02\x70\xd5\x20\x0c\xc8\xc3\xda\xc9\xa1\xa6\xbd\x4b\x10\x83\xa2\xaf\x1b\xe6\x01\x35\x51\xb5\x29\x34\xad\xc9\x65\xd5\x3c\x81\x14\xcd\x32\xd7\xf5\x08\x7d\x16\xae\x9d\xe5\x09\x21\x3e\x98\x00\x0c\x45\x71\xc2\x23\x12\x11\x6b\x63\xd7\xda\xaf\x0d\xb6\x17\xeb\xed\x07\xee\xc1\x0b\xf2\x54\xcc\x0d\x5f\x8b\x54\xbb\x4e\x34\xea\x65\xbe\x99\xab\xd5\x0b\x59\x1a\xc7\x38\x02\xa7\xc6\x64\xb3\x9e\xef\xb4\xab\xc5\xc1\x2b\x5d\xcc\x56\x73\xb5\x56\xb5\x5c\x68\x10\x1d\x9a\x1f\x0d\xfa\xbd\xa0\x86\x22\x89\x60\x0e\x11\x0c\x6f\x15\xb0\x52\x8f\x27\x31\xae\x36\xec\x15\x7a\x25\x9c\x1b\x55\xb8\xe1\xb0\x38\x1c\xf6\xb1\x7e\x69\x38\x1a\xb5\x29\x7e\x34\xe4\xbb\xcd\xd7\xfc\x70\xdc\xe1\x06\x14\x3d\x6c\x10\xa9\x89\xe0\x36\x91\x6c\xbb\x39\x2a\x95\xab\x58\xae\x8c\x17\xea\x2d\x22\x3b\xac\x16\x6a\xf5\x7c\xb5\x50\xe9\xd5\x9b\x3d\xac\x34\xc2\xc7\xb5\x42\xa7\xd4\xa8\xf7\x72\x7c\x83\xeb\x0c\xe8\x56\x8e\x6e\x0c\xb1\xd2\xd3\xad\xdb\x36\xec\x2c\x2e\xa1\x1b\xbc\xad\x6e\xa7\x5d\xaa\xdf\x4c\x18\xbf\xa5\xe1\x05\xc1\x5f\x10\xcb\x58\xc3\x14\xc6\x71\xb9\x59\xe1\x9a\xf4\xee\x9a\x05\xf2\x87\x48\x7a\x36\x29\x79\x41\xc0\x8b\xbb\xcf\x29\x59\xd0\xb0\x05\xf2\x5b\x9d\xe0\xb0\x48\xee\xf3\x01\x0c\x10\x34\xc1\x10\x28\x49\xd3\x0e\x57\x98\xed\x17\xff\xfe\xb4\x50\x97\xaa\xf5\xe9\x3b\xf2\x09\xfd\x86\xba\xd7\xa7\x17\xe4\xd3\x69\x17\x86\xfd\xa8\xd7\xc9\x9f\x6e\xda\x93\x57\xfb\xa6\x64\x40\x59\xb5\x26\xc2\x62\x35\x13\xb4\xf5\x92\x38\x41\xb8\xbb\x31\x6c\x98\x5b\x3d\xe2\xd3\xff\x46\xf9\x44\x88\x60\x80\xb6\xc7\x33\x1a\xc7\x18\xe0\x0a\x86\x9d\x0b\x46\xa0\xe8\x7f\xae\x6c\x18\xc3\x10\x2c\x4a\xb2\x0c\xe9\xca\x86\x9e\xcb\xc6\x62\x18\x8e\xd3\x18\x8a\x53\x0c\xf9\x8d\xa0\x69\x92\x41\xe9\xff\x28\x19\xb1\x17\x84\x21\x19\x96\xc5\x19\x8a\x61\x1d\x11\x5d\x09\x4d\xcb\x9e\xbc\x68\xd3\x89\x28\x2c\x04\x4d\x72\x38\x06\xfe\x8e\x4c\x4d\x01\x3f\xa7\x80\x39\x43\xcf\xd3\xbf\x3f\xb9\x09\xcc\x05\xde\x0b\x3d\x69\x82\xa5\x6e\xe0\xcd\x12\xe1\x2f\x08\x70\x45\xda\x42\x75\x3a\xb3\x09\x82\x17\xe4\x93\xeb\xc9\x93\x39\xdc\xff\x32\x5b\x72\xb8\x22\x30\xda\x33\xa5\x9f\xa5\x67\x8f\xc2\x4f\xd7\x73\x40\xa2\x94\x7a\xbe\x2d\x0d\x70\xb9\x4a\x18\xbf\xc3\x36\xf6\xdc\x3a\x7e\x1f\x36\xf7\x1c\x84\xa5\x5e\x90\x27\x1c\x23\x49\x19\x17\x25\x46\x51\x08\x1c\xe2\x14\x23\x8a\x14\x4b\x8a\x12\x4a\xa2\x2c\x4d\x88\x14\x8a\xb3\x34\x24\x44\x51\x50\x28\x0a\x15\x09\x49\xc2\x15\x92\xc1\x51\x8a\x94\x49\x92\x92\x18\xd1\xce\xd4\x48\x82\xc4\x68\x86\x16\x51\x1a\x92\x0a\x2a\x4a\x38\x4e\xb2\x24\x01\x50\x9a\x92\x44\x14\x63\x30\x8c\xa1\x20\x0e\x19\x8a\xa0\x65\x52\x86\x28\xab\xc8\x34\x83\xda\xb9\x2f\x46\x11\x22\x49\x10\x4f\x8e\xdd\xa0\x81\x9c\x8f\xfa\x8e\x93\xdf\x51\x2a\x98\x0a\xba\xb7\xc9\x6f\x34\xc6\xe0\x80\x48\x7c\x8a\x91\x34\xc5\x32\x28\x4e\xd3\xd4\x0b\x02\xec\xff\xd1\x8b\xeb\x05\x21\xed\x7f\x80\xf7\xcf\xe1\x26\x38\xfe\x61\x07\x35\x8e\xe3\xb8\x1c\x68\x77\x60\xc9\x2c\x91\x4a\x8e\xa9\x81\x45\x8f\x2f\x89\x55\x4e\x2f\xeb\xe2\x1b\x55\x6c\xb3\x43\x98\x53\x00\xc1\xf5\xf9\xce\xb8\xda\xe7\x05\xaa\xbb\x42\x69\x6c\x80\xf2\xf3\xf5\x88\xca\x60\xb2\xf4\xac\x4b\xac\x30\xec\xf3\x78\xcf\x7a\xde\x66\xde\x58\xbe\xdc\xe8\xbe\x77\xde\x86\x84\x8d\x9a\x1b\x36\xfb\xb5\xc6\x94\x3b\x5e\xf8\x07\x3b\x5b\x72\x9d\x55\x95\xb5\xb8\xfe\x6e\x6e\xed\xf2\xf8\xb0\xd3\x58\xe1\xaa\xb5\xeb\x6c\xf8\x65\x8d\xe2\x7a\xf3\x6d\xb6\x43\xf0\xed\x79\x71\x56\xad\x92\x28\x3d\x5a\x64\x99\x8d\xb0\x1c\x0c\xfa\x79\xa1\xb2\x24\xbb\xed\x56\x4f\xed\x51\x1d\xbc\x98\x1d\xcd\xdf\xc6\xe3\xf1\x8c\x6c\x6e\x6d\xcc\xa3\x3a\x51\x15\x3e\x56\x58\xeb\x44\x8c\x2b\xa1\x5c\xc8\x35\xe6\x86\x80\x68\x71\x5c\x1e\xad\x84\x3d\xfe\x47\x5f\x9e\x51\x45\xf8\x7d\xd0\x15\xc8\xc7\x98\xf1\x93\x48\x41\x86\x54\x64\x86\xc1\x44\x09\x97\x09\x99\xa6\x59\x0c\x27\x24\xa0\x00\x4a\x22\x58\x94\xc1\x20\xc4\x68\x1a\x03\x94\x00\x14\x56\x61\x64\x00\x25\x92\x06\x14\xa0\x49\x1c\xa7\x49\x42\x74\x73\x3b\x10\x6e\xd5\x91\xc6\x8e\xd3\x18\x01\x12\x9f\xba\xb9\x1a\x4e\x11\x0c\xfa\x00\x57\xa0\x45\x7d\xc8\xaa\xb9\x4d\x1e\xd4\x65\xb2\x8c\x6e\x95\x82\xd9\x69\x4d\xd7\x84\x26\xcd\x84\xd9\xb3\xf2\xd6\xa6\x0b\xd2\xa0\x00\x6a\x78\xbf\x3a\xa4\xf8\x55\x7e\x00\xf3\x2b\x79\xda\x50\x46\x95\xf2\x5c\xc9\x63\x23\x6b\x4a\x13\x19\xb1\x80\x1b\x7c\x1e\xae\xea\x79\xb3\xba\x9a\x96\xe0\xc8\xe9\x3a\xc7\x15\x7c\xd6\x69\xbd\xe7\xe9\xf1\xa6\xf8\x31\x27\x97\x9b\x0c\x67\x8d\x69\x4e\x31\xb3\xf3\x85\x5a\xac\xf5\x7b\x96\x05\x7b\x9b\x75\xf5\xd9\xe8\x6f\x46\xb9\x0c\x95\x6f\x4e\x19\xb3\x9f\x7f\xe5\xa6\x02\xc1\xbe\x95\x72\xe5\xf6\xac\xfb\xde\x37\x65\xa6\xf6\x3a\x6f\xcd\x29\x71\xc4\xcd\x3f\x9a\xfa\xbc\x5d\x2e\x3b\xf8\x7b\xff\x2d\xae\x00\xd2\xbb\x02\xf1\x18\x33\x7e\x62\xa1\x02\x59\x16\x85\x24\x20\x21\x64\x05\x45\x62\x65\x9a\x96\x00\x4b\x00\x51\xa6\x19\x3b\xb2\xe0\x98\x42\x28\x22\x06\x69\x1a\x32\x18\xa9\xd0\x0a\x4b\x90\x04\x8e\x4a\xb4\x00\x19\x89\x8d\x73\x85\xe8\x71\x9f\x4c\x78\xe4\xe6\xf5\x14\x0b\x18\x22\xc6\x09\x88\x94\x4e\x40\xd2\xcf\xcb\x16\xd9\x1e\xae\x97\x9b\xbd\x2c\x33\xc5\x5e\x91\x85\xd5\x51\xbe\xb6\xe9\xd2\x55\x4d\xd1\x2b\x8a\x42\xb6\x7b\xb5\x1a\x5c\xbf\x55\xb8\xcc\x28\x07\xad\x65\xb3\xf9\x81\xcb\xef\xb5\x5e\xd7\xda\x33\x54\x97\x11\x36\x95\x5c\x69\xd3\xee\x96\xf2\xfc\x38\xcb\x75\x96\xa3\x7a\xf3\xd5\x17\x0f\x7c\x9d\x58\x2d\x82\xde\x58\xcb\x7d\xe4\x84\xe5\xa8\x8a\xca\x8d\x0d\xba\xef\x2f\x77\xac\x59\x29\x0f\x5b\x0d\x6c\xf1\x5c\x34\xd8\x6c\x57\x6b\x9a\xb3\xa6\x86\xaf\xd4\xea\xc8\x98\x66\xb8\x1a\x23\xf7\x86\xdb\xb9\x3e\x10\x5a\xed\x75\xc6\x7c\x57\x7b\x68\x3d\xbf\x29\x36\xba\xf3\x5d\xd1\x20\xd4\x2e\xe1\xc4\x9b\x56\x88\x13\x14\x5b\x61\x86\xf4\xdf\xe3\x04\xf8\x63\x0c\xf8\x09\x30\x94\x88\x8b\x22\x85\x52\x82\x4c\x30\x18\x43\x08\x12\x03\x29\x08\x58\xcc\x4e\x3c\x49\x28\x03\x20\xa2\x0a\x00\xb8\x0c\x08\x9c\x61\x18\x9a\x64\x01\x4a\x03\x09\x88\x14\x49\x93\x22\x16\xe7\x04\x78\xa4\xa5\x53\x38\x81\x45\xc7\x83\xc3\x53\x6f\x1a\x08\x18\x86\x89\x71\x05\x3c\xa5\x2b\xec\x66\x46\x83\x1e\x15\x8d\xde\x54\xef\x98\x6f\x4b\x62\x5c\xcd\xd0\x05\xba\x5d\xdc\x32\xed\x66\xbb\x45\xa8\xa5\x41\x3b\xbb\xdb\x8a\xe3\xe1\x60\x3f\x96\xab\x3b\x39\xdb\xef\xa8\x4d\xcd\x34\x38\x6a\xc9\x4b\x39\x8c\xe8\x93\xfb\x5a\xa6\xd1\x04\x19\x76\xb0\x78\x5f\xf4\x4b\x2a\xfc\x68\xb7\xdd\xae\xb3\x5d\xa1\xbe\x3d\x75\x65\xb5\xfa\xda\x14\x6b\xfa\x5b\xe9\xb9\xdd\x7e\xee\x76\xb2\xf9\xd7\x62\x36\x63\xad\x95\x12\xb6\xac\x02\x4c\x92\x72\x25\x03\x54\x34\x8c\xde\x37\x73\x2d\xb4\xde\xa4\x85\xbe\xf5\xcc\xd1\xc3\x1c\xae\x4d\x21\xd4\xa7\xe4\x76\x64\x5a\xdd\x12\x9f\x31\xd7\x95\xcc\x6b\x7d\xb9\x9a\xeb\xa3\xca\xc8\xc1\x5f\x0b\x71\x05\xde\x0c\x33\xa7\xff\x1e\x57\xc0\x1e\x63\xc6\x4f\x14\x2e\xb3\x8c\x42\xe2\x14\x84\x14\x23\x03\x11\xa3\x45\x52\x64\x58\x05\xc3\x05\x85\xc4\x01\x10\x69\x92\x62\x05\x8c\x50\x04\x05\x10\x28\x2e\xc8\xa8\x48\x62\x22\x85\xe3\x22\x4a\x8b\x90\xb5\xdd\x09\x73\xfe\x0b\xb1\x6a\x2c\xd2\xd8\x69\x12\x05\xd1\x8e\x72\x78\xea\xce\xad\x09\x92\xc5\x62\x3c\x01\x4b\xe9\x09\x58\x73\xfc\x06\xea\x6b\x52\x47\xc5\x0a\x3d\x20\xb4\x7d\x63\xd3\xdb\x15\xf1\xfe\x4a\x9f\x3f\x6f\x0a\x5c\xc3\xca\x81\x57\xac\x46\x67\x69\x6a\xbc\x26\x4b\xac\x54\x92\xd1\x77\xce\x1c\xbf\xb1\x2d\x6a\xc4\xec\xcb\x65\x89\x5a\x5b\x73\x25\x93\x6b\x3c\x57\x97\x19\xf4\x55\x34\x15\xe3\xa3\xd9\x73\x7a\xce\xf1\x04\x67\xd0\x2e\x1f\xff\xe1\x1c\x63\x35\x4f\xbf\xb7\x5c\xb3\x35\x77\x7b\xba\x89\x36\xdf\x3a\x78\x5b\xa1\x67\x26\xb3\xeb\x97\xb3\x53\x6c\xca\xec\x5e\x37\xef\x8d\x46\x46\xcb\x4c\x33\xc3\xed\xb4\xd9\xce\x94\xb2\xf4\x3b\x64\x57\xa6\x5a\x59\x13\xf3\x7a\xa9\x4d\xe8\xc3\x12\xdf\x2d\xcb\x04\x68\xd6\x2b\x43\x7a\x55\x79\xd7\x51\x8c\x23\xf4\x67\x52\x6b\x8b\xf8\xc7\xda\xf1\x94\x72\x88\xa7\xe4\xcb\x61\xd6\xf6\x1f\xee\x29\x58\x7a\x4f\x01\x8f\xb1\x72\x67\x2f\xce\x61\x46\x0c\x58\x1a\xfd\x8a\x82\xaf\x28\x40\x50\xf4\xbb\xf3\x5f\xa4\x35\x33\x0c\x46\xd2\x89\x4f\x09\x8c\x25\x58\x8a\xc6\xd8\xb8\x09\x71\xb8\xa5\xbb\x2c\xfd\xdd\x9d\x12\x7d\x65\x87\xaf\x2a\xb1\xcf\xec\x3b\xaf\x59\x3a\xaf\xe5\xd9\x12\x86\xee\xde\xb2\xcf\x26\x3a\xb5\xcc\x6d\x79\xfb\x01\x86\x72\x67\x30\x12\xb2\x15\xa1\xe0\x38\x11\x1f\x62\xc4\xe1\xd7\xc1\x88\x39\x2e\x3b\xff\x05\x82\x3c\xf4\x3a\xcd\x84\x13\x6a\x4d\x29\xde\x76\xb9\xb5\xf4\x14\xb1\x89\x29\x72\x25\x21\xc2\xe3\x12\xd0\x60\xc1\xba\xfd\x6d\x68\xf0\x60\x89\xfc\x36\x34\x44\xa0\x66\x7b\x1b\x16\x32\x50\x69\xbe\x0d\x0b\x15\xa8\x6b\xde\x86\x85\x0e\xd4\x7b\x1f\xf3\x12\xd1\x43\x56\xc8\xe2\x77\xb8\xbd\x20\x74\xda\x95\xc1\x88\x57\x69\xee\x36\x7c\x9f\x95\xfa\x2d\xfd\xf4\x83\x72\xb2\x32\x2a\x66\xfd\xcc\x32\xd6\xa6\x05\xe1\x5d\xb5\xfd\x03\x1a\xdd\xb8\xab\x74\xfd\x8f\x58\x0d\xfa\x09\x4b\xf0\x21\xdd\x75\x3e\xa2\x1c\x7f\xa0\x61\xdd\x15\x5c\x15\xfc\xff\x1e\xfb\x5b\x7a\xec\x6c\xf0\x3e\xfe\x20\xc2\x7a\x2c\x6a\xad\xf3\xff\x7b\xee\xef\xe8\x39\x7f\xa4\x3b\xfe\xcd\xf8\x56\x16\x95\xb5\x26\x7b\xb2\xdc\xb8\x65\xc5\xd1\x8b\xbb\x71\xe4\xde\xce\x4d\xb1\xcc\x79\xe7\xde\x9a\x6b\xd4\xe6\x05\xe5\xe3\xdf\xc4\xcf\x55\xdb\xed\xc6\xfc\xf3\xd5\x96\x10\xe2\x43\x5e\xed\xbc\x63\x6f\xf7\x55\x6f\xb9\xdd\x9a\x46\x44\xee\x8e\x0f\xcd\xa0\xa9\xe8\x9c\x35\x11\x11\x16\x0c\x72\xb7\x22\xc2\x83\x63\xef\xad\x88\x88\xf3\xb1\x20\x2a\x77\x4d\xc4\x43\x9e\xe3\x89\xca\xa4\x13\xf1\x50\xe7\x4e\x76\x33\x3f\x74\xc0\x59\x1f\xf5\x1a\xe1\x43\xf2\xe9\xa4\x17\x29\xae\xc8\xa8\x23\x5f\xa3\x7b\x80\x33\xf8\x5f\x1b\x00\x0a\x06\x50\x99\x22\x14\x09\xca\x04\x29\xe0\x04\x14\x28\x1c\x55\x58\x82\x20\x70\x5c\x86\xa4\x82\xe3\xac\x88\x13\x0c\x2a\xd1\x32\xae\x28\x0a\x8b\x29\x98\x88\x13\x18\xa5\x88\x12\xc9\x12\x4f\x2f\x88\xbb\x87\xe5\xf6\x40\xe7\x2b\x24\x92\x87\x02\x4a\xf4\xaa\x2c\xc1\x44\x17\x6b\x0e\x4f\xcf\x7c\xda\xad\xbc\xbc\x52\x6f\x50\xc5\xdf\x96\x7a\x99\xe9\x16\x17\xf9\x0c\x9c\x4a\x38\xdd\x1c\x5a\xa5\xd7\xd7\x8f\x41\x9f\xd9\xf6\xd5\x71\x56\xc8\xad\xc9\x2a\x59\xe3\x9c\xca\x05\x77\xa8\x0c\xe6\x03\x85\x81\xec\xe9\x4f\x67\xe1\x35\xdb\xef\xd7\x79\xf7\x77\x0e\xac\xb3\x72\x49\xef\xae\xa7\xb5\x4d\xcb\xca\xd3\xd9\x59\xb9\x8a\xd7\x21\x2b\xf7\x9b\x4a\xb1\xfc\x5c\x51\xc9\xca\xa6\xd7\x78\x1e\x73\x16\xbd\x0d\xab\x39\x14\x8f\xf4\x5b\xc5\xad\xf9\x5e\x2b\x7f\x6c\x8d\x76\xb9\x2c\x8f\x8a\xc3\xce\xc7\x74\xbf\xa4\xf2\x3d\xb1\x56\x32\x7a\x06\x7c\xae\xf4\x41\x79\x60\xd6\x0d\xb5\xac\x2f\xe5\x11\xfe\x51\x5c\x2b\x63\x2b\x97\xeb\x93\x2c\x97\xaf\xb0\x7b\x40\x91\xcd\x3e\x5f\xe8\x9b\x43\x82\xa4\x21\xf1\x86\xd6\x32\xed\xc1\x16\xfd\xf1\xe4\xaf\x44\xf9\x97\xab\x4e\x7f\x16\x7d\x0c\x9d\xe0\x5b\xe7\xfa\xc8\xfa\x9a\x1a\xef\x75\xaa\x0a\x1b\xc2\xf4\x6d\x57\x13\x7a\x4d\x96\xca\x7e\x28\x26\x0b\x51\x49\x37\xea\xe3\xe1\x47\x76\x50\x99\x17\xf4\x57\x7a\xbe\x99\x3b\x42\xe7\xfa\xdc\x46\x05\x27\xfd\xe6\x02\xf4\xbd\x8b\x8f\x2a\xcc\x64\x1f\x4c\x3f\x7f\x13\x7d\xe7\xcf\xda\x09\xd0\x69\x9f\x5b\xeb\xb8\x6e\x11\xe4\x7b\xae\xc9\xef\x56\xad\x0c\xae\x97\xea\xcf\x1f\x80\x6e\xef\x55\x13\x2c\x94\x5a\x61\xb4\x6c\x0d\xa6\xc6\xba\xf3\xdc\x75\x1a\x15\xfa\x3d\xd4\x23\x5c\x1d\x10\x05\x14\xce\x1a\x14\xb7\x67\x73\x68\xd3\x2c\xf2\xd3\x8d\x04\x68\x00\x7a\x2c\x33\x7a\x23\x96\xd5\xf9\x92\x6d\xd1\xe4\x3c\x87\x6f\x02\xfc\x54\x7a\xb9\xe7\x56\x38\xcf\xe5\x13\xab\x57\xda\x3f\xd7\xef\x77\xbd\x75\x24\xce\x12\xa7\xc3\x36\xc5\xd3\x7a\xbe\x8a\x56\x5b\xcf\xdb\x51\x27\xc7\x7e\x0c\x37\xc3\x7e\x17\xdf\xa9\x4d\x75\xb4\xee\x88\x20\xbf\x59\xb6\xaa\x90\xe1\x7e\x82\x7d\xdc\xd6\x3f\x8f\xa6\x7f\x71\x85\xd2\x3f\xf9\x8b\x53\x29\xad\x05\x00\xaf\xb5\x0f\xbb\x6b\x6b\xc4\x09\x9f\xaf\x3f\xfd\x57\x64\x21\xd6\x21\x5d\xb8\x8f\x7e\xb5\x77\x1b\xfd\x1f\x8e\x2e\xfe\x2d\xe6\xf6\xfa\xf6\xad\x99\xb3\xf8\xe9\x0c\x4c\xc7\x72\xb5\x91\x7f\x15\xf5\x7a\xdb\xdc\x42\xab\x63\xd1\xc4\x62\xd8\x9b\x09\x5b\x6c\x5d\x56\xd5\x31\x78\x53\x6a\x02\xc9\x2e\xd1\x72\x65\xa8\xa1\x5c\x4d\xc3\xab\x43\x63\xce\xf6\x5a\xfd\xc1\x4e\x79\xd3\x2c\x5a\x6d\xb6\x3e\xd8\x82\x98\x6f\xfd\xf8\xe1\x64\xbb\xce\xcb\xb9\x87\xd2\xbf\xfb\xaf\x1d\x5c\x9d\x20\x92\x9c\x5f\xf8\xdf\x6b\x22\x69\x45\x66\x14\x05\x53\x64\x05\x97\x31\x42\xa0\x68\x06\x48\x2c\x49\xca\x2c\x8a\x09\x10\xa0\xa8\x2c\x61\x34\x20\x19\x40\x28\x18\x09\x69\x8c\xc1\x44\x0c\x92\x14\x4d\xd0\xac\x44\x91\xc2\xd3\x0b\x42\x3c\x2e\x0a\x12\x49\x51\x90\x24\x00\x19\xbd\x52\x7d\x78\x7a\x96\x90\xde\x1b\x05\x73\x81\xee\x7d\x60\x14\x5c\xb4\xaa\xa4\x1f\xb5\x2f\x0a\x16\x86\xf5\x51\x0b\x68\x75\x86\x5f\xb6\xe7\x9b\x9a\x24\x63\x0a\x1c\x4c\x25\xce\x28\xef\xda\xca\x42\x9a\xd1\x1f\xeb\x95\xd4\x2d\xe4\xe6\x1f\x8c\x91\xad\x14\xb6\xba\x38\x25\x3e\x9e\x67\x26\xd1\x5b\x6a\x78\xb7\x3a\xa8\x92\xf5\x85\x01\x3a\x0a\x9b\x6b\x32\x15\x69\x5a\x1c\x9a\xf9\xce\xb4\xf5\xb8\x28\xe8\x03\xba\x61\x94\x79\x6b\x70\x01\xaf\xba\x29\x0a\x3d\x84\xfe\x4d\x51\xd8\x37\xca\xf9\x46\xe9\x5f\x1d\x05\xb3\x99\xe3\xb5\x0d\xe3\x99\xe7\xfe\xb9\x51\xfa\x47\x58\xc4\xf0\x45\x9c\x5b\x46\xec\x86\x74\xc2\xc7\x73\x37\x44\x8c\x07\x46\xac\x6b\xe8\x7b\x11\xa3\x2f\x81\x59\x7e\x20\xe1\xdb\xce\xb8\xd8\x61\x76\x3b\x7c\xcc\x92\x42\x76\x9b\x33\xdf\x0a\x85\xe7\xfe\xbe\xb4\x69\x50\x8b\x5d\xad\xf7\xda\x6d\xee\x4d\x7e\x3e\xcc\xcd\xd6\xf9\xb7\x26\x55\xfc\x98\x75\x04\x45\xae\x59\xa3\xcd\x1c\x1b\x6c\xfa\x95\x0c\x5a\xce\x6c\x17\x7b\x6e\x0c\xb7\xf5\xd7\x2c\xf7\xe8\x88\x21\xca\x04\x43\xc9\xa2\x2c\xa3\x98\x4c\x50\x28\x03\x68\x8a\x06\x12\x21\x90\x02\x0d\x59\x99\x82\x0c\x45\x4a\x02\xc6\x4a\x22\x01\x20\x85\xc9\xb4\x20\x28\x34\x2a\x60\x0a\x84\xa4\x88\x53\x32\x74\x5f\xbb\x7a\x54\xc4\xc0\x93\x22\x06\x85\x53\xb1\x3b\x9f\xdc\xa7\x67\x95\x87\x7b\x23\x46\xb0\xd7\x1f\x13\x31\xf0\x93\xb3\x9f\xf0\xf9\x22\x46\x96\x9d\x2f\x5f\x07\xd8\x3b\xbe\xa1\x5b\xca\x9e\x69\xd6\xe0\x9c\x17\x41\xb7\x5b\x26\xd5\xdd\xfb\xbc\x8c\x66\xf5\xe9\xd0\x68\x58\xf4\xb4\x01\x28\xac\x25\xce\x67\x98\xdc\xe9\xf6\x14\x98\xd7\x37\x12\xda\xe4\x04\x65\x96\x1f\xee\xac\x59\x9f\x5b\x98\xd5\xf5\xdb\x22\xbb\xdc\xbf\x65\xb9\xd1\xc3\x22\x06\xe7\x9b\xf7\xdd\x32\x62\x6b\x27\xfd\x46\x5c\x09\x23\xf6\xe3\xe8\x5f\x7a\x75\x6a\xfa\x3f\x65\x94\xbb\xbc\xe2\x47\xb9\xbf\x71\x94\xe5\xb8\x7f\x6e\xc4\x0c\x8d\x48\xb9\xfb\x74\xe5\xf1\x3a\x8d\xd1\xc6\x2f\xeb\xab\x6b\xe8\x7b\x11\xa9\x84\x75\x46\x2b\x51\x30\x60\xc6\xca\x66\xaa\x5b\x66\x47\xb5\xda\x9b\x7e\xbd\xf6\xb6\xac\x16\xdf\x5b\x6f\xad\xa2\x9a\x85\x26\x85\xaf\x39\x7a\x68\x8c\xb3\xeb\x4e\x69\x0c\x2a\xf5\x36\x4b\x34\x54\xf6\xa3\xc5\x64\x57\xcf\x7c\x5d\x29\x62\x85\x5e\x6e\xb0\x5d\x53\x8d\x5e\x51\x7c\xad\xf1\xd9\xe9\xa3\x23\x92\x2c\xe2\x2c\x03\x45\x42\x80\x0c\x4b\x93\x14\x8e\x91\x14\x81\x4b\x82\x8c\x01\x89\x25\x20\xc0\x45\x45\x42\x69\x42\xc4\x31\x1c\x42\x06\x87\x80\x00\xa2\x42\xa3\x40\xb0\xe7\x38\x84\x02\x44\x77\xd7\x16\xb8\x67\x11\xc1\xdd\x76\x1b\x1b\x88\x68\x12\x10\x71\xfb\x0e\x01\x71\xda\x59\xe8\x56\x9c\x5d\x5b\x2c\x56\x99\x52\x6b\xd3\x9a\x8b\xaf\x58\x89\xc3\x07\xfd\xb7\xb6\xf1\xba\x7c\x1b\xa2\xa8\x52\x64\xcc\x6a\x99\x5e\xa2\x7c\x7b\x5b\x19\x64\xb8\x21\xce\x1d\xe3\x90\x73\xc5\xc4\x21\xf7\xba\xb2\xbe\x61\x8f\x83\xfe\xdd\x4c\xd9\xfe\x66\x5b\x60\xb7\x8e\xa9\x8e\xde\x5a\x52\xb3\x8b\x15\xc9\xd9\xbb\x96\x5d\x4e\x8b\x45\x38\x65\x2b\xcc\x82\x90\x00\xaf\xf5\x16\xbb\xf9\x82\x5f\x94\x58\xf3\x7d\x6c\xa0\x2c\x0d\x0a\x54\xa3\x3a\x50\x60\x66\x49\xcc\x57\x05\xab\xfc\x6c\x96\x51\x15\xbc\x57\x55\x8b\xe4\xd0\xca\x7e\xa0\x89\xb3\x51\x75\x40\xea\xf9\x14\xb1\xe7\xcc\x68\xcf\x63\x8f\x4f\xe6\xd3\xd8\xeb\xf3\xe7\xac\x9a\xc9\xa2\x55\xb4\x52\xdc\x5b\xb3\x6d\x1d\x2c\x46\xa8\xb0\x5f\xe9\x80\xad\x97\x76\x9b\x6a\x6e\xdf\x20\xad\x2c\x2f\xe5\x5c\x19\xf1\xa9\x65\x34\xb4\x51\x86\x21\x4e\xed\x23\x62\x51\xbc\x3f\xdf\x41\xbf\xd0\x1d\x64\xcd\x3b\xe8\x73\x01\xfa\xd7\xce\x56\xef\x19\xcf\x42\xc7\xd6\xec\xed\xba\x68\x68\xe3\x58\x31\x93\x74\x71\x6f\x5f\xd8\xb6\xf0\x2c\x05\xf0\x5d\xa5\x8b\x7f\x17\xcb\x68\x29\x8f\xb2\xb3\xf5\x48\x58\x6d\xc7\x7a\x76\xa6\xe9\xcd\x8e\x52\x81\xa5\x7a\xbb\x02\x2a\xd2\xb8\xd2\xae\xb4\x33\xe2\xeb\x52\x60\x9b\x90\x6d\xc3\x37\x15\x68\xf8\x86\x5c\x57\x5e\xdb\x62\xa7\x69\xe4\xea\x65\x4b\x50\x09\x03\xb6\xea\x39\x69\xb1\xc2\x88\x41\x0e\xac\x05\x6e\xfb\xe8\xb1\x55\x61\x69\x49\x50\x14\x41\x64\x24\x40\xa1\x18\x2e\xe0\x34\xc3\x10\x80\x22\x25\x11\x15\x71\x45\x01\x82\x80\xc9\x82\x42\xa0\x28\xaa\x40\x85\x60\x65\x0c\x40\x45\x62\x08\x5a\x96\x45\x45\x84\xc2\x69\x17\xf6\x1d\x63\x2b\x96\x3c\xb6\xe2\x78\x74\x59\xe8\xf0\xd4\xbf\x7a\x76\xef\xd8\x1a\x53\x15\x72\xaf\x1b\x72\xcc\x88\xb1\x35\xbb\x7c\x5d\x75\xa6\x1b\x63\xfb\xda\xc0\xd0\x61\xae\xa1\x8c\x94\xa1\x59\xe4\xf9\x9e\xb5\x1d\x09\x02\xaf\xbc\x77\xd6\xd4\x7e\x59\x59\x2e\xf2\x4b\xe1\xb9\x3c\xa4\xca\x74\x79\x3a\x15\x7b\xe3\x9a\x2e\xb5\xe4\x31\x4b\x94\x6b\x9c\xf2\x2a\xb7\xb8\xfa\xfb\x50\x2c\x37\xe8\xbd\xb9\x85\xb0\x96\xfb\x67\x8d\xad\xf7\x8e\x6d\x77\xfa\xf3\x3b\x9d\xe9\xe6\xa5\x47\x8e\xad\xbf\x30\x57\x4c\xca\x5b\x7f\xe5\xd8\xc6\x3d\x68\x6c\xbd\x35\xce\x7a\x63\xeb\x58\x7d\xef\xe9\x55\x8a\xc9\xbd\x59\x56\x61\xfb\xa6\x61\x25\x40\x67\x67\xd9\x42\x55\x2a\x16\x97\xb3\x12\x35\x37\xd6\xe6\x4a\x1d\xaf\x5a\xe4\x72\xa3\x16\x9e\xd5\xc6\xbe\x5c\x2e\x82\x62\xf7\xb5\xc4\x97\x06\x0a\xcc\xe5\xb9\xd2\x5e\xeb\x71\x79\x61\x81\xed\xf3\x6b\xc6\xa8\x95\xb4\x37\x2e\x65\xde\x1a\x79\x94\xd4\xe5\x49\xcb\xc7\x53\x1d\x0f\x1f\x55\xbe\xf6\x63\x88\x3e\x8c\xee\xa9\x6f\xf9\xbc\xff\x13\xcd\x41\x82\x48\xb3\x5d\xae\x71\xed\x11\xf2\xca\x8f\x90\xcf\xaa\x9c\x74\xda\x53\xf8\xc9\xd3\x77\x73\x1d\xc0\x1a\xc6\x79\x18\xe1\x44\xee\x03\x9f\xf1\x0c\x7c\x0c\x27\xe5\xc9\xdd\x77\x4b\x77\x4e\x36\x4c\xb8\x9b\x18\x43\x7a\xf5\x72\xab\xc7\x23\x9f\x4f\xe0\x2f\xbe\x63\x8d\x5e\xce\x0e\x21\xba\x52\x35\x8f\xe9\xd6\xab\x05\xbf\xaa\x53\x23\xb6\x9a\x27\xec\xe7\x7e\xac\x64\xe1\x44\xe2\x24\x8d\x61\x2b\xb5\xe4\x91\x1b\x83\x12\xf7\xde\x3c\x56\xfa\x28\x32\x71\xf2\xc7\xb2\x96\xa8\x01\xd7\xa4\xc5\xbd\x63\xed\x07\x41\xca\xf5\x3c\x3f\x4c\xf7\x45\x6d\x07\xf4\x1c\x0b\xd2\xa8\x07\x9d\xa1\xd7\x29\xd7\x8b\x88\x68\x19\x10\xfa\xbd\x2b\x9a\x1b\xd7\xc7\xee\xe7\xc7\x3b\x30\x2c\x15\x47\x11\x7e\x2d\x1e\xbf\x6a\x76\x33\x3b\x27\x14\x7e\x4e\xce\x66\x03\xe7\xfc\xb8\xc0\x2f\x17\xdf\xf7\x0e\x63\x6e\x26\x98\xb3\x7b\x38\x73\x3e\x73\x9e\x8a\xad\xe0\xc7\xd1\xc3\xb8\x71\x5f\xc0\xbb\x87\x1f\x17\x43\x3a\x8e\x02\x5f\x5e\x7f\xb9\xfc\xc8\x7a\xa8\xcb\x4f\xa0\x6d\x1b\xce\xf3\x1b\x38\xf5\xa2\x84\xcb\x70\x00\x9d\x9f\xed\xc3\x87\x8c\xce\x38\x0e\x3b\x6f\xe4\xe5\x70\xb6\x48\x14\xb3\xa7\x2f\x3a\xdf\xc9\xa6\x2a\xa7\x66\xf0\x74\xb8\xc2\x4b\xe8\x21\x29\x09\x4c\xeb\xab\xc9\xea\x51\x7c\x7b\xb8\xfc\xac\x47\x84\xaa\x9b\x24\x09\x17\xc0\xda\x3d\x4e\x00\x0f\x57\x84\x4d\xdf\x28\xc2\xf9\x49\x19\x97\x42\xe8\x2b\xdb\x2a\x67\xfa\x4d\x32\x78\xcc\x9f\x70\xdc\xaa\xfc\x78\x45\x1f\xcf\x9d\xb3\x87\xea\xfb\x75\x7d\x8e\xce\xcf\xf2\xe1\xbd\xe0\x33\x1e\xc3\x39\xf2\xeb\xf5\x51\x6c\x5d\xe0\x4c\x37\xbc\x85\x31\x68\xb9\x5d\x62\xdd\xd3\xad\x27\x1c\xb7\x9b\x64\x92\xf9\x59\x86\x6c\x13\xf1\x1f\x5f\x74\x07\xc3\x97\xc8\x02\x9c\xcb\x30\xc0\x67\xe0\xdc\xa4\x78\x06\x9d\x0f\x10\x3f\x86\x3d\x07\x55\x2a\xe6\x0e\x5f\x3d\x8e\x64\x2d\x70\x22\xd3\xdd\xfc\x05\xf0\x25\x31\x79\x79\x20\x54\x22\xa7\x8f\xd1\xe3\x19\xb6\xb4\x5c\x26\x6a\xf3\x31\xbc\xa5\xe2\x29\x9e\x97\x03\xc7\x0b\x5d\x9f\xaf\x57\xf7\x71\x74\x8e\x2b\x75\x8f\x1e\x8e\x9c\x0a\xe5\x6f\x25\xa8\xc6\xc4\x39\x57\xe4\x11\x1c\x06\xb1\xa5\xf3\x5b\x8f\xc1\x97\x8b\x53\xb2\x5e\x2e\x4e\x5a\x8b\x10\xe2\x01\xe3\xb6\x87\x27\x89\xe3\x2b\xb3\x23\x1b\xeb\xc3\xb4\x7b\x85\x62\x13\xf5\xe6\x1e\x26\x71\xf1\x25\x67\x5d\x9b\x78\xc7\x4f\xdf\xab\xd0\x44\x02\x67\xf3\xb4\xc3\x47\xb1\xcf\x67\x46\x2e\xe0\x15\xbc\xdf\x6f\x07\x71\xb8\x93\x39\x0e\xf1\xb2\x73\x84\x5e\x16\x6e\xe3\xb3\xf6\xab\xdb\xe7\xe0\xb1\x58\x13\xd3\x7e\x1b\x28\x81\x51\x2f\x87\xb2\x51\x1e\x8d\xe8\x41\xdc\x86\xa1\x4e\x4c\xdf\xd2\x5a\xb2\x0f\xf9\xa3\x8d\xe1\x0c\xf5\x2d\xf9\x66\x34\xba\xc0\x59\xc3\x8f\x57\xf4\xc5\x69\xc6\x89\xec\x07\x1a\xa4\x17\xc6\x77\xb8\xf4\x4f\xd3\xbf\xff\x00\xeb\x24\x49\x7c\xb0\xe9\x85\x08\x3b\x2a\xfb\xa7\x49\x13\x7a\x2e\x77\x92\x58\x61\x8d\xd2\xcb\x77\x28\xa2\xfc\x34\x99\x8e\x87\xd4\x25\xc9\x11\x59\xed\x3a\x47\x7d\x7a\xeb\xfa\x67\xb8\x76\x10\x7b\xe8\x04\xf8\x5a\x07\x3f\x47\x7a\x3e\x85\x7a\x90\x87\xc7\x91\x48\x23\x43\xc2\xbc\x2e\x96\xd8\xe3\xc2\xd7\x25\xe2\x54\xbc\x27\x07\x31\xff\x64\xfb\x67\x98\xcd\x25\xfe\x9b\xa7\xfa\xee\xd9\x38\x87\x40\x7e\xa8\x30\x4e\x44\x5d\x9f\xdf\xac\xe5\x18\x9c\x89\x29\xc2\xe7\xcf\x87\x83\x9f\xbf\xfe\xeb\x5f\xc8\x93\xa9\x2f\x64\xdf\x6a\xda\xd3\xf7\xef\x16\xdc\x59\x5f\xbe\xbc\x20\xd1\x80\x92\x2e\xa7\x03\x74\x6b\xf1\xd1\xa0\xa2\xbe\x9e\xce\xac\x54\xe4\xcf\x40\xe3\x19\x38\x03\x0d\xb0\xf0\x05\x19\x94\xf8\x36\xef\x1a\x19\xf2\x03\xc1\xf1\xd4\x0b\xd1\xaa\x3c\x51\x7c\xcb\x44\x85\xd7\x5f\xb3\x1c\xed\x91\x45\x0a\x8d\x36\x5f\x2e\xd6\x8f\x4b\x40\x48\x9b\x2f\xf0\x6d\xbe\x9e\xe3\x3b\x81\x55\x11\xe7\x69\xa3\x8e\xf4\x9a\x79\xdb\x64\xda\x7c\xa7\xdb\x2e\xe7\xba\xf6\xad\x3c\x5f\xe5\xbb\x3c\x92\xe3\x3a\x39\x2e\xcf\xc7\x9f\xd0\x1d\xf8\x39\x09\x94\x62\x1e\xa7\x8c\x73\x3a\x09\x8b\x64\x51\x9c\x9c\xeb\x27\x58\x36\x0a\x55\x96\x97\xe8\x27\xac\x28\x46\x6a\xc2\x9b\xca\xfe\xed\x7a\xf0\xf3\x11\xa6\x85\x43\x95\x20\xde\x60\xae\xd3\xc0\x65\x51\xe9\x6f\x54\x43\x04\x33\xe7\xba\x08\x29\x83\x3d\xd6\x28\x82\x25\x8e\x7f\x82\x42\xa2\x4d\xe3\xa2\x86\x94\xd6\x3a\x9a\xba\x69\x4d\x0d\xd8\x69\x55\x11\x59\xb0\x04\xdb\xc4\x10\x79\xbd\x5c\x21\x92\xbe\x5c\x2d\xa0\x05\x1d\x19\xfe\x2f\x00\x00\xff\xff\xf2\x7e\xf3\x6c\x75\xaa\x00\x00") - -func change_trustHorizonSqlBytes() ([]byte, error) { - return bindataRead( - _change_trustHorizonSql, - "change_trust-horizon.sql", - ) -} - -func change_trustHorizonSql() (*asset, error) { - bytes, err := change_trustHorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "change_trust-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1d, 0x96, 0x8b, 0x86, 0xc7, 0x6e, 0xe1, 0x1d, 0x3f, 0xad, 0x87, 0x13, 0x5b, 0x2a, 0x75, 0xf6, 0x76, 0xcb, 0x1a, 0xf5, 0x10, 0x16, 0x27, 0xe8, 0x4f, 0xad, 0x45, 0xff, 0x8f, 0x83, 0x76, 0x7}} - return a, nil -} - -var _core_database_schema_version_8CoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x59\x5b\x73\xa2\xc0\x12\x7e\xf7\x57\xf4\x9b\x49\x95\x49\x25\x9a\xcb\xee\x5a\x39\x55\x44\x31\xba\xab\x68\x00\x4f\xe2\xbe\x58\x03\xb4\x3a\xb5\x30\x18\x66\xc8\xae\xff\xfe\x14\x57\x01\x15\xd8\xec\xee\xf1\x21\x56\x98\x8f\xaf\x2f\xd3\xdd\xd3\x3d\x5e\x5c\x80\xbe\xa1\x1c\x56\xd4\x46\xa0\x1c\x98\x2b\x60\x8d\x0c\x3d\x22\xd0\x02\x63\x07\x5a\xaf\x77\x09\x23\xd1\xe4\xe0\xf3\xe8\x89\x40\x2e\x38\x88\x0d\x11\x60\x6e\xd0\xfc\x01\x3d\xd7\x43\xe8\x3f\x02\x37\x37\xe8\x90\xc6\xc5\x05\xbc\xa3\xc7\xa9\xcb\xc0\x74\x9d\x2d\x11\xd4\xa0\x36\x15\xbb\x4b\x90\x6c\x1b\x7c\xc6\xd0\x44\xce\x89\xb7\x03\x41\x0c\x1b\x39\x10\x0f\xc1\x43\xc7\x7d\x47\xeb\xb2\xd1\xb8\xb8\x08\x18\x66\x2e\x17\x6b\x0f\xb5\xe7\x31\x58\x44\x10\x83\x70\x04\xcb\x77\xb6\xc1\x72\xb0\xde\xf7\x9d\x2d\x5a\xb0\xf2\x5c\x67\x0f\x48\xc4\x7e\xbe\xbc\xbb\xbc\xce\xa0\x8c\x1d\x6c\xd7\xcb\xe0\xf5\x02\xa4\xa1\xc9\x3a\x70\x41\x04\x3a\xc8\xc4\x52\x50\x07\x5d\x5f\xc0\x03\x5c\x75\xc3\x25\xdb\x35\x7f\x1c\x3e\xa5\x96\x8d\x4b\xca\x96\xc2\x23\x8c\x13\x53\x50\x97\x2d\x39\xf2\x80\xf7\x10\x6c\xda\x34\xa0\x46\x66\xba\x16\x65\x6b\x78\x80\xe6\x5c\x1f\x7c\x6a\x76\x13\xd9\xcc\x22\x9e\xb5\x34\x5d\xb6\x72\x3d\x87\xb2\xf5\x92\x0b\x8f\xb2\x35\x87\x07\x70\x59\xcc\x11\xb8\x79\xb9\xf2\x59\x24\xcb\x70\x2d\x8a\xc1\xfa\x8a\xd8\x1c\x73\x62\x1c\xca\x96\x4e\xe0\xdd\x75\x08\xf8\x49\x3c\x46\xd9\x3a\x82\x78\xee\xcf\x25\x47\xd3\xf7\xa8\xd8\x05\xe4\xab\x55\x37\x76\x00\x12\xcf\xdc\x2c\xb7\x44\x6c\xe0\x01\xb6\xbe\x61\x53\xb3\x15\x78\xcc\x24\x82\xd8\xee\xba\xdb\x68\xf4\xd5\xe9\x0c\x46\x4a\x5f\x7e\x85\xd1\x00\xe4\xd7\x91\xa6\x6b\x31\xf2\xd2\xdf\xae\x3d\x62\xe1\x86\x72\x61\xec\x38\xbe\x75\x4b\xd1\x9c\xae\x19\x7a\x9c\x98\xa6\xeb\x33\x51\x81\x45\xdb\xa6\x6c\x4d\x39\xf7\xd1\xa3\xcc\xc2\x5f\x15\x78\x73\xfb\xe6\xbb\x9e\xef\xf0\x3a\x8a\x98\x5b\x64\xef\x75\x90\x5b\x8f\x9a\x58\x43\xbc\x8d\xd6\x1a\xbd\x3a\x8c\x81\xaf\x56\x88\x35\x91\x35\x60\x86\xbf\xfb\x1d\x47\xc5\xde\x37\x88\x4d\x98\x89\xbc\xdb\x90\xc6\xba\xac\x82\x2e\x3d\x8e\xe5\x0c\x7a\xaa\x8c\x17\x47\x76\xd9\xf5\x76\x10\xb2\xf7\xa6\x8a\xa6\xab\xd2\x48\xd1\x33\x2f\xe5\x81\xcb\xed\x0f\xdc\xd5\xe1\x17\xbf\xaa\xa9\x53\xcc\x6f\xb0\xae\xb0\x86\xce\x59\x58\x7d\x6e\xcf\xe7\xc2\xa6\x0c\x79\x19\x73\x0a\xaa\xcd\x1b\x68\x81\x61\x51\x2a\xe1\xdd\x83\xea\xf3\x46\x99\x57\x46\x1a\x21\xea\x33\xa6\xf9\x56\x46\x9a\x82\x6a\xf3\x6e\x7d\x83\xfb\x46\x09\x67\x04\xf8\x1d\x3e\x9b\xf2\xcd\x9b\x8f\x7e\x99\x4f\xb3\xb0\xfa\xdc\x58\xee\xd3\x70\xbd\x36\x9b\xbb\x5a\x95\xd3\x45\x80\xda\x7c\x51\x49\xda\x20\xb1\xca\x69\x73\xb8\x7f\xcc\x1e\x97\x49\x7c\x5b\xd6\x14\x63\x10\x56\x42\x6e\x10\x56\x5b\xe1\xb8\xee\x95\xe9\x9a\x40\x7e\x97\x33\x68\x42\xaa\x69\x03\x54\xcc\x1c\x62\x8b\xc4\x47\x8b\x6d\x39\x36\x2d\x8a\x55\xb0\x7d\x89\xab\x40\xa6\x25\xab\x1c\xb7\x2f\x41\x15\xb8\xa8\xaa\x54\x80\xd2\x2a\x51\x89\xab\x65\x44\x54\x21\x2a\x31\x69\xbe\x57\x20\xb1\xd2\x80\x28\x31\xcb\x31\xb9\x3c\x28\x87\x1a\x84\x95\x03\x92\x38\xad\x85\x0a\xc2\x2e\x06\xca\xaf\xba\xac\x68\xa3\xa9\x92\x05\xdb\xdb\x35\x7f\xb3\x63\x84\xd6\x1b\xca\x13\xe9\x80\xab\x1b\x77\xe6\x0a\x71\xf0\x4b\xf2\x0c\xf4\xdd\x16\xbf\xc4\xaf\x74\x41\x0b\x27\x80\x2f\x70\xd1\x85\xe9\x4f\x86\xde\x17\xb8\x08\x1b\xf6\x9e\x2a\x4b\xba\x9c\x30\x27\x7c\x39\xc2\x4c\x34\xc5\xa4\xa1\x49\x7b\xce\x44\xe2\x31\xe2\xc8\xfa\xcc\xc1\x79\xd6\x00\x80\xa8\xb3\x67\xc4\x41\x30\x37\xc4\x23\xa6\x40\xef\xac\xd3\x3e\x07\x65\xaa\x83\x32\x1f\x8f\x5b\x7b\x14\x08\xfc\x25\x1a\xe7\x27\x95\x3a\x38\x70\x63\x25\xf7\xc9\x5e\xa1\x69\xb6\x90\x84\xe5\x63\x4f\x18\x6a\x21\xf5\xfb\xd9\xca\x51\x10\x07\x33\x75\x34\x91\xd4\x05\x7c\x93\x17\x70\x96\xda\x15\xe8\x3b\x52\x34\x59\xd5\x61\xa4\xe8\xd3\xac\xbe\xff\x95\xc6\x73\x59\x83\xb3\x66\x32\x1d\x45\xd3\x19\x1c\x7c\x9a\x2d\x68\x7e\x6a\x16\x2d\x4f\xc3\xeb\xa3\x9b\x91\x96\xda\x68\x2b\xe2\x7f\xa9\xb5\xdf\x0a\x78\x27\x5e\xd0\xb5\x9e\xdd\xde\x15\xb7\x24\x6e\x4c\xc1\xa0\x6b\xca\x44\x71\xbf\xf0\x8d\xf9\xce\xf1\x35\xe6\x3b\xdc\x37\x90\x09\x2f\x98\x90\x28\x13\xb8\x46\xaf\x80\xa1\x6c\x65\x93\x60\x90\xb2\x90\x8b\xe3\xea\x44\xc0\x8d\xeb\xa0\xe5\x3a\x84\xb2\x23\xa8\xc3\x38\x12\x1b\x0f\xf9\xc6\xb5\x2d\x1e\x06\x53\x61\x75\x65\x93\xf5\x29\x8d\x6c\xc2\x85\xe3\x5a\x74\x45\xd1\x3a\x01\x89\x1a\x7c\x9b\x92\x70\x96\x0e\x8c\x8b\xec\x4f\x5c\x12\x0e\x4a\xa7\x96\x33\x71\x95\x1e\x6f\xb1\x8b\x97\xf1\x08\x3f\x94\x7b\xdf\xe0\xec\x2c\x71\xfc\x7f\x1e\xe0\xea\xfc\xbc\xe4\xed\xa2\x3a\x45\x9e\x03\x75\xab\x18\x73\x3b\x57\x60\xcb\xef\x6a\x15\xd3\xa1\x33\x0a\x74\x47\xbc\x15\x71\x1e\xe4\x7f\x1a\xc4\xf9\xae\xe0\x8f\x73\x3f\xa1\x3b\x96\xf9\x39\x51\xf9\xbc\x4f\x93\xe8\x84\x9e\xe9\x3c\x17\x2b\x18\x4e\x7f\xf5\x92\x36\x1a\x14\x0b\x3c\x30\x55\xf6\x2e\x98\x6b\x23\xe5\x09\x0c\xe1\x21\x42\x12\x27\xe7\xf0\x32\x94\x55\x19\xb2\x71\x73\x7d\x95\x7c\x8a\xd5\x29\xa5\x4a\x6b\xd3\xd3\xa3\x3a\x5b\x0c\x47\xe3\x76\x6f\xd4\x19\x28\xcf\x37\x8f\xaf\xe3\xc1\x44\xe9\x8f\x07\x5f\xe7\xca\x6c\xde\x1e\x2e\x3a\xdf\x27\x03\x6d\x38\x55\xe6\x3d\x79\x2a\x69\x2f\xf7\xcf\xbd\xfb\xe9\x6b\x7b\xd8\x6c\xc1\xe7\xe8\x73\x1f\x7f\x7f\xba\xba\x6a\x41\xbb\x05\x57\xad\x28\x69\xa0\xc9\x05\xda\x36\xf1\x2e\x5d\x6f\x1d\x94\x38\xe9\x59\x92\x24\xe9\xe1\xa1\x19\x62\xda\x09\x2c\xf8\x7b\xc2\x9b\xe1\xa1\xf9\x87\xe5\x2f\xec\x0a\x3f\x52\x01\x83\x17\xf3\x27\x57\x0a\xbe\xbb\x39\x06\x7e\x27\xb6\x7f\x0c\x7d\x7d\x7d\x50\xa8\x4a\xcb\x4d\x98\x03\xa7\xdc\x71\xd8\xc6\xfe\xad\x54\x08\x18\x4b\xb2\x21\x15\x78\x22\x21\x5a\xa9\xc3\x42\xf5\x8f\x44\x5d\xa8\xfe\xdf\x08\xbc\x26\x21\x24\xf8\x32\x5e\x06\x7e\xb3\x05\xd7\x57\xc5\xf0\xc9\x77\x79\x1f\x0d\xa0\xfc\x6c\x15\x85\x50\xfc\x8c\xf0\x4d\xa6\xa1\x39\x0c\x87\xad\x87\xef\x95\x20\xc3\x37\x7f\xa0\xb0\x29\x17\x95\xd0\x74\x60\x4b\x82\x25\x7a\x6c\xda\x2e\x47\x41\x9d\x13\xc7\x74\xe8\xf0\x23\x07\x61\x66\x73\xf3\x73\x61\xca\x57\x28\xd7\x7b\x39\x27\x2a\xff\xa9\xf1\x32\x4f\xb3\xb7\xe2\x44\xb1\x8f\x3b\xf8\x8f\x6e\x58\x3c\xba\x9f\xa5\x07\x32\x7a\x35\x73\x3d\x7c\x93\x5a\xa7\xba\x9d\xf0\xb0\x22\x9c\xa3\x10\xbb\x2d\x9e\xe8\x0f\xb2\x30\xd3\xb5\x8e\x56\x82\xf6\x79\x0e\x1b\xdd\x16\x96\x35\x40\xd1\x29\x5e\x25\x3a\x83\xaa\x92\x9c\xbd\xa6\x2c\x13\x4c\x9c\x20\x65\x8f\x3b\x24\xbc\x8d\x65\x27\x74\x09\x17\x4f\xf5\x50\xe1\x22\x58\xae\x6f\xd8\x18\x24\x89\x49\xc3\x9f\x02\xfe\x6a\x9f\x96\x09\xcb\xf8\xaa\x26\xb2\xa5\x10\x8c\xb1\x81\x27\x02\x3a\x7e\x33\x8e\x8b\xc2\xab\x49\xb4\x64\xa2\xf8\xa0\xa8\x46\x04\xc7\xea\x69\xe6\xfe\x28\x5f\x4a\x63\xda\xe2\x99\x1d\x47\xf5\xbe\x70\x4a\xaf\x93\xc1\x4d\x47\x7f\xfa\x3e\x7c\xe9\x3c\x2b\x1d\x55\x9e\xce\xa5\xf6\xfc\x76\xf6\x72\xfb\xa8\x4b\xea\xeb\xd3\xd3\xe2\x6b\xe7\xeb\x68\x30\x7c\xe9\x2c\xf4\xbb\x67\xf5\x9b\x3a\xee\xf4\x66\xb3\x79\x50\x29\x33\xa7\x73\xf4\xf7\xba\x05\xcd\xb9\xd6\x0f\xaa\xe9\x1f\xf0\xb6\xd3\x86\x23\x64\x0c\x9a\x80\xcb\xdb\x50\xd6\xf5\xe7\x4a\x73\x1e\xdb\xcf\xa3\x85\xde\x1e\x49\xf3\xc1\x44\x7d\xfd\x36\xd6\xc6\xe3\x99\x2a\xf7\x7a\x77\xd3\xde\xf4\xe9\xeb\x44\xea\x6b\x33\x5d\xfd\x76\xaf\x3f\x29\x7a\x5b\x1b\xa8\xed\xc5\xd3\x4b\x5f\x52\x03\x95\x6f\xf2\xfa\x7f\x9c\xa8\xe8\x94\x9c\x35\xd7\x89\xdf\xda\x37\xe7\xdd\x7f\x65\xca\xed\x3f\x32\xa5\xbd\x37\xa5\x9d\xee\xcd\xbf\x35\xe5\xae\x34\xc8\x3e\xce\xdb\xf9\xff\xef\xca\xfd\x3f\x32\xe5\x66\x6f\x4a\x27\xe4\xec\xec\x4d\xc9\xdf\x7e\xc4\x17\x77\x1f\xbe\x8f\x89\x7f\x70\xf8\x48\xff\x1b\xb1\x07\x55\xaa\x0e\xfa\x27\xd2\xf5\x46\x1c\xef\x65\x8f\x58\x94\xff\xa1\xe3\xcf\x6f\x72\x22\xb6\xa3\xd7\x38\x19\x41\x27\x5b\xd7\xd4\xd6\x83\xd6\xbb\xf0\x63\xe9\x47\xc7\xba\x3c\x4d\x30\xd5\x25\x8e\xc8\x0d\x75\xb9\xf1\x32\x77\xad\x14\xa3\xff\x4a\xfb\xfc\x24\x0d\x64\x59\xbb\x99\xf4\xe5\xdb\xef\xf7\xcf\x77\x5f\x1f\x1f\xdb\x8f\x8b\xc9\x58\xbb\x5f\xbc\xc8\x43\x7d\xa6\xa8\xf7\xa3\x9e\xa4\x7c\x97\xee\x75\x69\x3a\x9e\x68\xaa\x3c\x96\x6f\x86\x37\x5a\x3b\xa8\xf4\xe7\xdd\xc6\xff\x02\x00\x00\xff\xff\xc6\x9a\x38\x5b\xb1\x20\x00\x00") - -func core_database_schema_version_8CoreSqlBytes() ([]byte, error) { - return bindataRead( - _core_database_schema_version_8CoreSql, - "core_database_schema_version_8-core.sql", - ) -} - -func core_database_schema_version_8CoreSql() (*asset, error) { - bytes, err := core_database_schema_version_8CoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "core_database_schema_version_8-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3c, 0xb2, 0xbe, 0x2b, 0xc5, 0xda, 0x4d, 0x87, 0x29, 0x0, 0xd6, 0xce, 0x75, 0x0, 0xf1, 0x66, 0x82, 0x9d, 0xe0, 0x3, 0x16, 0x1d, 0x3e, 0xf5, 0xbd, 0x2e, 0x23, 0x5a, 0x0, 0xf, 0x97, 0x45}} - return a, nil -} - -var _core_database_schema_version_9CoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x59\xed\x53\xa3\xbe\x16\xfe\xde\xbf\x22\xdf\xaa\xb3\xea\xd5\xd6\x97\x75\x3b\xde\x19\x6c\x29\xad\xad\xb4\x02\x7d\xd1\x2f\x9d\x00\x29\xcd\x4f\x08\x48\x82\xae\xfb\xd7\xdf\x09\x6f\x05\x4a\x29\xee\x6f\xf7\x3a\x3b\xab\x93\x3c\x79\x72\xce\x49\xf2\xe4\x9c\x70\x7a\x0a\xb4\x0d\xa6\x60\x8d\x6d\x04\x30\x05\xc4\x65\xc0\x42\x04\xf9\x90\x21\x13\xe8\x9f\x40\xed\x76\xcf\xc0\x90\x35\x29\x08\x68\xd4\xc2\x10\x65\x14\xb0\x0d\x64\xc0\xd8\x20\xe3\x15\x74\x5d\x1f\x81\xde\x3d\xa0\xc6\x06\x39\xb0\x71\x7a\x0a\xde\x91\x4f\xb1\x4b\x80\xe1\x3a\x1e\x64\x58\xc7\x36\x66\x9f\x67\x40\xb0\x6d\x10\x10\x82\x0c\x44\x29\xf4\x3f\x01\x83\xba\x8d\x28\x80\x3e\x02\x3e\x72\xdc\x77\x64\x9e\x35\x1a\x8d\xd3\x53\x4e\x31\x75\x29\xb3\x7c\xa4\x3e\x8d\x81\x09\x19\xd4\x21\x45\xc0\x0c\x1c\x8f\x77\xf3\xfe\x5e\xe0\x78\xc8\x04\x6b\xdf\x75\xb6\x80\x64\xde\xdb\xb3\xeb\xb3\x8b\x0c\x4a\xff\x04\x9e\xb5\xe2\xc3\x0b\x90\x86\x2a\x6a\x80\x32\xc8\x90\x83\x08\x5b\x31\xec\x20\x37\x60\xe0\x0e\x9c\x77\xc2\x2e\xdb\x35\x5e\x77\x5b\x0d\x1b\x73\x34\x22\x86\x6b\x62\x62\x81\x3b\xd0\x9c\x69\xfd\xef\xcd\x4e\x42\x47\x4c\xe8\x9b\x2b\xc3\x25\x6b\xd7\x77\x30\xb1\x56\x94\xf9\x98\x58\x14\xdc\x01\x97\xc4\x1c\x3c\x74\xab\x75\x40\x0c\x86\x5d\xb2\xd2\x5d\x13\x23\xde\xbf\x86\x36\x45\xb9\x69\x1c\x4c\x56\x0e\x8f\x98\x15\x02\x3e\xa0\x4f\x30\xb1\x3a\xb1\xed\x08\xfa\xc6\x66\xe5\x41\xb6\x01\x77\xc0\x0b\x74\x1b\x1b\x27\xdc\x59\x03\x32\x68\xbb\x1c\xd6\x53\x26\x53\x30\x94\x7b\xe2\x12\x0c\xfb\x40\x5c\x0e\x55\x4d\x8d\x91\x67\x81\x67\xf9\xd0\x44\x1b\x4c\x99\xfe\x49\xd1\x5b\xa7\x12\x4d\x91\x6d\x63\x62\x61\x4a\x03\xe4\x63\x62\xa2\x9f\x07\xf0\x86\xf7\x16\xb8\x7e\xe0\xd0\x3a\xe4\x86\x87\xc8\x7b\x1d\xa4\xe7\x63\x03\xd5\x98\xde\x46\xa6\x85\xfc\x3a\x8c\xdc\xff\x35\x42\x35\x91\x35\x60\x7a\xf0\xf9\x95\x40\x41\xc3\x70\x03\xc2\x74\x68\x43\x62\x20\xda\x69\x08\x63\x4d\x54\x80\x26\xdc\x8f\xc5\x0c\x7a\x22\x8f\x9f\x4b\x56\xce\xf5\x3f\x41\xc8\xde\x9d\xc8\xaa\xa6\x08\x43\x59\xcb\x0c\xca\x03\x57\xde\x2b\xfa\xac\xc3\xcf\x7e\x1e\xa6\x4e\x31\x5f\x60\x5d\xa3\x1a\x36\x67\x61\xf5\xb9\xfd\x80\x32\x1b\x13\x44\xab\x98\x53\x50\x6d\x5e\x6e\x05\x0a\x35\xa2\x82\x77\x0b\xaa\xcf\x9b\x9e\x8e\x2a\xde\x14\x54\x9b\xd7\x0b\x74\x1a\xe8\x15\x9c\x11\xe0\x2b\x7c\x36\xa6\x9b\xb7\x00\x05\x55\x11\xc8\xc2\xea\x73\x23\xe4\x57\xb9\x1f\xf6\xd7\x66\x73\xd7\xeb\x6a\xba\x08\x50\x9b\x2f\x12\x90\x0d\x82\x66\x35\x6d\x0e\xf7\x97\xd9\x63\x51\x43\x6f\xab\x9a\xd3\xe8\x90\x54\x90\xeb\x90\xd4\x36\x38\x56\xa9\x2a\x5b\x13\xc8\x57\x39\xf9\x0d\x7e\x98\x96\xa3\x62\xe6\x10\x5b\x24\x2e\x95\xc6\x6a\x6c\x2a\x61\x87\x60\x5b\x41\x3a\x80\x4c\x05\xa6\x1a\xb7\x15\x8c\x03\xb8\x54\x00\x0e\xe2\x6a\xd9\x17\x1d\xfe\x83\x98\xf4\x28\x1f\x40\xf2\xf3\x59\x0d\x89\xce\x5c\x35\x26\xb7\xc5\xab\xa1\x3a\x24\xd5\x80\x64\x0b\xd6\x42\xf1\x1d\x15\x03\xc5\xa5\x26\xca\xea\x70\x22\x67\xc1\xb6\x67\xd1\x37\x3b\x46\xa8\xdd\x81\xf8\x28\xec\x70\x75\xe2\x8c\x55\x86\x0e\xfa\x91\xb4\x01\xed\xd3\x43\x3f\xe2\x21\x1d\xa0\x86\xa9\xf1\x0f\x70\xda\x01\x93\x0f\x82\xfc\x1f\xe0\x34\x4c\x64\xbb\x8a\x28\x68\x62\xc2\x9c\xf0\x35\x72\x8c\xf9\xce\x98\xb8\x3b\x79\x7c\x14\x65\xad\x82\x39\x02\x80\x89\x9c\x27\x00\x43\x15\x34\x93\x14\x35\x69\x8b\x32\xf7\x66\x71\xe6\xc4\xfd\x78\xce\x34\x42\x07\xfd\xc9\xc5\x52\x9e\x68\x85\x78\x82\xc5\x50\x1b\xa4\x66\x65\x73\xd5\xdc\xf4\x5b\x96\x82\x21\x5f\x71\x7e\x87\x24\x0c\xc0\x74\xfc\x1f\xcf\xe2\xb5\x85\xe7\xbb\x06\x32\x03\x1f\xda\xc0\x86\xc4\x0a\xa0\x85\xc2\x30\xd4\xcc\xad\x39\xcc\x44\x6b\x18\xd8\x6c\x15\x55\x33\x1e\x34\x10\x2f\x08\x9a\x85\xde\x0f\xcc\x36\x2b\x17\x9b\x99\x1c\x3f\xe7\x6c\x76\x43\xc6\x6e\x86\x5b\x77\xeb\x64\xb2\x01\xca\x02\x1e\xed\xf2\xac\x98\x1e\x35\x00\x00\x49\x0b\x36\x81\xb1\x81\x3e\x34\x18\xf2\xc1\x3b\xf4\x79\x72\x7a\x74\x75\x7d\x1c\xae\x8d\x3c\x1b\x8f\x4f\x42\x34\x1f\x48\xa0\x83\x4a\xc0\xdf\xbf\x97\x81\xdf\xa1\x1d\x94\xa1\x2f\x2e\x5a\x45\xb8\x0d\x29\x73\x5c\x13\xaf\x31\x32\x01\x26\x0c\x59\xc8\x4f\x21\x8d\xe3\x4e\xa3\x31\x94\x55\x51\xd1\xc0\x50\xd6\x26\x39\x4f\xe6\xc2\x78\x26\xaa\xe0\xa8\x29\xf5\x5e\x26\xf7\x53\x6d\x2e\x8a\xdd\xd9\x73\xbf\x3b\x50\x9f\xae\xe4\xae\x38\x9b\x0b\xf3\xcb\x87\x91\xf2\x32\xbc\x1e\x4d\xae\x06\xfd\xc9\xe3\xcd\x40\x7a\xd2\x5a\x2d\xb1\xbd\x1c\x4a\xca\x40\x9e\x35\x4f\x40\x13\x3a\x7d\xc6\x7f\xeb\x8b\x7e\xd0\x3c\x01\x17\xe7\xc7\xe5\xf1\xa7\xff\x36\xf8\xf4\xb7\x22\x1f\x67\xfe\x40\xc7\x16\x26\xac\xd0\x49\xd1\x1b\x09\x9c\xf2\x3e\x12\x38\x34\xd0\x11\x61\x3e\x2f\x1f\x8b\x71\x8d\x30\x98\xac\x6d\xc8\xab\x4c\x13\x51\x56\x6e\x4e\x04\xdc\xb8\x0e\x32\x5d\x07\x62\x52\x82\xba\xbc\x2c\x1a\xcd\x36\x3e\xa2\x1b\xd7\x36\x29\x60\xe8\x67\xd1\xb2\xb5\x0d\xad\x7d\x16\x55\x6e\x86\x38\x22\x61\x05\x65\x63\x18\x3e\x1e\x70\xe7\x22\xff\x93\x90\x84\x95\xe8\xde\x6e\x6c\x11\x9e\x54\x71\xb3\xa2\x96\x4c\x5a\x91\xe6\x28\x71\xd0\x57\xf1\x2b\xc6\x40\xec\x8e\xc0\xd1\x51\xb2\x14\xff\xbd\x03\xe7\xc7\xc7\x15\xa3\x8b\x06\x16\x79\x76\x1c\x38\xc4\x98\x5b\xcb\x02\x5b\x7e\x9d\x0f\x31\xed\x86\xa7\x40\x57\x12\xbf\x88\x73\xdf\x49\xa4\x7f\xe4\x18\xde\x46\x3f\x37\xf1\xef\xef\xe7\xe7\x27\xa0\x75\x02\xce\x4f\xa2\x85\x07\x4d\x5d\xba\xc5\x46\x5b\xf9\x1c\x3b\xf2\x3b\x3f\xae\xc2\x93\x20\x08\xc2\xdd\x5d\x33\x04\xb5\x12\x5c\x8c\xe6\x7d\x11\xa2\xfb\x4d\xfa\x30\x1f\x1f\x7e\x42\x51\x27\x8b\xf3\x5f\xe7\xca\xf4\xfa\x9f\x87\x77\xcd\xfa\x46\xbf\x3b\xff\xcc\x3f\x6e\xbe\x7d\x4c\xbd\x07\x51\x7f\x11\x1e\xcc\x10\xef\xde\x35\x8f\x3b\xe1\xe1\x9f\x8d\xc7\xc9\x76\xf9\x71\xd0\xf1\x9b\xc1\x44\x7a\x56\xc4\xae\xd4\x1f\xf5\x95\x96\x24\x4d\x16\x62\xbf\xd5\xd7\xda\xbd\xb9\xd2\x96\x66\x97\xa3\x9b\xfb\xb9\x22\x49\xd3\xc5\x5c\x5d\x0a\xf3\x91\xa4\x3e\x8f\xb4\xe5\x64\xf0\xc7\x1d\xe7\xff\x17\xf5\x2b\x9f\x42\xfd\xae\x88\xe5\x6b\x92\x48\xc9\xe2\x36\x48\x37\x5b\x55\x38\xba\xde\x51\x03\xcf\x47\xef\x07\x41\x7a\x60\xbc\x22\x66\x63\xca\x0e\x42\xd3\x42\x27\x11\x88\xa8\xd9\xb0\x5d\x8a\x18\x76\xf6\x68\x65\x78\x63\x94\xa8\x51\xe6\x94\xe4\xeb\xa9\x94\xaf\x70\x42\xb6\xf3\xec\x39\x6c\xfb\xca\xb2\x3c\xcd\xd6\x8b\xcc\xf9\xca\xae\x5b\x9c\x1e\xff\xee\x82\xc5\x25\xef\x51\xaa\x8a\xc8\xaf\x79\xe5\x84\x23\xb1\xb9\xef\xca\x09\xf5\x01\x52\x8a\x58\x59\x38\x23\x71\xdb\xdb\x0d\x1d\x7e\x74\xca\xa9\xc3\xd7\x3b\xb2\x47\xf5\xc3\xce\x7d\x57\x42\xd8\x09\x4c\x37\xd0\x6d\xc4\xb7\x9b\x81\xc3\x97\xdc\x3f\x7a\xed\x64\x16\x38\x7e\x2c\x88\x7c\x29\x2c\x6b\xec\xe0\x9e\xad\x11\x8f\x8c\x23\x5c\x18\x9a\xc4\x3d\xb3\x1f\xb2\x65\x72\x58\x1c\x47\x04\x21\xad\xd0\xeb\x95\x50\xf3\x22\x18\x4c\x95\xe1\xa3\xa0\x3c\x83\x91\xf8\x0c\x12\xda\xa2\x7c\xc7\xfb\x63\xab\x61\xc2\xf2\xb1\x7f\xd9\xd6\xa4\x97\xc1\xa2\xfd\x24\xb7\x15\x71\x32\x13\x5a\xb3\xab\xe9\xe2\xea\x5e\x13\x94\xa5\x24\x3d\x3f\xb4\x1f\x86\xfd\xc1\xa2\xfd\xac\x5d\x3f\x29\x23\x65\xdc\xee\x4e\xa7\x5c\xbc\x2f\x12\xc5\x8d\x64\x29\xfa\x7b\x3e\xd7\x94\xa8\x51\x18\xd3\xf1\x2f\xe3\xd7\xcb\x54\x37\xa4\x1b\xac\x5c\x08\xd0\xbb\xb8\x0d\x36\x4e\x57\xfe\x25\x7d\x10\x38\xeb\x4f\x75\xf4\xf0\x6d\xd3\x9f\xcd\x6f\x44\x3e\xbe\x75\x9e\xfc\x84\xd4\x5c\x0d\xcf\xae\x42\xb5\xbb\xb8\x3d\xe8\xc5\x7d\xeb\x69\xf8\xac\xb5\x86\xc2\xac\xff\xa8\x2c\x47\x63\x75\x3c\x9e\x2a\x62\xb7\x7b\x3d\xe9\x4e\xa4\x87\x47\xa1\xa7\x4e\x35\x65\x74\xa3\x49\xb2\xd6\x52\xfb\x4a\xeb\x59\x5a\xf4\x04\xa5\xd7\x3c\x01\x97\x25\x96\x9b\x4f\x0a\x46\xaf\x82\x3b\x7f\xd5\xdf\x96\x0f\xb0\xfd\x73\x38\x5c\x92\xae\xf1\x32\x16\x7a\xaf\xdf\x8c\xf9\xda\x79\xa1\xb7\xea\x78\xb0\xe8\x2d\xc4\xad\xe7\x51\x14\x2e\x72\x4e\x44\xff\xb8\x60\x5f\x1e\x77\xfe\x96\x07\x57\x7f\xd6\x83\xd6\xd6\x83\x56\xba\x12\x7f\xd7\x83\xeb\x03\x3b\xe9\x8b\xde\xb4\xff\xff\x6b\x70\xf3\x67\x3d\xb8\xdc\x7a\xd0\x0e\xcd\x6f\x6f\x3d\xc8\x5f\x17\x99\x67\xa3\xdf\xbd\x32\x32\xef\xd9\xf1\xb5\xc1\xff\xce\xd7\x7d\x47\xed\x9d\x02\x2e\x1a\xc1\xc5\x7e\x27\x47\xcc\x30\xa6\xc1\x4d\xbe\xc9\x45\x4f\x0b\x60\xe7\x87\x47\xed\xb6\x59\xaa\x7e\xb9\x9b\xb5\x4c\x04\x2b\x5e\x44\xc1\x4c\x1e\x3e\xcd\x44\xb0\xbd\x78\x77\x42\x98\xcf\x71\x4a\xde\x6e\xd3\x57\x86\x64\xc2\x03\xd1\xfd\xb7\x0e\xec\x8a\xf9\x36\xe5\x0a\xad\xdf\x99\x60\x1b\xf0\x32\xf6\xc2\xb7\x88\x3c\x75\xba\xd8\x3b\x71\x29\x7e\x84\x8a\xc3\x10\x7e\xb2\xaa\xb7\xbf\xa2\xaf\x5b\x05\x1e\x30\x91\xb7\xb9\xf4\x4c\x1d\xca\x12\xd0\x99\x8f\x10\x48\x2a\xad\x63\xb0\x18\x88\x8a\x08\xb2\x95\x57\x2a\xab\x61\x9d\x5e\xb6\x7e\xf1\x67\xbd\xdf\x35\x32\x4b\xc2\x2d\xcc\x6f\x8a\x9c\x99\x65\x3b\x69\xdf\xd7\xe9\xf0\x8b\xb7\x8d\x18\x0a\x67\xfc\x5f\x00\x00\x00\xff\xff\xf6\xd4\xef\xc8\x5d\x1f\x00\x00") - -func core_database_schema_version_9CoreSqlBytes() ([]byte, error) { - return bindataRead( - _core_database_schema_version_9CoreSql, - "core_database_schema_version_9-core.sql", - ) -} - -func core_database_schema_version_9CoreSql() (*asset, error) { - bytes, err := core_database_schema_version_9CoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "core_database_schema_version_9-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcf, 0x88, 0x53, 0x36, 0x7b, 0x3, 0x68, 0x94, 0x19, 0xd7, 0x1e, 0x21, 0x32, 0x8b, 0x39, 0xb0, 0xcc, 0x38, 0x99, 0x5, 0x8b, 0x91, 0x78, 0x8, 0x7c, 0x74, 0x85, 0xdd, 0x4f, 0x60, 0x5c, 0xaa}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xea, 0x86, 0x8, 0xb6, 0xec, 0xb3, 0xb8, 0x25, 0xd7, 0xc0, 0xa8, 0x37, 0x9e, 0xe2, 0x1e, 0x36, 0xea, 0x49, 0xc8, 0x14, 0xfb, 0xbd, 0x7d, 0x22, 0xb8, 0x4d, 0x62, 0x48, 0x6b, 0xb3, 0xa2, 0xbb}} return a, nil } @@ -710,7 +192,7 @@ func failed_transactionsCoreSql() (*asset, error) { return a, nil } -var _failed_transactionsHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xf9\xaf\xa2\x4a\xf6\xf8\xef\xef\xaf\x20\x9d\x49\x6e\x77\xbc\xdd\xb2\x2f\xfd\x3e\x3d\x09\x2a\xee\xe2\xbe\x4e\x26\xa6\x80\x02\x51\x04\x2f\xe0\x55\xef\x64\xfe\xf7\x6f\x04\x54\x44\x51\x5c\xba\x5f\xbf\xc9\x97\x74\x3a\x57\x39\x75\xb6\x3a\x4b\xd5\xa9\x03\x7e\xfd\xfa\xc7\xd7\xaf\x48\xc3\x72\x5c\xcd\x86\xed\x66\x15\x51\x80\x0b\x24\xe0\x40\x44\x59\xce\x17\x7f\x7c\xfd\xfa\xc7\xf6\x7e\x6e\x39\x5f\x40\x05\x51\x6d\x6b\x7e\x00\x78\x87\xb6\xa3\x5b\x26\xc2\x7d\xa3\xbf\x61\x21\x28\x69\x83\x2c\xb4\xf1\x76\x78\x04\xe4\x8f\xb6\xd0\x41\x1c\x17\xb8\x70\x0e\x4d\x77\xec\xea\x73\x68\x2d\x5d\xe4\x07\x82\xfe\xe9\xdd\x32\x2c\x79\x76\xfa\xad\x6c\xe8\x5b\x68\x68\xca\x96\xa2\x9b\x1a\xf2\x03\x79\xe9\x76\xf2\xec\xcb\x9f\x3b\x74\xa6\x02\x6c\x65\x2c\x5b\xa6\x6a\xd9\x73\xdd\xd4\xc6\x8e\x6b\xeb\xa6\xe6\x20\x3f\x10\xcb\x0c\x70\x4c\xa0\x3c\x1b\xab\x4b\x53\x76\x75\xcb\x1c\x4b\x96\xa2\xc3\xed\x7d\x15\x18\x0e\x3c\x22\x33\xd7\xcd\xf1\x1c\x3a\x0e\xd0\x3c\x80\x15\xb0\x4d\xdd\xd4\xfe\x0c\x78\x87\xc0\x96\x27\xe3\x05\x70\x27\xc8\x0f\x64\xb1\x94\x0c\x5d\x7e\xdd\x0a\x2b\x03\x17\x18\xd6\x16\x8c\xaf\x76\x84\x16\xd2\xe1\x33\x55\x01\x29\xe5\x11\x61\x50\x6a\x77\xda\x48\x5d\xac\x0e\x03\xf8\x6f\x13\xdd\x71\x2d\x7b\x33\x76\x6d\xa0\x40\x07\xc9\xb5\xea\x0d\x24\x5b\x17\xdb\x9d\x16\x5f\x12\x3b\xa1\x41\xc7\x80\x63\xd9\x5a\x9a\x2e\xb4\xc7\xc0\x71\xa0\x3b\xd6\x95\xb1\x3a\x83\x9b\x3f\x7f\x05\x41\xd9\xfb\xeb\x57\x90\xdc\xda\xd5\xaf\x13\xd0\xa7\x76\xbb\x74\x3e\x83\x5b\x43\xbe\x44\x2c\x04\x75\x40\xee\x81\x97\xc4\x9c\x30\x08\x41\x06\x68\x3d\xae\xc6\x50\x55\xa1\xec\x3a\x63\x69\x33\xb6\x6c\x05\xda\x63\xc9\xb2\x66\x97\x07\xea\xa6\x02\xd7\xe3\x90\x70\xa6\x03\x3c\x43\x77\xc6\x96\x39\xd6\x95\x5b\x46\x5b\x0b\x68\x83\xfd\x58\x77\xb3\x80\x0f\x8c\x3e\x70\xf2\x10\x17\xb7\x8d\x35\xa0\xa2\x41\xdb\x1b\xe8\xc0\xb7\x25\x34\xe5\x9b\x44\x08\x0d\x5f\xd8\xf0\x5d\xb7\x96\x4e\xf0\xdd\x78\x02\x9c\xc9\x9d\xa8\x1e\xc7\xa0\xcf\x17\x96\xbd\x75\xc7\x20\xa6\xde\x8b\xe6\x5e\x5d\xca\x86\xe5\x40\x65\x0c\xdc\x5b\xc6\xef\x8c\xf9\x0e\x53\x0a\xfc\xf2\x0e\xa6\xc3\x23\x81\xa2\xd8\xd0\x71\x2e\x0f\x9f\xb8\xb6\xe2\xe5\x9d\xb1\x61\x59\xb3\xe5\x22\x01\xf4\xe2\x1a\x4b\x3e\x14\xd0\xed\x1b\x11\xef\x82\x6e\xe2\x01\xdb\x38\xa1\xaa\xd0\x4e\x06\xba\x43\x7f\xc7\x90\x40\xad\xc9\x06\x79\xa1\xf5\x06\x22\xe1\x50\x7c\x6d\xc4\x62\x3b\x60\xe2\x5e\x9d\x01\xe7\x28\x00\x49\x9b\xab\x66\x34\xd9\x7b\x7a\x12\x60\xcb\xe7\xc3\xba\x0a\xa8\x3b\xee\xd8\x5d\x8f\x17\xd7\x51\x6e\x21\xad\x45\x52\x48\x98\x14\x6c\x97\x4a\x2e\x03\x4b\x3b\x77\xbf\x0a\x76\x3d\x8a\x49\x9b\x64\x93\xe9\xe7\xc8\xad\xb6\x1d\x67\x79\x8d\xf2\x1e\x58\xb6\x14\x78\xe3\xba\x60\x6f\x06\x0b\x60\xbb\xba\xac\x2f\x80\x79\x31\x79\x5f\x1b\x3a\x5e\xdc\xb8\x36\xd9\x67\xb4\x5b\x39\x38\x3f\xf0\x66\xfa\x9e\xf2\x92\xd0\xf3\x01\x7f\x3a\x7e\x7f\x32\xb7\x33\x19\xfc\xb9\xcd\x0f\xbb\xa5\x9f\x67\x0c\xe3\x84\x1c\x68\x96\xbd\x18\xcf\x75\x2d\x58\x30\x5c\x60\x21\x02\x99\x58\xc6\xdb\xd7\x7b\x97\x30\x27\x35\x4e\x7f\x74\xb6\x5e\xed\xd6\x44\x44\x57\x7c\xca\x39\x21\xcf\x77\xab\x9d\x84\xb8\x63\x8c\xee\x09\x98\x83\xe9\xbe\x8c\xc9\xfb\x94\x5c\xfc\x5d\x96\x6e\x0b\xcd\xae\x20\x66\xef\xd0\xd9\x76\x9d\xed\xc0\xb7\x9b\x29\x1f\x21\x49\x3c\x5a\x81\x09\x61\x0f\xab\xd9\xc4\x12\xc6\x78\xfd\x2d\xf2\x9d\x47\x91\x6c\x6c\xb0\xee\x4b\x06\x1c\x2c\xf2\x12\xcb\x16\x44\x80\x5b\x64\xf1\x87\x24\x84\x0d\x96\x7f\xc9\xf9\xd9\xad\x17\x93\x70\x14\x89\x21\x97\x81\x43\x21\x21\x00\xe4\x0b\x85\x96\x50\xe0\x3b\x67\x80\xe7\xfa\x76\xc7\xa1\xcb\xf0\xb3\xb9\x9c\x43\x5b\x97\xff\xf5\xef\x2f\x09\x46\x81\xf5\x1d\xa3\x0c\xe0\xb8\x9f\x81\xb9\x81\x86\x57\x8a\x49\x30\x42\xd5\xed\xb3\x43\xf2\x5d\x31\xdb\x29\xd5\xc5\x0b\xf2\x8c\x81\xa6\x1d\xb8\x7b\x45\x4e\x18\xbd\x80\x63\x27\xdd\x03\x38\xb6\xb2\x7a\xc3\x0f\xcc\xbf\x22\xb7\x08\xe2\x89\x9e\x00\x83\x30\xe8\x08\x62\x3b\x82\xc2\x58\x68\xce\x9b\xb1\xb3\xc5\x6c\x51\xa8\xf1\x27\x14\xfe\xfc\xc3\xaf\xc2\x89\x60\x0e\xbf\xef\xbe\x43\x3a\x9b\x05\xfc\x1e\x0c\xf9\x13\x69\xcb\x13\x38\x07\xdf\x91\xaf\x7f\x22\xf5\x95\x09\xed\xef\xc8\x57\xaf\x38\x97\x6d\x09\xdb\xf9\x0a\x30\xef\xf0\xfd\x71\x84\xf1\xf8\x66\x80\x38\x5b\xaf\xd5\x04\xb1\x73\x01\xb3\x0f\x80\xd4\xc5\x63\x04\x48\xa9\x8d\xbc\xec\xca\x6e\xbb\xef\x1c\x0f\xc9\x4b\x94\xf2\x4e\xfc\x80\xe6\x5e\x43\x57\xe5\x39\xd2\xa5\x58\xef\x44\xf4\x89\xf4\x4b\x9d\xe2\x9e\xad\x70\xfd\xed\x88\xfc\x01\x4b\x84\x91\x5b\x84\x3f\x41\xe2\x29\xa0\x51\x4d\x2f\xb4\x76\xb3\x8a\x2c\x6c\x4b\x86\xca\xd2\x06\x06\x62\x00\x53\x5b\x02\x0d\x7a\x6a\x48\x58\x2f\x0c\xb3\x7b\xdd\xd0\x02\xf6\x77\xb6\x7a\xe0\x7f\x37\xb7\xe7\x74\xb9\xb7\xec\xab\xf8\x91\x96\xd0\xe9\xb6\xc4\x76\xe8\xbb\x3f\x10\x04\x41\xaa\xbc\x58\xe8\xf2\x05\x01\xf1\xa4\xaf\xd5\xba\x7e\xbc\x6b\x77\x5a\xa5\x6c\xc7\x83\xe0\xdb\xc8\x3f\xc6\xff\x40\xda\x42\x55\xc8\x76\x90\x7f\x60\xdb\x4f\xd1\xd9\xb8\xea\x88\x8f\x49\x77\x0d\xfd\xd3\x84\xc3\xcf\x09\x97\x24\x52\x3d\x26\x5f\x02\x0a\x7b\x11\xf7\x5f\xdd\x25\xe1\xe7\x3f\x10\x24\xcb\xb7\x05\xa4\x5f\x14\x44\xe4\x1f\xd8\xbf\xb0\x7f\xa7\xff\x81\xfd\x0b\xff\xf7\x3f\xff\x81\x7b\x7f\xe3\xff\xc2\xff\x8d\x74\xfc\x9b\x88\x50\x6d\x0b\x5b\xa5\x08\x62\xee\xcb\x59\xcd\x24\xc8\x03\x0f\x6a\xe6\x3a\x85\x9f\xad\x99\xff\xbb\x47\x33\xa7\x39\x35\xd0\xc3\x3e\x0f\x27\x53\xc4\x21\x6d\x9f\x60\xf4\x38\x46\x90\xf6\x56\x57\xc8\x8f\x43\x04\x78\xf5\xbf\xee\x0c\x1b\x02\xf2\x23\xec\x11\x5f\xce\x79\xed\x53\x79\x8c\x22\x8c\xb0\xb8\x73\xe3\xe4\x1c\x9e\x5d\x02\x3d\xca\xe5\x39\xa4\x11\x4e\x8f\x1c\xf2\x98\xdd\x83\x95\x9d\x72\x7b\x6e\x99\xf7\x30\xb7\x67\x90\x46\xb9\x0d\x3b\xc9\x45\x6e\xb7\x99\x4b\x81\x2a\x58\x1a\xee\xd8\x05\x92\x01\x9d\x05\x90\x21\xf2\x03\x79\x79\xf9\xf3\xf8\xee\x4a\x77\x27\x63\x4b\x57\x42\x47\x69\x47\xb2\x86\xd7\xbf\x81\x88\x9e\x83\x25\x13\xcf\xf7\xc5\xf0\xe6\xdb\x97\x48\x57\x10\x49\xd7\x74\xd3\xf5\x16\x06\x62\xb7\x5a\xf5\xc5\x01\xf3\xed\x32\x1e\x91\x27\xc0\x06\xb2\x0b\x6d\xe4\x1d\xd8\x1b\xdd\xd4\x22\x60\xe6\x72\xbe\x5f\xf2\x23\xba\xe9\x42\x0d\xda\x11\x10\xd5\x00\x9a\x83\x38\x73\x60\x18\xa7\x64\x5c\x6b\x6e\x9c\x12\xf9\x8c\x53\xd4\x97\x3d\xe4\xe9\xb4\x47\xf7\x0d\xf7\xaa\x23\x5a\xed\xd8\xab\xc4\x85\xeb\x13\x85\x2c\x16\x86\xee\xd5\xec\x11\x57\x9f\x43\xc7\x05\xf3\x05\xb2\x9d\x33\xef\x23\xf2\x61\x99\xf0\x94\xd1\xb8\x5d\xd1\x6e\x3d\x1a\x6c\xa7\x92\xf1\xbc\xdf\x7c\xc5\x60\x0d\xcc\x90\x6f\x75\xfc\x15\x1d\xe6\x7d\x51\x12\xb3\x2d\xc1\x5b\x7e\x65\x86\xc1\x57\x62\x1d\xa9\x95\xc4\x1e\x5f\xed\x0a\xfb\xcf\xfc\xe0\xf0\x39\xcb\x67\x8b\x02\x82\x5d\x13\xe6\x6e\xb5\x47\x11\x9d\x98\x62\x50\xf4\x40\x4c\xb8\x76\xdf\x81\xf1\xf9\x25\x46\xe2\x97\xef\xdf\x6d\xa8\xc9\x06\x70\x9c\x2f\xd1\xe9\xf2\xcf\x2a\xce\xd8\x16\x4d\x7e\xb9\x30\x51\xfe\xde\xf8\x61\xc9\xfc\x8a\xce\x5e\xae\xf3\x9e\x71\xa8\xd5\x9d\x67\xf3\x2c\xb8\x6c\x29\xe7\xc0\x31\xfc\x3c\xb8\x5f\xfe\x3b\x33\x80\xa2\x2f\x79\xd8\xf9\xf2\xc2\x93\xcc\x36\x8c\xf3\x97\x19\xed\x25\x41\x90\x7a\x5f\x14\x72\x48\x66\x78\x45\x22\xbf\x42\x77\x59\xa0\x3d\xae\xc8\xed\x6f\xba\x12\xc7\xdb\xae\xe6\xf3\xa8\xd5\x05\x78\x02\xb3\x8b\xf8\xcc\x38\x2e\xd2\x9f\x96\xb8\xe2\x20\x3f\x79\x07\x1f\x9f\x62\xac\xd9\xb3\xe3\xf3\xb7\x14\xe8\x02\xdd\x70\x90\xa9\x63\x99\x52\xbc\xb1\xed\x0a\x65\x8f\xea\x21\xc0\x13\xe8\x61\x77\x6e\x1d\xc3\x5b\xe8\x30\x39\x91\x17\x9e\x3b\xc7\x3e\x3f\x30\x50\x4b\xa8\x32\xea\x4d\xc4\x9e\x8f\x5d\x94\x43\x23\x14\x0e\x13\x91\x0c\x7e\x7f\x98\x1c\x49\x4c\xd6\xd2\x3d\xe4\xa6\xe8\x18\x1b\x02\xf7\xea\x20\x1f\x76\xb9\x50\x12\xc3\xee\x4d\x27\xf8\x18\x39\x67\x3f\x91\x05\x3b\x59\x0f\xb8\xc0\x18\xcb\x96\x6e\x3a\xe7\x6d\x50\x85\x70\xbc\xb0\x2c\xe3\xfc\x5d\xef\xe4\x53\x85\x71\x73\xed\xdd\xb6\xa1\x03\xed\xf7\x38\x90\xed\x3a\xd4\x5d\x8f\xbd\x65\x92\xfe\x11\x07\xb5\xb0\x2d\xd7\x92\x2d\x23\x56\xae\xe8\x1c\xed\x8c\x05\x02\x05\xda\xde\xf2\xc2\xff\xde\x59\xca\x32\x74\x1c\x75\x69\x8c\x63\x0d\x25\x10\x1c\xe8\x06\x54\xae\x41\x05\xac\xc7\x98\x50\xbc\xeb\xc5\xd4\xb7\x1f\xf5\xc4\x98\x33\x93\x2b\x79\x31\x79\x44\xba\x1e\xe3\x6e\x15\xf9\xb9\xa9\xee\x22\x8d\x5f\x95\xfa\x6e\x12\xf4\xc1\x54\x78\x91\xd6\x69\x6a\x3c\x0f\x7e\x21\x55\x86\x4e\x7f\x9e\x66\x9b\xd7\xb6\x42\xc7\x9d\x57\x31\xdb\xa5\xed\xee\x40\xf6\x45\xf1\xb2\xe4\x83\x49\x32\x88\x0e\xd6\xd2\x96\xf7\xad\x1c\x31\xe9\x69\x17\x72\x5e\x5e\xbe\x7f\x8f\xdf\xae\xc5\xfb\x41\x70\xf8\xf6\xa8\x3a\x83\x7e\xc1\xcf\x4f\x5d\x53\x04\x61\xf3\x9e\x0c\xe7\xf5\xcb\xc4\x92\x8d\x74\x2b\x5e\x02\x0a\x1a\x28\x2f\x81\xf8\x7b\xe5\xb3\x00\xa7\x7d\x9f\x57\xe0\x2e\x92\xdb\x43\x5d\xa0\xe8\xb1\xa4\x3b\x63\x07\x1a\x06\xb4\x11\xc9\xb2\x0c\x08\xcc\x5d\xde\xd2\x65\x38\x36\x8f\x72\xb4\xff\xdd\x71\xde\x3e\x74\x1c\x8d\x23\x19\xfd\xa8\xe7\x29\x7a\x33\x74\x94\x7f\xb6\x3b\xd4\xe3\x7a\xec\xf5\x0f\x23\xd9\xa2\x90\xad\x20\x9f\x3f\x87\x35\xf8\x4f\x04\xfd\xf2\xe5\x1a\xaa\x73\xc3\x77\x4a\xfb\xbf\x13\x3d\x26\xc0\x77\xa4\xd3\x08\xfa\x88\xc2\x3d\x06\x2f\xba\xd2\xf9\x53\xf0\x27\x38\xd7\xf9\xbe\x86\x84\x99\x34\x49\x08\x7b\x24\x97\x5e\xeb\x21\x78\x4e\x36\xbd\x42\xe5\x57\xe5\xd3\x1b\x85\x7d\x30\xa3\x5e\xa1\x76\x9a\x53\xe3\x06\x5c\xc8\xaa\x47\x7d\x23\x4f\xb4\xd5\x9d\x7d\x86\x59\x4a\xbc\xd1\x0a\x62\xff\x95\xed\x5b\xd2\xc4\x7b\x39\x87\x9e\x85\x3d\x90\x3e\xeb\x2f\xdb\x9d\x42\xfc\x56\x23\x6e\x13\xf7\x97\x6c\xc3\xdc\xf5\x18\x9a\xef\xd0\xb0\x16\xf0\x5c\x69\xd3\x5d\x6f\x37\x45\x4b\xc3\x8d\xb9\x39\x87\x2e\x88\xb9\xb5\xdd\x8e\xc5\xdd\x76\x74\xcd\x04\xee\xd2\x86\xe7\xaa\x70\x1c\xfd\xe5\x5f\xff\x3e\xac\x5d\xfe\xf3\xdf\x73\xab\x97\x7f\xfd\x3b\xaa\x73\x38\xb7\x62\x0a\x66\x07\x5c\xa6\x65\xc2\x8b\x6b\xa1\x03\xae\x53\x34\x81\x64\xfa\x1c\x8e\x25\x6b\x69\x2a\x5e\x55\x9b\xb5\x81\xa9\xc1\xe8\x8e\xed\x38\xb5\x6e\x35\xb1\xc5\xa6\xc1\xc8\x16\xd8\x34\xa1\x3d\x4e\xe6\x01\x07\x4c\x17\xcd\x35\x8c\xf8\xba\x92\x83\x42\x3d\x5c\x8d\x77\x16\xeb\xb3\x77\xad\xe8\x87\xe8\xca\x2e\x16\xec\x9a\xd0\x92\x04\x30\x3f\x18\x78\x1d\x7f\x57\xfa\xdb\xda\x42\xe7\x42\xa5\x37\x5c\x53\x0b\xd7\x79\x6f\xdb\xe5\x3c\x4f\x88\x84\xed\x7f\x17\x85\xba\xb8\x3b\x4a\x22\x64\xec\x3a\xe0\x69\x62\x26\xee\xa0\xbc\x28\xe8\x95\xa4\x75\x5e\xd4\x1c\x70\x01\xa2\x5a\xf6\x95\xf3\x2e\x24\xc7\x77\xf8\x2b\xe2\x95\xc4\xb6\xd0\xea\x20\x25\xb1\x53\x3f\x3a\xf3\xf2\x72\x7c\x1b\xf9\x8c\xbd\x22\x2f\x38\xba\xbb\x5e\x5e\x11\xfc\x15\x41\x5f\x91\x97\x97\x78\x76\x2e\x9d\x39\xdd\xca\x52\xf4\xdc\x69\xc7\xd6\x0b\x36\xd6\x4d\xdd\xd5\x81\x31\xf6\x7b\x80\xbe\x39\x6f\xc6\x8b\xc7\x2b\xc6\x7d\x45\xe9\xaf\x28\x81\x60\xec\x77\x9c\xfd\x4e\x32\xdf\x50\x02\x27\x39\x3a\x85\xe2\x5b\xa6\x13\x61\xc7\xc7\xfe\xb3\x1d\x47\x33\x22\x6d\xc6\xae\xa5\x2b\x97\x29\x71\x34\xc5\xdc\x42\x89\x18\x2f\x1d\xb8\xcf\x9f\x63\xdd\x3c\x79\x9e\xe4\x22\x3d\x92\x44\x49\xf6\x16\x7a\xe4\x18\x28\xca\x38\x5a\x95\xbb\x48\x83\x22\x29\x02\xbf\x85\x06\x35\xf6\xb3\xf5\x6e\xdf\xe0\x9d\xe6\x5e\x24\x41\x13\x28\x7e\x93\x18\xf4\x8e\x44\x10\xfd\x12\x90\x60\x49\x8c\xba\x85\x04\x33\x9e\x5b\x8a\xae\x6e\x92\x4b\xc1\x62\x34\x7e\x13\x09\xf6\x48\x8a\xa0\x89\x3b\x01\x1d\x86\xa4\x89\xdb\xe8\x6c\x27\x1d\x68\x9a\x0d\x35\xe0\x5a\xf6\x65\x9b\xe2\x50\x0c\xe5\x6e\x41\xcf\x79\xe8\xfd\x8a\xed\x78\xad\xd8\x97\xb1\xe3\x0c\x76\xd3\x54\x63\xa8\x87\x3e\x98\x05\x6f\x0f\x7e\x99\x00\xc5\x31\x37\x69\x07\xc3\xc2\x04\xf6\x9b\xba\x6d\x00\xb8\x4c\x88\xa3\xb9\xdb\x24\xc1\x8f\x26\x3a\xd8\x46\xfb\x8f\x0d\x5f\xa2\x84\xa1\x0c\x45\xde\x34\x23\x18\xe1\x8b\xb3\x2f\x3e\x5c\x9c\x71\x0c\xc3\x19\xfa\x36\x49\xc8\xb1\xaa\xaf\x77\x8f\x50\x58\x73\x63\xac\xea\xd0\xb8\x18\x1a\x31\x8c\xc2\xb0\x9b\x82\x30\x46\xed\x4e\x8e\x76\x15\xfd\xf5\x15\x31\x68\xe6\xb6\x30\x8f\xd1\x63\xdd\xd4\xa0\xe3\x8e\x4f\xcf\x0c\xae\x90\x62\x38\xf6\xb6\x19\x61\x8e\x52\xbd\x77\x38\x03\x2e\x27\x13\x0c\x47\x51\x82\xbc\x89\x08\xbb\x37\x5f\xd5\xf2\x57\xbc\x30\xe2\xec\x18\xfa\x95\xc0\x10\x8c\xfc\x8e\x71\xdf\x49\xee\x1b\x86\x13\x2c\x41\xa5\x50\xec\x42\x3e\xbf\xd8\xcd\x70\x6b\x42\x3f\xe9\x68\x08\x2f\x34\x0a\x99\x41\xa1\x59\xee\xf7\xaa\xfd\xfa\xb0\x98\xaf\xf6\x3a\x95\x7e\x8f\xca\x17\x8a\x3c\x51\x15\x87\x43\xbc\xdc\xac\xd4\x98\x3a\x5f\xe6\xbb\x42\x33\xdf\xa5\xab\x8d\x6c\x5b\xc8\xf7\x06\x75\x31\xaa\xa0\x58\x22\xf8\x96\x08\x4f\xf5\x33\x8d\x21\x4f\x0d\xc9\x3e\x2f\x14\x07\xfd\x16\xde\xad\xd4\xf1\x6e\x9d\xcc\x74\x0b\xc5\x6e\x93\x21\x85\x6e\xa3\x52\x17\xf1\x66\xb1\x47\xf6\x5b\xc5\x7a\xa9\x25\x56\x2a\xc5\x93\x59\x88\x25\x42\x6c\x89\x64\x07\x95\x02\xdd\x12\xc9\xba\x58\x12\x1a\xd9\x9a\x98\xcf\x30\x04\xce\x93\x04\x3d\xa2\x1a\x62\xae\xdd\xaa\x16\xfa\x15\xa6\x90\xa9\x66\x6b\xcd\x6a\x29\x5f\x27\xdb\x8c\x30\xec\xf7\xba\x89\x89\x90\x9e\xba\x5a\x8d\x61\xb1\x54\xc5\xb3\x25\x22\x2f\x36\xc9\xcc\xa0\x9a\xaf\x89\xb9\x6a\xbe\xdc\x15\x1b\x5d\xbc\x38\x24\x46\xb5\x7c\xbb\x58\x17\xbb\x59\xa1\xce\xb7\xfb\x4c\x33\xcb\xd4\x07\x78\xf1\xe5\xde\xee\x9b\xed\x52\xf6\xca\x5c\x07\x1d\x8b\x87\x66\xe3\x6f\x0e\xbc\xdc\x99\xf2\x8a\x90\xaf\x88\x6b\x2f\x61\x02\x0b\x3c\xed\x39\xb9\xdb\xfe\xfc\x9d\x56\xd8\xfa\x64\x1b\x2a\xba\x3b\x06\xc6\x62\x02\xcc\xe5\x9c\xdc\xfa\x4c\xb7\x9d\x7b\x79\x70\x3a\xef\xe9\xb2\x78\x8a\x9e\x8f\xf6\x85\xaf\x08\x96\x54\xcb\xe7\x9a\x2c\xee\x55\xf3\xae\xd1\x22\xa4\x67\x8c\xd9\x06\x4f\x86\xc0\x59\xcc\x63\x6a\xeb\x93\xff\xf9\xe4\x27\xc3\x4f\xdf\x91\x4f\x18\x8a\x7e\x0b\xb6\x1b\x9f\x5e\x91\x4f\x87\x5e\x9e\xed\xcd\x6e\x3b\x77\xf8\xd2\xdd\x2c\xbc\x2f\xa3\x13\x77\x80\xf0\x7b\x7a\xb6\x30\xf7\xce\xe0\xa7\xff\xc6\xb9\x64\x54\x34\x22\x22\x1a\xfe\x8a\x10\xff\x23\xa2\xe1\x7b\xd1\x18\x82\x61\xfe\x47\x67\xcd\x17\xed\x7f\x6c\xd6\x70\x96\x25\x39\x94\xe2\x58\xca\x9f\x35\xd4\x93\xcd\xd0\xe7\xba\x27\x1a\x87\xe3\x04\xc1\xe0\x28\x41\xb3\xd4\x37\x92\x61\x28\x16\x65\xfe\x56\x32\x62\x3b\x19\x31\x14\xdd\xc5\x93\xff\x35\x19\x89\x57\x84\xa5\x58\x8e\x23\x58\x9a\xe5\x3c\x11\x7d\x09\x1d\x17\xd8\xae\x6e\x6a\x63\x09\x18\xc0\x94\x61\x60\xab\x07\x63\x4d\x4c\x81\x3c\xa6\x70\xde\x07\xce\x38\xc1\x4e\x4f\x26\x70\xf5\x77\x78\xb7\x44\x5b\x1f\xf4\x45\x5a\x41\x5d\x9b\x6c\x09\x62\xaf\xc8\x27\x3f\xc9\x8c\x67\x70\xf3\xcb\x6c\xc9\xe3\x8a\xc4\x99\xc0\x5d\x7e\x96\x9e\x03\x0a\x3f\x5d\xcf\x11\x89\x92\xe9\xf9\xce\x35\xf8\x4d\x71\xc9\xe7\x8a\x66\x03\x97\xfd\x69\x7a\xf6\x29\xfc\x74\x3d\x47\x24\x4a\xa6\xe7\x3b\xb7\x21\x3e\x57\x57\x96\x70\xe7\xfa\x43\xef\x5d\xc2\xed\x7a\x44\x77\xc2\x52\xaf\xc8\x0b\x4d\xcb\xac\x44\x10\x14\xa7\x00\x06\xaa\x8a\x42\x63\x2a\xa5\xe2\x12\xc1\xa0\x34\xce\x61\x34\x4e\x91\x32\x4d\x62\x2c\x4d\x10\xb2\x82\x63\x38\x46\x12\x0c\x89\xca\x8c\xac\xa0\x12\x44\x59\x8a\xda\xae\xa9\x25\x15\xe3\x58\x5a\xc6\x25\x49\x55\x24\x5c\x66\x69\x86\x54\x08\x52\xe2\x20\xc4\x08\x94\x91\x54\x95\x94\x51\x19\x03\x92\x84\x52\x38\xe4\x54\x06\xa8\x00\x55\x18\x5a\x86\x32\x81\x4b\x94\xca\xbe\x78\x76\x83\x46\x36\xcf\xf4\x77\x82\xfc\x4e\x70\xd1\x3d\x75\xf0\xf5\x37\x0a\x23\x48\x8e\xba\x7a\x17\xc7\x48\x86\x64\x09\x9a\x64\xd1\x57\x04\xa3\xb7\xf3\x79\x72\xbd\x22\xdc\xf6\x3f\x2c\xf8\x6f\xf7\x25\xb6\xff\x63\xbb\xa7\xe0\x79\x9e\xcf\x32\xec\x68\xe2\x54\x98\xb4\x54\x2d\x8d\x50\x14\x5d\x42\xb2\x93\x61\xd2\xe8\xaa\x56\xb0\x9d\x7c\x75\xc1\xd1\x29\x0d\xc3\x3f\x9c\x9a\x3d\x20\xdf\xac\xb5\x68\xaf\xa7\x98\x99\x67\x53\xdd\x52\x89\xee\x8b\xb3\xdc\x87\x31\x6d\xb5\xa0\x4d\xf4\x96\xad\xd9\x47\xbb\x3c\xe2\x9b\x4d\x92\xe9\x34\xb7\xa8\xf9\x41\xa3\x57\x2b\xae\xf8\xfd\x05\x95\x6a\x7e\xce\x65\xb5\x41\x8f\xe1\xf8\xe5\x48\xe4\x80\x96\x17\xd7\xf6\x28\xd7\xd4\x7a\x84\xa4\x1a\x05\xfe\xad\xc1\xa4\xd6\x25\x75\x94\xed\xf4\x37\x99\x85\xd2\xee\x92\x05\x76\xb8\x70\x15\xa5\x58\x59\x19\xef\x0d\x27\x23\x0f\xfb\x6b\xa5\x34\xdb\xb4\xcb\xda\x54\xa1\x36\xab\x5a\x5e\xdb\x62\xee\x8a\x64\x15\x7c\x2c\xf0\xe6\x81\x18\x5f\x17\xf8\xe3\x2b\xb3\xfd\x6f\xc4\x0f\x30\xb2\xc9\xf3\x39\xb4\xcc\xff\xdd\x2e\xdf\xa8\xb0\x57\xef\xf4\x33\xc6\xfb\xa3\x0e\x41\x3e\xc7\x98\x5f\x00\x4e\x72\xb8\xc2\x71\x0c\x90\x31\x82\x50\x39\x14\x23\xa0\x2a\xe3\x14\xab\x4a\x94\x24\x53\x84\x04\x55\x94\x63\x25\x95\xe3\x58\x45\xa6\x58\x59\xa2\x50\x55\xa6\x55\x96\x95\x18\x15\xb0\xde\xe1\x0c\xe1\x47\xba\x53\xdb\x66\x63\x4d\x9e\x40\x69\x22\xde\x21\x76\x77\xfd\x35\x32\xcd\x61\x2c\x79\xc1\x21\xd8\x84\x0e\x41\x97\xcb\xd5\x91\x41\xaf\x3a\x0d\x8a\xef\x30\x6c\x79\x98\xc2\xde\xf3\xf5\x14\x5b\xd6\xd3\xf3\x21\x91\x9f\x56\xbb\x8d\xf5\xbb\x5e\x55\x69\x8d\xef\x1a\xd5\xa5\x8d\xe9\x83\x42\x71\x3e\xec\x52\xed\x79\xab\xa8\xa8\xf9\x26\xb7\xa9\xe7\xde\x38\x23\x5f\xdb\xe4\xdf\x48\x94\x2e\x3b\x12\x33\xf0\xbd\xc0\x73\x08\xed\x30\xa1\x69\xfb\xad\x33\x2d\x55\xfb\x9d\x77\x45\x48\xe1\xa8\xe4\x7e\x28\x00\x70\x84\xd0\x70\xbb\xb3\x3c\xd9\x6f\xd7\xd9\x4a\xa9\xc5\x6f\xb8\x52\x29\xcb\x96\x71\xbc\xe7\x00\x82\x5b\xb6\x5d\x97\x20\x73\x5c\xd3\xaa\x4d\x3b\x54\x9a\xd4\xba\x52\x1e\xb8\xe9\x92\xd1\x07\xa2\xa6\x18\x54\xd1\xf3\x81\xe6\x19\x87\xa8\x69\x11\x7b\xfa\x5f\x70\x08\xc2\xf3\x89\x1b\x1c\x82\x78\x8e\x31\xbf\x30\x14\x4a\xb3\x32\x90\x71\x15\x83\x34\x40\x25\x5c\x06\x2a\xc0\x15\x4a\x91\x24\x59\x96\x29\x19\xe3\x68\x06\x63\x54\x5a\x55\x55\x96\xe1\x38\x59\x26\x80\x44\x03\x9a\xa3\x24\x94\x91\x38\x0c\xf8\xa7\x95\xf8\x59\xdb\x66\x62\x4d\x9e\xc4\x69\x3c\xde\x5d\xb6\x77\xb7\xd9\x25\xd8\x59\x61\x2c\xcb\x5e\x70\x08\x2a\xa1\x43\x10\xdd\xc2\xb4\xb2\x7a\x2f\xce\xad\x6a\xb5\x92\xd2\x31\x65\xc9\x7e\xe4\x57\xa3\xd1\x5a\xc5\xd3\xe9\x09\x65\xd6\xea\x36\x98\x1b\x52\x86\x99\x01\xe9\xe3\x1d\x6d\x16\x1a\xb3\xc2\xa0\x2d\xe3\xb2\x96\xc9\xe6\x16\x96\xae\x0b\x85\x16\xa9\xe2\x73\x1b\x5d\x64\xb8\x02\x60\x86\x5a\x6a\x20\x95\xbc\x09\xf4\x1c\x22\x64\xa3\xed\x56\xb5\xdb\x2d\x3a\x99\x74\xfa\xa3\xe8\x4c\x8b\xbc\x85\x8d\xf8\x6e\x66\x66\xb1\x6b\xb2\xdd\x1a\x88\x1b\xa0\xba\xa3\xb7\x9e\x99\xa7\x6a\xc5\xa9\x3b\xb2\x8c\xb2\xba\x06\x6a\x1d\xac\xd2\x1d\x82\xe8\x76\x57\xc6\x47\x4d\xa9\xd7\x2b\x03\x0d\x8a\xb9\x0c\xd6\x81\x6f\x42\x8e\xb3\x86\x1e\xfe\xda\x19\x87\x28\xa2\xe7\x8c\xea\x6f\xee\x10\xf8\xad\x0e\x81\x3f\xc7\x98\x5f\x68\x42\xe1\x58\x95\x22\x68\x08\x69\x56\xc1\x24\x9c\x91\x28\x89\xe5\x54\x9c\x00\x2a\x45\x60\x98\xc4\x50\x34\x07\x70\x52\x05\x2a\x46\xa2\x04\x50\x50\x89\xc2\x25\x9a\x20\xb6\x38\x20\xc7\x5d\xca\x10\x74\xac\xc9\x53\x24\x43\xc6\x2f\xa8\x28\x92\xd9\x26\x08\x7f\x3f\x47\x52\x1c\x7e\xc1\x1d\x88\x84\xee\x80\x37\x46\x53\x4c\x5c\x52\x16\x2a\x95\x99\x3e\x69\x6e\xea\xef\xdd\x75\x81\xe8\x2d\xac\x59\xea\x3d\xcf\xd7\xdd\x2c\x56\xc1\x6b\x4c\x86\xa1\x47\xe9\x1a\x55\x6a\x67\xdf\x5a\x44\x6a\xf1\x91\xef\x57\x9a\xf5\x0f\x41\xd3\x35\xc3\x25\xcb\x6d\x1e\xe6\x98\xa1\x6d\x39\x02\xa8\xa6\xa9\x52\xd5\x5f\xab\x78\xee\xe0\xfd\x55\xda\xff\xc7\x7b\x16\xeb\x1c\x3e\xaf\xf8\x46\x73\xe6\x4f\x37\xda\x6b\xb2\xcb\xf9\xa2\x56\x4f\xb5\xca\xe9\xec\x47\x09\xed\x8d\xca\x30\x45\xc1\xc9\x2a\x3d\x23\x3b\xa4\x32\x59\x35\x9a\xab\x95\xd0\x63\x98\xb9\x39\x02\xf4\xa4\x57\xad\x76\x33\x42\x11\x2c\xd3\x70\x5d\xa6\x67\x62\xad\xf4\xf1\xd1\xe8\xbd\x63\x83\x3a\x07\x57\x8b\xe2\x7a\xd0\xe3\xf3\x0d\x2f\x4b\x94\xce\xb8\x8b\xe0\x9c\x33\xb9\xbf\xb9\xbb\xdc\x9c\x3f\xb0\xe7\x98\xba\xd7\xc0\xb6\xdb\x23\x60\x1c\x83\x7e\x45\xb1\xaf\x28\x86\xa0\xe8\x77\xef\x5f\xac\x49\xd3\x2c\x43\xc5\xe7\x87\xed\xdd\x6d\x7e\x20\x71\x8e\xe4\x68\x06\xe7\xe8\x0b\x16\x7f\xde\xde\x7d\x96\xfe\xea\xa9\x89\xbf\x32\x83\x8a\x4e\x6e\xd2\x9b\x76\x25\xc3\xe4\xcc\x1c\x57\xc4\xd1\xf5\x34\x93\x72\x50\xcd\x75\x56\xa5\xd5\x07\x36\x50\xda\xfd\x21\xc8\x94\x81\xbf\x37\x10\xce\x98\xf2\xf9\x6b\x67\xca\x3c\x9f\x99\xfd\x02\x41\x9e\x7a\xed\x37\x9c\x81\x29\x5f\xd9\x83\x27\x78\x50\xec\xde\x2d\x79\x4c\x87\x5d\xc8\x7f\xfc\x0d\x2c\x89\x52\x5e\xb9\x3e\xc6\xef\xae\xa0\xc1\x23\x68\xf0\xfb\xd0\x44\xcf\x45\x88\xfb\xd0\x90\xd1\x93\xa3\xfb\xd0\x50\x91\x7a\xff\x9d\xdc\xd0\xd1\x63\x83\xfb\xd0\x30\x3b\x34\x2c\x46\x32\xc4\xdd\xdc\xb0\x91\x4a\xff\x9d\xdc\x70\xd1\x62\xfa\x7d\x68\x30\xf4\xb8\xbc\x4b\xde\x89\x06\x8b\x54\x89\xef\x44\x83\x1f\x17\x41\xef\xe5\x86\x88\x54\x87\xef\x44\x13\x29\x4d\xde\xcb\x0d\x15\xa9\x70\x3e\xe7\xd9\xcd\xa7\x9c\x3b\x5f\x6e\xdd\x7d\x45\xb6\xbc\x27\x3b\x88\x8e\x79\x84\xf1\xe1\xa8\x19\x0a\x71\x47\xf1\x6d\xff\x81\xf6\x4a\x40\x98\x57\xc2\x75\xad\x87\xaa\xb5\xaf\xc8\x27\xd5\xb6\xe6\x0f\x55\xd6\x5f\x91\x50\xe5\x1a\xff\xdd\x4e\x23\x7f\x42\xdf\xce\x99\x99\x3a\x8e\xfd\xfb\x0f\xe8\xe9\x4c\x3d\xa0\xe5\xfd\x4c\xdd\xab\x8d\xa3\x99\xfa\xed\xce\x8d\x7f\x42\x5f\x52\xfc\x4c\x05\x9d\x02\xfb\x0f\x3f\xc9\xa7\xfe\xff\x4c\x3d\x3a\x53\xc1\xd2\xe3\xf0\x01\xf7\xa6\xc9\x3f\x31\xf3\xda\x6d\xb7\xc2\xa0\xdf\xa8\x90\x82\xf6\x9a\x23\x8f\x35\xe7\x3f\x21\xbb\x95\xfe\x3f\x9f\x94\x4f\xdf\x11\xfc\x15\xf9\x64\x7e\xfa\x8e\x60\xff\x7d\x45\x3e\xed\x7a\x51\x3f\x7d\xdf\x2e\xa2\x3f\x49\xcb\x8d\x6e\x6a\xe3\xb3\xca\x3e\xba\x77\x49\xe7\x0e\x34\x8c\x53\xc8\xe0\xfc\x2e\x8a\xe8\xef\x34\x35\x47\x8d\x1b\xfb\x0f\xa4\x37\x35\x74\xb2\x06\x07\xd7\x5e\x3a\x2e\x84\x8f\xba\x89\x87\xc6\xb2\x1f\xf5\xd8\xdf\xc3\xa9\x9e\xdc\xfb\x19\x3b\x73\xbb\x15\xf4\xfe\x03\xfa\x17\xcf\xdc\x23\x6b\x8f\xdf\x62\xe6\x7e\xfe\x12\x23\xbc\xd9\xd8\xff\xcd\x86\x1a\x14\xd4\xa5\xa9\x04\xb2\xdc\xd9\x79\xeb\xe9\xc5\xef\x7f\x7d\x74\x72\x13\x74\x4b\x3c\xd8\x22\x7c\x8b\xda\x82\x5d\xd1\xfe\x6f\xf2\xa7\xaa\xed\x01\x63\xfe\xcd\xd4\xe6\x6f\xdf\xf6\x7f\xa3\x3f\x55\x6d\x0f\x44\xef\x9f\xaf\xb6\x2b\x7b\xc1\x33\xef\x5e\x49\xb2\x0f\xbc\x8e\xf5\xfa\x6b\x28\xee\xdd\x6f\xc6\x3e\x20\x7a\xb6\x4e\x47\xc7\xd7\x14\xae\x22\xc2\x23\x88\xe2\xea\x3f\x57\x11\x11\x91\xbd\x55\x5c\xcd\xe5\x2a\x22\x32\xba\x49\xbb\x17\x11\x15\xd9\x43\xdc\xcd\x11\x1d\x41\x74\xb7\x8e\x98\xc8\x5a\xf9\x6e\x8e\xd8\xc8\xca\xee\x6e\x8e\xb8\xe8\x42\xe3\x5e\x44\x47\x95\x3b\x36\xbe\x3a\x75\x1d\x11\x76\x8c\xe8\x6e\x1d\x1d\x55\xef\xc8\x47\x38\x22\x22\xd9\xe9\x6e\x44\xe4\x71\xbc\xbe\x9f\x23\xea\x18\x51\x7c\x0d\xef\xd6\xd7\xa8\x3c\xa3\x8a\x77\xed\xb9\xf4\x5b\xea\x78\xb1\x2f\x4d\x79\x42\x64\x0d\x3d\xfd\x06\x00\x46\xb3\x2a\x86\x63\x38\x29\x31\x32\xc6\xd1\x32\x0a\x14\x00\x21\x23\x33\x04\xa0\x49\x85\x60\xd4\xed\xf4\xb3\x32\x90\x25\x8a\x03\x1c\xa6\xaa\x04\xcb\xd1\x38\xcd\x92\x14\x64\x64\xf5\xe5\x15\xf1\xdb\x7e\xef\x5f\x6c\x86\xce\xc1\xc9\xdd\xc9\x5f\x7c\xaf\x21\x4d\x5c\x68\x44\xf4\x6e\x1e\x45\x75\xff\xc0\xb0\x40\x59\x65\xb7\xa7\x98\xc3\x7a\x4f\x19\xbd\xb9\x83\x45\xa7\x98\x71\x25\x79\x88\xce\xb3\x73\x55\xce\x94\x2a\x82\xd6\x37\x8d\xf7\x7c\x69\x02\x78\xef\xc0\x8d\xdf\x1d\x6b\x67\x23\xe7\x59\x99\xc3\x9f\xfe\xd9\x78\x1d\xcf\xa6\xf9\x3a\x49\x0d\x33\x39\xc2\x2d\xf6\xf2\x75\xac\x45\xf0\x68\x0d\xce\x1a\x6c\xb9\x45\x9b\x22\xc6\x73\xb0\xaf\x2b\x9b\x92\xdb\xf5\xc6\xf7\x7a\x62\xd0\x00\x98\x5d\x5a\x84\xe5\x92\xd4\x5b\xb6\x21\xac\x17\xcd\x34\x61\x15\xc5\xd4\x07\xc6\xb4\x36\xba\x83\x19\x6a\x2d\x3f\x9c\x37\xfb\x9a\xbd\x6c\xa7\x3a\x3e\x69\x42\x1c\x85\x0f\x0b\xf3\x7b\x7e\x9b\x15\xb9\xd0\xe6\xea\x4e\xcf\xec\x15\xb3\xbd\x52\x11\x25\xb3\xdc\xa8\xf2\xf1\x51\x19\x66\x5a\x4a\x76\xbe\x49\x95\x57\xf3\x0f\x43\x61\x9a\x32\x5f\xad\xaf\x47\x5d\x99\xd7\x66\xcb\x82\x6a\xb5\x95\xf7\xc1\xa2\x48\xb0\x73\xf1\xdd\x7e\x6b\xea\xa0\xe6\xb4\xc5\x79\xa7\xdc\x1f\xb6\x3e\x8a\xef\x9a\xf5\xe3\x25\x7c\xe0\x5a\xe8\xa4\xb7\x97\xf7\xf7\x81\x8d\x8c\xf7\xa5\xdf\xc1\x75\x80\x6f\xee\xf5\x97\xf3\x80\x42\x6c\x4b\x73\x6d\x8e\xf5\x70\x45\xa3\x7a\xd8\xfc\x0d\x83\x46\x4d\x2e\x60\xee\x7a\xda\x1e\x56\x46\xdc\x4a\xd0\xac\x76\x06\xc0\x3e\xdb\xd5\xf3\x96\xa7\xa4\x1e\xff\x3e\xad\x1f\xe6\x23\x13\xa1\x7f\x34\x17\x67\xae\xcc\x93\xe9\x67\x6f\xa4\xcf\xef\x75\xe2\xe9\xa8\xb6\xd7\x49\xc0\xde\x12\x64\xa5\xde\x60\x84\xe7\x8c\x41\x1f\xd8\x3d\xba\xbb\x5e\x49\x7d\xa2\x20\x96\xb5\x85\x49\xf0\xed\xec\xa4\x94\x5f\x50\xd2\xba\x5d\xea\x7b\xe3\xcb\xdd\x6c\xaa\x2e\x1f\xf0\x09\xfc\xb1\x4d\x06\x57\xec\x99\xb2\x07\x9f\x7f\x8c\x7e\x8d\xbc\x8f\xfe\x0f\xcf\x3e\xfe\xb3\x58\x8d\xaa\x28\xbd\xee\x2b\x5d\xb9\xdc\xd5\xd4\x8e\x56\xc5\x66\x76\xa3\xb6\xd0\xf2\x79\xb4\x22\x55\x49\x33\x2b\xd5\x7b\x84\x9b\x59\xf1\x0e\x93\x37\x5a\xab\x6c\xb6\x4d\x8e\x52\x93\x32\xce\xc1\x99\xaa\x6e\x86\x78\x6a\xb9\xc8\x96\xad\xcd\xba\x84\x8f\x6a\xc6\x68\x52\xac\xc1\x54\x56\xfb\xf1\xc3\x5b\x4c\x7b\x2f\xe7\xd9\x75\x31\xf8\xff\x7b\x2f\xbb\xf7\xe2\xca\xf5\xa4\x13\x7e\x1f\x03\x0d\x09\x1c\xa3\x51\x92\x52\x28\x86\x93\x20\x20\x51\x15\x57\x08\x0a\xa0\x1c\x89\xd2\x0a\x24\x00\xcb\x91\x50\x96\x28\x09\x32\xa8\x22\x29\x80\x82\x32\x27\xa3\x24\xce\x00\x54\xa1\x00\xe6\x3f\xa2\x89\x3d\x52\xf9\x0a\x05\x46\xe2\x5a\x60\x24\x50\x86\xc3\x2e\x74\xa4\xfa\x77\x8f\x96\x97\xbe\x59\x56\xe8\x29\xd4\x89\xe9\xdc\x2a\xb1\x9d\x82\x91\x4b\x43\x4d\x26\x98\xc6\xc0\x2d\x56\x2a\x1f\xfd\x1e\xbb\xea\xe9\xa3\x0c\xc8\x2e\xa9\x2a\xe5\xd9\x6e\x28\x34\x46\xa7\xfd\x24\x34\xde\xe8\x6a\x0f\x84\x46\x9e\x99\x3b\x56\x88\x95\xc2\x9e\xdf\xa6\x60\x56\x72\x52\x6e\xf8\x5e\x99\x95\xa7\xc3\x0a\x0a\xec\xf7\x49\xde\x30\x53\x85\x0a\x9a\x62\xf8\x0d\xad\xa1\x20\x85\x4d\xa6\xad\x16\x34\x04\x1e\x92\xab\xf9\x14\xbe\x89\x72\x4b\xc3\xe7\x64\xd6\x64\x5c\x92\x9f\x96\x3f\x78\x27\xd7\x2c\xa1\xfa\x00\x4c\x0a\x92\x55\x6e\x94\x44\x7e\x15\x09\x8d\xcd\x73\xa6\x1f\xd6\x4f\x7c\x68\x0c\x01\xd9\x6f\x22\x5d\x85\x75\xa0\x4d\xd7\x35\xd0\x6d\x70\x74\xe6\x43\x75\x38\x88\xca\x96\x2d\x8e\x06\x1f\x99\x7e\x79\x96\xb7\x2a\xcc\xec\x7d\xe6\xb5\xed\x6e\x43\x93\x8e\x1d\xe6\x23\xe6\xba\x12\x1a\x9f\x47\xff\x34\x0c\x24\xa0\x7f\x12\x16\xfd\x3e\x97\x1b\xc3\x52\xbe\xd7\x45\x03\xc5\xdf\x68\xcf\x01\x2b\xe9\xfd\xb5\x3a\xc7\xb3\x70\xf8\xf2\x57\xf3\x97\x5b\x82\x8d\x76\x89\xbf\x1f\x3f\xce\xa4\x98\xd0\xb2\xe5\x56\x5f\xda\x86\xf8\x80\xd7\x68\x63\x76\xf8\xba\x9c\x62\x84\xc7\xe8\x87\x53\xdc\x2d\xf4\x83\x14\xd3\x96\x2d\xd1\x11\x75\xf6\xad\x39\x17\x35\xbb\xf5\xb6\x4c\x09\xfd\xbe\x4a\x0e\xed\x0e\xe3\xe4\xaa\x6f\xb9\x96\xcd\xf4\x0b\x62\x3e\x4f\x77\x9b\x19\x66\x9a\x05\x22\x6d\x61\xeb\x42\x0e\x48\x5a\x45\x5d\x12\x5a\xb6\x66\xd6\xb2\x2b\x91\x9f\xb6\xcb\xca\x9b\x30\x5a\x6a\x33\x56\x43\x73\x7c\x7c\x8a\xd9\xae\xe8\x6f\xcf\x30\x98\x4c\x52\x24\x4d\xa0\x38\xcd\x00\xc0\x32\x34\x03\x65\x56\x66\x21\x81\x92\x14\x2a\x43\x40\x4b\x80\xa6\x51\x8c\xa4\x20\x27\x73\x38\x09\x24\x89\xa1\x14\x06\xd0\x34\xcd\x49\xb4\x8c\xb3\xc0\xcf\x30\xf8\x93\x32\xcc\xd5\xa5\x37\x81\x72\xf1\x0d\xad\xc1\xcd\xa3\x62\xc1\xa3\xf9\xe5\x37\x5a\x7a\x5f\xc8\x2f\xb9\x45\x69\xc6\xbd\x11\xa8\xfb\xa1\x36\x67\x8b\xe6\x32\xbb\xca\x33\x3a\x68\x10\x92\x48\xe7\x5a\xd9\x59\x6a\xd5\x25\x7a\x2c\xcd\xb8\x6f\xb3\x6a\xb3\x47\x94\x14\x92\xc2\xfb\x4e\xa5\x3b\x5c\x34\x9a\xb6\xc8\xc2\x29\xad\xce\xd0\xe5\x1a\xc2\x79\x46\x74\x3e\x30\x91\xea\xd5\x1c\x4e\x1b\xfe\x8e\xf9\xe5\xae\xf8\xfe\x44\xfa\x51\x7b\x48\x44\xff\x7c\x7e\xe1\x99\x61\x95\xe5\x99\xa9\xa1\x09\x0d\x88\x2a\xdd\x2e\xd3\x2b\xca\xb9\xe6\x9a\x6e\xa6\x57\x46\xf1\x4d\x26\xba\x39\x8c\x02\x65\xa2\xa4\x63\x1e\xfc\xaf\xce\x2f\xbf\x90\xbf\xfb\xf2\xcb\x5f\x14\xdf\xf9\x27\xe5\x97\xf0\x16\xe6\x16\xfa\x41\x7e\xa9\xcf\xf4\x0e\x6e\xab\x6d\x42\xe4\xb2\x6d\x23\x4b\x56\xf9\xc1\xb2\x6c\xa5\x15\x87\xb0\x44\xa1\xd2\x61\x32\x1d\x65\xf0\x61\x2f\xf1\xb7\xa6\x9b\x19\xc8\x13\x62\x6a\x8e\xc0\x6a\xd1\xd2\x67\x5c\xd6\x21\xd6\x74\x63\x91\xea\xb4\x99\x3c\x45\x0f\x05\xfc\xa3\xd1\x25\x8c\xee\xe6\x03\xcf\x5c\xd8\xc2\xdc\x97\x5f\x38\x28\x41\xa8\x40\x49\xa6\x70\x05\x10\x18\xab\xd0\x92\x42\x50\x24\x4d\x92\x04\x47\x70\x0c\xaa\x28\x0c\x85\xd2\x92\xc4\x4a\x2a\x60\x69\x95\x26\x64\x96\x93\x29\x9a\x61\x65\x94\x91\x29\xef\xe9\x05\xd2\x6f\x69\x78\x46\x7e\xa1\xae\xe6\x17\x0c\x63\x2e\x3c\x71\x17\xdc\x3d\xaa\x22\x3f\x9a\x61\x72\x91\xe9\x0d\x05\xab\x90\xf3\xf6\x7a\x9d\x56\xf0\xe7\x8d\x11\x2c\x94\x36\x3c\x83\x3d\x1f\xc1\xc0\x0e\x3e\xc3\xbf\x3b\x4b\x4a\x4d\xbd\x33\x3d\xbb\x9c\x2b\x56\x96\x38\xdb\x5f\x09\xf8\xc7\x2a\xd7\xa4\x8c\x5a\xdf\xcc\x32\x79\x4b\x6b\x1b\x9d\xb4\x38\x5d\x6b\xc5\x75\x8e\x99\xcd\x46\xc5\x5a\x1f\x37\x66\xd3\xe1\x3a\xcd\xb5\x49\xca\x29\x95\x0b\xd9\x3a\xf9\x3e\xa5\x53\x5a\xe9\x7d\x5d\xb4\x57\xb4\x91\x09\x7b\x30\x1f\x9b\x4d\xa2\xba\xe0\xef\xd1\x6d\x48\xd6\x9f\xae\xbb\x5f\x90\xf1\xee\xca\x38\x4f\xa4\x7f\x7e\x4e\xae\x65\x3c\x0f\xd5\x33\xa2\x74\xd5\x5b\x36\x85\xa2\xfe\xe9\xf5\x53\xa3\xf4\x09\xfd\x6b\x85\xa6\x93\xfb\x91\x65\x5b\x74\xa0\x3f\xbf\x7f\x07\x1b\x7f\x5a\xe6\xbd\x37\xf3\xf1\x3f\x61\x4e\x6f\xa1\x1f\x64\xde\x9f\x15\x20\x9f\x9b\x79\x29\x0c\x03\x98\x8a\x53\x10\x53\x29\x08\x70\x45\x46\x25\x14\xe3\x70\x02\x53\x21\xc3\xe1\x0c\xa1\xca\x32\xce\x90\x0c\x2e\xe3\x04\x2d\x53\x1c\x8b\xaa\x32\xa7\xc8\x8a\x42\x2b\x1c\x46\x41\x3c\x78\x28\x1d\x7b\xa4\xf7\xea\x96\xda\x21\x89\xb3\x24\x7e\xe1\xe1\x5d\xff\xee\xd1\xb1\xab\x6f\x95\x39\x57\x7b\x5f\xe5\x96\xf5\x3e\xdf\xe4\x98\x16\xd6\xea\xb8\x5d\x65\x25\xe6\x8a\x8b\x5c\x3a\xdb\x85\x8b\x0f\xa5\xd9\x18\x18\x96\x29\xeb\xd5\x1e\x9f\xb8\x76\x38\xe4\xef\xde\xab\x15\x0f\xcb\xd8\x90\xd5\xee\xe9\x37\x8b\x02\xb6\x48\x51\x6e\xa6\xf1\xc6\x2e\xba\x56\x81\x1f\xbc\xd5\xb9\x36\x03\x56\x54\x9d\x93\x4c\x96\x69\x6d\x1a\x2b\x74\x80\x29\x15\x54\x61\x26\xed\x16\xcd\x2c\x0b\xe9\xd9\x84\xdf\x64\x09\x8b\xeb\xd8\x8d\x0e\xfd\xc1\x29\xa3\xd9\x64\x3e\x48\x8b\xfc\x8c\x35\xd7\x73\x6e\x62\x0c\x9b\x42\x92\xec\x5a\x08\x9b\x72\x5c\xe6\xe2\x43\xef\xa4\xb8\x71\x6f\xeb\x1d\x53\x98\x07\xfd\xc6\x5c\x49\x32\xc7\x53\xe8\xdf\x57\x0b\x3c\x64\xae\x70\xe6\xbb\x71\x2f\x74\xf6\x88\xe4\xf4\xba\x1c\xe5\x9e\x4d\xff\x86\x23\x1a\x9e\xff\x7d\xf7\xaa\xd7\x6a\x8d\xf7\xe8\xea\xe1\x5a\xe3\x13\xe7\xea\x16\xfa\x41\x46\x92\x3b\x7d\x93\x99\xa3\x42\xca\xde\x18\x6d\x6d\x98\x81\x16\x83\x55\x5d\x3b\x37\x63\xb0\xa5\xfa\xe1\x16\x4b\xe9\x5c\x4b\xed\xa1\x76\x8b\x58\xe6\xcb\x45\x7b\x49\x4a\xa9\xb6\x90\x2b\x55\xe1\x14\xab\x3b\x5c\xc3\x6e\x60\xd8\xbc\x5d\x18\xa9\x2c\x9a\xed\x6c\xd4\x82\x84\x17\x7a\x13\xbe\xf9\xec\x8c\x04\x70\x05\x48\x2a\x09\x39\x05\xa3\x49\x9c\xc1\x71\x1a\xc5\x71\x06\x87\x18\xc3\x02\x82\x91\x39\x86\x90\x39\x8c\x61\x24\x8e\x62\x14\xc0\xd2\x18\x87\x03\x8e\x93\x08\xc8\xa9\x04\xe0\x00\x20\xfd\x8c\x84\x3f\xe9\x98\xff\x7a\x46\x22\x30\x34\xfe\x34\x6b\x77\xf7\xa8\x7f\xe7\xd1\x83\xfe\x5f\x98\x91\x42\x07\xf7\x45\xbd\xba\x10\xc4\x3e\x43\x4c\xe5\x0e\xd6\x56\x66\x6a\x1a\x82\xf5\xb4\x5d\x2d\x74\x9a\x59\xad\x64\x42\xd4\x25\x48\x50\x82\x1b\x65\xb2\x30\x7a\x6e\x9f\x5b\xe7\x9a\xf4\x84\xef\x10\x6c\x81\x9b\xe9\x76\xa5\xd2\x2a\x6d\xac\xca\x72\x66\x75\x45\x71\xc2\xaf\x94\xfe\x26\xdd\x98\x36\xe5\x9f\x92\x91\xee\x39\x38\x7f\x66\x46\x7a\x90\xfe\x13\x33\xd2\x53\x0e\xed\x4f\xaf\xc4\x51\xee\x57\x37\x0d\xf0\xfc\xef\x7b\x3a\x77\x2d\x23\xdd\xa3\xab\x67\x66\xa4\x47\xe7\xea\x16\xfa\x41\x46\x82\xa5\xe5\xac\x89\x49\xef\x50\x5c\x37\x7a\x65\xbc\x95\xe6\x28\xbb\x20\x96\x9c\x91\xc8\x57\x78\x5d\x61\xda\x84\x3a\xb1\x26\x4c\x19\x2f\xcc\x7b\x7d\x4c\x22\x04\x31\xf7\x26\x64\x1a\xea\x4a\xc2\xdb\x15\xc7\x5a\x08\xd3\x8a\xf6\x46\xb7\x27\x4d\x14\x17\x72\x19\x4c\xaa\xb2\x29\x31\xb3\x7a\x76\x46\x92\x70\x80\xe3\x8c\x4c\x70\x32\x4d\x02\x92\x54\x65\x06\x48\x0a\x29\x73\x34\x8b\x71\x24\x45\xab\x28\xc1\x71\x1c\x4a\x2b\x18\x2e\x93\x0c\xad\x30\xa8\x44\xa2\xb8\xf7\xa2\x30\x8e\x56\x68\x40\xf8\xaf\x94\xc1\x1e\x69\xa0\xf6\x1f\xae\xbb\x98\x88\x28\x92\x43\xe3\x1b\xce\x76\x77\xc3\x5d\x9b\x41\x1e\xaa\xb2\xc5\xe6\x7b\x73\x26\x55\xf0\x22\x4f\xf4\x7b\xd3\x96\x5d\x99\x4f\x07\x28\xaa\x16\x58\xa7\x5a\xda\x2e\x18\x5a\xab\x72\x3f\xcd\x0f\x08\x7e\x9f\x87\x7c\x83\x89\x4c\xea\x89\x9f\xde\x51\x53\x0a\xbf\x35\x22\xd3\x7b\x5f\xe5\xb9\xed\x2d\x21\xe7\x12\x95\xd5\x1c\x34\x96\x0d\x25\xdf\xee\xae\x15\x3e\x0f\x25\xba\xde\x84\xee\xa6\x59\x29\xf5\xc1\x87\x21\xb5\x6b\xb5\xc9\xbc\x58\x11\xab\x39\xd2\x79\x9b\x08\x6f\xdd\x91\xdc\x6c\xa0\x46\x6a\x90\xae\x2f\x52\x96\xd3\x9f\x8b\x74\x2a\xdf\x1d\x4a\xce\x07\x43\x35\xf1\x69\x81\x7c\xaf\xd5\x12\xe4\x9e\x23\xa3\x3d\xce\x3d\x21\x99\x0f\xb1\x37\xec\xcf\x7a\x3a\x83\x56\xd1\x72\x61\xe3\x4e\x56\x22\x66\x0c\x51\xb0\x59\x58\x18\x27\x16\xd7\xef\xd5\xec\xa6\x4e\xb9\x19\x41\xce\xfa\x32\x12\x9a\x6b\xd7\xcd\x61\x9a\xe9\x1e\xc6\xdf\x55\xc7\x7a\x80\x7e\xbe\xd3\xcf\xd8\x0f\xd0\xe7\xf9\xbf\xee\x34\xff\x6c\x6c\xcd\xdc\xaf\x8b\xba\x39\xba\x28\xe6\x35\x5d\x3c\x3a\x17\x5b\x5b\x48\xc9\x11\x7c\x37\xe9\xe2\x3f\x8c\xb2\x71\xca\xf3\x29\x33\x25\x5a\x5d\xa3\x36\x68\x66\x06\xf3\xd4\x74\x56\xb4\xe5\x59\x56\xcf\xcf\x1d\xaa\x8f\x4e\x73\xa5\xd1\x64\x33\x6d\xaf\x52\xd5\x8a\xd5\xaa\x18\x85\x81\x90\xe3\xca\xaa\x91\xfe\x78\x53\xdf\xaa\xf9\xc5\x14\xbe\x4f\x7a\x85\x02\x53\x4b\xa5\xba\xa2\xb5\x5e\x56\x3f\x9e\xdf\x59\x40\x2a\x04\x09\x49\x12\xc5\x28\x8a\x50\x69\x12\xd0\x9c\x0c\x68\x82\xc5\x49\x8a\x63\x55\x52\xe1\x54\x14\xe0\x9c\x84\xaa\x90\x90\x21\xc1\xca\x24\x24\x15\x06\x25\x51\x05\xa8\x2a\x86\xab\xaa\x7a\x78\x07\xdc\x03\xb1\x15\xbf\x1a\x5b\x29\xec\xc2\x2b\x16\x77\x77\xc3\xfd\xe7\x8f\xc6\xd6\x0b\x1d\x05\xfe\x75\xc7\x1a\x33\x26\xb6\x66\x95\x9c\x5b\xc0\xd7\x73\xad\x99\xae\xf1\xee\xdb\x9b\xaa\x6a\x99\x5a\xaa\xab\x8e\x7a\xc5\x0f\xce\xca\xad\xdd\x8f\xbc\xa8\x50\xec\x2c\x3d\xc7\x25\xa3\x51\x30\x4b\x92\xb4\x84\x60\xee\x2e\x9a\xef\x59\x8e\xb4\x5b\x13\xb0\x4a\x17\x9d\x8c\xa0\x02\xc0\xbd\x4d\x47\x2b\x66\xb8\xe8\xcd\x0a\xbf\x57\x6c\x7d\x34\xb6\x3d\xe8\xcf\x6f\x4c\xba\x93\x93\x9e\x18\x5b\x7f\xe5\x5a\xf1\xea\xba\xf5\x17\xc6\x36\xfe\x49\xb1\x95\x25\x0f\xe3\x63\xf6\x7c\x97\x62\xab\xd9\x64\x5a\xae\x33\xb2\x84\xc6\x07\x5f\x05\x6f\x26\x41\xf2\x9d\x86\x51\xc4\x7b\x2d\x36\x0d\x78\x56\x92\xd7\x9d\x01\x54\xcb\x0d\xca\x9d\x53\x9d\xf5\x62\x53\xc0\x19\x73\xbe\xb0\x41\xb7\xba\x7a\x87\x15\x74\xd8\x77\x1a\x6b\x86\x6f\x15\xf1\xf9\x3b\xb0\x70\xb9\x8e\x57\x7a\xa3\xe7\x9f\xaa\x33\x38\xc5\x50\xb4\x84\xa9\x92\xa2\xb2\x84\x84\xb2\x18\xce\xa8\x04\x4b\x41\x15\x2a\x2a\xca\xa1\x9c\x2c\xb3\x38\x2a\xd1\xb2\x0c\x19\x4c\xc5\x64\x94\xe5\x18\x05\xa3\x48\x9c\x91\x25\x0a\x28\xca\xcb\xfe\xd5\xda\x0f\xc4\xd6\xab\x05\x14\x8a\xc2\xe3\x5f\xc6\x16\xdc\x0c\x3f\x47\xf3\x68\x64\xbd\x70\x92\xee\x5f\x77\xd4\x93\x63\x22\x6b\x66\x4a\x6a\x99\x66\x3a\xc3\x4b\xda\x9b\xca\xbc\xd5\x2d\x17\xb8\xda\xa8\x5b\x9c\xe6\x0c\xa7\xee\xe6\x44\x65\xc1\x00\x63\xd4\xa2\xd2\xf9\x19\xa7\x16\xa6\x29\x63\x2d\x6c\x34\x7e\xd4\xff\x18\x32\xe9\xea\x10\x1b\x11\xed\x3c\x2d\xa3\x6f\x0e\xc6\xe0\xd5\x09\x3f\x9b\xbd\xf7\xd8\x05\xfa\x7b\xad\x5a\x1f\x8e\x6c\x8f\x46\xd6\x8d\xdd\xcc\x57\x9f\x18\x59\x7f\x65\x5d\xf8\x67\x44\xd6\x7b\x23\x1b\xff\xa4\xc8\x7a\xef\x0e\x26\x88\xac\xc3\x54\x89\xef\x36\x56\xcd\x02\x59\x31\x53\xf4\xf4\xad\xda\xb7\x87\x85\x5e\x86\x5c\x51\x52\xce\x6e\x7e\x0c\x00\xc4\x17\xfd\x2e\x54\xd7\xa3\xc6\x60\x6d\xa5\x17\x72\xab\x66\xf1\x85\x9e\x83\xd7\xd3\x1b\x5c\xec\x2b\xe8\x04\x9a\x62\xc5\x16\x21\xa7\x93\xcd\x72\xb9\x8a\xa9\x15\x25\xe9\xaa\xf5\xf8\xe9\xbc\xf0\xaf\xa5\x86\x7f\xd6\x6f\x31\x83\x9b\xdd\x53\x6e\x87\xdf\xd2\xbf\xf5\x57\x66\x43\x18\xbd\x5f\x25\xe6\x73\xb9\xf0\x2f\xf3\x47\x09\x22\x8d\x56\xa9\xc6\xb7\x86\x48\x45\x18\x22\x9f\x75\xe5\x84\xdb\xe8\x6f\xc6\x45\x3e\x3f\x89\xeb\x08\xd6\x73\x9c\x9f\x23\x7c\x95\xfb\xc8\xaf\x76\x45\x7e\xe2\xea\xf0\x82\x8a\xd0\x7b\x60\x8e\xde\xf9\x32\x7e\x8a\x74\xc7\x64\xcf\x09\x77\x17\x63\x48\x57\x2c\x35\xbb\x02\xf2\xf9\x00\xfe\x8a\x1c\xe0\x77\x7f\xfb\x03\x6e\x54\xcd\x73\xa6\xf5\x66\xc1\x6f\x9a\xd4\x98\x77\xdd\x5d\x79\x9f\xdc\x73\x25\x3b\x4f\xe4\x92\xa4\x17\xd8\x4a\x2c\x79\xec\x33\xc2\x57\x9f\xc2\x7d\xae\xf4\x71\x64\x2e\xc9\x7f\x91\xb5\xab\x1a\xf0\x4d\x5a\xda\x78\xd6\xbe\x13\xa4\x24\xe6\x84\xc1\x15\x19\xb2\x2d\x81\xef\x08\x3e\xe8\x31\x16\xa4\x2e\x46\x9d\xa1\xdb\x2e\x89\x05\x44\x72\x6d\x08\xc3\xde\x15\xcf\x8d\xef\x63\x8f\xf3\xe3\xe3\x49\xc6\x51\x8c\x5f\x4b\xfb\x5f\x4a\xbc\x9b\x9d\x03\x8a\x30\x27\x47\x7b\x81\x63\x7e\x7c\xe0\x57\x64\xf7\x23\xa2\xbb\x9f\xa5\x3e\xc7\x5c\xe8\xb7\xf7\x93\x31\xb8\xb0\x1c\x57\xb3\xa1\x73\x96\xcf\xf0\x2f\xf9\x27\xe2\x35\x34\xe0\x0b\xd2\x2f\x0a\x2d\x01\x09\xe3\x28\xb5\x11\xb1\xde\xf1\x72\xf8\x9f\x27\xac\x4f\x80\x33\x79\x02\xcf\x5b\x34\xc9\x98\x0d\xfb\xca\x76\xd4\x39\x7d\xea\xa6\x09\xed\x67\xb1\x76\x40\x96\x8c\x41\x1f\xfe\x84\xcd\x40\xb1\xe7\xef\x5e\xd6\xb1\xff\x4e\xef\x47\x4c\xd7\xc7\x90\x8c\xff\xe0\x77\x82\x77\xf6\xfa\x8a\x80\xc5\xc2\xd0\x65\x3f\x3e\x5b\xb6\x12\x93\x37\xc7\x70\xeb\xac\xde\xfd\x3b\x38\x0d\xd2\xb6\xcf\x70\x04\x5d\x98\xed\xdd\xaf\x45\x1d\x71\x7c\x9a\x46\x74\xe5\x15\xf9\xe4\x0d\xfe\x14\xc7\xac\xae\x3c\x89\x4d\x5d\x49\xcc\xe0\xfe\xf7\xb0\x95\xd7\x33\xb9\xef\x2a\xd3\xd6\x62\xbc\x78\x16\xdf\x01\xae\x30\xeb\x31\x6b\x87\xbb\x24\x39\x2f\x80\xbb\x7e\x9e\x00\x01\xae\x18\x9b\xbe\x53\x84\x30\x86\x73\x42\x58\x8b\xad\x55\x4e\xac\xbb\x64\x08\x98\x3f\xe0\xb8\x57\xf9\x97\x15\xed\xec\x7e\xe9\x7b\x1b\xbb\x1e\xd7\xf5\x31\xba\x30\xcb\xbb\x9f\x1a\x38\x8e\x7e\x67\x39\x0a\xeb\xf5\x59\x6c\x9d\xe0\x4c\x18\x9e\xcf\x30\xe8\xfa\x53\xe2\x3e\x32\xad\x07\x1c\xf7\x9b\xe4\x35\xf3\x73\x6d\x65\x4b\x44\x02\xce\x8d\xeb\x85\xb3\x0c\x9f\x22\x8b\x70\xae\xc0\x08\x9f\x61\xd8\xab\x0c\x7a\xaf\x28\x7d\x0e\x7b\x1e\xaa\x44\xcc\xed\xde\x8b\x1a\xcb\x9a\xc7\x3b\xb4\x9f\xa6\xbe\x08\xbe\x6b\x4c\x46\xc0\x93\x70\xfa\x1c\x3d\x1e\x61\x4b\xca\xe5\x55\x6d\x3e\x87\xb7\x44\x3c\x5d\xe6\x65\xc7\xb1\x61\x59\xb3\xe5\xe2\x31\x8e\x8e\x71\x25\x9e\x51\x7f\x03\x12\xc3\xdf\x02\xe8\xf6\xd8\xd5\xe7\xf0\x29\x1c\x46\xb1\x25\xf3\xdb\x80\xc1\x57\x24\xca\xf2\x2b\x12\x84\x78\xd9\xb0\x1c\xa8\x8c\x81\x1b\x23\xc4\x13\xe2\x76\x80\xe7\x1a\xc7\x37\xae\x8e\xb6\x58\x9f\xa6\xdd\x1b\x14\x7b\x55\x6f\xba\xa9\xc0\xf5\x38\xb2\xe4\x70\xc6\x96\x39\x06\x8a\x62\x43\xc7\x79\x54\xa1\x57\x09\x1c\x6d\x9c\x83\xdb\x91\xad\xaa\x0f\x78\x03\xef\x8f\xdb\xc1\x25\xdc\xd7\x39\x3e\xe3\x65\xc7\x08\x83\x55\xf8\x16\x9f\xbb\x59\xdc\x5f\x14\xb9\x88\xf5\xea\xb2\x7f\x0b\x74\x85\xd1\x60\x0d\xb5\x45\xb9\x37\xa2\x27\x71\x7b\x0e\xf5\xd5\xe5\x5b\x52\x4b\x0e\x21\x7f\xb6\x31\x1c\xa1\xbe\x67\xbd\x19\x8f\x6e\xbe\xb0\xec\x6d\xe0\x7b\x87\xb6\xa3\x5b\xe6\xf3\x15\x1d\xa5\x70\x9d\xfd\xc8\x80\xe4\xc2\x04\xa1\x27\x79\x91\xe3\x0e\xfd\x87\x68\x5c\x95\x24\x04\x9b\x5c\x88\x85\x0d\xdf\x75\x6b\xe9\xfc\x12\x69\xce\x11\xbb\x2a\xd6\xb9\x41\xc9\xe5\xdb\x15\x51\x7e\x9a\x4c\x3b\x02\x57\xe5\x88\x2d\x3f\x1e\xa3\x3e\xbc\x5c\xf9\x67\xb8\x76\x14\xfb\xd9\x0d\xf0\xad\x0e\x7e\x8c\xf4\x78\x0b\xf5\x24\x0f\xbf\x44\x22\x89\x0c\x57\xf6\x75\x17\x89\x3d\x2f\x7d\x9d\x22\x4e\xc4\xfb\xf5\x24\x16\xde\x6c\xff\x0c\xb3\x39\xc5\x7f\xf7\x56\xdf\x5b\xc4\xed\x13\xf9\xae\xc2\x38\x96\x2c\x6b\x76\xb7\x96\x2f\xe0\xbc\xba\x44\xf8\xfc\x59\x81\x2e\xd0\x0d\x07\xf9\xfa\xcf\x7f\x22\x2f\x8e\x65\x28\xa1\xe3\xcd\x97\xef\xdf\x5d\xb8\x76\xbf\x7c\x79\x45\xe2\x01\x65\x4b\x49\x06\xe8\x1f\x8e\xc4\x83\x4a\xd6\x52\x9b\xb8\x89\xc8\x1f\x81\x5e\x66\xe0\x08\x34\xc2\xc2\xae\x28\xee\x19\x19\xf2\x03\x21\x88\xc4\x9d\x01\xba\x32\x56\x43\xe7\x76\xf9\xca\xaf\xe9\x0f\x08\xc8\x22\xf9\x7a\x4b\x28\x15\xc4\xfd\x99\x1c\xd2\x12\xf2\x42\x4b\x10\xb3\x42\x3b\x72\x4c\xe5\xdd\xad\x8b\x48\xb7\x91\xdb\x9a\x4c\x4b\x68\x77\x5a\xa5\x6c\x67\xfb\x55\x4e\xa8\x0a\x1d\x01\xc9\xf2\xed\x2c\x9f\x13\x2e\x1c\x6c\x6e\xf7\x1d\xc7\x1f\xc7\x91\x52\xcc\xf3\x94\x71\x4c\xe7\xca\xa9\x65\x1c\x27\xc7\xfa\x89\x96\x8d\xce\x2a\x2b\x58\xe8\x5f\x39\xe2\x8d\xd5\x44\xb0\x95\xfd\xcb\xf5\x10\xe6\xe3\x9c\x16\x76\x55\x82\xcb\x06\x73\x9b\x06\x4e\x8b\x4a\x7f\xa1\x1a\x62\x98\x39\xd6\xc5\x99\x32\xd8\x73\x8d\x22\x5a\xe2\xf8\x1d\x14\x12\x6f\x1a\x27\x35\xa4\x24\xd6\x81\x00\x45\x81\x0a\x32\x07\xe6\x12\x18\xc6\xe6\x88\xd3\x52\x1e\x11\x06\xa5\x76\xa7\xed\xf3\xec\x4b\xf6\x6d\x06\x37\xe3\x77\x60\x2c\xe1\x78\x8b\x11\x22\xb9\x56\xbd\x11\x66\xfc\x30\x2a\x02\xe9\xb7\x48\xfc\xe1\xc1\x47\x09\x9c\xc7\xfd\xe7\x2e\x45\xfa\xe0\x51\xca\x9f\x3d\xbd\x5d\xbc\xb6\x4a\x92\x27\xc0\x06\xb2\x0b\x6d\xe4\x1d\xd8\x1b\xdd\xd4\x3e\xe3\x14\xf5\x65\x7f\x52\xfa\x7a\x1d\x8b\x47\xf4\x1a\x9e\x3f\x22\x9d\xbe\x51\x6e\xf7\x4d\xbe\x70\xbd\x18\xeb\xa6\x06\x1d\x77\x6c\x80\xed\x7f\xde\x4a\xfb\xe5\x15\x79\x41\x5f\xbe\xfc\x79\x6a\x2b\x11\x44\xe7\x8c\xe5\x9c\xa6\x8f\x3b\x3e\x66\x70\xb3\x9d\xf1\x23\x7d\xee\x0b\x26\x8e\xae\x99\xdb\xb5\x7e\x02\x85\xee\x06\x9d\xd1\x06\x4d\x7e\x49\xa0\x4b\xc4\x27\x76\xff\xf8\x15\xd4\xb5\x89\x8b\xe8\xa6\x0b\x35\x68\x47\xa6\xf1\xeb\x57\x64\x05\x91\x95\x6e\x18\xc8\xdb\x12\xda\x1b\x44\xda\xec\x08\x3a\x16\xe2\x4e\x80\x8b\xe8\x0e\xb2\x9a\xec\xbf\xd5\x1d\xc4\x9d\x40\x44\xd5\x6d\xc7\x45\x74\x17\xce\x11\xdd\xf4\xbe\x91\xad\xf9\xc2\x72\x74\x17\x6e\x95\x9b\x80\xad\x23\x6d\xfb\xc8\xf7\x6d\x1b\x5f\xb6\xb6\x11\xc4\x9d\x86\xdf\x25\xd0\x6e\x56\x11\x05\xb8\x60\x1b\xcf\x11\x65\x39\x5f\x78\x04\x0d\xe8\x42\x2f\x60\xfc\xbf\x00\x00\x00\xff\xff\x1a\xbe\x8b\x9f\x8e\xd5\x00\x00") +var _failed_transactionsHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xf9\xaf\xa2\x4a\xf6\xf8\xef\xef\xaf\x20\x9d\x49\x6e\x77\xbc\xdd\xb2\x2f\xfd\x3e\x3d\x09\x2a\xee\xe2\xbe\x4e\x26\xa6\x80\x42\x51\x04\x2f\xe0\x55\xef\x64\xfe\xf7\x6f\x58\x54\x44\x51\x5c\xba\x5f\xbf\xc9\x97\x74\x3a\x57\x39\x75\xb6\x3a\x4b\xd5\xa9\x03\x7e\xfd\xfa\xc7\xd7\xaf\x48\xc3\xb4\x9d\x89\x05\xdb\xcd\x2a\xa2\x00\x07\x48\xc0\x86\x88\xb2\x5a\x2c\xff\xf8\xfa\xf5\x0f\xf7\x7e\x6e\xb5\x58\x42\x05\x51\x2d\x73\x71\x00\x78\x87\x96\xad\x99\x06\xc2\x7d\xa3\xbf\x61\x21\x28\x69\x8b\x2c\x27\x63\x77\x78\x04\xe4\x8f\xb6\xd0\x41\x6c\x07\x38\x70\x01\x0d\x67\xec\x68\x0b\x68\xae\x1c\xe4\x07\x82\xfe\xe9\xdd\xd2\x4d\x79\x7e\xfa\xad\xac\x6b\x2e\x34\x34\x64\x53\xd1\x8c\x09\xf2\x03\x79\xe9\x76\xf2\xec\xcb\x9f\x3b\x74\x86\x02\x2c\x65\x2c\x9b\x86\x6a\x5a\x0b\xcd\x98\x8c\x6d\xc7\xd2\x8c\x89\x8d\xfc\x40\x4c\x23\xc0\x31\x85\xf2\x7c\xac\xae\x0c\xd9\xd1\x4c\x63\x2c\x99\x8a\x06\xdd\xfb\x2a\xd0\x6d\x78\x44\x66\xa1\x19\xe3\x05\xb4\x6d\x30\xf1\x00\xd6\xc0\x32\x34\x63\xf2\x67\xc0\x3b\x04\x96\x3c\x1d\x2f\x81\x33\x45\x7e\x20\xcb\x95\xa4\x6b\xf2\xab\x2b\xac\x0c\x1c\xa0\x9b\x2e\x18\x5f\xed\x08\x2d\xa4\xc3\x67\xaa\x02\x52\xca\x23\xc2\xa0\xd4\xee\xb4\x91\xba\x58\x1d\x06\xf0\xdf\xa6\x9a\xed\x98\xd6\x76\xec\x58\x40\x81\x36\x92\x6b\xd5\x1b\x48\xb6\x2e\xb6\x3b\x2d\xbe\x24\x76\x42\x83\x8e\x01\xc7\xb2\xb9\x32\x1c\x68\x8d\x81\x6d\x43\x67\xac\x29\x63\x75\x0e\xb7\x7f\xfe\x0a\x82\xb2\xf7\xd7\xaf\x20\xe9\xda\xd5\xaf\x13\xd0\xa7\x76\xbb\x74\x3e\x83\xae\x21\x5f\x22\x16\x82\x3a\x20\xf7\xc0\x4b\x62\x4e\x18\x84\x20\x03\xb4\x1e\x57\x63\xa8\xaa\x50\x76\xec\xb1\xb4\x1d\x9b\x96\x02\xad\xb1\x64\x9a\xf3\xcb\x03\x35\x43\x81\x9b\x71\x48\x38\xc3\x06\x9e\xa1\xdb\x63\xd3\x18\x6b\xca\x2d\xa3\xcd\x25\xb4\xc0\x7e\xac\xb3\x5d\xc2\x07\x46\x1f\x38\x79\x88\x8b\xdb\xc6\xea\x50\x99\x40\xcb\x1b\x68\xc3\xb7\x15\x34\xe4\x9b\x44\x08\x0d\x5f\x5a\xf0\x5d\x33\x57\x76\xf0\xdd\x78\x0a\xec\xe9\x9d\xa8\x1e\xc7\xa0\x2d\x96\xa6\xe5\xba\x63\x10\x53\xef\x45\x73\xaf\x2e\x65\xdd\xb4\xa1\x32\x06\xce\x2d\xe3\x77\xc6\x7c\x87\x29\x05\x7e\x79\x07\xd3\xe1\x91\x40\x51\x2c\x68\xdb\x97\x87\x4f\x1d\x4b\xf1\xf2\xce\x58\x37\xcd\xf9\x6a\x99\x00\x7a\x79\x8d\x25\x1f\x0a\x68\xd6\x8d\x88\x77\x41\x37\xf1\x00\x37\x4e\xa8\x2a\xb4\x92\x81\xee\xd0\xdf\x31\x24\x50\x6b\xb2\x41\x5e\x68\xbd\x81\x48\x38\x14\x5f\x1b\xb1\x74\x07\x4c\x9d\xab\x33\x60\x1f\x05\x20\x69\x7b\xd5\x8c\xa6\x7b\x4f\x4f\x02\x6c\xfa\x7c\x98\x57\x01\x35\xdb\x19\x3b\x9b\xf1\xf2\x3a\x4a\x17\xd2\x5c\x26\x85\x84\x49\xc1\x76\xa9\xe4\x32\xb0\xb4\x73\xf7\xab\x60\xd7\xa3\x98\xb4\x4d\x36\x99\x7e\x8e\x74\xb5\x6d\xdb\xab\x6b\x94\xf7\xc0\xb2\xa9\xc0\x1b\xd7\x05\x7b\x33\x58\x02\xcb\xd1\x64\x6d\x09\x8c\x8b\xc9\xfb\xda\xd0\xf1\xf2\xc6\xb5\xc9\x3e\xa3\xdd\xca\xc1\xf9\x81\x37\xd3\xf7\x94\x97\x84\x9e\x0f\xf8\xd3\xf1\xfb\x93\xe9\xce\x64\xf0\xa7\x9b\x1f\x76\x4b\x3f\xcf\x18\xc6\x09\x39\x98\x98\xd6\x72\xbc\xd0\x26\xc1\x82\xe1\x02\x0b\x11\xc8\xc4\x32\xde\xbe\xde\xbb\x84\x39\xa9\x71\xfa\xa3\xb3\xf5\x6a\xb7\x26\x22\x9a\xe2\x53\xce\x09\x79\xbe\x5b\xed\x24\xc4\x1d\x63\x74\x4f\xc0\x1c\x4c\xf7\x65\x4c\xde\xa7\xe4\xe2\xef\xb2\x74\x5b\x68\x76\x05\x31\x7b\x87\xce\xdc\x75\xb6\x0d\xdf\x6e\xa6\x7c\x84\x24\xf1\x68\x05\x26\x84\x3d\xac\x66\x13\x4b\x18\xe3\xf5\xb7\xc8\x77\x1e\x45\xb2\xb1\xc1\xba\x2f\x19\x70\xb0\xc8\x4b\x2c\x5b\x10\x01\x6e\x91\xc5\x1f\x92\x10\x36\x58\xfe\x25\xe7\x67\xb7\x5e\x4c\xc2\x51\x24\x86\x5c\x06\x0e\x85\x84\x00\x90\x2f\x14\x5a\x42\x81\xef\x9c\x01\x5e\x68\xee\x8e\x43\x93\xe1\x67\x63\xb5\x80\x96\x26\xff\xeb\xdf\x5f\x12\x8c\x02\x9b\x3b\x46\xe9\xc0\x76\x3e\x03\x63\x0b\x75\xaf\x14\x93\x60\x84\xaa\x59\x67\x87\xe4\xbb\x62\xb6\x53\xaa\x8b\x17\xe4\x19\x83\xc9\xe4\xc0\xdd\x2b\x72\xc2\xe8\x05\x1c\x3b\xe9\x1e\xc0\xe1\xca\xea\x0d\x3f\x30\xff\x8a\xdc\x22\x88\x27\x7a\x02\x0c\xc2\xa0\x23\x88\xed\x08\x0a\x7d\x39\xb1\xdf\xf4\x9d\x2d\x66\x8b\x42\x8d\x3f\xa1\xf0\xe7\x1f\x7e\x15\x4e\x04\x0b\xf8\x7d\xf7\x1d\xd2\xd9\x2e\xe1\xf7\x60\xc8\x9f\x48\x5b\x9e\xc2\x05\xf8\x8e\x7c\xfd\x13\xa9\xaf\x0d\x68\x7d\x47\xbe\x7a\xc5\xb9\x6c\x4b\x70\xe7\x2b\xc0\xbc\xc3\xf7\xc7\x11\xc6\xe3\x9b\x01\xe2\x6c\xbd\x56\x13\xc4\xce\x05\xcc\x3e\x00\x52\x17\x8f\x11\x20\xa5\x36\xf2\xb2\x2b\xbb\xed\xbe\xb3\x3d\x24\x2f\x51\xca\x3b\xf1\x03\x9a\x7b\x0d\x5d\x95\xe7\x48\x97\x62\xbd\x13\xd1\x27\xd2\x2f\x75\x8a\x7b\xb6\xc2\xf5\xb7\x23\xf2\x07\x2c\x11\x46\x6e\x11\xfe\x04\x89\xa7\x80\x46\x35\xbd\x9c\xb4\x9b\x55\x64\x69\x99\x32\x54\x56\x16\xd0\x11\x1d\x18\x93\x15\x98\x40\x4f\x0d\x09\xeb\x85\x61\x76\xaf\x1b\x5a\xc0\xfe\xce\x56\x0f\xfc\xef\xe6\xf6\x9c\x2e\xf7\x96\x7d\x15\x3f\xd2\x12\x3a\xdd\x96\xd8\x0e\x7d\xf7\x07\x82\x20\x48\x95\x17\x0b\x5d\xbe\x20\x20\x9e\xf4\xb5\x5a\xd7\x8f\x77\xed\x4e\xab\x94\xed\x78\x10\x7c\x1b\xf9\xc7\xf8\x1f\x48\x5b\xa8\x0a\xd9\x0e\xf2\x0f\xcc\xfd\x14\x9d\x8d\xab\x8e\xf8\x98\x74\xd7\xd0\x3f\x4d\x38\xfc\x9c\x70\x49\x22\xd5\x63\xf2\x25\xa0\xb0\x17\x71\xff\xd5\x5d\x12\x7e\xfe\x03\x41\xb2\x7c\x5b\x40\xfa\x45\x41\x44\xfe\x81\xfd\x0b\xfb\x77\xfa\x1f\xd8\xbf\xf0\x7f\xff\xf3\x1f\xb8\xf7\x37\xfe\x2f\xfc\xdf\x48\xc7\xbf\x89\x08\xd5\xb6\xe0\x2a\x45\x10\x73\x5f\xce\x6a\x26\x41\x1e\x78\x50\x33\xd7\x29\xfc\x6c\xcd\xfc\xdf\x3d\x9a\x39\xcd\xa9\x81\x1e\xf6\x79\x38\x99\x22\x0e\x69\xfb\x04\xa3\xc7\x31\x82\xb4\x5d\x5d\x21\x3f\x0e\x11\xe0\xd5\xff\xba\x33\x6c\x08\xc8\x8f\xb0\x47\x7c\x39\xe7\xb5\x4f\xe5\x31\x8a\x30\xc2\xe2\xce\x8d\x93\x73\x78\x76\x09\xf4\x28\x97\xe7\x90\x46\x38\x3d\x72\xc8\x63\x76\x0f\x56\x76\xca\xed\xb9\x65\xde\xc3\xdc\x9e\x41\x1a\xe5\x36\xec\x24\x17\xb9\x75\x33\x97\x02\x55\xb0\xd2\x9d\xb1\x03\x24\x1d\xda\x4b\x20\x43\xe4\x07\xf2\xf2\xf2\xe7\xf1\xdd\xb5\xe6\x4c\xc7\xa6\xa6\x84\x8e\xd2\x8e\x64\x0d\xaf\x7f\x03\x11\x3d\x07\x4b\x26\x9e\xef\x8b\xe1\xcd\xb7\x2f\x91\xa6\x20\x92\x36\xd1\x0c\xc7\x5b\x18\x88\xdd\x6a\xd5\x17\x07\x2c\xdc\x65\x3c\x22\x4f\x81\x05\x64\x07\x5a\xc8\x3b\xb0\xb6\x9a\x31\x89\x80\x19\xab\xc5\x7e\xc9\x8f\x68\x86\x03\x27\xd0\x8a\x80\xa8\x3a\x98\xd8\x88\xbd\x00\xba\x7e\x4a\xc6\x31\x17\xfa\x29\x91\xcf\x38\x45\x7d\xd9\x43\x9e\x4e\x7b\x74\xdf\x70\xaf\x3a\xa2\xd5\x8e\xbd\x4a\x1c\xb8\x39\x51\xc8\x72\xa9\x6b\x5e\xcd\x1e\x71\xb4\x05\xb4\x1d\xb0\x58\x22\xee\x9c\x79\x1f\x91\x0f\xd3\x80\xa7\x8c\xc6\xed\x8a\x76\xeb\xd1\x60\x3b\x95\x8c\xe7\xfd\xe6\x2b\x06\x6b\x60\x86\x7c\xab\xe3\xaf\xe8\x30\xef\x8b\x92\x98\x6d\x09\xde\xf2\x2b\x33\x0c\xbe\x12\xeb\x48\xad\x24\xf6\xf8\x6a\x57\xd8\x7f\xe6\x07\x87\xcf\x59\x3e\x5b\x14\x10\xec\x9a\x30\x77\xab\x3d\x8a\xe8\xc4\x14\x83\xa2\x07\x62\xc0\x8d\xf3\x0e\xf4\xcf\x2f\x31\x12\xbf\x7c\xff\x6e\xc1\x89\xac\x03\xdb\xfe\x12\x9d\x2e\xff\xac\xe2\x8c\x6d\xd1\xe4\x97\x0b\x13\xe5\xef\x8d\x1f\x96\xcc\xaf\xe8\xec\xe5\x3a\xef\x19\x87\x5a\xdd\x79\x36\xcf\x82\xcb\xa6\x72\x0e\x1c\xc3\xcf\x83\xfb\xe5\xbf\x33\x03\x28\xfa\x92\x87\x9d\x2f\x2f\x3c\xc9\x6c\xc3\x38\x7f\x99\xd1\x5e\x12\x04\xa9\xf7\x45\x21\x87\x64\x86\x57\x24\xf2\x2b\x74\x97\x05\xda\xe3\x8a\xdc\xfe\xa6\x29\x71\xbc\xed\x6a\x3e\x8f\x5a\x5d\x80\x27\x30\xbb\x88\xcf\x8c\xe3\x22\xfd\x69\x89\x2b\x0e\xf2\x93\x77\xf0\xf1\x29\xc6\x9a\x3d\x3b\x3e\x7f\x4b\x81\x0e\xd0\x74\x1b\x99\xd9\xa6\x21\xc5\x1b\xdb\xae\x50\xf6\xa8\x1e\x02\x3c\x81\x1e\x76\xe7\xd6\x31\xbc\x85\x0e\x93\x13\x79\xe1\xb9\x73\xec\xf3\x03\x03\xb5\x84\x2a\xa3\xde\x44\xec\xf9\xd8\x45\x39\x34\x42\xe1\x30\x11\xc9\xe0\xf7\x87\xc9\x91\xc4\x64\xae\x9c\x43\x6e\x8a\x8e\xb1\x20\x70\xae\x0e\xf2\x61\x57\x4b\x25\x31\xec\xde\x74\x82\x8f\x91\x73\xf6\x13\x59\xb0\x93\xf5\x80\x03\xf4\xb1\x6c\x6a\x86\x7d\xde\x06\x55\x08\xc7\x4b\xd3\xd4\xcf\xdf\xf5\x4e\x3e\x55\x18\x37\xd7\xde\x6d\x0b\xda\xd0\x7a\x8f\x03\x71\xd7\xa1\xce\x66\xec\x2d\x93\xb4\x8f\x38\xa8\xa5\x65\x3a\xa6\x6c\xea\xb1\x72\x45\xe7\x68\x67\x2c\x10\x28\xd0\xf2\x96\x17\xfe\xf7\xf6\x4a\x96\xa1\x6d\xab\x2b\x7d\x1c\x6b\x28\x81\xe0\x40\xd3\xa1\x72\x0d\x2a\x60\x3d\xc6\x84\xe2\x5d\x2f\xa6\xbe\xfd\xa8\x27\xc6\x9c\x99\x5c\xc9\x8b\xc9\x23\xd2\xf5\x18\x77\xab\xc8\xcf\x4d\x75\x17\x69\xfc\xaa\xd4\x77\x93\xa0\x0f\xa6\xc2\x8b\xb4\x4e\x53\xe3\x79\xf0\x0b\xa9\x32\x74\xfa\xf3\x34\xdb\xbc\xb6\x15\x3a\xee\xbc\x8a\xd9\x2e\xb9\xbb\x03\xd9\x17\xc5\xcb\x92\x0f\x26\xc9\x20\x3a\x98\x2b\x4b\xde\xb7\x72\xc4\xa4\xa7\x5d\xc8\x79\x79\xf9\xfe\x3d\x7e\xbb\x16\xef\x07\xc1\xe1\xdb\xa3\xea\x0c\xfa\x05\x3f\x3f\x75\x4d\x11\x84\xcd\x7b\x32\x9c\xd7\x2f\x13\x4b\x36\xd2\xad\x78\x09\x28\x68\xa0\xbc\x04\xe2\xef\x95\xcf\x02\x9c\xf6\x7d\x5e\x81\xbb\x48\x6e\x0f\x75\x81\xa2\xc7\x92\x66\x8f\x6d\xa8\xeb\xd0\x42\x24\xd3\xd4\x21\x30\x76\x79\x4b\x93\xe1\xd8\x38\xca\xd1\xfe\x77\xc7\x79\xfb\xd0\x71\x34\x8e\x64\xf4\xa3\x9e\xa7\xe8\xcd\xd0\x51\xfe\xd9\xee\x50\x8f\xeb\xb1\xd7\x3f\x8c\x64\x8b\x42\xb6\x82\x7c\xfe\x1c\xd6\xe0\x3f\x11\xf4\xcb\x97\x6b\xa8\xce\x0d\xdf\x29\xed\xff\x4e\xf4\x98\x00\xdf\x91\x4e\x23\xe8\x23\x0a\xf7\x18\xbc\xe8\x4a\xe7\x4f\xc1\x9f\xe0\x5c\xe7\xfb\x1a\x12\x66\xd2\x24\x21\xec\x91\x5c\x7a\xad\x87\xe0\x39\xd9\xf4\x0a\x95\x5f\x95\x4f\x6f\x14\xf6\xc1\x8c\x7a\x85\xda\x69\x4e\x8d\x1b\x70\x21\xab\x1e\xf5\x8d\x3c\xd1\x56\x77\xf6\x19\x66\x29\xf1\x46\x2b\x88\xfd\x57\xb6\x6f\x49\x13\xef\xe5\x1c\x7a\x16\xf6\x40\xfa\xac\xbf\xb8\x3b\x85\xf8\xad\x46\xdc\x26\xee\x2f\xd9\x86\x39\x9b\x31\x34\xde\xa1\x6e\x2e\xe1\xb9\xd2\xa6\xb3\x71\x37\x45\x2b\xdd\x89\xb9\xb9\x80\x0e\x88\xb9\xe5\x6e\xc7\xe2\x6e\xdb\xda\xc4\x00\xce\xca\x82\xe7\xaa\x70\x1c\xfd\xe5\x5f\xff\x3e\xac\x5d\xfe\xf3\xdf\x73\xab\x97\x7f\xfd\x3b\xaa\x73\xb8\x30\x63\x0a\x66\x07\x5c\x86\x69\xc0\x8b\x6b\xa1\x03\xae\x53\x34\x81\x64\xda\x02\x8e\x25\x73\x65\x28\x5e\x55\x9b\xb5\x80\x31\x81\xd1\x1d\xdb\x71\x6a\x75\x35\xe1\x62\x9b\xc0\xc8\x16\xd8\x30\xa0\x35\x4e\xe6\x01\x07\x4c\x17\xcd\x35\x8c\xf8\xba\x92\x83\x42\x3d\x5c\x8f\x77\x16\xeb\xb3\x77\xad\xe8\x87\x68\xca\x2e\x16\xec\x9a\xd0\x92\x04\x30\x3f\x18\x78\x1d\x7f\x57\xfa\xdb\xda\x42\xe7\x42\xa5\x37\x5c\x53\x0b\xd7\x79\x6f\xdb\xe5\x3c\x4f\x88\x84\xed\x7f\x17\x85\xba\xb8\x3b\x4a\x22\x64\xec\x3a\xe0\x69\x62\x26\xee\xa0\xbc\x28\xe8\x95\xa4\x75\x5e\xd4\x1c\x70\x00\xa2\x9a\xd6\x95\xf3\x2e\x24\xc7\x77\xf8\x2b\xe2\x95\xc4\xb6\xd0\xea\x20\x25\xb1\x53\x3f\x3a\xf3\xf2\x72\x7c\x1b\xf9\x8c\xbd\x22\x2f\x38\xba\xbb\x5e\x5e\x11\xfc\x15\x41\x5f\x91\x97\x97\x78\x76\x2e\x9d\x39\xdd\xca\x52\xf4\xdc\x69\xc7\xd6\x0b\x36\xd6\x0c\xcd\xd1\x80\x3e\xf6\x7b\x80\xbe\xd9\x6f\xfa\x8b\xc7\x2b\xc6\x7d\x45\xe9\xaf\x28\x81\x60\xec\x77\x9c\xfd\x4e\x32\xdf\x50\x02\x27\x39\x3a\x85\xe2\x2e\xd3\x89\xb0\xe3\x63\xff\xd9\x8e\xa3\x19\x91\xb6\x63\xc7\xd4\x94\xcb\x94\x38\x9a\x62\x6e\xa1\x44\x8c\x57\x36\xdc\xe7\xcf\xb1\x66\x9c\x3c\x4f\x72\x91\x1e\x49\xa2\x24\x7b\x0b\x3d\x72\x0c\x14\x65\x1c\xad\xca\x5d\xa4\x41\x91\x14\x81\xdf\x42\x83\x1a\xfb\xd9\x7a\xb7\x6f\xf0\x4e\x73\x2f\x92\xa0\x09\x14\xbf\x49\x0c\x7a\x47\x22\x88\x7e\x09\x48\xb0\x24\x46\xdd\x42\x82\x19\x2f\x4c\x45\x53\xb7\xc9\xa5\x60\x31\x1a\xbf\x89\x04\x7b\x24\x45\xd0\xc4\x9d\x80\x0e\x43\xd2\xc4\x6d\x74\xdc\x49\x07\x93\x89\x05\x27\xc0\x31\xad\xcb\x36\xc5\xa1\x18\xca\xdd\x82\x9e\xf3\xd0\xfb\x15\xdb\xf1\x46\xb1\x2e\x63\xc7\x19\xec\xa6\xa9\xc6\x50\x0f\x7d\x30\x0b\xde\x1e\xfc\x32\x01\x8a\x63\x6e\xd2\x0e\x86\x85\x09\xec\x37\x75\x6e\x00\xb8\x4c\x88\xa3\xb9\xdb\x24\xc1\x8f\x26\x3a\xd8\x46\xfb\x8f\x0d\x5f\xa2\x84\xa1\x0c\x45\xde\x34\x23\x18\xe1\x8b\xb3\x2f\x3e\x5c\x9c\x71\x0c\xc3\x19\xfa\x36\x49\xc8\xb1\xaa\x6d\x76\x8f\x50\x98\x0b\x7d\xac\x6a\x50\xbf\x18\x1a\x31\x8c\xc2\xb0\x9b\x82\x30\x46\xed\x4e\x8e\x76\x15\xfd\xcd\x15\x31\x68\xe6\xb6\x30\x8f\xd1\x63\xcd\x98\x40\xdb\x19\x9f\x9e\x19\x5c\x21\xc5\x70\xec\x6d\x33\xc2\x1c\xa5\x7a\xef\x70\x06\x5c\x4e\x26\x18\x8e\xa2\x04\x79\x13\x11\x76\x6f\xbe\xaa\xe9\xaf\x78\x61\xc4\xd9\x31\xf4\x2b\x81\x21\x18\xf9\x1d\xe3\xbe\x93\xdc\x37\x0c\x27\x58\x82\x4a\xa1\xd8\x85\x7c\x7e\xb1\x9b\xe1\xd6\x84\x7e\xd2\xd1\x10\x5e\x68\x14\x32\x83\x42\xb3\xdc\xef\x55\xfb\xf5\x61\x31\x5f\xed\x75\x2a\xfd\x1e\x95\x2f\x14\x79\xa2\x2a\x0e\x87\x78\xb9\x59\xa9\x31\x75\xbe\xcc\x77\x85\x66\xbe\x4b\x57\x1b\xd9\xb6\x90\xef\x0d\xea\x62\x54\x41\xb1\x44\x70\x97\x08\x4f\xf5\x33\x8d\x21\x4f\x0d\xc9\x3e\x2f\x14\x07\xfd\x16\xde\xad\xd4\xf1\x6e\x9d\xcc\x74\x0b\xc5\x6e\x93\x21\x85\x6e\xa3\x52\x17\xf1\x66\xb1\x47\xf6\x5b\xc5\x7a\xa9\x25\x56\x2a\xc5\x93\x59\x88\x25\x42\xb8\x44\xb2\x83\x4a\x81\x6e\x89\x64\x5d\x2c\x09\x8d\x6c\x4d\xcc\x67\x18\x02\xe7\x49\x82\x1e\x51\x0d\x31\xd7\x6e\x55\x0b\xfd\x0a\x53\xc8\x54\xb3\xb5\x66\xb5\x94\xaf\x93\x6d\x46\x18\xf6\x7b\xdd\xc4\x44\x48\x4f\x5d\xad\xc6\xb0\x58\xaa\xe2\xd9\x12\x91\x17\x9b\x64\x66\x50\xcd\xd7\xc4\x5c\x35\x5f\xee\x8a\x8d\x2e\x5e\x1c\x12\xa3\x5a\xbe\x5d\xac\x8b\xdd\xac\x50\xe7\xdb\x7d\xa6\x99\x65\xea\x03\xbc\xf8\x72\x6f\xf7\x8d\xbb\x94\xbd\x32\xd7\x41\xc7\xe2\xa1\xd9\xf8\x9b\x0d\x2f\x77\xa6\xbc\x22\xe4\x2b\xe2\x58\x2b\x98\xc0\x02\x4f\x7b\x4e\xee\xb6\x3f\x7f\xa7\x15\xb6\x3e\xd9\x82\x8a\xe6\x8c\x81\xbe\x9c\x02\x63\xb5\x20\x5d\x9f\xe9\xb6\x73\x2f\x0f\x4e\xe7\x3d\x5d\x16\x4f\xd1\xf3\xd1\xbe\xf0\x15\xc1\x92\x6a\xf9\x5c\x93\xc5\xbd\x6a\xde\x35\x5a\x84\xf4\x8c\x31\x6e\xf0\x64\x08\x9c\xc5\x3c\xa6\x5c\x9f\xfc\xcf\x27\x3f\x19\x7e\xfa\x8e\x7c\xc2\x50\xf4\x5b\xb0\xdd\xf8\xf4\x8a\x7c\x3a\xf4\xf2\xb8\x37\xbb\xed\xdc\xe1\x4b\x67\xbb\xf4\xbe\x8c\x4e\xdc\x01\xc2\xef\xe9\x71\x61\xee\x9d\xc1\x4f\xff\x8d\x73\xc9\xa8\x68\x44\x44\x34\xfc\x15\x21\xfe\x47\x44\xc3\xf7\xa2\x31\x04\xc3\xfc\x8f\xce\x9a\x2f\xda\xff\xd8\xac\xe1\x2c\x4b\x72\x28\xc5\xb1\x94\x3f\x6b\xa8\x27\x9b\xae\x2d\x34\x4f\x34\x0e\xc7\x09\x82\xc1\x51\x82\x66\xa9\x6f\x24\xc3\x50\x2c\xca\xfc\xad\x64\xc4\x76\x32\x62\x28\xba\x8b\x27\xff\x6b\x32\x12\xaf\x08\x4b\xb1\x1c\x47\xb0\x34\xcb\x79\x22\xfa\x12\xda\x0e\xb0\x1c\xcd\x98\x8c\x25\xa0\x03\x43\x86\x81\xad\x1e\x8c\x35\x31\x05\xf2\x98\xc2\x79\x1f\x38\xe3\x04\x3b\x3d\x19\xc0\xd1\xde\xe1\xdd\x12\xb9\x3e\xe8\x8b\xb4\x86\xda\x64\xea\x12\xc4\x5e\x91\x4f\x7e\x92\x19\xcf\xe1\xf6\x97\xd9\x92\xc7\x15\x89\x33\x81\xbb\xfc\x2c\x3d\x07\x14\x7e\xba\x9e\x23\x12\x25\xd3\xf3\x9d\x6b\xf0\x9b\xe2\x92\xcf\x15\xcd\x06\x2e\xfb\xd3\xf4\xec\x53\xf8\xe9\x7a\x8e\x48\x94\x4c\xcf\x77\x6e\x43\x7c\xae\xae\x2c\xe1\xce\xf5\x87\xde\xbb\x84\xdb\xf5\x88\xee\x84\xa5\x5e\x91\x17\x9a\x96\x59\x89\x20\x28\x4e\x01\x0c\x54\x15\x85\xc6\x54\x4a\xc5\x25\x82\x41\x69\x9c\xc3\x68\x9c\x22\x65\x9a\xc4\x58\x9a\x20\x64\x05\xc7\x70\x8c\x24\x18\x12\x95\x19\x59\x41\x25\x88\xb2\x14\xe5\xae\xa9\x25\x15\xe3\x58\x5a\xc6\x25\x49\x55\x24\x5c\x66\x69\x86\x54\x08\x52\xe2\x20\xc4\x08\x94\x91\x54\x95\x94\x51\x19\x03\x92\x84\x52\x38\xe4\x54\x06\xa8\x00\x55\x18\x5a\x86\x32\x81\x4b\x94\xca\xbe\x78\x76\x83\x46\x36\xcf\xf4\x77\x82\xfc\x4e\x70\xd1\x3d\x75\xf0\xf5\x37\x0a\x23\x48\x8e\xba\x7a\x17\xc7\x48\x86\x64\x09\x9a\x64\xd1\x57\x04\xa3\xdd\xf9\x3c\xb9\x5e\x11\xce\xfd\x0f\x0b\xfe\xdb\x7d\x89\xed\xff\x70\xf7\x14\x3c\xcf\xf3\x59\x86\x1d\x4d\xed\x0a\x93\x96\xaa\xa5\x11\x8a\xa2\x2b\x48\x76\x32\x4c\x1a\x5d\xd7\x0a\x96\x9d\xaf\x2e\x39\x3a\x35\xc1\xf0\x0f\xbb\x66\x0d\xc8\x37\x73\x23\x5a\x9b\x19\x66\xe4\xd9\x54\xb7\x54\xa2\xfb\xe2\x3c\xf7\xa1\xcf\x5a\x2d\x68\x11\xbd\x55\x6b\xfe\xd1\x2e\x8f\xf8\x66\x93\x64\x3a\x4d\x17\x35\x3f\x68\xf4\x6a\xc5\x35\xbf\xbf\xa0\x52\xcd\x2f\xb8\xec\x64\xd0\x63\x38\x7e\x35\x12\x39\x30\xc9\x8b\x1b\x6b\x94\x6b\x4e\x7a\x84\xa4\xea\x05\xfe\xad\xc1\xa4\x36\x25\x75\x94\xed\xf4\xb7\x99\xa5\xd2\xee\x92\x05\x76\xb8\x74\x14\xa5\x58\x59\xeb\xef\x0d\x3b\x23\x0f\xfb\x1b\xa5\x34\xdf\xb6\xcb\x93\x99\x42\x6d\xd7\xb5\xfc\xc4\xc5\xdc\x15\xc9\x2a\xf8\x58\xe2\xcd\x03\x31\xbe\x2e\xf0\xc7\x57\xc6\xfd\x6f\xc4\x0f\x30\xb2\xc9\xf3\x39\xb4\xcc\xff\xdd\x2e\xdf\xa8\xb0\x57\xef\xf4\x33\xc6\xfb\xa3\x0e\x41\x3e\xc7\x98\x5f\x00\x4e\x72\xb8\xc2\x71\x0c\x90\x31\x82\x50\x39\x14\x23\xa0\x2a\xe3\x14\xab\x4a\x94\x24\x53\x84\x04\x55\x94\x63\x25\x95\xe3\x58\x45\xa6\x58\x59\xa2\x50\x55\xa6\x55\x96\x95\x18\x15\xb0\xde\xe1\x0c\xe1\x47\xba\x53\xdb\x66\x63\x4d\x9e\x40\x69\x22\xde\x21\x76\x77\xfd\x35\x32\xcd\x61\x2c\x79\xc1\x21\xd8\x84\x0e\x41\x97\xcb\xd5\x91\x4e\xaf\x3b\x0d\x8a\xef\x30\x6c\x79\x98\xc2\xde\xf3\xf5\x14\x5b\xd6\xd2\x8b\x21\x91\x9f\x55\xbb\x8d\xcd\xbb\x56\x55\xe9\x09\xdf\xd5\xab\x2b\x0b\xd3\x06\x85\xe2\x62\xd8\xa5\xda\x8b\x56\x51\x51\xf3\x4d\x6e\x5b\xcf\xbd\x71\x7a\xbe\xb6\xcd\xbf\x91\x28\x5d\xb6\x25\x66\xe0\x7b\x81\xe7\x10\x93\xc3\x84\xa6\xad\xb7\xce\xac\x54\xed\x77\xde\x15\x21\x85\xa3\x92\xf3\xa1\x00\xc0\x11\x42\xc3\xe9\xce\xf3\x64\xbf\x5d\x67\x2b\xa5\x16\xbf\xe5\x4a\xa5\x2c\x5b\xc6\xf1\x9e\x0d\x08\x6e\xd5\x76\x1c\x82\xcc\x71\x4d\xb3\x36\xeb\x50\x69\x72\xd2\x95\xf2\xc0\x49\x97\xf4\x3e\x10\x27\x8a\x4e\x15\x3d\x1f\x68\x9e\x71\x88\xda\x24\x62\x4f\xff\x0b\x0e\x41\x78\x3e\x71\x83\x43\x10\xcf\x31\xe6\x17\x86\x42\x69\x56\x06\x32\xae\x62\x90\x06\xa8\x84\xcb\x40\x05\xb8\x42\x29\x92\x24\xcb\x32\x25\x63\x1c\xcd\x60\x8c\x4a\xab\xaa\xca\x32\x1c\x27\xcb\x04\x90\x68\x40\x73\x94\x84\x32\x12\x87\x01\xff\xb4\x12\x3f\x6b\xdb\x4c\xac\xc9\x93\x38\x8d\xc7\xbb\x8b\x7b\xd7\xcd\x2e\xc1\xce\x0a\x63\x59\xf6\x82\x43\x50\x09\x1d\x82\xe8\x16\x66\x95\xf5\x7b\x71\x61\x56\xab\x95\x94\x86\x29\x2b\xf6\x23\xbf\x1e\x8d\x36\x2a\x9e\x4e\x4f\x29\xa3\x56\xb7\xc0\x42\x97\x32\xcc\x1c\x48\x1f\xef\x68\xb3\xd0\x98\x17\x06\x6d\x19\x97\x27\x99\x6c\x6e\x69\x6a\x9a\x50\x68\x91\x2a\xbe\xb0\xd0\x65\x86\x2b\x00\x66\x38\x49\x0d\xa4\x92\x37\x81\x9e\x43\x84\x6c\xb4\xdd\xaa\x76\xbb\x45\x3b\x93\x4e\x7f\x14\xed\x59\x91\x37\xb1\x11\xdf\xcd\xcc\x4d\x76\x43\xb6\x5b\x03\x71\x0b\x54\x67\xf4\xd6\x33\xf2\x54\xad\x38\x73\x46\xa6\x5e\x56\x37\x40\xad\x83\x75\xba\x43\x10\xdd\xee\x5a\xff\xa8\x29\xf5\x7a\x65\x30\x81\x62\x2e\x83\x75\xe0\x9b\x90\xe3\xcc\xa1\x87\xbf\x76\xc6\x21\x8a\xe8\x39\xa3\xfa\x9b\x3b\x04\x7e\xab\x43\xe0\xcf\x31\xe6\x17\x9a\x50\x38\x56\xa5\x08\x1a\x42\x9a\x55\x30\x09\x67\x24\x4a\x62\x39\x15\x27\x80\x4a\x11\x18\x26\x31\x14\xcd\x01\x9c\x54\x81\x8a\x91\x28\x01\x14\x54\xa2\x70\x89\x26\x08\x17\x07\xe4\xb8\x4b\x19\x82\x8e\x35\x79\x8a\x64\xc8\xf8\x05\x15\x45\x32\x6e\x82\xf0\xf7\x73\x24\xc5\xe1\x17\xdc\x81\x48\xe8\x0e\x78\x63\x34\xc3\xc4\x15\x65\xa2\x52\x99\xe9\x93\xc6\xb6\xfe\xde\xdd\x14\x88\xde\xd2\x9c\xa7\xde\xf3\x7c\xdd\xc9\x62\x15\xbc\xc6\x64\x18\x7a\x94\xae\x51\xa5\x76\xf6\xad\x45\xa4\x96\x1f\xf9\x7e\xa5\x59\xff\x10\x26\xda\x44\x77\xc8\x72\x9b\x87\x39\x66\x68\x99\xb6\x00\xaa\x69\xaa\x54\xf5\xd7\x2a\x9e\x3b\x78\x7f\x95\xf6\xff\xf1\x9e\xc5\xda\x87\xcf\x6b\xbe\xd1\x9c\xfb\xd3\x8d\xf6\x9a\xec\x6a\xb1\xac\xd5\x53\xad\x72\x3a\xfb\x51\x42\x7b\xa3\x32\x4c\x51\x70\xba\x4e\xcf\xc9\x0e\xa9\x4c\xd7\x8d\xe6\x7a\x2d\xf4\x18\x66\x61\x8c\x00\x3d\xed\x55\xab\xdd\x8c\x50\x04\xab\x34\xdc\x94\xe9\xb9\x58\x2b\x7d\x7c\x34\x7a\xef\xd8\xa0\xce\xc1\xf5\xb2\xb8\x19\xf4\xf8\x7c\xc3\xcb\x12\xa5\x33\xee\x22\xd8\xe7\x4c\xee\x6f\xee\x2e\x37\xe7\x0f\xec\x39\xa6\xee\x35\xb0\xed\xf6\x08\x18\xc7\xa0\x5f\x51\xec\x2b\x8a\x21\x28\xfa\xdd\xfb\x17\x6b\xd2\x34\xcb\x50\xf1\xf9\xc1\xbd\xeb\xe6\x07\x12\xe7\x48\x8e\x66\x70\x8e\xbe\x60\xf1\xe7\xed\xdd\x67\xe9\xaf\x9e\x9a\xf8\x2b\x33\xa8\x68\xe4\x36\xbd\x6d\x57\x32\x4c\xce\xc8\x71\x45\x1c\xdd\xcc\x32\x29\x1b\x9d\x38\xf6\xba\xb4\xfe\xc0\x06\x4a\xbb\x3f\x04\x99\x32\xf0\xf7\x06\xc2\x19\x53\x3e\x7f\xed\x4c\x99\xe7\x33\xf3\x5f\x20\xc8\x53\xaf\xfd\x86\x33\x30\xe5\x2b\x7b\xf0\x04\x0f\x8a\xdd\xbb\x25\x8f\xe9\xb0\x0b\xf9\x8f\xbf\x81\x25\x51\xca\x2b\xd7\xc7\xf8\xdd\x15\x34\x78\x04\x0d\x7e\x1f\x9a\xe8\xb9\x08\x71\x1f\x1a\x32\x7a\x72\x74\x1f\x1a\x2a\x52\xef\xbf\x93\x1b\x3a\x7a\x6c\x70\x1f\x1a\x66\x87\x86\xc5\x48\x86\xb8\x9b\x1b\x36\x52\xe9\xbf\x93\x1b\x2e\x5a\x4c\xbf\x0f\x0d\x86\x1e\x97\x77\xc9\x3b\xd1\x60\x91\x2a\xf1\x9d\x68\xf0\xe3\x22\xe8\xbd\xdc\x10\x91\xea\xf0\x9d\x68\x22\xa5\xc9\x7b\xb9\xa1\x22\x15\xce\xe7\x3c\xbb\xf9\x94\x73\xe7\xcb\xad\xbb\xaf\x88\xcb\x7b\xb2\x83\xe8\x98\x47\x18\x1f\x8e\x9a\xa1\x10\x77\x14\xdf\xf6\x1f\x68\xaf\x04\x84\x79\x25\x5c\xc7\x7c\xa8\x5a\xfb\x8a\x7c\x52\x2d\x73\xf1\x50\x65\xfd\x15\x09\x55\xae\xf1\xdf\xed\x34\xf2\x27\xf4\xed\x9c\x99\xa9\xe3\xd8\xbf\xff\x80\x9e\xce\xd4\x03\x5a\xde\xcf\xd4\xbd\xda\x38\x9a\xa9\xdf\xee\xdc\xf8\x27\xf4\x25\xc5\xcf\x54\xd0\x29\xb0\xff\xf0\x93\x7c\xea\xff\xcf\xd4\xa3\x33\x15\x2c\x3d\x0e\x1f\x70\x6f\x9a\xfc\x13\x33\xaf\xdd\xd6\x15\x06\xfd\x46\x85\x14\xb4\xd7\x1c\x79\xac\x39\xff\x09\x59\x57\xfa\xff\x7c\x52\x3e\x7d\x47\xf0\x57\xe4\x93\xf1\xe9\x3b\x82\xfd\xf7\x15\xf9\xb4\xeb\x45\xfd\xf4\xdd\x5d\x44\x7f\x92\x56\x5b\xcd\x98\x8c\xcf\x2a\xfb\xe8\xde\x25\x9d\xdb\x50\xd7\x4f\x21\x83\xf3\xbb\x28\xa2\xbf\xd3\xd4\x1c\x35\x6e\xec\x3f\x90\xde\xd4\xd0\xc9\x1a\x1c\x1c\x6b\x65\x3b\x10\x3e\xea\x26\x1e\x1a\xd3\x7a\xd4\x63\x7f\x0f\xa7\x7a\x72\xef\x67\xec\xcc\xed\x56\xd0\xfb\x0f\xe8\x5f\x3c\x73\x8f\xac\x3d\x7e\x8b\x99\xfb\xf9\x4b\x8c\xf0\x66\x63\xff\x37\x1b\x6a\x50\x50\x57\x86\x12\xc8\x72\x67\xe7\xad\xa7\x17\xbf\xff\xf5\xd1\xc9\x4d\xd0\x2d\xf1\x60\x8b\xf0\x2d\x6a\x0b\x76\x45\xfb\xbf\xc9\x9f\xaa\xb6\x07\x8c\xf9\x37\x53\x9b\xbf\x7d\xdb\xff\x8d\xfe\x54\xb5\x3d\x10\xbd\x7f\xbe\xda\xae\xec\x05\xcf\xbc\x7b\x25\xc9\x3e\xf0\x3a\xd6\xeb\xaf\xa1\xb8\x77\xbf\x19\xfb\x80\xe8\xd9\x3a\x1d\x1d\x5f\x53\xb8\x8a\x08\x8f\x20\x8a\xab\xff\x5c\x45\x44\x44\xf6\x56\x71\x35\x97\xab\x88\xc8\xe8\x26\xed\x5e\x44\x54\x64\x0f\x71\x37\x47\x74\x04\xd1\xdd\x3a\x62\x22\x6b\xe5\xbb\x39\x62\x23\x2b\xbb\xbb\x39\xe2\xa2\x0b\x8d\x7b\x11\x1d\x55\xee\xd8\xf8\xea\xd4\x75\x44\xd8\x31\xa2\xbb\x75\x74\x54\xbd\x23\x1f\xe1\x88\x88\x64\xa7\xbb\x11\x91\xc7\xf1\xfa\x7e\x8e\xa8\x63\x44\xf1\x35\xbc\x5b\x5f\xa3\xf2\x8c\x2a\xde\xb5\xe7\xd2\x6f\xa9\xe3\xc5\xbe\x34\xe5\x09\x91\x35\xf4\xf4\x1b\x00\x18\xcd\xaa\x18\x8e\xe1\xa4\xc4\xc8\x18\x47\xcb\x28\x50\x00\x84\x8c\xcc\x10\x80\x26\x15\x82\x51\xdd\xe9\x67\x65\x20\x4b\x14\x07\x38\x4c\x55\x09\x96\xa3\x71\x9a\x25\x29\xc8\xc8\xea\xcb\x2b\xe2\xb7\xfd\xde\xbf\xd8\x0c\x9d\x83\x93\xbb\x93\xbf\xf8\x5e\x43\x9a\xb8\xd0\x88\xe8\xdd\x3c\x8a\xea\xfe\x81\x61\x81\x32\xcb\x4e\x4f\x31\x86\xf5\x9e\x32\x7a\x73\x06\xcb\x4e\x31\xe3\x48\xf2\x10\x5d\x64\x17\xaa\x9c\x29\x55\x84\x49\xdf\xd0\xdf\xf3\xa5\x29\xe0\xbd\x03\x37\x7e\x77\xac\x9d\x8d\x9c\x67\x65\x0e\x7f\xfa\x67\xe3\x75\x3c\x9b\xe6\xeb\x24\x35\xcc\xe4\x08\xa7\xd8\xcb\xd7\xb1\x16\xc1\xa3\x35\x38\x6f\xb0\xe5\x16\x6d\x88\x18\xcf\xc1\xbe\xa6\x6c\x4b\x4e\xd7\x1b\xdf\xeb\x89\x41\x03\x60\x76\x65\x12\xa6\x43\x52\x6f\xd9\x86\xb0\x59\x36\xd3\x84\x59\x14\x53\x1f\x18\xd3\xda\x6a\x36\xa6\xab\xb5\xfc\x70\xd1\xec\x4f\xac\x55\x3b\xd5\xf1\x49\x13\xe2\x28\x7c\x58\x98\xdf\xf3\xdb\xac\xc8\x85\x36\x57\xb7\x7b\x46\xaf\x98\xed\x95\x8a\x28\x99\xe5\x46\x95\x8f\x8f\xca\x30\xd3\x52\xb2\x8b\x6d\xaa\xbc\x5e\x7c\xe8\x0a\xd3\x94\xf9\x6a\x7d\x33\xea\xca\xfc\x64\xbe\x2a\xa8\x66\x5b\x79\x1f\x2c\x8b\x04\xbb\x10\xdf\xad\xb7\xa6\x06\x6a\x76\x5b\x5c\x74\xca\xfd\x61\xeb\xa3\xf8\x3e\x31\x7f\xbc\x84\x0f\x5c\x0b\x9d\xb4\x7b\x79\x7f\x1f\xd8\xc8\x78\x5f\xfa\x1d\x5c\x07\xf8\xe6\x5e\x7f\x39\x0f\x28\xc4\xb6\xb4\x98\x2c\xb0\x1e\xae\x4c\xa8\x1e\xb6\x78\xc3\xa0\x5e\x93\x0b\x98\xb3\x99\xb5\x87\x95\x11\xb7\x16\x26\x66\x3b\x03\x60\x9f\xed\x6a\x79\xd3\x53\x52\x8f\x7f\x9f\xd5\x0f\xf3\x91\x89\xd0\x3f\x9a\x8b\x33\x57\xe6\xc9\xf4\xb3\x37\xd2\xe7\xf7\x3a\xf1\x74\x54\xdb\xeb\x24\x60\x6f\x05\xb2\x52\x6f\x30\xc2\x73\xfa\xa0\x0f\xac\x1e\xdd\xdd\xac\xa5\x3e\x51\x10\xcb\x93\xa5\x41\xf0\xed\xec\xb4\x94\x5f\x52\xd2\xa6\x5d\xea\x7b\xe3\xcb\xdd\x6c\xaa\x2e\x1f\xf0\x09\xfc\xb1\x4d\x06\x57\xec\x99\xb2\x07\x9f\x7f\x8c\x7e\x8d\xbc\x8f\xfe\x0f\xcf\x3e\xfe\xb3\x5c\x8f\xaa\x28\xbd\xe9\x2b\x5d\xb9\xdc\x9d\xa8\x9d\x49\x15\x9b\x5b\x8d\xda\x72\x92\xcf\xa3\x15\xa9\x4a\x1a\x59\xa9\xde\x23\x9c\xcc\x9a\xb7\x99\xbc\xde\x5a\x67\xb3\x6d\x72\x94\x9a\x96\x71\x0e\xce\x55\x75\x3b\xc4\x53\xab\x65\xb6\x6c\x6e\x37\x25\x7c\x54\xd3\x47\xd3\x62\x0d\xa6\xb2\x93\x1f\x3f\xbc\xc5\xb4\xf7\x72\x9e\x5d\x17\x83\xff\xbf\xf7\xb2\x7b\x2f\xae\x5c\x4f\x3a\xe1\xf7\x31\xd0\x90\xc0\x31\x1a\x25\x29\x85\x62\x38\x09\x02\x12\x55\x71\x85\xa0\x00\xca\x91\x28\xad\x40\x02\xb0\x1c\x09\x65\x89\x92\x20\x83\x2a\x92\x02\x28\x28\x73\x32\x4a\xe2\x0c\x40\x15\x0a\x60\xfe\x23\x9a\xd8\x23\x95\xaf\x50\x60\x24\xae\x05\x46\x02\x65\x38\xec\x42\x47\xaa\x7f\xf7\x68\x79\xe9\x9b\x65\x85\x9e\x41\x8d\x98\x2d\xcc\x12\xdb\x29\xe8\xb9\x34\x9c\xc8\x04\xd3\x18\x38\xc5\x4a\xe5\xa3\xdf\x63\xd7\x3d\x6d\x94\x01\xd9\x15\x55\xa5\x3c\xdb\x0d\x85\xc6\xe8\xb4\x9f\x84\xc6\x1b\x5d\xed\x81\xd0\xc8\x33\x0b\xdb\x0c\xb1\x52\xd8\xf3\xdb\x14\x8c\x4a\x4e\xca\x0d\xdf\x2b\xf3\xf2\x6c\x58\x41\x81\xf5\x3e\xcd\xeb\x46\xaa\x50\x41\x53\x0c\xbf\xa5\x27\x28\x48\x61\xd3\x59\xab\x05\x75\x81\x87\xe4\x7a\x31\x83\x6f\xa2\xdc\x9a\xe0\x0b\x32\x6b\x30\x0e\xc9\xcf\xca\x1f\xbc\x9d\x6b\x96\x50\x6d\x00\xa6\x05\xc9\x2c\x37\x4a\x22\xbf\x8e\x84\xc6\xe6\x39\xd3\x0f\xeb\x27\x3e\x34\x86\x80\xac\x37\x91\xae\xc2\x3a\x98\xcc\x36\x35\xd0\x6d\x70\x74\xe6\x43\xb5\x39\x88\xca\xa6\x25\x8e\x06\x1f\x99\x7e\x79\x9e\x37\x2b\xcc\xfc\x7d\xee\xb5\xed\xba\xa1\x49\xc3\x0e\xf3\x11\x73\x5d\x09\x8d\xcf\xa3\x7f\x1a\x06\x12\xd0\x3f\x09\x8b\x7e\x9f\xcb\x8d\x61\x29\xdf\xeb\xa2\x81\xe2\x6f\xb4\xe7\x80\x95\xf4\xfe\x5a\x9f\xe3\x59\x38\x7c\xf9\xab\xf9\xcb\xad\xc0\x76\x72\x89\xbf\x1f\x3f\xce\xa4\x98\xd0\xb2\xe5\x56\x5f\x72\x43\x7c\xc0\x6b\xb4\x31\x3b\x7c\x5d\x4e\x31\xc2\x63\xf4\xc3\x29\xee\x16\xfa\x41\x8a\x69\xcb\xa6\x68\x8b\x1a\xfb\xd6\x5c\x88\x13\xab\xf5\xb6\x4a\x09\xfd\xbe\x4a\x0e\xad\x0e\x63\xe7\xaa\x6f\xb9\x96\xc5\xf4\x0b\x62\x3e\x4f\x77\x9b\x19\x66\x96\x05\x22\x6d\x62\x9b\x42\x0e\x48\x93\x8a\xba\x22\x26\xd9\x9a\x51\xcb\xae\x45\x7e\xd6\x2e\x2b\x6f\xc2\x68\x35\x99\xb3\x13\x34\xc7\xc7\xa7\x18\x77\x45\x7f\x7b\x86\xc1\x64\x92\x22\x69\x02\xc5\x69\x06\x00\x96\xa1\x19\x28\xb3\x32\x0b\x09\x94\xa4\x50\x19\x02\x5a\x02\x34\x8d\x62\x24\x05\x39\x99\xc3\x49\x20\x49\x0c\xa5\x30\x80\xa6\x69\x4e\xa2\x65\x9c\x05\x7e\x86\xc1\x9f\x94\x61\xae\x2e\xbd\x09\x94\x8b\x6f\x68\x0d\x6e\x1e\x15\x0b\x1e\xcd\x2f\xbf\xd1\xd2\xfb\x42\x7e\xc9\x2d\x4b\x73\xee\x8d\x40\x9d\x0f\xb5\x39\x5f\x36\x57\xd9\x75\x9e\xd1\x40\x83\x90\x44\x3a\xd7\xca\xce\x53\xeb\x2e\xd1\x63\x69\xc6\x79\x9b\x57\x9b\x3d\xa2\xa4\x90\x14\xde\xb7\x2b\xdd\xe1\xb2\xd1\xb4\x44\x16\xce\x68\x75\x8e\xae\x36\x10\x2e\x32\xa2\xfd\x81\x89\x54\xaf\x66\x73\x93\xe1\xef\x98\x5f\xee\x8a\xef\x4f\xa4\x1f\xb5\x87\x44\xf4\xcf\xe7\x17\x9e\x19\x56\x59\x9e\x99\xe9\x13\xa1\x01\x51\xa5\xdb\x65\x7a\x45\x39\xd7\xdc\xd0\xcd\xf4\x5a\x2f\xbe\xc9\x44\x37\x87\x51\xa0\x4c\x94\x34\xcc\x83\xff\xd5\xf9\xe5\x17\xf2\x77\x5f\x7e\xf9\x8b\xe2\x3b\xff\xa4\xfc\x12\xde\xc2\xdc\x42\x3f\xc8\x2f\xf5\xb9\xd6\xc1\x2d\xb5\x4d\x88\x5c\xb6\xad\x67\xc9\x2a\x3f\x58\x95\xcd\xb4\x62\x13\xa6\x28\x54\x3a\x4c\xa6\xa3\x0c\x3e\xac\x15\xfe\xd6\x74\x32\x03\x79\x4a\xcc\x8c\x11\x58\x2f\x5b\xda\x9c\xcb\xda\xc4\x86\x6e\x2c\x53\x9d\x36\x93\xa7\xe8\xa1\x80\x7f\x34\xba\x84\xde\xdd\x7e\xe0\x99\x0b\x5b\x98\xfb\xf2\x0b\x07\x25\x08\x15\x28\xc9\x14\xae\x00\x02\x63\x15\x5a\x52\x08\x8a\xa4\x49\x92\xe0\x08\x8e\x41\x15\x85\xa1\x50\x5a\x92\x58\x49\x05\x2c\xad\xd2\x84\xcc\x72\x32\x45\x33\xac\x8c\x32\x32\xe5\x3d\xbd\x40\xfa\x2d\x0d\xcf\xc8\x2f\xd4\xd5\xfc\x82\x61\xcc\x85\x27\xee\x82\xbb\x47\x55\xe4\x47\x33\x4c\x2e\x32\xbd\xa1\x60\x15\x72\xde\x5e\xaf\xd3\x0a\xfe\xbc\x31\x82\x85\xd2\x86\x67\xb0\xe7\x23\x18\xd8\xc1\x67\xf8\x77\x7b\x45\xa9\xa9\x77\xa6\x67\x95\x73\xc5\xca\x0a\x67\xfb\x6b\x01\xff\x58\xe7\x9a\x94\x5e\xeb\x1b\x59\x26\x6f\x4e\xda\x7a\x27\x2d\xce\x36\x93\xe2\x26\xc7\xcc\xe7\xa3\x62\xad\x8f\xeb\xf3\xd9\x70\x93\xe6\xda\x24\x65\x97\xca\x85\x6c\x9d\x7c\x9f\xd1\xa9\x49\xe9\x7d\x53\xb4\xd6\xb4\x9e\x09\x7b\x30\x1f\x9b\x4d\xa2\xba\xe0\xef\xd1\x6d\x48\xd6\x9f\xae\xbb\x5f\x90\xf1\xee\xca\x38\x4f\xa4\x7f\x7e\x4e\xae\x65\x3c\x0f\xd5\x33\xa2\x74\xd5\x5b\x36\x85\xa2\xfe\xe9\xf5\x53\xa3\xf4\x09\xfd\x6b\x85\xa6\x93\xfb\x91\x65\x5b\x74\xa0\x3f\xbf\x7f\x07\x1b\x7f\x5a\xe6\xbd\x37\xf3\xf1\x3f\x61\x4e\x6f\xa1\x1f\x64\xde\x9f\x15\x20\x9f\x9b\x79\x29\x0c\x03\x98\x8a\x53\x10\x53\x29\x08\x70\x45\x46\x25\x14\xe3\x70\x02\x53\x21\xc3\xe1\x0c\xa1\xca\x32\xce\x90\x0c\x2e\xe3\x04\x2d\x53\x1c\x8b\xaa\x32\xa7\xc8\x8a\x42\x2b\x1c\x46\x41\x3c\x78\x28\x1d\x7b\xa4\xf7\xea\x96\xda\x21\x89\xb3\x24\x7e\xe1\xe1\x5d\xff\xee\xd1\xb1\xab\x6f\x95\x39\x67\xf2\xbe\xce\xad\xea\x7d\xbe\xc9\x31\x2d\xac\xd5\x71\xba\xca\x5a\xcc\x15\x97\xb9\x74\xb6\x0b\x97\x1f\x4a\xb3\x31\xd0\x4d\x43\xd6\xaa\x3d\x3e\x71\xed\x70\xc8\xdf\xbd\x57\x2b\x1e\x96\xb1\x21\xab\xdd\xd3\x6f\x16\x05\x6c\x99\xa2\x9c\x4c\xe3\x8d\x5d\x76\xcd\x02\x3f\x78\xab\x73\x6d\x06\xac\xa9\x3a\x27\x19\x2c\xd3\xda\x36\xd6\xe8\x00\x53\x2a\xa8\xc2\x4c\xdb\x2d\x9a\x59\x15\xd2\xf3\x29\xbf\xcd\x12\x26\xd7\xb1\x1a\x1d\xfa\x83\x53\x46\xf3\xe9\x62\x90\x16\xf9\x39\x6b\x6c\x16\xdc\x54\x1f\x36\x85\x24\xd9\xb5\x10\x36\xe5\xb8\xcc\xc5\x87\xde\x49\x71\xe3\xde\xd6\x3b\xa6\x30\x0e\xfa\x8d\xb9\x92\x64\x8e\xa7\xd0\xbf\xaf\x16\x78\xc8\x5c\xe1\xcc\x77\xe3\x5e\xe8\xec\x11\xc9\xe9\x75\x39\xca\x3d\x9b\xfe\x0d\x47\x34\x3c\xff\xfb\xee\x55\xaf\xd5\x1a\xef\xd1\xd5\xc3\xb5\xc6\x27\xce\xd5\x2d\xf4\x83\x8c\x24\x77\xfa\x06\xb3\x40\x85\x94\xb5\xd5\xdb\x93\x61\x06\x9a\x0c\x56\x75\xac\xdc\x9c\xc1\x56\xea\x87\x53\x2c\xa5\x73\x2d\xb5\x87\x5a\x2d\x62\x95\x2f\x17\xad\x15\x29\xa5\xda\x42\xae\x54\x85\x33\xac\x6e\x73\x0d\xab\x81\x61\x8b\x76\x61\xa4\xb2\x68\xb6\xb3\x55\x0b\x12\x5e\xe8\x4d\xf9\xe6\xb3\x33\x12\xc0\x15\x20\xa9\x24\xe4\x14\x8c\x26\x71\x06\xc7\x69\x14\xc7\x19\x1c\x62\x0c\x0b\x08\x46\xe6\x18\x42\xe6\x30\x86\x91\x38\x8a\x51\x00\x4b\x63\x1c\x0e\x38\x4e\x22\x20\xa7\x12\x80\x03\x80\xf4\x33\x12\xfe\xa4\x63\xfe\xeb\x19\x89\xc0\xd0\xf8\xd3\xac\xdd\xdd\xa3\xfe\x9d\x47\x0f\xfa\x7f\x61\x46\x0a\x1d\xdc\x17\xb5\xea\x52\x10\xfb\x0c\x31\x93\x3b\x58\x5b\x99\xab\x69\x08\x36\xb3\x76\xb5\xd0\x69\x66\x27\x25\x03\xa2\x0e\x41\x82\x12\xdc\x2a\xd3\xa5\xde\x73\xfa\xdc\x26\xd7\xa4\xa7\x7c\x87\x60\x0b\xdc\x5c\xb3\x2a\x95\x56\x69\x6b\x56\x56\x73\xb3\x2b\x8a\x53\x7e\xad\xf4\xb7\xe9\xc6\xac\x29\xff\x94\x8c\x74\xcf\xc1\xf9\x33\x33\xd2\x83\xf4\x9f\x98\x91\x9e\x72\x68\x7f\x7a\x25\x8e\x72\xbf\xba\x69\x80\xe7\x7f\xdf\xd3\xb9\x6b\x19\xe9\x1e\x5d\x3d\x33\x23\x3d\x3a\x57\xb7\xd0\x0f\x32\x12\x2c\xad\xe6\x4d\x4c\x7a\x87\xe2\xa6\xd1\x2b\xe3\xad\x34\x47\x59\x05\xb1\x64\x8f\x44\xbe\xc2\x6b\x0a\xd3\x26\xd4\xa9\x39\x65\xca\x78\x61\xd1\xeb\x63\x12\x21\x88\xb9\x37\x21\xd3\x50\xd7\x12\xde\xae\xd8\xe6\x52\x98\x55\x26\x6f\x74\x7b\xda\x44\x71\x21\x97\xc1\xa4\x2a\x9b\x12\x33\xeb\x67\x67\x24\x09\x07\x38\xce\xc8\x04\x27\xd3\x24\x20\x49\x55\x66\x80\xa4\x90\x32\x47\xb3\x18\x47\x52\xb4\x8a\x12\x1c\xc7\xa1\xb4\x82\xe1\x32\xc9\xd0\x0a\x83\x4a\x24\x8a\x7b\x2f\x0a\xe3\x68\x85\x06\x84\xff\x4a\x19\xec\x91\x06\x6a\xff\xe1\xba\x8b\x89\x88\x22\x39\x34\xbe\xe1\x6c\x77\x37\xdc\xb5\x19\xe4\xa1\x2a\x5b\x6c\xbe\x37\xe7\x52\x05\x2f\xf2\x44\xbf\x37\x6b\x59\x95\xc5\x6c\x80\xa2\x6a\x81\xb5\xab\x25\x77\xc1\xd0\x5a\x97\xfb\x69\x7e\x40\xf0\xfb\x3c\xe4\x1b\x4c\x64\x52\x4f\xfc\xf4\x8e\x9a\x52\xf8\xad\x11\x99\xde\xfb\x3a\xcf\xb9\xb7\x84\x9c\x43\x54\xd6\x0b\xd0\x58\x35\x94\x7c\xbb\xbb\x51\xf8\x3c\x94\xe8\x7a\x13\x3a\xdb\x66\xa5\xd4\x07\x1f\xba\xd4\xae\xd5\xa6\x8b\x62\x45\xac\xe6\x48\xfb\x6d\x2a\xbc\x75\x47\x72\xb3\x81\xea\xa9\x41\xba\xbe\x4c\x99\x76\x7f\x21\xd2\xa9\x7c\x77\x28\xd9\x1f\x0c\xd5\xc4\x67\x05\xf2\xbd\x56\x4b\x90\x7b\x8e\x8c\xf6\x38\xf7\x84\x64\x3e\xc4\xde\xb0\x3f\x6b\xe9\x0c\x5a\x45\xcb\x85\xad\x33\x5d\x8b\x98\x3e\x44\xc1\x76\x69\x62\x9c\x58\xdc\xbc\x57\xb3\xdb\x3a\xe5\x64\x04\x39\xeb\xcb\x48\x4c\x1c\xab\x6e\x0c\xd3\x4c\xf7\x30\xfe\xae\x3a\xd6\x03\xf4\xf3\x9d\x7e\xc6\x7a\x80\x3e\xcf\xff\x75\xa7\xf9\x67\x63\x6b\xe6\x7e\x5d\xd4\x8d\xd1\x45\x31\xaf\xe9\xe2\xd1\xb9\x70\x6d\x21\x25\x47\xf0\xdd\xa4\x8b\xff\x30\xca\xd6\x2e\x2f\x66\xcc\x8c\x68\x75\xf5\xda\xa0\x99\x19\x2c\x52\xb3\x79\xd1\x92\xe7\x59\x2d\xbf\xb0\xa9\x3e\x3a\xcb\x95\x46\xd3\xed\xac\xbd\x4e\x55\x2b\x66\xab\xa2\x17\x06\x42\x8e\x2b\xab\x7a\xfa\xe3\x4d\x7d\xab\xe6\x97\x33\xf8\x3e\xed\x15\x0a\x4c\x2d\x95\xea\x8a\xe6\x66\x55\xfd\x78\x7e\x67\x01\xa9\x10\x24\x24\x49\x14\xa3\x28\x42\xa5\x49\x40\x73\x32\xa0\x09\x16\x27\x29\x8e\x55\x49\x85\x53\x51\x80\x73\x12\xaa\x42\x42\x86\x04\x2b\x93\x90\x54\x18\x94\x44\x15\xa0\xaa\x18\xae\xaa\xea\xe1\x1d\x70\x0f\xc4\x56\xfc\x6a\x6c\xa5\xb0\x0b\xaf\x58\xdc\xdd\x0d\xf7\x9f\x3f\x1a\x5b\x2f\x74\x14\xf8\xd7\x1d\x6b\xcc\x98\xd8\x9a\x55\x72\x4e\x01\xdf\x2c\x26\xcd\x74\x8d\x77\xde\xde\x54\x75\x92\xa9\xa5\xba\xea\xa8\x57\xfc\xe0\xcc\xdc\xc6\xf9\xc8\x8b\x0a\xc5\xce\xd3\x0b\x5c\xd2\x1b\x05\xa3\x24\x49\x2b\x08\x16\xce\xb2\xf9\x9e\xe5\x48\xab\x35\x05\xeb\x74\xd1\xce\x08\x2a\x00\xdc\xdb\x6c\xb4\x66\x86\xcb\xde\xbc\xf0\x7b\xc5\xd6\x47\x63\xdb\x83\xfe\xfc\xc6\xa4\x3b\x39\xe9\x89\xb1\xf5\x57\xae\x15\xaf\xae\x5b\x7f\x61\x6c\xe3\x9f\x14\x5b\x59\xf2\x30\x3e\x66\xcf\x77\x29\xb6\x1a\x4d\xa6\xe5\xd8\x23\x53\x68\x7c\xf0\x55\xf0\x66\x10\x24\xdf\x69\xe8\x45\xbc\xd7\x62\xd3\x80\x67\x25\x79\xd3\x19\x40\xb5\xdc\xa0\x9c\x05\xd5\xd9\x2c\xb7\x05\x9c\x31\x16\x4b\x0b\x74\xab\xeb\x77\x58\x41\x87\x7d\xbb\xb1\x61\xf8\x56\x11\x5f\xbc\x03\x13\x97\xeb\x78\xa5\x37\x7a\xfe\xa9\x3a\x83\x53\x0c\x45\x4b\x98\x2a\x29\x2a\x4b\x48\x28\x8b\xe1\x8c\x4a\xb0\x14\x54\xa1\xa2\xa2\x1c\xca\xc9\x32\x8b\xa3\x12\x2d\xcb\x90\xc1\x54\x4c\x46\x59\x8e\x51\x30\x8a\xc4\x19\x59\xa2\x80\xa2\xbc\xec\x5f\xad\xfd\x40\x6c\xbd\x5a\x40\xa1\x28\x3c\xfe\x65\x6c\xc1\xcd\xf0\x73\x34\x8f\x46\xd6\x0b\x27\xe9\xfe\x75\x47\x3d\x39\x26\xb2\x66\x66\xe4\x24\xd3\x4c\x67\x78\x69\xf2\xa6\x32\x6f\x75\xd3\x01\xce\x64\xd4\x2d\xce\x72\xba\x5d\x77\x72\xa2\xb2\x64\x80\x3e\x6a\x51\xe9\xfc\x9c\x53\x0b\xb3\x94\xbe\x11\xb6\x13\x7e\xd4\xff\x18\x32\xe9\xea\x10\x1b\x11\xed\x3c\x2d\xa3\x6f\x36\xc6\xe0\xd5\x29\x3f\x9f\xbf\xf7\xd8\x25\xfa\x7b\xad\x5a\x1f\x8e\x6c\x8f\x46\xd6\xad\xd5\xcc\x57\x9f\x18\x59\x7f\x65\x5d\xf8\x67\x44\xd6\x7b\x23\x1b\xff\xa4\xc8\x7a\xef\x0e\x26\x88\xac\xc3\x54\x89\xef\x36\xd6\xcd\x02\x59\x31\x52\xf4\xec\xad\xda\xb7\x86\x85\x5e\x86\x5c\x53\x52\xce\x6a\x7e\x0c\x00\xc4\x97\xfd\x2e\x54\x37\xa3\xc6\x60\x63\xa6\x97\x72\xab\x66\xf2\x85\x9e\x8d\xd7\xd3\x5b\x5c\xec\x2b\xe8\x14\x1a\x62\xc5\x12\x21\xa7\x91\xcd\x72\xb9\x8a\xa9\x15\x25\xe9\xaa\xf5\xf8\xe9\xbc\xf0\xaf\xa5\x86\x7f\xd6\x6f\x39\x87\xdb\xdd\x53\x6e\x87\xdf\xd2\xbf\xf5\x57\x66\x43\x18\xbd\x5f\x25\xe6\x73\xb9\xf0\x2f\xf3\x47\x09\x22\x8d\x56\xa9\xc6\xb7\x86\x48\x45\x18\x22\x9f\x35\xe5\x84\xdb\xe8\x6f\xc6\x45\x3e\x3f\x89\xeb\x08\xd6\x73\x9c\x9f\x23\x7c\x95\xfb\xc8\xaf\x76\x45\x7e\xe2\xea\xf0\x82\x8a\xd0\x7b\x60\x8e\xde\xf9\x32\x7e\x8a\x74\xc7\x64\xcf\x09\x77\x17\x63\x48\x57\x2c\x35\xbb\x02\xf2\xf9\x00\xfe\x8a\x1c\xe0\x77\x7f\xfb\x03\x6e\x54\xcd\x73\xa6\xf5\x66\xc1\x6f\x9a\xd4\x98\x77\xdd\x5d\x79\x9f\xdc\x73\x25\x3b\x4f\xe4\x92\xa4\x17\xd8\x4a\x2c\x79\xec\x33\xc2\x57\x9f\xc2\x7d\xae\xf4\x71\x64\x2e\xc9\x7f\x91\xb5\xab\x1a\xf0\x4d\x5a\xda\x7a\xd6\xbe\x13\xa4\x24\xe6\x84\xc1\x15\x19\xb2\x2d\x81\xef\x08\x3e\xe8\x31\x16\xa4\x2e\x46\x9d\xa1\xdb\x2e\x89\x05\x44\x72\x2c\x08\xc3\xde\x15\xcf\x8d\xef\x63\x8f\xf3\xe3\xe3\x49\xc6\x51\x8c\x5f\x4b\xfb\x5f\x4a\xbc\x9b\x9d\x03\x8a\x30\x27\x47\x7b\x81\x63\x7e\x7c\xe0\x57\x64\xf7\x23\xa2\xbb\x9f\xa5\x3e\xc7\x5c\xe8\xb7\xf7\x93\x31\xb8\x34\x6d\x67\x62\x41\xfb\x2c\x9f\xe1\x5f\xf2\x4f\xc4\x6b\x68\xc0\x17\xa4\x5f\x14\x5a\x02\x12\xc6\x51\x6a\x23\x62\xbd\xe3\xe5\xf0\x3f\x4f\x58\x9f\x02\x7b\xfa\x04\x9e\x5d\x34\xc9\x98\x0d\xfb\x8a\x3b\xea\x9c\x3e\x35\xc3\x80\xd6\xb3\x58\x3b\x20\x4b\xc6\xa0\x0f\x7f\xc2\x66\xa0\xd8\xf3\x77\x2f\xeb\xd8\x7f\xa7\xf7\x23\xa6\xeb\x63\x48\xc6\x7f\xf0\x3b\xc1\x3b\x7b\x7d\x45\xc0\x72\xa9\x6b\xb2\x1f\x9f\x4d\x4b\x89\xc9\x9b\x63\xe8\x3a\xab\x77\xff\x0e\x4e\x83\xb4\xed\x33\x1c\x41\x17\x66\x7b\xf7\x6b\x51\x47\x1c\x9f\xa6\x11\x4d\x79\x45\x3e\x79\x83\x3f\xc5\x31\xab\x29\x4f\x62\x53\x53\x12\x33\xb8\xff\x3d\x6c\xe5\xf5\x4c\xee\xbb\xca\xb4\xb9\x1c\x2f\x9f\xc5\x77\x80\x2b\xcc\x7a\xcc\xda\xe1\x2e\x49\xce\x0b\xe0\x6c\x9e\x27\x40\x80\x2b\xc6\xa6\xef\x14\x21\x8c\xe1\x9c\x10\xe6\xd2\xb5\xca\xa9\x79\x97\x0c\x01\xf3\x07\x1c\xf7\x2a\xff\xb2\xa2\xed\xdd\x2f\x7d\xbb\xb1\xeb\x71\x5d\x1f\xa3\x0b\xb3\xbc\xfb\xa9\x81\xe3\xe8\x77\x96\xa3\xb0\x5e\x9f\xc5\xd6\x09\xce\x84\xe1\xf9\x0c\x83\x8e\x3f\x25\xce\x23\xd3\x7a\xc0\x71\xbf\x49\x5e\x33\x3f\xc7\x52\x5c\x22\x12\xb0\x6f\x5c\x2f\x9c\x65\xf8\x14\x59\x84\x73\x05\x46\xf8\x0c\xc3\x5e\x65\xd0\x7b\x45\xe9\x73\xd8\xf3\x50\x25\x62\x6e\xf7\x5e\xd4\x58\xd6\x3c\xde\xa1\xf5\x34\xf5\x45\xf0\x5d\x63\x32\x02\x9e\x84\xd3\xe7\xe8\xf1\x08\x5b\x52\x2e\xaf\x6a\xf3\x39\xbc\x25\xe2\xe9\x32\x2f\x3b\x8e\x75\xd3\x9c\xaf\x96\x8f\x71\x74\x8c\x2b\xf1\x8c\xfa\x1b\x90\x18\xfe\x96\x40\xb3\xc6\x8e\xb6\x80\x4f\xe1\x30\x8a\x2d\x99\xdf\x06\x0c\xbe\x22\x51\x96\x5f\x91\x20\xc4\xcb\xba\x69\x43\x65\x0c\x9c\x18\x21\x9e\x10\xb7\x03\x3c\xd7\x38\xbe\x71\x75\xe4\x62\x7d\x9a\x76\x6f\x50\xec\x55\xbd\x69\x86\x02\x37\xe3\xc8\x92\xc3\x1e\x9b\xc6\x18\x28\x8a\x05\x6d\xfb\x51\x85\x5e\x25\x70\xb4\x71\x0e\x6e\x47\xb6\xaa\x3e\xe0\x0d\xbc\x3f\x6e\x07\x97\x70\x5f\xe7\xf8\x8c\x97\x1d\x23\x0c\x56\xe1\x2e\x3e\x67\xbb\xbc\xbf\x28\x72\x11\xeb\xd5\x65\xbf\x0b\x74\x85\xd1\x60\x0d\xe5\xa2\xdc\x1b\xd1\x93\xb8\x3d\x87\xfa\xea\xf2\x2d\xa9\x25\x87\x90\x3f\xdb\x18\x8e\x50\xdf\xb3\xde\x8c\x47\xb7\x58\x9a\x96\x1b\xf8\xde\xa1\x65\x6b\xa6\xf1\x7c\x45\x47\x29\x5c\x67\x3f\x32\x20\xb9\x30\x41\xe8\x49\x5e\xe4\xb8\x43\xff\x21\x1a\x57\x25\x09\xc1\x26\x17\x62\x69\xc1\x77\xcd\x5c\xd9\xbf\x44\x9a\x73\xc4\xae\x8a\x75\x6e\x50\x72\xf9\x76\x45\x94\x9f\x26\xd3\x8e\xc0\x55\x39\x62\xcb\x8f\xc7\xa8\x0f\x2f\x57\xfe\x19\xae\x1d\xc5\x7e\x76\x03\x7c\xab\x83\x1f\x23\x3d\xde\x42\x3d\xc9\xc3\x2f\x91\x48\x22\xc3\x95\x7d\xdd\x45\x62\xcf\x4b\x5f\xa7\x88\x13\xf1\x7e\x3d\x89\x85\x37\xdb\x3f\xc3\x6c\x4e\xf1\xdf\xbd\xd5\xf7\x16\x71\xfb\x44\xbe\xab\x30\x8e\x25\xd3\x9c\xdf\xad\xe5\x0b\x38\xaf\x2e\x11\x3e\x7f\x56\xa0\x03\x34\xdd\x46\xbe\xfe\xf3\x9f\xc8\x8b\x6d\xea\x4a\xe8\x78\xf3\xe5\xfb\x77\x07\x6e\x9c\x2f\x5f\x5e\x91\x78\x40\xd9\x54\x92\x01\xfa\x87\x23\xf1\xa0\x92\xb9\x9a\x4c\x9d\x44\xe4\x8f\x40\x2f\x33\x70\x04\x1a\x61\x61\x57\x14\xf7\x8c\x0c\xf9\x81\x10\x44\xe2\xce\x00\x4d\x19\xab\xa1\x73\xbb\x7c\xe5\xd7\xf4\x07\x04\x64\x91\x7c\xbd\x25\x94\x0a\xe2\xfe\x4c\x0e\x69\x09\x79\xa1\x25\x88\x59\xa1\x1d\x39\xa6\xf2\xee\xd6\x45\xa4\xdb\xc8\xb9\x26\xd3\x12\xda\x9d\x56\x29\xdb\x71\xbf\xca\x09\x55\xa1\x23\x20\x59\xbe\x9d\xe5\x73\xc2\x85\x83\x4d\x77\xdf\x71\xfc\x71\x1c\x29\xc5\x3c\x4f\x19\xc7\x74\xae\x9c\x5a\xc6\x71\x72\xac\x9f\x68\xd9\xe8\xac\xb2\x82\x85\xfe\x95\x23\xde\x58\x4d\x04\x5b\xd9\xbf\x5c\x0f\x61\x3e\xce\x69\x61\x57\x25\xb8\x6c\x30\xb7\x69\xe0\xb4\xa8\xf4\x17\xaa\x21\x86\x99\x63\x5d\x9c\x29\x83\x3d\xd7\x28\xa2\x25\x8e\xdf\x41\x21\xf1\xa6\x71\x52\x43\x4a\x62\x1d\x08\x50\x14\xa8\x20\x0b\x60\xac\x80\xae\x6f\x8f\x38\x2d\xe5\x11\x61\x50\x6a\x77\xda\x3e\xcf\xbe\x64\xdf\xe6\x70\x3b\x7e\x07\xfa\x0a\x8e\x5d\x8c\x10\xc9\xb5\xea\x8d\x30\xe3\x87\x51\x11\x48\xbf\x45\xe2\x0f\x0f\x3e\x4a\xe0\x3c\xee\x3f\x77\x29\xd2\x07\x8f\x52\xfe\xec\xe9\xed\xe2\xe5\x2a\x49\x9e\x02\x0b\xc8\x0e\xb4\x90\x77\x60\x6d\x35\x63\xf2\x19\xa7\xa8\x2f\xfb\x93\xd2\xd7\xeb\x58\x3c\xa2\xd7\xf0\xfc\x11\xe9\xf4\x8d\x72\xbb\x6f\xf2\x85\x9b\xe5\x58\x33\x26\xd0\x76\xc6\x3a\x70\xff\xf3\x56\xda\x2f\xaf\xc8\x0b\xfa\xf2\xe5\xcf\x53\x5b\x89\x20\x3a\x67\x2c\xe7\x34\x7d\xdc\xf1\x31\x87\x5b\x77\xc6\x8f\xf4\xb9\x2f\x98\xd8\xda\xc4\x70\xd7\xfa\x09\x14\xba\x1b\x74\x46\x1b\x34\xf9\x25\x81\x2e\x11\x9f\xd8\xfd\xe3\xd7\x50\x9b\x4c\x1d\x44\x33\x1c\x38\x81\x56\x64\x1a\xbf\x7e\x45\xd6\x10\x59\x6b\xba\x8e\xbc\xad\xa0\xb5\x45\xa4\xed\x8e\xa0\x6d\x22\xce\x14\x38\x88\x66\x23\xeb\xe9\xfe\x5b\xcd\x46\x9c\x29\x44\x54\xcd\xb2\x1d\x44\x73\xe0\x02\xd1\x0c\xef\x1b\xd9\x5c\x2c\x4d\x5b\x73\xa0\xab\xdc\x04\x6c\x1d\x69\xdb\x47\xbe\x6f\xdb\xf8\xf2\x47\x64\x5e\xcf\xae\x3a\xdd\x39\xdd\x85\xb2\xc5\x6a\x03\x15\x57\x33\xae\x9a\x3e\xd3\xdc\x97\xa0\xf9\xd1\x85\x09\x75\x55\xc4\xc0\x9d\x27\x16\x5a\x9b\xbb\x68\x6c\x73\x65\xc9\xf7\x61\xda\x2d\x42\x3d\x8e\xfd\xba\x5f\xec\xf8\x20\xdc\x36\xfc\xe6\x88\x76\xb3\x8a\x28\xc0\x01\x6e\x1a\x43\x94\xd5\x62\xe9\xe9\x59\x87\x0e\xf4\xe2\xe4\xff\x0b\x00\x00\xff\xff\x7b\x3c\x5b\x1f\x85\xd6\x00\x00") func failed_transactionsHorizonSqlBytes() ([]byte, error) { return bindataRead( @@ -726,7 +208,7 @@ func failed_transactionsHorizonSql() (*asset, error) { } info := bindataFileInfo{name: "failed_transactions-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8f, 0x12, 0xa7, 0x91, 0xa5, 0x7a, 0xae, 0x57, 0x16, 0x4a, 0xd2, 0x49, 0x33, 0xe2, 0x70, 0x8c, 0xc2, 0x4b, 0x1e, 0x41, 0xf0, 0xda, 0x6e, 0xd8, 0xa6, 0xab, 0xc4, 0xa1, 0x95, 0x1c, 0x19, 0x98}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb4, 0xa, 0xb6, 0x80, 0x69, 0xce, 0x9d, 0xd9, 0x5b, 0xf6, 0xcd, 0xf9, 0x2, 0xf0, 0x55, 0xc3, 0x6, 0x86, 0xf3, 0x5b, 0x8c, 0x13, 0xb9, 0xde, 0xf0, 0x25, 0x47, 0xb0, 0xef, 0x10, 0xee, 0x11}} return a, nil } @@ -770,46 +252,6 @@ func ingest_asset_statsHorizonSql() (*asset, error) { return a, nil } -var _kahuna2CoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x57\x93\xe2\xca\xb2\xee\xfb\xfc\x0a\xc5\xbc\xf4\xac\xa0\xd7\x42\xde\xcc\xdc\xd9\x11\xc2\x5b\x09\x27\xdc\x8d\x1b\x13\x55\xaa\x12\x08\x84\x24\x64\x70\x27\xce\x7f\xbf\x81\x84\x11\x34\xd0\x34\xf4\xec\x73\x56\xec\xa5\x87\x99\x06\xa5\xbe\xfc\x2a\x33\x2b\xcb\x52\xfa\xf3\xcf\x2f\x7f\xfe\x49\x34\x1c\x3f\x18\x79\xb8\xdd\xac\x11\x08\x04\x00\x02\x1f\x13\x28\x9c\xb9\x5f\xfe\xfc\xf3\xcb\xf6\x7e\x2e\x9c\xb9\x18\x11\x86\xe7\xcc\x8e\x02\x0b\xec\xf9\xa6\x63\x13\xd2\x5f\xfc\x5f\x54\x42\x0a\xae\x09\x77\xf4\x6b\xfb\xf8\x99\xc8\x97\x76\xbe\x43\xf8\x01\x08\xf0\x0c\xdb\xc1\xaf\xc0\x9c\x61\x27\x0c\x88\x9f\x04\xf9\x23\xba\x65\x39\xfa\xf4\xed\xb7\x26\xb2\xf0\x2f\xd3\xfe\x15\x78\xc0\xf6\x81\x1e\x98\x8e\xfd\xcb\xc7\xfe\x16\xf7\xad\xb0\x6e\x99\x5b\x68\x6c\xeb\x0e\x32\xed\x11\xf1\x93\x78\xd1\x3a\x05\xf1\xe5\xc7\x5e\xb7\x8d\x80\x87\x7e\xe9\x8e\x6d\x38\xde\xcc\xb4\x47\xbf\xfc\xc0\x33\xed\x91\x4f\xfc\x24\x1c\x7b\x87\x31\xc6\xfa\xf4\x97\x11\xda\xb1\x2e\xe8\x20\x13\x6f\xef\x1b\xc0\xf2\xf1\x89\x9a\x99\x69\xff\x9a\x61\xdf\x07\xa3\x48\x60\x09\x3c\xdb\xb4\x47\xb1\x88\xe7\x2c\x7f\xf9\x58\x0f\x3d\x33\x58\x6f\xc1\x0d\xe3\xc7\xce\x00\x18\x78\xfa\xf8\x97\x0b\x82\x31\xf1\x93\x70\x43\x68\x99\xfa\xeb\xd6\x62\x3a\x08\x80\xe5\x8c\x7e\x7c\xf9\x92\x6b\xa9\x0d\xa2\xac\xe4\xf2\x7d\xa2\x5c\x20\xf2\xfd\x72\xbb\xd3\xde\x49\xfe\x15\xba\x23\x0f\x20\x3c\x36\xfd\x00\xae\x7d\x3c\xff\x71\x53\xda\xd7\xdd\x79\xe8\x78\xe1\xcc\xbf\x4f\x18\xdb\x8b\x7b\x24\x2d\x8c\x46\xd8\xbb\x47\x72\xcb\xd3\xc0\xf8\x4e\xc9\x3b\xc4\x20\xf6\x03\xc7\x30\xb0\x67\xda\x08\xaf\x6e\xcb\x02\x5d\x77\x42\x3b\x80\xc0\x02\xb6\x8e\xfd\x1f\x5f\xe4\x5a\x27\xdf\x22\x3a\x72\xa6\x96\x4f\x48\xab\x4a\x6d\x70\xc1\xbc\x8e\xb7\x26\x22\xf4\xac\xaa\xb4\x3b\x2d\xb9\xac\x74\x12\x0f\x9d\x0a\xfe\x72\xa7\x78\x7d\x0f\x7e\xb0\x7a\x1f\xfa\x20\xf3\x01\x54\x03\xdf\xc1\x39\x29\x76\x3f\xb6\x17\xfa\x81\x65\xda\xd8\xbf\x85\x7c\x10\xba\x1b\x77\xcb\x02\x47\xd9\xe0\x06\xee\x51\xe8\x7e\xdc\x43\xc8\xdf\xc2\x3d\x08\xdd\x8d\x1b\xcb\x9b\xb6\xe1\xdc\xc0\x3d\x0a\xdd\x8d\xeb\x86\xd0\x0f\xe1\x0d\xcc\x58\xe0\x23\x78\x96\xe9\x8f\xe7\x21\x0e\x6f\x59\x36\x29\x76\x3f\x36\xc6\xde\x2d\xb3\x46\xf7\xef\x46\x8b\xaa\xf1\x2d\xb8\x58\xe0\x6e\xbc\x38\x2b\x8d\x31\x40\xb7\x61\x4f\xe4\x7e\x33\xfa\x2e\x53\xe2\xf9\xaf\x3b\xd5\x40\x60\xdf\x00\x87\xc0\xbe\x9b\xf0\x2e\xfb\xdd\xe2\xba\x17\xf9\x28\xe6\xb6\x0f\xf0\x3e\xec\x56\x6a\x87\x1c\xc9\x9e\x03\x5f\x4c\xb9\xb7\x65\x0f\xa9\xf1\x3d\xb1\x63\xa2\x7b\x47\xf2\x90\xb8\x6e\xcb\x1d\x13\xd1\x3b\x72\x87\xc4\xf2\xae\xdc\x5d\xfc\x8e\x09\xe5\xb6\x5c\x9c\x24\xde\x95\x39\x54\xf9\x77\x24\xb7\xf5\xf8\xb6\x48\x5c\x37\x6f\xcb\x9c\x54\x85\xdb\xa2\x10\xd8\xb7\x05\xf6\xa1\x7a\x97\xd4\x36\xf2\x76\x82\xf9\x7e\x27\xaf\xb4\xcb\xaa\x92\x14\xb6\xdc\x91\x3f\xb7\x76\x12\xed\x6c\x29\x5f\x97\xdf\x60\xfd\xf8\x12\xf7\x8d\x15\x30\xc3\xdf\xf7\xdf\x11\x9d\xb5\x8b\xbf\xef\x1e\xf9\x41\xb4\xf5\x31\x9e\x81\xef\xc4\x9f\x3f\x08\x75\x69\x63\xef\x3b\xf1\x67\xd4\x65\xce\xb6\xf2\x72\x27\xbf\x47\xde\xe3\x7d\x39\x41\x3c\xbd\xb9\x03\xce\xaa\xf5\x7a\x5e\xe9\xdc\x40\x8e\x05\x08\x55\x39\x05\x20\xca\x6d\xe2\x65\xdf\xbf\xdd\x7f\xe7\x47\x20\x2f\xe7\x9a\xf7\xc5\xdf\xe9\x3c\x58\xe8\xdd\xf2\x9c\xd8\x52\x51\x3b\x67\xf6\x24\x7a\xe5\x4e\xe9\x40\x2b\xd9\xa1\x3d\x51\x7f\x44\x39\x23\xf2\x91\xc2\xbf\x01\x89\x0c\xd0\xa8\xa5\xdd\xd1\x76\x14\xe3\x7a\x8e\x8e\x51\xe8\x01\x8b\xb0\x80\x3d\x0a\xc1\x08\x47\x66\xb8\xb3\x03\xbe\x15\x43\xd8\x00\xa1\x15\xfc\x0a\x00\xb4\xb0\xef\x02\x1d\x6f\x47\x13\x2f\x67\x77\x97\x66\x30\xfe\xe5\x98\x28\x31\x40\x38\x29\x6c\x32\x20\x77\xc5\x8c\x42\xf7\x58\xc8\x7d\x00\x5c\x32\x78\x1c\xe5\xc9\xa4\xfb\xed\x0b\x41\x10\xfb\x6f\x4c\x44\xe8\x63\xe0\x01\x3d\xc0\x1e\xb1\x00\xde\xda\xb4\x47\xdf\x38\xfe\x8f\xc8\x37\x8a\x56\xab\xbd\x46\xd2\xdb\x07\x6d\x30\xc3\x17\x84\x45\xf1\x92\xf0\x02\x58\xe1\x25\x69\x8a\xa2\xcf\xc5\x2d\xe0\x07\x33\x07\x99\x86\x89\x11\x61\xda\x01\x1e\x61\xef\x20\xf2\xe5\x8f\x73\xdf\x1f\x6a\xf1\x93\xb6\xf0\x1f\x32\xc4\x6e\x20\x40\x40\x73\x64\xda\xc1\xd9\x4d\x1f\xcf\xed\x70\x76\xf9\x9e\x1d\xce\xfc\x10\x62\x3b\xf0\xb6\x43\xc1\xf3\x62\xc6\x32\xa6\x6d\x58\x60\x3b\x62\x44\xd8\x0f\x2e\xd3\x89\x05\xc7\xce\x0c\x23\x67\x06\x4c\xfb\x82\x14\xcb\x9e\x93\x0e\xc6\x1e\xf6\xc7\x8e\x85\x7c\x22\xc0\xab\x73\x66\x86\x05\x46\xd7\x18\xdd\xf4\xcd\xce\x22\xe1\x56\xab\x65\x02\x68\x5a\x66\xb0\x2d\x5c\x5c\xfe\xbd\x49\x2c\xeb\xd6\x6d\x73\x64\x6f\xfb\x42\x5b\x5a\xf1\x37\x89\xde\xc0\xa1\x6b\xb1\x33\xfa\xaf\x68\x58\x4d\x64\x4b\xf9\x6c\x95\xf8\xf6\x6d\xef\x8a\x7f\xfd\x24\xc8\x3f\xfe\xb8\xf1\xf4\x39\xc1\x73\x9c\x37\x05\x78\x0f\xf1\xc4\x97\x67\x68\xa7\x7e\x7e\x0f\xe9\xad\x79\xce\xe0\x2e\xd8\x2f\xc6\x7c\x5b\x31\xb6\xed\xdf\xa3\x75\x62\xdb\x65\x8c\xab\x83\xed\x20\x9c\xac\x0b\x27\x75\xe0\xad\xd2\xd3\xf6\xf9\x51\xf5\xa7\x1d\xe3\x98\xc8\xee\x3b\xe0\x8f\x13\x64\xf8\x37\xb1\xed\x7a\x78\xf1\xae\x10\x0c\xf5\x29\x0e\x2c\xd3\x0f\xde\x15\x3d\xf4\xb6\xf7\xe1\x1e\x7f\xad\x5b\x8e\x8f\x03\x73\x76\xa5\xe6\x47\x89\xf5\x42\xdd\x4a\xf8\xfc\xb4\x53\x7f\xc0\x3b\xf3\xf7\x51\xcf\x95\xd0\xb9\x36\x36\x38\x85\x39\x96\xe2\x5a\xb4\xec\x3a\x5f\x8f\x7a\x6c\x37\xf0\xfa\x76\xa8\xe4\xd8\xbb\x33\x83\xc6\x33\x2f\xe8\x5a\x06\x8d\xc2\x1d\xf8\x3e\x0e\x2e\xd9\x33\xae\xab\x57\x6f\x83\xd9\xb6\x5a\x5d\x86\x76\x3d\x53\xc7\xf6\x95\x24\x16\xdd\xbc\x96\xe1\xa2\x9b\x04\x72\x42\x68\xe1\x6d\xbc\xe9\x66\x34\x23\xf9\xa9\x59\x34\xe1\xe1\xdd\x90\x35\x2e\xcb\x99\x5f\x77\x05\xbc\x12\x1b\xbb\x27\x77\x16\x3e\x7b\x74\x6f\xf7\x6b\x01\x11\x77\xd8\x1f\x8d\x87\x78\x58\x1f\x87\x83\xe9\x5e\x6a\xf8\xb9\x37\x35\xd7\xf1\x82\x83\x35\x72\xf9\x82\xac\xd5\x3a\x04\x79\xde\x6c\xe2\x55\x00\x82\x00\xcf\xdc\x80\xd8\x56\x0b\x3f\x00\x33\x97\xd8\x76\x99\x9c\x30\xfe\x86\xd8\x38\x36\x7e\xdb\xd8\x1a\xc0\xb4\x42\x2f\xd1\xd4\x5e\xd3\x10\xac\x5d\xfc\xbe\x53\xe2\x69\x89\x04\xee\xdb\xb4\x7f\xd0\x78\xc5\x3b\xbb\x99\x0d\xc7\x3b\x77\xea\xb7\xc8\x12\xff\x22\xc8\x3f\x08\x59\xc9\x11\xf1\xc7\xff\xf3\x93\xe0\x39\x8e\xe1\xfe\xb8\xe8\xab\xe4\x30\xec\x61\x97\x25\x67\x79\x92\x39\xf7\x8a\x35\xe2\x89\xb6\x6d\xad\xbb\x48\x68\x3b\x76\x7c\x82\x8a\x1f\xc2\x1d\x09\x0f\xfb\x27\x0d\x10\x73\xb1\xc7\xe8\x61\x70\xa8\x4b\x6f\xf9\x24\xc6\xbc\x8f\x72\x4a\x4c\xd6\xdd\xd1\x32\xc6\xc4\xe6\x3e\xbe\xd5\xc2\xbc\xe5\x99\x18\xc3\x3f\xca\xf3\x08\x71\x3f\xcf\x37\x8d\xdc\xd9\x7d\x6c\x2f\xb0\xe5\xb8\xf8\x9d\x26\xed\xa8\xfa\x89\x86\x28\x31\xdd\xf1\x84\x09\xf6\xf3\xb5\xdf\xee\xf1\xc3\x31\x8a\xde\x33\xc4\xfc\x4a\x43\x73\x6a\x84\xfd\x3c\xf0\x09\xe2\xb9\x21\x4e\xb4\x5d\x35\xc6\x71\x8e\xe8\x61\x63\x1c\x27\xc5\xbf\x1d\xeb\xed\xe9\xe0\xed\x42\x9d\xba\x55\xbb\x13\x33\x5c\x8f\xb2\x4a\x2c\x01\x3c\x32\xec\x8a\x5a\xfc\x1b\x99\xda\xf4\xfd\x10\x7b\xf7\x43\xe9\x0e\xba\x38\x3a\x7d\x63\x96\xc0\x32\x67\xe6\x95\x1e\xc5\xcd\xb1\xe0\xff\xe4\xa8\x2a\x11\x9d\x89\x55\x95\x87\x46\x51\xc9\xe7\x3f\x6b\x1c\x95\xc0\x7c\x7c\xfc\x73\x0b\x35\x76\xda\x19\xd2\xce\x93\xff\xba\x5c\xf1\x4e\xa6\x7b\x1f\x0e\xf2\xe4\x1a\x5a\x1c\xe6\xc1\xea\x24\x15\xdf\x31\xde\x38\x0f\xc0\x55\xb4\x4a\x79\xf5\xae\x3e\x06\xf6\x08\x5f\x1c\xd8\x27\x8d\x93\x5c\xb6\x7b\x3c\x57\x1f\xe7\xce\x1f\x37\xd1\xbf\xd9\x3e\xd0\x41\xeb\x4b\xc6\x09\x56\x1e\xf6\x43\xeb\x62\x76\x0f\x56\x33\xfc\xee\x78\xee\xb8\xc4\xfa\xb8\x3d\xcf\xd6\x2d\x1e\x35\xea\xd9\x8a\xf3\xb7\xbb\x0c\xb7\x7b\xe8\x96\xf5\x76\x22\x97\x0c\x71\x5f\xd8\x9d\xad\x70\x3f\x62\xa8\xdc\x76\x64\x6d\x38\xde\x3b\x93\xa1\x44\x4e\xee\xc8\xef\xd8\xac\xac\xb4\xf3\xad\x0e\x51\x56\x3a\xea\xc9\x84\x68\x57\xae\x69\xf9\x36\xf1\xed\xa5\x98\xe3\x95\x4e\xab\xd2\xe3\x86\xbc\x92\xed\x95\x58\xad\xdd\xab\x2b\xf9\x41\x41\x10\x5a\x5a\x8b\xae\x77\x54\x5e\x69\xb0\xd5\x7c\xae\x5b\x91\x3b\x9d\xac\xd6\xcf\xb5\x54\x66\x50\x2e\xb4\x5f\x5e\x89\x97\x61\x51\x0a\x87\xcd\x9f\x3f\xb7\x7f\xa3\x52\x85\xda\xfd\xcd\xbd\x5b\x14\xff\x33\xca\xe1\x27\x0a\x91\x69\x35\x06\xa5\x72\x8d\xce\x96\x99\x82\xd2\x64\x33\xfd\x5a\xa1\xae\xe4\x6a\x85\x8a\xa6\x34\x34\xba\x34\x60\x86\xf5\x42\xbb\xa4\x2a\x5a\x36\xaf\xca\xed\x9e\xd0\xcc\x0a\x6a\x9f\x2e\xbd\xbc\x12\x52\x7c\x89\xbb\xff\x25\x92\x7c\x25\xa8\x57\x82\x7c\x8d\xbd\x4b\xbc\x6c\x0b\x27\x37\x65\x59\x96\xa3\xc2\x91\xaf\x04\xb3\xbf\x77\xfc\xf7\x8f\x1f\xef\x31\x7c\xdc\xcc\x7b\x86\x11\x33\x5a\x14\x59\x89\xa4\x44\x89\x7c\x25\xe8\x1b\x1c\xb9\x53\x8e\x2f\xdb\x7b\xb1\x44\x55\x1c\x04\x6d\x36\x37\x64\x69\xda\xb4\x33\xb0\x40\x29\xf6\xaa\xb0\x29\x6d\x06\x85\x5a\xa9\x22\x17\x6d\x98\x6d\xc8\x29\x6a\x0e\x51\xbe\xbc\xdc\xca\xe7\x7f\xbe\x5c\xf7\xe7\xf9\xfc\xdb\x3d\xae\xbc\x02\x75\x7d\x56\xed\xa3\xf1\x71\x3a\xb3\x76\x70\x01\xcf\x20\x49\x34\x38\x86\xc7\x98\x17\x11\x05\x69\x01\x72\x50\x94\x0c\x9a\x01\x06\xc7\x50\x14\x14\x38\x5e\x02\x34\x6b\x00\x83\x62\x49\x06\x20\x12\x72\x34\xe4\x19\x06\x92\x02\xc4\x92\xb4\x35\x32\xf9\xe4\xb5\xc5\xe0\x04\x1a\xd0\x98\xa1\x0d\x83\x66\x45\x40\x0a\x90\xc4\x02\x69\x20\xca\xe0\x11\x43\x89\x3a\x65\x00\x1d\xd1\x24\xe4\x75\x9d\x14\x75\x86\x41\x9c\x20\x70\x34\x27\x89\xbc\x48\xd1\x1c\xa0\xf8\x97\x7d\x80\xc6\x4e\xfd\x5f\x79\x65\xfa\x55\x93\x5d\xa7\xd7\xed\x6a\x46\xc8\xd9\x39\xa9\x44\x93\xab\x49\x26\xe5\x93\xa3\xc0\x5f\x96\x97\x1b\xaa\x8f\xda\xbd\x01\xc8\x54\x40\x61\xb4\x95\xcf\x2b\x6c\x0d\x6c\x5c\xba\xf9\x2e\xf2\x50\xee\x53\x6c\x24\x96\x99\xfe\x1b\x0a\xf2\xa9\xd7\xcb\x59\x9a\xb8\x12\xa8\x0c\x67\x30\x90\x17\x18\x89\x05\x0c\x83\x01\x90\x44\xc1\x60\xf1\x36\x0e\x45\x80\x11\x0b\xb0\x80\x59\x1a\x40\x1a\x61\x4a\xc7\x9c\x0e\x75\x11\x09\x06\x64\x75\x84\x91\xce\x42\x56\xd8\x06\xd9\x67\x04\x3b\x36\x0c\x11\x42\x1e\x19\x06\x2d\x30\x8c\x61\x50\x06\x63\x18\x80\xa3\x58\xca\x60\xb6\x2c\x38\x81\xc2\x98\x41\xa2\x0e\x30\x8f\x20\xa2\x68\x09\x02\x9d\xa3\x28\x03\x90\xd0\x40\x3c\xfb\x12\xa5\x28\x8a\xe3\x24\x4e\x90\x78\x6e\x1f\xb1\x59\xba\x31\x9c\x50\x4a\xc8\x39\x24\xac\x08\x3d\xd6\x5e\xab\x0b\x6d\x55\x64\xba\xae\x33\x4d\x2d\x0a\xb2\x1a\x64\xa9\x2a\x5d\x17\x32\x02\x3f\x0c\x87\xad\x92\x27\x69\xa8\x5f\x85\x9d\xaa\xa9\x5b\x86\x3a\x59\x0b\xf4\x60\x58\xa8\x68\xd3\x4a\xa3\xab\x57\x3b\xdc\x38\x58\x38\xde\x8c\x8a\x23\xa7\xdf\xe8\xd6\xe5\x28\xa2\xca\x87\x7f\xe2\xb4\xe7\x1f\x3f\x2f\xe5\x46\x73\x17\x3b\xcc\x46\x1a\xcf\xe4\xb6\x5b\x93\x02\xb9\xbb\x9a\x06\xab\x1c\xd3\x6f\xab\x2e\x63\x06\xab\xf6\x22\x3f\xab\xf3\xb2\x36\x5d\x66\xda\x6c\xbe\x65\x2f\x52\xb5\x20\x48\xaf\xf5\x4d\x7a\x25\xa6\x53\x56\x21\x23\x92\x9e\xdd\x5d\x09\x13\xba\xee\xcd\x68\x29\xef\x86\xbe\xd6\x4a\x8d\x16\xd2\x30\x42\x2e\x7f\x38\xa2\x73\x64\xe5\xb7\x44\xdd\xef\xbc\xee\x8c\x68\x8a\x82\x0c\x89\x18\x83\x27\x05\x52\x60\x00\x8f\x44\x92\x15\x44\x46\x22\x25\x52\x60\x78\x48\xea\x86\xc4\x00\x2c\xf1\x98\x62\x49\x92\x15\x24\x91\x12\x78\x4a\x60\x25\x81\x84\x50\x84\xb4\xb1\x8d\xc6\x4f\xa9\x15\xc8\x10\x48\x5d\x62\x58\xa4\xeb\x90\x07\xa4\xc1\x32\x06\xc5\x19\x12\x47\x73\x0c\xcd\x03\x24\xe9\x88\x14\x78\x96\xc7\x3c\xcf\x62\x56\x22\x0d\x03\x4a\x86\x40\x02\x03\x23\x88\x0d\x91\x7e\x89\x1a\xff\x43\x44\x53\xfb\x88\xde\xf4\x37\x81\xad\x6a\xce\x86\x9f\xcf\x4a\x92\x5a\x17\xb2\x55\x41\xf3\x6c\x2e\x3b\x5f\x33\xe3\x8d\xb5\x16\x27\xfd\x14\xb9\xc1\x4c\x3e\x28\xc1\xe9\x64\x2a\x07\x54\x87\x5b\xcd\xe5\xfa\x62\x08\xd7\xc0\x84\x9d\x41\x8b\xf5\xcd\x0c\xaf\x0d\x9b\xbc\x29\x85\xb9\x91\xab\x9b\x43\x3d\x6a\x7d\xe3\x88\x5e\x1e\x2d\x6e\x6d\x2a\xd4\xa2\xdc\x2e\xf5\x37\x79\x4b\x36\x48\xae\x36\x56\x84\xb9\x39\xef\xcd\xab\x8b\x49\x69\xdc\x31\x27\x30\x9d\x19\x15\xf9\x82\x1f\x56\x02\x69\xb9\xee\x74\xf4\x35\xed\x34\x9a\xe9\x82\x61\xb5\xb5\x35\x08\x6c\x25\x43\xb7\xc2\xe1\x94\xab\xe4\xd2\xa1\xa1\x57\xd3\xc1\x62\x31\x8a\x6a\x4c\xfd\x42\xc4\x5e\xce\xb1\xff\x01\x11\xcb\x4b\xb4\x4e\xd1\x18\x48\x50\xa2\x28\x4a\xe0\x48\x81\x93\x28\x52\xd7\x29\x28\x21\xce\xe0\x0d\x86\xe6\x0d\x2c\xd0\x0c\xd0\x01\x10\x0d\x81\x91\x30\x23\x90\x18\xeb\x0c\x2f\x21\x11\xb1\xdb\x46\xfa\x53\xa2\x9e\x16\x21\xcf\x00\xc4\xe9\x88\x96\xa0\x08\x01\x49\x33\x82\xa1\x23\x0a\xb1\x50\x27\x59\xcc\x89\xbc\x28\xd1\x90\xd5\x59\x8a\x65\x11\xc5\x93\x0c\x45\x72\x34\x29\x51\x3c\x2d\x0a\xb4\x0e\xb6\x1d\x0e\x36\x11\xb1\xf4\x3e\x62\x57\xc5\x4d\xae\x23\x8d\xf4\x92\x3a\xa3\xe5\x16\xab\x36\xa7\x25\xc5\xcb\x35\xa6\x3c\xdf\x63\x35\x39\x8f\x07\x05\xba\x40\x5a\xcb\x90\xf5\x17\x4e\xab\xdd\x33\xa6\x9b\xfe\x6a\x53\xf3\x16\xb3\xa6\xd5\x81\x2d\x40\xb3\xed\x66\x36\x35\xb6\x27\x65\x24\x14\x36\xb4\x5a\xb7\x56\xf9\xd6\x38\xb6\xf0\x36\x62\x33\x09\x8b\xbb\x6a\xb6\xe2\x4c\xb5\xc6\x9a\x5a\xca\xe9\x3e\x74\xa7\xe1\x2c\x5b\xf5\x24\x65\xc1\x64\xc4\x94\xd1\x2a\x06\x2c\xa2\xd6\xa3\x86\x57\xcd\x2c\x9d\x60\xe2\x75\x37\xed\x19\x1b\x8e\xca\x4c\x5a\x29\x69\x0b\xb9\x63\x8d\x9d\xa9\xd7\xc9\x17\xf2\x64\x4f\x5e\x65\xda\xd9\xd6\xc0\xd1\x7d\x27\x42\x6e\x5e\x88\xd8\x5c\xf9\x92\xd7\xff\x03\x22\x56\x22\x31\x27\xe9\x0c\xcd\x8b\x22\x80\x1c\xa2\x48\x6c\x20\x0c\x48\x1a\xf1\x1c\x32\x10\x83\x20\x05\x81\x48\x1a\x24\x42\x06\xcd\xf2\x14\xcd\x73\x98\x42\x80\xa3\x68\x8a\xe3\x10\x8a\xba\x95\x9f\x12\xf5\x1c\x4f\x23\x8e\x61\x59\x03\xf2\x82\xc1\xb0\x14\x4f\xb3\x12\x0b\x68\x4a\x17\x38\x8a\x02\x3c\x2f\xd1\x80\x85\x24\x27\x09\x12\x4b\xf1\x24\xa0\x44\x0e\x33\x50\x42\x14\xcf\xd3\x9c\xc8\xe9\xdb\x1c\xcb\x25\x22\x96\x39\xf4\x1a\xa6\x7e\x3e\x9c\xc3\x69\xab\x40\x65\xa8\x69\x73\x93\x09\x51\x9f\x16\xd7\x30\xa5\x4f\xbc\xea\xbc\xa1\x73\x2c\x93\x0b\x97\xb4\x3d\xa0\x8a\x41\xda\xe9\x16\xa6\xad\x30\x2f\x96\x53\xad\x9a\x5b\x53\xa9\x1c\xb5\x9a\x67\xed\x00\x6f\x36\xa3\xd4\x74\xd1\x10\x01\xa8\xf1\xfa\x40\x07\xc7\x5e\x43\x26\x11\x44\xf6\x26\xe0\xb5\x4a\x9f\x83\x6b\x3e\xb3\xd4\xb1\x5f\x5b\xf8\x95\x4e\xbd\xd2\xb0\xd3\x83\xb4\x9f\x06\x99\x92\x95\x57\x83\x59\x87\x9b\x2d\x51\xaf\xd6\x55\xf2\x29\xda\xd8\x34\x7b\x95\x4a\xdb\x2c\x95\xb4\x96\x3b\x9b\xce\xdb\xcb\x5e\xdf\xca\x0c\xaa\xc5\x02\x2b\xd8\xad\xa1\xd9\x2b\x2c\xa3\x1c\xab\x5d\x88\xd8\xbc\x7f\xc9\xeb\x7f\xf7\x88\xbd\x32\xca\xbb\xb0\x04\xff\xc4\x98\xf1\xed\xfa\xed\x33\x60\xd7\x16\x18\x9f\xc3\x3c\x5f\x23\x7c\x02\xed\xca\x0a\xdf\x13\x88\x57\xd6\xe2\x3e\x3a\xe2\x4e\xac\xc7\x1d\x67\x3c\xe4\x7e\xbb\x4d\xb7\x59\xae\xdd\xea\x77\xb5\xba\x46\x0f\x06\x6a\xb5\xa4\x09\xb9\x61\x4f\x2d\x37\xb3\x1c\x53\xe8\x77\x6b\x45\x41\xe1\x4a\xed\x36\xcd\x97\x7b\x72\x6d\xa0\x66\x4b\xe5\x6a\x3c\x6a\x88\xc7\xb6\x59\xd1\x05\xd6\xc6\x77\x18\xaf\x65\x29\x83\x25\xd7\xe2\x8d\xd2\x6c\x33\x6d\x16\x98\x21\xa4\x7a\x50\xc0\xb6\x55\xeb\x4f\x7b\xf2\x22\x37\x3e\x46\x5f\xd4\x00\x64\xa3\x3f\xb7\xd5\x2c\x6f\x72\x56\x1e\x2f\xa8\x16\xa5\xbb\x41\x7d\x5e\x59\x77\x45\xbe\x51\x5b\x0c\xc7\x53\xcd\x6a\x37\xa7\x52\x77\xe9\x36\x66\x45\x3a\x65\x86\xb0\x1b\x3d\x94\xd1\x25\x6d\x19\x3f\x3f\x3a\xfc\x13\x35\x68\xd9\xe5\xe1\x73\x4e\x96\xa5\x6c\xa2\x16\x67\x72\x94\xdd\x15\x45\x09\xb6\x4b\xd3\xb5\x24\xcf\x73\x9b\x4d\x37\xd5\xd1\x9b\xd9\x41\x6e\x9c\xcd\x98\x3e\xad\xa9\x78\x53\x08\xd5\x39\x67\x94\x23\xb8\x0c\x32\x0a\xe5\xf5\x7c\xdc\x16\x68\x9d\x75\x94\xa9\xbe\xd9\x54\x07\x1b\xb5\xb1\xc8\xca\x48\xec\x4d\xc3\xb2\x55\x0b\xa7\xe9\xae\x20\x0a\x4a\xbf\xc4\x0e\xdb\xf3\x92\x9b\x57\xd2\xc2\xc2\x0c\x30\x9a\x6d\xec\xba\x9d\x6d\x77\xdb\xe6\xb0\x82\x06\x54\x69\xc5\x87\x1c\xec\x4e\x6c\xb9\xf9\xf3\xe7\x79\x6b\xf1\xc9\xae\x61\x9e\x72\x4d\xfd\xd4\x35\xb9\x4c\xd8\x56\x9b\x59\xa6\xdb\xb0\x8b\x8e\xbc\x96\xac\x45\x65\x5e\x09\x94\x71\xc9\x5c\x97\x4b\x6e\xcb\xca\xcd\x6b\x34\xab\x66\xad\x75\xc5\xda\x1c\x5d\x93\x3b\xcb\x36\x1f\x36\xbd\xcc\xf3\xc3\x62\x71\xd8\x66\x01\x5e\x15\xb1\xe4\x15\xd9\xf6\x66\xd0\xd8\x74\xa5\x75\x1e\xe5\x17\x61\xa7\x51\xa1\x1d\x37\xab\x7a\xba\xbc\xe2\x0b\x2b\x23\x9d\x11\xd4\x85\x6f\x2f\xf8\x4a\x7e\x3d\xd1\x0d\x2f\xdb\x42\x74\xad\xdd\x75\x43\xb6\x32\x99\x68\xc3\xf4\xb0\x81\x53\xcd\xec\xf2\xb7\x9b\x9e\x7d\xca\xf4\xcd\x33\xd3\x67\xc7\x85\xca\x30\xd5\x51\x8c\x52\x3d\x0c\x53\xc3\x6c\x57\x09\x0a\x1e\x1c\x57\xe4\x1a\x5f\xc4\xf5\x31\xe3\xf7\x1b\x03\x76\xdd\xcf\xb7\x8a\xf9\xa3\xe9\xf3\xcf\x9a\x5e\xe8\xb8\x45\x54\x76\xc2\xa0\x28\x56\x52\x13\x5d\xa9\x3a\x1a\xd5\xc5\xe5\x79\x3a\x0d\xf2\x55\xa5\x63\x36\x18\x0a\xf2\xdd\x4e\x56\x30\x54\xb6\xcf\xaa\xeb\x32\x6c\x66\x66\xb5\x4d\x53\x75\x8a\x8b\x72\x07\x3a\x26\xc5\x36\xc7\x8e\xcd\x37\x10\x5a\x3b\xba\xad\xf7\x99\xf6\x3a\x3b\xfa\xed\xa6\xe7\x9e\x32\xbd\x76\x6e\x7a\x26\x35\xd6\x7a\xad\x22\xdb\x59\x4e\xb8\x7c\x38\xf5\x05\xad\xd1\x2f\x3a\x55\x4c\x09\x0d\x35\xc7\xb7\xc5\xf4\xca\x75\x16\xee\x6a\xbc\x72\x8f\xa6\x2f\x3c\x6b\xfa\x89\x5a\x53\x20\x66\x95\x4c\xe8\x8d\x16\xf3\x32\xb4\x3a\x9b\x0d\x26\x6d\xc1\x64\x26\xf2\xb0\x95\x1b\xe6\x3a\x8b\x4d\x2f\x65\xf0\xab\x21\x28\x51\x0b\x76\xba\xca\x50\xed\xf4\xd2\x91\xa5\xd1\x5c\x11\xca\x7e\x83\x62\x5b\xa5\x0a\xcb\xd8\x5a\x97\x5f\x5a\xd3\x75\x5b\x48\x71\xad\xdc\x2e\xea\xaf\xb7\x2e\x97\xb6\x39\x3c\xd0\xba\xec\xb7\x3a\x1c\x9c\x49\x1a\xdc\xb6\x4b\xca\xe8\x06\x07\x59\x51\x90\x18\xda\x60\x49\x20\x32\xba\xc1\x70\x02\x66\x91\xce\x92\x34\x4f\x32\x22\x4b\x93\x3c\x0d\x19\x9e\x23\xb1\x00\x19\x8a\xc7\x0c\x00\x98\x33\xe8\xa4\x53\xa3\xaa\x11\x87\x76\x6d\x6d\xcd\xfb\xea\x7a\x82\x83\xa2\x46\x4d\x72\x56\xc9\x15\x31\x54\x5b\x72\x1f\x59\x8b\xee\x70\x11\xf0\x58\x0b\x70\x6b\x90\x15\xd5\xfc\x7b\x3d\x9d\x2b\xdb\x1a\x3e\x5c\xf8\xe3\xd6\x86\x43\xe1\x2d\xe0\x07\xd1\xa6\x49\xb4\xdb\xbc\x74\x76\x6d\xbb\xe1\x4f\x0f\x07\xce\x6b\xd4\x05\x1e\xbb\x2a\x06\x3c\x7d\x6c\x2e\x76\x37\xcf\x79\xfc\x57\xb4\x3e\xf6\x75\xf7\x93\xe6\xaf\xdf\x09\x2a\x5e\x31\xfb\xea\x63\x6f\x81\xbd\xaf\xdf\x89\xaf\x0b\x8a\xfa\x8b\xfa\x8b\xfc\xba\xbb\xa1\x87\x9e\x87\xed\xa0\x16\x15\xed\xeb\x77\x82\x3b\xfd\x3e\x13\xed\x6b\xf5\xbf\x7e\x27\xfe\xef\x97\xbd\xa2\xff\xfa\x92\x54\x1b\x49\x6e\x81\x21\xa4\x05\x9d\xc4\x2c\x0f\x0d\x64\xb0\x06\x8f\x75\x86\x21\x29\xc8\x92\x3c\x29\x91\x24\x0f\x75\x4e\x67\x18\x83\x93\x04\x81\xd7\x69\x5e\x14\x90\x40\x92\x8c\xc1\x30\x0c\xc3\x0b\x8c\x8e\xd1\x8e\xd1\x01\xd7\xc6\xab\xe0\xeb\xf7\x33\x6d\x71\x61\xb6\x65\xff\xfa\x9d\x20\x4f\x6e\xfd\xf7\xd9\xf3\xbe\x0d\xdc\x2d\x2f\x04\x45\x83\xd6\x05\xc4\x4b\x06\x6b\x48\x0c\x85\x45\x4c\x51\x48\x10\x31\x16\x24\x11\xf3\x3a\x8d\x78\x16\xf2\x34\x66\x69\x9d\xe7\xd8\xed\xf0\x4b\x44\x3a\xc2\x92\x20\x0a\x58\x04\x2c\xf3\xf5\xcb\x05\x0d\x57\x6c\x80\x0d\x86\x02\x34\x09\x18\x69\x0b\xcf\xe8\x98\xa6\x69\x81\xc3\x40\xa4\x04\x41\x10\x79\x08\x74\x8e\xe5\x39\xde\x60\x18\xa4\xeb\xac\xc1\x18\x58\xe7\x49\xb4\x8d\x01\x83\xe2\x19\x24\x7d\xdc\x06\xd4\xeb\xdb\x7b\x4e\x18\xb8\x61\xf0\xb9\x65\xbf\x65\xe1\x67\xd7\x69\x3e\x62\xe1\xa7\x75\xfd\xa6\x28\xfb\xc7\x06\xff\xd8\xe0\x1f\x1b\xfc\x63\x83\x7f\x6c\xf0\x8f\x0d\xfe\xb1\xc1\x3f\x36\xf8\x8d\x36\x88\xfe\xfa\x7f\x5f\xfe\xfb\x9e\x41\xc3\xfe\x20\xa4\xf8\x57\xd6\xe7\x65\x88\x07\x0d\x14\x79\x0f\x92\x8d\x83\xa5\xe3\x4d\x5d\xe0\xfb\xee\xd8\x03\x3e\xbe\x80\xd4\xc1\x7e\x40\xb4\x73\x05\x42\x89\x85\x89\x1f\x44\x1b\xbb\x01\x9e\x41\xec\x11\x34\x49\x71\xf7\x28\x32\x1c\x4f\xc7\xbe\xee\x3a\xf6\xd6\xf6\x16\x08\x6d\x7d\x7c\xae\x28\xfa\x15\xf3\x3d\x60\xf1\x90\x6d\xb7\x4b\xd0\xbf\x5c\xfe\xdd\xa0\x29\x30\x67\x91\x3b\x5f\xcf\xc7\x50\x47\xdf\x7f\x1d\x83\xed\x50\x28\xd2\xfe\x25\xe1\xed\xaf\x06\xc6\xf7\x09\xce\xc0\x2a\x58\xf9\xe6\xe6\x4e\x71\x0f\x47\x03\xb7\x77\x84\xef\x0b\x85\xed\x38\xd6\xd7\xdd\x68\x43\xe2\xa5\xeb\x65\x3f\x42\x8f\xa6\x5c\xe5\x45\xb5\xe7\xea\x42\x55\xe1\xc9\x61\xa7\x57\x57\x35\x6c\xaf\x38\x9f\xcb\x67\x10\xdd\x93\xba\xb3\x14\xe3\x72\x6d\x8a\x2b\x8c\x6a\x4b\xf6\x38\x31\x1b\x4f\x9b\x2c\xa5\x21\x65\x34\x1a\x3d\x72\xcc\xd5\x17\xcd\xea\x48\x14\x29\x63\xca\xe4\xe5\x99\xcc\x36\x47\x03\x4f\xb1\x72\xb6\xbf\x82\x93\x79\xd8\x5f\x1f\x66\x04\x2a\xe6\x93\xd3\x34\x8f\xcc\x28\x64\xe4\x6a\xc1\x53\x2b\x2a\x85\xd0\xa2\x56\x4b\x35\xfc\xc6\x84\x4e\xb1\x68\xa3\xba\x32\x1c\x78\x61\x9f\xaa\x87\x60\xcc\x05\x4b\xb1\x54\xb1\x4c\x7d\xd9\xb7\x94\xe6\x4c\x0a\xf3\xdd\xc9\x82\xcc\x82\xd2\x72\x5a\x36\xfa\x75\x56\xed\xd9\xed\x1c\x35\xe7\x82\x8e\x54\x4f\x1b\x43\x49\x3c\xf2\xc9\x0e\x9e\x5c\x1b\xcb\x3c\x32\x0d\xd6\xcc\x8e\xc1\xc6\xec\x04\xfd\x3e\x5c\xaf\xd3\x13\x21\xc7\x4a\x8b\xb0\xa4\x6f\xe6\xcd\x22\x5d\x15\x2c\xa9\x53\x9b\x39\x18\xea\x8d\xcc\x7a\x38\xb0\xeb\x05\xae\xa3\x55\x16\x70\x5c\x18\x08\x92\x3c\x1b\x8b\x95\x6c\x89\xda\xa8\x39\xcb\x25\x47\x12\x08\xa1\x96\xee\x34\x18\xda\x30\x76\x74\x26\x6a\x8d\xb2\x82\x56\x65\x99\x1f\xd9\xd2\x6a\x29\x7b\xbd\xcd\x10\xbb\x74\xbd\xab\xb3\x61\xa5\xe8\x51\x43\x43\x70\x7a\x4b\x96\xaa\x77\x1b\xed\x65\xaa\xbb\x60\x74\xb1\xa1\x75\x02\x4d\xa3\x9d\x05\x1b\x42\x8a\xa6\xd3\x95\x36\x33\x28\xe6\xd6\xa3\xde\x64\x96\x2f\x35\x3b\xfe\xec\xe9\x78\x1b\x1d\xfc\xbf\x7c\x76\x2d\x32\x8e\xc7\x8f\xc5\x6f\xb3\xbc\x31\x37\x3d\x26\xcc\x35\xe1\x9c\xad\xf1\x66\x91\xd3\x44\x91\x09\x2a\x29\x36\x60\x97\x45\xad\x49\x37\x49\x41\xa4\x16\x76\xca\xef\xf5\xc6\x12\x4c\x55\xea\x4d\xa4\x2d\xc4\xaa\xdc\x18\x54\x27\x78\x5d\xcb\x49\x38\xdf\x5a\x63\x85\xa3\x0a\xd8\xaf\x0c\xeb\xd3\x30\x1d\x6a\xcd\x28\x8c\x32\xa0\xbd\x6c\xf3\x6e\xd8\xca\xf7\xb5\x52\xaf\x95\xab\x17\x39\xca\x80\x9b\xca\x82\x5b\xab\xfe\xdc\x91\x36\xf6\x44\x57\x85\x1c\x40\x13\x6d\x70\x8c\x97\xc6\x66\xb8\xea\xc0\xd0\x50\x0a\x83\x74\xb5\xed\xaf\xdc\x7a\x21\x9d\x52\xca\xfc\x50\x61\x66\x0b\xd6\x19\xf1\x6e\x46\x1d\xcc\xfb\xa5\x02\x1d\x29\x89\x77\x50\x25\x16\x0b\xe4\xb3\xf8\x8b\xae\x68\x0f\x40\x3e\xde\x83\x7c\xb0\x77\x3e\xde\x87\x7c\x94\x3f\x6c\x64\xcd\x66\xb9\x4e\x1b\x73\x53\x92\x4c\x65\xab\x5a\xa8\x05\x06\x30\xc0\x82\x5f\x95\x3b\x0b\x96\x71\x3b\x23\x95\x6f\x9a\x0d\xec\xb3\x61\x5a\xe1\x8f\x78\x99\xe3\x0c\xe1\x87\xe3\xe1\xd6\xd4\xe8\x95\x9f\x17\x3d\xb1\x94\x77\xf5\xd7\x1c\x1f\x9d\x71\x3c\xf9\x45\xc7\x21\x57\x73\xac\xce\x4a\x1c\xc3\x20\x89\x11\x80\x44\xf2\x3a\x89\x79\xcc\x91\x14\x43\xd3\x10\xf2\x24\x69\x18\x98\x61\x68\x68\x88\xa2\xa8\x43\x56\x60\x21\x62\x69\x9e\x42\x2c\x6d\x70\x2c\xcd\x0a\xe4\x6e\xeb\xd4\x49\x46\xaf\x9f\x79\x34\x63\xa6\x33\x64\x8d\xac\x14\xd7\xc1\x78\xa9\x50\xd6\x80\x04\x6b\xd7\xa1\x24\xa5\xb4\x5a\xd4\xb2\x6b\x95\x0b\x32\x79\x3d\xdb\x5d\x2c\x0b\xd2\x92\x19\x05\x9e\x6a\x0f\xe5\x3b\xae\xab\x5b\xf0\x22\x0f\xe7\x9e\xd1\x3f\x48\xa7\xf4\xc7\xf4\xbf\x5d\xb3\xb8\x62\x77\x09\x61\x96\xe5\x48\xa8\xeb\x94\xc8\x90\x90\x47\x40\x64\x0c\xc8\x8a\x14\x00\x50\x64\x18\x04\x49\x16\x01\x64\x50\x58\x14\x11\xc7\x8b\x80\x24\x69\x81\x45\x2c\xc9\x88\x88\x63\x28\xbc\xdb\x00\xf4\xd6\xee\x89\x72\xe7\x44\x5a\xd7\x68\xc1\xde\xb4\x7a\x8d\xf5\xd4\xab\x83\x4e\xc6\x48\x4f\xda\xea\xac\x83\x38\x2f\x55\x2d\xab\xf3\x66\x67\x56\xb5\x56\x2b\xb4\x88\xe4\x2b\x5a\x36\xb5\x2b\xd4\xf2\x61\xbb\xe7\x9f\xd3\xaf\xea\x8f\xe9\xbf\xd7\xee\x90\x14\x05\x09\x20\x24\x19\x8c\xc4\x09\xba\x24\x48\x3c\xa2\x10\x65\x40\x9a\x11\x68\x12\x41\x8c\x28\x0e\x91\x82\x20\x31\xba\xc0\xd2\x82\xc0\xb0\x1c\x67\xd0\x42\x54\x31\x24\x40\x73\xbb\x6d\x2c\x6f\xed\xfe\x89\xe5\x4e\x64\xa8\x8b\xe5\x8e\xee\x67\x17\xc5\x9a\x16\xca\x34\x56\x02\xc7\x5d\xf6\x56\xa8\x33\x14\x5b\xfa\x4a\xa4\x33\xed\xd5\xba\x99\x71\xe9\xe5\x64\xd9\x08\xc0\x8c\x69\x65\xcf\xeb\xa3\x7c\xf8\x9c\x6c\x91\xd2\x8a\x5d\x50\x42\x4e\x24\xbb\x13\xd1\xad\x6e\x8a\xd3\x65\x3f\xcd\x92\x13\x77\xca\x60\x90\x36\xcd\xdc\x7c\x9a\xe7\x4c\x57\xd7\xfb\x30\x22\x99\xed\xca\x8b\x89\x2a\xcb\xa7\xf5\xfd\x8d\x6f\xf2\x27\xfa\x64\x6f\x65\x52\xb5\x91\x62\x4f\x20\xa8\xea\x05\xbf\xaf\xd1\x46\xbe\x5f\x37\x94\x91\xe6\xeb\x53\x19\x20\xbf\x2c\xe6\x84\x9e\x1b\x90\xcd\xc9\x39\xde\xad\xac\x7b\xf1\xb7\x5c\x1f\x4f\x90\xbf\x3b\x3b\x16\x6b\x62\xa9\xb9\x68\x4e\x61\x95\x2e\xc9\x4c\xaf\x3b\x69\x79\xd5\xd9\xa4\x4f\x92\x46\x51\xf4\x6b\x65\x61\x46\xe6\x5b\xcb\x4a\x2f\x2d\xf7\x19\xf9\xd0\x5e\xca\x57\xbd\x97\xbc\x1e\xf0\x5e\x72\x0f\x68\x26\xce\x7e\x5b\x87\xe5\x4c\x32\x25\x89\x69\x2b\x68\xd3\x8d\xa1\xba\x52\xb2\x8a\x33\x42\x59\x52\x0f\xa6\x6a\xcf\x53\xec\x66\x8a\xc1\xdd\x90\x6e\x94\x99\x54\x4d\x41\x5d\xdf\x1f\xa8\xde\x92\x1d\x2d\x17\xc3\x82\x56\xf3\xeb\x6e\x9b\xe2\xf9\xb5\xe0\x75\x8d\xb5\xcd\xcb\x65\x57\x18\xcd\xbb\x9c\x5b\xcf\x6d\xfb\xfc\xdd\x7a\xbb\x5b\x97\xa6\xcc\xbc\x09\x65\x2e\xd4\x32\x75\x33\xa4\xe5\x46\x7a\x52\xf7\x52\xe5\x49\xad\x45\x2e\xb4\xca\x98\xca\x4a\x5a\xa5\x74\x24\x76\xc3\x06\xbb\x2b\xfe\x9d\xd2\x31\x5a\xa2\x7d\x22\x71\x16\x4c\x64\x91\xc1\x62\x89\xb2\x52\xb6\xe5\x7b\x03\x3d\x87\x86\x3d\xa5\xe8\xcf\x81\x62\x74\x5a\x22\x5c\x2f\xfd\x49\x08\x9b\xad\x92\x6c\x41\x31\x63\xe8\xbb\xbd\x5c\x8d\xb4\x7d\x59\x61\xe2\x3a\x5f\x38\x3f\xe3\xfa\x79\xfa\xaf\x94\xfd\x1e\xfd\xe7\xad\xc2\xb3\xad\xe1\x15\x9d\xbf\xad\x35\x2e\x74\x7a\x99\xf0\x09\xfd\xb2\xfc\x3f\xd7\x2a\x5e\x6a\x95\x7e\x77\x57\xe0\xf1\x4e\xf9\x8d\x24\xa3\x5d\x2a\xe8\x95\xa0\xbc\x64\x98\x0f\xff\x3a\xed\xf8\xfc\x70\x9f\xb4\x32\x32\xee\x86\xa9\xb0\xd1\x11\xab\xea\xd8\xa9\x3a\x4a\xc5\x44\xd9\xde\xbc\xeb\x0b\x54\x4f\x2e\xcf\x9b\xb6\x4f\x0f\xe7\xec\xac\xce\xd4\x32\x56\x58\xef\xe6\x4a\x78\x92\x6e\x57\xc6\xda\xca\xac\x5a\x7e\xbb\xc5\xd5\x2b\xcb\xa6\xc6\x04\x5e\x13\x36\x7c\x55\x5e\x42\x8e\xcf\x98\x36\x8c\x76\xf8\xbc\x12\x2f\x3d\xc4\xe5\xb5\xda\x26\x33\x5a\x06\xc1\x3c\x97\x22\x47\x60\xce\xd6\x25\x3f\x4f\x07\x22\x36\x95\xae\xe3\xc8\x15\x92\x92\x55\x45\x5b\xb1\x47\x6a\xef\xd9\xea\x46\x72\x4a\x1a\xef\x91\xa6\xd7\x3e\xfa\xed\xca\x75\x3b\x39\x7c\xa2\xfe\xc7\x92\xd3\xef\xeb\x3a\xbd\xbd\xfe\x6d\x5d\xd6\xdf\xde\x75\xbb\x27\xa1\x7c\x72\x1f\xf7\x6f\x37\xca\x8f\x2b\x9d\x5f\xc6\x80\x19\x8a\x5c\x57\xb4\x38\xd8\x22\x0d\x7f\xa2\x8f\xe8\x14\xd9\x25\x4b\xb8\xb3\x22\x2b\x8c\x52\xe8\xaf\xf5\xe2\x52\x9d\x99\xc7\x0a\x7b\xb9\x42\x3b\x49\xfb\x5f\xaf\xd0\x7f\xa3\xbe\xf4\xf1\x73\x22\x59\x7d\xd0\xcf\xb2\xd5\xac\xb1\x9b\xd1\xa1\xfc\x89\xd9\xb1\xcb\x3e\x7f\xb6\x21\x38\xda\x20\xd1\xbb\xfb\x5b\xf2\x4f\xcc\x26\x3f\x92\x70\xea\xec\xb1\xfc\x89\x5d\xd1\x6f\x7c\x2b\x7f\xd6\x58\x31\x36\x44\x84\x19\x37\x38\x1f\x8c\xef\x44\x3d\x6f\x91\xba\xdd\xb5\x12\xb0\xb7\x66\xd3\x6e\x9c\x29\xf1\xd1\xc1\xdd\xd9\xb9\x12\xfb\x5c\x49\x27\xf2\x5c\xfc\x7b\xd2\x63\xfd\xbe\xd0\x7b\xbb\x8e\x72\xd8\xdb\x1e\xff\x0a\xf5\x0d\xca\xd5\x73\x70\xdf\x1e\x0f\x7e\x38\xff\x77\x7f\xf6\xc4\x3b\xc5\x4c\x9e\x53\x1e\x9d\x4e\x9e\x40\x8c\x96\x6d\xe4\x5c\xee\xc2\x89\x9d\x07\x85\x44\xa3\x55\xae\xcb\xad\x01\x51\xcd\x0f\x88\x6f\x87\xc3\x8c\x5e\x0f\x27\xe5\x5e\x3d\xb7\xf6\xec\xc4\xf4\xcf\x22\xee\xdf\x60\xed\xdf\xa2\x7c\xe9\x1c\xd1\xe3\x21\xf1\x4f\xd3\x83\xc0\xbe\xc4\x6c\xaf\xe0\x94\x54\x7c\x74\xd9\xed\x43\x46\x6f\x9e\x8e\xff\x34\xdd\x13\xf0\x4b\xc4\x6f\x68\x27\x34\xa5\xdc\xd4\xf2\xc4\xf1\x3c\x93\x0f\x95\xe4\x73\xec\xfd\xc1\x02\xbc\xf5\xc1\xf1\xdc\xd5\x2b\x67\x86\x9e\xbc\x53\xe1\x69\xbe\x31\xd8\x25\xa2\x09\x35\xa7\x0c\x77\x27\x59\x5e\x3e\xc1\x32\xf9\x02\x89\xa7\xc9\x45\x58\x97\xb8\x1d\x95\x9c\x52\x33\xdd\xd7\xe8\x5c\xcb\x9b\x27\x36\x5e\x78\x71\xc6\xf3\x4c\x13\x90\x17\x09\x9f\xab\xbc\xe4\xf4\x2b\xc7\x3a\x9e\xbc\x3e\xe4\x33\x98\xfa\x21\xbc\xc2\x71\xaf\xe6\x94\x5d\x74\x22\xe4\x8d\x33\x1e\xdf\xbc\x33\xe5\x69\x92\x47\xc0\x4b\x44\xcf\xd4\xdd\x95\xc3\x12\x1b\xf7\xcf\xdf\x1c\xf3\x34\xdb\x23\xe0\x25\xb6\x67\xea\x4e\xd9\xee\x4f\x4a\xbc\x71\x12\xe1\x9b\x37\xe8\x3c\xcf\xf7\x00\x78\x91\xef\xa9\xba\x53\xbe\x87\xc3\x0c\x6f\x1c\x52\xf8\xe6\x55\x42\x4f\x13\x3e\x02\x5e\x22\x7c\xa6\xee\x6a\xd7\x20\x3e\xa4\xf0\xf5\x78\x02\xe1\xcd\x53\xe8\x2e\xbc\x6a\xe9\xf9\x72\x24\x20\x2f\x96\xe4\x5c\xe5\xa5\x2c\xe1\xe3\xf9\xeb\xfe\xd8\xb5\xeb\x27\xc4\x9d\xbf\x82\xea\x13\xb8\xdf\x24\xfe\x14\xeb\xb3\x2e\xea\xa5\x17\x73\x3d\xcd\xff\x14\xf4\x52\x21\x2e\xa8\xbd\x5a\x92\xe4\xe9\x6d\xd7\xba\x9a\x87\x97\x96\xed\xb8\x47\xaf\x38\xbb\xef\x5c\xb9\xf8\x6d\x68\x67\x38\x84\xaa\x1c\x7b\xb1\x5a\xbb\xac\x14\x09\x18\x78\x18\x13\xfb\x43\x24\xff\x20\x7a\xa5\x7c\x2b\x4f\x24\x0f\x95\xa4\x0e\x7b\xe4\xde\x76\x34\x4f\xdf\xc3\xf6\x28\xcb\x53\x98\x2d\xc9\x5d\x3f\xe5\x84\x62\xf2\x64\xf1\xd7\xe4\x39\xe2\xaf\xf1\xf9\xde\x6f\xd8\x1d\x5f\x26\xf7\x28\xb1\x03\xc2\x96\xd3\xb1\x62\x9c\xd0\xba\xde\x55\x3c\x79\xed\xdd\x33\x14\xf6\x20\x31\x8b\x44\x82\xb9\x93\xc8\xc9\x9b\xfa\x1e\x25\x92\x04\xd9\x12\x39\xed\x08\xdf\xc9\xe4\xe4\xed\x82\x8f\x32\x49\x82\x6c\x99\x24\x7e\x1e\x79\x3f\x8d\x93\x37\x22\x3e\xc1\x24\x89\xb3\x23\xb3\xef\x25\x9c\x92\x49\x9e\x1e\x7c\x2b\x7d\x3d\xc7\xe8\x1c\x68\x4b\xe9\x2c\x37\xbe\x6b\xa3\x6b\x2f\x02\x25\x74\x67\xe6\x5a\x38\xc0\x91\xda\xff\x1f\x00\x00\xff\xff\x68\x77\x99\xb3\x35\x74\x00\x00") - -func kahuna2CoreSqlBytes() ([]byte, error) { - return bindataRead( - _kahuna2CoreSql, - "kahuna-2-core.sql", - ) -} - -func kahuna2CoreSql() (*asset, error) { - bytes, err := kahuna2CoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "kahuna-2-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd1, 0xdf, 0x34, 0xe8, 0xf4, 0xc8, 0x5c, 0xaf, 0xf1, 0xe4, 0xce, 0xe8, 0x8a, 0x3d, 0x82, 0x85, 0x81, 0x51, 0xef, 0x37, 0x5a, 0x94, 0xb7, 0xc2, 0xc5, 0xbe, 0xcd, 0x70, 0x48, 0x87, 0x52, 0xa5}} - return a, nil -} - -var _kahuna2HorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x3d\x79\x6f\xda\xca\xb7\xff\xf7\x53\x58\xd5\x95\xd2\x2a\x69\xe3\x7d\x49\x5f\xaf\x64\xc0\x04\x02\x98\x3d\x2c\x57\x57\x96\x97\x31\x71\x30\x36\xb1\xcd\x7a\xf5\xbe\xfb\x93\x17\xc0\x18\x6f\x2c\xed\xfd\xfd\xf4\xac\xaa\x8a\x3d\x67\xce\x36\xe7\xcc\x99\x39\x33\xcc\x7c\xfb\xf6\xe9\xdb\x37\xa8\x65\xda\xce\xc4\x02\xdd\x76\x1d\x52\x44\x47\x94\x44\x1b\x40\xca\x62\x36\xff\xf4\xed\xdb\x27\xb7\xbc\xb4\x98\xcd\x81\x02\xa9\x96\x39\x3b\x00\x2c\x81\x65\x6b\xa6\x01\x31\xdf\xc9\xef\x48\x08\x4a\xda\x40\xf3\x89\xe0\x56\x8f\x80\x7c\xea\x72\x3d\xc8\x76\x44\x07\xcc\x80\xe1\x08\x8e\x36\x03\xe6\xc2\x81\x7e\x42\xf0\x0f\xaf\x48\x37\xe5\xe9\xe9\x57\x59\xd7\x5c\x68\x60\xc8\xa6\xa2\x19\x13\xe8\x27\x74\xd7\xef\x95\xe9\xbb\x1f\x3b\x74\x86\x22\x5a\x8a\x20\x9b\x86\x6a\x5a\x33\xcd\x98\x08\xb6\x63\x69\xc6\xc4\x86\x7e\x42\xa6\x11\xe0\x78\x03\xf2\x54\x50\x17\x86\xec\x68\xa6\x21\x48\xa6\xa2\x01\xb7\x5c\x15\x75\x1b\x1c\x91\x99\x69\x86\x30\x03\xb6\x2d\x4e\x3c\x80\x95\x68\x19\x9a\x31\xf9\x11\xf0\x0e\x44\x4b\x7e\x13\xe6\xa2\xf3\x06\xfd\x84\xe6\x0b\x49\xd7\xe4\x07\x57\x58\x59\x74\x44\xdd\x74\xc1\xd8\x7a\x8f\xeb\x40\x3d\xb6\x50\xe7\xa0\x6a\x19\xe2\x86\xd5\x6e\xaf\x0b\x35\xf9\xfa\x28\x80\xff\xfe\xa6\xd9\x8e\x69\x6d\x04\xc7\x12\x15\x60\x43\xa5\x4e\xb3\x05\x15\x9b\x7c\xb7\xd7\x61\xab\x7c\x2f\x54\xe9\x18\x50\x90\xcd\x85\xe1\x00\x4b\x10\x6d\x1b\x38\x82\xa6\x08\xea\x14\x6c\x7e\xfc\x0e\x82\xb2\xf7\xd7\xef\x20\xe9\xda\xd5\xef\x13\xd0\xa7\x76\xbe\x74\x3e\x83\xae\x21\xa7\x11\x0b\x41\x1d\x90\x7b\xe0\x55\xbe\xc4\x0d\x43\x90\x01\x5a\x8f\x2b\x01\xa8\x2a\x90\x1d\x5b\x90\x36\x82\x69\x29\xc0\x12\x24\xd3\x9c\xa6\x57\xd4\x0c\x05\xac\x85\x90\x70\x86\x2d\x7a\x86\x6e\x0b\xa6\x21\x68\xca\x39\xb5\xcd\x39\xb0\xc4\x7d\x5d\x67\x33\x07\x57\xd4\x3e\x70\x72\x15\x17\xe7\xd5\xd5\x81\x32\x01\x96\x57\xd1\x06\x1f\x0b\x60\xc8\x67\x89\x10\xaa\x3e\xb7\xc0\x52\x33\x17\x76\xf0\x4d\x78\x13\xed\xb7\x0b\x51\x5d\x8f\x41\x9b\xcd\x4d\xcb\x75\xc7\xa0\x4f\xbd\x14\xcd\xa5\xba\x94\x75\xd3\x06\x8a\x20\x3a\xe7\xd4\xdf\x19\xf3\x05\xa6\x14\xf8\xe5\x05\x4c\x87\x6b\x8a\x8a\x62\x01\xdb\x4e\xaf\xfe\xe6\x58\x8a\x17\x77\x04\xdd\x34\xa7\x8b\x79\x0e\xe8\x79\x16\x4b\x3e\x94\xa8\x59\x67\x22\xde\x75\xba\xb9\x2b\xb8\xfd\x84\xaa\x02\x2b\x1f\xe8\x0e\xfd\x05\x55\x02\xb5\xe6\xab\xe4\x75\xad\x67\x10\x09\x77\xc5\x59\x35\xe6\x6e\x85\x37\x27\xb3\x05\xec\xa3\x0e\x48\xda\x64\x9a\xd1\xdb\xde\xd3\xf3\x00\x9b\x3e\x1f\x66\x26\xa0\x66\x3b\x82\xb3\x16\xe6\xd9\x28\x5d\x48\x73\x9e\x17\x12\xe4\x05\xdb\x85\x92\x74\x60\x69\xe7\xee\x99\x60\xd9\xbd\x98\xb4\xc9\xd7\x98\x7e\x8c\x74\xb5\x6d\xdb\x8b\x2c\xca\x7b\x60\xd9\x54\xc0\x99\xe3\x82\xbd\x19\xcc\x45\xcb\xd1\x64\x6d\x2e\x1a\xa9\xc1\x3b\xab\xaa\x30\x3f\x73\x6c\xb2\x8f\x68\xe7\x72\x10\x5f\xf1\x6c\xfa\x9e\xf2\xf2\xd0\xf3\x01\x7f\x39\x7e\xbf\x31\xdd\x96\x0c\xfe\x74\xe3\xc3\x6e\xe8\xe7\x19\x83\x90\x93\x83\x89\x69\xcd\x85\x99\x36\x09\x06\x0c\x29\x2c\x44\x20\x73\xcb\x78\xfe\x78\x2f\x0d\x73\x5e\xe3\xf4\x6b\x17\x9b\xf5\x7e\x83\x87\x34\xc5\xa7\x5c\xe2\xca\x6c\xbf\xde\xcb\x89\x3b\xc1\xe8\x6e\x80\x39\x68\xee\x74\x4c\xde\x5b\x7e\xf1\x77\x51\xba\xcb\xb5\xfb\x1c\x5f\xbc\x40\x67\xee\x38\xdb\x06\x1f\x67\x53\x3e\x42\x92\xbb\xb6\x02\x72\xc2\x1e\x46\xb3\xb9\x25\x4c\xf0\xfa\x73\xe4\x8b\x47\x91\xaf\x6e\x30\xee\xcb\x07\x1c\x0c\xf2\x72\xcb\x16\xf4\x00\xe7\xc8\xe2\x57\xc9\x09\x1b\x0c\xff\xf2\xf3\xb3\x1b\x2f\xe6\xe1\x28\xd2\x87\xa4\x03\x87\xba\x84\x00\x90\x7d\x7e\xee\x70\xcf\x6c\x2f\x06\x78\xa6\xb9\x33\x0e\x4d\x06\x5f\x8c\xc5\x0c\x58\x9a\xfc\xd7\xdf\x5f\x73\xd4\x12\xd7\x17\xd4\xd2\x45\xdb\xf9\x22\x1a\x1b\xa0\x7b\xa9\x98\x1c\x35\x54\xcd\x8a\xad\x52\xee\xf3\xc5\x5e\xb5\xc9\xa7\xc8\x23\x88\x93\xc9\x81\xbb\x07\xe8\x84\xd1\x14\x1c\x3b\xe9\xae\xc0\xe1\xca\xea\x55\x3f\x30\xff\x00\x9d\x23\x88\x27\x7a\x0e\x0c\xdc\xb0\xc7\xf1\xdd\x08\x0a\x7d\x3e\xb1\x3f\xf4\x9d\x2d\x16\x2b\x5c\x83\x3d\xa1\xf0\xe3\x93\x9f\x85\xe3\xc5\x19\x78\xda\x7d\x83\x7a\x9b\x39\x78\x0a\xaa\xfc\x80\xba\xf2\x1b\x98\x89\x4f\xd0\xb7\x1f\x50\x73\x65\x00\xeb\x09\xfa\xe6\x25\xe7\x8a\x1d\xce\x6d\xaf\x00\xf3\x0e\xdf\xa7\x23\x8c\xc7\x85\x01\xe2\x62\xb3\xd1\xe0\xf8\x5e\x0a\x66\x1f\x00\x6a\xf2\xc7\x08\xa0\x6a\x17\xba\xdb\xa5\xdd\x76\xdf\x6c\x0f\xc9\x5d\x94\xf2\x4e\xfc\x80\xe6\x5e\x43\x99\xf2\x1c\xe9\x92\x6f\xf6\x22\xfa\x84\x06\xd5\x5e\x65\xcf\x56\x38\xff\x76\x44\xfe\x80\x25\xc2\xc8\x39\xc2\x9f\x20\xf1\x14\xd0\xaa\x3f\xce\x27\xdd\x76\x1d\x9a\x5b\xa6\x0c\x94\x85\x25\xea\x90\x2e\x1a\x93\x85\x38\x01\x9e\x1a\x72\xe6\x0b\xc3\xec\x66\x1b\x5a\xc0\xfe\xce\x56\x0f\xfc\xef\xda\x36\x4e\x97\x7b\xcb\xce\xc4\x0f\x75\xb8\x5e\xbf\xc3\x77\x43\xdf\x3e\x41\x10\x04\xd5\x59\xfe\xb9\xcf\x3e\x73\x90\x27\x7d\xa3\xd1\xf7\xfb\xbb\x6e\xaf\x53\x2d\xf6\x3c\x08\xb6\x0b\xfd\x21\xfc\x01\x75\xb9\x3a\x57\xec\x41\x7f\x20\xee\x5b\xb4\x35\x32\x1d\xf1\x3a\xe9\xb2\xd0\xdf\x4c\x38\x34\x4e\xb8\x3c\x3d\xd5\x75\xf2\xe5\xa0\xb0\x17\x71\xff\xe9\x22\x09\xbf\x7c\x82\xa0\x22\xdb\xe5\xa0\x41\x85\xe3\xa1\x3f\x90\xbf\x90\xbf\x1f\xff\x40\xfe\x42\xff\xfe\xf3\x0f\xd4\xfb\x1b\xfd\x0b\xfd\x1b\xea\xf9\x85\x10\x57\xef\x72\xae\x52\x38\xbe\xf4\x35\x56\x33\x39\xe2\xc0\x95\x9a\xc9\xa6\xf0\xab\x35\xf3\x3f\x97\x68\xe6\x34\xa6\x06\x7a\xd8\xc7\xe1\x7c\x8a\x38\x84\xed\x13\x8c\x1e\xc7\x10\xd4\x75\x75\x05\xfd\x3c\xf4\x00\x0f\xfe\xe7\xde\xa8\xc5\x41\x3f\xc3\x1e\xf1\x35\xce\x6b\x6f\xca\x63\x14\x61\x84\xc5\x9d\x1b\xe7\xe7\x30\x76\x08\x74\x2d\x97\x71\x48\x23\x9c\x1e\x39\xe4\x31\xbb\x07\x2b\x3b\xe5\x36\x6e\x98\x77\x35\xb7\x31\x48\xa3\xdc\x86\x9d\x24\x95\x5b\x37\x72\x29\x40\x15\x17\xba\x23\x38\xa2\xa4\x03\x7b\x2e\xca\x00\xfa\x09\xdd\xdd\xfd\x38\x2e\x5d\x69\xce\x9b\x60\x6a\x4a\x68\x29\xed\x48\xd6\xf0\xf8\x37\x10\xd1\x73\xb0\x7c\xe2\xf9\xbe\x18\x9e\x7c\xfb\x12\x69\x0a\x24\x69\x13\xcd\x70\xbc\x81\x01\xdf\xaf\xd7\x7d\x71\xc4\x99\x3b\x8c\x87\xe4\x37\xd1\x12\x65\x07\x58\xd0\x52\xb4\x36\x9a\x31\x89\x80\x19\x8b\xd9\x7e\xc8\x0f\x69\x86\x03\x26\xc0\x8a\x80\xa8\xba\x38\xb1\x21\x7b\x26\xea\xfa\x29\x19\xc7\x9c\xe9\xa7\x44\xbe\xa0\x04\xf1\x75\x0f\x79\xda\xec\xd1\x79\xc3\xa5\xea\x88\x66\x3b\xf6\x2a\x71\xc0\xfa\x44\x21\xf3\xb9\xae\x79\x39\x7b\xc8\xd1\x66\xc0\x76\xc4\xd9\x1c\x72\xdb\xcc\x7b\x85\xb6\xa6\x01\x4e\x19\x4d\x9a\x15\xed\xc6\xa3\xc1\x74\x2a\x1f\xcf\xfb\xc9\x57\x02\xd6\xc0\x0c\xd9\x4e\xcf\x1f\xd1\x21\xde\x87\x2a\x5f\xec\x70\xde\xf0\xab\x30\x0a\x3e\xf1\x4d\xa8\x51\xe5\x5f\xd9\x7a\x9f\xdb\xbf\xb3\xc3\xc3\x7b\x91\x2d\x56\x38\x08\xc9\x12\xe6\x62\xb5\x47\x11\x9d\x98\x62\x90\xf4\x80\x0c\xb0\x76\x96\xa2\xfe\xe5\x2e\x41\xe2\xbb\xa7\x27\x0b\x4c\x64\x5d\xb4\xed\xaf\xd1\xe6\xf2\xd7\x2a\x62\x6c\x8b\xc4\xbf\xa6\x34\x94\x3f\x37\xbe\x5a\x32\x3f\xa3\xb3\x97\x2b\xde\x33\x0e\xb9\xba\x78\x36\x63\xc1\x65\x53\x89\x03\x47\xd0\x78\x70\x3f\xfd\x17\x53\x81\x20\xd3\x3c\x2c\x3e\xbd\x70\x23\xb3\x0d\xe3\xfc\x6d\x46\x9b\x26\x08\xd4\x1c\xf0\x5c\x09\x2a\x8c\x32\x24\xf2\x33\x74\xe9\x02\xed\x71\x45\x8a\xbf\x6b\x4a\x12\x6f\xbb\x9c\xcf\xb5\x56\x17\xe0\x09\xcc\x2e\xe2\x33\x42\x52\x4f\x7f\x9a\xe2\x4a\x82\xfc\xec\x2d\x7c\x7c\x4e\xb0\x66\xcf\x8e\xe3\x8b\x14\xe0\x88\x9a\x6e\x43\xef\xb6\x69\x48\xc9\xc6\xb6\x4b\x94\x5d\xab\x87\x00\x4f\xa0\x87\xdd\xba\x75\x02\x6f\xa1\xc5\xe4\x5c\x5e\x18\xb7\x8e\x1d\x5f\x31\x50\x4b\x28\x33\xea\x35\xc4\x9e\x8f\x5d\x2f\x07\x47\x28\x1c\x1a\x22\x1f\xfc\x7e\x31\x39\x12\x98\xcc\x85\x73\x88\x4d\xd1\x3a\x16\x10\x9d\xcc\x4a\x3e\xec\x62\xae\xe4\x86\xdd\x9b\x4e\xf0\x1a\x59\x67\x3f\x91\x05\x39\x19\x0f\x38\xa2\x2e\xc8\xa6\x66\xd8\xf1\x36\xa8\x02\x20\xcc\x4d\x53\x8f\x2f\xf5\x56\x3e\x55\x90\xd4\xd6\x5e\xb1\x05\x6c\x60\x2d\x93\x40\xdc\x71\xa8\xb3\x16\xbc\x61\x92\xb6\x4d\x82\x9a\x5b\xa6\x63\xca\xa6\x9e\x28\x57\xb4\x8d\x76\xc6\x02\x44\x05\x58\xde\xf0\xc2\xff\x6e\x2f\x64\x19\xd8\xb6\xba\xd0\x85\x44\x43\x09\x04\x17\x35\x1d\x28\xc9\x50\xc9\x6e\x95\x90\xbb\xbe\xd6\xcb\x12\xd6\x43\x32\x62\x5e\xfe\xde\x26\xbb\xff\x3a\x57\xe4\xdb\x86\xb1\x54\x1a\xbf\x2b\xac\x9d\x25\xe8\x95\x61\x2e\x95\xd6\x69\xd8\x8b\x07\x4f\x09\x83\xa1\x95\x9d\x9b\xd9\x66\xd6\x34\xe7\x78\x57\x55\xc2\x54\xc8\x1d\xf9\xcb\xbe\x28\x5e\x04\xbc\x32\x00\x06\x9e\x6f\x2e\x2c\x79\xbf\x4d\x23\x21\xf4\xec\xba\x93\xbb\xbb\xa7\xa7\xe4\xa9\x58\xb2\x1f\x04\x0b\x6b\xd7\xaa\x33\xd8\x0b\xf8\xe5\xa6\xe3\x85\xa0\x4b\xbc\x24\x7a\x79\x7b\x61\x12\xc9\x46\x76\x22\xa6\x01\x05\x9b\x23\xd3\x40\xfc\x79\x70\x2c\xc0\xe9\x9e\xce\x0c\xb8\x54\x72\x7b\xa8\x14\x8a\x1e\x4b\x9a\x2d\xd8\x40\xd7\x81\x05\x49\xa6\xa9\x03\xd1\xd8\xc5\x24\x4d\x06\x82\x71\x14\x7f\xfd\x6f\xc7\x31\xf9\xb0\x9b\x48\x88\x44\xeb\xa3\xfd\x4c\xd1\xc2\xd0\x32\x7d\xec\xce\x4f\x8f\x6b\xc1\xdb\x1b\x0c\x15\x2b\x5c\xb1\x06\x7d\xf9\x12\xd6\xe0\x9f\x10\xfc\xf5\x6b\x16\xaa\xb8\xea\x3b\xa5\xfd\xcf\x89\x1e\x73\xe0\x3b\xd2\x69\x04\x7d\x44\xe1\x1e\x83\xa9\xae\x14\xbf\xc2\x7d\x03\xe7\x8a\xdf\xb3\x90\x33\x92\xe6\xe9\xc2\xae\x89\xa5\x59\xfb\x03\x6e\x13\x4d\x33\xa8\xfc\xae\x78\x7a\xa6\xb0\x57\x46\xd4\x0c\x6a\xa7\x31\x35\xa9\x42\x4a\x54\x3d\xda\x13\x72\x43\x5b\xdd\xd9\x67\x98\xa5\xdc\x93\xa8\xa0\xef\xcf\x98\x9a\xe5\x0d\xbc\xe9\x31\x34\x16\xf6\x40\x3a\xd6\x5f\xdc\x59\x40\xf2\x34\x22\x69\x82\xf6\xaf\x4c\xb1\x9c\xb5\x00\x8c\x25\xd0\xcd\x39\x88\x4b\x5b\x3a\x6b\x77\xc2\xb3\xd0\x9d\x84\xc2\x19\x70\xc4\x84\x22\x77\xaa\x95\x54\x6c\x6b\x13\x43\x74\x16\x16\x88\xcb\xb0\x31\xe4\xd7\xbf\xfe\x3e\x8c\x5d\xfe\xf9\xdf\xb8\xd1\xcb\x5f\x7f\x47\x75\x0e\x66\x66\x42\x32\xec\x80\xcb\x30\x0d\x90\x3a\x16\x3a\xe0\x3a\x45\x13\x48\xa6\xcd\x80\x20\x99\x0b\x43\xf1\x32\xd6\xb4\x25\x1a\x13\x10\x9d\x8d\x1d\x87\x56\x57\x13\x2e\xb6\x09\x50\xb2\xa7\x5b\x41\xee\x4f\x53\x76\xde\xb6\xdb\xc2\x95\xa7\x8b\xf0\xdd\xcd\xdb\x2f\x97\xb1\x3b\xac\xcb\xf5\x52\xf2\xa4\xe1\x8c\x54\x38\x4b\x7a\xde\x3c\xe2\x76\x42\xe4\xdc\x3c\x97\x2a\x54\xea\xfc\x23\x8f\x90\x89\x91\xf6\x66\x62\xe6\xde\x7f\x98\x2a\x68\x46\x58\x88\x17\xb5\x24\x3a\x22\xa4\x9a\x56\xc6\x6a\x11\x54\x62\x7b\x6c\x86\x78\x09\x28\xd3\x56\x5d\xf2\xa0\xad\xf2\x5d\xae\xd3\x83\xaa\x7c\xaf\x79\xb2\xf2\xe2\x05\xe8\x2e\xf4\xe5\x0e\x11\x34\x43\x73\x34\x51\x17\xfc\x5d\x30\xdf\xed\x0f\xfd\xee\x01\xba\x43\x61\x84\xf9\x06\x93\xdf\x60\x0c\x42\xe8\x27\x94\x7e\xc2\xa9\xef\x30\x86\xe2\x0c\x79\x0f\xa3\x77\x5f\x7f\xe4\xc3\x8e\x0a\xfe\xaf\x1b\x8e\xb4\x2a\x6d\x04\xc7\xd4\x94\x74\x4a\x0c\x49\x50\xe7\x50\xc2\x84\x85\x0d\xf6\x51\x46\xd0\x8c\x93\x5f\x54\xa4\xd2\xc3\x71\x18\xa7\xcf\xa1\x87\x0b\xa2\xa2\x08\xd1\xbc\x54\x2a\x0d\x02\x27\x30\xf4\x1c\x1a\x84\xe0\xc7\xb4\xdd\xe8\xda\x5b\xcf\x4c\x25\x41\x62\x30\x7a\x96\x18\xe4\x8e\x44\xd0\x83\xe5\x20\x41\xe3\x08\x71\x0e\x09\x4a\x98\x99\x8a\xa6\x6e\xf2\x4b\x41\x23\x24\x7a\x16\x09\xfa\x48\x8a\x60\x1b\x73\x0e\x3a\x14\x4e\x62\xe7\xd1\x71\x1b\x5d\x9c\x4c\x2c\x30\x11\x1d\xd3\x4a\xb7\x29\x06\x46\x60\xe6\x1c\xf4\x8c\x87\xde\xcf\x59\x0a\x6b\xc5\x4a\xc7\x8e\x52\xc8\x59\x4d\x8d\xc0\x1e\xfa\xa0\x15\xbc\x99\x6a\x3a\x01\x82\xa1\xce\xd2\x0e\x82\x84\x09\xec\xa7\x3e\x6e\x07\x90\x4e\x88\x21\x99\xf3\x24\x41\x8f\x1a\x3a\x98\x6c\xfa\x3f\x9c\x4d\xa3\x84\xc0\x14\x81\x9f\xd5\x22\x08\xe6\x8b\xb3\x9f\xa2\xa7\xb6\x38\x82\xa0\x14\x79\x9e\x24\xb8\xa0\x6a\xeb\xdd\x8f\x08\xcc\x99\x2e\xa8\x1a\xd0\x53\xbb\x46\x04\x21\x10\xe4\xac\x4e\x18\x21\x76\x6b\x27\xbb\x9c\xf6\x3a\x43\x0c\x92\x3a\xaf\x9b\x47\x48\x41\x33\x26\xc0\x76\x84\xd3\xac\x79\x06\x29\x8a\xa1\xcf\x6b\x11\xea\x28\x5c\x7b\xcb\x13\x62\x7a\x30\x41\x50\x18\xc6\xf0\x80\x48\x42\xac\x4d\x5d\x6b\x3f\x37\xd8\x9e\xac\xb7\xef\xb8\x47\x1e\xa0\xbb\xe7\x12\xc9\xf7\x3a\x2f\x03\x62\x4c\xf2\xc5\x41\x05\xef\x77\x07\x0d\x9e\x1b\x95\x29\xaa\xd3\xef\xa0\x8d\x5e\x93\xe4\x5b\x78\x8d\x2b\xbd\xbe\xb0\xbd\x5e\xb1\x3f\x2c\x75\x9a\xd8\xa8\x5a\xee\x46\x35\x94\x48\x04\x75\x89\x14\x3a\xad\x51\xa5\x5a\x47\x8b\x55\xac\xcc\xb7\xf1\xc2\xb0\x5e\x6e\xf0\xa5\x7a\xf9\xa5\xcf\xb7\xfa\x68\x65\x84\x8d\x1b\xe5\x6e\xa5\xc9\xf7\x8b\x5c\x93\xed\x0e\xa8\x76\x91\x6a\x0e\xd1\xca\xdd\xa5\x3b\x2a\xdc\x01\x56\x86\x86\x82\x5d\x68\x87\x0d\xa4\xdf\x6d\x90\xbe\xdb\xe0\x01\x42\x1f\x20\xc7\x5a\x80\x1c\xed\x76\xba\x8f\xe0\x9c\x91\xd7\x39\x6b\xd7\x37\x91\xf4\x68\xbe\xf0\x00\x21\x0f\xfe\x16\xa4\x6c\x41\xe3\xd6\xae\x2f\xb5\xcf\xdd\xfa\x75\xc8\x3c\x51\x04\xa7\x70\x1a\x87\x09\x8a\xf2\xb8\xc2\xe1\x07\xe8\xee\x9f\xcf\x86\x38\x03\x9f\x9f\xa0\xcf\x8a\x69\x80\xcf\x0f\xd0\xe7\xa5\xa8\x2f\xfc\x0f\x95\x17\x64\xdc\xfe\xf9\xf3\xf3\xff\x26\xd9\x67\x0c\x11\x84\x72\xdd\x9e\xc2\x50\x1a\xf1\x88\x20\xa8\x47\x64\x05\xb4\xc9\x9b\xf3\xf9\xc9\xfd\xf4\xd9\x17\x42\x98\x82\x8d\x4b\xe6\x52\xa7\xb9\x9c\x2d\xf4\x01\x42\xe0\x2c\xb6\x86\x45\xf2\xb9\xfc\x5a\x1e\x15\x06\xad\x12\x3f\xe8\xbc\x8c\xca\x83\x32\xda\x6b\x50\xc5\xf2\xb8\x43\xf2\xed\x72\xb9\x33\xe6\xd8\xe7\xde\x60\x54\x25\x59\x8a\xe7\x5f\x06\x44\xb1\xf8\x5c\x6c\xf2\xe7\xb1\x85\xd2\x34\xce\xc0\x04\x43\x13\x9e\xb6\x7c\xae\x6c\xc7\x1d\x52\x1b\x13\x41\x12\x75\xd1\x90\xbd\xc6\x40\x60\x18\xfe\x0e\xfb\x4f\x7e\x12\x68\x84\x04\xfa\x00\x61\x1e\x09\x3f\xae\x9e\x20\x7e\x80\x3e\x1f\x36\xd2\xb8\xa5\x86\xe8\x68\x4b\x70\xb9\x4c\x58\x1e\x55\x5f\x67\x01\x19\x4e\x15\xb7\x11\xe2\x52\xa7\xda\x6d\x86\xd8\x49\x4b\x3c\x40\x77\x0c\x0c\x08\x46\xc6\x50\x92\xa6\x45\x89\x50\x10\x18\xa8\x0a\x10\x61\x54\x21\x09\x45\x55\x30\x45\x42\x24\x91\x86\x55\x58\x51\x54\x14\x27\x11\x94\x24\x00\xa2\x88\x04\x82\x22\x04\xa1\x28\x08\xe9\x46\x36\x92\x41\x65\x04\x05\x22\x23\x31\x08\x82\x50\x04\x4c\x11\x0c\x02\xcb\x32\x22\x31\x0a\xa1\x92\x2a\x86\x92\x2a\xa0\x50\x4c\x94\x45\x91\x56\x29\x8c\x01\x18\x05\x03\x20\x63\x24\xa3\xd0\x0a\x4e\xfa\xbd\x0c\x12\x89\x91\xe4\x13\x86\x3f\x21\x58\x34\x74\x06\x9f\xbf\xe3\x04\x0c\x93\x64\x66\xa9\xdf\x6b\x60\x24\x4e\xc3\x0f\x10\x42\xba\xed\x79\xf2\x3c\x40\x98\xfb\x1f\x12\xfc\xb7\xfb\x88\xec\xff\x70\x59\x63\x59\x96\x2d\xa2\x53\x9b\x5b\x7c\x48\xd3\x4e\x19\x29\x20\xd3\xf6\xb6\xb0\x50\x86\x28\xbd\x91\xee\xe5\x77\xab\xf6\xd1\x92\x09\x1c\x2b\x2d\x56\xa8\x31\x42\x9e\x9d\x47\xf3\xb5\x3c\xed\x2c\x38\xba\x7a\xdf\xa9\xcf\xeb\x4d\xa4\x84\xac\x3f\x8a\x86\x03\xb6\xdb\xc9\xfd\x74\xd9\xa2\x45\xb1\x4e\xca\x23\x59\x6c\xbb\xa8\xd9\x61\xeb\xb5\x51\xf0\xff\xf4\x1e\x63\xeb\x90\xfd\x97\x21\x21\x6d\xc8\xc2\x4a\x06\x76\x7d\x69\xbf\xf4\x1a\x2f\x2d\xe3\x71\xf4\x68\x3f\x8a\x85\x8a\xce\x35\x9d\x59\x8f\x98\xad\x94\x41\xfd\x95\xe7\xee\x51\x75\xdb\x1e\xbc\xbc\x74\xb5\x4a\xa5\xdf\x99\xcf\xa6\x1f\xdd\xd5\x60\xa8\x17\x46\xb5\xe7\x32\x4e\x19\x9d\xb1\x36\x28\xaf\x26\x2e\xe6\x3e\x8f\xd7\xc5\xed\x1c\x0d\x11\x63\x39\x9b\x8d\x79\xc6\xec\x10\xc1\xdb\x2c\x5b\x82\x5f\xe2\x8a\xff\xa3\x1f\xdf\xa8\xe0\x04\xc7\x8f\xba\x02\x7e\x1b\x33\xbe\x43\x10\x09\x83\x15\x4c\x25\x61\x0a\xa6\x30\x91\x54\x68\x18\xa7\x68\x8c\x81\x19\x98\xc2\x48\x09\x96\x55\x06\x13\x01\x43\x02\x04\x87\x61\x9c\x62\x68\x84\x22\x11\x0a\x67\x28\x58\x92\x68\x09\x55\xd3\x5c\x01\x4d\x34\x76\x92\x22\xd0\x64\x57\x70\x4b\xa9\xbb\x5d\x10\x21\x19\x84\xc6\x53\x5c\x01\xcd\xe9\x0a\xeb\xe7\x6d\xa9\xc7\x4c\xe4\x4a\x73\x86\xb2\x1d\xbc\xd9\x9e\x56\x78\xab\xd4\x9a\x92\xe4\x00\xef\xb3\x1c\x18\x95\xd1\x32\xac\xaf\x16\xb8\xbd\x34\x3b\xdd\x81\x3a\xdd\x0e\xd7\xdb\xba\xb5\x9c\xb5\xf5\x9e\xd4\x11\x51\xbc\xdb\x2e\xde\xbf\x19\xef\x55\x85\x2a\x6f\xd1\x66\x43\x5f\x73\x9d\x37\xbf\xe9\x3c\x57\x08\x35\xe5\xbc\x59\x7c\x31\xa7\xfd\xd6\x06\x59\xb1\x8f\x43\x69\x3e\x5d\xcc\x8a\x35\x8b\xe1\x97\x58\x81\xbe\x57\x3b\xcf\x0e\xae\x20\x9b\x49\xcb\xaa\x15\x56\xa6\xf3\x6e\xbd\x6e\xbb\x33\x7c\x31\xa9\x62\x8f\x7c\xa5\xbf\x64\x7b\xfa\x9b\x39\xb5\x7a\x5c\x99\x83\x07\xec\xba\xd0\x2d\x76\x46\xa6\x6c\x9b\x1e\xe6\x76\x8c\x2b\x94\xaa\x71\xe6\xf4\xff\xc7\x15\xb0\xdb\x98\xf1\x1d\x46\xa8\x98\x44\x52\x18\x83\x8b\x18\x06\x44\x91\xa1\x29\x15\x07\x18\x26\xc1\xb4\x08\x14\x5c\x04\x14\xc0\x51\x51\x42\x15\x80\xc8\x80\x90\x25\x99\x56\x28\x55\xc2\x65\x05\x28\x32\x2e\xe1\x54\x9a\x2b\x20\x89\xc6\x4e\xd1\x24\x9d\x5d\x1a\x04\x79\x84\xa6\xe9\x14\x57\x40\x72\xba\xc2\x76\xb8\x75\x8c\x66\xdf\xdc\x92\x1f\xb3\x0a\xd3\x6c\x50\xc5\x1a\xd5\xb7\x0c\xa2\xf8\xb1\xc1\xde\xb6\xfa\x86\x7e\x1f\xde\xc3\x5b\x80\x71\x4e\x45\x9a\xbe\x4f\x59\x07\xe9\x11\xeb\x0f\xb6\xb1\x1c\x4b\x1b\x51\x93\x7a\xa3\x0e\x6e\x6b\x05\xb2\x3f\x6e\x93\x1a\xb3\x28\x4d\xe6\xb2\x36\x96\x57\x5e\xd3\xb9\xae\xc0\xae\x0e\x4d\xa9\x6f\x5f\x90\x65\xb5\x5b\x19\x6e\x39\x9d\x55\x61\xa2\xfe\xc6\x53\x1f\xda\xc7\xe0\xa3\xb6\x7c\xaf\xbc\xf5\xb4\x77\xe9\xb1\x30\x79\x26\xcb\xf6\xe2\xc5\x61\x56\x9b\x5e\x4f\xde\xa0\x66\xab\xfd\x58\x56\xf5\x6e\x7f\x23\x3a\x06\x5f\x40\x3b\x8b\xf1\x94\x78\x29\x3d\x2e\x54\xb9\xf6\xe8\x2c\x97\x13\x2f\x2a\x34\x62\x5c\xa1\x30\x8d\x33\xa7\xff\x3f\xae\x80\xde\xc6\x8c\xef\x48\x4c\x61\x68\x95\xc0\x48\x00\x48\x5a\x41\x24\x94\x92\x08\x89\x66\x54\x14\x13\x55\x02\x43\x10\x89\x22\x48\x46\x44\x71\x55\x54\x11\x1c\xc6\x44\x05\x96\x08\x54\x22\x5d\x22\x94\x04\x18\xe6\xce\x1b\x5a\xc3\xb1\x56\x0d\x27\x1a\x3b\x03\x63\x24\x91\x59\x4a\x13\x34\xc3\x60\x38\xc1\xa0\x29\x9e\x90\x73\x74\xd4\x1a\xbf\x23\xfc\x82\x30\x61\xe9\x85\x1a\xe0\xc6\xa6\xb9\xec\xaf\x9f\xb1\xd7\xb9\x39\xbd\x5f\x96\xd9\xa6\x53\x44\x6a\x68\x83\x2a\x50\xe4\x78\x31\xee\x54\x2c\xa6\xaf\x0c\x6b\x52\xaf\xa6\xc9\xba\xda\x7c\xdf\x50\xe8\x68\x5c\x7e\xe9\x4f\x5f\x5a\xaf\x72\xad\x47\xbc\x39\x4b\xd3\x9a\x21\x87\xd1\x11\xeb\xd9\x69\x75\xff\x1f\xeb\x15\xd9\x87\xf7\x15\xdb\x6a\x07\x16\x8b\x6d\x99\xb7\x19\xdb\x9d\xd7\x19\x87\x7d\x5d\x4f\x9d\x75\x09\x1b\x76\x9b\x73\x4c\x73\xd6\xdd\x25\x37\x6b\x90\x6c\x7f\xba\x2a\x74\x71\xae\x63\x2c\xef\xeb\x8e\xf3\xb8\x91\xb7\x8f\x6b\xfa\xf1\x5e\x2f\x17\x68\xd8\x32\x5e\xd7\xd4\x3b\xda\xb0\x66\x28\xc3\xcd\x17\x76\xbf\x73\x3f\x59\x32\x63\x0f\x73\x35\xc6\x4f\xe2\x9f\xff\x72\x3f\x81\xf3\xfb\x09\x72\x1b\x1b\xf7\x16\x6d\x77\x96\x8e\x30\x14\xfc\x0d\x46\xbe\xc1\x08\x04\xc3\x4f\xde\xbf\x64\x5b\xa6\x51\x8c\x4e\x2d\x75\xd1\xe3\x28\x83\x33\x24\x85\x32\xe4\xd9\x96\xee\xb3\xf4\x6f\x37\x4a\xf2\x53\x18\xd6\x34\x7c\xf3\xb8\xe9\xd6\x0a\x54\xc9\x28\x31\x15\x14\x5e\xbf\x17\xee\x6d\x78\xe2\xd8\xab\xea\x6a\x8b\x0c\x95\xee\x60\x24\x16\x5e\xc4\xb2\xe7\x44\xdc\xd9\x46\x9c\x14\x0c\xfe\x93\x9f\x83\x11\x67\x4c\xb2\x73\x6c\x8b\xbe\x74\xce\x9d\xb0\xda\x9d\x98\xd7\x4a\xf0\xb8\x0c\x34\x68\x34\x73\x75\x19\x1a\x2c\x9a\x6f\xb9\x0c\x0d\x1e\xcd\x0c\xdd\x66\x73\xf6\x4d\xd2\x9b\xe9\x3b\x07\x1e\x20\x3c\x6f\x5a\x37\x61\x8b\xf2\xd5\x76\x12\x6a\xd4\xb0\x61\x1c\x5e\x48\x7f\x5c\x9c\x3f\xfb\xf9\x0b\x32\xfb\x31\xdc\x1e\xdb\xdf\xfe\x05\xf6\xb8\x25\xfc\xc4\xa0\x36\x31\xfc\xf3\xa7\xae\xca\x50\x3e\x40\x3b\x4c\x87\xa4\xdc\x6f\x93\xf2\xc8\xae\xf7\x2f\x78\x28\xfd\xa9\x2e\x0c\x05\x58\x5e\x62\xf0\xc2\xa5\x0e\x2f\x8f\xe9\x2f\x38\x5c\x95\x5f\x74\x15\x95\x9d\x8b\xbd\xd1\x9a\x4c\x82\x9b\xc4\x6c\x3b\xbf\x62\xdf\xc9\x59\x3b\x70\x2f\x75\xc5\xc4\x9d\x3b\xb1\x9d\x36\x99\xdc\xdb\x66\x22\x42\xa3\x9e\x72\x29\x22\x2c\x62\x8c\x49\x1d\x77\x26\x22\x3c\x6a\xd5\xb7\xda\x0b\x7c\x93\xce\x3b\x6b\x37\xd4\x19\xdd\x77\xe2\x5e\xd8\x1b\x58\x4d\x68\x4d\x58\x82\x69\x8a\x11\x15\x85\x51\x31\x86\xa0\x64\x86\x62\x48\x05\x51\x10\x55\x42\x31\x0a\x85\x15\x09\x28\x08\xa1\xc0\x14\xc5\x60\x32\x85\xa3\x14\x85\xe1\x04\xa1\xa2\x14\x4c\xca\x30\x60\x44\xd4\x9d\xa0\xf9\x4b\x2b\x97\x77\x6e\xa1\x6c\x07\xb3\x1f\xdd\x26\xa7\xcd\x31\x34\x39\xcf\xe8\x96\x62\x77\x11\xeb\xf7\x87\xc5\xad\xed\x78\xdd\x93\x16\x2a\x5f\x1e\x3d\xd6\xba\xf6\x7a\xde\x28\x3f\xde\xf3\x55\x72\xcc\x63\xb3\x25\x6e\x4e\xc8\x79\xa1\x39\xfa\x18\x56\xca\x28\xcd\x7a\xc3\x4a\xf7\x69\xb8\xff\x15\x23\xa3\xb6\x50\xe6\xcf\x4b\xd2\x71\xe3\x67\x66\x31\xf6\x86\xa0\x9c\xf7\x9f\x1f\xda\x0e\xf0\x1f\x92\xc2\x55\x57\x2e\xa6\x22\xd1\xeb\x02\x62\x0a\xc3\xf7\xc5\x5a\x7f\xd1\x77\x54\x51\x15\x97\xe4\xba\xda\x5b\xe2\xd8\xbc\x37\x69\x92\x6d\xad\x05\x6c\x7c\xf1\xc8\x93\xed\x9f\x3f\xef\xc2\x43\xfa\xe7\xd0\x50\xf8\xf0\x67\x2d\xc4\xd7\x01\xde\x2b\xf7\xa6\x9c\x25\x8f\x81\x50\xd5\x47\xde\x28\xf3\x0b\x82\x86\x5f\xdf\xe9\x79\x6d\xfb\x3c\x5d\x0d\x1f\x71\xf8\x7d\x3e\xc5\x80\xf8\xa8\x69\xa5\x8f\x29\x47\x68\x73\x59\x1e\x4a\x5e\x52\xa7\xf8\xca\x2e\xdf\x9b\x07\x5d\x14\x22\xf4\x83\x87\x3b\xd6\x8d\xb5\xd6\x90\xfa\x84\x37\xde\x25\xb1\x26\x97\xed\x61\x1f\x55\xb9\x61\x43\xe5\x27\x7d\x5b\x9e\xb2\xa2\x62\x57\xe9\x12\x35\x98\x3b\x70\xfb\x3d\x16\x9f\xf7\xde\x3f\xbc\x9f\xd9\x76\xac\xde\xae\xe3\xdb\xc9\x5e\x7e\x7f\x5e\xce\x45\x99\x2e\x1c\xd3\xab\xd1\x23\xa7\x8b\x97\xc6\x38\x8a\x6a\x46\x41\x2a\x23\xbc\xb1\x2e\x6f\x2b\xdb\x51\xb9\x5e\x79\x61\x9f\x0d\xa9\xd8\x62\xef\x91\x7d\x5b\x9e\xe0\xe3\x0e\xf4\x56\xff\xb5\xfc\x97\x0f\xef\x25\x1a\x95\xfb\x28\x65\x6c\x3b\x83\xd6\x66\x6a\x35\xc4\x5e\x41\x7d\x7c\xef\x36\x67\x3d\x85\xb0\xee\x6b\xd5\xe6\x47\xbb\x37\xab\xe9\xeb\xb5\xb2\xf4\xe0\x5f\xfa\xc5\xfb\x06\x7e\x90\xdf\xb3\xbf\xa8\xef\x84\xda\xda\xa3\x57\x5c\x3e\xd7\xfb\x0b\x16\x05\xbc\x63\xce\x57\x83\xb5\xd2\x1b\xd3\x1d\x79\x4d\xa3\x85\xee\x7a\xd3\x2e\xcc\xd1\xd5\xfb\xaa\xe5\x88\x33\xac\x53\x6c\x1c\xcb\x1c\x56\x84\x87\xd3\x2b\x3f\xd7\xbe\x43\xbe\xdb\x81\x65\xe3\x55\x0f\xa1\x3d\xf8\xd3\x64\x8f\x9f\xbb\x4e\x3f\x4d\xf9\xa0\x1f\x2e\x5e\x9e\xdb\xea\xa7\xc0\xfe\x97\xf9\xbf\xab\xf3\x7f\x16\x7d\xd8\x58\x8c\x79\xbe\x35\xd1\xf4\xba\x5e\x1f\xa2\x06\x6a\xdd\xdb\x5d\x8e\xba\xe7\xc9\x3e\x5e\x5a\x4c\xab\xef\x98\xd5\xac\x2f\xb7\x60\xfa\xd3\x1b\x1f\x7a\x5b\xed\x77\xf9\x19\xff\x7f\x37\xca\x7a\xc1\x24\x7b\xa4\x11\xde\x36\xca\x28\x00\xc7\x09\x58\x92\x65\x84\xc6\x60\x89\x54\x44\x1a\x53\x25\x9c\x46\x44\x51\xa2\x31\x4c\x91\x60\x5c\x11\x15\x15\x01\x34\xad\x10\x24\x2d\xc2\x30\x4a\xe1\x0a\x0e\x63\xb4\x42\x60\x08\xf0\x23\xfc\xad\xc2\x21\xcd\x64\x85\x43\x92\x22\xa9\xb4\x65\x37\xbf\xf4\x68\x0c\x77\x6d\x38\x8c\x35\x31\xff\xe9\xc7\x98\x71\xbc\xcb\x9e\x3c\xd7\x76\x61\xe3\x9d\xc9\x16\x58\xf0\xba\xb8\x5f\xb4\x7a\x74\xad\xf9\x66\xd6\x4c\xfe\x45\x53\x8a\x83\x8f\x57\x9b\x42\x06\x6c\xf5\xa3\x6d\xd8\xe8\xf8\x03\x9f\x35\xb0\x7a\x41\x5f\x34\x5e\x4b\x15\xf0\xfe\xd8\x7d\x79\xeb\xaf\xb5\x9a\x6e\x77\x3b\x44\xe3\x65\xd5\xee\x63\x8e\xd5\x96\x5a\x76\x93\x5d\x49\x04\x59\xd0\x0c\xa9\xb8\xca\x15\x8e\x43\xdd\x67\x4a\x38\x0e\x01\x5d\xe2\x8e\xc6\xa1\x2d\x12\x9e\x93\x50\xb1\x7b\x0a\x37\xa6\x9f\xd0\xb6\xe9\xf4\x7f\x61\x77\x7a\xfa\x24\x26\x10\xb9\x5f\x41\xff\x57\x76\xe7\x71\xe1\xa8\x74\x1d\xff\x01\x73\xab\x24\x1d\xfd\x4e\xfd\x9d\x43\xdf\xf7\xc5\x7f\x7e\x95\xa3\xdf\x38\xa4\xe0\x32\xce\x10\x18\xa6\x30\x18\x25\x32\xde\xc4\x89\x04\x04\x8c\x60\x28\x2a\x49\x24\x0c\xab\x2a\xc0\x30\x54\x52\x69\x9a\x96\x25\x9c\xc2\x25\x05\x47\x49\x44\xc1\x51\x95\xc0\x51\x9c\x82\xef\xfc\x5d\x5e\xd7\x64\x41\x82\x84\x5c\x5a\x20\xa1\x68\x1a\x4f\x5b\x96\xf6\x4b\x8f\xa6\xde\xbe\x31\x3e\xd7\xe9\x4a\x7b\xd9\x9e\x4a\x35\xb4\xc2\x62\x83\xd7\xf7\x8e\x55\x9b\xbd\x0f\x61\x58\x7d\xa6\xed\x7a\x95\x9a\xc1\x5c\x67\xf5\x32\x78\x64\x87\x18\xbb\x0f\x24\xde\x93\x12\x48\xfc\xe7\x82\xce\x29\xbc\x04\x50\x78\x5d\xae\xca\x8c\x5b\xc4\x95\x34\xf8\x9e\xa1\x1f\x75\xa7\x8b\xb6\xc6\xcd\x35\x5f\xe4\xcd\x89\x52\x84\x65\x67\xda\x1c\x58\xbc\xd1\xbe\xc7\xc0\xeb\x02\x6d\x55\xb1\xfb\x3a\xaf\xbc\xda\xf6\xa8\x69\xad\xf0\xc9\x6a\x39\x2e\xf7\xeb\x76\x63\xde\x45\x48\x72\x43\x59\xaf\xea\xc6\x20\xd9\xea\x9c\x9a\x7c\xbc\x12\xf3\x46\x29\x47\x40\x38\xb2\xda\xa4\x80\x10\x76\x80\xd1\x72\xa5\x14\x99\x62\xc7\xb6\x46\x72\x49\x19\x0f\xf8\x67\xfb\x43\xe4\xd5\x5e\x87\x96\x36\x2b\xfb\x7d\x21\xb5\x3b\x15\x56\x97\xe8\x82\x2a\x07\x4b\x24\xad\x47\x23\xd9\x7d\x82\x27\xa3\x43\xbe\x1d\xfd\xcb\x02\x82\x47\x3f\xda\xa1\x15\xb4\xc7\x02\x5c\x87\x5f\x9e\x37\xce\xdb\x8a\x47\xf4\x11\x2c\x6e\xe6\x26\xc2\xf0\x95\xf5\xb2\x5e\xdc\x34\x09\xa7\xc0\xc9\x45\xbf\x8d\xb1\x89\x63\x35\x8d\xd1\xe3\xbd\x9c\x49\x33\xbd\x43\xbb\x82\x7e\xb9\x37\x28\x2c\xae\xa0\xcf\xb2\xff\x5e\x87\xfe\x33\x2e\xb8\x14\x2e\xd7\x45\xd3\x18\xa7\x8a\x99\xa5\x8b\x6b\xdb\x22\x6a\x0b\xe7\xeb\xe2\x1f\xdc\x69\x2d\xd5\x16\x21\xf5\x9d\x77\xb4\x67\xf7\xda\xef\x62\xb5\xd2\x76\x2a\xf5\x71\x49\xff\xd8\x8e\xe1\x96\x83\xe9\x92\xf3\xbe\xe1\x1f\xb5\xed\xf0\x55\xaa\x3f\x97\x3e\xe8\x66\xb5\x51\x47\x3b\xaf\x45\xaa\x54\xeb\x3b\x60\x61\x2f\x48\x64\x48\xcf\xef\x27\xc5\x1a\xc0\x6b\x3a\x10\x7b\x6c\xce\xe0\x92\x78\x98\xe6\xe9\x5d\x13\xfb\x73\xad\x77\xc7\x4a\x9c\xfb\x73\xd0\x10\x46\xff\xdc\xdb\x52\x29\x7c\x48\x45\x94\x20\xd4\xea\x54\x1b\x6c\x67\x04\xd5\xb8\x11\xf4\x45\x53\xb2\xce\xbb\x8c\xbf\x7b\xe3\x6a\xae\x23\x58\xe3\x38\x8f\x23\x9c\xc9\x7d\xe4\x87\xcc\x97\xdd\x5d\x72\xb5\x74\xc7\x64\xe3\x84\xbb\x88\x31\xa8\xcf\x57\xdb\x7d\x0e\xfa\x72\x00\x7f\x08\x1d\xec\xf8\x70\x74\x0c\xe3\x99\xaa\xb9\x4d\xb3\x9e\x2d\xf8\x59\x8d\x9a\xb0\x2a\x9c\xb1\xf2\x7a\x5b\xc9\xe2\x89\xa4\x49\x9a\xc2\x56\x6e\xc9\x13\x97\x55\x32\x17\x2e\x6e\x2b\x7d\x12\x99\x34\xf9\x53\x59\xcb\xd4\xc0\xf1\xdd\x51\x81\x20\xde\x3d\x53\xf9\xce\x14\xf1\xaf\xa4\x3a\xc2\x02\x35\xf9\xa8\x33\xf4\xbb\x55\xfe\x19\x92\x1c\x0b\x80\xb0\x77\x25\x73\x13\x5c\x7b\x75\x35\x3f\xc1\x91\xa9\xb9\x38\x4a\xf0\xeb\xd0\x95\x5d\x97\xb2\x73\x40\x11\xe6\xe4\x68\x3a\x74\xcc\x8f\x0f\xfc\x70\x72\xc2\x49\x1c\x73\xde\xa5\x63\x57\x70\xe6\x1d\xf4\x92\x8b\xad\xe8\xf1\x30\x71\xdc\x04\x37\xa5\x5d\xc1\x8f\x8f\x21\x1f\x47\x91\xb3\x67\x1e\x4e\x8f\x99\x89\x75\xf9\xf0\xd5\x6f\xe7\x73\x1a\x44\x09\x9f\xe1\x08\xba\x30\xdb\xbb\xdf\x26\x1d\x71\x1c\x77\xe2\xda\xc3\xee\x74\xb5\x24\x66\x0f\x67\x5a\x5c\xc9\xa6\xa6\xe4\x66\xf0\x70\xbc\xd4\x43\xec\x31\x71\x19\x4c\xef\x6e\xeb\xbb\x05\xdf\x01\xae\x30\xeb\x09\xa1\xea\x22\x49\xe2\x05\xd8\x5d\x4c\x78\x0b\x01\x02\x5c\x09\x36\x7d\xa1\x08\xc7\x67\x85\x9d\x0a\x11\xba\x86\xf1\x52\x6f\x0c\xe1\xb8\x54\xf9\xe9\x8a\x8e\xdc\x2b\x79\xad\xae\x8f\xd1\x85\x59\xde\x6d\x78\x3d\xe2\x31\x9e\xa3\xd3\xbb\x31\xaf\x67\xeb\x04\x67\xbe\xee\x2d\x8e\xc1\xd0\x2d\x9f\x17\x37\xeb\x01\xc7\xe5\x26\x99\x65\x7e\x71\xf7\x97\x5e\xce\xf0\x29\xb2\x08\xe7\x0a\x88\xf0\x19\x39\x39\x32\x9d\x41\xff\x42\xd6\x9b\xb0\xe7\xa1\xca\xc5\xdc\xee\xdc\x87\x44\xd6\xa2\x17\xcc\x5e\xcb\x5f\x04\x5f\x16\x93\xa7\x47\x62\x66\x72\x7a\x1b\x3d\x1e\x61\xcb\xcb\x65\xa6\x36\x6f\xc3\x5b\x2e\x9e\xd2\x79\x89\xdc\x64\x7c\x15\x47\xc7\xb8\x72\xb7\xe8\xee\xd0\xcd\x58\xfe\x4e\x2e\x67\xbe\x8a\xc3\x28\xb6\x7c\x7e\x1b\x30\xf8\x70\x72\x4e\xe8\xc3\xc9\x59\xb3\x09\x42\xdc\xa0\xdf\x0e\xf0\x64\x71\x7c\xe6\xe8\x28\x7a\xa7\xf6\x55\xda\x3d\x43\xb1\x99\x7a\xcb\xbe\x2c\xfc\x4a\x85\x66\x12\x38\x9a\xa7\xed\xce\x1e\x39\x9e\x19\xf9\x80\x67\xf0\x7e\xbd\x1d\xa4\xe1\xce\xe6\x38\xc6\xcb\xd2\xaf\x82\xbf\xd4\x1e\x52\xb1\x66\x0e\xfb\x5d\xa0\x0c\x46\x63\xef\xbc\xbf\x0d\xb7\x71\xa8\x33\x87\x6f\x79\x2d\xf9\xf8\x92\xff\x9b\x1a\xc3\x11\xea\x4b\xc6\x9b\xc9\xe8\x22\xb7\x2d\xdc\x5e\xd1\x27\xf7\x39\x64\xb2\x1f\xa9\x90\x5f\x98\xd0\xf5\x1a\xbf\x4c\xff\xe1\x2b\x3c\xb2\x24\x09\xc1\xe6\x17\x22\xee\xb2\x90\x5f\x26\x4d\xec\xcd\x24\x59\x62\xc5\x55\xca\x2f\xdf\x2e\x89\xf2\xcb\x64\xda\x1f\xd3\x9b\x25\x47\x62\xb6\xeb\x18\xf5\xe1\xd7\x1d\xbf\xc2\xb5\xa3\xd8\x63\x27\xc0\xe7\x3a\xf8\x31\xd2\xe3\x29\xd4\x8d\x3c\x3c\x8d\x44\x1e\x19\x32\xe6\x75\xa9\xc4\x6e\x17\xbe\x4e\x11\xe7\xe2\x3d\x3b\x88\x85\x27\xdb\xbf\xc2\x6c\x4e\xf1\x5f\x3c\xd5\xf7\x4f\x07\xdc\x05\xf2\x5d\x86\x51\x90\x4c\x73\x7a\xb1\x96\x53\x70\x66\x0e\x11\xbe\x7c\xd9\x5d\x7d\xf1\xed\xcf\x3f\xa1\x3b\xdb\xd4\x95\xd0\x6a\xda\xdd\xd3\x93\x03\xd6\xce\xd7\xaf\x0f\x50\x32\xa0\x6c\x2a\xf9\x00\xfd\x5c\x7c\x32\xa8\x64\x2e\x26\x6f\x4e\x2e\xf2\x47\xa0\xe9\x0c\x1c\x81\x46\x58\xf8\x0a\x0d\x2a\x5c\x87\xf3\x8d\x0c\xfa\x09\x61\x58\xee\x85\x68\x4d\x11\xd4\xd0\x32\x51\xb9\xf6\x7b\x96\xa3\x03\xb2\x50\xb9\xd9\xe1\xaa\xcf\xfc\x7e\x09\x08\xea\x70\x65\xae\xc3\xf1\x45\xae\x1b\x59\x15\xf1\x4a\x9b\x3c\xd4\x6f\x95\x5c\x93\xe9\x70\xfe\x7d\xaf\xee\xa7\x12\x57\xe7\x7a\x1c\x54\x64\xbb\x45\xb6\xc4\xa5\xdf\x51\x12\x7f\xa9\xc4\x3e\x8b\x70\x3b\x65\x1c\xd3\xc9\x58\x24\x4b\xe2\xe4\x58\x3f\xd1\xb4\x51\xac\xb2\x82\x81\x7e\xc6\x8a\x62\xa2\x26\x82\xa9\xec\xbf\xae\x87\x30\x1f\x71\x5a\xd8\x65\x09\xd2\x0d\xe6\x3c\x0d\x9c\x26\x95\xfe\x45\x35\x24\x30\x73\xac\x8b\x98\x34\xd8\x6d\x8d\x22\x9a\xe2\xf8\x4f\x50\x48\xb2\x69\x9c\xe4\x90\xf2\x5a\x47\xcb\xb4\x9d\x89\x05\xba\xed\x3a\xa4\x88\x8e\xe8\x9a\x18\xa4\x2c\x66\x73\x48\x36\x67\x73\x1d\x38\xc0\x93\xe1\xff\x02\x00\x00\xff\xff\x45\x3a\x63\xad\x77\x93\x00\x00") - -func kahuna2HorizonSqlBytes() ([]byte, error) { - return bindataRead( - _kahuna2HorizonSql, - "kahuna-2-horizon.sql", - ) -} - -func kahuna2HorizonSql() (*asset, error) { - bytes, err := kahuna2HorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "kahuna-2-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3, 0xfa, 0x9c, 0xf2, 0x8c, 0x24, 0x1b, 0xa9, 0xc2, 0x61, 0xd9, 0x3, 0xc8, 0x9b, 0xbd, 0x4d, 0x8b, 0xbb, 0xc1, 0xea, 0x79, 0xa9, 0x2a, 0xf2, 0xbe, 0x8f, 0xe5, 0xd9, 0x20, 0xe0, 0x50, 0x35}} - return a, nil -} - var _kahunaCoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\xbd\x57\x93\xdb\xc8\x92\x80\xfb\x3e\xbf\xa2\xdf\x74\x4e\x70\xce\xb2\xbc\xd9\x73\x67\x23\x40\x12\xf4\x00\x3d\x09\xf0\x65\xa2\x2c\xbd\xf7\xfc\xf5\x37\xc8\x96\xba\xa9\x9e\x96\x39\x1a\xed\xde\x1b\xa1\x8e\x09\x4d\x8b\x48\x26\xb2\xb2\xbe\xca\xca\xaa\x2c\x40\xff\xfa\xd7\x6f\xff\xfa\xd7\x53\x73\xb5\xdb\x8f\xb6\xae\xd3\xaa\x3f\x59\xb5\x57\x5a\xed\xdc\x93\x3d\x2c\xd6\xbf\xfd\xeb\x5f\xbf\xdd\xae\x17\x0e\x8b\xb5\xb3\x4f\x7e\xbb\x5a\xbc\x0a\x1c\xdd\x76\x37\x59\x2d\x9f\xe4\x7f\xb1\xff\x82\x0f\x52\xfa\xf2\xb4\x1e\xfd\x79\xfb\xfa\x1b\x91\xdf\x3a\x61\xf7\x69\xb7\x57\x7b\xb7\x70\xcb\xfd\x9f\xfb\xc9\xc2\xad\x0e\xfb\xa7\x3f\x9e\xc0\xbf\xef\x97\xe6\x2b\x33\xfb\xeb\xa7\x13\x3b\x77\x7f\x4e\x96\x7f\xee\xb7\x6a\xb9\x53\x66\x3f\x59\x2d\xff\xdc\xb9\xdd\x4d\xef\x5f\x85\xcd\x7c\x72\x53\xed\x96\x66\x65\x27\xcb\xd1\xd3\x1f\x4f\x1f\x7a\xdd\xa2\xf8\xf0\xef\x4f\xf7\x5e\x5a\xb5\xb5\x7f\x9a\xd5\xd2\xaf\xb6\x8b\xc9\x72\xf4\xe7\x6e\xbf\x9d\x2c\x47\xbb\xa7\x3f\x9e\x56\xcb\x8f\x3a\xc6\xce\xcc\xfe\xf4\x87\xe5\xf3\xbd\xf4\xca\x4e\xdc\xed\xba\x57\xf3\x9d\xfb\xec\x36\x8b\xc9\xf2\xcf\x85\xdb\xed\xd4\xe8\x2e\x70\x52\xdb\xe5\x64\x39\x7a\x16\xd9\xae\x4e\x7f\xee\x9c\x39\x6c\x27\xfb\xcb\x4d\xb9\xf7\xff\xfe\xe8\x00\xa7\xb6\x66\xfc\xe7\x5a\xed\xc7\x4f\x7f\x3c\xad\x0f\x7a\x3e\x31\xbf\xdf\x3c\x66\xd4\x5e\xcd\x57\xa3\x7f\xff\xf6\x5b\xa1\xdd\x68\x3e\x55\xe2\x42\x98\x3c\x55\x8a\x4f\x61\x52\xe9\x74\x3b\x1f\x25\xff\xeb\xb0\x1e\x6d\x95\x75\xe3\xc9\x6e\xaf\x2f\x3b\xb7\xf9\xf7\x57\xa5\x77\x66\xbd\x39\xac\xb6\x87\xc5\xee\xfb\x84\xdd\xf2\xf8\x3d\x92\x73\x67\x47\x6e\xfb\x3d\x92\x37\x3b\xbd\x73\xdf\x29\xf9\x1d\x62\xda\xed\xf6\x2b\xef\xdd\x76\xb2\xb4\xee\xfc\x75\x59\x65\xcc\xea\xb0\xdc\x6b\x35\x57\x4b\xe3\x76\xff\xfe\x2d\xa8\x77\xc3\xf6\x53\x37\xc8\xd5\xc3\x07\xe9\x46\x5c\x4f\xdf\x71\xef\x6a\x7b\x79\xba\x6b\xcf\x37\xe2\x4e\xb7\x1d\x54\xe2\xee\xc3\x97\x3e\x17\xfc\x73\x3d\x73\x97\xef\xd1\xbf\x3f\x7f\x5b\xf5\x8b\xcc\x7f\xa0\xd5\xbb\xef\xb0\xf9\x51\xec\xfb\x75\x6f\x0f\xbb\xfd\x7c\xb2\x74\xbb\xaf\x69\x7e\x11\xfa\x6e\xbd\x37\x2b\xdc\x3d\x1a\x7c\x45\xef\xab\xd0\xf7\xeb\x7d\x41\xfe\x6b\x7a\x5f\x84\xbe\x5b\xef\xb3\xfc\x64\xe9\x57\x5f\xd1\xfb\x2a\xf4\xdd\x7a\xd7\x07\xbd\x3b\xe8\xaf\xe8\x7c\x16\xf8\x4f\xf4\xcd\x27\xbb\xf1\xe6\xe0\x0e\x5f\xf3\xec\xa3\xd8\xf7\xeb\x76\x6e\xfb\x35\xb7\xde\xaf\x7f\xb7\xb6\xfb\x30\xfe\x9a\xba\x67\x81\xef\xd6\xf7\x1c\x95\xc6\x4e\xd9\xaf\xab\xfd\x4c\xee\x7f\x59\xfb\xc7\x48\xe9\x36\x7f\x7e\xe7\x6d\xb4\x5a\x7e\x45\xb9\x56\xcb\xef\x36\xf8\x63\xf4\xfb\x9a\xad\x9f\x44\xfe\x53\x9d\xb7\x1c\xe0\xdb\x6a\x6f\x52\x1f\x35\xdf\x65\xdf\x2a\x7e\x37\xe4\x7e\x5d\xf6\x25\x34\x7e\x4b\xec\x35\xd0\x7d\x43\xf2\x25\x70\x7d\x5d\xee\x35\x10\x7d\x43\xee\x25\xb0\x7c\x53\xee\xbb\xec\x7b\x0d\x28\x5f\x97\x7b\x0e\x12\xdf\x94\x79\x19\xf2\xdf\x90\xbc\x8d\xe3\xaf\x8b\x3c\x8f\xcd\xaf\xcb\x7c\x36\x14\xbe\x2e\xaa\xd5\xf2\xeb\x02\x9f\x50\xfd\x2e\xa9\x1b\x79\x1f\x05\xc3\xa4\x1b\xc6\x9d\x4a\x23\x7e\x14\x9e\xaf\x47\xbb\xcd\xfc\xa3\x44\x27\x5f\x0e\xa3\xe0\x2f\xba\xfe\xfd\xdb\x73\x6e\x1c\xab\x85\xfb\xef\x4f\x9f\x3d\x75\x2f\x6b\xf7\xdf\x1f\xbf\xf2\xef\xa7\x8e\x19\xbb\x85\xfa\xef\xa7\x7f\xfd\xfb\xa9\x71\x5a\xba\xed\x7f\x3f\xfd\xeb\x9e\x32\xe7\xdb\x61\xd0\x0d\x3f\x69\xfe\xa4\xef\xb7\xcf\x34\x7e\x7e\xf1\xa3\xe2\x7c\x23\x8a\xc2\xb8\xfb\x15\xcd\xcf\x02\x4f\x8d\xf8\x73\x05\x4f\x95\xce\xd3\x87\x4f\xf9\xed\xa7\xcf\x76\x77\x25\x1f\xde\xde\xf9\x53\xf3\x3f\xde\xf3\xc5\x43\xdf\x6c\xcf\x67\xbe\x8c\x1b\xdd\x37\xfe\x7c\x1a\x54\xba\xe5\x17\xb3\x1e\x13\xda\xcf\x6e\xff\xaa\xe5\x8d\x21\xff\x49\xe3\xff\xa2\xe4\xee\x80\x66\x3d\xbb\x1e\xdd\x56\x31\xeb\xed\xca\x38\x7b\xd8\xaa\xf9\xd3\x5c\x2d\x47\x07\x35\x72\x77\x37\x7c\x67\x02\x7e\x13\xb3\xce\xab\xc3\x7c\xff\xe7\x5e\xe9\xb9\xdb\xad\x95\x71\xb7\xd5\xc4\x87\x37\x57\x4f\x93\xfd\xf8\xcf\xd5\xc4\x3e\x2c\x10\x3e\x6b\xec\x23\x90\x1f\x9b\x79\x47\xf7\xb5\x91\x9f\x00\x78\xcf\xe1\xcf\x94\x3f\x06\xdd\x7f\xfc\xf6\xf4\xf4\xf4\xe9\x93\x89\x7d\x32\x63\xb5\x55\x66\xef\xb6\x4f\x47\xb5\xbd\x4c\x96\xa3\x7f\x50\xf6\xcf\x7b\xdf\xc4\xbd\x7a\xfd\xf7\xbb\xf4\xed\x8b\x4b\xb5\x70\xef\x08\x0b\xf1\x9e\xf0\x51\xcd\x0f\xef\x49\x43\x88\xde\x8a\xcf\xd5\x6e\xbf\x58\xd9\x89\x9f\x38\xfb\x34\x59\xee\xdd\xc8\x6d\x5f\x44\x7e\xfb\xe7\xdb\xbe\x7f\x19\xc5\x7f\xd3\x17\xbb\x1f\x72\xc4\xc7\x85\xc0\x93\x9e\x8c\x26\xcb\xfd\x9b\x8b\x3b\xb7\x59\x1e\x16\xef\x5f\x5b\x1e\x16\xbb\x83\x76\xcb\xfd\xf6\xb6\x14\x7c\xdb\xcc\x67\x99\xc9\xd2\xcf\xd5\x6d\xc5\x68\xdd\x6e\xff\xbe\x39\xcf\x82\xe3\xd5\xc2\xd9\xd5\x42\x4d\x96\xef\x48\x11\xf2\xd6\xe8\xfd\x78\xeb\x76\xe3\xd5\xdc\xee\x9e\xf6\xee\xfc\xd6\x32\x3f\x57\xa3\x2f\x59\xf4\xd5\xbe\xf9\xe8\x91\xc3\xed\xae\xf3\x89\xd2\x93\xf9\x64\x7f\x6b\xdc\x73\xfb\x3f\xb9\x64\x3e\xff\xda\xe5\xc9\x68\x79\xcb\x85\x6e\x66\x3d\x7f\xf2\x90\x0d\xbc\xa4\x16\x1f\x9d\xfe\xe7\x7d\x59\xfd\x94\x2f\x87\xf9\xda\xd3\x3f\xfe\xf1\xa9\x2b\xfe\xe7\x8f\x27\xf0\xcf\x7f\x7e\xe5\xdb\x6f\x0d\x7c\xab\xe7\x2f\x0d\xf8\x96\xc6\xcf\xfa\xf2\x8d\xb6\xcf\xfb\xf9\x5b\x9a\xfe\xea\x9e\x37\xea\xde\xf1\xdf\xb3\xce\xbf\x0e\x8c\xdb\xfc\xf7\xa3\x63\xe2\x96\x32\x3e\x0f\x87\xe5\xca\xba\xc7\xb1\xf0\xd9\x18\xf8\xeb\x4d\x3f\x9f\x9f\x7f\xf4\xf6\x9f\x27\xc6\xcf\x86\x7c\xfc\x4c\xed\xc6\x0f\xc6\xb0\xbf\xb0\xbd\xde\xba\xe3\x37\x85\xf4\xc1\xcc\xdc\x7e\x3e\xd9\xed\xbf\x29\xfa\x92\x6d\x7f\xc2\xfd\xf9\x63\x33\x5f\xed\xdc\x7e\xb2\xf8\xc2\xc8\xbf\x07\xd6\x77\xc6\xd6\x43\x9f\x7f\x9e\xd4\xbf\xe8\x7b\xd3\xdf\xaf\xf7\xf9\x02\x3a\x5f\x5a\x1b\x7c\xae\xe6\xb5\x15\x5f\xa2\xe5\x63\xf2\xf5\xa3\x3d\xf6\x71\xe1\xf5\x8f\x97\x41\xee\xb6\xdf\x19\x41\x9f\x77\x5e\xec\x97\x22\xe8\x1d\x77\xb5\xdb\xb9\xfd\x7b\xfe\x7c\x1e\xab\x5f\xbc\xac\x16\xb7\x61\xf5\xbe\xea\xf5\x76\x62\xdc\xf2\x0b\x41\xec\x7e\xf1\x4b\x11\xee\x7e\xf1\xc9\xae\x0e\x7a\xee\x6e\xbc\x99\xc9\x7d\x47\xf2\xa7\x46\xd1\x87\x1e\xfe\xb8\x64\x7d\x6e\xcb\x9b\x7e\xfd\xd8\xc0\x2f\xb0\xf1\xf1\x9b\x1f\x3d\xfc\xe6\xab\x9f\xfc\xfe\x25\x20\x9e\x13\xf6\x1f\xe5\xe1\x79\x59\xff\x8c\xc3\x64\xfd\xde\xc4\x4f\xff\x32\x72\x57\xdb\xfd\x8b\x37\x0a\x61\x31\xe8\xd5\xbb\x4f\xe0\xed\xb4\xe9\xce\x7b\xb5\xdf\xbb\xc5\x7a\xff\x74\x1b\x16\xbb\xbd\x5a\xac\x9f\x6e\x29\xd3\xea\xf0\xfc\xc9\xd3\x75\xb5\x74\x7f\x9d\x6c\xbd\x9a\xcc\x0f\xdb\x87\xa9\xf6\x4b\x77\xd8\x5f\xd6\xee\xdb\x9d\xf2\xbc\x2d\xf1\xa0\xf7\xaf\x61\xff\xe5\x8e\x5f\xe8\x9d\x8f\x3b\x1b\xab\xed\xdb\x4e\xfd\xc7\xdd\x13\xff\xf3\x04\xfe\xf9\x14\xc4\x85\xa7\xe7\xbf\xfe\x3f\x7f\x3c\x31\x4a\x31\xfd\xe7\xbb\x7d\xf5\xb8\x0c\xfb\xe1\x2e\x7b\xdc\xe5\x79\x8c\xb9\x5f\xf0\xc6\xf3\x46\xdb\x6d\xd4\xbd\x6b\xd0\x6d\xed\xf8\x37\x4c\xd9\x1d\xf4\x47\x23\xb6\x6e\xf7\xd9\x04\x84\xdf\xcd\x18\xb7\x4e\xbd\x8c\xa5\xbf\xda\xf3\xb0\xe6\xfd\x51\x9b\x1e\x36\xeb\xbe\x63\x66\x7c\x36\x6c\xb3\x73\x5f\x9b\x61\xfe\x6a\xe7\xc3\x1a\xfe\x47\xed\x7c\x55\xf1\xfd\x76\xfe\x65\x92\x7b\x73\xdd\x2d\x8f\x6e\xbe\x5a\xbb\x6f\x4c\x69\xaf\xb7\xfe\x1b\x13\xd1\xc3\x76\xc7\xdf\x70\xc1\xa7\xfd\xda\x7f\x7c\x4f\x3f\xbc\x52\xf4\x2d\x47\x6c\xbe\x30\xd1\x7c\xee\x84\x4f\xfb\xc0\x9f\x69\x7c\xeb\x88\xcf\xee\xf6\x45\x67\xbc\xee\x11\xfd\xb0\x33\x5e\x37\xc5\xff\xf1\x3a\x6e\x3f\x5f\xbc\xbd\x33\xa6\xbe\x36\xba\x1f\x76\xb8\x7e\xd4\xaa\x87\x12\xc0\x8f\x2c\xbb\xee\x33\xfe\x57\x22\xf5\x64\xb7\x3b\xb8\xed\xf7\xab\x32\x2b\xfb\xee\xea\xf4\x2f\x6e\xd9\xcf\x27\x8b\xc9\x17\x32\x8a\xaf\xae\x05\xff\xbf\x5c\x55\x3d\xd0\xf9\x50\x55\xf9\xa1\x55\xd4\xe3\xf7\x7f\xd6\x3a\xea\x41\xe7\x8f\xaf\x7f\xbe\xa6\xf5\xb9\xd3\xde\x68\xfa\xd8\x93\xff\xf3\xfe\xc0\xfb\x6c\xbb\xf7\x87\x21\x7f\xac\xa1\x3d\x63\xbe\x3f\x7f\x16\x8a\xbf\x63\xbd\xf1\x16\xc0\xf3\xbd\x4a\xf9\xc5\xab\x66\xac\x96\x23\xf7\xee\xc2\xfe\xd1\x39\x8f\x65\xbb\x1f\x8f\xd5\xaf\x7b\xe7\x3f\xee\xa2\xff\x63\xff\xe8\x95\xbd\xbc\xe7\x9c\xfd\x79\xeb\x76\x87\xf9\xbb\xd1\x7d\x7f\x5e\xb8\x6f\xae\xe7\x5e\x4b\xac\x3f\xee\xcf\x37\x75\x8b\x1f\x75\xea\x9b\x8a\xf3\x3f\xbe\xcb\x71\x1f\xbf\xf4\x35\xef\x7d\x14\x79\xcf\x11\xdf\x87\xdd\x9b\x0a\xf7\x8f\x38\xaa\x70\x5b\x59\xfb\xd5\xf6\x1b\x9b\xa1\x4f\x85\xa0\x1b\x7c\xc3\x67\x95\xb8\x13\xb6\xbb\x4f\x95\xb8\xdb\xf8\x6c\x43\xb4\x1f\xd4\x7b\x61\xe7\xe9\x1f\x1f\x4a\x41\xda\xc9\x47\xb5\x56\xca\xc2\xb4\x9e\x34\x9a\xdd\x2e\xab\x36\x9b\x8d\xa4\x10\xf5\xe3\xdc\xa0\xd2\x6d\x76\x3b\xc3\x4a\x7f\x30\x20\xf5\x41\xd0\xee\xe7\x1a\xdd\x32\x6d\x77\xeb\x41\xe1\xc3\xef\x4f\x1f\xf4\xa2\xb8\x1f\x76\x82\x3f\x6e\xbf\xab\xa4\x7d\xad\x94\xec\xd1\xe6\x73\x57\x53\x2a\x4e\x87\x49\x34\xfe\xf0\xfb\x13\x91\xff\xfc\xf7\xff\x81\x11\xdd\xf0\x6e\x44\x54\x08\x4e\x51\xf0\xc7\xed\x77\x8a\xbe\xe9\xd0\xdd\xcf\xf0\xe6\xee\xb1\x15\x49\x05\xe3\x5e\xbe\xde\xea\xe6\x6b\x11\x8a\xa3\x76\xae\xc3\x93\x34\xd7\xa6\x98\xd6\xeb\x61\x3f\x28\xd7\x69\x9a\x8b\x49\xb1\x9b\xcf\x91\xf2\xb0\xdc\xe5\xc3\x80\xe6\xfb\xb5\x0f\xbf\x3f\x41\xf0\xf2\xf3\xfb\x13\x44\x42\x10\x09\xa0\x10\xe2\xf7\x27\xf0\xfb\x33\x66\x4f\x1f\x6e\x0d\x0c\x5a\x41\x10\x3c\x37\x10\xfc\xfe\x84\x3f\x5d\x7b\xfd\xf3\x7d\x6f\x3f\x1a\x59\x48\x8a\x41\xa9\x9a\xef\xe4\x2b\x24\x5f\x43\x69\xb9\xc6\xd2\x76\x3d\x60\xdd\x5a\x98\x14\xdb\x09\xcf\x45\xa5\x7e\xd4\x6a\xe4\xa2\x7a\x25\xec\x55\xdb\x55\x9a\xb6\xe2\x7a\x54\xc9\x7d\xf8\xfd\x49\x3e\xff\xb0\xbb\x8d\x1c\x72\x29\x98\x84\x37\x1b\xe1\xe7\x36\x8e\x2a\xf9\x60\xf4\xc9\x46\xf6\xb9\x8d\x1f\x6e\xf6\x3f\xb7\xa2\x80\xba\x14\x46\x13\xe4\xa7\x8b\x7c\x4a\x86\x99\x36\xad\x36\x62\x58\x9f\x1f\x36\xd7\xed\x72\xbd\xe8\x9e\x7b\xd5\xa4\xbb\xce\x06\xb8\xd8\x3e\xdd\xe4\xc3\x3f\x3e\x7c\xbb\x75\x01\x61\xfd\x76\x2d\x97\xaf\x57\x50\xc2\x0a\x49\x3d\xe1\x41\x25\xec\xb7\x8b\xf5\x32\xee\x05\x3c\xc9\x85\x38\x2e\xc5\x4d\xd6\xe0\xa4\xdc\xa2\xf5\xa4\x1c\x95\xba\x7d\x54\x7d\x6e\x1d\x7d\x69\x1d\x06\x80\x11\xce\x21\xe0\xec\xeb\x3d\x20\x7e\xa4\x07\x82\x12\x45\xdd\x01\x6b\x05\x39\xd6\x2d\xc5\x51\xa3\x5b\xc7\x28\x25\x11\xee\xb5\x5a\xf5\x38\x8e\xcb\xcd\xb0\x9c\x06\x95\xb4\xdd\x64\x9d\x62\x91\x0d\x83\x7e\xbb\x48\x87\xad\xf4\x66\x23\xbf\xf7\x80\xb8\xdb\x28\x18\x25\x1c\x50\xc6\xe8\xd7\x6d\x84\xe0\x87\x30\xc9\xf7\xbb\xb9\x52\x27\x0c\x7b\xbc\x56\x4f\x7a\x51\x39\xea\x24\xb9\xa0\x9e\x54\x51\x97\x54\x50\xad\xd1\x4c\x06\xa8\x43\xbb\xed\x7a\xad\xd0\xae\x04\x49\x81\xf6\x0a\xe5\x20\x6d\xdc\x8c\x24\xcf\x9c\xdc\x8c\x24\x1c\x11\xc2\x08\x40\x94\x7f\xc3\x48\xf4\x23\x46\xe6\x73\xbc\xd8\x4c\x4b\xf5\x3a\x6b\x57\x31\x2f\xd7\xda\x41\x3a\xa0\xdd\x60\x10\x15\x73\xa5\x52\xb1\x14\x91\x4a\xc4\xc2\x76\x2e\x3f\x4c\x2a\x28\x37\x24\x8d\x46\x23\x41\xbd\xe0\xe6\x49\xfa\x3a\xdc\x28\xa4\x58\x32\xc0\x29\x45\xff\x1b\x36\x06\xf1\xb0\xd4\xac\xa5\x74\xd0\x29\x0f\x4a\x34\x6d\x0c\xa3\xb8\x44\x51\x29\x5f\xa3\x9d\x7c\x95\xa4\xa5\xde\x20\xaa\x56\xfb\xa5\x61\xa7\x86\x8a\x4d\x92\xab\xa0\x6a\xa5\x1a\xa3\xfc\x73\x50\x78\xf5\x24\xa5\x02\x13\xca\x89\x20\xf2\x2f\x03\xee\x73\x2b\xc9\x0f\x79\xb2\x9c\x27\x05\x94\xef\x10\x9a\xaf\xb6\xe3\x98\xb4\x82\x72\x17\xd5\x8b\xc3\xa0\x5a\xe9\xd1\x66\xc0\xcb\x14\xd7\x70\xbf\xd1\x64\x83\xb0\xca\x92\x41\x39\xee\xc4\xc3\x5a\xab\x74\xeb\x6e\xf1\xca\xe4\x8b\x91\x14\x7c\xc3\x95\xf4\x87\x5c\x99\x0f\xda\x28\x08\xd3\xb0\x56\xe9\x86\xa8\x5e\xab\xd0\x76\x94\x14\x69\x54\xe9\x0f\x59\x8b\x27\x95\x7a\xbb\x51\x2a\x74\x11\x6a\xf0\x6a\x42\x0a\x9d\x41\xb1\xc3\x8b\x85\x42\xf3\x35\x74\xdd\x3d\xc9\x04\x87\x92\x70\xc6\x31\xff\x86\x27\xf9\x0f\x0d\x9c\xf6\x00\x73\x1a\x05\x69\x9b\xb0\x46\xa1\x54\x44\x83\x52\x10\xb7\xf2\xa8\xdd\x1e\xd6\x79\x03\x11\x56\x48\xcb\xe5\x7c\x69\xd0\xed\xa3\x76\xc8\x2b\xe5\x10\xb5\x7a\xad\xfa\x6d\x2a\x7b\x76\xa4\xe4\x9f\x1b\xf9\x8d\xee\x46\x3f\x34\xba\x83\x24\x2a\x12\xdc\x2d\x0d\xcb\x03\xdc\x8a\x71\x3b\x6c\xf4\x02\xd4\xa3\xcd\x01\xcd\x75\x83\x76\x52\x2a\xa5\x55\x5c\xad\x14\xcb\x03\x9c\x76\x59\xab\x5d\x6b\xd7\x71\xbe\xd9\xec\xdd\xa1\xfc\x51\x2b\xef\xff\x7b\x1d\x76\xdf\x67\x68\x0e\xb5\x2a\x69\x17\x55\x82\x5e\x31\x6a\x27\xb5\x7a\xa7\x5e\x6f\xb6\xc3\x7c\x9e\x35\xf2\x8d\x52\x35\x0a\x0a\x9d\x66\xb7\x5d\xe3\xdd\x52\xdc\x45\x9d\x62\x1b\xa5\xa5\x41\x21\x68\x17\xee\x86\xc2\xd7\x3e\x97\x00\x4a\x82\x21\x46\xf0\x1b\x7d\x8e\xc8\xc3\x64\xfc\xc2\xf0\x77\xd8\xd9\xa8\xf1\x5c\xa3\xd7\x69\x0c\x9a\xe5\x5c\x10\xe7\xd2\x88\x45\x95\x76\x3a\xac\x56\x0a\x95\x66\x2f\xad\x36\x93\x72\xb7\x1c\x14\x8a\x9c\xf6\xc2\x7e\xa5\x9f\x0e\xca\xe5\x46\xdc\xca\xbf\x89\xe9\xaf\x66\xfe\x75\x56\xfd\x8b\x99\xff\x91\x79\xac\x14\xe3\x7a\xb5\x37\x60\xd5\xb4\xcd\xc3\x42\xa3\x4a\x78\x3f\x57\xe6\x05\x42\x23\x52\x1d\x94\x93\x52\x8d\xd5\xcb\xd5\x76\x10\x56\x68\x35\xd7\x89\x51\x21\xd7\x4a\x79\xeb\x75\xe4\xdc\xcd\x83\x80\x63\x4e\xa0\x40\x04\xa0\xdf\x9f\xd0\xd7\xec\x63\x9f\x77\xf6\x7f\xde\xf1\xf9\x4a\xb1\xd8\x6e\xd5\xca\x51\x99\x55\x0b\x3c\x5f\xa3\x8d\x0a\x49\xfa\xf9\x34\x1f\xc5\xed\xb8\xc8\x9a\x69\xc0\xab\xdd\x7c\x1b\x17\x9b\xe5\x66\x75\xd8\xea\xa6\x69\x31\x47\xc3\xce\x8b\xc5\xe2\xd9\x62\x48\x25\x23\x10\x72\x00\x9e\x3d\xf6\xa1\x94\x6b\x37\xd3\x72\xa5\x8e\xf2\x15\x5c\x8c\x5b\x24\x97\xd4\x8b\x51\x5c\xa8\x17\xab\xbd\xb8\xd9\x43\xe5\x14\x0f\xa3\x62\xa7\xdc\x88\x7b\xf9\xb0\x11\x74\x06\xbc\x95\xe7\x8d\x04\x95\x6f\x6d\x1c\x26\xe3\xb1\x4e\x72\xbb\x61\x87\x4e\x35\x02\x7f\x3c\x67\x3b\xc1\x43\xb6\x83\x7f\x6c\x1a\xab\xd6\xaa\x49\xb3\x96\x2b\x56\xca\x8d\x06\x26\x94\x0e\x92\x41\x89\xe6\x0b\xb9\x61\xd2\x8a\xd3\x62\xbb\x5d\xaa\xe4\xd3\xa8\xd9\x6b\x61\x9a\x6f\xb6\xc8\xa0\xdf\xc1\xb5\x61\xbd\xf4\x36\x25\x23\x90\x63\x2c\x11\xe0\xfc\x1b\x13\x19\xfe\xa1\xc0\x96\xef\x0f\x68\x3d\xdf\x1e\x16\x9b\xbc\x19\xc6\x49\x37\x28\x35\xfa\x95\x56\x12\x14\x0a\x71\x2f\x49\x86\xd5\x7c\x5c\x2b\x92\x7e\x2b\x87\x2a\x35\x3e\x40\xf5\x66\x75\x50\xe4\xb8\x57\x7a\xcb\x10\xc3\x08\x08\x4e\x39\xba\xcd\x11\x5f\x63\x88\xfc\x58\xde\x42\x3a\x51\x23\xc4\xfd\x66\xa7\xc8\x87\x6d\x9c\xef\x86\x2d\xdc\xa4\xbd\xb8\x9b\x8b\xc2\x6a\x21\x40\xa5\x7a\xd2\x2d\xb7\x79\x14\x05\xed\x20\xae\xd5\xaa\x85\x21\x6f\x37\x4b\xc5\xb7\xbe\x7c\xb5\xf2\x6b\xbe\xc4\xbf\x3f\x91\x1f\xea\xf1\x42\x9b\xe2\x41\x10\x56\x6a\x8d\x1e\x1e\xd6\x62\x4c\xf2\x9d\x72\x30\x28\xf3\x72\x9f\xd5\x18\xce\xe7\xaa\xed\x5e\x77\xd0\x2b\xe4\x8a\x9d\x28\xe5\xed\x76\xab\x86\x3b\xcd\x5a\xe3\x46\xf7\x6d\x24\x61\x01\x09\xb9\x0f\x29\x88\xe1\x2d\xf2\x4a\x8c\x38\xa6\x48\x60\x04\x3f\x52\xfe\xe3\x37\x78\xaf\x27\x7e\x88\x97\x1f\x5f\xd3\x7d\xec\x09\xf2\x1c\x39\x18\xa4\x82\x60\x80\x6e\x89\xcd\xd7\x78\xa1\x3f\x96\x9e\xe5\xab\xcd\x90\xa4\xbd\x36\x42\xfd\x26\xc9\x47\x28\x57\x28\x16\x82\x72\x8a\x0b\xf5\xb0\x88\xcb\x3c\x0e\xe3\x5a\xaf\x45\x71\xa1\x4b\xbb\x61\x05\x95\x82\x72\x97\xc6\x24\x79\xbb\x66\x43\x88\x33\x8c\x11\x63\xec\x5b\x8b\x36\xfa\x43\xf9\x59\x10\x17\x87\x85\x76\x2e\x1f\x77\x7b\x49\xa5\x51\xc8\x57\xc3\x34\x0a\xf2\xcd\x28\xdf\x19\x86\xfd\x90\x0c\x86\xa5\x21\xce\x0f\x0b\x43\xdc\x44\x9d\xa4\x46\x6a\x65\x4e\x2b\x35\x96\xbe\x49\x7d\x10\x66\x08\x61\x04\x20\x12\xf0\x1b\x56\xb2\x1f\xb1\xf2\xc7\x63\xab\x00\x00\x52\x84\x19\x07\x40\x52\x8c\x91\x44\xcf\x93\xc8\xdf\x0d\xd9\xef\xb4\xec\xc7\x82\x5f\x6b\xd8\xc4\x95\x1e\x4f\x7a\x2c\xac\x32\x5c\x1d\x26\xb5\x7c\xab\x91\x76\x51\x3b\x4e\x62\x5c\xce\xd1\x7c\x5c\x0e\xe3\xb8\x17\xf6\xca\x9d\x28\x20\xfd\x5e\xb5\x5a\xed\x84\xf1\x9b\xb0\x82\x5f\x91\xc1\x5f\xf7\x3f\x83\xef\x5a\xf9\x85\x0d\x8d\xb7\xc7\x60\xbe\x67\x2f\xe3\x0b\xaa\xbe\x7c\xb8\xe5\x3f\xdd\x20\xf9\xfc\x80\xcb\x8b\x2b\x19\xb6\x52\x78\x8a\x99\x73\x4c\x58\xa8\x11\xd7\x54\x0b\xe9\x11\x56\x9e\x62\x08\x35\xa7\x4c\x2a\x44\xbc\xf2\x90\x00\xac\x2c\xd0\x14\x69\x86\xb1\x06\x5c\x3b\x29\x6f\xbe\x02\x7f\xf3\xe7\xa6\x83\x72\xa4\x90\xc3\xc8\x7b\x44\x84\x02\x5c\x03\xc7\x81\xb7\xd0\x33\x8b\xa1\x30\xd0\x2b\x63\x11\xd0\xcc\x18\x20\x0c\xc6\x96\x72\x4e\x11\x95\x82\x09\x88\xa8\x82\xec\xc3\x3d\x43\x03\x9f\xb6\x34\xfe\x7f\xf9\x93\x4b\x6a\x13\x72\xc9\x5e\x3a\xb5\x1c\x2f\x2c\x0b\xb2\x8c\xc0\x79\x9a\xcb\xec\xc0\x68\xbf\x3b\x55\x4e\x57\x98\xd8\xce\x20\x55\xb9\xaa\x2a\x8e\x6e\xf2\x61\x4c\xea\xea\xba\x46\xad\x6f\x6a\x1e\x06\x09\x24\x77\xb1\xdc\xec\xff\xa0\x21\x3f\xf5\xe7\xed\x36\xd2\x17\x40\xf5\x56\xa2\x1b\xa1\xcc\x72\x0a\xa0\x66\x4e\x73\x49\x99\x66\x9c\x32\x8d\x84\x77\x04\x1b\x47\x15\x03\x10\x68\xce\x1c\xe7\xcc\x4a\xe8\x19\x70\xd4\x39\xcb\x35\x52\x37\xc8\x7e\x06\xec\xce\x7b\xa1\x35\xb3\xde\x23\x8e\xb1\xf7\xd0\x63\xef\x15\x85\x04\x7a\x4c\x94\xe3\x94\x43\xe7\xb0\x15\x46\x39\x66\xb5\x85\x48\x6a\x65\x28\x84\x5e\x01\xed\x2d\x23\x1f\xee\xd3\x26\xa4\x54\x52\x2e\x39\x12\x1f\x89\xcd\xa3\xe6\x70\x0a\xe3\x03\x5d\x01\x5d\xe5\x03\xb2\xbc\x34\x8e\xbd\x73\x09\xf7\xd7\xab\x59\xe6\x58\x0c\x1a\xfb\x3c\xac\xa1\x88\xe7\x38\x1b\x1e\x86\xed\xf2\x56\xf6\x6c\x52\xd3\xdd\xda\xc4\xcc\x7d\x63\x7a\xe1\x28\x1d\x16\xab\xbd\x59\xb5\xd9\x37\xb5\x2e\x1d\xef\x8f\xab\xed\x02\x3e\x93\x93\x34\xfb\x51\xef\xfe\x5b\xe5\xe5\x8f\xe7\xf8\xb6\x7b\xfd\xfb\x29\x68\xb6\x3e\xb2\x83\xaf\x72\xbc\x08\x3a\xeb\xba\xdc\x07\xfd\xf3\x6c\x7f\x2e\xe0\xa4\xd3\x58\xe3\xc9\xfe\xdc\x39\x86\x8b\x88\x05\xbd\xd9\x29\xd7\x21\x61\x7b\x79\xcc\xd4\xf7\xfb\xec\xc5\x5c\xb3\x67\x91\xcd\xcc\x8b\x39\x01\xb6\xcb\xfe\x99\x4f\x51\xb4\x5d\x20\x19\xae\x0f\xbb\x5e\x3b\x33\x3a\xca\xe1\xf3\xfd\xff\x63\xa2\x0b\xa0\xfa\xbf\x01\xdd\xff\xea\xcf\x77\x12\x8d\x09\xf4\x5e\x1a\x22\x85\x96\x80\x33\x2f\x3c\x82\xca\x29\x2e\x14\xc6\xda\x00\xc3\xb0\x54\x9a\x1a\x2f\x05\x53\x56\x1b\x64\x85\x05\xc4\x4a\xa4\xa9\x92\x96\x59\x7f\xa3\xf1\x67\x8c\x0a\x28\x01\x50\xc0\x4b\x8a\x29\xe1\x10\x73\xe4\x91\xd0\x0e\x7b\x2d\xb0\xc2\x18\x0b\x65\x04\xe0\x04\x7b\x0f\x34\xe7\x10\x78\x05\x81\xd0\x00\x69\x8c\x85\x67\xc0\x8b\xe7\xcc\xfb\x85\x68\xf9\x89\xe8\x2c\xea\xa8\xb8\xb8\xb7\xad\x12\x62\x78\x3e\xd8\x2f\xfb\xdb\x5a\x93\x16\xae\xf3\xf5\x28\xac\xdb\x83\x45\xa8\x2d\x47\xd4\xf1\x64\xb7\x29\x0c\x4b\xad\x5c\x08\xd3\xdd\x6a\x5f\xd9\xb6\x93\xd9\x89\x9f\x59\xd6\xd4\x9a\x16\x5d\x1b\xf9\xdc\xe1\xca\xcb\xa8\x3d\x6f\xaf\x3a\xa5\x34\xbc\x7b\xf8\x4e\xf4\x03\x44\xb4\xb9\x3c\x86\xc7\xa8\x11\x8a\xd9\xa5\xb0\xc3\x25\x7d\x80\xe3\xd5\x41\x98\xc5\xea\x74\x82\x15\x7e\xde\xa4\xa5\x86\xde\x83\xe1\x0a\xac\x86\x41\xad\x40\x7b\xb0\x7d\x8e\x2f\x62\x75\x9c\x66\x48\x63\x1a\x91\x6d\x25\x07\x9a\xd9\x3c\x36\xad\xcc\x38\x5f\x0f\xb6\x11\x91\xa3\xcc\x5d\x73\xf4\x0e\xb1\xef\xc7\xd8\x5f\x80\x58\x83\x18\x80\x12\x42\xe4\xb8\x85\x0a\x03\xae\xb9\x66\x4a\x10\xac\x2c\x65\xde\x72\xac\x29\xf4\xda\x1a\xe4\x18\xa6\xde\x71\x0d\xbc\x31\x42\x2b\x47\x98\x93\x04\xf2\x1b\x6d\x3f\x85\x7a\x07\xa9\x77\x02\x73\x07\xa4\x17\x90\x02\x62\x18\xba\xc1\xc7\x35\x76\x86\x40\xa5\x11\x60\xdc\x2b\xa7\x0d\xc1\x86\x30\x0c\x94\xd2\xd8\x62\x65\x3c\xc4\x9e\xde\x62\x30\x79\x25\x16\x7f\xca\x1a\xf2\xd7\x96\xcf\x98\x4e\x7a\x68\xd9\xe3\xf4\x52\x3a\xac\xc9\xea\x7a\x0c\xce\xd3\xc5\x36\x69\x2e\x4a\x5b\x7d\xda\x4f\x5b\xdd\x61\x0d\x6e\xac\xf6\x9d\x4c\xe2\x3c\x29\x26\x49\xa5\x8b\x66\x06\x26\xc6\x5f\x97\x0d\x18\xa4\x4d\x59\x8d\x0f\x85\x7c\x05\x56\x8b\x49\x79\xbd\xec\xc9\xca\x3d\xc6\x3e\x13\x3b\x7a\xf5\x78\x45\x14\x5d\x39\xbc\x56\x41\x96\x14\x1b\x22\x1b\x97\xb2\x04\x9f\xba\xe1\xf2\x02\xf3\x83\xec\xd1\x94\xd1\xd4\x6c\x5b\xb3\xab\xd6\x66\x9a\x29\x7a\x56\xf0\xa3\x25\x29\xb6\xba\xa5\x6a\x32\xc7\xbb\xcc\x39\xb7\xb9\xe4\x96\x99\xc3\x31\x6c\x86\xe9\x69\xb3\x6d\x76\xb7\xcd\x30\xdb\xbf\x6b\x6e\xbd\x43\x6c\xa1\xf2\x5e\xaf\xff\x02\xc4\x7a\xea\xa5\x81\xde\x70\x00\x28\x87\x56\x51\xeb\x81\x65\x0e\x38\xe3\xac\xd2\x5c\x78\x27\xa0\x63\x9e\x31\x40\x89\x23\x98\x22\x2f\xb9\xc2\x1e\x18\x8f\x2d\xf5\xf8\x4e\xec\xcf\xa0\x5e\x72\x67\x15\x03\xcc\x62\x6c\x2d\x97\x82\x1a\x0c\xa5\xd2\xd6\x0b\xec\xb4\x61\x90\x72\xe4\x21\x22\x1c\x4b\x4a\x30\x60\xc2\x41\x62\x34\x95\xce\x3a\xe4\x15\x45\x37\x62\xe9\x03\xb1\xf0\x13\xb1\xa2\x3a\x2a\xb5\xc3\x83\x6f\xaf\x4e\x0e\xef\x37\xe3\xc2\xb6\xaf\xa5\xe1\x3d\x7f\x34\xf5\x45\xec\x29\x2f\x88\x4b\x7d\x3b\xd3\xeb\x56\x72\xb9\xca\x49\x8a\xb6\xe5\xf1\xe9\xd0\x3b\x36\x8a\x87\x7a\xc8\x16\xb9\x63\xb7\x41\xd8\xb8\x92\x49\xce\x35\x54\xa5\x06\xee\x0f\xf5\xdd\xe4\x39\x57\xb8\x13\x7b\x7a\xf5\xf8\x8c\x1d\x1b\xd9\x5a\xfb\x7c\x1a\x82\xcb\xb2\x1a\x45\xdb\x5a\x6f\xdd\xe8\x78\x3a\x18\x6b\x3b\x8b\x67\xa0\x5e\x69\x64\xaf\xc3\x73\x2e\xb3\x71\x09\x57\x69\x09\x5c\x71\xb2\x28\x9e\xce\x8b\x2d\x26\xcd\xed\x79\xdc\xbf\x88\x4e\xfb\x3a\xef\x45\xa5\xe9\xb8\x5b\x1f\x38\x3c\xc9\xcc\x9f\xb9\xeb\xbd\x43\x6c\x19\xbc\xd7\xeb\xbf\x00\xb1\x8e\x32\x2d\xb1\x44\x1e\x48\x22\x91\x27\x40\x10\x2e\xa4\x62\x9e\x3b\xa7\x30\xe2\xc4\x32\x29\xa1\x91\x50\x58\x49\xc1\x6d\x21\x2b\x9d\x14\xd4\x6b\xc7\x0c\xb0\xe0\x9e\xa3\xfe\x0c\xea\x39\xa0\xd6\x48\xe7\xa0\x25\x96\x39\x8a\x24\x54\x8a\x58\xa2\xa9\x46\xd8\x1b\x29\xb1\xa7\x46\x0a\x6d\x01\x44\x5c\x08\xa0\x85\xe1\x9e\x09\x86\x0c\x42\x4c\x59\x62\x3e\xdc\x8b\xcd\x2f\xc4\xa2\x97\xac\x20\xa1\x27\x7f\x3e\xe5\x92\xb2\x4a\x7c\x61\x40\x1a\xd7\xfd\x06\x4f\x33\x23\xa7\x51\x5a\xec\xce\xe2\x4e\x26\x59\x65\x0b\xcd\x66\x5f\xe0\xf8\x22\xf9\x2c\x0b\x8a\x28\x18\x94\x51\xb3\xc9\xa6\xb9\xf3\xca\x56\x92\x68\x34\x5d\xb4\xeb\xd5\xd3\xb8\xb0\x6f\x88\x7d\x6b\x38\xf2\xe2\x35\xc6\xf6\x1f\x3c\x1e\x8b\x16\x0a\xf6\xf9\xfc\xce\xcd\x49\xb9\xb2\xab\x91\x83\xdd\x24\x97\x7a\x6b\x63\xb6\xaa\x34\x35\x41\xb9\xdf\xe9\xc5\x02\xd2\xd1\xb6\x78\x4a\xcc\xf2\x50\xee\xc1\x43\x6f\x5d\xda\x74\x7b\x7b\x5d\xc9\x5e\x86\x4d\x78\x49\x8f\xad\x70\x39\x09\x0e\x91\x47\xe3\xc9\x69\xa2\xf6\xdd\xbb\xe6\xf4\x1d\x62\xab\xe9\x7b\xbd\xfe\x0b\x10\x0b\x8c\x56\xd4\x32\x22\x98\x06\x02\x18\x04\x24\x21\x56\x38\x04\xb8\xb0\x0a\x50\x41\x89\xd3\xc4\x32\xa1\x81\x21\x44\x71\xc5\x81\x07\xcc\x7a\xad\x91\x30\x40\x3c\x13\xfb\x33\xa8\x97\xc2\x7a\xed\x91\xc6\x0e\x69\x08\xbc\xf1\x54\x42\x64\xef\x73\x3e\x40\x92\x68\x83\x0d\xf2\x8c\x22\x82\xa0\xf5\x4c\x38\x2d\xb8\x10\x8a\x51\x26\xa9\xc4\xc6\xb2\x0f\xbf\x3f\xf1\x07\x62\xf1\x27\x62\x33\xfd\xed\x8c\xd6\x4f\xf3\x6a\x1d\xe4\x43\x57\x5d\x1f\xfd\x61\x75\xb1\xb1\x1a\x96\xab\xa5\x78\xde\x9a\x8f\xf2\x6e\x51\xcc\x64\x74\x00\xaa\xdb\x1e\xca\x2d\x89\xea\x4e\xd3\xa8\xbe\x2e\x78\xef\x2b\x59\xc7\xca\x05\x5c\xea\xb4\xf3\x61\x75\x45\x82\x6d\xba\x9f\x48\xd2\x18\x6c\x9e\x61\xb9\x13\xfb\x00\xd1\x8c\x96\x1b\xad\x35\xee\xe6\x2b\x97\x46\x6f\x2a\xfa\x8b\xb8\xb4\x1d\xef\x50\x3e\x53\x49\xa6\x92\xa0\xf5\x12\x6f\x9a\xfd\x4a\x90\x24\x67\x96\x62\x2e\xb6\xcd\xc9\xae\x95\x6d\x0e\xda\x75\x75\x3d\x47\xf9\x79\xfd\x24\xea\xa8\x37\xab\x58\xb9\x62\xc4\x55\xd6\x73\xd5\x9f\x09\x78\xcf\x3a\xcc\x3b\xc4\xd6\xc4\x7b\xbd\xfe\x0b\x10\xcb\x94\xb7\x10\x63\xe5\x39\xf6\x5e\x5b\xee\x2c\x65\x06\x31\x6a\x99\xc5\x9a\x3b\xcc\x89\x06\x16\x72\x40\xa1\xb1\xd0\x78\xe1\xa4\xb3\x9a\x33\xed\xbc\xb1\x9a\x70\x7d\xdf\xf4\xfa\x09\xd4\x63\x22\x38\xc6\x12\x58\x64\x21\x06\x0a\x5a\x0b\x19\x12\x0c\x78\x29\x81\x71\x42\x1b\x48\xa1\xd1\x48\x6a\x04\x9c\x31\x50\x4a\xed\xbd\x25\x42\x18\x40\x14\x16\xe0\x16\xa7\xc5\x03\xb1\xe4\x13\xb1\xa7\x0b\x4b\x06\x9d\xd2\xae\x52\xc8\xe7\x7b\xdd\x94\x8c\x5c\xbc\x2a\x8e\x7b\x0c\xc0\xd5\x2e\x6a\xd7\xdc\xb2\x70\xd2\xfe\x70\x99\x06\xa3\xea\x30\x3b\xea\x97\xc7\x24\x2c\xad\xda\xc9\xf4\x9c\x9b\x57\x93\x91\xd5\x6c\x45\xa9\xa3\xf5\x66\x4e\x64\xb7\x95\x7d\x92\x99\xe4\xa2\xc5\xe8\x79\x42\xbe\x13\xfb\x90\xc7\x52\x3f\x06\x85\xf6\x30\xd3\xf0\x2e\x20\x93\x32\x2e\x75\x23\x5d\x62\x66\x53\x2d\x85\x67\xb0\xc9\x53\x8e\x20\x2b\xeb\xee\xa9\xd5\xec\x81\xf1\xb5\xd1\x02\xfb\xf0\xb4\xb2\x60\x50\x2b\x15\xe8\x2c\x62\xf5\x53\xbf\x5c\xaf\xe9\x4a\xe3\x9a\x5b\xe8\xac\xec\x54\x4e\xe1\x8a\xe4\xee\x59\xc7\xe8\x1d\x62\xdb\xd1\x7b\xbd\xfe\x2b\x10\x2b\x3d\xe2\x8e\x23\x2d\xb9\xe7\x46\x73\xed\xed\xed\x17\x0b\x00\x44\x9a\x6b\x05\x04\xb0\xd8\x3a\x03\x05\x64\x42\x08\x22\x18\x62\x1a\x3a\xa8\x95\x45\xd4\x29\x7a\xdf\xfd\xfa\x09\xd4\x1b\x06\x30\xb8\x65\x17\x9a\x40\x4a\x29\x20\xc2\x60\xce\x25\x03\x58\x48\xed\x3c\x10\xdc\x33\x63\x89\x86\x8c\x2b\x8b\x15\x03\xc6\x02\xec\x88\xf7\xcc\x0b\x05\x88\xfa\xf0\xfb\x93\x7c\x20\x96\xbe\xec\x7e\x6d\x65\x78\xdd\xe2\x66\xf6\x98\xf0\xbe\xce\x0f\xad\xee\xee\x33\x31\xd8\xc5\xc5\x53\xcf\x00\x93\x69\x2c\xf7\x7b\x74\x3c\x5e\x75\x9b\x57\xa0\x6a\xf4\x32\xe5\xfd\xf5\x08\xd3\xcb\xaa\x31\xc8\xc4\xbd\x64\xb5\x9b\x86\x27\xd6\x1e\x16\xc7\xa7\x7d\x03\x36\xa3\x65\xd0\x0e\xf6\x87\xe7\x65\xfa\x9d\xd8\x87\x3c\x56\x27\xad\xfa\xe0\x30\x42\x95\x21\x2a\x91\xf6\xf2\xd4\xdb\xe6\xbb\xc7\xca\xa9\xc1\xba\xd1\xfa\x80\x60\xa6\x83\x7a\xc9\x78\x53\xaf\x0d\xba\xe5\x52\x70\x4a\xe8\x05\x14\xfb\xbd\x70\x5a\xb0\x34\x2d\x4c\x34\x3f\x8d\xb3\x3a\xee\x9c\x87\x0c\xb0\x34\x02\x05\xda\x94\xc7\xc9\xa8\x73\x1f\x11\xb3\x77\x88\xed\x9c\xde\xeb\xf5\x5f\x81\x58\xa4\x2c\xd1\x58\x29\x6d\x90\x92\xd8\x01\x49\x20\x14\x92\x09\xc7\x20\x24\x16\x3a\x48\x95\x87\xd6\x6b\x4e\xb1\xa7\x9a\xdf\x50\x02\x50\x3b\xea\x35\x76\x52\xdf\xe3\xe3\xcf\xa0\x1e\x1a\xcb\xa8\x21\xd6\x2a\xaa\x88\xf0\x10\x71\x05\xa0\x14\x4e\x59\x6d\x00\x53\x46\xb1\x5b\x8e\x0b\x3d\x94\x42\x53\x6a\x95\x21\x12\x61\xa2\x28\x82\x42\x5b\xcf\xd1\x87\xe7\x23\x7b\x2f\xc8\xb2\x17\x64\x97\x17\xbf\xac\x51\x8f\x2f\xf8\x28\x3d\xbe\xb6\x82\xce\x9e\xaf\x2a\x85\x2e\xde\x95\x72\xaa\x32\xae\xa4\x8b\x9d\x2b\x31\x30\x67\xf3\xb5\xec\x51\xd6\xee\xac\x4c\x9b\x0c\xd7\x49\x32\xdc\x65\x47\x73\xb3\x2c\xf5\xcb\x61\xa7\x5f\x2c\xf6\x58\x7d\x52\x93\xfe\xe4\xea\xf5\xf4\x15\xd9\xc1\x83\xcb\x65\x66\x3a\xdd\x0d\x6a\xec\xc8\x46\xa0\x91\x46\xc5\x73\x77\x05\x33\xe9\x6a\x34\x41\x97\x42\x67\x9a\x8c\xab\x82\xc5\x30\x38\x57\x1b\xc7\xd0\xc0\xf9\x39\x46\xf3\x75\x45\x74\xdc\xa8\x94\xb2\xfd\x31\x50\xbb\xf5\x81\xd8\xf2\x79\x51\xef\xdb\x6d\x38\x9b\x76\xe6\x95\xf4\xe8\xcd\x1d\xd9\xd5\x3b\xc8\xf6\xc9\x7b\xdd\xfe\x0b\x20\x4b\x1d\x75\x42\x62\x0d\xbc\x04\x5c\x28\xce\x19\xc0\x9e\x01\x26\x24\x01\xd4\x22\x62\x11\x41\x84\x5b\xe0\xa0\xd4\x00\x78\x01\xa9\x45\x10\x69\xe7\xb5\x80\x92\x51\x76\x47\xf6\x27\x60\xaf\xac\x65\xcc\x01\x04\xac\x62\x56\x43\x4a\x81\x06\x86\x2a\xe2\x29\x25\x42\x1b\xe4\x20\x03\xda\x3b\xc5\x9d\x62\xca\x69\x2c\x91\x76\xc2\x1b\xc7\xbc\x94\x8a\xd8\x1b\xf6\x10\x3e\x20\xcb\x5f\x90\xad\xed\x3b\xd7\xcd\xf6\xb4\x99\x65\xf2\xbd\x30\x9d\xaf\xe8\xb8\x18\x97\xc7\x83\x63\xd9\xef\x61\x13\xee\x4f\x9d\x28\xd0\xd4\xef\x32\x0b\xca\x79\x54\xa4\x1a\x56\xdc\x04\x5f\xcb\x45\x19\x06\x8b\x5d\xbd\x2b\xc8\x9c\xa7\x3a\xe8\x75\xca\x59\x5e\xcc\x9e\x2e\x8b\xf6\x46\x8a\xd7\x1a\xc3\xe0\x81\xa2\x75\xe5\xbc\x56\xdd\x66\x10\x57\x3b\x38\xf1\xfb\x52\x52\xec\xa4\xdb\xb0\x0a\xa2\xb1\x8f\x59\x29\x86\x0d\x47\x33\x69\xd8\x64\x40\x66\xf6\x70\x41\xf2\x05\xa5\x75\xb1\x9f\x3f\x9d\x55\x17\xf6\x2b\xc7\x3c\x19\xe4\xb3\x6c\xc9\x16\xdb\x6d\xa3\x73\x5c\x65\x1b\x9a\x2e\x66\xcf\xe5\x8c\xdd\x3b\xc8\x26\xe6\xbd\x6e\xff\x05\x90\x05\x58\x5a\x89\x01\x36\x08\x18\xa9\xa8\x00\x02\x79\x48\x3d\x11\x9c\x3a\x41\x0c\xf4\xc0\x38\x62\x0d\x02\x4e\x21\xcc\x05\x63\x86\x4a\x4b\x25\x37\x06\x13\xa9\xa0\xbd\x97\x5e\x7f\x02\xf6\x06\x13\x8f\x29\x53\x4c\x68\x2f\xed\x2d\xb0\x3a\x6b\x19\x06\x12\x29\x29\x9d\xb5\x12\x78\x2e\x09\xf0\xd6\x43\x45\x84\x42\x56\x62\x4e\x39\x05\xd0\x0a\x05\x81\xb8\x23\xfb\x50\x16\xc3\x2f\x65\x31\x48\xdd\xa4\xbb\x6b\xce\xca\x93\xa5\x1d\x35\x51\x6e\x35\x0f\x92\x4e\xb7\xd3\x9a\xf9\x16\x19\xee\x82\x4c\x2e\xe9\x84\x5b\xce\x47\xc3\xe1\xa0\xd8\x29\x5f\xcc\x24\x68\xba\xca\x02\x04\xca\x8d\x37\x99\x64\xdb\xd6\x3e\xe7\x51\x3a\xd8\xa3\xd5\xe2\xea\x5b\xcb\xa8\xb3\x8c\xd4\xfa\x99\x96\x3b\xb2\x0f\xa9\xac\x21\x4d\xbc\xca\xe4\xaa\x93\xea\x31\x49\x2a\x7e\x9a\x75\xfd\x56\xb3\x08\xdb\xed\xca\x76\x19\xa2\xa5\x4f\x80\x22\x55\x3e\x28\x5e\x3a\xdb\x42\xf7\xda\xdf\xa8\x7a\xc6\x9e\x4a\xdb\x3d\x9c\xe6\x3b\x9b\x21\xb7\xb3\xa6\xeb\x15\xa4\x50\x9d\x5a\x7d\x18\x43\xdb\x2a\xa7\xab\xd6\xf8\x4e\xe9\xe9\x1d\x64\x87\xef\x76\xfb\xaf\x80\xac\x81\x44\x11\x46\x3d\xbb\x9f\x98\x02\x58\x51\xc6\xbc\x33\x90\x7a\x64\xb4\xb1\x0a\x71\xa5\x0d\x26\x4e\x1a\xa1\x29\xd4\x42\x48\x4a\x14\xf2\x52\x63\xe0\x99\x86\xf7\xc5\xd7\x4f\xc0\x1e\x59\x2f\x18\x15\xc6\x53\xa2\x09\xe1\x4c\x4b\x28\xa4\x62\x08\x4b\x4a\x38\x43\x42\x4b\x6c\x3d\xc6\x8e\x32\x24\x91\x41\x58\x23\xc9\xd4\x2d\x6f\x90\x46\x48\xe8\xef\x27\x0e\x1e\xea\x5e\xf8\xa5\xee\x75\x6a\xd8\xd9\xa9\x99\x2f\x54\xd7\x69\x3e\x2f\xfa\xb2\x62\xdd\x38\x2a\x9f\xae\x33\x9c\x2f\x6c\x2a\x78\xbc\x38\x0f\xe1\xd0\x47\x71\x75\x65\x8b\xfe\x68\xaf\xfb\xf3\x36\x2d\x37\xe5\xf9\x6a\x37\x3a\x2b\xd7\xa6\xb6\x1a\x57\x92\x49\x77\xb9\x1f\x5c\x33\x9d\x73\x13\xad\x2e\x34\x87\x5f\x77\xb8\x06\x0f\x19\x65\x71\x36\xe8\xc5\x97\x62\xe6\xc4\x78\x9b\x2e\x33\xe5\x51\x21\x76\x7a\x4e\x77\xcb\x3e\x4a\xe7\xb9\xdd\x15\x9f\xeb\xdd\x4d\x2e\x6a\xed\x5a\xe1\x3e\x53\x1a\x44\xb2\xb7\x0f\xed\x76\x96\x2e\x16\x15\xda\x2f\xa7\xab\x43\x17\x5f\x9b\xf3\x74\x5d\xcf\x37\x2e\xf3\xcd\x74\x83\xcc\xa4\x2d\xef\x43\x02\xbc\x83\xac\xf9\x55\xab\x08\x8a\x11\xe5\xa1\x01\xc2\x6b\x6a\x91\x50\xda\x58\xe8\x8d\xb4\xca\x09\x63\x34\xd4\xde\x48\xad\x9d\x81\x9a\x6b\xc2\xb9\x83\xc4\x1b\x85\x8c\x56\xd6\x28\x22\x01\x37\xcf\xfb\x05\x7f\x1f\x7b\x6b\xad\xd6\x0a\x38\xe7\x1d\xa5\x8c\x08\x02\xb5\x51\xde\x70\x6b\xb0\xa0\x0c\x28\x8f\x88\xb5\x92\x33\x29\x29\x61\x1e\x23\x68\xb9\x11\x86\x11\x4c\x15\xa0\x0a\xdd\x92\x0b\xf8\x50\xf8\x22\x2f\x85\xaf\xd3\xa9\xb7\x2e\x25\x28\x08\xc2\x53\x63\x3e\x3c\xf2\x5c\x72\xb9\x08\x34\x71\xdb\x13\x60\x66\x02\x4b\x64\xd2\xef\x4c\x32\x3a\x6a\xaa\xf3\x91\x9a\x7d\x6a\x4d\xd4\x09\x17\x02\xef\x3a\xc7\xd5\x6c\x8d\x51\x1e\x76\xb2\x41\x65\xa4\xb5\xd9\x0f\x07\x6a\x70\xec\x9d\x63\x14\x3c\xaf\xd5\x6f\xc8\x26\x0f\x2e\x9f\x0b\x17\xe9\x63\xbd\xba\x6f\xe4\x56\xdd\xfc\x71\xb5\x9d\x87\xb5\x73\x83\x8d\xd6\xcb\x5d\xde\xed\xa6\xcb\x0c\xcc\xc3\x6c\xb9\x04\x8e\x70\x6b\x11\x5f\x35\x78\xa6\x3f\xe8\x84\x25\xb1\x15\xde\x34\x8a\x69\x4d\xcc\xf0\xd0\xae\xe7\x3d\x7d\xad\x58\x5f\x39\xcf\x62\x95\x53\xb5\x3b\xa5\xe4\x1d\x64\xfd\xbb\x27\x0d\x7e\x01\x64\x85\x42\x12\x61\x24\x25\xb2\x4c\x6a\xcd\xa0\x27\x94\x1b\xce\x84\xe2\x84\x6a\xe6\x35\xb2\x02\x5a\x65\xb5\xb0\x8c\x0b\xe0\x89\x64\x40\x4b\xe7\xb0\x40\x46\xaa\x7b\x0e\xf9\x53\xb0\x17\x1c\x48\x28\x21\x15\x8a\x03\x6a\x14\x75\x02\x03\x47\xb5\x60\x9e\x01\xa3\x38\x40\x9c\x31\x6b\xb9\x75\xcc\x5b\xeb\xa8\xa5\x9a\x08\x88\x2d\xa5\x00\x0b\x0f\x94\xfb\xf0\xfc\x74\xca\x0b\xb2\x2f\x95\x2f\x36\xac\x09\x93\x6f\xee\x6d\xad\x76\x8c\xcb\x62\xa9\x58\x74\x39\x1f\xc5\x82\xf3\xdc\x9e\xb7\x31\xe9\x65\x6b\xf5\xfa\xd6\xac\xab\x39\x61\xd1\xc8\x2a\xa9\x92\x69\xfb\x0c\x16\x2a\x73\x28\xd1\xca\xb2\xd0\x0c\xc3\x81\xc6\xdc\x4f\x87\x97\xb8\x75\x69\x9e\x9a\x93\x56\x78\x7c\x3d\x5d\x90\x3c\x80\xd3\xdb\x4d\x7b\xf3\x41\xf5\x9a\x5c\x93\x42\x29\x3c\xf0\x61\x22\xe2\x88\x94\xf0\x38\x89\xaa\xa3\xee\x66\x01\x57\x64\x73\x0c\x23\xaf\x59\xa9\x9c\x6f\xcf\xfa\x93\x65\xce\xac\xdd\xe8\x44\xf5\xf8\x98\x46\xeb\x53\x15\x69\xeb\x9d\x96\x78\x0e\x75\x27\xd7\xec\xf7\x0a\xd3\xd3\xf6\x1e\x65\xc5\x3b\xc8\x8e\x7e\xd5\xca\x17\xf3\x44\x73\x23\x29\x57\x04\x29\x8c\xac\x15\x18\x58\x82\x11\x44\x96\x6a\xad\x6e\x1e\x44\x08\x52\x2c\x1c\x01\x10\x28\x82\x30\xa1\x14\x63\x60\xad\x06\x52\xa3\xfb\xfe\xd4\xcf\xc0\xde\x51\x24\x85\xa7\x40\x60\x09\x04\x40\x18\x72\x0a\xa9\xd5\x1a\x7b\x6a\x0d\x65\x1c\x42\x6d\x8d\x64\x40\x72\xef\x81\x23\x9e\x28\x0b\x2c\x46\x82\x6a\x89\xb5\x21\xfe\x86\xec\x43\xe9\x8b\xbc\x94\xbe\xc8\x6a\x5d\xb9\x2c\x3a\x70\x7d\x40\x65\xd0\x17\x76\xb5\x06\x03\x94\xb9\xa0\x1c\xda\x1f\xe2\x21\x29\x80\xf9\xe8\xe0\x08\xa9\x57\xb7\xfd\x14\x8e\x82\xde\x20\x57\x3a\xb5\x5a\xcd\x68\x93\xb2\x66\x53\x14\x8b\x97\xf5\x7a\x56\x5e\xed\x6a\x6d\xd2\x2d\xc0\xd3\x2e\xb5\xd9\x6c\x25\xf3\x9a\xcb\x26\x0f\xb9\x6c\x5a\x5b\x1d\x78\x6e\xd6\xdc\xb7\xf6\x8b\x02\x69\x50\x92\xed\x76\x57\xbd\x51\x2e\xe8\xf7\xf2\x8b\xfc\x3c\xdb\xc8\xc8\xee\x68\x83\xc6\x71\xf9\x3a\xaf\xa5\xb2\x35\xa2\xf9\xa0\x72\xb6\xed\x44\xef\xb2\x89\xe9\x2f\x43\x8d\xab\x69\xd5\x67\x0b\x33\x59\x03\x71\xb4\x1a\xd0\x86\xe8\xde\x12\x8f\x5c\xf0\x0e\xb2\xf3\xd1\x7b\xdd\xfe\x0b\x20\x2b\x94\xf7\x00\x20\x46\xbd\x96\x82\x40\x24\x01\xb2\x5e\x5a\x6a\xf0\x6d\xb5\x44\x14\x80\xca\x6a\xcb\x25\x22\x12\x38\x4f\x85\xc0\x8c\x70\x61\xb5\xb4\xc2\x61\xf8\x71\xc7\xe0\x27\x60\x6f\xbd\x30\x1e\x59\x05\x21\x84\x02\x23\xa7\x19\x40\xce\x59\x46\x05\xa5\xd0\x39\x4e\x2c\x26\x96\x38\x8b\xa5\x27\x0e\x58\x8e\x39\x31\x4e\x63\x6a\x1d\xd0\x00\x59\xfe\xe1\xf9\xf1\xba\x17\x64\x5f\x6a\x5f\x48\xd6\x7d\xb5\xcf\x5a\x9b\x68\x8f\x0a\x85\x5e\x34\xae\xf7\x0f\x2c\xbb\x9d\x4d\x8a\xdd\xe9\x2c\x68\xad\xf3\x71\xb1\x77\x2d\xd8\x5d\x75\xb7\xbd\x98\x06\xae\x66\xcb\x6b\x64\xc2\xe3\x96\x60\x5c\x6a\xba\x0d\x4e\xf6\xd5\x72\xb3\x2f\x32\xd7\xc4\x9e\xeb\xed\x76\xef\x0c\x59\x6b\xfc\x10\x65\x1f\x72\xd9\x4d\x79\xd0\x28\xb6\xed\xa0\x70\x72\x35\x32\xac\x84\xb9\xb4\x9b\x36\x66\xd7\xd3\x04\x6d\xc4\xa4\xb2\xca\xc9\x73\xf1\x1a\x34\x36\xcd\x4e\xd6\xfb\x69\xb3\xae\xc2\x76\xa9\x50\xdf\xa6\x79\xbe\x1f\xa6\xfd\x36\x5f\x76\xbb\xdd\x1e\xef\x2e\x01\x89\x0d\xee\x36\x76\x10\x8f\x76\x79\x78\x47\xf6\xbd\x73\xb4\xab\xd5\x7b\xdd\xfe\x0b\x20\xeb\x98\xa7\xc4\x29\x6a\x8d\x57\x12\x31\x4f\x1d\x61\xd6\x02\xca\x98\x04\x5e\x03\x0c\xad\xc1\x12\x71\xc8\xad\x01\x5e\x2b\x03\x34\xf2\x04\x42\x27\x88\x64\x14\x41\xf0\x1c\x65\x7f\x02\xf6\x86\x3b\x23\x38\xb5\x18\x29\xea\x94\xd5\x52\x08\x6e\x14\x85\xca\x20\xa1\x80\x67\xc0\x2a\x61\xbd\x05\x80\x33\x61\x94\x43\x4a\x6b\xa6\x09\xa0\xde\x69\x22\xd8\x0d\x7b\xf8\x50\xfc\x22\x2f\xc5\x2f\xb2\xcd\x06\xf9\xa1\x3f\xa4\xad\xce\x2c\x8f\x29\x34\x51\xa3\xd4\x5b\xe5\xb6\x1a\xd2\x6a\xb5\x70\x1c\x54\xe2\x99\x8b\x0f\x76\x3a\x2d\x0e\xd6\xbc\x3c\xc9\xcc\x0a\xb9\xb0\x6e\x7a\xe9\xbc\x91\xed\xbb\xea\xfa\x58\x67\x47\xba\xaa\xb4\x46\x53\x9f\x2b\xcb\x3d\xea\xef\xd2\x1e\x38\xbe\x96\x6b\x1f\xab\xfc\x71\xed\x7c\x09\xa2\xd5\x25\xca\x8e\x96\x54\x8e\x73\xe9\xb5\x7e\xd6\x3d\x24\x06\x7a\x72\xc6\xad\xf2\x85\xef\x80\x60\xc7\x75\x27\x25\x76\xe7\x77\x63\x08\x2e\x6b\xb7\xd5\x8b\x8a\xaf\xf5\xd4\x69\xb5\x6a\xa6\xf1\x26\xce\xb6\x72\x68\x5a\x23\x9b\x03\xda\x07\x49\x66\x5f\x51\x77\x64\xdf\x3b\x28\xbb\xef\xbd\xe9\xf1\x7c\xf0\x6b\x20\x6b\x1c\x34\x96\x2b\xa5\x81\x43\x48\x41\x27\xa0\x11\x52\x5b\xc8\xa1\x05\xda\x2a\x6a\x85\x75\x06\x09\x81\x08\x24\x18\x20\xea\x99\x07\x16\x52\x05\x2d\x57\xc6\x40\x71\x9f\xd4\x7f\x02\xf6\x4e\x22\x42\x35\x31\x52\x70\xa9\xa4\xbe\x3f\x1e\x63\x98\x20\x88\x78\xa7\x8c\xf5\x1e\x02\x05\x2c\x16\x50\x08\x88\x00\x03\x80\x38\x6d\xb8\xe0\x9e\x43\xc2\x11\xbb\x2f\xbf\x1e\xaa\x5f\xe4\xa5\xfa\x95\xd1\xb0\xbb\x49\x4c\x66\x5d\x3d\x26\x33\x6d\x73\x03\xd5\xca\x9c\x22\x7b\xa2\xd5\xb3\x37\x05\xbe\x0d\x76\xc7\x56\x9b\x85\xf3\x79\xa5\xa5\x52\xd9\xa9\xec\xce\x19\xb4\xb8\xce\xf5\x2c\xe3\x65\x27\x5c\x1d\xdd\x72\x5d\x5f\x65\xeb\xd5\x4b\xaf\x39\x66\x41\x66\x94\xe9\x17\xc5\xfa\x79\x17\xff\x8e\xec\x03\x45\xe9\x35\xcf\x88\x5f\x0c\xa6\xc3\xc6\x7e\x13\x92\xea\x74\x57\xdb\x9c\xdc\xd6\x2e\xaf\x31\xbb\x9c\x96\xd5\xce\xd1\xee\x0a\x83\x62\xd3\x1c\xf0\xba\x5a\xdc\x47\x8b\xf2\x62\xbd\x43\x26\x38\xaf\x5a\xb3\xec\xe6\xea\x45\x6b\x15\x37\x72\x93\x5c\xa5\x14\x84\x4c\xb8\xb2\x3c\xb7\x2f\xea\xa6\x3f\xf7\xde\x49\xd9\xc3\xdb\x52\xc2\xaf\x82\xac\x03\x46\x0a\x05\x98\xc3\xd6\x10\x0e\x05\x56\x44\x00\xec\x25\xb9\x57\xaf\x94\x77\x98\x5b\xa1\x25\xb1\x06\x13\xeb\x08\x92\xca\x5a\x02\xbc\xe2\x06\x4a\xc3\x9e\x91\xfd\x19\xd8\x6b\x0f\x14\x34\x0a\x71\xa6\xb8\x33\x5c\x7b\xa6\xb9\x33\x54\x48\x8f\x0c\x90\x04\x23\xed\x20\x72\x04\x73\x43\x98\x91\x4a\x09\x44\xb4\xc4\x40\x4b\xc8\x08\x24\xd4\x7d\x78\x7e\x58\xfc\x05\xd9\x97\xea\x97\x20\x06\xb2\xcd\x89\x4c\x56\x6e\x64\x26\x1a\x24\xe5\xd6\x51\x25\x29\xde\xd5\x2a\xd5\x5c\xeb\x54\xf5\xfa\x04\xfa\x2b\xeb\x76\xa7\x34\xe3\x57\xa7\x5d\xdd\xd4\xae\xbc\x0a\x6d\x88\xe9\xa8\xb6\x4c\xdb\x91\x42\xd7\x00\x9b\x8d\x3f\xac\xe2\x5e\x04\xbd\x9b\x0c\x9b\x87\xe7\xf3\x28\x77\x64\x1f\x32\xca\x73\x76\x7c\x56\xe1\x00\x25\x71\x35\x87\x27\x05\x8f\xb0\x4b\x7d\xc9\x9c\x4c\x4b\x30\xb4\xee\xec\x79\xa3\xca\x8a\x45\x08\x44\x45\x65\xf3\xe3\xcb\xc4\x6e\xfc\xce\x65\x15\xe6\xc5\x89\xaf\x07\xf3\x42\x2d\x13\x1e\x5a\xf8\x5c\xba\xa8\x4d\xbe\x43\xa3\xfa\x6c\xd0\xea\xdd\x73\xe5\xdc\x7b\x47\x65\x4f\x6f\x4b\x09\xbf\x0a\xb2\xd0\x71\x8c\x18\xd3\xd2\x40\xcb\x9c\x15\xd4\x59\x04\x10\x07\x1a\x1a\x69\x08\x10\x90\x10\x6a\xa9\x47\x00\x42\x21\xb5\xd3\x9a\x72\x04\x8d\xd4\x88\x32\xea\x39\x79\x3e\xc6\xf5\x13\xb0\x97\x80\x42\xcb\x84\xc2\xd6\x03\xc8\x19\x82\x46\x79\x89\xf1\x2d\xc9\x10\xc4\x4b\xcc\xa0\x16\x9c\x73\x62\x84\x37\xb7\x78\x8d\x80\xa6\xde\x62\x87\x95\x20\xce\xea\x5b\x62\x80\x1e\xaa\x5f\xe4\xa5\xfa\x95\x29\x54\x27\x23\x3d\xc5\xa1\x49\x1b\xb3\x51\x21\xd3\xf3\x71\x50\xcb\x4e\x7d\x7a\xe8\xe1\x42\xd7\xb5\xd6\x5b\xdb\x6a\xae\x45\xc9\xa4\x69\x71\xc5\x33\xa5\xb9\xda\xa1\xe9\x64\xbd\x2a\xcd\x95\x3c\x6e\xeb\xf5\x1a\x58\xad\x82\x49\x54\xa1\xa5\x96\x6b\xcc\xea\xfd\xec\x61\x2a\x3f\x6e\x89\xde\x91\x7d\xc8\x65\x71\x3d\x58\xc6\xd3\xce\x69\x51\x5f\x11\x4e\x56\xd3\x55\x79\x74\xd9\xf9\x59\xb2\x70\x2e\x57\x49\xec\x68\xa0\x2f\x8d\xea\x49\x2f\x77\xe7\x4c\xab\x67\x55\xad\xe9\x83\x24\x1d\x5f\x8e\xb3\x6b\xad\x55\x0b\x33\xdd\x54\x8f\xb1\x8d\xa6\xc2\x24\x60\xb4\xf7\x20\xd3\x58\x75\xf7\x87\x7b\x62\xf0\xde\x59\xd9\xeb\xdb\xe7\x11\x7e\x15\x64\xb5\xb0\x02\x2a\x49\x8c\x91\xca\x40\x6b\x2c\x91\x9c\x3a\xaa\x95\x03\x4c\x00\xc5\x09\xf3\x04\x2a\x2d\x11\xb6\x4e\x6a\x26\x18\x05\x04\x21\x80\xa5\x17\xd6\x13\xfe\xfc\xf4\xcb\x4f\xc0\x9e\x13\x26\x3c\xa4\x56\x4b\x8a\x90\x41\xdc\x49\xeb\x8d\xb7\x08\x58\x20\x24\x51\xda\x71\x83\x89\xc3\x1e\x62\x63\x09\xc4\x48\x4a\x25\x31\xb1\xc2\x58\xe4\xb8\xc3\x77\x64\x1f\xaa\x5f\xe4\xa5\xfa\x75\xa6\xd7\xea\xe2\x60\xca\x03\x9e\x26\xfb\x4a\xde\xd4\xcb\xd5\x73\x30\xea\xb5\x6d\x72\x09\xda\x13\xcd\x78\xff\x52\xae\xee\xe6\x43\x6f\xab\xa4\x70\xbd\x1e\xfb\xbe\x39\x75\xf4\x98\x67\x66\x34\xce\x17\xfd\x76\x78\x8a\xca\x51\x58\x88\x8a\x70\x3d\x3e\xad\xb3\xb3\xca\xf4\x90\xe5\xaf\x51\xf6\xb1\x06\x05\x82\x68\x72\xe9\x92\xfc\xa5\x50\xaf\x1f\xd5\xa5\x03\x82\x45\x53\xf2\xb1\x5b\xca\x29\xdc\xce\x2a\xbb\x55\xea\x62\x30\x69\x6d\xa7\x87\x35\x50\xcd\xa2\x3d\xf4\x2b\xbb\x6a\x66\xe9\xaf\xb2\x12\xe7\xab\x9d\x2d\x15\x71\xa3\x79\x6e\xc6\xad\x6e\x6d\xb8\xe9\x76\xd3\x6b\x87\x66\x1a\x77\x64\xdf\x3b\x2c\x0b\xdf\x96\x12\x7e\x15\x64\x2d\x90\x06\x71\x4a\x9d\xc2\x10\x02\xc9\x19\xb7\x4c\xdd\xfe\xe3\x90\x52\xe3\x3d\xd4\x0c\x03\x67\x35\xc3\x4c\x28\xa2\x91\x00\x5a\x33\x61\x1d\x22\x06\x39\xad\xc9\x7d\x52\xff\x09\xd8\x23\x43\x81\x53\x04\x31\xef\x34\x70\xcc\x1a\xc5\x8c\x31\x5e\x13\xef\xb9\x83\x1e\x59\x60\xa0\x63\xc6\x43\xc1\xa4\x31\x00\x7b\xaf\x21\x06\x10\x73\x08\x14\xe3\xf7\x07\xc7\xd0\x43\xf5\x8b\xbc\x54\xbf\xf8\x34\x2d\xad\xbb\xd1\x62\x57\x36\xb0\x6a\xdd\x80\x91\xd2\xa8\x66\x4b\x32\xb7\xa1\x15\xc9\xb4\x2a\xf5\xc2\xca\xa8\xe1\xa7\xbe\xcd\x1a\xcd\x11\x0d\x56\x93\x62\x6f\xb4\xc7\xa5\x12\x18\x34\xaa\x5b\x92\xc7\x55\xd5\x2a\x2f\x78\xd4\xcc\xb5\x26\x3b\x9b\x27\xe3\xd9\xf5\xdc\x79\x40\xf6\x81\x22\x77\x60\xc3\xfa\x35\x93\x71\x8d\xcb\x00\x67\xcb\xcd\x94\x41\x76\xcc\xac\x8a\x28\xe1\x94\x0d\xf2\x5d\x51\x92\x38\x58\xdb\xf2\xc4\xaf\x76\xbd\xc6\x3a\xaf\x33\xbb\x86\x36\xeb\xdd\xb5\xb9\x6f\xca\x4c\xf9\x02\xa2\xf2\xe2\x7a\x1e\xaf\xaf\x41\x33\xbb\xeb\x06\x5d\xd3\x5a\x2f\x6b\xf7\xc4\xe0\xbd\xd3\xb2\x68\xf7\xa6\xc7\x0b\xc1\x2f\x82\x2c\x87\x1a\x22\xa4\xbd\x86\xc0\x41\x28\x31\x95\x5c\x19\x4f\x38\x93\x5e\x4a\xcd\x21\x73\x5c\x3a\x6e\xa1\x53\xc6\x78\x84\xa8\xb2\x9e\x7a\xcb\xa8\xd1\xce\xb9\xe7\xa7\x09\x7e\x06\xf6\x9c\x23\xe9\x39\x75\x42\x29\xc4\x94\xd1\x48\x50\x2f\xb1\x73\x8e\x19\xc8\x28\x80\x16\x69\x66\xb5\x76\xd6\x69\xe4\xb4\xb0\x08\x22\xef\x99\xe3\x0a\x78\x0c\xe5\xbd\x60\x8b\x1e\xaa\x5f\xf4\xa5\xfa\x25\xf3\xa6\x0a\x93\x4d\xd4\xce\x27\x43\xa9\xf6\x6a\x6f\xfa\x49\x53\xe8\xf4\xc4\x75\x8a\x26\xb3\xdd\x2a\xcf\x55\x4c\x66\xa7\xc3\x01\xe0\x71\xc4\x0c\xeb\x5c\x4e\x41\xbb\xb3\x6c\x6a\x6c\xf6\x45\xe6\x57\x7d\xab\x47\x97\xf3\x78\x9d\x6d\x93\xec\x2e\x33\x08\x33\x7b\x47\x9f\x5d\x7c\x47\xf6\x21\x97\x85\xd7\x49\x59\x4d\x0f\xba\xb0\x9d\xc2\xca\x81\x86\x2d\x91\x0e\x73\x88\xe4\xaf\x0b\x24\x83\x6a\xd3\xaa\xea\x72\x97\xe0\x4c\x90\xf1\x7d\x5c\xf3\xd6\x4d\x36\xd5\xcd\xe5\x32\xf6\xb3\x0c\x5f\x9c\x06\xbd\x1c\xd8\x6a\x7d\xdc\xb3\x0b\x23\x60\x5c\xcf\xea\xe5\xaa\x19\x0d\xef\x05\xdb\xdc\x7b\xc7\x65\xc9\xdb\xea\xd7\x7d\xe7\xed\x17\x40\xd6\x53\x62\x00\x90\xdc\x12\x02\xbd\xe7\xcc\x10\xc1\x2d\x71\x5a\x43\xe1\xa9\xa3\x9e\x22\x43\x15\x85\x46\x49\x26\x00\xd0\x5e\x6a\x01\x05\xba\x61\x01\x14\xe6\xfc\x9e\x87\xfe\x0c\xec\x6f\x4b\x2d\x01\x31\x61\x54\x52\x83\x10\xd7\x56\x18\x0d\x95\xf7\x8a\x22\x4d\xa1\x25\x06\x4b\xec\xa4\x52\x98\x18\xa5\x19\x92\x8e\x51\x8a\x04\x14\xd6\x6a\x62\x98\xbf\x21\xfb\x50\xfd\xa2\x2f\xd5\x2f\x69\x74\x38\x39\xf2\xb0\x11\x0e\xe3\xa1\xdb\xc9\xb2\xf2\x0b\x6d\x06\x94\x52\x59\xde\x5c\x9b\x95\xf9\xd6\x27\x72\x68\x8e\x07\x82\xf3\xd4\x4e\xd3\x93\xcb\xcf\xfc\x41\xbb\x74\x72\xd9\x06\xc7\xf3\xbc\xb9\x38\xf4\xca\xa3\xb3\x9e\x65\xd6\xb3\x84\x50\x30\xd7\x93\x5e\xee\x35\x97\x1d\x3e\xe4\xb2\x91\x1c\xd5\xfb\x85\xe3\xf4\x14\x1d\xfa\xc3\xcc\x72\xda\x9e\x1e\x8f\xd1\x79\x3e\x5e\xd9\xf6\x28\xdb\xaf\xae\x0f\x6a\x3d\xc9\x6b\x70\x91\x9d\xc2\x6e\x50\x09\xc1\x70\x98\xe4\xab\x1c\x45\x3b\x95\x65\xbd\x6d\xcf\x76\x0b\xb3\xcc\x62\x13\x47\x1b\x54\x73\xc3\x7e\x2d\x37\xb5\xfb\x48\xdf\x13\x83\xf7\xce\xcb\xd2\xb7\xd5\xaf\x5f\x05\x59\x89\xa8\x23\xc2\x3b\x61\x30\x94\x0e\x61\x2d\x28\x80\xc4\x5a\xcf\x1c\x66\x52\x58\xad\x9c\x86\x54\x5b\x41\x1c\x70\x84\x60\xca\x20\xf1\x18\x22\x6a\x05\xe1\x4e\x3d\x3f\x17\xfb\x13\xb0\x17\x50\x72\x2a\xa5\x14\x10\x58\x45\x00\x03\x58\x51\x60\x90\xf5\x08\x63\x21\x31\xa5\x86\x12\x45\x04\x36\xd2\x59\x2e\x29\x22\x46\x71\x8f\x14\x54\xc2\x19\xc9\xec\x3d\x97\x7d\xa8\x7e\xd1\xd7\x07\xbf\xfa\x51\x50\xf5\xbd\x96\x97\xe8\x5c\xf1\x3d\xc6\x4b\xcd\x64\x2e\x3b\x67\xd5\x33\x9b\xc1\x28\x38\xd2\x43\x6e\xb4\xee\xd3\xfc\xd4\x92\x86\xce\x6d\x8c\xdb\x89\x6b\x32\x0c\xa6\xbe\x5e\x52\xed\x4c\x64\xc1\xa8\x7c\x6a\xf6\x49\x3d\x13\x1f\x6c\x73\xd4\x69\x55\xed\x2e\xa4\xaf\x89\x81\x7a\x70\x79\xa9\x5b\x33\x53\x4b\xf7\x3b\x33\x2f\xe2\x66\x66\xbd\x2f\x4c\x22\xdb\x1b\xac\x05\xde\x1f\xd2\x62\xe6\x3a\x0f\x0a\xeb\x4c\x92\x19\xed\x33\x2e\x37\x87\x8b\xe1\xa8\x85\x66\xb9\x51\x63\x5e\xc8\xe3\x4b\x44\x66\x30\x29\x76\x66\x23\xb1\xdc\xbb\x7e\x35\x5a\x67\x6b\xe3\x4d\xe3\x32\x40\x77\x64\xdf\x3b\x2f\x2b\xde\x3e\x46\x53\x0a\x7e\x11\x64\x01\xd2\xc0\x53\x07\x9d\xa3\x80\x69\xe9\xa5\x65\x42\x38\xc2\x08\xe3\x58\x5b\x85\xbc\x52\x80\x32\xc1\x99\xb1\xde\x01\x65\x10\x05\xce\x53\x23\xad\x07\x4a\xa8\x7b\x19\xe0\x67\x60\x0f\x31\x86\xc4\x53\xe8\x98\x64\x86\x12\x00\xbd\x93\x82\x10\xc5\xa1\x10\x4c\x48\x43\x1c\x91\x04\x42\xc8\x29\x44\x04\x32\x0f\xb9\x72\x96\x72\x02\xbd\x05\xc4\xde\x5f\x60\x80\x1e\xaa\x5f\xf4\xa5\xfa\x45\xab\xae\xd3\x64\x51\x34\x24\xd3\x43\x31\xe8\x61\xaf\xa7\x2a\x45\x8c\x9d\x07\x72\xdc\x28\xcc\x5a\x30\xed\x89\x73\xd5\x8e\xcb\xec\xd8\xba\xd8\x6a\x25\x09\x83\x1d\x3c\x34\x0a\xac\x32\xeb\x45\x3b\x51\x9a\x2f\x2f\xcd\x42\xf7\xdc\xde\xac\xda\xb5\x01\xc9\x9e\x46\xc3\xa1\x8a\x9f\x43\xeb\x1d\xd9\xc7\x27\xbf\xd6\x2e\xb1\x71\xe2\x17\x63\x18\x2e\x7b\xd3\x7c\x5a\x89\x9c\xb6\xd7\xbe\x68\xce\x47\x79\xc7\xaa\xcc\x55\x37\x22\xd2\xa4\x93\xa4\xdd\xa8\x27\xdb\x74\xad\x8b\xad\x5c\x76\x3d\x0e\xd7\xe7\x49\x69\x62\xba\xb3\x79\x2e\x4c\x7a\x9d\xd6\x40\x24\xdb\x7d\x1f\x94\x65\x2e\xbe\xbf\xc1\x20\xf7\xde\x79\xd9\xcc\xdb\x82\xed\xaf\x82\xac\xb9\x2d\xe7\x6f\xab\x74\xef\x08\x72\xc8\x42\xa0\x91\x54\x98\x03\xad\x9d\x56\x14\x62\x47\x94\x73\x04\x49\x24\x90\xd5\x8e\x10\x41\x90\xc0\xd4\x42\x4d\x08\x66\x0c\x3f\x6f\x50\xfd\x7d\xec\xa9\xd6\x8c\x6a\x84\xa8\x00\x98\x43\x25\x08\xe3\x9c\x02\x88\x34\x43\xc8\x68\x29\x20\x31\x0e\x2a\xa7\x8d\x32\x8e\xdc\xe2\xaf\xe3\xd4\x31\x66\x00\x51\x96\x39\x4a\x6f\xc8\x3e\x54\xbf\xe8\x4b\xf5\x8b\x06\xdb\x02\x24\x8e\xb6\x14\xcd\x58\x55\xa1\xa5\xf6\xb2\x21\x57\xc7\xcd\xa8\xbf\xb2\x3b\x9c\xc9\xef\xaa\x2d\x0e\x2f\x56\xd4\x26\x8b\x65\x5c\x38\xd5\xd3\xb2\xe3\xa3\x4a\x39\x8d\x2e\xe7\x74\x32\x68\xd6\x59\x60\xd7\x8d\x45\xa3\x94\x6f\x57\xe2\x45\xd3\x84\xc7\x45\x6e\x49\x9f\x6b\xa5\x77\x64\x1f\xc0\xb1\xad\x6c\x97\x5c\xaa\x71\x6d\x29\xc7\x93\xea\xaa\x7b\x38\x17\x76\xb1\xb6\x72\xa2\xdb\x03\x8f\xc6\x71\xb9\x3a\xde\x4d\x36\xb9\xda\xa0\x00\xf5\x7e\xbe\x9b\x0c\x82\xf8\xbc\x09\x87\xb8\x97\xab\xa1\xca\xee\x90\x16\x23\xa2\x98\xd8\x36\xda\xad\xd3\xc1\xba\xe1\x2e\x57\x83\x87\xfb\xc3\x90\xb9\x77\xce\xcb\xe6\xaa\x6f\xf7\x65\x7f\x15\x64\x25\x66\x06\x3a\xe8\x81\xf6\x50\x79\xc9\xb0\x00\x4e\x03\xe9\xa8\x74\x14\x41\x4b\x1d\xb6\xd6\x62\x0e\x2c\x82\xde\x13\x6f\xa1\x02\x52\x69\x88\xb0\x22\xc6\x6b\x75\x5f\xed\xff\x0c\xec\x11\xba\xe5\xab\x86\x10\xa9\x6f\x4b\x2e\xca\x04\xd4\x4e\x69\xe0\xad\xd0\x8e\x39\xcf\xa0\xe2\x0c\x0b\x0e\x31\x84\x50\x7b\xae\xa1\x02\x98\x2a\xe9\xb1\x57\x90\xe0\x9b\x0e\xf4\x50\xfd\xa2\x2f\xd5\x2f\x51\x0c\x07\xfd\xca\x91\xe6\xc9\x3e\xac\xd7\x54\x7c\x3a\x64\x0e\xf3\x30\xd3\x39\xd0\xfc\x6c\x55\xd7\x34\x1c\xe7\x47\x10\xe8\x76\x61\x38\x8d\xca\x85\xdd\xa2\xba\xea\xae\x2f\x3e\xda\x82\x25\x1f\xb6\xa7\xb0\xb9\xef\xa7\x66\x72\xea\xd0\x22\xa2\x59\xa7\xfb\xb4\xb6\x68\x96\x2f\xaf\xb9\xac\x7a\x7c\xf6\x4b\xe5\x0b\xa4\xad\x7d\xb8\xe9\x6c\x2b\x99\xcd\xba\x72\xb9\x5e\x7b\xbd\x8c\x4e\xd3\xa8\xba\x6b\x9f\xf0\xba\x6c\x16\xe5\x53\x6b\x7b\x54\xc1\xa4\xdc\xbb\x86\x1d\xcd\x17\xe7\xc1\x48\xb3\x6d\x41\x4e\x32\xfa\x98\x2a\x3b\x1d\x9f\xa3\x76\x29\xeb\xce\xab\xc2\x60\x2d\xb2\xab\x5e\x74\x4f\x0c\xde\x39\x2f\x9b\xab\xbf\xed\xf1\x5f\x05\x59\x4e\x81\x77\xd6\x0b\x01\x25\xc4\x8e\x02\x41\x10\xb7\xdc\x30\x0f\x15\x86\x1e\x60\x64\xfc\x8d\x9a\x1b\x77\x4a\x23\x6f\x14\x36\x44\x20\x4e\xb0\x91\xc8\x41\x76\x3f\x38\xf8\x33\xb0\x97\xd0\x38\xa5\x28\xe3\xee\xa6\xc5\x39\xce\xbd\xf4\x58\x73\x0e\x85\x91\x0c\x52\xcc\x98\x80\x50\x52\xcf\x8d\x84\x18\x53\x81\x01\x03\x06\x41\x6e\xa4\x54\x80\xde\x90\xc5\x0f\xd5\x2f\xfa\x52\xfd\xa2\xf1\xae\x3c\x16\x75\xa1\x32\x83\x46\xc0\x4e\xcb\xf9\x72\x5e\xb1\xc9\x14\xdb\xf8\x04\xc6\x59\x90\x6d\xaf\xaa\x9b\x73\x85\x75\x9b\x87\xcd\xec\xda\x48\xae\x74\xe1\x51\x7d\x94\x2e\xd5\x2a\xd8\x27\xe7\x78\x58\x9f\x65\x7a\xbe\x2b\xd2\xb6\x44\x2d\x2d\x87\x3c\x6d\xea\x3a\x7e\x3d\x2f\xab\x1f\x5c\x0e\xa7\x49\x5d\xad\x6a\xd9\x4a\x63\x53\x8b\xfb\xb3\x89\x46\x26\xae\x6f\xa7\xf3\xb0\x5b\x4e\xd6\xc3\xb9\xa9\x92\x5c\x31\x6d\x08\x1d\xe1\x45\xfb\xba\x59\x0f\xfc\xe8\x78\xe6\x4b\x4f\x05\xb7\xe7\x69\x35\xed\xc7\x8b\x51\x7b\xee\x7d\x35\xbc\x0e\x0a\xb9\xd1\x69\xec\xab\x8b\xd1\xfd\xb5\x1e\xb9\x77\xce\xcb\xe6\xa2\xb7\xa5\x84\x5f\x05\x59\xef\x20\xc6\x8c\x19\x62\x28\xbe\xcd\xb2\x8c\x3a\x43\xa8\xa3\xd6\x72\x4a\x80\xc5\x18\x29\x61\xb0\x20\x94\x79\x0e\x15\x61\x5a\x18\x28\xb9\x12\x9e\x41\x06\x89\xbe\x47\xc8\x9f\x81\x3d\x30\x48\x32\x04\xac\xb6\xc4\x38\x02\x1c\x82\xc0\x4a\x8f\x31\x00\x1a\x53\xc9\x3c\xf4\x06\x22\x04\x21\x43\x54\x11\x0e\x94\x91\x84\x79\xcc\x09\x43\x8e\x30\x6f\x6e\x3a\xf0\x43\xf5\x8b\xbe\x54\xbf\x70\xaf\xc9\xfd\x24\x37\xeb\xd2\xd6\x38\xef\x93\xf3\xb1\x34\x2d\x9f\xa2\x5d\x56\x4e\x60\x98\xd9\x5c\xb2\xb5\x66\x38\x5a\xb6\xc4\xec\x50\xdc\x99\xca\xa6\xbf\x98\x5e\x8e\x9b\xca\x5c\x17\xed\x62\x91\xdf\x99\x6e\xf9\x74\x28\xc2\xb3\xcf\x42\x24\x6a\x8b\xd5\x3a\x57\x8f\x5a\x83\x78\xf3\x9a\xcb\xea\x07\x8a\x44\x69\x31\x44\x8b\x71\x69\xd0\xcc\x9b\x41\x60\xe1\xba\x27\x3b\xb9\x6a\xe2\xdd\x74\x5f\xe0\xc5\x46\xb8\xaa\x17\xd8\xaa\xb8\xeb\x36\x8e\x24\xaa\x0d\x2a\xf1\xb1\x77\x9d\x15\x26\x61\xbc\xbc\x46\xc1\x0e\xce\x8f\x65\x11\x4e\xc2\x41\x55\xb5\x4f\xdb\x6a\xfb\x18\x83\xf4\xd0\x3e\x5e\x6f\x8a\x73\xef\x9c\x97\xcd\x35\xde\x96\x12\x7e\x15\x64\x01\x75\x9c\x1b\x2d\xd9\x2d\x68\x69\xa8\x29\xc1\x9c\x50\x2f\x84\x77\x98\x39\x8c\x08\xd3\x84\x6a\xc4\x94\x74\x8e\x4a\xee\xa1\x24\xde\x7a\x85\x31\x92\x90\x2a\xc3\x3e\xbe\x49\xeb\x6f\x63\x6f\xac\x92\x82\x59\xc9\x15\xa6\x8a\x69\x0f\x08\x17\x0e\x50\x4a\x01\xb6\x1a\x03\xc1\x99\xb3\x52\x0b\xc3\x9d\x22\xd4\x73\x04\xa4\x33\x48\x30\xe4\xa0\x90\x0a\xe8\x5b\xa4\xc6\x0f\xd5\x2f\xfa\x52\xfd\xca\x92\x6e\xbc\x38\x47\x3d\x91\xab\x0d\xdd\xb9\x48\x2d\x84\xad\x38\xba\x6c\xa2\x46\xd8\x3f\x1a\xd5\xde\x4e\x73\x73\x36\x45\xc5\x71\xe7\xaa\xed\xf9\xac\x7d\xb1\xd0\xcf\xec\x26\x2c\x28\xb5\x8f\x75\xba\xcb\xac\xfa\x66\x97\x8a\xe1\x69\x56\xa4\xb3\xba\x0c\x73\x97\xf5\x84\xcf\x5e\x77\x0c\xf4\x43\x2e\x8b\xae\x05\xca\x2d\x5a\xf5\x4e\xa8\xce\x16\x87\xed\x7e\x91\x5d\x39\x54\x98\xb2\xe2\xe1\x9a\x4b\x96\xfd\x05\x9f\xf3\xf2\xaa\xb0\x8b\x7a\xd7\x78\x93\xea\xa1\x9b\x0e\x16\xc7\x53\x9b\x90\x62\xbf\xd5\xd4\x51\xc5\x1e\x90\x9e\x96\xd9\x2c\xc1\x95\x2a\xcf\x8f\x27\x24\x5d\x8c\x0e\xa3\x7b\x5d\xeb\x1d\x64\xdb\x6f\xf7\x65\x7f\x15\x64\x29\xe2\xd8\x22\xc4\x3c\x56\x56\x12\x62\x35\x17\x8e\x13\x60\x91\xf3\x90\x63\x26\x08\xbd\xd1\x05\xa4\xf0\xc2\x20\x64\x90\x82\x8a\x40\x24\xb0\xb0\xc8\x23\xce\xef\xa7\xb0\x7e\x06\xf6\x37\x28\x31\xa5\x06\x5a\x6d\x2d\x45\x0c\x12\x00\x34\x73\xd2\x58\xec\xb0\x60\x52\x30\x42\xa4\x17\xdc\x09\x46\x1c\x22\x1c\x40\x83\x88\x43\x96\x1b\xef\x19\x72\xfa\x86\xec\x43\xf5\x8b\xbe\x3e\xfb\x95\x2c\x7d\x7d\x3e\x4a\xa3\x9d\xee\x17\x6c\x31\x53\xc9\x4e\xf5\xb4\x5a\xda\x17\x77\x8b\x8d\xa3\x43\x7f\x9e\x37\x31\x8b\x2e\xb3\xfe\xb6\x74\x70\x51\xe9\x54\xeb\x5d\xf0\xd5\xe6\xab\xa1\x36\xcb\xfa\xf2\xbc\x1a\x86\x3d\xdc\xa7\x52\xa5\x5b\x9e\xd9\x68\x1f\x4d\x40\xe1\xb4\x7c\xe6\xf4\x8e\xec\x43\x2e\x5b\xb6\x4d\xb1\xcf\xe5\xf6\x6b\x77\xa9\x0b\x29\xf7\xf5\xe6\x32\xb6\x6a\xd3\x5b\x95\xdb\x83\x45\xb9\x36\xad\x89\xc5\x4a\x6f\x09\x44\xa7\xb0\x62\xa7\x7d\x53\xd6\xb8\x5f\x1d\xb7\x82\xfd\x61\x19\x37\xa7\xe3\xf5\x78\xd6\xf1\xe3\xcc\x78\x46\x66\x26\x77\x9a\x91\xbd\x6f\xca\x09\xbb\xe9\xcf\xbf\x73\x5e\x36\xd7\x79\xbb\x2f\xfb\xab\x20\xeb\x80\x04\x54\x5b\x06\x99\xe4\x02\x52\xc7\xad\x15\x40\x31\xcf\x95\x15\x4e\x60\xc0\xb9\xa2\x18\x10\xa5\x01\x13\x50\x20\xea\xa8\x12\x08\x68\xaf\x8d\x81\xc8\xea\xe7\x27\x6c\x7f\x02\xf6\x9c\x30\xa6\x0c\x35\x1c\x23\x23\xad\x01\x4a\x28\xa0\x25\x45\xd4\x32\x23\xa0\x94\x10\x30\x22\x0c\xe3\xd6\x53\x42\x80\xa6\xda\x12\x22\x8c\xf0\x0a\x1a\x8e\xd0\xfd\x7d\x5c\xf8\xa1\xfa\xc5\x5e\xaa\x5f\xb0\x7a\x05\x13\x7d\xdd\x0e\xdb\xf1\x9e\x50\x50\xe8\xf0\xb3\x41\xe3\x62\x29\x59\x55\xa7\xe4\x34\x39\x6d\x4a\xb3\x70\xd5\x88\xeb\x17\x7b\xba\xec\xe3\x6a\xf5\x50\x23\x87\xf6\x3a\xb7\x89\x43\x56\x08\xb2\xfb\x53\x7e\xbf\xbb\x44\xa7\x24\x9b\x8b\xa7\xdd\x1a\x9a\xc2\x00\x99\xfa\xfa\x75\xf9\xf5\xb8\x6c\xcf\xea\x30\xd3\x74\xad\xb6\x36\xd1\xb1\x53\xf1\xad\x8b\x4a\x3a\x83\x24\x1c\x5d\x73\x5c\xe9\xd3\xd6\xc5\xfd\x96\x4b\xd3\xca\xf8\x34\x19\x82\xe1\xe6\x6c\xcc\xe5\x62\x4f\xb5\xc9\xe8\xd0\xaf\x5a\x5d\x29\x0d\xc3\x52\x27\x1a\x4a\xd9\x6b\xd5\x07\xb2\x5d\xb9\x34\x57\xc6\x4c\xee\x2f\xe4\xca\xbf\x73\x5e\x36\xd7\x7b\xfb\x42\xae\x5f\x05\x59\x0f\x24\x60\x94\x7a\x60\xa9\x71\x8e\x0a\x8c\x10\xb7\x00\x08\x61\x34\x57\x1e\x69\x2e\x80\x67\xde\x4a\xe8\x04\x66\x8a\x40\xc8\x95\xd6\x10\x5a\xc2\xa5\xa6\xc6\xc1\xe7\x93\x5c\x7f\x1f\x7b\x0c\x09\xc4\x9a\x08\x4c\xb8\xa3\x84\x2b\xa0\xa8\xc5\x9a\x58\x45\x18\x13\xc6\x38\xee\x8c\xd3\x5e\x58\x41\x08\x55\x1c\x02\x75\xcb\x7c\x21\xc4\xc6\x2b\x22\x9d\x73\x37\x64\x1f\xaa\x5f\xec\xa5\xfa\x95\xc9\xb7\x06\x32\x1d\xcc\x49\xd1\x79\x3b\xaa\x69\xbc\x4d\x59\x21\x87\xd7\xdd\x5c\x6d\x57\x1a\xa5\x55\x37\x58\x55\xea\x19\x71\xea\x20\xd9\xdd\x0e\x7a\x96\x35\x78\x44\x3a\xc0\x3b\xd1\x0b\x8d\x1d\xcf\xcd\x22\x35\x17\x0b\x32\x2b\x3d\x52\xb6\x35\x4d\x87\x41\xb6\x57\x7b\x3d\x2f\x6b\x1e\x9f\xfd\xc2\xf3\x41\x53\xfa\x6e\xa7\xba\x68\x2f\x63\xde\x5c\xc7\x39\x35\x54\xe9\x75\x52\x1a\xcb\x64\x86\x2a\x68\x7e\x09\x46\x69\xcf\xc6\xbb\xd3\xb9\xd5\xdd\x57\xe2\x32\xed\xb9\xd1\xda\x36\x00\x9a\x0d\x57\xd7\x86\xdf\xb1\xec\x34\x6d\x17\xd7\xe7\xfc\x3a\x1d\x85\xdd\x2b\xeb\x38\x7e\x4f\x0c\xde\x39\x2f\x9b\xeb\xff\xaa\xa5\x04\x2f\x19\xf5\xd4\x71\xe6\x90\xf5\x5c\xde\x0f\xb4\x70\x44\xa8\xc0\x50\x4b\xaa\x05\x73\xc6\x48\x0e\xa1\xe7\x9a\x7b\x0d\x09\xb1\x5e\x6a\xa3\x0c\x36\x42\x71\xf5\xfc\x1e\xe3\x9f\x81\x3d\xe2\x86\x7a\x08\x99\x70\x94\x19\xcc\x85\xe0\xd4\x02\xcb\xb9\x40\x48\x62\xe7\x6f\xec\x3b\xe8\x0d\x46\x94\x13\xa3\x18\x36\xc0\x78\xe5\xfd\x2d\xd5\x75\x80\x7a\x72\x43\xf6\xa1\xfa\xc5\x5e\xab\x5f\xf9\xd6\xb0\x2f\xe2\xa4\x41\xd3\x68\xe2\x5b\xf9\xca\x05\x6f\x2f\x7b\x52\x40\xd9\x61\x79\x15\x6f\x5a\x6d\xb7\xdd\xb5\x61\x79\x01\xaf\xe3\x3d\x01\x66\x7d\x64\x2a\x1f\x2f\x86\x89\x99\x4f\x41\x69\x0d\x47\x22\xdb\xea\xea\xcc\x36\xdc\x5d\x79\x83\xb5\xda\xee\x18\xae\xf9\xfa\xf5\x6d\x31\xe6\x21\x97\x2d\x9c\xf9\x01\x77\xf7\x42\x82\x42\x21\x1f\xa4\xa8\xd9\x5b\xe1\x79\x6d\xd2\xc3\x11\x5e\x5e\xe6\x66\xbb\x59\x1c\xa3\x79\xb1\xde\xc9\xf8\x70\x79\xf6\xe1\x60\x3a\xd7\x05\x57\xb1\xb6\x90\xb8\x7c\xad\xcb\xe5\x74\x45\xfc\xe9\xd2\x07\x97\x45\x33\xb8\xb2\x2c\x0c\x24\x29\xca\x7b\x23\xde\x39\x2f\x9b\x4b\x7e\xd5\x52\x82\xc7\x52\x32\xe8\xb8\x75\x14\x03\x80\xad\x54\x82\x0b\xc4\x39\x26\x18\x48\x68\x18\x70\xf0\xf6\x15\xaf\x6f\xa9\x27\x40\xda\x01\x81\x31\x31\xca\x31\x2e\xb8\x76\xcf\x05\xdb\x9f\x80\xbd\x10\x0c\x09\x4e\x35\xa6\x00\x4a\x0c\x05\xd0\x40\x13\xcf\x0d\xa4\x90\x19\xe3\x1c\x01\xd0\x48\x8e\x99\xc4\x46\x59\x65\x08\x36\x16\x01\xa4\x00\x40\xc2\x49\x78\xc7\x1e\x3f\x54\xbf\xd8\x4b\xf5\x2b\x3b\x9f\x4b\x67\x0f\x75\xef\x7a\x73\x48\x2f\xed\x34\xd2\x73\x3d\x3e\x5c\xab\xa6\x2d\xb9\xe7\xc5\x10\xd3\x63\xed\x24\x26\xcb\xd5\x66\xea\x12\xbf\xa3\x6d\x95\xcf\xae\x3b\x3a\x6a\x81\xde\x2c\x1e\x35\xca\x1b\x56\x2b\xae\x8b\x8b\x0d\xcd\x9e\x9b\xe3\xb1\xca\x6e\x2a\xdb\xc9\x03\xb2\x0f\xb9\x6c\xb3\xd1\xd6\x87\x63\x39\x8e\x8b\x7e\xd7\xe9\x2c\xac\xdd\x2c\x7a\x4d\x51\x9c\x89\xc9\x40\x56\x35\xbc\xb4\xea\xd9\x43\x78\x49\x4b\x06\x1d\x2a\xe9\xca\xea\xb8\x55\xea\x96\x82\x5d\xbd\x8b\x4f\xfd\xe2\xee\x7a\x68\xe5\x2e\x49\xbc\x6e\xd6\xd0\xae\x25\xc0\xa8\x36\x0a\x56\xac\x7d\x3f\xfc\x92\x7f\xe7\xbc\x6c\x6e\x18\xbe\xe9\xf1\x5f\x05\x59\x2d\xee\xef\xb0\x80\x46\x63\x43\x98\x30\x84\x7b\x08\x00\x63\x48\x19\x8d\x31\x77\x90\x09\xc1\xe0\x2d\xc3\x74\x08\x42\x6b\xad\xc2\x00\x41\x01\xa4\x70\x02\x30\xe3\xee\xc8\xfe\x04\xec\x0d\x61\x0e\x29\x4e\x8c\xd0\xda\x32\xc2\x0d\xe3\x5a\x2b\xc9\x81\xc7\x4c\x2b\x81\xa9\x75\xc8\x79\xca\x21\x63\xc8\x18\xe8\x30\x11\x0c\x59\x45\x10\x42\x82\x71\x79\x4f\x0c\x1e\xaa\x5f\xec\xa5\xfa\x95\x6d\x0c\x53\xe7\x5d\xef\x14\xc8\xc5\xca\xe5\xed\xb5\x75\x9a\x99\xb4\x51\xde\xe0\xe3\x61\x1a\x8d\x6a\x99\x7c\x21\x8e\xb6\x0b\x57\x3e\x1e\x8f\xb6\x11\x25\x66\xd8\x3a\x22\x9f\x8f\x5a\xcb\x7e\xd4\xf3\xb5\x5c\x95\x27\x9d\xe2\x40\x8f\x72\xd9\x53\x88\x73\x3b\xee\xb6\x82\x1f\x9e\x5d\x7c\x43\xd6\x3e\xb8\x3c\xce\x66\x6c\x7e\x97\x74\xfa\x66\xb2\xae\xd6\x13\xea\x3b\xfd\x79\xd6\xee\x0b\x62\x5d\x74\x99\xc9\x70\xe9\x97\xf1\x10\x8d\xf8\x31\x99\x66\x43\x3d\x59\x83\x4b\xfd\x38\x68\x8b\x21\x3f\xac\x4d\x33\xde\x6e\x0a\x89\xab\x1f\xfb\xe7\xe1\xe4\x9a\x23\x60\x3c\x41\xb3\xca\x64\xbc\xbc\xaf\xf4\xf2\xef\x9c\x97\xcd\x99\xb7\x2f\x3e\xfc\x65\x90\x35\x58\x51\x25\x29\x16\x44\x78\x87\x8c\x26\xcc\x59\x4e\x6f\x99\xa3\x63\x5a\x01\x69\x04\x65\x96\x70\xcb\xbc\x53\x00\x51\x84\xb0\xa0\xc2\x0a\x6b\xb8\x52\x56\xd2\xe7\xf3\xb2\x7f\x1f\x7b\x43\x2c\xc5\xc2\x6b\xc2\x14\xf0\xd4\x7b\x42\xb0\xf2\x82\x5b\xe4\x30\x22\x18\x52\xac\x01\x95\x4c\x59\x0c\x89\xe5\x9e\x33\x6c\x38\xa4\xc6\x5b\x85\x30\x10\xf2\xfe\x60\x39\x7e\xa8\x7e\xb1\x97\xea\x17\x1f\xad\xd5\xaa\x5c\x6f\x86\x2a\x6a\x67\xc3\x60\x38\xd9\xd6\x23\x4c\x06\x93\x52\xf1\x5a\x6f\x54\xda\xd8\xae\x4e\x95\x34\x9f\xb2\x40\x37\xca\x93\x63\xfd\x7c\x69\x8a\x4a\x86\xcd\x48\x75\x9d\x23\x01\x6e\x9e\x1b\xb5\x5d\x3b\x1c\xf6\xa2\xe5\x35\xcd\xad\x82\xe5\x48\x0c\x0f\x61\xfc\xec\xe2\x3b\xb2\x0f\x14\x75\x5c\x39\xb7\x3d\x14\x46\x71\xb3\xaa\xe5\xcc\x9b\x6a\x3f\xba\xe4\x47\x6c\xe1\x34\x98\xad\x8e\xd4\x0e\x64\x63\x26\xc2\xd0\xad\x91\x0e\x61\x77\xca\xdb\x9b\x02\xcc\x82\x16\xcb\x94\xc1\x21\x9a\x45\xfd\xc6\x69\x30\xd8\x76\x8b\xb1\xc7\xa9\x30\xfd\xab\x5c\x4d\xf3\xd5\xfb\x3b\xb9\xf2\xef\x9c\x97\xcd\xd9\xb7\x6f\x3e\xfc\x55\x90\x55\xcc\x53\x6d\x38\xb1\x4a\x12\x26\x39\x90\x44\x1a\x23\x14\x15\x9a\x7b\x03\x8c\xa2\xe8\xb6\xd0\xe1\xfe\xb6\xca\xa7\xde\x18\x4f\x19\x57\x4c\x59\xe4\x31\x84\x4a\xde\x57\xfb\x3f\x03\x7b\x4e\x28\xe6\x1a\x49\x4c\x01\xd0\x46\x6a\x49\x20\x65\x8a\x5a\x61\xa8\x66\xce\x02\x85\x0d\xd6\x00\x10\x20\x0d\xd7\x0a\x7a\x0c\x20\x64\x48\x18\x41\x85\x26\x42\xdc\xec\x20\x0f\xd5\x2f\xf6\x52\xfd\xe2\x27\x36\x58\xf7\x48\xa7\x49\x76\xfb\x12\x4f\x92\x1d\xcb\x28\x96\x37\xe3\x01\x2c\xc3\x23\x1b\x55\x3b\x15\x32\x88\xa7\xc6\x6d\x50\x3f\x3b\x59\x56\x5c\xa9\x5a\xdc\xf6\x61\xbb\xdf\xcb\x9c\xd7\xdb\xca\xb0\x5d\x16\xb5\xbe\xaa\x70\x32\xcf\x76\x83\x7d\x26\xbb\xad\xba\x72\x95\xbe\xbe\x5e\xd6\x3e\x64\x94\x83\xea\x7c\x25\xf9\xd6\xb7\xa6\xd3\x4a\x7c\x08\xc2\x99\xcb\x37\x34\x6e\x9f\xe6\x2c\x4e\x7b\x33\x49\x13\xc5\x70\x6c\x40\x2f\x7f\x84\xa0\x87\x77\xeb\xb8\x95\x17\x0b\xda\xea\xab\x39\x8a\x06\x88\xb7\x56\xa2\x71\xca\x05\xcb\xf2\x61\x2c\x4e\xe1\xa0\x16\x8d\xd3\x7d\xe5\xae\x3e\xff\xce\x79\xd9\xdc\xe8\xed\xe3\x8a\xbf\x0a\xb2\x08\x69\xc0\x34\x01\x92\x10\x76\x7f\x7b\x16\xe2\x42\x79\x60\x1c\xa4\xca\x4a\xc9\x28\x57\xc0\x7b\x04\x25\x53\x54\x7b\x67\x9d\xa5\xcc\x32\x69\x31\xe3\x5c\x1a\x69\x9f\xdf\x16\xf3\xf7\xb1\xc7\xc4\x59\x0c\x9d\x51\x80\x68\x00\x9d\xf7\x06\x1b\x42\x81\x30\xd2\x61\x22\x99\xc4\x58\x22\x4d\x21\xd4\x0a\x20\x2e\xb1\xc7\xc8\x3b\xec\xbd\xf7\x0e\xdf\x5f\x3a\x77\x43\xf6\xa1\xfa\xc5\x5e\xaa\x5f\x4c\xc3\x63\xb9\xab\xe6\xa5\xf9\x69\x5e\xbd\x56\xd6\xe9\x3e\x7b\x8a\xd6\x9d\xcd\xa0\x9a\x5d\xa9\xb6\xbf\x36\xfb\xcb\xf5\x06\x1c\xa3\xf6\xa6\x55\x8b\x2f\xa9\x6e\x9c\xea\xbc\xad\x27\x6a\x5a\xa9\x2c\xe5\x69\x05\x93\xca\xe6\xbc\x3d\xd7\x92\x71\xc7\x74\xaa\xc3\xc3\x6e\x3c\x5a\xc2\xde\x6b\x29\xe1\x31\xd6\xe1\xbd\x3b\x97\x07\x33\x97\xcc\x77\x63\x71\x99\x53\x54\xbd\x86\x30\xe2\xeb\xac\x38\x5c\x67\x98\x15\xec\x5c\x1f\x4f\x76\x33\x38\xc1\x14\xf0\x6e\x79\xb7\x0a\x77\x39\x9e\x3d\x89\x76\x6b\x5a\x25\x60\xbe\x8e\x68\x0d\x86\x7a\x95\x77\x5d\x71\xc9\x4e\xb3\xd9\xec\x14\x07\xf7\x63\x37\xf9\x77\xce\xcb\xfe\xf5\x9f\xa2\xf9\x55\x90\x55\x92\x19\xed\xa5\xc7\x06\x59\x6c\x28\xd3\x16\x12\x4d\x00\x05\x88\x30\x45\x1d\x96\x8e\x4a\x04\x14\x02\xd0\x49\xcb\x98\x21\x40\x1b\xaa\x14\xbb\x65\xab\xde\xd1\x8f\x47\x5a\xfe\x3e\xf6\xd8\x51\xae\x3c\x52\xd2\x20\x26\x28\x24\xc4\x70\x81\x34\x15\x48\x50\xa9\xac\x85\xc0\x70\x0f\x04\x63\x86\x61\x2d\x34\x03\x94\xdf\xec\x12\x37\x5b\x8c\x93\xf7\x72\x04\x79\xa8\x7e\xb1\x97\xea\xd7\xa5\x76\x52\x20\xdf\x6b\xef\xca\xa7\xd3\x72\x72\x2c\x34\x8a\x0a\x0d\x87\xc9\xaa\x29\xc6\xf3\xcd\x20\xcb\x1d\x1c\xc0\x35\x40\x96\x5e\x6c\x05\x5e\xcb\x6a\x9f\xe9\x96\x3b\x93\x92\x28\x4e\xaa\xe9\x38\x41\x95\xe9\xc6\xb8\x53\x74\xd9\xac\xb9\xab\xd4\xdb\xfb\xfa\x79\xbe\x09\xfa\xaf\x51\xd6\x3d\xb8\x9c\x2c\x5a\xe7\x43\xe5\x52\x9a\x45\xcb\x5e\xbc\xde\x9e\x57\xf0\xc0\x34\x8e\x1b\xb5\x51\x27\x9b\xdf\xb4\xdb\x60\x26\x57\x51\xab\x59\x1f\xec\x44\xa6\xcf\xc4\x66\x99\x57\xc5\x62\x78\x26\x35\x38\x5a\x0d\x14\x6e\x17\xca\xa2\x32\xdc\xa5\x7c\x82\x72\xc9\xa0\x93\x8f\x06\x9b\xeb\xfa\x7c\x47\xf6\x9d\xf3\xb2\xb9\xf9\xaf\x7a\xc6\x80\x10\x70\x5b\x2d\x41\x4b\x29\x60\x14\x68\xa6\x80\x62\x18\x40\xcc\x9c\x00\xc6\x22\x2a\x15\xc6\xd8\x28\x4a\x11\xc0\x56\x43\x4a\x84\xc5\x90\x7a\x28\x9d\x27\x8a\xde\xcf\x07\xfc\x0c\xec\x35\xe0\x98\x21\xa2\x25\x13\x08\x63\xc5\x2c\x43\x50\x01\x0b\xb4\x86\x9e\x60\xa1\x80\x75\xc0\xdf\x92\x60\x46\x80\xc4\x12\x41\x25\x1d\x57\xd6\x09\xa7\x2d\x70\xe0\xa6\x83\x3c\x54\xbf\xd8\x4b\xf5\x8b\xcd\x77\x47\x2a\x44\xbd\x7b\x1e\x1c\xdb\x1d\x90\x6b\x55\x4b\x6b\xd7\x70\x83\x4e\x7e\x12\xb8\xe5\x40\x87\x79\x31\xd8\xa8\xf2\xe8\x48\xbb\xc3\xb8\x73\x19\x27\x05\x5f\x0b\x2f\x3d\x36\x9d\x81\x85\x58\x9e\x83\x90\x35\xf3\x55\x55\x3a\x07\xab\xc6\x69\x73\x34\x41\x27\xda\xf5\x3a\xaf\xfb\xb2\xee\x81\x22\x59\x47\xa7\x4d\x4e\x2d\xc4\xf9\xcc\xc2\x68\xde\x82\x2e\xdb\xe6\xd5\xe6\x78\xb6\xab\x6e\x8a\xab\x61\x61\x51\x2b\x9a\x62\xee\xe4\xf1\x39\x7f\x32\xa8\x5a\x9f\xaf\x2a\xd7\xf5\x3e\x1d\xaf\xe2\x3c\x2f\x83\x46\xad\xe0\x0a\x72\x75\x1a\x06\x33\x5a\x51\xcb\xe5\xd6\x4d\xb7\xa0\x11\xdc\xab\x5f\xef\x9c\x97\xcd\x2d\x7f\xd5\x33\x06\xd4\x39\x0f\x01\xbb\xc5\x41\x6d\x35\x81\x18\xfd\xbf\xec\xbd\x5b\x93\xa3\x48\xb6\x2e\xf8\xde\xbf\x22\xad\x5e\xf6\x83\x7a\x6f\x81\xbb\x83\x43\x6f\xdb\x0f\xdc\x41\x02\x21\x10\x02\xc1\xd8\x3c\x70\x71\x2e\x02\x09\x89\x8b\x40\x3a\x76\xfe\xfb\x58\x44\x56\x67\x44\x47\x66\x77\x57\xb5\xaa\x62\x66\x4e\xb5\x2c\x2c\x8d\x48\x29\x1c\xf9\xe7\x1f\x8b\xf5\xad\xe5\xac\x45\x13\x84\x41\x4c\xa7\x34\xca\x49\x96\x32\x0c\xcc\x68\xc8\x40\x9e\xa1\xd9\x8c\xc4\x28\xcf\x32\x48\xf3\x19\x95\xc6\x38\x03\xf1\xeb\xd6\xea\xdf\x84\xf6\x98\x24\x59\x4e\x33\x34\x20\x80\x20\x3e\x8b\x01\x95\xa6\x4c\x9a\xa1\x8c\x8d\xb9\x8c\x8f\x31\x26\x59\x0e\x21\x9d\x32\x30\xe1\x48\xc2\xb1\x80\x02\x0c\x8f\xf2\x24\xe1\x93\x0c\xc4\xf1\x8b\xa5\x46\xef\xb2\x5f\xf8\x5b\xf6\x8b\x72\x56\x57\x5d\xf7\xf7\xda\xde\x8c\x8b\xcb\x51\xf0\x92\x56\xde\xac\xa2\xf6\xb1\x5d\xfb\x3b\x81\xef\xfd\xdd\xc6\xf2\xb9\x08\x53\x97\xb4\x6b\xa7\x7d\xb6\x76\x1f\xc2\x32\x72\xeb\x8c\xb4\x9c\x36\x82\xab\x8f\xbc\x72\x4f\xb3\x19\x7f\xe1\x36\x18\xe9\xf1\x79\x64\xf6\xfd\x5b\xb1\x4e\xf2\xde\x97\x0d\x52\xfa\x12\x96\x7e\xe0\xb6\xca\x2a\x66\xb5\x54\x37\xfa\xf8\x48\xdf\xfb\xd9\x40\x92\xb3\x10\xd3\xd5\xb5\xd2\x02\x38\x1d\x4f\xab\xc5\x2d\x57\x5d\xb3\x62\x56\xa0\x92\xad\xc3\xc6\x0b\xae\x9b\xd3\x39\x1f\xb8\x87\xae\xda\x88\x45\x61\xb1\x8a\x3c\x3c\x26\xd4\xb5\x7b\x95\x5f\x3f\xda\x2f\xdb\x7e\x7c\x5c\xf1\x8f\x42\x59\x96\xe7\x10\x45\x38\x3a\x27\x98\x30\x1c\x8a\xe3\x8c\xca\x01\xc8\xf2\x98\xe3\x09\xc1\x2c\x4e\x33\xc8\x00\x84\x78\xcc\xb0\x90\x20\x4c\xc7\x39\x17\xe7\x2c\x4e\x18\x98\x73\x19\xc2\xf4\xd7\x92\xc8\xcf\xd3\x1e\x66\x19\x4f\x73\x19\x26\x08\xb2\xe9\xeb\x83\x60\x88\x87\x54\x9a\xa7\x08\xd1\x69\xc6\x72\x31\xc7\xa6\x10\x71\x20\xa5\x99\x24\x61\xe3\x84\x22\x4c\x4a\x73\x69\x02\x32\x26\x47\xe8\x95\xf6\xe8\x5d\xf6\x0b\x7f\xcb\x7e\xd1\xf8\xa6\x68\xa4\x58\xf0\x83\x68\x95\x8c\xbe\x2e\xa7\xfd\x72\x98\xfd\xad\xbb\xf1\x1a\x37\x21\x97\x2d\xf4\xb4\x4c\x5e\xe7\xbb\x0e\xd5\x9a\xa4\xeb\x67\x81\x5d\xdb\x59\xbb\x4d\x77\xb7\x0b\xeb\xce\x65\x0d\xca\xbd\xdb\x68\x2a\xed\x6f\x41\xbb\xf3\x37\x62\x2d\x1b\xfc\x5b\x19\x39\xf2\xce\x97\x05\xfd\x22\xcc\x20\xab\xed\xc5\x93\xda\x49\x67\xee\x3c\x3f\x5c\xa8\x61\x8d\x15\x9b\x60\x92\x8f\x81\x71\xdb\x8d\xce\xac\x59\x86\x14\xf2\xc0\x3d\x1e\x18\x39\xb1\xe7\xb0\x5c\x59\xd6\x52\x71\x52\xba\xbd\x6a\x13\x55\xf4\x6a\x32\x5c\x7b\xfb\x20\x1e\x4d\xd3\xe7\x95\xd7\x62\xa0\xd2\x8f\xf6\xcb\x5e\xff\xa8\xdb\x62\x30\xc5\x66\x3c\xe2\x62\x96\x89\xa9\x97\xf5\x4e\x21\x04\x2c\xa2\x59\x8e\xf0\x34\xcc\x51\x82\x78\x8a\x82\x88\x47\x20\xc7\x7c\x4c\x62\x9e\xcd\x59\x9a\x8d\x29\x48\x78\x0e\xf0\x38\x85\x5f\x7b\x25\x3c\x4f\x7b\x92\xa5\x54\xc6\xd3\x31\x9b\x65\x08\x92\x84\xa5\x58\x86\x10\x88\x69\x92\x31\x29\x4a\x28\xc0\x66\x54\xce\x52\x0c\x47\x12\x9e\x66\xf2\x18\xe4\x3c\x06\x39\x4c\x52\x16\x53\x14\x43\xbf\xf6\x5b\x40\xef\xb2\x5f\xf8\x5b\xf6\x0b\x9c\x14\xb9\xd5\x17\x79\x53\xae\x3b\x87\xab\x20\x5b\x11\x06\xe4\x9b\xcd\xce\x5d\x65\xc1\xb6\x4e\xe3\xc5\x9a\x3f\x0f\xde\x62\xe3\xce\x42\xe1\x19\x5b\x53\xb3\xef\xe7\xd1\x29\xec\xc3\xe3\x74\x70\xa2\xce\xbc\x6b\x9e\xa0\x19\x72\x60\xeb\x2b\xd7\x59\x5d\xf7\x79\x22\xbc\x6b\x53\x97\xbf\x83\xbc\xac\xc3\xc2\x0b\x7d\x35\xaf\x36\xf3\x7d\x8a\xd4\xfb\x7a\x7f\x64\xbb\x3d\x71\x11\xd8\xb9\x8f\xcd\xc3\x3e\xc7\x7d\xe1\x2f\x83\x51\xbe\x0d\xd3\xa6\x8e\x93\xcc\x59\x0c\x45\x44\x10\xd4\x87\x83\xd2\x4b\x89\xc3\x17\x81\x3d\xba\x07\xd6\x64\xd2\x9b\xcd\x45\x93\xe8\x5e\x5e\xad\xec\x8f\xf6\xcb\x0e\x7f\xd4\x3d\x06\x09\xe2\x49\x4c\x91\x84\xce\x09\x0b\xf8\x3c\x05\x29\x9f\xe5\x20\xe5\x31\x9b\xa4\x3c\x8f\xe9\x9c\x64\x6c\x9e\x71\x19\x60\x30\x49\x09\x86\x1c\x41\x4c\x0a\x73\x8e\x67\x71\x46\x33\xec\xd7\xb2\x19\xbf\x01\xed\xe3\x1c\xd2\x98\x63\x41\x86\x53\x0e\xbd\xb8\xbb\x2c\x4c\x08\x01\x84\xa3\x28\x1e\xd2\x20\x66\x13\x8a\xca\xd3\xd7\x62\x74\x39\x93\x26\x5c\x4a\xa7\x19\xc1\x3c\x47\x11\x8a\xe2\x72\xf4\xea\x18\xbc\xcb\x7e\xe1\x6f\xd9\x2f\x28\x0e\x8d\x71\x69\x5a\xd1\x8f\xa6\xc7\xaa\x56\x5b\xd6\xdd\x52\xc3\x4a\x90\x77\x7b\x13\x9e\xc6\x6b\xc0\x97\x71\xb1\xbd\x14\x97\x5c\xa6\x15\x9f\xa5\xb7\x4c\xab\x68\xf4\xf1\x72\x43\x46\xbc\xd4\xf7\x85\x26\x5d\xd6\x93\xe7\xa0\xe8\xd2\xe8\xe5\x80\x5b\x7c\x11\x30\xfd\xb6\x93\xeb\x7d\x61\x62\xce\xb6\xb0\xb4\x39\x36\xed\x1c\x5c\xa7\x26\x8e\xcf\x27\x31\xee\xdc\xc7\x29\x56\x84\xe3\x8e\x76\x3d\x0f\xcb\x96\xb8\x2f\x97\xb6\x5e\xdd\xac\x43\x59\xd1\x5c\xa9\xcd\x42\x88\x71\xc5\x0a\x92\xa7\x5c\xe3\x49\xe6\x6e\x87\xfa\x76\x30\x8f\xe2\x83\x90\x50\x2e\xa4\xad\xf7\x4a\x59\x6e\x83\x02\xe7\x12\x6c\x8e\xeb\x9f\x4f\x25\x52\x36\xfc\xb9\x4d\xe8\xb7\xd3\xff\x51\x28\x8b\xe8\x84\xa1\x39\x92\x40\x06\x43\x9a\x05\x59\x12\x43\x1e\x71\x7c\xc6\x10\xcc\xa7\x74\x4a\x21\x42\xd8\x94\xcd\x28\x2e\xa5\x79\x48\xd3\x09\x93\xe4\x38\xe3\x13\x2e\xe7\xe3\x98\xc6\xaf\xfd\xe1\x7e\x13\xda\x83\x04\x11\x0a\xd3\x09\x21\x38\xcb\x10\x93\x22\x3a\x41\x6c\x9c\xe7\x00\x24\x71\xce\x61\x9a\x89\x19\x8a\xe7\x01\x93\x93\x84\x83\x14\xa0\x73\x92\x60\x9a\x05\x14\xa2\x31\xe0\x59\xf8\xea\x18\xbc\xcb\x7e\xe1\x6f\xd9\x2f\xbc\x23\xad\xdd\xe7\x4c\x75\xe6\xcc\x15\xbc\xdf\x0f\x31\x77\x3a\xe8\x0b\xfa\x06\x36\xab\x03\xb6\x53\xc4\xa8\xd3\xb2\x0a\x72\xd7\xbf\xb0\xb1\x1c\x40\x73\x9b\x04\xce\xb9\x76\xae\xc2\x7d\x13\x45\xab\x46\x0e\x62\x5f\x30\x79\xed\xe4\xaf\x1b\xcb\x4f\xf4\x36\x16\xbc\xfb\xdb\x16\xef\xfc\x9d\x2f\xeb\x6c\x0a\x94\x76\x48\x6e\xf1\x75\x3c\x40\xd8\xa2\x2e\x89\x0f\x31\x5e\x88\x72\xa6\xa7\xdc\x36\xf1\x94\x83\x98\x8e\x8e\xe2\x6d\xb9\xce\x2b\xd2\x04\x9f\xe1\xfe\xa0\x68\x54\x7c\xe3\xaa\xf1\x56\xce\x41\x23\x45\xab\x9c\x45\x96\xa4\x2f\x86\x39\x2c\x9c\xc3\x3a\xd8\x0a\xaf\x45\x35\x7e\x40\x59\xf4\xb5\x9a\xc2\x1f\x8f\xb2\x54\x96\x72\x2c\x4d\x91\x94\x45\x3c\xc1\x34\x97\x21\x86\xe2\x60\xc2\xf2\x34\xc5\xd0\x0c\x4c\x18\x96\xe3\x13\x92\xb2\x18\x01\x1c\x63\x40\x31\x5c\xc2\x43\x06\x13\x92\x50\x71\x4a\xe2\x57\xe9\xf4\x5b\xd0\x1e\x62\x96\x20\x02\x99\x14\x64\x71\x0e\x20\xcc\x33\xc2\x70\x80\xe6\x53\x8a\xa2\x19\x3e\xcd\xf3\xd7\xbe\x77\x2f\x1a\x0d\xa3\x98\xe3\x12\x04\x31\x61\xf3\x38\xe3\x11\x61\xb8\xec\x95\xf6\xe8\x5d\xf6\x0b\x7f\xcb\x7e\x51\x1a\xad\xd9\x3d\x9d\xce\xe1\x30\x1e\x1b\xe3\xec\x33\xcc\x94\x8a\x36\xd3\x27\xce\x51\xac\x67\x8d\xbe\x41\x90\x1c\x99\x6b\x99\x07\xc4\x77\xd5\x85\x5a\x05\xb4\xd3\xa4\x0b\x38\xd2\x27\x31\x8d\x38\xb4\x37\xdd\xac\x85\x8b\xd4\x6b\x11\x13\xba\x2b\xd9\x5e\x6c\xdf\x45\x0c\xf2\x77\xbe\x6c\xbf\xb3\x4d\x71\xa1\x96\x78\x6b\xd0\x62\x76\x12\x16\xe7\x66\x66\xe4\x8c\x1c\x76\x42\x14\x62\xfb\x7c\xd7\xd3\xf1\x4e\x2c\xe5\xb4\x12\x60\x52\x23\x7a\x1a\xba\xbb\xb5\x84\x4d\x51\x9e\x05\xc1\x3f\x6f\x97\x95\x88\x58\x9e\xa7\xae\xc6\x20\xe7\xa7\xc5\xd0\xd8\xc1\xe6\xf5\x09\x5e\x59\xf9\x01\x65\xf9\xe6\xf5\xe8\x8f\x47\xd9\x84\x4e\x71\x86\xe9\x98\x24\x31\x87\xa9\x84\x66\x41\x42\x01\x90\x42\x3a\xce\x48\x02\x58\x96\x46\x84\x85\x14\xa6\x78\xc0\xb1\x08\xc7\x74\xc2\xa7\x6c\x92\x32\x74\x9c\xc4\x1c\xcc\xa8\xd7\x98\xea\x6f\x41\x7b\x90\xc4\x59\x1c\x63\x02\x69\x1e\x53\x39\xe0\x5e\x2c\x33\xcf\x64\x10\xa4\x14\x8e\x53\x92\xe4\x79\x9a\xbf\x56\x97\x4b\x01\x60\x08\x4b\xd1\xe9\x8b\xd7\xc1\x65\x84\x49\x49\x9e\xbf\x7e\x0f\xe6\x5d\xf6\x0b\x7f\xcb\x7e\x4d\xd0\x08\x1d\xac\xed\x48\x1a\xd2\xaa\x24\x0f\x17\x45\x55\xbd\x21\xa8\x12\xac\x65\x12\x39\x1b\x6a\xc5\x6c\x0e\xb8\x93\x7a\xb6\xaf\xa8\xc4\xeb\xc5\x64\x97\xc9\xb6\xda\x96\x8b\x3b\x93\x73\x69\x03\x87\xc5\xc9\x8c\xf2\x47\x57\xea\xda\x92\x4d\x66\xb1\x71\x69\xeb\xcd\xca\xbe\xdf\x4e\x45\xc0\xc3\xda\x07\x3e\x68\xf3\x79\xde\xad\xf6\x19\x55\x16\xca\x25\x58\x64\xf5\xc2\x62\x28\xb8\xdf\x94\xfd\xf5\x60\xae\x4d\xca\xb3\x8a\xae\x8b\x2f\x0b\x2b\x4a\xb7\xeb\x2d\x0e\x9a\xcc\xea\x45\xf6\xd1\x2d\x39\x1e\x18\xe9\x54\x1d\x4e\x42\xca\xba\xf6\x86\x49\xf1\x52\x7e\xa5\xac\xf1\x03\xca\x2e\xbf\x72\xf2\x1f\x50\x76\xcd\x82\x6b\x7e\xd4\x0e\xf2\xfd\xb8\xa0\x2f\x07\xcf\x14\x48\xcf\x2e\x97\xdb\xac\xd2\x2d\xa3\x61\x0a\xdd\xae\xbd\x23\x39\xd8\xcb\xe9\x87\x35\xec\x3f\xfd\xf5\x8b\xeb\x18\x30\x10\x41\x86\xca\x61\x4e\x62\x2a\x66\x63\x86\xe1\xb3\x17\x8b\xc6\xf2\x0c\x01\x1c\x20\x1c\xcf\xf1\x14\xcf\x20\xc4\x01\xf8\xba\x07\x9b\xa2\xa8\x1c\xb3\x71\x12\x67\x29\xc5\xbd\xee\x0f\xf8\x2d\x68\xcf\xd1\x79\xcc\xe3\x98\x40\x94\x27\x34\xc7\x33\x39\xe6\x38\x88\x73\x8a\xa1\xb2\x9c\xa4\x88\x20\x9a\x27\x59\x96\x67\x09\x83\xf3\x84\xc5\x80\xa5\x40\x8a\x62\x06\x63\x82\x51\xcc\xbe\xee\xe4\x62\xde\x65\xbf\xf0\xb7\xec\x17\xd6\x75\x7a\xee\xba\xab\x2e\xcd\x61\x27\x54\xd3\xdc\x91\xfe\x14\xee\x99\xa3\x38\xd5\x6d\xa4\xb7\xc9\x59\xbb\xa9\x5a\x77\x95\xa9\xcd\x00\x6e\x2b\x4f\xef\xd7\x77\x4b\xcf\x7c\x49\x5f\x16\x3d\x95\xc2\xfd\x92\x38\xeb\x6b\x1c\xb8\x44\x59\xa0\xe3\x1d\x14\xc3\x62\xac\xdf\x51\xf6\x9d\x2f\xab\xf1\xe6\x8d\xb4\xdc\xda\xb6\xc4\x7e\xf4\x0e\xf3\x1c\x77\x71\x1e\x3a\x0f\x7d\xdd\x5c\xa7\xf2\x10\x0c\xa9\x7b\xbc\x9c\x3c\x3b\x5d\xd8\xe2\xe2\x42\xc6\xcd\xb6\x0f\x9b\x9c\x18\x9b\xa5\xe8\xc0\xc5\x6c\x3b\x11\xce\x96\x89\xbf\x1c\xce\xab\xc2\x54\x2e\x87\xfc\xbc\x3b\xbd\xee\xe4\x92\xad\xef\x29\xbb\x15\x86\xd7\xa3\x3f\x1e\x65\x93\x0c\x27\x08\xf0\x59\x92\x71\x39\x47\xf2\x8c\x4e\x18\x96\x64\x98\x02\x49\x4e\x73\x2f\xfa\x1e\x42\x9a\x21\x20\xa7\x10\x00\x59\xc2\x30\x3c\xcf\x20\x2e\x45\x14\x4a\x09\x61\x29\x96\xfd\xb9\xd0\xe6\xd3\xb4\xcf\xf8\x94\x90\x18\x51\x0c\x01\x69\x96\x53\x0c\xe6\x63\xfa\xc5\x7d\x48\x31\x22\x84\x64\x2c\x41\x38\xc3\x30\x21\x3c\x4f\xb3\x28\x61\x29\x8e\xc9\xd8\x2c\xe6\x68\x9a\x8a\x53\x40\x5e\xbb\xe0\x32\xef\xb2\x5f\xf8\x5b\xf6\x8b\x11\x3d\x87\x96\x1f\xcb\xab\x74\xba\xf8\x67\x62\xe8\xb1\x8f\x5a\xb3\x3d\xad\x24\xdf\x35\x0c\x76\x4e\x53\x41\x86\x71\xd7\xa5\x92\xfd\x20\xaa\x12\x83\x23\x3b\x68\x1a\x57\x24\xd6\x92\xb6\x5c\x2e\x16\xc4\x70\xb9\x9d\x47\x9b\x8f\x1e\xa0\xe7\x4f\xb3\x76\x36\xfd\xf6\xad\x55\x5d\xf1\xbe\x8e\x81\xda\x53\xe3\x2d\xab\x47\x40\x68\x14\x99\xd1\x26\x5c\x56\xe7\x5a\xa6\x8c\x42\xe3\x4f\x0b\xbe\xa4\x38\x2d\xa9\xcf\x51\xcf\x2b\x8f\xe8\x31\x5e\x84\x43\xf5\xc8\xc5\xc3\xa9\xe4\xf9\xb3\xee\x8d\x38\x60\x74\xfa\x71\xbb\xd4\xc1\x0e\x48\x2a\x3d\x5c\x45\x65\x3d\x8d\xd2\x2b\x65\x9d\x1f\x50\x56\x72\x5f\x8f\xfe\x78\x94\x45\x1c\x8b\x98\x38\xe3\x10\xa4\x08\xc3\x33\x80\x61\x60\xfa\x72\x4b\x66\xf9\x98\xc1\x34\x9d\xc4\x29\x0f\x11\x4b\xbf\xd6\xdd\xa4\x20\x95\xb0\x54\x42\xb1\x20\x47\x1c\x03\x13\x36\xa1\xbf\x56\x3e\xfc\x0d\x68\x0f\x63\x08\xb3\x34\x21\x31\xce\x63\x36\x83\x0c\x4f\x12\x48\x61\x36\x8e\x01\x89\xf9\x38\xa1\xe8\x94\x49\x13\x1e\xe7\x39\x46\x29\x8f\x31\xa1\x98\x8c\xe5\x53\x26\x4f\x01\x95\xa4\x34\xc6\x2f\x94\x7d\x97\xfd\xc2\x6f\x95\x0f\x69\xec\x5c\x00\x7f\x44\x98\xd7\xe8\x64\x48\xa5\xdb\x5c\x2c\xdc\x87\xe5\xa3\x9b\x28\x99\x89\x1f\x35\xfb\xa3\x22\x5a\xf8\x24\x9e\xe4\x9b\x5b\x41\x34\x32\x6e\xa1\x08\x72\x95\x5c\x52\x1b\xa5\x8c\x2d\x26\xa6\xc1\xe8\x6a\x30\xd3\xc3\x83\xb6\xc5\x69\xc6\x86\xf5\x56\x78\xbe\x78\xe7\xcb\x86\x1c\x15\xf7\x73\xab\xfb\x46\x86\xa9\xb9\xe6\x19\xb3\xec\xdd\x4d\x5d\xc1\x71\x17\x96\xc5\xaa\xbb\x59\x97\x07\xeb\x10\xc8\x4c\x0e\x6b\xf1\xf7\xc5\x65\x79\x19\x36\x11\xfb\x10\xc1\xb5\x62\x2f\xd7\x49\x57\xef\x4c\xbe\xcc\xac\x06\x22\x95\xbe\xcc\xf9\x54\xdc\xbe\xee\xd7\x92\xf7\x3f\xa0\xac\x4c\xbf\x1e\xfd\xf1\x28\x9b\x70\x3c\x95\xe6\x19\x86\x80\xa5\x38\x18\x67\xaf\xe6\x8d\xa1\x59\x96\x07\x34\xc8\x19\x1a\x60\x98\x52\x1c\x45\x40\xc2\xe2\x18\xb2\x2c\x22\x09\x4e\x93\x34\xe1\x73\x1a\x63\x1a\xbd\x6e\x69\xf9\x4d\x68\xcf\x43\x3e\x03\x29\x26\x54\xc2\x10\x92\x02\x0c\x71\x46\x11\x3e\xe1\x78\x18\xa3\x9c\xa2\x69\x3a\x25\x14\xc7\xf1\x29\x17\x43\xc4\x42\x0a\x24\x29\xfd\xf2\x2b\x83\x31\x0f\xb9\x94\x79\xa1\xec\xbb\xec\x17\xf7\x96\xfd\x2a\xeb\x60\x28\x65\xb9\x69\x76\xbe\xf7\x08\x9a\xe0\xd4\xa4\xee\xd8\xd7\x54\x98\xe8\xab\x49\x96\x80\x34\x85\xb7\x9d\x6a\x83\x7e\x9f\x09\x8f\xcb\x29\x42\xfe\xa9\x5a\x09\x9a\x51\x9e\x69\x89\x93\x58\xe6\x2e\xd4\xa7\x41\x4c\xa5\x5a\x3d\xe8\xf2\x54\x7b\xdb\x36\x7c\xe7\x18\x94\xef\x20\xcf\x0f\x7e\xbe\xdd\xf1\x47\xf1\x5a\x7a\xf9\x03\x99\xd5\x2d\x0c\xb7\x7c\x32\x9c\xc7\xc5\x75\xca\x97\xd7\x8b\x1f\x9a\x58\x2f\x12\xc1\x02\x8c\x9d\x99\x3a\x32\x0f\xe3\x74\xde\xf0\xf2\x65\x5c\xd9\x35\x27\x2a\x29\x32\xaa\xb4\x3a\xba\x47\xa1\x9b\xc2\x2a\xf5\x61\x8d\xe6\x57\x2b\x1b\xfe\x80\xb2\xda\xeb\x03\x0b\x7f\x40\xca\xf2\x39\x61\x39\x0e\xd3\x28\x89\x11\x0b\x92\xe4\x45\x06\x25\x0c\x00\x31\xe0\x72\x04\x19\x16\x73\x69\x0a\xe3\x0c\x72\x30\x4b\x51\x9c\x67\x3c\x1d\x73\x29\x4d\x13\xc8\xc4\x30\xc3\xf0\xe7\xfd\xb2\xcf\xd3\x3e\xe1\x61\xce\x66\x3c\xcf\xf3\x28\x8f\x29\x2e\xcd\xa9\x94\xe3\x08\x4d\xd1\x2c\x47\xf3\x14\xc3\xa6\x19\xcf\x62\x94\xd2\x34\x87\x93\x94\x23\x88\x4d\x72\x16\x73\x31\x8c\x11\xfd\xe2\x47\x24\x2f\x94\x7d\x97\xfd\xe2\xbe\x65\xbf\x70\xe5\x3c\xf8\xf4\x1e\x1a\xf6\xe0\x33\xad\xaf\x9e\xea\xd2\xa4\x95\xf3\x56\x28\xec\x35\x20\xc7\xa8\x66\xe1\x9d\x1b\x73\x15\xaa\x82\xa6\x10\x4d\xe1\x45\x38\x34\xb8\xe5\xa5\x7c\x3d\x6c\x7d\x0b\xc9\x24\x48\xf6\xf9\x52\x6c\x21\x9f\xca\xba\xd7\x29\x46\x7c\x4e\xdf\xac\x6c\xf9\xce\x97\xd5\xed\x91\x12\xdd\x05\x60\x3c\xf9\x9e\x86\x38\x4b\x37\xbb\xbb\x9f\xd6\xf4\xf9\x1e\x89\x52\x2d\x88\x6a\x74\x98\x8e\x75\x95\x32\x60\xc7\x6c\x01\x88\x4e\xfb\x45\x71\xdc\xca\xc6\xb1\x14\x82\x22\x12\x83\x47\x14\x51\x93\x5b\xe2\xbb\xed\x76\xfc\xb9\x3a\x5e\x44\x38\xbd\x76\x6f\x94\xd3\x1f\x50\xd6\xf8\x7a\xb5\xfc\xf1\x28\x8b\x10\x8f\x60\x1c\xa7\x2c\x95\x63\x88\x39\x00\xd2\x24\xe1\x48\x46\xf1\x59\x9c\xc1\x38\xcd\x73\x96\xca\x79\x8e\xa6\xb3\x84\x4f\x53\x86\x25\x39\x01\x79\xc6\x52\x1c\x20\x19\xa6\xf3\xe4\x95\x6e\xbf\x05\xed\x41\x8c\x20\xf7\x62\x7d\x79\x42\x67\x3c\xcd\xb2\x79\x82\x12\x8e\x8d\x69\x9e\x25\x2c\x4b\x67\x31\x45\xa7\x14\xc5\xc6\x2c\x8d\xf9\x24\x67\x32\x0a\xf1\x31\x66\x98\x9c\x00\x92\x22\x4c\xe2\x17\xca\xbe\xcb\x7e\x71\xdf\xb2\x5f\xcc\xf2\x54\xe9\xaa\x79\xd1\xd6\x78\xcd\x02\xda\xb8\xae\xb7\x0e\x1d\xa1\x87\xdc\x79\x05\x3f\xaf\x97\x91\xd6\x4e\x2e\xa2\x5b\x3e\xa5\x85\xbc\x1b\x15\xda\xd8\xa4\x9b\x45\xec\xde\x6a\xa1\xb1\xb6\x29\x00\x99\x57\x14\x45\x95\xb3\x53\xd3\x5a\x83\x83\xf0\x71\x75\x75\xdf\x9e\xb0\x2d\xdf\xf9\xb2\x63\x76\x33\xd6\x49\xa6\x3a\x36\x9b\x9e\xaf\x62\x93\x0b\x0e\x75\x9d\xaa\x1b\xe7\x2d\x93\x76\x5a\x06\x5b\xcf\x10\x36\xed\x52\x71\x5d\xe5\xea\x20\x69\x8a\x89\x1e\xa9\xa7\x05\x35\x6a\x6d\x94\x9c\xc2\xac\x15\x27\x21\x3e\xa9\xcc\x8d\xa6\x94\xd3\xd9\xcf\xd1\x38\xeb\xec\xcb\xf8\x72\xf1\x03\xca\xae\xd5\xd7\xa3\x3f\x20\x65\x5f\x6c\x5b\x1c\x73\x39\x95\x82\x98\x4a\x12\xcc\x02\x40\x43\x40\x43\x1a\x24\x14\x42\x3c\x06\x14\xa1\x10\x4e\xd2\x14\xe1\x98\xcb\x10\x26\x90\xe3\x18\x16\xd0\x90\x67\x33\x02\xc1\xd7\x6d\x31\xcf\xd3\x1e\xc0\x9c\x65\x72\x9a\xca\xb3\x04\x26\x4c\x4e\xb3\x31\x43\xe8\x9c\x86\x09\x83\x08\x0d\x78\x48\xf3\x09\x05\x32\x00\x58\xc2\xd0\x54\xc2\xa5\x71\x9c\x30\x98\x50\x31\xc8\x62\x84\x70\xfe\x1a\xe4\x7a\x97\xfd\xe2\xbe\x65\xbf\xa8\xdd\xde\xbe\xce\x05\xff\x20\x92\x69\x8e\x36\xb5\x02\x83\xdd\x2f\x81\xcc\x14\x2e\x60\x1e\x6a\x72\x43\x37\xba\x28\x46\x7a\x5e\x4c\xbb\x48\x19\x89\xef\x5c\xfc\x2e\x3b\xa0\x76\xb1\xb6\x46\x96\x89\x58\xe1\xba\x55\x9c\x02\x96\x72\x61\x69\x07\xff\x11\x64\x79\x81\xde\x59\xd9\x77\xbe\x2c\x8d\x7a\xd5\x70\xc7\x63\x30\x15\xfc\xfa\x12\xc0\x39\xdd\x7a\xa2\xa0\x91\x51\x64\xa5\xfe\xbc\xb3\xbc\xcb\x96\xdb\x1d\x77\x7d\xc6\xb7\x47\xbe\xe1\x9c\x65\x62\xd3\x5c\x70\x21\xfa\x6c\xd3\x5e\xb9\xf6\xb4\x44\x18\x8c\x13\xe3\x4a\xe8\x7e\x1d\x0e\x68\x6d\xc6\xae\xbe\x7c\x75\x0c\xea\x1f\x50\xd6\xbc\xbc\x1e\xfd\xf1\x28\x4b\x91\x17\x93\x06\x32\x96\x4e\x12\x9c\x00\x2e\x8f\x73\x06\x33\x09\x1f\x43\x86\x62\x30\x9b\xa7\x88\xca\x69\x96\x40\x0e\xd0\x18\x43\x9a\xe2\x59\x04\x79\x94\x24\x00\x64\x84\x65\xb8\xd7\x36\x73\xbf\x05\xed\xf3\x94\xa7\x33\x86\xa7\xe1\xd7\x6a\x30\x38\x4e\x00\x82\x3c\xc4\x88\xe7\x30\x7e\x6d\x7d\x07\x40\x0e\x28\x9a\xc7\x84\xc9\xa8\x38\x01\x7c\x92\x11\x36\x46\x79\x86\x19\x8a\x7e\x8d\xed\x32\xef\xb2\x5f\xdc\xb7\xec\x17\xc5\x0f\xa7\xeb\x71\x9a\xae\x12\xce\x2a\xc3\x33\x3c\xa5\x13\x95\xe6\x2e\x17\x2e\x7e\x28\xa4\xa5\x75\x84\xca\xc0\xf0\x9a\x01\xdd\x99\x26\x8e\xc9\x1c\x55\x50\x24\xed\x2a\x11\xc3\xb5\xa2\xfb\x6e\x7c\x70\xc4\x47\xf4\x38\xc8\xc7\xae\x7a\x9c\xc4\x28\xd6\x00\x17\xbc\x55\x3e\xac\xde\x41\xae\x59\xb9\x23\xaa\xcb\xf0\x1a\x92\x4c\xd9\x6f\xce\xce\x58\x35\x8f\xb1\x7e\x98\xab\x2d\xf1\x3b\x97\x37\xd8\x2b\x4c\xe2\x8d\xc6\xc1\x33\x57\x67\x81\xbb\xbd\xba\x79\xc6\xf6\xb5\xed\x65\xab\x12\x16\x13\x2d\x99\x77\x21\xca\x1b\x6a\xdd\x5f\x6e\x24\xae\x97\x87\xbd\xd8\xbd\x0c\x2c\xb7\x3f\xa0\xec\xe6\xeb\xe3\x3c\x7f\x3c\xca\x72\x0c\xc1\x80\x65\x51\x9a\xd1\x1c\x64\x00\x60\x01\xc7\xb2\x39\xc5\x40\x86\x41\x14\x0d\x59\x90\xc4\x5c\x4a\x62\x36\x06\x39\xc2\x04\x60\x9a\x45\x98\x8e\x13\x8e\xca\x70\xcc\x01\xea\x75\x17\xd6\x6f\x41\x7b\x92\xd1\x59\xce\xe5\x3c\x93\xa7\x14\x97\x30\x2c\x87\x78\x82\x30\xcb\x01\x3e\xa7\x28\x2a\xe6\x68\x08\x00\x4d\x50\x9c\x41\xcc\xc1\x84\x8f\x49\x46\x48\x8c\x78\xc0\x26\x74\xfa\x72\xde\x17\xca\xbe\xcb\x7e\x71\xdf\xb2\x5f\x13\xeb\x46\x15\x5d\x8e\xb0\x6f\x17\x37\x9f\x1e\xe3\x8d\xe3\x83\xa5\x22\xcf\xc9\xb1\x28\xb3\x87\xb2\x8a\xe4\xc6\xec\x2b\x78\x0a\xcc\x85\x21\x9d\xa1\x68\x3a\x07\xb7\xc7\x79\x83\xfa\x2a\x50\x25\xd0\x64\x32\x59\x60\x3a\xcb\xa3\x85\x3d\xb0\xbb\xc7\xe8\xae\x93\x9f\xfb\x1a\xbe\x52\xf6\x9d\x2f\xdb\x6c\xac\x49\x94\xf7\xca\x75\xa8\x14\xef\xb4\x5f\xc4\x63\x53\x5b\x9d\x3c\xfa\x83\x98\xe7\x26\xd7\xfb\xe4\x7a\xa2\xe6\xd3\xe2\xae\x3e\x06\x3d\x3f\x32\x07\x4e\x32\xfd\x76\x47\x5c\x50\x5c\x38\x41\x6a\x95\xbb\x41\x76\xc3\x06\xd9\x4c\x37\xe0\xeb\x6e\x17\xcf\x73\xf9\xda\x91\x46\xee\x7f\x40\x59\x7b\x7e\x3d\xfa\xe3\x51\x36\x4f\x39\x04\x33\x40\x23\x98\x62\x36\xc9\x00\x4f\x12\x98\xd0\x79\x9e\x65\x29\xcc\x10\x97\xb1\x54\x8a\x63\x3a\x4b\xf3\x98\x86\x71\xf6\x5a\x29\x2e\x8b\x29\x88\x29\x1e\xe4\x34\xc8\xbe\x76\x57\xfc\x0d\x68\x9f\xa5\x1c\x93\xbc\x30\x9a\xd0\x98\xc7\x30\x27\x69\x9e\xe4\x71\xf6\x5a\x40\x31\x21\x88\x65\x41\xca\x70\x88\x4d\x00\xe1\x20\x97\xc4\xd4\x0b\x5d\x11\xcb\x67\x80\x65\x69\x16\x65\x2f\x56\x96\x7d\x97\xfd\xe2\xbe\x65\xbf\xd0\xe1\xbc\x3a\x79\x1b\x4d\xde\x57\x61\x1b\xdd\x44\xcf\xdf\x0b\x5e\xd8\x5d\x2d\xf6\xd4\xde\xdc\xc5\x6a\x8e\x74\xad\x2b\x36\xa4\x35\x0c\x86\xcb\xfd\x5b\xd3\x79\x65\x6a\xf6\x6e\x19\x2d\xad\xa0\xb4\xac\x7c\xb9\x0f\x3b\x60\x3f\x6a\xb7\xf6\xd6\x6a\x18\xc9\x9a\xc3\x90\xb7\x88\x41\xf5\xce\x97\x8d\x44\x70\xc0\x4d\x2a\x25\x18\x83\x66\x8b\x9d\x66\x30\xa6\x1c\x0b\xf9\x42\xd9\x55\xfd\xba\x6f\xd5\xcb\x9e\x4e\xc5\xe8\xb6\x4b\x71\x5a\x26\x2a\xdc\x96\xe4\xb0\x5d\x3c\xf0\x62\xe8\x57\x4c\xc2\x68\x61\x1f\x28\xf1\x9d\x95\x2b\x56\xaa\xeb\x3a\xce\x56\x27\xb5\x86\x2f\x03\xcb\xd3\x0f\x28\xeb\xfc\xd3\x6d\x31\xff\x87\x52\x16\xa3\x94\xcd\xf2\x0c\x72\x29\x9b\xa4\x28\xa1\xa9\x8c\x64\x59\xf2\xe2\x6c\x66\x4c\x4c\x23\x18\x73\x34\x66\x19\x1a\x40\xc2\x92\x84\x85\x00\x65\x39\xc9\xa9\x2c\xcd\x50\xcc\x30\xf9\xd7\xc6\xf4\xbf\x05\xed\x73\x2e\x26\x39\x4c\x31\x05\xe9\x2c\x8b\x5f\x0c\x30\xcb\x11\x98\x40\x2a\xcf\x30\x1b\xa7\x19\xc5\x53\x88\xe3\x18\x9a\xa1\x08\xcc\x18\x26\xce\xb2\x24\x49\x33\x4c\x12\x44\x40\x0a\x71\xfe\x42\xd9\x77\xd9\x2f\xee\x5b\xf6\x6b\x79\x57\xb6\x3b\x55\x9e\xc1\x6d\x77\xee\xec\x79\xc9\x43\x99\x36\xe8\x62\x66\xf5\x74\x51\xda\x43\x25\xd6\x59\x2b\xa7\x2b\x73\x36\x9d\xe9\x9c\xb4\x72\x74\xb7\x8b\xf4\x9e\x27\xa8\x26\xcc\x64\xc0\x5d\xdb\xfb\x11\x1b\x3a\xe3\x6c\x9c\x37\x60\xcf\x66\x62\x86\xf8\xf2\xcd\x97\xad\xde\xf9\xb2\x6d\xaf\x94\x37\xd7\x93\x6e\x71\x66\x2c\x57\x7c\xb7\xe0\x6a\x71\xd1\x84\x02\x6b\x5f\x4a\xef\xa8\xeb\x4b\xa6\x05\x8b\xaa\x6e\x0c\xb4\x45\xdd\x6d\xab\x0b\x33\x8c\xfb\x8a\x6e\x11\xb6\xb6\x34\xe8\x36\x92\xb3\x33\xf6\xbe\x7c\xa4\xfd\x2e\x1b\x39\x7a\x31\xd8\xa6\xfc\xba\x87\x41\xa6\x7e\x40\x59\xf7\x9f\x6e\x8b\xf9\xff\x23\x65\xff\xf4\xa7\xff\xfc\xcf\x3f\xfd\xe7\x7f\x7e\x91\xe3\x21\xfe\x92\xb7\xdd\x97\x4d\x7c\x22\x7f\xf9\xd2\xe6\x39\xe9\xfa\xff\xfe\xe2\xdd\x2f\xe4\x2f\x5f\x3c\x41\x34\x95\x2f\xb2\xe0\x09\xff\xfd\x65\x97\x96\xe4\x14\xff\xe5\xcb\x65\x4c\x9a\x2a\xfd\xef\x2f\xf6\x74\x26\xdd\x5f\xbe\xbc\x0c\xf2\xa7\xbf\xb9\x00\xbe\x0e\xf1\xc6\x7c\x4d\x38\x58\x2a\x82\x9e\x16\xe9\x01\x74\x36\xd0\x55\xec\xbd\x00\xf6\xcc\x36\x60\x44\x4f\x70\x0f\x9a\x16\xae\xe0\xca\x50\xf5\x00\x86\x1e\xeb\xb8\x6b\xd7\x84\xd2\x76\xbb\xff\x8f\x3f\x7f\xf9\x6b\x38\x4a\x10\xfe\xe7\x7f\xfe\xe3\xaf\xc7\xbe\xef\xb9\x3f\x4f\xc4\xec\xcd\x47\xfa\x88\xb6\x49\xaa\xe1\xca\xa5\x85\xf8\x42\xf3\x63\x79\x92\x36\x0f\x6d\x3a\xc7\x7b\x75\x9b\x90\xd5\xa2\x54\xf7\x3e\x56\xfe\xe7\xb5\xc7\xe2\x5f\x5f\xaf\x43\x83\x3f\x7f\xa1\xfe\x8b\xf9\xf3\x97\x97\xdf\xf8\x0f\x57\xf1\x77\x93\x10\x81\x63\x84\x1e\x30\x84\xbd\x6a\xb9\x87\xb5\xb9\x33\xcd\xad\xab\x48\x12\x6b\x4b\xb6\xb6\xb2\x04\x79\xb7\xf5\xdc\x35\xf6\xb4\x8d\x07\x76\xaa\x0b\x42\x2d\x90\x05\x57\xfe\x8f\x3f\x7f\x41\x3f\xf8\xe2\x99\xe3\x56\xa4\x16\x5a\xbf\x4e\xae\x87\x55\x0c\x67\xc3\x38\x9c\xa5\x34\x32\x05\xb9\x5e\xa4\x7e\x7e\x8a\x7a\x7e\x67\xea\x81\x1c\x28\x6f\x13\xff\x0a\x02\xfd\x37\x73\xf8\xfa\x43\xfd\xf9\x0b\x40\xff\x74\x06\xac\xb6\x81\xe6\x6a\x1f\xb0\xab\xd0\xc5\x8a\x6c\xaf\x10\xf6\x45\x1d\xcb\x88\xb1\xd0\x2a\xd0\x0f\xda\x9a\x35\xf5\x95\x2b\x28\x06\xb3\x12\x77\x1b\x20\x8b\x4e\x88\x9d\x17\xb7\xea\x07\x33\xc8\xb5\x64\x88\xe3\x80\x3b\x2b\x79\xad\x31\xdb\x2d\x2d\xe5\x68\x91\x45\xf3\xe6\x08\xad\xee\xfe\xb8\x54\x42\x65\x5f\xe4\xd5\x58\x96\xc5\xc7\x19\x7c\x58\x86\x6f\x3f\x80\xfd\xfd\xa6\xc0\xfe\x13\x26\xfd\xca\xe9\xfc\xc3\x29\xfc\x9d\x4b\xeb\x42\xfe\x95\x2b\xeb\xef\x0d\xf6\xf2\xd9\xbe\xbc\x8e\x64\x24\xbf\xe1\x98\xfd\x98\xfc\x56\xa3\x5d\xc7\xb6\x1b\x4f\xd5\x39\x6f\x7f\xab\x11\xfb\xf4\x52\x56\xfd\xd0\x76\xf7\xa7\xec\xd3\xdb\x30\xef\x6d\x14\xdc\x01\xdb\x91\xdd\x83\x2d\xad\x3c\x55\x11\x91\xbc\x59\x23\xcf\xc4\x20\xd2\x0d\x85\x8d\x0e\x9e\x11\xe1\xad\x1d\xb1\xc0\x40\xb2\x6a\xdb\x2b\x73\xb7\x17\xa4\xcd\xcb\xe5\xfd\xd7\xf8\xa3\x20\xa7\x83\x5d\xd8\x1b\x28\x79\xd6\x45\xe0\x34\xfa\xb0\xea\x96\xdd\x8a\x52\xf8\x13\x47\x45\x0b\x1e\xe4\xb1\x3b\x45\x07\x7b\x37\xfa\xef\x4c\xf1\x6b\x7c\xf1\xb5\x2b\xdf\xeb\x0d\x46\xa9\x98\x46\x21\x37\xda\xa5\xd3\xcb\x60\x5d\x57\x77\x9f\x63\xb7\xe6\x2d\x2a\xeb\x7d\xb3\x73\x6a\xde\x9f\x2e\xdb\x93\x06\x16\xd5\x98\x7c\x1d\x45\x4c\xf9\xfd\xfc\xf5\xd6\x54\x7c\xfb\x47\x7c\x1d\x74\xfa\xf6\xbb\x2c\x08\xbc\xf4\x7e\x3f\xfd\x64\x4e\xd7\x5d\x10\x15\x03\x75\x2e\xcc\x81\x7a\xd4\x27\x5b\xb8\x9c\x03\xb2\xd0\x76\x0b\x37\x71\x0f\xd6\x45\x26\x4d\xb0\xd9\x9e\x4e\x5f\x87\xb3\x0d\xc1\x71\xed\xf5\xa9\x78\x08\xc2\x49\x80\x62\xdd\x7b\x75\x8b\x36\xc5\x5e\x5f\x17\x27\x18\xec\xea\x88\xb5\x4e\xc6\x3a\xee\x74\x3e\x32\x4f\xe0\x70\x1b\x1f\x7b\x21\xe0\x76\x53\xf4\xa0\xe4\x59\x23\xcc\x5c\x87\x73\x57\x2c\x26\x12\x71\xab\x41\x84\x7a\x91\xee\x44\xe7\x7f\xfe\xe7\xa3\xef\xf4\x1b\x2f\x0d\x7c\x6a\x69\xac\xbf\x5d\x1a\x59\xd8\xd4\x91\xa0\x78\x7e\x75\xaf\xa8\x6a\x50\x89\x27\xdf\xf4\x8e\x9f\x5a\x1e\x26\x16\x32\x34\xbc\xed\xf3\x48\xf3\xb5\xd2\x88\xbe\xee\xd4\x79\x5d\x1a\xf7\xc3\xad\xf7\x57\x43\xef\x78\x46\x66\x79\x87\x95\x4a\xb9\xd6\x2d\x00\xb7\x81\x8c\x93\x54\xd8\x84\xaa\x74\x67\x80\xa7\x7a\x4d\x33\x32\x7f\xe9\x9d\x1e\xcb\xba\x42\x2c\xcf\xd8\x35\x77\x63\xd7\xdb\xbe\x95\xac\x8e\x0b\x91\x54\x8e\xc5\xcf\x4e\x4d\x98\xea\xa1\xa5\x00\xdf\xc2\xb4\x88\x25\xe1\x77\x87\x1e\x3d\x05\xbd\xf3\x01\x7a\xd1\x64\x32\x66\x59\xf8\x59\x5a\x6e\x63\xf7\xe1\x67\xf3\xd2\x4e\xf1\x5e\x2c\x96\x54\x0d\x90\x65\x1c\xf7\xb5\x9f\x92\x53\xe6\x51\x5f\xdd\xc4\x57\xe8\x77\xcf\x42\x6f\x2f\xdb\xfd\xcc\xf5\xee\xa5\x59\x8b\xea\x26\x1e\xce\xd1\x18\xdc\xb4\x30\x5d\xe7\x52\x72\xf4\x24\x9a\xb4\x67\x97\xeb\xd5\xe1\x96\xee\x83\xed\xb0\x5f\xb7\x3b\x92\x43\xa6\xb6\xee\x87\x8c\x1c\xb6\xb7\xf4\xda\xf9\xa9\xb6\xb3\xd7\xdd\xf2\xb4\xae\xa9\x23\x5f\xf4\x86\x29\xfc\xfe\xd0\x33\x4f\x41\xbf\xff\x00\xbd\x6c\x6e\xc1\xea\x18\xf7\x44\x97\x98\x1d\x87\x02\xd4\x7b\xd7\x50\xe3\x2d\x7c\xbc\x2a\x47\x26\x57\xba\xf0\xdc\x3c\x02\x80\xc6\xfb\xea\x8d\xf5\xde\xb3\xd0\x0b\x61\x82\xe0\xf1\x54\xd2\x86\x6c\x5c\xe5\x51\x07\x55\xee\xd5\x72\x71\x5b\x54\x9d\xe2\x94\x5d\x72\x2e\x85\x93\x9a\x36\xf7\xd6\x24\xca\xfe\x21\x7a\xe6\xba\x6e\x79\x4e\x3d\x9a\xaa\x4b\x8c\xa3\x83\x3b\x8f\xde\x97\x47\xaa\xbe\xc0\xe5\x6e\x19\xf9\x4e\x03\x74\x4f\x2c\x7e\x77\xe8\xd9\xa7\xa0\x0f\x3f\x1a\x1c\x68\xc2\xd1\x5b\x3a\x87\x50\x0c\xf3\x90\x5b\x5e\x2d\x5d\x2b\xa9\x32\xbd\x4b\x76\xa4\xf4\x67\x49\xb1\x29\x7c\xa7\xc5\x93\xb8\xbc\xbf\xb1\x7e\xff\x2c\xf4\xfb\xe8\xe0\xaf\xcf\xb9\x04\x57\x03\x35\x0f\xdb\x2c\xaa\x74\xa3\x3e\xef\x4a\xf6\x8a\x8e\xcb\xca\x92\x95\x2a\xc2\xd1\x43\xdc\xdd\xc5\xa5\x76\xe4\xd2\x89\xca\x16\x47\x25\xa2\x02\xdf\x5f\xed\x21\xbb\xcf\x97\xe2\x3c\x89\x2d\xd7\x1c\xea\x3b\xfd\xb0\x1e\x01\xea\xf9\x59\x98\x7e\x77\xe8\xf1\x53\xd0\xa7\x1f\xa0\x97\x06\x2f\xd4\xf2\xf2\x62\x6f\x8a\x69\xac\x37\x3c\xcf\x1d\x79\xdc\xa6\xdb\x34\x5a\x29\x86\x73\x3a\x16\xd2\x50\x01\x13\x16\x4c\x7c\x29\xbe\x41\xef\x3f\x0b\xbd\x6e\x91\x31\x3e\x26\xd1\x99\x2b\xaf\xc2\xb0\x97\xbb\x46\xb2\x68\x8d\x91\x6f\x7d\xa2\x4e\x8e\x5d\xc9\xe9\xf2\x44\xda\x9d\xd3\x8b\xf2\x00\x7b\x85\xad\x5b\x7b\xbd\xb7\xcc\x50\xba\xb0\xec\x9a\xce\x48\xcf\xcf\x17\x77\xd9\x9f\x8f\x28\xbb\x1c\xdc\xd6\x9f\xda\x49\xfe\x04\x5b\xcf\x3d\x05\x7d\xf1\xd1\xd6\x9f\x17\xe2\x9e\xe8\x85\x13\x97\x2a\xd9\x2a\xda\xbe\x21\x22\x7d\xbb\x1e\xcf\x0d\xae\x7b\x4e\x7f\x2c\xfa\x8a\xce\x59\x43\xb9\xc7\xf2\x9b\xc1\x09\x9e\x85\x5e\xcc\x89\x91\xf1\x13\x2e\xc5\xe2\xbe\x91\xcc\x52\x4a\xa4\xdb\x3a\x4a\xc8\x76\x99\xb4\x78\xad\x4f\xb9\x7a\xd2\x04\x98\x0b\x3d\x58\x98\xe7\xe1\x9e\xdb\x99\xd0\x9f\x8a\xe9\x86\x70\x34\xdb\x1b\xb4\x53\x89\x18\x75\xc1\x46\xae\x4f\xeb\x4b\xbf\x36\xb6\x53\x4a\x73\x9f\x60\x70\xf8\xa7\xa0\xaf\x3f\x1a\x9c\xa3\xdf\x32\x1e\x22\xd0\x5e\xfa\xc7\x75\xc1\x24\x88\x76\x49\x75\xb7\x3c\xf9\xa2\xd6\x81\x2e\x51\x78\xcf\xdd\x53\x51\x91\x00\xfb\x06\xfd\xe1\x59\xe8\xcd\x43\xc1\x66\xdd\xe0\x55\xf4\x32\xdc\x82\xb5\x36\x82\x48\x89\x15\x46\x9f\x91\xb5\x5c\x72\xb4\x74\x3c\x62\x75\xf9\x58\x5c\xb9\xa3\x38\x81\x6d\xc8\x70\x21\x3c\x31\x7e\x4f\x39\x62\x1d\x4c\x8c\x6a\x77\x9d\xe0\x2f\xb5\x30\x97\xfb\xf1\xb4\xc1\x82\xa5\xb4\x61\xff\x09\xb7\x59\x9a\x7a\x0a\xfb\xf6\xa3\xc5\x39\xd3\xde\xf9\xa2\xae\xcb\x59\x2f\x4f\x4d\x96\x9d\x1e\x0b\xc9\xbf\xa7\xd1\x3e\x75\x57\xfb\xbd\xef\xb5\xa3\xd1\xd1\x4b\x11\xf5\x43\xf5\x86\xfd\xc7\xc7\x62\x7f\x35\xf6\x78\xb3\x24\xcc\x71\x85\xc4\x9a\xb3\xa8\x3b\xbb\x3e\x08\x94\xc1\x75\x52\x5f\x39\xad\x78\xf4\xb9\x6d\x71\x5f\x76\xa8\x74\xae\x77\x46\xc4\xf9\xd2\xbe\x62\x6a\x0d\xdc\x73\x80\x2f\x32\x6f\x5f\x12\x4d\xb3\x7d\xb4\x0c\x0f\xad\xe1\xaa\xc5\x39\xb9\xf3\x45\x56\x08\xaa\xf4\xfb\x1b\x7b\x9a\x7e\x0a\xfb\xfe\x03\xf6\xf2\xad\x9f\x0e\xcd\x6d\x5f\xb2\x66\x6e\xa5\x07\xca\x91\xe2\x69\xd8\x3e\xaa\xc3\x50\xf6\xa2\x6b\xe4\xcb\xfe\xb0\x94\xd7\x91\xd6\xc1\xaf\x09\x97\x57\xec\xa3\x67\xb1\x1f\xbc\x23\x06\x7e\x79\x64\x94\xf4\x7a\x37\xf5\xe3\xe5\x6a\x91\xb3\xe5\xc2\x43\x63\x5c\xc6\x34\x70\xfd\xbd\xa3\xc6\x70\xa3\x57\xa3\xe4\x07\x47\x6b\x49\xc9\x42\x01\x06\x65\x9d\x1e\x6f\x5e\xe6\x1f\x57\xab\x87\xdb\xbb\x10\x77\x1e\x27\x87\x8c\x61\xa2\x73\xc3\x29\xc2\xef\x2f\xaa\xe8\xe7\x04\xef\xf4\xd1\xe6\xf8\x46\xbe\xba\x1b\x02\x8f\xaa\xc4\x11\x2f\xac\xd6\x31\x64\x50\x07\x4e\x5d\x46\x65\x0c\xe3\x2a\xd9\xf0\x52\x3a\xaf\xd3\xf9\xda\xbc\x39\x39\xf1\xb3\xd8\xb3\x94\x08\xb4\x43\xe7\x98\x93\xad\xec\x47\x66\x93\x9f\xf9\x9a\xe4\xe3\x6d\x45\x6e\xe9\x1e\x38\xe2\x32\x94\xc5\x1e\xaf\x57\x65\xb5\xae\x49\x56\xeb\x8f\x20\xba\xea\x83\x9a\xce\xf5\x48\xdf\x33\x83\x3e\x46\x8a\x26\xec\x55\x3d\x21\x30\x65\xf8\x6c\xb0\xb4\xd9\xfb\x84\x3b\x2d\xfd\x9c\xa2\xa5\xbe\xc3\x7e\xc1\x43\x1b\x6a\x43\x91\x2e\xa1\xbe\x01\x97\xdb\x12\x34\xd3\xb5\x52\x4a\xb2\xb2\x09\x9d\x6c\x19\x53\x59\xc6\x47\xb3\xd6\xc9\x1b\xf6\xc9\xb3\xd8\xd7\xe9\x65\x1d\x5c\x0a\x8a\x78\xbc\x96\x85\x3a\x11\x93\x03\x3f\x5b\x48\x96\x56\x6b\x2b\x3a\x68\x87\x30\xbf\xab\x71\x95\x09\xf1\xa1\x38\xfb\x9e\xb9\x53\x72\x7c\x60\x89\x1d\x9d\xbc\xc3\x75\x1f\x30\xd5\x8d\x72\xd7\x0f\x66\xda\x68\xcb\x84\x17\x27\x46\x60\xea\x2e\xf9\x0c\x7b\xff\x9c\xa4\x45\x1f\xed\xfd\xb2\xb9\xd3\x25\x3d\xcd\xc6\x2e\x79\x90\x79\xbd\xa8\x76\xe7\x3c\x34\x7d\x93\x13\x2a\x71\x18\xee\x74\x13\x5d\x62\xde\x53\x60\x28\xbc\x61\xff\xb1\x39\xe3\xaf\xd7\x55\xfb\xeb\x0d\x8f\x1a\x7a\xd0\xc0\x01\xbb\x8c\xb1\x8d\x0a\xa8\x08\x4d\x6a\xd6\xec\xf1\xe9\xd0\x94\x8f\x8d\x9a\x52\x20\x1c\xc9\x45\x58\x5f\x99\x74\xb5\xd8\xb1\x7b\x41\x00\x40\xd8\x1e\x20\xab\x98\x5b\x0f\x86\x2b\x47\xd7\x53\xc6\x3d\xc5\x63\x77\x3e\xb6\x76\xf3\x19\xf6\xfe\x39\x4d\xcb\x7d\xc0\x5e\x84\xb1\x48\x77\xf4\x85\x6c\x74\x7d\x17\x75\x2c\x4a\xea\x2a\xb5\x38\xc7\x8d\x6e\xf9\xb0\xd8\x9c\x0d\x5a\x36\x96\xc2\x62\x25\xec\xb8\xb7\x7b\x6d\xf6\x2c\xf6\xd7\x5d\x7d\x71\xbb\x29\x50\x84\x11\x6d\xb6\xd3\x66\x2b\x07\x27\xd4\x33\x57\xda\xce\x17\x34\x64\x1b\x31\x84\x4b\xc5\x84\x2a\x50\x1a\x3a\xf0\x24\x51\x99\xd5\x29\x4c\xcc\x5e\x63\x2e\xd6\x45\xe1\x43\x26\xd1\x46\x97\x8e\xbd\x8d\xd6\x01\xd9\x15\xfa\x6b\x1a\x53\xd2\xef\xef\x62\xd2\x4f\x89\xda\xd7\x50\xe4\xdf\x60\x7f\x0c\x04\xd1\x0d\x95\x44\x14\x05\xee\x7e\x39\xb6\xdc\x72\xda\x1f\xd6\xa7\x93\x43\xaa\xe9\xa2\x97\xd6\xf6\x20\xcd\x25\x5c\x72\x47\xe6\x8d\xf7\xe4\x59\xec\x65\xfa\xc6\xf5\x69\xab\x2c\x1b\xc1\xa6\x1e\x96\xe4\x34\x6c\x2a\x2d\xab\xa6\x0f\xb7\x83\x40\x15\x8c\xc1\xca\x1b\x76\xb9\xaf\x29\xc8\x3a\x1d\xc3\x07\x83\x76\x4e\xe0\x0d\x9c\x76\x93\x94\xf7\x3a\x4f\xa9\x0b\x3e\xb7\x69\x93\x91\x4b\xe4\x5a\xcd\x66\x03\xae\x1c\xff\x19\xf6\xfe\x29\x55\x2b\x2a\x1f\xb0\x97\x57\x13\x4e\xcf\x1c\x39\x47\xd3\x6e\x71\x3b\xe6\x69\xc8\xb3\x5d\x46\xa8\x3a\xe5\x0f\x0f\xbc\xc9\xa0\x32\xa8\xaa\xa7\x1f\x2e\x92\xf2\xc6\xfb\xfc\x59\xec\x8d\x51\xdc\x1f\x8f\xa1\x2f\x4e\x84\xee\xce\x87\x29\xb2\xd7\x8a\xa4\x2b\xf4\xf1\x26\x47\x85\xb1\x4a\x6f\x37\x44\x27\x9c\x07\x5d\x10\x16\x2a\xd5\x2b\xcb\xf5\xe5\x0e\x35\xca\xa5\x55\xb4\xa6\x6c\xbe\xd4\x13\x63\x43\x0a\x96\xd9\xe1\x74\xd4\xee\x5e\x9c\xa4\x4c\xf7\x19\xf6\xfe\x29\x59\x2b\x1a\x1f\xed\xfd\xb9\x27\x26\xeb\x58\x8a\x33\xcc\x6e\xb5\xc7\xbc\x8f\x4e\x27\xee\x76\x5d\x9e\x8a\x52\x92\x36\x9c\x92\x03\x18\x05\x73\xe9\xed\xf8\xb7\x88\xc2\xc7\xa6\x0f\xbf\x3e\x84\xf9\x58\xd7\xb3\x28\xcf\xba\x41\x82\xb6\xae\xcd\xbe\xdb\x5e\xae\xf7\x7d\x23\x4e\xf5\x6d\x87\xb1\x39\xea\x97\xab\xd6\x2d\x9a\xeb\x3a\x6f\xcc\x43\xb3\x77\x54\x3f\xbf\x2e\xe0\x41\x5b\x58\xd0\xd4\x75\xf9\x54\x36\x6e\x70\x5e\x0f\x73\xd3\x71\xb2\x7e\x83\x27\x2f\x5a\x7f\x86\xbd\x7f\x4a\xd7\x8a\x1f\x23\xf7\xe2\xe5\x48\x1b\xd5\x43\xc7\x71\x62\xfb\xa3\xc7\x2c\x69\x63\x57\xf1\x2c\xa9\xc7\x23\xd7\x9f\x57\xce\x42\x6f\x65\x56\x66\xf6\x87\xfb\xf9\x0d\xfb\xf2\x59\xec\xb5\xf0\xe0\xae\x56\xa6\xed\xa8\x86\xd2\x45\x62\x39\xd7\x94\x58\x3a\xd1\x5a\xf7\x0d\xd7\xa5\xec\x95\xaa\x42\x46\xd9\xec\xe7\xc5\x72\x58\x1e\x82\x6b\x06\x16\xc5\xb6\x3f\x3f\xc4\x0d\xdf\xeb\x2e\xef\xd9\x57\xe9\xd6\x66\x42\x67\x8f\x8a\x0f\xdc\x9b\xe6\x4d\x69\x18\x88\xbf\x3f\xef\xc1\x53\xba\x56\xfc\x18\xba\x97\x99\xc5\x51\x9a\x86\xa9\xdb\xf6\x67\x9f\xf2\xf2\x93\x70\xcd\x4a\x65\xee\x12\x4b\xce\xee\x97\x05\x5b\xd0\xce\xc3\xe7\xd9\x55\xbd\xc0\x6f\xf6\xbe\x7a\x16\xfb\xb2\x5d\x87\xe3\x46\xf5\x6f\xa7\x47\x8d\x65\x09\x12\x5e\x74\x06\x0b\xf2\x97\xf3\xb1\xf7\xd3\x72\xe6\x50\xe1\xcd\xe1\x75\x0c\xf8\x24\x57\x24\xd0\x9c\x0c\xc4\x95\x6b\xa5\x33\xdc\x80\x3a\xf1\xe7\x20\x55\xfd\xc1\x02\x2e\xa6\xa0\x93\x14\xe4\x54\x2f\xa5\x78\x96\x7f\x7f\xde\x83\xa7\x74\xad\xf8\x31\x76\x2f\x04\xc7\x1b\x8a\xfd\xeb\x23\xb6\xd7\xa7\x22\xf6\x3b\xb0\xe8\xfb\xbe\xdb\x55\x85\x64\x4c\xc7\x3a\x12\x11\xeb\x0c\x87\x05\xbb\xa5\xa7\x37\xde\x1f\x9f\xc5\x7e\x18\x01\x48\x48\x36\xf7\xe6\x9c\xe6\xdc\x64\x58\xed\x59\xdb\x33\xea\xed\xbe\x0a\x1c\xc8\x04\x14\xcc\xfc\xc2\x47\x7a\x76\x6f\x0a\x46\xb9\x2a\xcc\xa8\x1e\xbc\x6a\x1b\x58\x9a\x6f\x0b\x61\x65\x9d\xd4\x4b\x3a\xeb\x89\xb6\x37\x86\x0e\x19\x14\x75\x63\x96\xf3\xf9\x13\x6c\x0e\x78\x4a\xd7\x8a\x1f\x83\xf7\x72\xb1\xdd\xda\xbc\xcf\x2d\x36\xf8\xc4\x99\x97\xbb\xa4\x18\xfe\x62\x38\x0b\x53\x3a\x39\xd6\x74\x08\x4e\xba\x74\x5e\x38\x95\x8d\x97\xb7\x37\xde\x7f\x2c\xd9\xfb\xab\xb1\x0f\xc5\xf0\x71\x41\x48\xc9\x3a\x60\xe8\xb7\xf6\xc6\x06\x07\x7d\xb2\x5a\x4e\xd2\xe6\x20\x65\x6b\xe2\x38\x67\x70\x94\xa6\x98\xf4\x20\x9b\xc0\xc4\x29\x39\x77\x07\x0f\x52\x24\x61\xf9\xb8\x2b\x4b\xd7\x7d\x6c\xdb\x20\xb2\x9a\x83\x1e\x1a\x8b\x41\x66\x07\xb8\x59\x7f\x42\xa2\x16\x3c\xa5\x6b\xc5\x8f\xd1\x7b\x01\x2d\xe4\x5a\xaa\x0c\x7f\x27\xc1\x34\x4c\xdc\x10\x9d\x6e\x85\x99\x36\x17\x81\x24\xfd\xc4\xa9\xd2\x7a\xa6\xcc\x4a\xf3\xb6\xaa\xf9\x86\x7d\xf3\x2c\xf6\xd2\x39\x5d\x0b\x8f\x36\x6d\x99\xad\x9d\x04\x01\x3e\xb9\x05\x60\xc9\x2d\x46\xdc\x42\x55\x01\x2a\x8c\x7d\x2c\xaf\x36\x50\x3d\x26\xdb\x4d\xb9\x31\x70\x56\x88\xad\x5d\xed\x79\xfa\x56\x49\xd7\xa3\x59\x08\xad\x30\xdf\xd6\xae\x27\xa5\x54\x69\xbb\xdb\x21\x13\x3a\x49\xfe\x04\xec\x9f\xd2\xb5\xe2\xc7\xf0\xbd\x4c\x94\xc7\xe5\x71\x31\x4d\x41\x54\xd7\x29\x7f\xcb\xee\xd4\xe1\xb2\x28\x7d\x7a\x94\x4d\x4d\x3b\xf3\xfa\x71\xf1\x60\x42\x8f\xa5\x71\x2d\x7c\xc3\xfe\xf4\x2c\xf6\x33\xe9\xf6\x9b\x48\xbb\x45\x61\x31\x10\x56\x8d\x37\x0f\x01\xc3\x1b\xbe\xa0\x68\xb7\x68\xf3\x92\x58\xc7\x55\xab\xdc\xd2\xa4\x43\x86\x45\xef\xb9\x23\xc7\x6d\xc5\x53\xd6\xdc\x95\x1d\x80\xfd\xb4\xcd\x5c\x20\x6b\x8d\x98\x9f\xb6\x0f\x4d\x68\x25\xd7\xe8\x71\xac\x7d\x06\xef\x9f\xd2\xb5\xe2\x77\xf1\x7b\xb3\x01\x9b\xa3\x88\xd6\xee\x82\x19\x98\xca\x5c\xf7\xd2\x52\xdb\x2f\x62\xc6\x21\xb2\x3a\x7a\xec\xc9\xcd\x8f\xe7\x9d\x3f\xae\x1c\xe5\xcd\xde\x9f\x9f\xc5\xbe\xc4\x07\x15\xe2\xc3\x3d\x38\xa4\xb4\xb9\x7b\x98\x33\x5c\x78\x50\x03\x9d\xbf\xdd\xc3\xb9\x92\x17\x14\xdc\x1c\x8f\x22\xb8\xcf\xd3\x7a\x5b\xf8\x7a\x58\x8b\x66\x58\x3f\xa2\x4a\x74\x68\x93\xac\xf0\xb5\xbc\xe9\x69\xb6\x7c\xb0\x42\x2a\x2c\x10\x4c\x46\xb8\x4a\xb4\x4f\xf0\xef\xc1\x73\xba\xf6\x63\xfc\x5e\x60\x7a\xed\x32\xb3\x8f\xc7\x26\xab\xa5\x0d\xd7\x47\x17\x1d\xcd\x70\x27\xe4\x02\x7f\x28\x6e\x08\x30\xd4\x42\x5c\x09\x0d\x98\xbc\xf3\x9b\xcd\x69\x9f\xb6\x39\xdc\xf9\xa2\x5b\xdd\x5e\xdc\x1f\xeb\x42\x61\xb1\xe8\xe4\x11\x5f\x14\xab\x74\x68\x78\xe3\x02\x61\x70\x01\x8d\x21\xed\x47\x3d\xbd\x48\xa9\x2f\x8d\x76\x1f\xd9\xf6\x3a\x1a\x0f\xd2\x8a\xcb\xcc\xdc\x7f\x34\xee\x06\x5d\xc1\xd5\x5d\x96\x7d\xe3\x44\xd9\x22\x13\xa9\xcf\xb8\xd7\x3e\xa7\x6b\x3f\xc6\xef\x45\x79\x45\xd5\x65\xea\x48\x8f\x00\xa1\x6d\x5b\xb9\xce\xfd\x31\xc5\x41\x6e\x70\x9b\xad\xaa\x5d\x4b\xe5\x92\x1c\x97\x92\xd8\x34\x2d\x7c\xb3\x39\x97\x67\xb1\xa7\x67\x58\x56\x5e\x14\x06\x32\xdf\x24\x7a\xb4\x73\x39\x81\x6a\x18\xad\xa6\x4f\x46\x5c\x81\xc0\x99\x0e\xec\x62\x45\x49\x72\xb3\xa3\xc8\xad\xcd\x99\x29\x76\x8b\x82\x07\xba\x72\x0b\x06\xb9\x32\x78\x0c\x21\x58\xf8\xd0\x2f\x05\xf3\x18\x9e\x86\xf2\xfc\x38\xe3\xcf\xf0\x31\x9f\xd3\xb5\x1f\xe3\xf7\x52\x4a\x6d\x85\xa1\xc8\xf0\x28\x14\x59\xf1\x30\xd5\x6a\x15\x72\xb7\x56\x04\x35\x1b\xa2\x70\xa5\x14\x20\xe4\xa7\xdd\x22\xd4\xf2\xd3\x9b\xcd\xb9\x3e\x6d\x73\xfc\x1a\x42\x51\x33\x19\xf1\xd1\x5f\xe2\xf1\xf4\xd0\x15\x87\x5f\x62\xe1\xc2\x47\xf7\x6d\x92\xad\x29\x61\x49\xb4\x58\xec\x57\x1b\x24\x66\xc6\xa8\xef\xb6\x97\xa3\xb8\xf0\x9b\xdb\x6a\x7d\x5e\x1b\x85\x66\xde\xe9\xfb\x51\x46\xd6\x92\xbe\x5d\xb7\xfb\x85\x21\x09\x42\xf2\x19\xd8\x3f\xa7\x6b\xbf\x8b\xdf\x4f\xa9\x7d\x0f\x4f\xa5\x7d\x5e\x71\xf7\xdb\x2e\x1f\x1a\x6d\xbb\x5f\xd0\x7e\x79\x37\x45\xb3\x3e\x24\x67\x9e\x19\x0e\xf5\x35\xe4\x72\xe3\x0d\xfb\xee\x59\xec\x95\xd9\x6d\x55\x75\xc5\x67\xc2\x31\x99\x41\xb2\x69\x6f\xcd\x22\x5c\x57\xe6\x81\xd6\x7c\x85\x7d\x64\x52\x62\xe9\xbd\xd9\xf3\x69\x61\x15\x35\x59\x54\xbb\xfd\xe2\x9c\x83\xd9\x4d\xb6\xd2\xad\xca\x76\x97\xd3\x7d\x11\x71\x33\xb7\xb9\xe5\x78\x53\xc9\xee\x0a\x1f\x0f\xdd\x27\xa4\xca\xe1\x73\xba\xf6\xbb\xf8\xbd\x67\x31\xf9\xf6\x14\x2d\xc3\x51\xac\xb2\x6b\x21\xd1\xb9\x42\xd7\xa3\xc7\xb8\xfc\x76\x2e\x75\x18\x89\x37\xfa\x3c\x14\x7c\x7f\x4b\xdf\xec\xfd\xc7\x62\xf1\xbf\xde\xe6\x3c\x96\xfb\x41\x8d\xea\xdb\x39\xd2\x79\x03\x2e\x44\x27\xb1\xb7\xa4\x64\xa2\x20\xb8\x3c\xf8\xb1\xe8\x5b\x25\xa5\xad\x8d\x01\xea\x76\x97\x96\xbc\x7a\x48\x9b\xad\x72\x3b\x9a\x02\xde\x25\x7a\x05\x32\x52\x0a\xd2\x15\x3e\xc8\xbc\x95\xee\x64\xd0\x08\x72\x61\xfb\x09\x31\x64\xf8\x9c\xae\xfd\x2e\x7e\x3f\x55\x97\x20\xde\xae\x17\x6d\xe5\xf7\x3e\x88\xc3\xf5\x3c\x5b\xb9\x84\x0e\x07\x75\xb9\x3c\x24\xd3\x35\xae\x6a\xa5\x9f\xc5\x10\x74\x6f\xf6\x7e\x78\x16\xfb\x22\x11\xe4\x33\x2d\xcb\x75\x6c\x67\xfd\xca\x3d\x2c\xe8\x71\xb1\xc9\xeb\xb0\xb6\xed\x1d\x70\x6f\x6a\x7e\x70\xc5\xeb\x2c\xd4\x8e\x91\x93\xa3\xb2\x8c\x1a\xcf\x78\xd4\x91\xb9\x96\xfc\x72\xa3\xf1\xfb\xbd\x7f\xd7\xc7\xcd\xf1\xe8\x02\x86\x33\x39\x8d\xae\x96\x43\x78\xf8\x04\x9b\x03\x9f\xd2\xb5\x92\xf0\x11\xfb\x01\xea\xea\xc0\xed\x37\x07\xf6\x6e\xb6\x42\xa4\x71\xb7\xd3\x83\x2d\xfd\xfb\x7c\x9c\xcf\x92\x73\x38\x39\x37\xca\xd1\xd7\x27\x73\xf4\xde\x78\x3f\x3e\x8b\xfd\x89\xd0\x51\x90\x30\x51\xd5\x6f\xec\x56\xe4\xef\x0e\xb9\x52\xeb\x18\x2c\x8e\x82\xe5\x45\x03\xd1\xaa\xc0\x64\xa4\xad\x02\xed\xe5\x66\x46\xd6\xea\xc2\x5e\x51\xb4\x6c\x57\xe7\x53\x98\x4f\xfb\xf4\x74\xb6\x80\x63\x86\x95\x4f\x79\x65\x7e\x2a\xf8\x95\xea\x96\xf6\x43\xfe\x04\xde\x3f\xa5\x6b\xa5\x8f\xf1\x7b\x89\x41\x53\x22\x5c\x3c\x33\xdf\x50\x46\xed\x0e\xf7\x74\xcc\xb5\xb2\x76\xbd\xec\x70\xa6\x2f\xd5\xed\xc6\x5e\x06\xee\x6e\x3a\x5b\x89\xbc\xf1\xfe\xf6\x2c\xf6\xbe\xbf\xb1\x11\x4e\xfc\xe0\x72\xdb\x88\x6c\x6f\xc2\xa8\x6a\xc7\x24\xe1\x7a\x79\x3e\x0c\xe6\xea\x54\x3b\x19\xa4\x88\xa6\x9d\xcc\x1d\x3a\x3f\xc4\xdb\xf5\xa8\x92\x84\xd4\xd3\x36\x3d\x06\x51\xc2\xf5\x67\xa8\x57\xd7\xac\x5d\xed\x46\x74\x76\x79\x84\x73\x13\x12\xf1\x13\x78\xff\x94\xae\x95\x3e\xc6\xef\xe5\x35\x45\xd5\x27\xd4\x55\x8c\x56\x6b\x2d\xe5\xb5\x96\xbc\x80\xc2\x1a\x3c\x8c\x87\x98\x73\x0a\xd8\x58\x5d\xbc\xdd\xcb\xd1\x34\xd6\x6f\xf7\xda\x8f\xbd\x19\x7f\x35\xf6\x9d\xc3\x3e\x62\xcc\x8d\xc3\xf1\x7a\x5b\x91\x32\xdb\x9e\xf4\x44\x4c\x5a\x77\xb7\x92\xd4\x95\x75\x38\xa7\x73\x3b\x29\x5d\xea\x34\x8a\xa6\x2c\x1e\x9c\x44\x94\x3b\x59\xea\x73\xbb\x49\x6b\x23\xc9\xc3\x15\xaf\x76\x68\xb8\x56\xf4\xc5\x94\x1e\x7b\x67\x37\x6f\x93\x87\xf8\x09\xda\x0a\x3e\xa5\x6b\xa5\xef\xe2\xf7\xf6\x10\xb9\xb0\xc5\xfd\xa3\x34\x5d\x1e\xcf\x8e\x3b\x03\xcd\xbf\x47\xe5\x63\x05\x3d\xb6\x1c\xc5\x0b\x2d\x6d\xca\x5a\xe6\x9d\xee\x0d\xfb\xf9\x59\xec\x95\xb8\x7a\x44\x61\xcb\xdb\x8a\xde\x94\x98\x5e\xb0\xeb\xf9\xbc\xee\xb9\x1b\x59\x87\x4b\x3a\x09\x96\xfe\x7a\x99\x8e\xf4\xd2\x53\x71\x73\x3e\x14\x99\xe5\x69\xcc\x8e\x1b\x4b\x76\x3f\x90\xf2\xb4\x60\x0f\x22\x74\xdb\x00\x26\xe6\x64\xe4\x76\xb7\x60\x2d\xc4\x03\x51\xfe\x04\xec\x9f\xd2\xb5\xd2\xc7\xf8\xbd\x04\x8f\xee\xfd\xb4\xbc\xb4\x06\x88\x9a\xec\x1e\x6c\x9d\xf8\x1c\xc8\x0f\x5e\xdc\xdc\xd8\x7e\xf7\xd8\xf6\xf8\x22\xaa\x2c\xb7\x3b\x8f\xa7\xb7\x9c\xe1\xfd\x59\xec\xb3\xe3\x9a\x4c\xa7\xdd\x58\x6b\x52\x83\xad\xce\x9a\xf9\xa6\x12\x44\xb3\xd9\x8f\x94\xb8\xd4\xe9\x00\x8f\xe7\x19\x1a\x37\x1f\x50\xbb\x51\x14\x8d\x8e\xcb\xd9\x93\x69\x08\xf3\x6e\x56\xf4\xa2\xf2\x38\x79\x57\xdf\x35\xa7\x21\xf3\x51\xcf\xd4\xb8\xb6\xf5\x44\x69\x3f\x21\x77\x02\x9f\xd2\xb5\xd2\xc7\xf8\xbd\xb4\x61\xb2\xc5\xa3\x51\x5b\x73\xd1\xac\xfa\x59\x76\x77\x0e\x10\x10\xe9\xda\x36\xa8\x83\xb8\x3b\x2f\x95\x85\xa6\x76\x8b\xb6\x1a\xd7\x6f\xd8\x3f\x9e\xc5\x3e\xed\xa3\x4d\x73\xbc\x78\x27\x5b\x58\x05\xbc\x47\xef\x16\xbb\x10\xc9\x09\xdf\x86\xb5\xbd\xc3\xfe\x41\x89\xc0\x51\x5a\x2e\x7a\x3f\xc6\xd5\x78\xb2\x50\xb4\x7d\xd8\xcc\x72\xd1\x5e\xd2\x2d\x57\xce\x05\xb3\x65\x8a\xfe\x7e\xda\xa3\x0e\xad\xd5\x8a\x8e\x47\xa2\x9f\x84\xcf\xb8\xd7\x3e\xa5\x6b\xa5\x8f\xf1\x7b\x89\xa7\xd0\x9c\xcd\x8d\xb4\x8c\x38\x63\x96\xb2\xfd\xec\x72\xad\x72\x1e\x32\xc3\x8f\x46\x41\x5f\x0a\x5e\xaa\x3d\x06\xf6\xf6\x18\xbf\xd6\x41\x7f\xc5\xfe\xe3\xe3\xbd\xbf\x1a\xfb\x9d\xb9\x38\x1f\xf9\xc5\x99\x1f\x77\xb2\x7f\xbd\xd9\x5b\xb0\xab\xa7\xfd\xc5\xb8\xcc\xdd\x70\x99\x77\x54\xdd\xa4\x07\x0e\x85\xa7\xdd\xe6\x11\xc0\xdd\x63\xf7\x20\x38\xd2\x47\x76\x92\xe9\x73\xbe\x90\xe8\x9d\x79\xb4\xf5\xd5\x54\x94\xe9\xb6\x01\x9b\xe5\xdd\x3d\x9e\x1f\xc6\x67\x60\xff\x94\xae\x95\xbe\x8b\xdf\x93\x35\x77\xd3\x8d\xe5\x74\xc4\x57\xaf\x38\xd5\x7a\x21\xa7\x4b\x05\x5d\x67\xc5\x6d\x9c\x7b\xbe\x29\xb4\x42\x22\xf2\x7c\x42\x0e\xf5\x86\x3d\xfd\x2c\xf6\x09\x1f\x96\xbb\xfd\x8d\x3d\x38\xda\x81\xb3\x12\x84\x17\x45\xb4\x3b\x2c\xf7\x9d\xe6\x74\x96\x14\x4e\x1e\x57\x2b\xab\x79\x50\x9d\x76\xa9\x88\x37\x41\x71\x40\xb0\x4b\xe4\xdd\x66\x7d\xbd\xcf\xb0\x57\x87\x78\x8d\x15\xf6\x5a\xa7\x14\x23\xd6\xab\x6b\xf0\xd8\xb1\xb5\xf3\x09\xba\x16\x3d\xa5\x6b\xa5\xef\xe2\xf7\x8b\x75\x5a\xa2\xb0\x0e\x86\x83\xaf\xfa\x1e\xd6\x4e\x7d\xd9\x28\xf9\x74\xf1\xdb\xe3\xad\x3a\xf0\x96\x04\xf1\xa2\x6f\x50\x7a\x3e\xbf\xd9\x1c\xf0\x2c\xf6\xb6\x27\x5f\x30\x31\xba\x75\x46\x4f\x87\xbb\xe7\x8a\x49\xc6\x66\xfb\x83\x31\x52\x66\x79\xc4\x41\x7a\xef\x03\x52\x34\x66\x08\xb0\x7c\x3c\x4f\xf9\xa6\x1b\x7c\x7f\x93\x76\x59\x3b\xeb\x98\x8e\xa2\xc3\x78\xf4\x96\x1b\x0f\x86\x67\x47\xf7\x5a\xfd\xe1\xdd\xc2\x3a\xfb\x84\xdc\x09\x7a\x4a\xd7\x4a\xdf\xc5\xef\x5b\xb8\x2a\x7b\x2c\xdc\x06\x75\x5c\x5d\xad\xa2\xca\xa1\x74\xf4\xd3\xaa\xd3\x6e\xca\x85\xa8\xab\xd9\x68\x4e\xec\x5d\x93\x72\xff\x9d\xb6\x82\xcf\x62\xcf\x79\x19\xee\xd6\xda\x42\xe2\x8a\x65\xb9\x60\x2f\xb7\xb5\x15\xaf\x57\x77\x33\xa4\x38\xd8\xfb\xcb\xe1\x2e\x9e\x15\x9a\x3a\x67\xe1\xbd\x6a\xfc\x26\x4b\x92\xb1\x3a\xb9\x33\x6d\x66\x89\xa8\x59\xdc\xbd\x5b\x3e\xca\x35\xc7\x9e\x1c\x69\x7b\x5b\xd6\x42\x71\x52\x27\xea\x33\x62\xc8\xe8\x39\x5d\xfb\x5d\xfc\xfe\x78\xb0\xb2\x2b\x64\xac\x6c\x6d\x24\x53\x60\x34\x95\x9a\x87\x95\x7d\x99\xb1\xf0\x58\x5f\xcf\x03\x2a\x06\x8d\xba\x69\x41\x2b\x1e\xde\x78\xff\xb1\x91\xf5\xaf\xc6\x3e\xb0\x9d\xa3\x65\x80\x92\x70\x66\x22\x6c\xab\x38\x69\x8d\x36\xf4\xb6\x8b\xcc\xd9\x2d\x2d\x39\xe7\x46\x07\x0a\xd0\xb2\xec\x88\xda\x3b\xc5\x18\x30\xe2\xdd\xe6\x02\xac\x77\xc0\xe4\xf4\xe4\x61\x2e\x1b\x34\xe0\x0a\x33\xea\x4d\x2c\x17\x27\x02\xb6\x64\x33\xb8\x9f\xe0\xdf\xa3\xe7\x74\xed\x77\xf1\xfb\x9a\x36\xd7\x6a\xba\xe1\x5a\x6f\xe5\x5d\x6d\x6f\x97\xdc\x73\x45\xf0\x5a\xce\x68\xda\x44\x91\x0a\x2c\x5d\xf9\x49\x34\xee\xb3\x6b\xbe\xf9\xf7\xcc\xb3\xd8\x87\x3b\x0c\xd6\xfa\xe1\x9e\x42\xf1\x76\x5f\x87\x14\x6b\x55\x21\xee\x84\xed\xe0\x33\x7b\x10\x55\x8f\xae\xd9\xac\x6d\xb9\xe2\x23\xfd\x8c\x16\xbd\xd2\x36\x5e\x43\xf8\x51\x54\x58\x77\x6b\xf7\x02\xb2\xcd\x9d\xe9\xad\x67\x9d\xae\xd6\x3b\x5d\xb1\x39\x2e\x2b\x8e\xf3\x27\xdc\x6b\xd1\x73\xba\xf6\xbb\xf8\xfd\x78\x14\x5d\xea\xa2\x5b\x32\xdf\x68\x2e\xcd\x1e\xa7\x18\xc7\x97\x43\x69\xab\xde\xe1\x02\xc1\x79\x82\xb7\x22\xbb\x12\xdc\xec\xde\x3d\x64\xc8\x3e\x8d\xfd\x70\xc4\xa5\xc0\x6d\xc6\xa8\xda\xf8\x6d\x73\x89\xcf\x15\xe9\xa5\x7a\x65\x77\x83\xad\x4d\x56\xc6\xa8\x66\x30\xcb\xe4\x8c\x96\xa0\x28\x2e\x07\x2b\xbf\x97\xcb\x29\xb3\xbb\xe0\x5c\x22\x12\x33\xd7\x6c\x2d\xcc\x0f\x3f\xa2\x8e\x76\xc2\xf4\x81\xe3\x2e\x57\x6d\xf3\x09\xfe\x3d\x7a\x4e\xd7\x7e\x8c\xdf\x4b\x4e\x68\xa4\x24\x95\xdb\x96\x01\x05\x3f\xaf\x17\xe7\x8b\xae\x69\x5e\xac\xba\xda\x3e\x3c\xf8\xfb\x65\x5c\xae\xf6\x94\xe6\x58\x47\xfa\x0d\x7b\xfc\x34\xf6\xbc\x3b\x7a\xb7\xfc\x24\x8c\x42\x7e\x86\x10\x33\x96\xe1\x70\x5d\x59\x16\x0f\x8f\x86\xa3\x20\x03\x69\xcf\xae\x73\xdf\xc4\x8b\x61\xa7\xc3\x39\xb9\x59\xa7\xe5\x20\x95\xe3\xbc\x08\xaf\xf1\x28\x5c\x64\x27\x62\xbd\xc7\x6d\xb9\x5a\xcf\xcb\x68\x4d\x67\xc8\x7b\xf8\x9f\x81\xfd\x73\xba\xf6\x63\xfc\x5e\x90\x44\xab\xe0\xfa\x10\xaf\x09\x23\x09\x4c\x6e\x47\x99\x78\xea\x6f\x46\x64\x09\x61\xb1\x09\x51\xda\xa8\xc2\xe9\xe2\xf2\xbd\xf4\xee\xb9\x66\xee\x59\xec\x77\x61\x5e\xc6\xfd\xe2\x61\xed\xe1\x76\xba\x2a\xae\xb5\xa1\xab\x31\x94\xb6\x99\xde\x83\xf3\xe2\xb8\x29\xf3\x68\xbb\xab\x4e\xfb\x69\xf3\xa0\xf4\xf5\x18\xb3\x59\x97\x49\xbd\x1c\xf4\xd7\xc7\x5a\x3d\x9f\x47\x3a\x81\xb7\x76\xd3\x14\xf7\xe0\x60\x75\xde\x39\x19\xf8\x9d\xf0\x19\x7e\xce\x73\xba\xf6\x63\xfc\x5e\xde\xbb\x87\x6e\xbf\x3c\x15\x4e\x12\xd8\xa7\x65\x51\x76\x5c\xb6\x13\xc2\x75\xdd\x89\x1b\xb9\x3c\x9d\xf6\x44\x83\xe3\x71\xac\xe5\xdb\xd7\xe7\x3a\x5f\xb1\xe7\x9f\xc5\xbe\x8b\x22\xa8\x9d\xd2\x26\x84\x0b\xfe\x28\xae\xd6\xa6\x2b\x79\xe2\x44\xd1\x9b\xb9\x62\xe2\x83\x3e\x1d\x44\x89\x96\x16\xcb\xb1\x39\xec\xf9\xa1\x59\x83\xb0\x1b\x35\x7f\x38\x45\xf0\x41\x35\x69\x5d\x43\xad\xc0\xb6\x52\xa6\x5d\x91\x5e\x2d\x63\x71\xba\x99\x66\x74\xfa\x84\x3d\x22\xe8\x29\x5d\x2b\x0b\x1f\xb1\xbf\xb4\x9b\x24\xed\xf9\x21\x92\x88\x2b\xb5\xb2\x41\x37\xf5\x69\xbf\x89\x2e\x7b\xe1\x46\xc5\xd1\xfe\xba\x9f\xfd\x9e\x94\xad\xb8\x35\xdf\xb0\x5f\x3c\x8b\xfd\x76\xd8\x49\x72\x0e\x56\xdd\xb8\x5a\xb6\xe6\x98\x9f\xc6\xbd\x34\x9d\xca\x97\xaf\x7b\xe3\xad\xdc\x43\xa5\xe0\x1f\xaf\xe7\x4d\x0d\x45\xbe\x2b\x1e\xf5\x5d\x36\x46\x1b\x27\xb7\x39\x2a\x65\x97\x9b\xc4\xb9\x35\x13\xcb\x2f\xae\xa7\x36\xd9\x2a\x77\x59\x98\xb8\xd3\xf9\x33\xfc\x9c\xa7\x74\xad\xfc\x31\x7e\x2f\x32\xbe\x72\x40\xc1\x2a\xf1\x25\xff\x81\x09\x0e\x42\x75\x3e\x3f\x4a\x67\x50\xc1\x31\x67\x66\xfb\x78\x6c\x4a\xa5\xb6\x30\xe2\xdf\xf9\x39\xcb\x67\xb1\x9f\xe8\xd2\x5f\xfa\x1e\x5f\x57\x21\x4b\x6b\xfe\xd6\x14\xb6\x17\xc7\x39\x6f\x63\x52\xdc\xb2\x25\x23\xa9\xc5\x86\xeb\x6b\x2f\x6f\x53\xb3\xab\xea\x91\x4a\x2c\xc7\x3a\x2e\x0c\x41\x1d\xee\x3d\xbd\xa8\x93\x44\xaa\x9b\x1d\x00\x42\x1b\x56\xac\x1a\x48\x17\xf2\xb8\x7d\xc6\xb3\x0f\xcc\x53\xba\x56\xfe\x6e\xff\xbd\xe9\x0e\xf6\xa4\x0e\x2b\xca\x42\x41\xa5\x63\xb3\x59\xce\xf7\x03\x81\x6c\x38\x34\x4b\x7b\x54\xd2\x64\x79\xb9\x29\x9a\xaf\xef\x1f\xdf\x78\xff\x31\x8c\xf9\xeb\xb1\x87\x8b\xc7\x6d\xa6\xa9\x40\xaf\xf6\xad\x7d\x67\x2e\x96\x7b\x40\xc1\x3c\x8a\x40\x6b\xb2\x65\xe4\xa0\x9d\x35\xa7\x5b\x68\x15\x9c\xd1\x9d\x0c\x35\xd6\x8f\xf3\x42\xbb\xdf\x47\xcf\x2b\xaf\x57\x8b\x50\x96\x93\x9c\x6f\xa7\x98\xf2\xaf\x77\xd7\xdf\x93\x80\x9b\xef\x07\xed\x13\x72\x86\xcc\x53\xba\x56\xfe\x18\xbf\x97\x60\xcc\x35\x16\x99\x3a\x63\xca\xe8\xbd\x91\x2f\xa4\x87\xfb\xc8\x3c\x9e\x11\xae\x97\x4b\xa4\x22\x0f\x57\x5b\x33\x96\x20\xcb\x7a\x6f\xd8\x8b\x4f\xdb\x7b\xab\x3a\x51\x71\x80\x7c\x46\x40\xd7\xe8\x38\x5d\xc2\x61\xe1\x97\x57\xf1\x68\xd8\xe2\x2c\x2d\x0d\x8d\x83\xa7\xd5\xb5\x10\xa5\xb5\xab\x5e\xcb\xc8\x1f\x2a\xb3\xde\xae\xca\xe6\x7e\xe0\x46\x09\x4c\x07\x67\x77\xa3\x93\xc5\xdc\x8c\xf7\xe5\x48\xee\xa6\x73\x29\x02\xea\x13\x0a\x59\x30\x4f\xe9\x5a\xf9\xbb\xfd\xf7\x1b\xb4\x77\xbb\x78\x7b\xa5\xc2\xe4\x2e\xf6\x8f\xe5\x7e\xd6\xe7\x56\x50\x8f\xdc\x52\x43\x98\x3e\x6f\xe3\x07\x48\x94\x38\x1d\x82\xf2\x0d\x7b\xe9\x59\xec\x9b\xa3\x0d\x86\xd4\xb6\xe6\xe8\x4e\x79\x73\xce\x63\x3f\xe0\x1a\xaf\x2d\xc8\x29\xe1\x91\x42\x4d\x06\x6b\x3d\x82\xf1\x91\x19\xcb\xdd\x68\xab\x67\x0f\x76\x0b\x19\x1c\x98\xf5\x61\xe8\xae\x52\x24\xdb\x57\x80\x29\x1e\x04\x2a\xb8\xf4\x05\x5f\xed\x26\x55\x8b\x17\x9f\x10\x53\x60\x9e\xd2\xb5\xf2\x77\xfb\xef\x6d\x5e\x33\xf3\x0a\x37\x9a\xe0\x08\xf6\x6a\x6c\x26\x5c\x3e\x6a\xa4\xf6\xfd\xb1\x4e\xfd\x44\x0f\xe0\x76\x8f\x74\x59\xef\x8b\xf9\x9b\xbd\xbf\xcb\xcf\x62\x6f\x6b\x4a\xa7\xad\xbb\x87\x1f\xe9\x3b\xc4\x2f\xcf\x90\x36\xc1\xa2\xda\xcb\xf9\x8e\x33\xc4\x49\x9a\xb7\x38\x21\x25\x75\x30\xf8\x8d\x73\xea\x5c\xde\x5c\x65\x69\xe9\x5d\x59\x9a\x33\x64\x76\x38\xca\x8b\x6b\x0f\x5d\x7e\x5a\x4f\xf5\xb6\x6f\xa3\x65\xe9\x77\x51\xb7\xff\x0c\x9b\xf3\x94\xae\x95\x3f\xc6\xef\x45\x4a\xb6\x4f\xd1\xb9\x0c\x62\xa3\x16\xc2\x4a\xcb\xf7\xe6\x64\x76\x67\x43\xda\xc5\x94\x3a\xad\x1d\x3f\x4d\xb7\x92\x6b\x2d\xca\xea\x9d\xcd\x51\x9e\xb6\xf7\x4e\x19\x67\xf4\x3d\x48\x38\xe9\x70\x19\x8b\xd3\x92\x09\xa5\xd2\x87\xf6\xb8\x72\xc4\x20\x55\xf0\x2d\xe4\xd8\xf0\xaa\x53\x25\x2a\x96\xdd\x3d\xe5\xf9\xf0\x18\xde\xc3\x31\x5e\x34\xd0\xd9\x93\xa3\x8a\xb1\x74\xa7\xfb\xc7\x43\x1a\x0c\x66\x33\x15\x64\x9b\x87\x37\xe1\xf7\x8f\x29\x30\x4f\xe9\x5a\xf9\xbb\xf8\x7d\xe8\xa2\xd0\xa3\x74\x02\x0e\xe3\x91\x5a\x71\x57\x8a\xdf\x3f\x8a\x0d\x13\x0d\xee\x92\xd3\x8e\x39\x3d\x59\x99\xdd\x3b\xe5\x35\x7b\xc7\x7b\xf5\x59\xec\xc9\x29\x3d\xd5\xc8\x90\x72\xb4\xc1\xd3\x78\xb6\x3a\x2a\xa6\xa3\xa9\xb9\xd4\xb1\xbe\x5e\x2f\x1a\x62\xd5\x6a\xd0\x68\x0d\x1a\xa2\x24\xb7\x79\xf3\x34\x8e\x68\x1b\xad\x36\x38\x4c\xd5\x2e\xaf\x82\x7b\x52\xf2\xc7\x89\x18\x29\xb0\x44\x21\x30\x59\xcd\x3c\x34\xf2\x27\xe4\x6b\x99\xa7\x74\xad\xfc\x31\x7e\x2f\x88\x8b\x11\x79\xfb\x82\x9e\x20\x73\xd1\x16\x8e\xb4\x9f\xf8\x47\x12\xd1\xb6\x24\x49\xab\x65\x27\x05\xc5\x9d\x96\x8f\xa3\x75\xba\xbc\xed\x01\xbf\x6b\x4f\xf3\x7e\xab\x17\x91\x22\x1e\xab\xbb\x78\xbf\xab\x20\xd4\xf8\x80\xe0\xa3\x55\x03\x2f\xce\x58\xa5\x9f\x56\xfa\xc2\x47\x8b\xfd\xcb\xd9\x16\xd5\x82\x30\x21\x20\xf1\x1d\xed\x35\xc3\xd2\xb7\xf4\x19\x8f\x4c\xe1\xa8\xdc\x10\x9d\x30\xc6\x53\xb2\xe5\x03\x5d\x9d\xe1\x67\x60\xff\x94\xae\x95\x3f\xc6\xef\xc5\x55\xbd\x63\x18\x5f\x6a\x82\x81\xce\xab\x23\x6a\xef\xb8\x6b\xce\xad\xd4\x72\xae\x24\x13\xc5\x16\xa6\x28\x3b\x6c\x22\x7a\x21\x97\x6f\xd8\xeb\xcf\x62\x0f\xf2\x93\x18\xec\xd4\xbb\xc0\x4e\xd4\x83\xbd\xf1\xf6\xde\xc2\xe7\x68\x58\xae\xfd\xe5\xfe\xb2\xdf\xf2\x07\x5a\xb3\xd2\x76\xa9\x53\x48\x16\x63\xd1\x9f\xe9\xad\xfe\x98\xdb\x86\xde\xdd\x76\x75\xd7\xcd\xed\x55\x3a\x4f\xf5\x39\x5a\x93\x7e\x5d\x19\xdc\x32\xde\x17\xc9\xa7\xf0\xfe\x39\x5d\xfb\x31\x7e\x2f\x9f\xfc\xcb\x05\xab\x27\x33\x55\xd9\xa2\xe9\xd5\xa2\x75\x32\x5f\xbd\x64\x82\xbe\x39\x6f\x52\xdb\x1e\x4d\x3b\x54\x9b\x36\x49\xe6\xf8\x0d\x7b\xe3\x59\xec\x83\x88\x3c\x56\x5b\x4a\x67\x10\xa7\x7b\x13\xba\x5c\xa3\xa0\x68\xc3\x4d\xba\xbd\xe0\x66\x28\xd7\x0d\x2f\x1f\x46\xad\xde\xf4\xf5\xb0\xe1\xa7\xe3\xf1\x21\x05\x78\xc9\xb3\x9a\x59\x45\x85\x5c\x2e\x23\xfa\xd8\x06\xc2\x1d\x31\xae\x32\x25\x7c\xce\xf9\x52\x76\x17\xf5\xcf\xd0\x56\xcf\xe9\xda\xef\xea\xe7\xa0\x62\x9d\xa7\xca\x20\x66\xda\x63\x58\x1c\xaa\xfb\x2a\xdc\x9b\xb1\x4f\x6d\x30\xbe\xf9\x34\x7f\x46\x2c\xbc\x98\x36\xa3\x5c\xc6\xaf\x0f\x34\xbf\x62\xff\xb1\x35\xf7\xaf\xf7\x31\x69\x61\x7c\x68\x6b\x75\xb3\x65\x60\xac\xea\x16\x4c\x1e\xfe\xc4\xc4\xab\x50\x0e\x23\xf6\x18\x00\xb9\x8b\x08\x93\xba\x7e\x8b\x90\x79\xd9\x34\xc3\xda\xda\x86\x81\x5b\xee\xba\x90\xb9\x43\x3e\x62\x52\x78\x58\x9f\x96\x6b\xe1\x50\x8b\xd4\x42\x14\x06\x2b\x12\xb8\x4f\xd8\x0b\xcb\x3e\xa7\x6b\x3f\xc6\xef\xe5\xf3\xcc\x07\x8b\x60\xb0\xd5\x69\x9c\x35\xf5\xcc\xcd\xb1\x32\xcd\x4b\xde\xad\x6e\x21\xb6\x5d\xcd\xb5\x5a\xbf\xac\xad\x48\x6e\xf0\x1b\xf6\xeb\x67\xb1\xd7\xf8\x80\x9e\x36\x78\x07\xfc\x71\x14\x64\x78\x8b\x8c\xd8\xb9\x6c\x4c\x5d\xb8\xe5\xe5\xd9\x56\x0b\xc5\x17\x0c\x13\x44\x41\x34\x3d\x68\x94\xaf\xea\xcd\x92\xe1\xf7\x88\x90\xf1\xd4\x44\x87\xce\x8a\xee\x64\xeb\x9c\x4b\x69\x7d\x5c\x75\x11\x9a\x6b\x2f\x52\x23\xed\x13\xfc\x7b\xf6\x39\x5d\xfb\x31\x7e\x2f\x4b\xd9\x58\x6c\xce\x06\x2b\x3e\x56\xfc\xad\x72\xf1\x59\x38\x66\xeb\x6a\xf6\xcf\x97\x52\xc2\x4a\x95\xc2\xc8\xbb\x50\x2a\x3c\x02\xf5\xcd\xe6\x98\xcf\x62\xcf\x2d\x9d\xae\xac\x47\xde\x32\xf9\x24\x71\xe4\x6c\x2f\xb0\x0d\x93\x57\x35\x43\xd5\xd6\xf6\x14\x7b\xfa\x2e\x58\x40\x17\xdc\xfc\x86\xc4\x87\xa1\xa3\x5b\xf9\x1a\x3e\xc8\x23\x4d\xe5\xb1\x5a\x27\x3d\x26\xaa\xa2\xb6\x18\xd4\x73\x7d\x6a\xca\x5a\xaf\xb4\xbd\x46\xff\x35\x96\xf6\xf7\x2b\x2f\x7f\x2d\xe7\xfc\x5c\x65\xf8\xb7\x61\xde\x56\x33\xa5\x92\x14\xc4\x88\x67\x59\x96\x4a\x30\xe2\x09\x05\x48\x96\x41\xc8\x03\x16\x72\x54\xcc\x62\x86\x27\x39\xc7\xa2\x84\x20\x26\x41\x0c\x86\x80\xa7\x32\xc2\x33\x2c\x44\x39\x1f\xb3\xd4\xdf\xac\xea\xab\xf8\xfd\xea\xc4\x6f\xee\x14\x2b\x20\x98\xae\xac\x7b\x2d\x4f\x89\x9f\x9e\x6e\x8b\xfe\xec\x78\x20\x79\xb8\x67\x0c\x23\xfe\xa2\x8b\x4d\xca\xac\x99\x9f\x0b\x66\xfe\xa3\xd9\x0f\x6d\x47\xfa\x21\x1e\x7e\x7d\xa5\xed\xbf\x99\xfd\xb7\x61\xde\x66\xdf\xc4\xfd\x90\x36\x6d\x4f\xb2\xaf\x6d\x23\xbe\x7c\x78\xfd\xc7\x9f\xbf\x3c\xdf\x39\xe2\xe3\x35\xf5\x83\xef\xf1\xf3\x45\x16\x77\x69\x59\xdd\x7e\x7e\xf3\xe3\xf7\xf8\x5f\x7f\x7a\x39\xfa\xe9\x46\xba\xbe\x6a\xcf\x3f\xfd\xe5\x0b\xfd\xe7\xaf\xff\xd3\x93\xee\x46\xba\x9f\xfe\xf2\xe5\xa7\x1b\x4d\xff\x17\xfd\x5f\xd4\x4f\x3f\xbf\x91\x8e\x5d\x47\xce\x83\xf9\x3a\xb5\x9f\xfe\xf2\xb2\x50\x7f\xf3\x86\x38\xa6\x35\x19\xfa\x9f\xfe\xf2\xe5\xff\xfa\xd3\x5f\xcf\xf4\xbf\xfe\xf4\xfe\xbc\xaf\x9f\x7c\x19\x39\xcd\x78\x18\x33\x34\x0b\x98\x9c\xf0\x04\x91\x1c\x63\x2e\x61\x59\xcc\x27\x08\x52\x14\x80\x88\xe5\x19\x9e\x87\x09\xcc\x29\xc4\xa7\x29\xcf\xe3\x84\xc6\x84\xe1\x48\x86\x39\x1a\x41\xfa\xe7\xaf\xf4\x6d\xdc\x33\x99\x87\x9f\xfe\xf2\xe1\x6c\x5f\x67\xf3\x32\xf9\x9f\xfe\xf2\x85\xfa\x9b\xb7\xfe\xf7\x87\xbf\xef\xcf\xf1\xe5\xe5\x7b\xc5\x84\xa7\x38\x94\xa4\x90\x25\x20\x67\x53\x96\xa6\x18\xcc\xa6\x84\x24\x71\xce\x65\x80\xcb\x73\x2e\xe7\xa8\x94\xcf\x52\xcc\x12\x1e\xb3\x88\x67\x71\x9e\xb0\x88\xb0\x39\x97\x11\x3e\xa1\x7f\xfa\xd3\x0f\xce\xf0\x77\x30\xc8\x59\x84\x69\x96\xc2\x39\xcc\x32\x3e\x67\x20\x0b\x21\x97\x42\x2a\x27\x98\x70\x09\x4c\x39\x80\x93\x84\x66\xf8\x2c\x66\x38\x1a\xa3\x17\xac\xb8\x98\x4d\x49\xc2\x03\x2e\x49\x52\x82\x7f\x3d\x06\xf4\x9f\xbf\x7f\xaf\x1d\x87\xcb\xf8\xf2\x77\x3f\xe1\x38\x4d\x21\x4e\x30\xa0\x41\xc2\xc7\x71\xcc\x27\x14\x0f\x09\xe1\xe3\x14\x64\x2c\x61\x09\x66\x00\x9d\x91\x1c\xe6\x98\xf0\x3c\x9d\x13\x08\xa8\x84\xa2\x01\x4a\x00\xa0\x08\x42\xc9\x4f\xbf\x08\x61\x9e\x43\x79\x0c\x32\x3a\x8d\x59\x96\x63\xf2\x8c\x70\x71\x9a\xbf\x30\x3b\x7f\x19\x85\xe7\x09\x46\x39\xc5\x60\xc2\x60\x8e\xc2\x39\x49\x38\x16\xc0\x98\x4b\x33\x86\x80\x18\x51\x31\xf7\x6b\x10\xc6\x84\xa2\x33\x0e\x72\x14\x97\xa4\x2c\x1f\xa7\x49\x4c\xa5\x6c\x06\x21\x9d\xc5\x5c\x9e\x20\x9c\xa7\x39\xcf\xa7\x09\x66\x72\x86\x8b\x53\x80\x69\x92\x24\x0c\x9f\xa5\x28\x26\x0c\xc5\xc4\xe9\x6f\x8d\x70\x9a\xe5\x59\x12\xb3\x79\x8e\x49\xfc\x72\x39\xe3\x34\x47\x79\x9a\xf0\x31\xe6\x99\x9c\xc7\x49\x92\x91\x38\xa5\x72\xc2\xb1\x1c\xc1\x09\x0f\x33\x9e\xe5\x38\x82\x18\x9e\x01\x49\x4c\x91\xf4\x97\x21\x0c\x93\x1c\x24\x98\x50\x39\x4d\x65\x2c\x4d\x00\x83\xb9\x94\xcf\xd8\x3c\xe7\x21\xa6\x32\xcc\x52\x2f\xe7\xa1\x50\x4e\x21\x8e\xc3\x19\xc0\x7c\xc2\x80\x98\xe5\x68\x86\xe3\x59\x8e\xa5\xa8\x5f\x83\x30\xf5\xe4\xeb\xb7\x46\xf8\xb7\x9b\xfb\x3f\x42\xf8\xe9\x59\xff\x7f\x1a\xe1\x5f\x66\x29\xff\x8d\xc1\xbf\x31\xf8\x37\x06\xff\xc6\xe0\xdf\x18\xfc\x1b\x83\xdf\x09\x83\xd7\xa3\xff\xfb\x4f\xff\xfb\x97\x28\x9e\x2c\x1e\xe2\x24\xee\x49\xff\x2a\xdf\x3e\xce\xe1\xab\xe2\xa1\xa9\x5f\x32\xd2\x99\x0c\x53\xdb\xd5\x97\xb8\xef\x2f\x65\x17\xf7\xe4\x07\x23\x79\xa4\x1f\xbe\xec\x64\xf5\xcb\xe6\xeb\x87\xbf\xfc\xf7\x97\x1d\xb9\x0c\xe4\x94\x90\xee\x0b\xa0\x68\xe6\x97\x9c\x28\x6f\xbb\x94\xf4\xe9\xa5\x3d\xbf\x60\xdf\xc4\xe3\x39\x2d\x3f\x9e\x28\x8f\x9b\x9e\xfc\x92\xc1\xbe\xea\xcd\xf1\x52\x74\x71\x46\xfa\x1f\xcf\xff\x67\xc5\x37\x54\xa7\xd7\xe5\xfc\xf3\x47\x01\xf8\xb6\xf6\x3f\x95\xf1\x8b\x8c\x7b\x3d\xfb\x9f\xde\xad\xf6\x4f\x39\x21\xbf\xec\x83\xa7\x78\x1e\xe6\xbe\x7a\xfc\xc2\x8f\x77\xe4\x55\x75\xfe\x93\x0f\xff\x32\x2a\xbc\x88\xf0\x3e\xbd\xbc\x30\xe2\x7b\x1c\x7e\x86\xe2\x35\x46\xf0\x35\x7a\x09\x4d\xaf\x95\x8f\xd9\x54\x3f\xd6\xce\x56\x1c\xfc\x7b\xbc\x64\xef\x99\xb8\x8d\x6e\x1b\x2d\xbf\x65\x67\x50\xa7\x9a\xff\xa8\xbb\xe6\x5d\xc7\xa5\xaf\x9b\xd7\x38\x89\x5b\xd7\xcd\x29\x34\xb3\x15\x92\x70\x66\x31\xab\x63\xb1\x8e\xe8\xf3\xad\xac\x6f\x75\x40\xf9\x8f\xb5\x03\x2f\xfe\xd1\x63\xbe\x36\x95\x78\x0d\x67\xac\x8e\x4f\x06\x99\xfe\x95\x70\x88\x28\x78\x63\x63\xf8\xd5\xc0\x46\x3d\x44\x8e\xb9\xaf\x61\x34\x1c\x12\x2b\x67\xc4\x15\xa0\x66\x3f\x3f\xdc\x82\x73\xe6\xfb\xbd\xfd\x50\x06\x4f\x2f\xe7\xe2\x1e\x67\xdc\x51\x5c\x64\xb0\xf1\xcd\xab\x53\x07\xd9\xe3\x8e\x8f\x66\x99\xe8\xfd\x9e\x49\x99\x85\x17\x6f\xbc\x52\xfa\x16\x9e\x91\xc2\x27\x5b\x40\x8a\xff\x4a\x10\xcf\x51\xf0\x65\xa7\x86\x1d\x39\x25\x9b\x85\x22\xd1\xab\x0d\x48\x7c\xf0\xd0\x17\xce\x2e\x1b\x2c\xff\x40\x63\xfa\x02\x7d\x3f\x91\xfb\xd9\xdc\xcf\x28\x0d\xad\xd3\x39\x37\xa6\xfc\x9c\x31\xfe\x8e\xad\x57\xea\x39\xe5\x46\x74\x47\xc1\x8c\x55\xfb\x60\xe7\x35\x38\xee\x91\x53\x7f\xfd\x3a\x2d\x7f\xb1\x76\xda\x5c\x03\x99\xc3\xa4\xd8\x13\x6e\x3d\x6e\xce\x36\xa7\x6d\x07\xf3\xac\x5f\x19\x2e\xb6\x87\xd2\x29\xb6\x89\xe2\xc8\xf2\x14\x73\xd1\x56\x64\x4b\x6d\x77\x54\xc2\xab\x56\xa2\x6b\x98\x2f\xfb\xda\xa4\xd7\x1e\x95\xfa\x55\x11\xa5\xba\xb8\x4a\x1f\x5f\x0b\x3f\x3f\xc1\xb7\xe2\xdb\xfa\x4f\xcf\xb6\xdc\x7c\x7d\xa5\xbf\x8e\xbf\xce\x76\x4b\xad\x51\x64\xde\x3c\x69\x19\x00\x4a\x80\xbe\x60\x5f\xc8\x01\x5d\xec\x6c\x25\xcb\xcc\xa9\x9e\xa9\xe6\x36\x50\x59\x47\x47\x87\x53\x83\x63\x3e\x16\xd8\x93\x05\x7b\xa8\x0b\xb8\xad\x4e\xd8\x86\xa5\x2b\xc6\x36\x7f\xb1\xa2\xd5\x25\x8c\x44\x54\x36\xe2\xf0\x75\x92\xe2\xd2\x70\x78\x63\xbf\xd5\x63\x7e\x4d\x7a\xac\x2f\x61\xba\xdd\x1f\x03\x59\x6f\xb3\x07\xab\xb0\xc0\xd0\x5c\x50\x6c\xa6\xfa\xa6\x0c\xef\xf8\xb2\xd6\x0e\xd8\xf5\x78\x96\x18\x67\x40\x31\x63\xbb\xd7\xc3\xf3\xd5\x4c\x06\x90\x6e\xdd\x8d\xed\x76\xb1\xd2\x12\x4f\x48\x3b\x77\xfd\x7a\x15\xbc\x56\xf8\x57\x0e\x51\x64\x16\xdf\x6d\xca\x78\x3b\xec\x5f\x7e\x55\x41\xb0\x43\xc2\x3b\x7e\xea\x6b\x6a\xf7\x5a\x51\x4e\x91\x52\x83\x25\x33\x25\x5f\xd9\x50\x28\xd9\x78\x4d\xa3\xa3\x3e\x8f\xc2\xad\xbc\xad\x35\xb0\xd8\x8c\x8f\xa4\x15\xd6\x5d\x1e\x4a\xb1\x44\x47\x3b\x07\x63\x31\xd4\x97\x8c\x55\x94\xdb\x03\x8f\x57\x36\x1f\x1c\x7c\x1a\x93\x72\xb3\xc6\x19\x35\x9e\x66\xb1\x88\x57\xc7\x9f\xf7\x21\xbf\x85\x3b\xff\xa5\xeb\xe1\x9f\x04\x7d\x87\x6e\xec\x87\xa6\x3a\x93\xe7\x82\xbe\x6f\xc3\xbc\x0f\xe1\x6f\x22\x6d\xbb\x0e\x99\x60\xa7\x07\x1a\x13\xda\x91\xb5\xd1\x18\xa0\x49\x6b\x66\x27\xad\x50\xa8\xed\x03\x6b\xb5\xf2\xb5\x68\xb7\x06\xea\x16\x89\x06\x58\x19\xab\x0d\x90\x7e\x6e\x09\xaa\x49\xba\x84\x64\x20\xed\x10\x23\xad\xdc\xcd\x06\x39\x82\xee\x01\x53\x8d\x84\x95\xb1\x67\xb6\x02\xd6\x19\xb8\x86\xbe\xbd\x65\x03\x65\xc5\x1e\x02\x7d\xb3\xdb\x44\x6b\x47\x7b\x31\xe4\xfb\xdd\x6b\xdf\x14\x00\x20\xc4\x80\x82\x2c\xc7\x20\x8c\x19\x8e\xc2\xdf\x75\xd6\x64\xfe\xfc\x65\xb3\x37\xcd\xaf\xff\x7e\xb8\x8d\xfc\x70\x52\xb2\x1b\x40\xcc\x58\x42\xe8\x22\xd6\x96\x35\x15\x04\x9a\xb0\x71\x24\xe0\xba\x91\x89\x6d\x80\x58\x39\xd4\x75\x49\x0b\x3c\x1f\xb8\x0a\x36\x74\x05\x38\x7b\xc7\x94\xff\x3a\xa9\x7f\xbd\x4d\xea\x3f\x9a\xd4\xcf\x93\xe1\x7f\xed\x64\x04\x49\x70\x81\xa0\x84\xca\xda\xf0\x14\x60\xae\x0d\xc6\xb5\x0e\x2a\x63\x19\x7e\xc4\x3a\xf8\x60\x98\xae\xad\xc9\x1e\x00\x36\x5e\x1d\x90\xbc\x0b\xd4\x1d\x56\x65\x79\xfb\x1b\x4c\x46\xd9\xbb\x7f\x6f\x32\x90\xfa\x9b\x25\x02\xd4\xaf\x9d\x95\x68\xaf\xb1\x68\xef\x77\x76\xb0\xd5\x45\x61\x23\x86\x16\x6b\x19\x6e\x18\xad\x0c\xd9\xd8\xee\xc3\xd5\xf6\xa0\x7b\xba\x20\xab\x98\xd9\x2b\xbe\xe1\x87\x81\xae\xdb\x1b\xe7\x1b\xef\xfe\xf5\x26\xb0\xff\x68\x89\xc0\xdf\x4e\x0a\xbd\x2e\x1a\xf5\x4b\xa6\x23\xf9\x01\x63\x4a\x6e\xa4\x6e\xf1\x56\xd9\x1c\x3c\x41\xb3\x7d\xc3\x39\x08\xb2\xbc\xd9\x1f\x0e\xd1\x4a\xda\xac\x55\xe4\x3b\x22\x30\xd6\x38\x00\xe6\x76\x15\xa8\x18\xee\xb5\xbf\x4e\x47\x46\x3b\xcb\x56\xa0\xbf\xdd\xa9\x38\x72\xa1\xe4\x29\x0e\xdc\x32\xfb\x8d\x27\x5a\xca\x4a\x16\x80\x66\x1e\x3c\xdd\xc5\x96\x25\xb8\xc2\x66\xbd\x5e\xc9\x11\x76\xb7\x9a\xfa\x8b\x18\x87\xe8\x5f\xbb\x36\xff\xef\x4d\xe6\x1f\x30\x8e\x7a\xfd\x41\xe0\xc3\x64\xfe\x9e\xc9\x9c\x73\x42\x7e\x8b\x1e\xa5\xef\x07\x7a\x83\x08\xb1\x0c\xce\x71\x9c\x80\x3c\xe3\x40\x4c\x00\x05\x73\x0a\x65\x80\xe2\x09\x1b\x67\x24\xa5\x08\x9b\xa4\x28\xa7\x78\x0e\x26\x28\x4f\x61\x1e\xb3\x98\xe7\x00\x45\x32\x84\x09\xe0\x33\xfc\xb5\x25\x26\xfd\x37\xee\xac\xf5\xe1\x76\x26\x56\x4b\x91\x32\xa9\x95\x76\x1f\xca\x69\x43\x37\x21\x15\xdf\x2f\x2d\xcd\x6f\xf4\xf9\x66\x4a\x77\x9b\x19\x44\x25\x95\xfc\xdb\xa4\xf2\x13\x2c\x86\xce\x3e\x7f\x6c\x84\xf3\xc3\x97\xf3\xf7\xde\x78\xbd\x7d\xc9\xcf\x9c\x3f\x5c\x2e\x3e\xf6\xc5\xf8\x85\xe7\xff\x3e\xdf\xfc\x63\xdc\x59\x96\x80\xff\x87\xbc\xf7\x68\x72\x2b\xd7\xb2\x85\xe7\xfd\x2b\x6a\x56\x03\xde\x0e\xc2\x9b\x7e\xf1\x06\x87\xde\x7b\x3f\x83\xa5\xf7\x9e\xbf\xfe\x8b\x24\x53\x4a\x16\x45\xa5\xe8\x52\xaa\x7e\xdf\x89\x7b\x23\x2a\x45\xf2\x2c\x60\x61\x63\x61\x63\x6f\x18\xee\x35\x12\x82\x03\xa3\x29\xa2\xcc\x29\x89\x38\x23\xda\x68\x84\x90\xb2\x5a\x2b\x45\xbd\x33\xc8\x0a\xa9\x18\x52\x52\x29\x61\xa4\x11\x0e\x39\x27\x9d\x3c\xdd\x87\x79\x85\xf7\x27\xea\x9d\xa8\x35\x23\x6b\x73\xc1\xe3\xbd\xbc\xc7\x9f\xc3\x5f\x92\xc7\xf0\x6f\xe5\xdd\x49\x0b\xd5\x9b\xe6\x2b\xa7\x30\xe3\x04\x43\x82\x3c\x72\xd6\x41\xc0\x2c\x36\x1a\x73\x83\x2d\x77\x42\x50\x20\x1c\xf6\x08\x6a\x22\x19\xe6\x40\x53\xc1\xb0\xa0\xe2\x74\x19\xe6\x15\xde\xcf\x0a\x1b\x5b\xd7\x23\xc3\xfe\x30\x93\x8a\x64\x61\x97\x6d\xda\xfd\x65\x6a\x36\xcf\x98\xa5\x0e\x47\xb7\xb0\x59\x36\x89\x3e\x88\x4f\xc7\x59\x47\xba\xf0\x58\x97\x4c\x3d\x1a\x7a\xf7\x41\x7f\x46\xed\xaf\x79\x4f\x3c\x87\x5f\x34\x8f\xe1\xdf\xca\xbb\x94\x54\x4b\xc4\xa4\x97\x5e\x1a\x62\xa0\x53\xc6\x71\x4a\x01\x84\x42\x70\xc6\x2c\x73\x42\x39\x02\x0c\x25\x10\x43\x04\x04\x84\x8a\x02\x82\x39\x13\xd8\x68\x4e\xcc\x89\x77\xf4\x23\xef\x7f\xa8\xde\xaf\xe2\x3d\x4f\xbe\x96\x77\xcf\x85\x35\x4a\x22\x46\x28\xa5\x5c\x6a\xa2\x08\x06\x40\x7a\xef\x30\x55\x00\x21\xa9\x98\x55\x44\x3b\x8b\x91\xc5\x46\x4a\x69\xb9\x02\x4c\x59\xc4\x18\xa0\x0a\xd1\x13\xef\xf8\xe5\xbc\x3f\x5a\xef\x57\xf1\x9e\xab\x7f\x2d\xef\x4a\x02\x41\x1d\xc4\x5e\x3b\xe9\x05\x71\x80\x3b\x8c\x80\x02\x96\x10\x4a\x31\xb3\x0e\x2a\x6f\x90\xf1\x56\x18\xee\x08\x14\x8c\x09\x2e\x00\x77\xd6\x22\x4d\x84\xe4\xa7\x9b\x5f\xaf\xe8\xcc\x0b\xeb\x7d\x39\x4e\x7f\xab\x77\x3a\x7a\x36\xcd\x0f\xe4\x30\x64\x6b\xe9\xd5\x84\xd0\xee\xb8\x98\xf4\x43\x57\xad\x0d\x6c\x95\xea\xf9\x92\x51\xd6\x19\x8a\x46\xb4\x01\x98\xdf\x16\x76\xf5\xab\x5d\xe9\xf8\x77\xe4\xec\xd6\x11\x3e\x0a\x3a\xe9\x59\xb4\xb2\xad\xae\xda\xc5\x05\x4a\x2f\x22\x4c\xf5\x5b\xb9\x64\x78\xbb\x2c\x34\x86\xa9\x48\x7b\x15\xc9\x66\xfa\x93\x75\xba\x70\xda\xfb\xd0\x08\x36\x7d\xf3\xd1\x20\xb1\xeb\x6d\x13\x8f\x06\xdd\xf4\x07\x7e\xa9\x53\x9a\xd4\xf7\xb9\x4e\xa8\xd8\xce\x0c\x7a\x13\x9a\x1a\x0e\x09\xae\xaf\x9b\x6c\x51\x5c\xbb\x71\xa7\x94\x28\x8f\x6c\x71\x22\x62\xa6\x91\xba\x7c\xdf\x6d\xed\x0b\xbc\x96\x06\x39\x04\x24\x61\x08\x21\x8d\xb0\x83\x16\x5a\xc6\x80\x75\xd2\x72\x42\x39\x33\x04\x1a\x6f\xa5\x86\x52\x7a\x69\x29\xa3\x0a\x40\x6c\xa0\xf3\x42\x1a\x75\xba\x5e\xf6\xf3\x71\xe4\xce\xf1\x73\xce\xc3\xb5\x98\x39\x1b\x3f\x2f\x97\xa2\x7e\x6b\xdf\xeb\xff\xfc\x0e\x9d\x7a\x0e\x5f\xd7\x1f\xc3\xbf\xb5\x5f\x59\xcb\x89\x73\x0e\x71\x45\xa5\x20\x58\x23\xa1\x00\x55\x16\x08\xa5\x3d\xa3\x4e\x29\x84\xa1\xe6\xd6\x69\x47\x2c\xa0\x94\x02\x03\x14\x57\x04\x11\x63\x14\x95\x48\x9e\xee\x96\xbd\xc2\xfb\xf9\x9a\x69\xca\x96\x8d\x48\x7c\x95\x5c\x84\x52\xd6\x86\xbb\xe5\xea\xb2\xba\x28\xad\xbb\x25\x1c\xad\xe9\x5a\xc1\x53\x1c\x4a\xf5\xa0\x3d\x2c\x0b\xc5\xe3\xef\xcf\xc6\xef\xcb\xf0\xd6\xed\xbc\xa7\x9f\xc3\x7f\x1f\xc7\xee\xc6\xbf\x95\x77\x44\x29\x74\x9c\x29\x6c\x1c\x11\x02\x6a\xae\x0d\xc7\xde\x7a\x2b\xa4\x65\x1c\x58\x0a\xa1\x53\xdc\x12\x47\x19\xa4\x0c\x51\xa4\x29\xe4\x9c\x03\x84\x11\x40\xd6\xf1\x13\xef\x57\xc6\xef\x3f\x54\xef\x57\xf1\xfe\x3e\x8e\x7d\x19\xef\x58\x63\xe6\x8c\xd7\xc6\xbc\xcd\x09\x80\xf1\xde\x03\xa1\x9c\x60\x6f\xaa\xc2\x88\x83\x48\x0a\xe2\x81\x20\x5a\x03\xac\x9d\xd4\x1a\x11\xc9\x20\xb4\x5e\x20\x8c\x90\x3e\xf1\x7e\x65\xfc\xfe\x43\xf5\x7e\x15\xef\xef\xe3\xd8\x97\xf1\xee\x20\x11\x82\x1a\xcd\x98\xf2\xd4\x73\x4f\x9d\x94\x50\x03\x48\x9c\x33\x84\x53\xc3\xa0\x31\x02\x43\x24\x91\xf1\x94\x22\x66\xac\x05\xc6\x2a\x48\x28\x06\x40\xe0\x77\x7b\x27\x2f\xe7\xfd\xd1\x7a\xbf\x8a\xf7\xcc\xf6\x6b\x79\x67\xcc\x20\x61\x80\x31\x96\x2a\xe4\x08\x07\x88\x29\x65\x94\x57\xc8\x19\x8b\x0d\x05\xd0\x3b\x6a\x1d\x26\xd2\x79\xcc\x99\x01\x5e\x28\xaf\x85\xc4\x86\x6b\x4d\xa9\x3d\x5d\x60\x7d\x45\xdf\xcf\xea\x7d\xef\xb8\xb6\x5f\x4d\xe7\x87\xb3\x71\x2d\xff\x08\xef\x99\xe7\xf0\xcf\xcf\x7d\xbd\x07\xff\xe6\x79\x82\xd5\x4c\x32\xc5\x25\xd7\x9c\x49\xc8\x99\xd1\xca\x59\xac\x28\x70\x44\x31\x25\x18\x87\x10\x4a\x86\xa0\x67\x54\x61\x2f\x29\x51\x58\x1b\x0f\x01\x30\xdc\x79\x60\xde\x6f\xaf\xbe\x42\xfc\xf9\xa6\x8c\x02\xae\x73\xd7\x0d\x4a\xb3\xb1\xda\x01\xc8\xe1\x60\x50\x00\xbd\x88\x6e\xae\x8a\xa2\x27\x82\x4a\x3f\x17\xae\x66\x5b\xa8\xdc\xe8\xb7\x2e\x06\xd6\xe8\x4f\xc9\xfd\x25\xf1\xd9\xe7\xf0\x4f\x42\x77\x3f\xfe\xcd\x06\xcf\x19\x80\x0a\x19\x85\x20\xd2\x82\x00\x89\x14\x7f\x33\x74\x04\x21\x47\x9a\x71\x4f\xb4\xc4\x96\x23\xcd\x11\x53\x80\x19\x4a\x80\x84\xdc\x22\xa5\x05\x36\x50\xc1\xf7\xab\xab\xaf\x10\x7f\x56\xf1\x7b\x2d\x6e\x36\xea\x4e\x67\xdb\x5f\x32\xfc\x39\xf1\xb9\xe7\xf0\xa7\xf9\xc7\xf0\x6f\x25\x1e\x38\x88\x04\x23\x5c\x23\x2d\x31\x17\x4c\x33\xcd\x99\x83\x02\x59\x63\x15\x80\x1c\x73\xca\x01\x63\x5e\x18\xe5\x01\x45\xd8\x42\xad\xb0\x26\xdc\x5b\xe6\x39\x02\xf6\xfd\xde\xea\x2b\xc4\x9f\x55\x3c\x96\x68\xb6\x6b\xd5\x74\x75\x02\x73\x9b\x4a\x0f\x55\xd7\xf1\x28\x9f\xc1\x52\xbf\x90\x35\x21\xb9\xaa\xf2\x62\x16\xc6\xfa\xdd\xc4\x4e\x4e\xf3\x47\xba\xcf\x2c\xfe\x71\x89\xcf\x3f\x87\x7f\x72\xa9\xee\xc7\xbf\x95\x78\x63\x85\x12\x4e\x3a\x4d\xb1\xb7\x88\x09\x0b\x91\x24\x0e\x21\x21\x25\x35\x88\x7b\x82\x90\x95\x80\x0b\x6c\x08\xa0\xc4\x11\xa2\x34\x00\x48\x78\x03\xad\x42\x10\xa8\xf7\x4b\xab\x3f\x27\xfe\x5e\x8b\xeb\x56\xec\xbc\x7d\x46\x5c\xfd\x11\xe2\x0b\xcf\xe1\x37\xa7\x8f\xe1\xdf\x4a\xbc\xf6\xda\x52\x27\x09\xe5\x96\x43\xae\x8d\x17\x84\x23\x09\x15\x33\x88\x68\x6e\xac\xb0\x9a\x78\xcf\x05\x71\xc6\x12\x2a\x91\x76\x18\x58\x20\x20\x61\x06\x18\xc4\xc8\x3b\xf1\x57\x9c\xf8\x3f\x54\xf1\x57\x11\xdf\x88\x7f\x2d\xf1\x18\x08\x01\xac\x25\xc8\x0a\x47\x00\x52\x18\x58\xa1\x30\x45\x5c\x53\x66\xa0\xc3\xd8\x41\xe1\x04\x37\x84\x39\x88\x31\x72\x8a\x1a\x6f\x20\x47\xd0\x5b\xc1\x8d\xd7\xef\x57\x85\x5f\xb1\xf8\xb3\x8a\x47\x8b\xb9\xae\x8c\x8e\x0e\xd3\xe1\x4e\xe1\x61\x90\x9a\xcc\x3a\xa6\x5b\xed\x4f\x5a\xdd\x90\x5f\x43\x3d\xa7\xe1\x45\xbc\xc6\xe4\x60\x35\x3c\x1d\xef\xf9\x21\x35\xb1\xc7\x07\xd7\xe2\x73\xf8\x27\xa9\xb9\x1f\xff\xe6\x68\x81\xb6\x92\x11\x6f\xbc\xd5\x18\x33\x85\x81\x47\xd0\x20\x02\xbc\xf7\x56\x79\x8e\x2d\x37\x9c\x0a\x01\x9c\x85\x5a\x4a\xfc\xe6\xd7\x23\x2f\x88\xc3\x8e\x4a\x44\x39\x78\x27\xfe\x73\x8b\x0f\xf4\xf0\x00\xdb\x5c\x55\x78\x92\xf7\x50\xb3\x50\xc0\x95\x5e\x96\xa7\xab\xae\x5d\xa8\x1e\xe2\xb3\xb9\xce\x8f\x54\x36\xdc\xad\xab\x6a\xef\x4b\x88\x7f\x04\xff\xab\x89\x87\x04\x19\x29\x84\x86\x9e\xf1\xb7\x09\x2a\x27\x0a\x52\x01\xad\x93\x46\x39\xe3\x89\x94\x8e\x01\x0f\x1d\x70\xce\x1e\x37\xea\x41\xa5\x90\xa1\x54\x22\x2c\x38\x3b\x86\xfb\xe1\xf5\x3c\xcb\x33\x16\x57\x4c\x74\xb3\x67\x15\x7f\x28\xbf\x55\x7a\x0e\x3f\x4d\x1e\xc3\xbf\x39\xee\x4c\x95\x74\xd8\x28\x86\x9d\x34\x06\x52\x8a\xa9\x34\x92\x63\xcc\xb5\xd1\x90\x10\x76\x0c\x84\x31\x8d\x30\x50\xc4\x02\xc3\x3d\xe2\x54\x20\x46\x88\x85\x4c\x00\xf9\x7e\x3b\xfb\xe7\x52\x73\xaf\xc6\x16\x66\xad\x15\x3c\xab\xed\x4f\x72\xab\x9f\x13\x5f\x7e\x0e\xff\xd0\x7d\x0c\xff\x66\x3f\x5e\x01\xca\xa0\x90\x9a\x50\xce\x80\x61\x80\x3b\x8c\xa1\x91\xc0\x50\x25\x34\x31\x96\x23\x20\x19\xb4\x5e\x68\x23\x8c\x33\xde\x12\xa5\xb0\x10\x9a\x72\xae\x98\xd1\xef\xc4\x5f\x91\x9a\x3f\x54\xf1\x57\x11\x7f\x7e\xc2\xe5\x57\x10\x0f\x85\xf6\xcc\x18\x87\x80\xf1\x5a\x03\x2f\x01\x97\x86\x68\xc1\x05\xe6\x50\x48\x22\x2d\xc4\xda\x42\x64\x21\xc7\x8a\x01\xcc\xb0\x45\x5a\x38\xac\x00\x77\xde\x29\xfb\x4e\xfc\x95\x10\xd9\x1f\xaa\xf8\xab\x88\xdf\xb6\xbf\x96\x78\x63\x9d\x27\xd4\xda\x37\xab\xa6\x6f\x83\x27\xa6\xc7\x18\xb0\xe5\xce\x33\x02\x89\xf7\x44\x62\x0e\x15\xc6\x94\x23\xec\x04\xb1\xca\x2b\xe3\x14\x74\x10\x33\x46\x8f\x7e\xfc\xf5\x1c\xc8\x59\xb1\x62\x03\xed\x43\xcb\x48\xbf\x54\x2a\x26\xdb\xeb\x45\x32\x40\xc1\xaa\x32\x18\x79\xac\x28\x71\xb1\x49\x5c\x01\xc6\xfa\x35\x16\x1b\xc2\xe8\x45\xc8\xe0\x27\xea\x7a\x0b\xf1\x95\xe7\xf0\x4f\x83\xeb\xfd\xf8\x37\x7b\x35\xd0\x53\x89\x9d\xa6\x0e\x12\x2f\x39\x40\x5c\x1b\x2e\x05\x82\x5e\x11\xc6\x90\x30\x10\x70\x80\x89\xd7\x4a\x2a\xaa\x8c\xf3\x4c\x49\xab\xb8\x74\x80\x42\xe7\x38\x7e\x27\xfe\x73\xa9\x09\xe2\xd1\x62\x37\xbe\xad\x54\x33\x43\xb0\xaa\x16\x77\x1d\xb3\x69\xa6\x17\x13\x50\xc2\xe5\x75\x6e\x10\x9b\x2c\x6a\x9b\xd9\x66\x6b\x16\x89\x91\xf8\x12\xe2\x1f\xc1\xff\x6a\xe2\x25\x40\x5a\x02\x73\x0c\xac\x4b\xc7\x34\xc6\xd4\x71\x4a\x30\x16\x52\x71\x42\x98\x16\xcc\x61\x80\xa5\xd3\x9e\x4a\x67\x18\xb3\xde\x6b\x0a\x9c\x72\x06\x58\x23\xe8\x1b\xf1\xd7\xb3\x4f\xe7\xc5\x5a\x6f\x37\x85\x43\x61\x28\x57\x5b\xbd\xce\xa4\xea\x91\xf9\xa4\x85\x58\xb2\x9d\xc6\x79\x1d\xb5\xb3\x72\x5d\xae\xc8\x84\xc5\x1b\x95\xd6\xb2\xfc\x32\xe2\xab\xcf\xe1\x7f\x35\xf1\x46\x71\xca\x2c\xa4\x50\x1a\xf7\x66\xc9\x5e\x70\x84\x00\x41\x1a\x22\xe3\x14\xd7\x0a\x00\x62\xf0\x9b\xb3\x0f\x95\xd5\x0c\x69\x2a\xbd\x10\x4a\x30\xee\x05\x73\x1a\xbf\x13\x7f\xc5\xe2\xff\x50\xc5\x5f\x45\xfc\x29\x3a\xf9\x75\xc4\x63\xae\x35\x97\x9e\x49\x2a\x0d\x70\xc2\x49\x8d\x2d\x86\x9e\x19\x89\x81\xb0\xc2\x02\x41\xac\x34\x8c\x13\x64\xbc\xa2\xcc\x28\x20\x89\xf1\x8a\x39\xe5\xa4\x24\xe8\x1b\xf1\x57\x06\xd7\x3f\x54\xf1\x57\x11\x7f\xca\xc3\x7c\x1d\xf1\x50\x0a\x41\x88\x11\x9a\x70\x64\x95\x32\x86\x6a\x0e\x39\x93\x54\x11\xa3\x20\x53\x86\x4b\xa9\x20\xf6\x1a\x19\x4f\x20\x45\x16\x4a\x87\x20\xe4\xca\x41\x43\x99\x39\x12\x7f\x3d\x11\xf2\xc2\xc1\xed\x6c\x9f\xc0\xed\xc4\xd7\x9e\xc3\x3f\x6f\xf8\x7b\xf0\x6f\x4e\x84\x00\x61\x0d\xf4\xce\x40\x0a\x3c\xe2\x8c\x32\x24\x18\x33\x8e\x78\x8a\x38\xf2\x8c\x0a\xe3\x81\xb6\xd2\x5b\x61\xa0\x95\x4c\x21\x64\xa0\x64\xda\x21\x07\x35\x3a\x7a\x35\xe8\x7a\x22\xe4\x85\x15\x4f\x3f\x42\x7c\xfd\x39\xfc\x73\x8b\xbf\x07\xff\xe6\x15\x06\x8a\x49\xc1\x15\x93\x18\x38\xa5\xb9\xc3\xda\x19\x65\xbc\xd4\x9c\xb9\xe3\xa2\x34\x01\x10\x63\xc2\x40\x0f\x9d\x06\x5e\x20\x4f\x19\x87\x00\x12\x4d\x34\xc3\xec\x48\xfc\xf5\x44\xc8\xe3\x7e\xf4\x6c\xb7\x2a\x1e\x82\x33\x3f\xfa\xf2\x76\xf5\x9b\x88\x6f\x3c\x85\xbf\x0f\x81\xc7\xf0\x6f\xf6\x6a\x18\x81\x54\x19\x68\x91\xe7\x92\x21\xa8\x11\xd3\x90\x32\xe1\x25\xc3\xde\x0a\x6b\x99\xa1\xc0\x20\xf0\x66\xe9\x9c\x20\x61\x9c\xd7\xde\x49\xeb\x9c\x60\x9c\x0a\xf1\x4e\xfc\x95\xc1\xf5\x0f\x55\xfc\x55\xc4\xcb\xf2\xd7\x12\xaf\x1d\xa0\x8e\xbc\x79\x2d\xcc\x52\xc1\x84\x74\x50\x33\xaf\x1c\x80\xd8\x51\xa5\x38\xd7\xd6\x51\xe6\x98\x32\x16\x59\x2d\xb5\x64\x82\x03\x47\x1d\x27\x4c\x11\xa5\xf9\x1b\xf1\xd7\x33\x50\xe7\x15\x37\x0b\xd2\xaa\x0f\xd9\xe1\xd0\x0b\x40\x31\xe9\xda\xfd\x62\x7e\x56\x2e\xc4\x58\xbb\x1a\xa2\x74\x12\xe4\x37\x21\x90\x69\x24\x4c\xb3\x68\x2f\x32\x50\x89\xc7\xa3\x93\xcd\xe7\xf0\x4f\x63\xcc\xfd\xf8\x37\x4f\xa0\x84\x46\x14\x08\x88\x30\xa3\x4c\x43\xeb\xa1\x73\x90\x1b\xc4\x19\x17\x48\x6a\x83\x90\xd2\x04\x4a\x2a\x95\x45\xd4\x31\x63\x0c\x45\xc0\x09\x22\x29\x64\x5e\x1f\x73\xae\xe8\x7a\x06\xea\x85\x15\x7f\x68\x70\x6d\x3d\x87\x7f\x1a\x63\xee\xc7\xbf\x39\xe7\x0a\x31\x61\xd6\x41\xa3\x30\x30\x0e\x60\x48\xa4\x95\x9e\x12\x49\xa8\xa4\x6f\x43\xa9\x97\x46\x3b\x8b\xad\x80\x5e\x40\xc3\x90\xd6\x54\x1a\x2f\x8c\xb5\x42\x0b\xf9\xe6\xd5\xa0\xeb\x89\x90\x73\x8b\x87\x91\x64\x86\x95\xa3\xbd\x66\x65\x3d\x33\xa3\x85\x8f\x77\x7b\xce\x64\x76\xc3\x65\x50\xac\xd1\x5d\x23\xd4\x19\x1f\x60\x7a\x69\xdb\x85\xf6\xc5\x04\xea\x09\x8b\x6f\x3f\x87\xff\xd5\x16\x4f\x01\xa3\xc6\x72\x23\xb9\xf1\x9a\x79\xed\xb9\x55\x82\x48\xac\xdd\x71\x27\x8f\x45\x86\x3b\xaf\xb1\x06\x40\x73\xae\x88\x91\x88\x49\xe4\x2c\x11\xdc\x6b\xc1\x14\x79\x23\xfe\x7a\x3c\xfe\x09\x8d\xf5\x89\x34\xb2\x67\xd5\xfa\x49\xc6\xf9\x73\xe2\x3b\xcf\xe1\xeb\xe5\x63\xf8\x37\xc7\xe3\x39\x73\x00\x31\xe0\x99\x16\xd8\x30\xa7\x24\xf6\x94\x50\x0b\xb9\x75\x1c\x41\x03\xb8\xb4\x06\x43\x27\xa0\x73\xd4\x59\x43\xa0\x87\x54\x3a\x43\xbd\x26\x82\x90\xa3\xc5\x5f\x8f\xc7\x9f\x57\x5c\x74\xd6\x70\x36\xd3\x7b\x53\x09\x95\xf5\x50\x84\xeb\x99\xf0\x80\xc2\x49\x1c\x95\xcc\x7e\x93\x2b\x8e\xd3\xd1\x34\x1b\xe6\xc7\x2c\x79\x3a\x95\xf9\xc3\xe2\x93\x8f\x5b\xbc\x7a\x0e\xff\x64\xf1\xf7\xe3\xdf\xec\xd5\x20\xc5\x28\x31\x9c\x49\xc6\x94\x61\x50\x19\x23\xad\x07\x9a\x53\x2f\xa1\xd1\xd6\x61\x4d\x29\x34\xd2\x49\xce\x18\xc7\x40\x20\xae\x3c\x41\x16\x3a\x44\xb8\x31\xdf\x88\xbf\xe2\xd5\xfc\xa1\x8a\xbf\x8a\xf8\x93\xc6\x7f\x1d\xf1\x1c\x00\xaf\x08\xd1\x9a\x00\xc7\x94\x45\x86\x0a\x21\x18\x65\xc6\x22\xc7\xb5\xb0\x82\x59\x87\x2d\xa6\x94\x6b\x46\xb1\x72\x4c\x70\x42\x18\x83\x9c\x5a\x46\x24\x3a\x7a\x35\xd7\xc3\xc2\x4f\x74\xf5\xc6\x2e\x41\x72\x67\x5d\xfd\xf2\x56\xdd\x9b\x88\xd7\xcf\xe1\x67\xd3\x8f\xe1\xdf\x3c\x73\x75\x98\x03\xee\xb5\xa5\xe6\x4d\x39\x24\x35\x54\x0a\x8f\xa1\x35\x1c\x4a\xc3\x20\x82\xc2\x12\xe3\x14\x71\xc2\x5a\xab\xac\x66\x1c\x63\x4f\x04\x63\x40\x48\x08\xc0\x1b\xf1\xd7\xa3\x93\x67\x15\x8f\x96\xeb\xcb\x76\xb6\xb8\x0d\x0f\x07\xa1\x4c\xab\x95\xa6\x6e\xba\x8c\xb6\x51\xae\x1a\xf2\xdd\x14\x38\x24\x52\x9d\xd6\xc4\x4d\xf2\x19\xb2\x3d\x4d\x37\xcf\xa4\xe6\xf1\x05\x4d\xe6\x39\xfc\xf7\x1e\xf7\x75\x6b\xb4\x09\x75\x9e\x7b\x41\xdf\xf4\x1d\x49\xee\xb0\x97\x92\x78\xe7\x3c\xe2\x52\x33\x2c\x20\x62\x48\x30\x01\xf5\x31\x07\x05\x3d\x83\x14\x0a\xaa\x08\x66\xc2\x11\x81\xde\x89\xbf\x22\x35\x7f\xa8\xe2\xaf\x22\xfe\x5d\x6a\xbe\x6e\x53\x82\x82\x84\x63\x6a\xb9\x06\x14\x02\x89\xa9\x24\x84\xa8\x37\x67\x91\x3b\xee\x9d\x44\x46\x0a\x27\x91\xa4\x16\x69\xc5\xa0\x06\xd4\x21\x6a\xa1\xe7\xce\x41\xe0\x2d\x7e\x27\xfe\x4a\x74\xf2\x0f\x55\xfc\x55\xc4\x9f\x62\x35\x5f\x47\x3c\xf1\x92\x4a\x81\x00\x53\x1a\x72\xe3\x11\xd7\xd4\x60\xa7\xa5\x93\x80\x59\x86\x9d\x76\x0e\x31\xc4\x18\x25\x10\x22\xa7\xb4\xb5\x48\x1b\xc7\xb5\x87\xc8\x18\xe3\xbf\x59\xfc\x95\xe5\xf1\x7f\xa8\xe2\xaf\x22\xfe\xb4\x3c\xfe\xeb\x88\x17\x14\x69\x85\xa8\x03\x8e\x28\x05\x89\x54\x08\x59\x03\x25\xd6\x46\x33\x42\x95\x93\x4e\x2b\x84\x1d\xf7\x9c\x60\xf4\x36\x1a\x60\x2d\x21\x20\x9c\x38\xa9\x99\xa2\xfa\x9d\x78\xfa\x72\xe2\x1f\xad\xf8\xab\x88\x4f\xe7\xbf\x98\x78\x63\x0c\x30\x48\x18\xec\xa4\x54\x0c\x1b\x43\xa5\x56\x96\x5b\x67\xb0\xa7\x86\x32\xa7\xb1\x24\xc8\x50\x22\x9c\xb1\x04\x68\x83\xa5\xa1\x40\x5a\xa6\x81\x80\x96\xbc\x13\xcf\x5e\x4e\xfc\xa3\x15\x7f\x15\xf1\xc9\xe9\x17\x13\x8f\x11\x80\x00\x12\x21\x00\xe0\xd8\x0b\xe7\x3d\xf3\x08\x2a\xc7\x99\xa3\xd0\x20\x43\xbc\xf2\x14\x63\x47\x29\x38\x6e\x11\x41\x08\x50\x4d\x84\x02\x12\x49\x76\x5c\x2d\xfc\x46\x3c\x7f\x39\xf1\x8f\x56\xfc\x55\xc4\x27\xe2\x5f\x4b\x3c\x93\x9e\x11\xe5\x80\x17\x40\x6a\x20\xa4\x64\x06\x7a\x2c\x89\x73\x5c\x52\x00\xa0\x22\xc0\x39\xc7\xe4\xd1\x91\xa4\x4a\x33\xac\xbd\x85\x12\x23\x8b\x95\xf2\xfa\xa8\xf1\xd7\x33\x50\x2f\xac\xf8\xd9\x96\xe3\x63\x65\xef\xf1\xcb\xbf\x97\x27\xd7\x69\xf5\x7a\xba\x15\x59\x76\xaa\x74\xa0\x11\x78\x2b\xeb\x3f\xb6\x40\xfb\x0c\xee\xec\x61\xbb\x5b\xdb\xcf\x07\xfb\x72\x2a\x3e\x68\x37\x0d\x2e\xcc\x7a\x21\x0c\x8a\x40\x9b\xdd\xb2\x57\x2e\x65\x7a\x9d\x58\xfc\x74\x81\xf8\xd5\x2d\xd0\xa9\xb3\xc6\x18\x26\x72\xc9\xe8\x60\x59\xa2\xe9\x70\xbf\x01\xf7\xc5\xd6\x3c\x17\x8c\x0b\x7d\xb0\x99\x90\x88\xcc\xef\x2a\xa8\x41\xf1\xec\x10\x75\xf9\xd3\x66\xef\x68\x23\xd8\x74\x4f\xfb\xed\x8e\x53\x98\xb3\x2d\xcb\xa7\xf2\xb5\x37\x5b\x1b\x95\xd1\xca\x72\xd1\x36\x31\xdb\x69\x16\x92\xcb\xb9\x2a\xf8\x5a\x45\xe8\xfd\x76\x39\x58\xeb\x72\x25\x15\x8c\xb4\x88\xf8\xd3\xea\xc7\xe3\x4b\x51\x83\xb4\x9b\x70\xab\x93\xf5\x75\x1b\xc9\xd5\x31\xa9\x73\xbe\x85\x3a\xb5\xb7\xc8\xac\x9a\xe9\xb8\x98\x4f\xc5\x30\xb2\x4b\xa3\xc4\xa4\x70\x50\x6d\xbf\x92\xb1\x55\x12\xe7\x75\xba\x1e\xdb\xb7\x9b\xe5\x5d\xb1\x7c\x69\x6c\x37\x26\xf5\xb1\xb1\x84\x2b\x0c\xa1\x03\x88\x12\xc2\x3c\x47\x86\x02\x82\x98\xa6\x9a\x12\x42\x1c\x45\x0c\x12\x0c\xbd\xa1\x9c\x01\x27\x1c\xe5\x84\x71\x23\xb8\xb1\x44\x7a\xf3\xf7\x7f\xfe\xc2\xd7\x33\x6d\xf6\x39\x03\x3b\x5d\x80\x75\x32\xb0\xee\xff\x1e\x03\xeb\x3e\x67\x60\xfe\xc3\xc0\xd2\xff\x6f\x18\x18\x92\xd2\x1a\xc6\x30\xb4\x54\x50\x45\xa9\x72\x98\x01\xe4\x19\x03\xce\x50\x4d\x15\x00\x42\x58\x44\x14\x24\x1a\x13\x62\x38\x72\xc6\x18\xa4\x18\xb2\x52\x09\x89\xc5\x9b\x81\x5d\xcf\x28\xba\xe7\x0c\x2c\x22\x3e\x0c\x6c\xf8\xbf\xc7\xc0\xb6\xcf\x19\x58\xf2\xc3\xc0\x32\xff\x6f\x18\x98\xd6\xd2\x9e\x26\x39\xd0\x2b\x47\x01\x7c\x9b\x80\x02\x60\x8d\x04\xd0\x70\x60\x09\x27\x42\x2a\xc6\x21\xc3\x16\x29\x4c\xbc\xd4\xd8\x61\xa4\x24\x82\x8a\x02\x7b\x54\xb0\xeb\x09\x3c\xff\x9c\x81\x9d\xd2\x11\x27\x03\x9b\xfe\x1b\x0d\xec\x87\x9b\x19\x83\x8b\xad\xc9\x0f\x18\x98\x5f\x7d\x18\x58\xf6\xdf\x68\x60\x91\xbb\x0d\x8c\x69\x2c\x8c\xb5\xd4\x40\x6e\x3d\x02\x10\x5b\xaa\xa8\x43\x10\x1a\xa2\x31\x42\x50\x68\xa6\x9d\x84\x00\x51\x0c\x99\x86\x4a\x69\x24\xb4\x81\x08\x43\xc6\x20\xb5\xf4\xdd\xc0\xae\x44\x96\xba\x4f\x19\x98\x3c\xa5\xe6\xff\xff\x66\x60\xf5\xff\xf7\x0c\xcc\x72\xe1\x21\xf7\xca\x2b\x84\x21\xb7\x4c\x79\xc6\xa5\x83\x8e\x12\x04\x3c\xa6\x10\x01\xee\x3d\x83\xc6\x7a\x8f\xa0\x61\x00\x38\x25\xbc\xa0\x90\x52\x8d\xdd\x31\x13\x8e\xaf\x67\xc2\x9f\x08\x96\xe7\x6d\x94\xb2\xb3\xb6\x22\xc1\xd5\xe7\xf3\xd9\x55\xef\x39\x7c\x32\x7c\x0c\xff\xe6\xbc\x20\xa0\x56\x29\x87\x30\xd0\xd0\x73\x82\x09\x27\x4e\x60\xa5\x99\x25\xe2\xad\xb3\x43\x8f\x3d\xe7\x8c\x41\xc5\xad\x80\xd4\x73\x86\x80\x71\x0e\x29\x29\x80\x24\x02\xbc\x11\x7f\x3d\x13\x7e\x56\xf1\x68\x75\x56\xc0\xf3\x68\x23\x82\x8b\xf8\xb0\xd1\xad\xa5\x9e\xf6\x7a\x07\x17\x33\x89\x41\x7c\x1f\x69\xb7\x43\xc3\x82\x8c\x87\x52\xb9\xc6\x68\x75\x91\x09\x4f\x3f\x9e\x9e\xea\x3f\x87\x7f\x8a\x59\xdf\x8f\x7f\x73\xe8\xd2\x21\x42\x90\x77\xc8\x09\x6b\x85\x61\x82\x51\x0e\x8c\xf4\x14\x73\x65\x34\xf2\x6f\xa3\x38\x56\x52\x08\xec\x85\x85\x52\x6a\xe6\x09\x07\xd0\x69\x24\xa4\xc6\xea\x48\xfc\xf5\x4c\xf8\x0b\x2b\xfe\xd0\xda\x8f\xc1\x73\xf8\xa7\x98\xf5\xfd\xf8\x37\x13\x4f\x8c\x66\x46\x38\x4b\xac\x76\x86\x12\xa4\x3c\x54\xca\x22\x0c\x00\xb4\x56\x5a\xc6\x85\xf1\x50\x1a\x61\x08\x83\x8a\x51\xec\x38\x43\x8a\x23\x8a\x9d\x75\xf6\x98\x25\xc1\xd7\x33\xe1\x2f\xac\xf8\x43\x0b\x2b\x87\xcf\xe1\x9f\x62\xd6\xf7\xe3\xdf\xbc\xf6\x03\x61\x21\x94\x14\x8e\x38\xcc\x0c\xe4\x9c\x48\x25\x09\xe6\x04\x71\x60\x0c\xa3\xda\x6a\x8e\x38\x34\x9a\x42\xc4\xb9\x07\x92\x2a\xa5\x84\x87\x46\x49\x8b\x11\x3a\x7a\xa9\xd7\x13\xb2\x2f\xac\xf8\xcf\xce\xa2\xfb\x94\xf8\xd1\x73\xf8\xa7\x98\xf5\xfd\xf8\x37\x6b\xbc\x77\x5a\x00\x01\x28\x42\x4e\x2b\x0e\x8d\xc2\x48\x20\x44\xb5\x36\x9e\x63\x08\x90\x74\xd6\x78\x85\x28\x31\x02\x71\x43\xa8\x76\x54\x00\xad\x9c\xa4\x86\x23\x7c\x1c\x5c\xaf\x27\x64\x9f\x18\xdc\x62\xe9\x30\x9f\x9e\x35\x9c\xb8\xce\xef\xe7\xc4\x8f\x9f\xc3\x9f\x04\x8f\xe1\xdf\x9c\x17\xc4\x94\x58\x2f\x00\x82\x10\x12\x28\x94\x94\xd2\x61\x68\x90\x64\xc4\x42\xa6\x85\xf3\x4e\x38\x22\x91\xe6\x96\x13\xeb\x28\x91\x58\x0a\x44\xa1\x04\x0e\x02\x02\xfd\x3b\xf1\x57\xdc\xe6\x3f\x54\xf1\x57\x11\x3f\x32\x5f\x4b\x3c\x84\x1c\x50\x2f\x89\xb1\x8c\x5a\xae\x19\xc7\x0a\x22\xa2\x04\x35\x0e\x33\x61\x04\xf0\x82\x50\xe1\xbd\x72\xd6\x7b\x0e\x25\x06\xc4\x0a\x2f\x88\xa4\x98\x6a\xe2\x8e\x83\xeb\xf5\x98\xf1\x59\xc5\x63\x34\x33\xe8\xeb\x79\xa8\xe2\xe9\x60\x59\xdf\x97\x51\x78\x95\x3c\x44\xb7\xfd\x4a\x17\x74\x2c\x9d\x0c\xe4\x20\xa8\x04\xb0\x3a\x1c\x1c\x42\xc7\xef\x7f\x78\x35\x99\xee\xcf\xc8\xfd\x25\xf1\x93\xe7\xf0\x4f\x83\xfb\xfd\xf8\x37\x07\xeb\xbd\x22\x8c\x6b\x8a\x3d\xc5\x82\x59\xce\x95\xc5\xd4\x20\x0a\x90\xb3\xc8\x58\x6c\xad\xd0\x84\x01\x45\xb5\x43\x48\x33\x8d\x04\x14\x5a\x40\x6d\x2c\x76\x16\x59\xf5\xf7\x7f\xfe\x22\xd7\x63\xa9\x67\xc4\x47\x17\x7a\xbe\xab\xec\x1b\x61\x3c\xd4\xae\x1d\x2b\xce\xfb\x89\x6d\x2c\x89\x46\x9c\x56\x33\xf3\xbe\x58\x04\xc5\x61\x36\xac\xab\x78\xb6\x6c\x6d\x5f\x46\xfc\xf4\x39\xfc\xaf\x26\x1e\x68\xa3\x19\x57\x0a\xb3\x63\x04\xdb\x22\x42\xbc\x33\xde\x63\x05\x0c\x96\xdc\x0b\xe8\xb1\x92\x1a\x62\x82\x04\x13\x42\x32\xea\x38\x67\x96\x10\x6e\x80\x86\xee\x1b\xf1\x57\xa4\xe6\x0f\x55\xfc\x55\xc4\x9f\xbc\xaa\x2f\xb4\x78\x8b\x1c\x06\xde\x52\xfe\x26\xe4\x1e\x39\xa4\x21\x46\x0e\x6a\x23\xa1\xa2\x44\x28\xcc\x24\x14\x52\x3b\xed\x39\x77\x1a\x69\x6c\x05\x92\x10\x41\x25\x2d\x32\xf4\x4d\x6a\xc8\xf5\xe0\xee\x0b\xbb\xfa\xe5\xfe\xb0\xfc\x2d\xc4\xcf\x9e\xc3\x3f\x27\xfe\x1e\xfc\x9b\xbd\x1a\x81\x91\xf7\x8c\x03\x41\x8d\x96\x4e\x33\x0f\x0d\xd1\x9c\x00\xcf\x1c\xc0\x58\x2b\xa9\x29\x10\xca\x73\x44\xbd\xf6\x08\x60\xc2\x24\x47\x52\x31\xa2\xa0\x94\xde\xbf\x13\x7f\xc5\xe2\xff\x50\xc5\x5f\x45\xfc\xc9\x9d\xfd\x3a\xe2\x2d\xe3\xc6\x6b\xc4\xa1\x12\x42\x3a\x2e\x28\xf1\xde\x32\xa8\x81\x70\xca\x58\xc7\x99\xa5\xcc\x71\x2a\x08\x63\xde\x60\xae\x84\x73\x06\x59\xac\x08\x70\x5e\x68\x48\xfe\x3e\x5d\x3a\x71\xc5\xe2\x5f\x58\xf1\xcb\xb3\x09\x6f\x22\x7e\xfe\x1c\xfe\xc9\x8f\xbf\x1f\xff\xe6\xa5\xc4\x84\x6a\x06\x39\xb4\x8e\x13\xae\x34\x46\x58\x63\x63\x15\x45\x48\x02\x89\xb1\xf5\x58\x3a\x6b\x39\x60\xd0\x33\x87\x18\xe0\x0c\x31\x86\x9d\x37\x14\x6a\x63\xf4\x51\x6a\xae\x07\xc9\x1e\x77\xe7\xa6\xdb\x2e\x0d\x27\x3e\xdc\xb9\xc8\x43\x87\xd9\x2c\x9e\xc3\x8f\x91\xc7\xf0\x6f\x3e\x84\x15\x70\x8e\x2d\xe0\x4a\x2b\x84\x2d\x84\x8e\x29\xc0\x34\x40\x90\x09\x84\x24\xd1\x0e\x7a\xe9\x11\x40\x0a\x49\xc4\x04\xe2\x00\x21\x8a\x25\x63\xc8\x38\x64\xf8\x31\x43\x4c\xae\x07\xc9\xce\x2a\x1e\x2d\x86\xe8\x7c\x50\x17\x9b\x46\x8d\x64\xa6\x99\xf0\x26\xcc\x17\xe4\x10\x4e\x54\x4d\xd5\x56\x2a\xa0\x98\xde\xce\x51\x7c\xd3\x5f\x97\x7a\xfc\xc2\xab\xc9\x3e\xbe\xf6\x63\xf9\x1c\xfe\x69\x8c\xb9\x1f\xff\xe6\x90\x81\x26\xc8\x70\x0e\x08\xf2\x80\x68\xcf\x21\x63\x54\x2a\x40\x1d\x37\x0a\x7b\xc2\x01\x56\x1e\x60\xa1\xb8\x55\x9c\x6a\x08\xb4\xa0\x58\x70\xc0\x8d\xf4\x1e\x72\x74\xd4\xf8\xeb\x41\xb2\xb3\x8a\x3f\x62\x71\xd1\x8f\x4d\xac\x91\x87\x8e\x37\x5f\x3d\x87\x7f\x7e\x1f\xdb\x57\x1c\x6f\xce\x11\xe0\xd6\x51\xcd\x29\x22\xd8\x01\x0d\x18\x32\x58\x60\xec\xa9\xe0\x00\x33\xcd\x9d\xf4\x8c\x10\x8a\xb5\x23\xd2\x7b\x0a\x3c\xf6\xd8\x5b\xc3\x29\x64\xce\x30\xfd\x46\xfc\xf5\x20\xd9\x59\xc5\x63\x03\x6c\xbb\xf1\xf2\x0c\x16\x68\x1d\xfb\x48\xb5\x18\xdd\x85\x27\x0b\xda\x5a\xf5\xa3\xe3\x42\x06\x4d\xf3\x99\x4e\x7e\x17\xca\xb7\xb3\x38\xb3\xcd\x25\xfb\x9b\x28\xff\x96\x4d\xc9\x3d\x1e\x16\x5e\x3f\x83\x1f\x7f\xbf\x8f\xe7\x7e\xfc\x9b\x07\x57\x44\x3c\x11\x4c\x5b\x8e\x90\xb7\x50\x70\xaa\x05\xc1\x02\x4b\x27\x04\xd0\xd6\x39\x85\x11\x71\x88\x5a\xcd\x01\x53\x88\x29\x4f\x1d\xb1\x4a\x09\x43\x01\x87\xee\x1b\xf1\x57\xbc\x9a\x07\x2d\x6e\xa9\xb2\x74\x35\x02\xff\xb0\xb8\x87\x0e\x1e\x5e\x3f\x85\x1f\x0a\xe7\x1f\xc3\xbf\x59\xe3\x95\xc4\xce\x5b\x61\x90\x27\x8e\x50\x03\x30\x14\x86\x49\x67\x24\x15\x0c\x61\x05\x1c\xc1\x9c\x78\x02\x2c\x65\xd2\x39\x03\x11\xb1\x04\x1b\xa1\x28\xb1\x0c\x51\xf6\x46\xfc\xf5\xe8\xe4\x0b\x2b\x5e\xbe\xa8\xec\xbd\x29\xce\x9b\x1a\x6a\xf3\x5c\x79\xe5\xf4\xf7\x94\xf7\xe6\x86\xd5\x82\x0a\x66\x8e\x67\x49\x13\xe3\x91\x13\x8c\x68\x44\x11\x94\x44\x28\xc9\x91\xd5\x14\x71\x62\x1d\x22\x8c\x63\xc6\x24\x61\xd8\x01\xc3\x05\x22\xc6\x39\x70\x6a\xd8\xeb\xd1\xcf\x87\x89\x5a\x8d\xc2\xbb\x50\x2f\xfc\xe1\xaa\x44\xea\xbf\xa3\x61\xb7\xcf\x95\x57\x76\x7f\x4f\x79\x6f\x76\x87\xbd\xf7\x0c\x4a\xc8\x38\x64\x5e\x23\x4a\x01\x20\xd8\x2b\x23\x99\x50\x86\x19\x88\x05\x40\xca\x53\xc8\x99\x82\xc0\x1b\x24\x21\x10\xde\x78\x43\x08\x75\x9e\x42\xfc\xd6\xb0\xd7\x83\x7c\xe7\x45\xdc\xa5\x6b\x89\xf2\x8e\x8c\x13\xd8\x84\x4c\x38\xe3\x24\xdc\x2d\xe7\xa0\x30\xac\xf9\x62\xb3\xde\x58\xe9\x3e\x0f\x06\xf5\xdc\x6c\xc2\x93\x17\xa9\xcb\x9f\x88\xd4\x2d\x0d\xb5\x7b\x0e\xff\xe4\x95\xdd\x8f\x7f\x73\x8f\x22\x0c\x48\x28\x00\xa7\xd0\x71\x0e\x10\x61\x4c\x09\x41\xa8\xa0\xdc\x7a\x82\x1d\xb1\x90\x12\x67\x04\xd1\x4c\x2b\xfb\xe6\x05\x53\xc0\xbd\x83\xc8\x43\xab\xbc\x94\xef\xc4\x5f\x19\xa3\xfe\x50\xc5\x5f\x45\xfc\x69\xe6\xff\x75\xc4\x13\x41\x20\x35\x16\x78\xab\xa4\x36\x52\x39\x0d\x3d\xd0\x04\x4a\xed\x35\x92\x92\x7b\xae\x90\x52\x50\x43\xe7\x91\xa3\x50\x01\x06\x90\x61\x10\x02\xe2\x0d\xc2\xc6\xbc\x13\x7f\x65\x9f\xd1\x1f\xaa\xf8\xab\x88\x3f\xcd\xfc\xbf\x8e\x78\x06\x99\x61\x40\x02\xc2\x9d\x17\x5e\x1a\x25\x81\x50\x84\xbf\xfd\x4f\x11\xad\x01\x14\x84\x48\x43\x99\xa4\x44\x2a\x8b\x8c\x62\x80\x4a\xa0\x94\xe6\x04\x31\xee\x8e\xb7\xf5\x5d\x0f\x6b\xbf\xb0\xe2\x97\xd7\x2e\xde\x44\xfc\xfe\x39\xfc\xcc\xf6\x31\xfc\x9b\x13\x39\x96\x0b\x8c\x0d\xf1\x4a\x69\x20\x1c\x43\x0c\x48\x65\x3c\xe6\x90\x58\xa8\x95\x76\x88\x33\x04\x15\xd2\x18\x09\x67\x3d\xe6\x84\x51\x27\xa5\x52\x1e\x0b\x69\xd4\x9b\x3b\x4c\xaf\x47\x57\x5f\x58\xf1\xe3\x3f\x46\xef\x24\xfe\xf0\x1c\xfe\x69\xbb\xcd\xfd\xf8\x37\x9f\x74\x27\x14\x12\x6f\xa3\xaa\x25\x5c\x10\x8f\xb9\xe2\x0a\x70\xe1\xa0\x77\xce\x03\xa7\x31\x30\x8a\x11\x27\x25\xe1\x98\x30\x44\x95\x21\x4e\x01\xc6\x8d\x61\x08\x92\xe3\x19\xed\xf4\x7a\x90\xef\x85\x15\xaf\x3f\x42\x3c\x78\x0e\xff\xb4\xdd\xe6\x7e\xfc\x9b\x27\x80\x9e\x7a\xe0\x84\xc6\x9a\x62\x6c\xad\x34\x56\x01\xef\x39\x25\x40\x3b\x8f\x9d\x74\x50\x62\x26\x01\x03\x5e\x28\xa2\x01\x81\x44\x03\x87\x0d\xd4\x04\x43\xaa\xe1\xf1\x82\xca\xeb\x41\xbe\x27\xdc\x3f\x64\xf9\x60\x75\xe6\xfe\xb5\x2f\x2a\xfb\x25\xee\x2a\x7c\xae\xbc\x0b\xf1\x7b\xca\x7b\xfb\x96\x49\xad\x2d\xd2\x94\x0a\xca\x30\x85\x42\x61\xe1\xa4\xe6\x44\x6a\x4b\xb4\x30\xce\x32\xa0\xa5\xd7\x5a\x73\xc5\x34\x12\xd8\x41\xaa\x9c\x14\x94\x08\x0c\x90\x32\xc7\x1e\x75\x3d\x88\xf8\x04\x51\xab\x0c\x19\xe9\x33\xa2\xcc\xef\x68\x58\xf4\x5c\x79\xdb\xe0\xf7\x94\xf7\xf6\x20\xa5\xd6\xce\x7a\x4d\x91\xf3\x16\x5a\x6a\x25\xc7\x0e\x21\x4a\x00\x20\x44\x21\xae\x05\x84\x94\x73\x84\x21\x41\x12\x3b\xac\x95\xd0\xd0\x6b\x88\x1c\xc3\x46\x21\xf7\xd6\xb0\xd7\x83\x94\x2f\x24\xaa\xfb\x3b\x1a\x16\x3f\x57\xde\x56\xf9\xf7\x94\xf7\xf6\x6d\xfd\x02\x50\x0e\x91\x61\x16\x02\x2f\x1d\x7f\x73\xf5\x8c\xf1\x94\x28\x27\x91\x42\x9a\x68\xe8\xa8\x60\x84\x42\xef\x04\xc4\x58\x21\x82\xb1\x80\xcc\x33\x4d\x19\x3f\x4a\xf1\xf5\x20\xe8\x19\x51\x81\x6a\xa5\x49\x2f\x8e\x6c\x6e\x6a\xf2\xd5\x6a\xbb\x1d\xd4\x50\x74\x34\x1c\x55\xcd\x6a\x88\x6c\x7f\x5f\x2a\x62\x36\xb2\xad\x44\x2a\x7c\xea\xe6\x1f\x13\xcc\xc2\xe3\x61\x7f\xf2\x1c\xfe\x69\x9e\x75\x3f\xfe\xed\x57\x22\x51\x6d\x31\x46\x48\x42\x87\x81\x14\x8e\x48\x21\x98\xf5\xc8\x58\x2d\x35\xc5\x4c\x2a\xea\xa5\x03\x4a\x4a\x8e\x3d\xb0\xd2\x41\x25\x89\x90\x86\x51\x01\xb5\x42\x6f\xc4\x5f\x8f\xc5\x3d\x61\xa1\x03\x08\x27\x67\x9b\x27\x23\xc3\x8b\xca\x7e\x49\x8f\xa2\xcf\x95\x37\xb1\xfc\x3d\xe5\xbd\x79\x0c\x44\xd2\x52\xec\x91\x35\xce\x69\x07\x81\xf2\x02\x00\x4e\x19\xd1\x40\x39\x6f\x9d\x80\x52\x4b\xca\x31\x51\x96\x60\x68\xbd\x20\x88\x03\x46\xa1\xe3\xce\x0a\x25\xc1\x5b\xc3\x5e\x8f\xc5\x9d\x11\x15\xed\x8d\x42\xa0\x1e\x76\x93\x7e\x46\xae\x8a\x7a\x9e\x88\xa0\x0c\xeb\x23\x6e\x27\x31\x50\xab\x0d\x15\xea\x65\x53\xc3\x6d\x2a\x0b\xaa\xa7\x75\x9b\x1f\x3d\xaa\xf8\x78\x5a\x81\x3d\x87\x7f\xea\x51\xf7\xe3\xdf\x9c\xcf\x21\x9a\x21\x4b\x11\x86\xd0\x1d\x33\x67\x98\x4a\xcf\x09\x97\x80\x4a\x8a\x09\xf6\x92\x33\xe5\x15\xf1\x16\x03\x66\x94\x72\xde\x39\xea\xbc\xd5\x5a\x43\x40\x8e\x8b\x25\xe8\xf5\x58\xd9\x4b\x2a\x5e\xb1\xa3\xe1\xfa\x31\xe2\xf9\x73\xf8\xa7\xc8\xc5\xfd\xf8\xb7\xcf\xa3\x20\x46\x5a\x52\x03\xc0\xdb\x68\xef\x2d\x02\x1a\x31\x8b\xb8\x07\xcc\xbc\xb9\x00\x42\x30\x20\x2d\xb2\xd2\x62\x8e\x88\x16\x04\x08\x04\x9d\x60\x50\x70\xa0\xc5\x9b\x73\xc0\xae\x47\x0e\x5e\x58\xf1\x87\x72\xf6\xe2\x39\xfc\x53\xe4\xe2\x7e\xfc\x9b\x0f\x35\x35\x10\x6a\x6a\x08\xb4\x8e\x4b\x88\x99\xf4\x56\x50\xaf\xa0\x31\x1e\x40\x83\xa9\x41\xe0\x6d\xaa\x25\x85\xf7\xc8\x73\x6a\x01\x72\xca\x32\xa8\xbd\xa5\x08\x38\x04\xdf\x88\xbf\x1e\x39\x78\x61\xc5\x1f\x4a\x1d\xcb\xe7\xf0\x4f\x91\x8b\xfb\xf1\x4f\xc4\xff\xd7\x7f\xfd\xf7\x7f\xff\xd7\x7f\xff\xf7\x5f\x31\xb5\x52\x7f\xf9\xe9\xe2\xaf\x82\x1a\xbb\xff\xf9\x6b\xb5\x7b\x6f\x80\xff\xf3\x57\x6d\x3f\x73\xff\xf3\x57\x2d\x88\xe4\xe2\x7f\xc5\x82\x5a\xf0\x7f\xfe\xaa\x9a\x9e\x1b\xab\xff\xf9\x6b\xb6\xd6\xa3\xbe\xf9\x3f\x7f\x15\xb7\x13\xb7\xf8\x9f\xbf\xde\xde\xf3\x5f\x17\x2d\xf9\x63\xc8\x93\x51\xee\xb9\xd2\xc8\x5b\x81\x94\x43\x00\x7b\x40\x2c\x02\xd2\x31\x65\x9d\x01\x8e\x69\x43\x3c\x90\x02\x6b\xe2\x0d\xf6\x8a\x71\x29\x10\x38\x9e\x26\x89\xa4\xe5\x7f\x1f\xc3\x9d\xdf\x5b\x31\x99\x13\xa9\xf2\xa6\x3c\xd4\x59\x94\x0a\x70\xb3\x31\xa8\x2c\xb2\xe3\x41\x0b\x00\x9f\x14\xcb\x5c\x9a\x8f\x41\xbc\xb2\xcd\x34\xc3\x41\xeb\xe8\x29\x9c\x9f\xf4\xf6\x4f\x66\xde\x87\xd3\x04\xc9\x81\xcd\x27\xcc\x45\x59\x81\x4f\x33\x26\xd3\xaf\x1f\x6a\xcd\x4a\x2c\x27\x45\x64\x80\x7d\x63\x91\xa9\x47\xa0\xdc\x26\x36\xd1\x43\x3c\xd5\x13\x93\x49\x38\x7d\xba\x4f\x6a\x54\xce\xd1\xf3\xdf\x37\xbe\x6d\xd4\x8b\x04\x22\xba\x1f\x1c\xe2\xad\x56\xa3\x96\xdf\x4e\x3a\xb5\x40\xa7\x7c\xc6\xcd\x51\x2a\x9a\x38\x04\xcd\x61\x5d\x0a\xbb\x44\x9d\x56\x62\x3e\x68\x55\x48\xbc\x5f\x00\xed\x58\x35\xd0\xe1\x59\x66\xdb\x32\xa0\x36\xc8\xab\x70\xb8\xda\x6f\x09\x5c\xdf\xd4\x13\xd5\x79\x4e\x89\x5e\xb1\x95\x8e\x96\xff\xef\xff\xfd\xfb\x3f\x7f\xfd\x5d\x19\x79\x3c\xdf\x87\xdb\xd9\x75\x3a\x26\xe2\xa0\x3b\x19\x2f\xdc\xb6\xa8\x44\x6d\x3b\x8e\xad\x4a\xdb\xf0\x6c\x32\x8e\xc6\x56\x95\x50\xd6\x7e\x4c\xb8\x7e\xe0\xe6\x9a\xc5\x7c\xe3\xfd\x63\x53\xc9\x29\x40\x78\xe6\x51\xdc\xb1\x61\xb1\x40\x72\xea\x30\x43\xa5\xf0\xe4\x3a\xe0\xd9\xf3\xd3\x13\xf1\x23\x2f\xc6\xff\x49\xdd\x6f\xc1\xbf\x0c\x98\xde\xb9\x10\x64\x51\x9c\xb4\xdf\xd7\x23\x7c\x8a\xf9\xb9\x9a\x3c\x81\x9f\xa8\x35\x23\xeb\x27\xf0\x83\x0b\xfc\x60\x3d\x70\x2c\xda\x8a\xb6\x47\x79\x00\x87\xe5\x7d\xd8\x07\x6d\x89\xa1\xda\x37\x02\xeb\x4d\x44\x6f\x97\xbb\x08\xf1\x19\x1a\xde\xc7\x2e\xae\x7a\xf9\xd9\x91\xa9\x3f\xc7\xbf\x36\x8c\x5c\xb9\x04\xda\x21\xee\x35\x12\x82\x03\xa3\x29\xa2\xcc\x29\x89\x38\x23\xda\x68\x84\x90\xb2\x5a\x2b\x45\xbd\x33\xc8\x0a\xa9\x18\x52\x52\x29\x61\xa4\x11\x0e\x39\x27\xdd\x31\xd1\xf5\x12\xf1\xb9\x8c\x31\xfe\x60\x74\x7c\x14\x74\xd2\xb3\x68\x65\x5b\x5d\xb5\x8b\x0b\x94\x5e\x44\x98\xea\xb7\x72\xc9\xf0\x76\x59\x68\x0c\x53\x91\xf6\x2a\x92\xcd\xf4\x27\xeb\x74\xe1\x14\xb3\x6c\x04\x9b\xe1\xf9\xfb\xbe\xbb\xf9\xf1\x68\x50\x9f\x15\x43\xbd\x5d\xbf\xab\xc2\xed\x6e\x65\xd9\xc0\x8b\xc4\x2c\x92\xd9\xdb\x6e\x71\x3f\x01\xb5\x52\x7a\x9c\x89\xaa\x72\x34\xdf\x1f\x0e\xfb\xc9\xd0\xb2\xd0\x5a\x94\x23\xcb\x76\x6b\x90\x59\x8c\x8a\xfd\xe4\x20\xb9\xac\xe3\xc5\x90\xac\x37\xc9\x91\xa0\xc1\xa2\xdf\x8e\xc9\x52\xa1\x9d\x7a\x13\x82\xce\x3a\x13\x5e\x4e\x7b\xdb\x3d\xcc\x34\xd9\x2c\x83\xaa\x62\xd9\xcf\xae\xd6\x6c\xe6\x79\x14\x65\x66\xfd\xb9\x9a\xe7\x27\x69\xb2\x66\xee\xa3\x68\xcf\x88\xcc\xf9\x0f\xee\xec\xe4\xbb\x3a\xec\xea\xe2\x2f\xb1\x3f\xef\xe4\x2f\xc4\xff\x31\xc6\x7c\x03\xfe\x99\xc8\x9c\x7d\xf1\x91\x4e\xbe\x3c\x8b\x17\x3c\xe4\xb2\x3c\x8e\x3f\xe7\xe1\x5a\xcc\x3c\x81\x1f\x5c\xe0\xc7\xd6\xf5\xc8\xb0\x3f\xcc\xa4\x22\x59\xd8\x65\x9b\x76\x7f\x99\x9a\xcd\x33\x66\xa9\xc3\xd1\x2d\x6c\x96\x4d\xa2\x0f\xe2\xd3\x71\xd6\x91\x2e\xbc\x48\xe8\xff\xc4\x08\x3e\xc1\xbf\x49\x64\x9c\xb4\x50\x61\x00\x80\x72\x0a\x33\x4e\x30\x24\xc8\x23\x67\x1d\x04\xcc\x62\xa3\x31\x37\xd8\x72\x27\x04\x05\xc2\x61\x8f\xa0\x26\x92\x61\x0e\x34\x15\x0c\x0b\x7a\xcc\x2d\x9e\x89\x4c\x91\x96\x93\xd5\x6c\x79\x68\xe2\x8b\x66\x6c\x2e\xfb\xd9\xad\x1b\x4f\x47\xfb\xdd\x46\xe4\x62\x8d\x4e\x64\xdb\xcc\x95\xab\xfd\xf6\x8c\xf7\x63\xc7\x13\xb3\x3b\x1f\xa5\xbf\x7a\xd8\xca\xe9\xb9\x5c\xee\x71\xf9\xf9\x4f\xf6\xe9\x5e\x7b\xaa\xdf\x44\x28\x12\x54\x0f\x20\x58\x75\x5c\xe1\xd0\xaa\xb6\x86\x83\xd2\x30\x9b\xf1\xc5\xb8\x50\xf5\x5a\xb0\x2e\x55\xd8\x6c\x97\xcf\xeb\x04\xc6\x7c\xbb\x8b\xe3\xed\xa1\x58\x8b\xa9\x86\x89\x95\x51\x81\x96\x70\x5c\xe6\xb3\x26\xe4\xb5\x4e\xf4\x3a\x32\x1b\x02\x3c\x94\x01\xdb\x7c\x72\xb4\xaa\x44\xde\x05\x81\xd9\xe4\x20\x08\x16\xf3\xc2\xa4\xbc\x2b\x6f\x72\x2b\x52\xd6\xb5\xfd\xc1\xc7\x60\xa8\x9f\x88\x16\x4b\xfb\x24\x18\x0d\x4c\xae\x99\x2c\x26\x3e\x22\x8d\xd7\xc5\xa6\xfe\xcf\x06\xfd\x99\xd8\x9c\x19\xc0\x03\x62\xdc\x87\x17\xe4\xfe\xf8\xfc\x42\x6c\x5e\x87\xff\x98\x47\xf3\x31\x3f\x3a\x3b\xf2\xe2\x91\xce\x76\x9a\x1f\x45\x3e\xc3\xfc\x5c\x6c\xfe\x10\xfe\x4d\x9d\x5d\x4a\xaa\x25\x62\xd2\x4b\x2f\x0d\x31\xd0\x29\xe3\x38\xa5\x00\x42\x21\x38\x63\x96\x39\xa1\x1c\x01\x86\x12\x88\x21\x02\x02\x42\x45\x01\xc1\x9c\x09\x6c\x34\x3f\xde\x47\x4b\xcf\x56\xce\x3c\xde\xd9\x3f\xf1\x28\x7e\xd5\xd9\x3f\x79\x8e\xdf\x8f\xa1\x1a\x85\xf9\x3e\xf2\x83\x71\xb4\x4d\x3a\xa1\x0a\xcd\x14\x0b\x30\x37\x5a\xcf\x0f\x8b\xc9\x6c\x5c\xdb\xd5\x33\xad\xda\x2c\x1c\xe0\x44\x65\x7b\x41\xf2\x99\x38\xc4\x66\xc3\x7c\xde\xf0\xe1\x70\xd8\x1e\xc4\xa6\xa5\xad\xaf\x8f\x8a\x71\xb9\xca\xb5\x37\xcd\x54\x3a\x3c\x0e\x45\x22\x2e\xdc\x8d\x66\x0b\xd0\x34\x36\xf1\x04\xac\x47\x1a\x2e\x1a\x5d\x27\x23\xb5\xc1\x7a\xb1\x27\xb5\xf9\x74\x37\x1b\x65\x47\xa4\xd0\x49\x65\xaa\x35\x1a\x2e\x2e\x16\xa4\x15\x7d\xef\xc0\xe3\xc6\xba\xaa\xfc\x84\xee\xf2\xa9\xf9\x61\xd2\x28\xc7\xdb\x3d\xa4\x9b\x2c\x4b\x83\x5d\x3d\xbe\x4b\xa7\xe3\xaa\x1e\x2f\xa0\xae\x58\x81\x0f\xbf\xf2\x5f\x22\x0e\x8f\x79\x22\xaf\xc3\x7f\xcc\x13\xf9\x12\x71\x78\xc8\x13\x79\x35\xfe\x27\x5b\xf5\x4f\x9c\xc8\x61\xc8\xd6\xd2\xab\x09\xa1\xdd\x71\x31\xe9\x87\xae\x5a\x1b\xd8\x2a\xd5\xf3\x25\xa3\xac\x33\x14\x8d\x68\x03\x30\xbf\x2d\xec\xea\xe6\xf2\x7d\xb7\x08\x8a\xe7\xc2\x1a\x25\x11\x23\x94\x52\x2e\x35\x51\x04\x03\x20\xbd\x77\x98\x2a\x80\x90\x54\xcc\x2a\xa2\x9d\xc5\xc8\x62\x23\xa5\x3c\x5e\x61\xa5\x2c\x62\x0c\x50\x85\xe8\x49\x50\xf0\xf3\x82\x72\xb9\xf0\xe7\x5e\x41\x39\x33\x94\x23\x71\xd1\x8f\xef\x5f\x6d\xe8\xc8\xf7\x86\x89\xc7\xba\xa3\x4a\x65\x3f\x5e\xe5\x06\xdb\x50\x7a\x3c\x4e\x6e\x6b\xfd\x48\x2d\x1b\xe7\x2d\x1e\x42\xd1\xfd\x76\x94\xda\x8a\xb9\xb3\xa1\x15\x45\xa0\xaa\x83\x6e\xd7\xcc\xf5\x74\x4f\xb3\xad\x8c\x8a\x97\x28\x0c\x6f\x2b\xd5\xfc\x6e\xd5\xa9\x77\x63\xc5\x84\x57\xb1\x89\x8c\x79\x40\xe2\xc1\x5b\x67\x96\x04\x67\x87\xe3\x4a\xa3\x41\x57\xd9\xf2\x36\xea\xc3\x83\x66\x37\x3d\x9b\xad\x66\x39\x5e\xcb\xd5\xf6\x9d\x49\x6b\x9a\x5c\x54\x3b\xdd\x66\xff\xa3\x8e\xff\x12\xa1\x88\x5e\xf0\xfd\xfe\xc4\xff\x59\xb6\x52\xa7\x34\xa9\xef\x73\x9d\x50\xb1\x9d\x19\xf4\x26\x34\x35\x1c\x12\x5c\x5f\x37\xd9\xa2\xb8\x76\xe3\x4e\x29\x51\x1e\xd9\xe2\x44\xc4\x4c\x23\x75\xf5\x7d\xe5\x8b\xba\xdd\x69\x3f\xc1\xa8\x9c\x23\xa7\x83\x30\x4e\x05\xbb\x1c\x10\x2e\x79\x7c\x76\x80\xf9\xe0\x20\xfa\x81\xf7\xbf\xb2\xfc\x2f\x14\xb2\x9f\x9d\x39\x92\xfe\xc7\xc1\x67\x5f\x2c\x64\x4a\x02\x41\x1d\xc4\x5e\x3b\xe9\x05\x71\x80\x3b\x8c\x80\x02\x96\x10\x4a\x31\xb3\x0e\x2a\x6f\x90\xf1\x56\x18\xee\x08\x14\x8c\x09\x2e\x00\x77\xd6\x22\x4d\x84\xe4\x7f\x1f\x0f\xb5\x7e\xc1\x34\xe8\x92\xed\x7b\xa7\x41\x3f\x19\x21\x2f\x9e\xfe\x87\xa7\x43\x4a\x95\xc0\x01\x37\x09\x03\xda\x49\xa1\x91\x8b\xba\x5a\x71\xb9\xd3\x35\x60\xea\x6b\xbc\xed\xd6\xfb\xcd\xba\x59\xc7\x86\x64\xaf\x44\x32\xdc\x4d\x4b\xd0\x1b\x35\xd8\xec\x50\x6c\xef\x83\x08\xeb\xac\xa8\x2f\xf0\x59\x65\x51\xaa\xe4\xc2\xab\xda\x68\x32\xe8\xd6\x83\x81\x8a\x6c\xbe\x35\x44\x24\x48\x8c\x6d\xb2\xc2\x32\x9d\xf5\x30\x9b\xa9\x47\x71\x63\x81\xda\xf1\x4c\x18\x91\x24\x5e\xb9\xe5\xbc\xb6\x21\xa6\x41\xeb\x26\x98\x1e\x2a\xbd\x2a\x0a\x6d\x41\xa9\xdd\x68\xcc\x1d\x2f\xd7\xc6\xc5\x7c\xa1\x9a\x6c\x85\xa3\x38\xb7\x2b\xc1\x55\x75\x33\x6b\xd9\x7a\xb8\xd8\x6b\x2f\x8b\xb1\xed\x49\xc4\xe6\xe5\x9e\x8b\x87\x37\xb3\x50\x9c\xa4\xc8\x3e\xda\x85\xf1\x46\x4d\xbb\xe4\x66\xbb\x0c\xb7\x77\xa1\x72\xbb\x33\x75\x81\x5f\x81\x45\x35\xf3\xab\xc0\xf1\x8d\x02\x79\xb6\x2e\xe4\x11\x81\x34\x1f\x2f\x8d\x5d\xb4\xe3\xb7\x36\x8c\xfe\xe3\xe4\xbb\x97\x08\xe4\xd9\xf2\xb3\x47\x04\x66\xf2\x61\x5c\x3f\x99\x96\x44\x82\x6e\xfa\x4c\xf0\x5f\x2d\x90\xff\x2b\xcb\x9f\xfc\xf8\xfb\x11\x81\x3c\xa5\xc9\xce\x8f\x93\xbc\x2c\xf4\xb1\xcc\xbf\x4f\x20\x81\xd7\xd2\x20\x87\x80\x24\x0c\x21\xa4\x11\x76\xd0\x42\xcb\x18\xb0\x4e\x5a\x4e\x28\x67\x86\x40\xe3\xad\xd4\x50\x4a\x2f\x2d\x65\x54\x01\x88\x0d\x74\x5e\x48\xa3\xfe\x3e\x1e\x3e\xff\x82\x60\xf4\x27\x9e\xde\xbb\x8d\xb8\x45\xa2\x5c\xc9\x55\xe6\xe1\x1e\x6e\x79\x12\x8f\x2f\xe2\xf3\x03\x9f\xc6\xe4\x76\x88\xc0\xa1\x15\xb2\xe1\x1e\xb1\x2d\xc3\x63\xb5\xe3\x5a\xda\x4f\x82\xd1\x31\xb1\x4a\x27\xf6\xd3\xae\x2c\xba\xe8\xbc\xaf\x22\x05\xbf\x4b\xd8\x60\x34\x71\x85\x76\xcd\x0f\xa6\x85\x7a\x3e\xdb\x67\x89\x4c\xb4\x4d\x23\x73\x37\x9e\xc4\x22\xbb\xe4\x74\x87\x07\xd9\x6a\x78\xb7\x23\x87\xd9\x2e\xa8\x4d\xe3\x89\x19\x6e\xa3\x7c\xa8\x50\xc9\xa4\xeb\xa4\x1b\x4e\x81\xcc\x9b\xb8\xc4\xf8\x24\x4a\xba\xa3\x64\xba\xbf\x1c\x10\x9b\x6a\xb6\x0b\xcc\xda\x84\x5d\x96\x4d\xb8\xb3\xec\x4c\x28\x6c\x36\xbb\x71\x91\xda\xf4\xcd\xc7\x76\xb6\xa7\x82\xd1\x8f\x67\x9c\xd6\x61\xb0\x45\x67\x6b\x3c\x1f\x9a\x82\xbd\x10\xff\xc7\x25\xfe\x37\xe0\x9f\x05\xa3\x53\x67\x1f\x3d\x10\x0c\xd6\x67\x23\xc5\x43\x1b\x51\x9f\xc0\xdf\x2f\xca\x89\xdc\x13\xf8\xc1\x05\x7e\x40\xd9\xb2\x11\x89\xaf\x92\x8b\x50\xca\xda\x70\xb7\x5c\x5d\x56\x17\xa5\x75\xb7\x84\xa3\x35\x5d\x2b\x78\x8a\x43\xa9\x1e\xb4\x87\x65\xa1\x78\x91\xf1\x8a\x7c\x4d\xc6\xcb\x5a\x4e\x9c\x73\x88\x2b\x2a\x05\xc1\x1a\x09\x05\xa8\xb2\x40\x28\xed\x19\x75\x4a\x21\x0c\x35\xb7\x4e\x3b\x62\x01\xa5\x14\x18\xa0\xb8\x22\x88\x18\xa3\xa8\x44\xf2\xef\xff\xfc\x75\xbe\x3e\x2b\x36\x99\xef\xea\xf1\x2a\x50\x1b\x62\x21\x0e\x45\x22\xd9\x5d\x76\x19\x62\x41\xd8\x64\x0a\xab\x3c\x0c\x4f\x3c\x71\xa9\x06\x2e\x6e\xc1\x71\x19\xd1\xa9\x83\x5d\xaa\xe3\xc7\xf4\xcf\x5d\xaa\xfd\x33\x0b\xd9\x32\xfd\xe6\x99\x33\x11\xf9\x4e\x72\x3c\x32\x18\xd2\x78\x62\xde\x10\xc9\x7e\x4e\xee\xea\x0c\x15\xeb\xd1\xac\xab\x9a\xd6\x2e\x99\xaf\xe5\xe7\x99\x69\x8c\x2f\xf6\xfd\xa4\xa7\x83\x5c\xa9\x93\xa9\x54\x67\x3d\xdd\x8c\xe2\xce\xde\xa4\xe2\xa1\x59\x6c\xbd\x0e\xb3\x78\xb6\x3a\x37\x85\xfa\xa2\x4f\x83\xd6\xa1\x3c\xce\x87\x92\xed\xc8\x9b\x30\xe0\x56\x6d\x4d\x26\xb3\x4e\x2f\xb6\x9c\x4e\x13\x8b\x72\x7f\x21\x47\x6c\x9e\xde\xad\x24\x0b\xd5\xca\x8d\x46\x2c\x98\xb1\xf2\xf0\x90\x6d\x56\x7f\x95\x01\x8b\xff\xb3\x61\x7f\x22\x3a\xe7\x4a\xf1\x80\x28\xbf\x7b\x4b\xe6\x13\x4b\xfb\xbc\xd3\xbf\x10\xff\x89\x0c\xdc\xb3\xa2\xf3\x6c\xa7\x3f\x96\x31\xfd\x0c\x3e\x2a\x8e\x9e\xc0\xcf\x5f\xe0\x3f\x22\x3a\xef\xde\xd0\xf5\xe9\xed\x9d\xf5\xbf\x1b\xbf\x66\xc0\xe6\x41\xfc\x9b\x44\x0f\x51\x0a\x1d\x67\x0a\x1b\x47\x84\x80\x9a\x6b\xc3\xb1\xb7\xde\x0a\x69\x19\x07\x96\x42\xe8\x14\xb7\xc4\x51\x06\x29\x43\x14\x69\x0a\x39\xe7\x00\x61\x04\x90\x75\xfc\x24\x7a\xe8\x79\xd1\x8b\x5e\x90\x96\x50\xc9\xc6\x52\x27\xbf\x2f\x38\xfb\x41\x00\xee\x3c\xec\xfb\xfd\x89\xb6\x47\xe7\xd7\x88\x7f\xef\x74\x91\xa0\x8a\x42\x79\x55\x0a\xb8\x0c\x06\x31\x10\xe1\xf3\xc1\x08\xcc\xe3\x07\x50\x60\xd1\x61\x6c\x3c\xad\x92\x61\x77\xd2\x1a\x74\xbc\xde\x58\x23\xd3\xc3\x79\x61\x0c\xaa\xa1\x4d\x36\x52\xe8\x36\x04\x98\x55\x7d\x7f\xd7\x86\x84\xe7\x42\x83\x4d\x35\xdc\x55\x93\xe9\x66\xae\x73\xfd\xe0\x7d\x8d\x51\xa6\x91\x9a\xa8\xc1\x61\xd8\x8f\xac\xf8\xee\x10\xf6\x28\x03\x27\xb1\x46\xdc\xcd\x64\x6d\xd4\x6e\xb4\x47\x59\x98\xc0\x26\x9a\xef\xe6\xdc\xaf\xa6\x8a\x5f\x2f\x7e\x75\x5c\xc8\x89\x8f\x76\x79\x48\x7c\x5e\x88\xff\x98\xc7\x77\xfc\xcf\xcb\xce\xff\xbb\xc5\xe7\x69\xf1\x5b\x9a\x56\xf8\x4f\x8a\xdf\x85\xf8\x3c\x94\x74\x78\x06\xbf\x8a\x16\x8d\x07\xf1\x6f\x12\x3f\xac\x31\x73\xc6\x6b\x63\x90\xb2\x1a\x18\xef\x3d\x10\xca\x09\xf6\x36\x89\x64\xc4\x41\x24\x05\xf1\x40\x10\xad\x01\xd6\x4e\x6a\x8d\x88\x64\x10\x5a\x2f\x10\x46\x48\x9f\xc4\x0f\x3f\x2f\x7e\x67\xd3\x8a\x7c\x24\x28\xc7\x6f\xfc\x7f\xf0\x1b\x3c\xc2\x58\x54\xf6\xf2\xab\x7c\xbb\xc3\x7a\x7a\x07\xfb\x81\x6d\x4d\xba\x15\x13\x6d\x97\xc7\x5e\xb8\x35\x39\x98\x88\xac\xe6\x52\x48\x4a\xb1\x6a\xb4\x8d\x62\xe5\x76\xbf\x4b\x63\xcb\xee\x1e\x4d\xa3\xf9\x18\xcc\xf0\x61\x2f\x9d\x93\x83\x43\xb8\xd1\x1c\x98\x52\x6f\x53\x6b\x6c\xa2\x22\xf7\x26\x5c\xc5\x83\x5e\x86\xc4\x76\x8e\xb6\x87\xb0\x48\x2f\xa6\xed\xce\x04\xd5\x7a\xd9\x76\x6d\xdb\xcb\x2d\x63\x9b\xd9\x7a\x5f\x6d\xc6\x6d\x28\x9a\xef\x7f\xec\xe4\xf8\x63\xa2\xb8\x9a\xc3\x33\x8f\xec\x21\x51\x7a\x21\xfe\x43\xd3\xd0\x17\x89\xe2\x93\xa2\xf4\xb4\x28\xae\xa2\xbd\xce\x9f\x14\xc5\x0b\x51\x7a\xb6\xfe\xf7\xe3\x97\xdf\x0f\xa1\xbb\x1f\xff\xb6\x35\x59\x90\x08\x41\x8d\x66\x4c\x79\xea\xb9\xa7\x4e\x4a\xa8\x01\x24\xce\x19\xc2\xa9\x61\xd0\x18\x81\x21\x92\xc8\x78\x4a\x11\x33\xd6\x02\x63\x15\x24\x14\x03\x20\xf0\xbb\x47\x48\x9e\x17\xc5\x73\x65\x8b\x9e\x02\x8e\xb7\xfc\xff\xf2\xa7\xc1\x57\x4c\x93\x8b\x7e\x2e\x4b\x65\x11\x4f\x9a\xd9\xa0\xd2\x8c\xab\x79\x72\xb7\xe9\x45\x06\xd5\xc6\x7a\xc8\xb2\x34\x40\x8b\x55\x2f\xd7\x4e\x4d\xc6\x41\x6b\x5c\x86\x99\x41\x26\x86\xe3\xd6\x0e\xfa\xf1\x2a\xd6\xa5\x4e\x3d\x41\x9d\x4f\x96\x37\x95\xc1\x34\x9e\xed\xf6\x23\xc8\xd6\xb1\x47\xdb\xc4\x9b\x70\x91\x7a\x3f\xb1\x47\x6a\xd3\xc2\xd2\x8d\x2b\xcb\x48\x6d\xbd\x4b\xb5\x92\xa9\x7c\x77\x97\xad\x1e\x60\x7d\x7c\xb0\xb1\xc2\xb4\x5e\xdf\x46\x63\xff\x02\x4f\x71\x98\x76\x67\x9e\xda\x43\xa2\xf4\x42\xfc\x9f\x00\xfd\x16\x51\x7c\x52\x94\x9e\x17\xc5\xe9\xfc\xf0\x47\x45\xf1\x9f\xa2\xf4\x13\xa0\xaf\x13\xc5\xca\xbc\xdd\x7b\x10\xff\xc6\xd5\xf0\x06\x09\x03\x8c\xb1\x54\x21\x47\x38\x40\x4c\x29\xa3\xbc\x42\xc7\xfb\x6e\x29\x80\xde\x51\xeb\x30\x91\xce\x63\xce\x0c\xf0\x42\x79\x2d\x24\x36\x5c\x6b\x4a\xed\xdf\xff\xf9\x4b\xbe\x24\x01\xf1\x49\x86\xf6\xf4\xc4\x2c\x2c\xe2\x69\x10\x63\x9d\xf1\xd2\x16\x9c\x6c\x93\x83\x4d\x97\x9b\x70\x51\xdb\xa4\x7d\x10\x6f\xf7\xc3\xa0\x3f\x92\xc3\x44\x7b\x74\x5c\x58\xfc\x49\x02\x22\xa8\xc4\x58\xbe\xd1\xec\xc6\x83\xea\x7a\xe9\x7b\x0b\x96\xb1\x09\x99\xc5\x95\xbe\x43\xad\x68\x25\x93\x1d\x85\x0b\xd3\xec\x3e\x63\x16\x16\x0e\x93\x4b\xbc\xef\xce\x66\x94\xee\xd6\x02\xb4\x47\x89\x6d\xb7\xd0\x88\x2f\x3a\x61\x13\x0f\x52\xed\xe2\x1c\xb0\xe8\xb6\xe0\x27\x71\xb4\x8c\x1e\x57\xc3\x2f\xb3\xf9\x58\x1e\xaa\xdc\xd0\x44\xd5\x7c\xbf\x99\xae\x0f\xb5\x5d\x39\x15\x6a\xb9\x42\x86\x1f\xec\x32\x46\x16\xbc\x5f\xdb\xf1\x55\xe3\x63\x17\xff\x33\x09\x88\xe8\x59\xc3\xdf\x99\x00\x58\x2e\x54\x76\x79\x16\x40\x78\x4c\xe4\x5e\x87\xff\x90\xc8\x9d\x25\x20\x32\x67\x1f\x3d\x20\x32\xbb\xb3\xe1\xf1\xa1\x4e\xfe\x04\xfe\xac\x33\x5a\xf6\x9e\xc0\x0f\x2e\xf0\x83\x02\xae\x73\xd7\x0d\x4a\xb3\xb1\xda\x01\xc8\xe1\x60\x50\x00\xbd\x88\x6e\xae\x8a\xa2\x27\x82\x4a\x3f\x17\xae\x66\x5b\xa8\xdc\xe8\xb7\x2e\x12\x10\xd1\x97\xec\x55\xfe\x71\x3d\x9b\xd5\x4c\x32\xc5\x25\xd7\x9c\x1d\xcf\x6c\xd4\xca\x59\xac\x28\x70\x44\x31\x25\x18\x87\x10\x4a\x86\xa0\x67\x54\x61\x2f\x29\x51\x58\x1b\x0f\x01\x30\xdc\x79\x60\xfe\xfe\xcf\x5f\xf0\x7c\xbf\x6c\x80\x6d\x6d\xc5\x82\x20\x34\xee\x2c\x52\xb5\xd6\xa6\x59\xcc\xe3\x6a\x3c\xb1\x52\x80\xef\x53\xdb\x48\x32\xbd\x91\xe9\x99\xef\x44\x9a\x99\xe3\x5d\xaa\xa7\x53\xa1\xce\xee\x42\xfd\x78\x2e\x83\x73\x0f\x06\xdf\x5a\x90\x94\x2f\x99\x7a\xcc\x35\x8b\xf8\xd6\xd9\xfd\x3b\x41\xe4\x7b\x2b\xc5\x83\xdd\x7e\x44\xbb\x9b\x68\x34\x16\xe5\x23\x30\x9b\x4b\x1d\x8e\xac\x2c\x36\xc5\x7a\xdd\xb4\x65\x65\x03\x82\xdc\xae\x31\x58\x8f\x48\xbc\x51\xcd\xc1\xc6\xbe\xbb\x80\x80\x27\x07\xb1\x29\x84\xa1\xf6\x72\x6b\xc7\xa3\xe8\xba\xe9\x79\x36\xbd\xaa\x03\xd3\x1b\x4d\xbb\xb3\xc9\x92\x1c\xe7\xab\x61\xad\x9a\x33\xea\xb0\xaa\xd8\xe5\x7a\x0d\x58\xbd\x58\x1d\xcf\x93\xa6\x92\x6c\xa6\x7d\x47\x95\x68\x23\x5b\x14\xa2\x1c\x4b\xf1\xed\x47\x41\xf7\x9f\x70\x78\xfd\xef\x4f\x54\xec\xcc\x17\x7d\x40\xe5\x07\xc5\x8f\xf6\xfd\xc9\xf3\x0b\x15\x7b\x1d\xfe\xbd\x41\xc5\x68\xf0\x4f\x57\xed\x0f\xaa\xc8\xb1\x8c\xd9\x27\xf0\xfd\x20\x3b\x7a\x02\x3f\x7f\x81\xff\x88\x8a\x9d\xf6\xbf\x47\xaf\x2e\xf9\xba\xb7\xfe\x77\xe3\x17\x13\xdd\xf4\x13\xf8\x1f\xeb\x97\xce\xed\xf1\xce\x51\x75\xde\x22\xfb\xd9\xb3\xa3\xea\x33\xf8\x9d\x76\x36\xfb\x04\xfe\xd3\x7a\x50\xeb\xb5\xa3\x4f\xf4\xc7\xa7\xf5\xa0\x1a\x0d\x7a\x0f\xe2\xdf\xe4\xae\x73\x06\xa0\x42\x46\x21\x88\xb4\x20\x40\x22\xc5\xdf\xdc\x74\x04\x21\x47\x9a\x71\x4f\xb4\xc4\x96\x23\xcd\x11\x53\x80\x19\x4a\x80\x84\xdc\x22\xa5\x05\x36\xf0\x78\xa5\x2a\x84\x2f\xf1\xd7\xaf\xde\x81\x7b\xfe\xec\x1a\xe3\x38\xe8\xc7\x67\xb2\xca\x41\xdb\x0e\x17\xbd\x60\xcd\x6c\x8d\x0c\xaa\x93\xd2\x46\xd7\xd7\x87\xfe\xaa\x4c\xa6\x11\xe3\x55\xec\xd8\xf3\x3f\xf1\xd7\x23\xa9\xdc\x70\xca\xc2\x35\xbd\x01\x9b\x30\x8d\x36\x53\xc3\xfe\xae\x35\xd1\xfb\x69\x9d\xcd\xcb\x6c\xef\xb6\x9d\xe4\xbc\x94\x4a\x54\x0f\x85\x5d\xde\xaf\xad\x60\xae\x9d\x1c\x16\xc0\x80\x8c\x97\xf9\x68\xcb\xe7\x82\xe9\x9a\xf7\xb3\xc5\xc6\x04\xe4\x9b\xfb\xc3\x68\xb6\x69\x57\x02\x70\xcc\xdd\x77\x50\xa0\x72\xd9\x74\x75\x1d\x8f\x56\x67\xb2\x94\x48\x57\xcc\xa2\x13\xae\xd2\x52\x2b\x8b\x33\xf3\xc8\xb2\x11\x0c\x5b\x60\xbe\x8e\x6d\xd5\x47\x8b\x3d\xe5\xaf\x3f\xbe\x60\xe7\xd8\xb3\x62\xbf\x30\xa1\x5f\x5a\xf6\xeb\xf0\x2f\xdb\xff\x26\xfc\x33\x7f\x3d\x77\xf6\xd1\xbd\x23\xcd\xa8\x3b\x9d\x9e\x45\x02\xea\xd7\x11\x3f\x57\xfa\x27\xf0\xbb\x15\x3b\x6f\x3f\x81\x1f\x5c\xe0\xc7\x12\xcd\x76\xad\x9a\xae\x4e\x60\x6e\x53\xe9\xa1\x37\x6b\xe4\x33\x58\xea\x17\xb2\x26\x24\x57\x55\x5e\xcc\xc2\x58\xbf\x9b\xd8\xc9\x69\xfe\xe2\x92\x90\xe8\xd7\x2c\x18\x02\x0e\x22\xc1\x08\xd7\x48\x4b\xcc\x05\xd3\x4c\x73\xe6\xa0\x40\xd6\x58\x05\x20\xc7\x9c\x72\xc0\x98\x17\x46\x79\x40\x11\xb6\x50\x2b\xac\x09\xf7\x96\x79\x8e\x80\x7d\x53\x99\xf3\x73\x42\xf3\x8d\x4e\xaf\x90\xee\x65\x7d\x7d\x2d\x93\xa9\x4e\x96\x94\x73\xeb\x49\x3d\x94\x06\xb3\x03\x47\x30\xb7\x24\x8b\x7a\x31\x1b\xb4\x52\xa8\x7b\x3c\x47\xf4\xd4\xc3\x8e\xb9\x91\x4f\xb6\xaf\x9e\x9e\x6e\x38\x1b\x8e\x8c\x16\x32\x51\x0c\x4f\x1a\xf1\x64\xce\x8e\xa3\x87\x68\x2f\xdf\x9e\x8d\x4d\xf9\xb0\x4b\xf7\x12\x63\x56\x88\x1c\x76\x87\x49\xeb\x34\xe3\x4e\x19\x38\x3a\x7f\xdf\x77\x56\xe3\x91\x6d\x5b\xa6\xca\x41\x05\x55\xf3\x25\x87\x33\xa5\xcd\x38\x12\x59\x45\x86\x68\xe0\xa7\x5d\x90\x4c\xc4\x13\xed\x61\xae\x90\x38\x94\x0b\xf3\x4d\x7b\xc4\xfb\x9d\xfe\x6a\x5c\xa4\x89\xf2\x78\x98\x1d\x6d\xc2\x85\x22\xed\x18\xd5\x8c\xcc\x5b\x26\xd5\x2b\x96\x67\x43\xb0\x44\xad\x6a\xa4\x7c\x0c\x7d\xc6\x7a\xd9\x64\x85\x67\x69\x81\x28\xb4\x42\xa4\x9d\x33\xa8\x9b\x38\xd8\x56\x64\x1c\xca\x2f\xb6\xf5\x01\xd0\x53\x5e\x09\xc3\x8d\xe9\xbe\x26\x2a\x70\x3e\x95\x7f\x40\x85\x07\x93\x0f\xfe\x7f\xf2\x7c\xde\xcb\x5f\x88\xff\xec\x41\x1c\x67\xbd\xf4\x91\x5e\x76\x3a\xc8\x2a\xfa\xf8\x0a\x99\x27\xf0\xd3\xa8\x34\x61\x4f\xe0\x07\x17\xf8\xd1\x98\x58\x88\x64\x73\x03\xea\x3c\x64\xeb\xe5\xf6\x0a\xb5\x73\xf9\x6c\x7c\xd7\x1f\x77\x76\xb1\x52\xbc\x1f\x6f\xea\x29\x48\x95\x52\x45\xeb\x4f\xef\xb4\x87\xe6\x49\xd9\x7e\x12\x1a\xfa\x04\xff\x26\x95\x31\x56\x28\xe1\xa4\xd3\x14\x7b\x8b\x98\xb0\x10\x49\xe2\x10\x12\x52\x52\x83\xb8\x27\x08\x59\x09\xb8\xc0\x86\x00\x4a\x1c\x21\x4a\x03\x80\x84\x37\xd0\x2a\x04\x81\x7a\x53\x99\xd7\x1c\x03\x94\xbc\x28\xfe\x0f\x56\x37\xe8\x93\x52\x79\x66\x58\x26\xdf\x5c\xd1\x20\x42\x59\xb3\x95\x8e\x4f\x67\x90\x94\x26\x7c\xd5\x64\x6b\xcf\x76\xf1\xd0\xa6\xcd\x3b\xa7\xe3\x13\x3f\x8b\x3d\xd6\x57\xb6\xdd\xdc\x2f\x18\xd9\x6f\xc2\x8b\x6c\x69\x01\xc2\x9b\x06\xd9\xb4\xf7\xd3\x89\x5f\x36\x77\xb3\x5d\x6a\xd9\x6f\xe7\x52\xd9\x0c\xd6\x63\x36\x0c\xed\x67\xfd\x20\xb2\x37\x62\x05\xb2\x21\xae\x0f\xbb\x6a\xae\x34\x18\x0f\xb2\xd9\x02\x2d\x2d\xb6\x3c\xb0\x6e\x32\x8a\xf2\xfc\xd1\x97\x39\xb4\xe7\xc5\xc9\xa2\x1e\x06\xe3\x41\x25\x5b\x27\xfd\x7e\xa7\x15\xf5\x20\xbd\x1a\xa6\xba\xa2\x9c\xa8\x0d\xab\x8b\x20\x3a\x10\x29\x95\x2e\xbf\x66\xf1\x73\xec\xf1\xd8\xdf\x34\xde\x52\xa3\xca\xc7\xcf\x1f\xf2\x25\x5e\x88\x7f\xd9\xfe\x37\xe1\x9f\xa9\x4c\xe1\xec\xa3\x07\x7c\x89\xc6\x19\x50\xfb\x3a\xe2\xe7\x2a\xf3\x04\x7e\x53\xaa\x65\xe2\x09\xfc\xe0\x02\x3f\x5a\xcc\x75\x65\x74\x74\x98\x0e\x77\x0a\x0f\x83\xd4\x64\xd6\x31\xdd\x6a\x7f\xd2\xea\x86\xfc\x1a\xea\x39\x0d\x2f\xe2\x35\x26\x07\xab\xe1\xe9\xd4\xce\x0f\x5f\x26\xf6\x35\xb1\x47\xed\xb5\xa5\x4e\x12\xca\x2d\x87\x5c\x1b\x2f\x08\x47\x12\x2a\x66\x10\xd1\xdc\x58\x61\x35\xf1\x9e\x0b\xe2\x8c\x25\x54\x22\xed\x30\xb0\x40\x40\xc2\x0c\x30\xe8\x78\xe6\xf9\x9b\xca\xa0\xe7\x55\x26\x75\x51\xfc\x1f\x7a\x5c\x92\xe6\x65\xb3\x88\x86\x6e\xb7\x26\x76\x34\xa8\x59\xd0\xae\xae\xf7\xf1\xc9\x38\x56\x5f\xee\xb2\x6a\x7c\xc8\x34\xfb\x1b\x92\x48\x0e\xa7\xa7\xcd\xa0\x9f\x6c\xb1\x68\xc3\x5a\x3f\x3f\x08\xcd\x07\x22\x74\x68\x6b\xd4\xd0\x0c\xf4\x42\xf3\xe6\xae\xb3\x4a\xf8\x6a\x72\xab\xc1\x70\x93\x5d\xad\xaa\x89\x20\x55\xee\x25\x8b\x83\xb4\xb5\xfd\x46\x79\x3a\xdb\xc9\x5c\xac\x52\x64\xf5\x6e\x69\x9c\xcb\xed\x12\x9b\xf2\x2c\x7d\x70\xc9\x89\xea\xf6\xf0\xa6\x1c\x7b\x53\x82\x0d\x87\x6e\x94\xf0\xad\x04\x3f\x90\xca\x7e\xa8\x74\xb4\x8a\x0f\x6d\x04\xc2\xb8\x57\x3c\xd4\x9b\xd5\xcd\x20\x56\xee\xd6\x75\xb0\x1d\x7f\x34\xd9\x1f\x52\x99\xd1\xa6\xb9\x88\x3c\xdb\xcb\x5f\x88\x7f\xd9\xfe\x37\xe1\xbf\x46\x65\x2e\x7b\xf9\x4f\x56\x7f\x7f\x99\xca\x14\x66\xad\x15\x7c\x02\x3f\xb8\xc0\x0f\xf4\xf0\x00\xdb\x5c\x55\x78\x92\xf7\x50\xb3\x50\xc0\x95\x5e\x96\xa7\xab\xae\x5d\xa8\x1e\xe2\xb3\xb9\xce\x8f\x54\x36\xdc\xad\xab\xea\x29\x98\xfe\xe5\x2a\x83\x81\x10\xc0\x5a\x82\xac\x70\x04\x20\x85\x81\x15\x0a\x53\xc4\x35\x65\x06\x3a\x8c\x1d\x14\x4e\x70\x43\x98\x83\x18\x23\xa7\xa8\xf1\x06\x72\x04\xbd\x15\xdc\x78\xfd\xa6\x32\xe7\xa7\x8a\xa5\xc9\x3a\x06\xb2\xad\x62\xbf\x96\x58\xb8\x72\xe0\xdc\x68\xb4\x8f\x64\xb3\xd6\xc5\x68\x88\x37\xd6\x8b\x49\x68\x59\x29\x2d\x50\x11\xd5\x8e\x54\x9e\x7a\xd8\x71\xf6\xf0\xc9\x8c\xe9\xd4\x00\x77\xaa\xcc\xfb\x73\x91\xe1\xf0\xdf\x7c\x9d\x48\xd0\x77\x9d\x6a\x75\x5d\xec\xcc\x47\xdb\xd5\x7e\x30\x19\x50\x1b\xae\x82\x64\xbd\x9a\xec\x97\x37\x7b\xd0\x9f\x95\x72\xfb\xc9\x6c\x44\xea\x9b\xa2\x98\x1b\x1e\x8d\x1d\xf0\x66\x99\xab\x14\x47\x05\xd4\xa5\x60\xde\xea\x2f\xf6\xb6\x5a\xb4\x6a\x4a\x59\x6f\x53\xe9\x2d\xe2\xbe\xb2\x4c\x7e\x3b\xd3\x23\x9f\xee\x16\x60\x14\x15\xcb\xd1\xe9\x16\x65\x0b\x55\x07\x75\x84\x1c\x48\x9b\xa5\x76\x49\x52\xcb\xaf\x67\x26\x1c\x31\xbd\x70\xdb\x97\x5e\xb3\x92\x2e\x76\x16\xf9\x7b\xc0\xe7\x7b\x9f\xb9\x80\x4f\x4c\xec\x17\x6a\xf3\x3a\xfc\x67\xf7\x56\x9c\x1d\x54\xf6\x48\x6f\x3b\xcd\x9c\xee\xef\x6d\xdf\xcb\xf8\x0c\xbe\x0a\x4c\xf5\x09\xfc\xcb\xfa\x3f\xe2\xd3\x9c\xd7\xff\xa1\x99\xe3\x33\xf8\xc5\x44\x37\xfb\x20\xfe\x6d\x1b\xca\xb4\x95\x8c\x78\xe3\xad\xc6\x98\x29\x0c\x3c\x82\x06\x11\xe0\xbd\xb7\xca\x73\x6c\xb9\xe1\x54\x08\xe0\x2c\xd4\x52\x62\x4e\x0d\x43\x5e\x10\x87\x1d\x95\x88\x72\xf0\xae\x76\xdf\x7d\xaa\xc8\xba\x56\x6a\x0c\x56\xb3\xd4\x52\xaf\x53\x9d\x36\xc0\x36\x19\x5f\x2c\x7b\x19\xda\x85\xb9\x7c\x75\x3c\x5b\xee\x1b\xd3\x45\x28\x52\x99\x65\x8f\x55\xb9\x4d\xed\x8e\x9e\x6c\xa4\xd1\x28\xc4\xef\x66\x31\x15\xfe\xfe\x7c\xbc\x2f\xf9\x1d\xbf\x9c\x8c\x05\x8d\x30\x2d\xce\x50\x6c\x9c\xa8\x97\x04\xb1\xe3\x7d\x8d\x26\xc3\xdd\xdd\x04\x36\x0f\x5d\x9b\x5f\x0c\xab\xd5\x3a\xdf\xfa\xd9\x1a\xcb\xbd\x99\x63\x56\xed\x86\xba\x4b\xb4\x9f\x55\x06\x5b\xda\xdb\xed\x5c\xbe\x3e\x08\x27\x1b\xf1\x6c\x7f\x66\x62\xc9\x89\x75\x7d\x2c\x82\xed\x51\x95\x90\x1c\x0d\xc3\x25\x74\x28\xcc\xf3\xa5\xb4\xc9\x04\xe1\x30\xda\x18\xe9\x53\xcd\x74\x6c\x95\xa4\x43\xdc\x4a\xe6\x48\x6d\x40\x3b\x99\xd6\x47\xc9\xae\x2b\x5e\xfb\x9f\xad\x7a\x83\xe2\xdd\xeb\x7f\x36\xbb\xa9\xf8\x2b\x15\xef\x49\xfc\x67\x63\x45\x2f\x54\x9c\x67\x7b\xfc\x4b\xf0\x3f\x39\xc5\xe8\xea\x53\x3c\xfb\xce\x9d\xf8\x89\x46\x1d\xbc\xbf\xfc\x4e\xcf\xe5\xbd\x29\x3e\x3a\xdc\x0f\xb1\xae\x9b\x14\x09\x12\x64\xa4\x10\x1a\x7a\xc6\xa5\x20\x9e\x13\x05\xa9\x80\xd6\x49\xa3\x9c\xf1\x44\x4a\xc7\x80\x87\x0e\x38\x67\x89\x64\x8c\x41\xa5\x90\xa1\x54\x22\x2c\x38\x3b\x1e\xc1\x06\xe9\x4b\xfc\xaf\x4f\xce\x60\x7b\xc8\xff\x7a\x4c\xc1\x4e\x3f\x48\x48\x77\xce\x64\xea\x7b\x79\xcb\x99\x48\x7d\x47\x57\x4d\x3f\x08\xb6\xad\x9d\xd2\xb2\x4e\x53\xc5\x41\x67\x13\xa9\x6c\xf0\x5a\xd2\x41\x4b\xef\x0f\xeb\xb9\xeb\x84\x87\x83\xe5\x3e\xbf\xac\x83\x41\x31\xdc\x05\xb8\xe2\xe1\xa1\xeb\xcc\x0a\xf6\x06\xa4\x17\x6b\x27\x0b\x62\xdc\x24\xd3\xf8\x74\x05\x96\xd5\x5a\xa7\x7b\x52\xb0\x44\x74\xdf\xee\xef\xe4\x64\x1c\x97\x60\xda\xe8\x5a\x66\x16\x4b\x99\x99\x8c\x63\x3b\x52\xe4\xf5\xd1\xb8\xad\xa6\xcb\x46\x27\x4d\xec\xf0\x57\xe7\xb0\xdd\xe8\xb3\x9d\xe5\x40\xee\xf5\x99\x3e\xb2\xc5\x8f\x2b\xc8\x0b\xf1\x9f\x3d\x87\xed\x5f\xda\x83\xbf\xff\x5d\xfa\x33\xe5\x7b\x9b\xbb\x3c\xad\x30\x8a\x2a\xe9\xb0\x51\x0c\x3b\x69\x0c\xa4\x14\x53\x69\x24\xc7\x98\x6b\xa3\x21\x21\xec\xb8\x5b\x9e\x69\x84\x81\x22\x16\x18\xee\x11\xa7\x02\x31\x42\x2c\x64\x02\xc8\x37\x85\x61\x2f\x89\x56\x5f\xee\x16\xfb\xc1\x6a\x09\xc2\xe1\x45\xd0\x1e\x1c\x0e\xbd\x71\x6e\xbe\xeb\x16\xba\xb9\x7a\x9b\xb6\x24\x5a\xbb\x54\x97\xee\x92\xab\xe2\x7a\x3a\x0c\x75\x69\xa1\xfc\xab\xa3\x3a\x22\xbd\x44\x2c\xac\xdb\xaa\xd6\xe9\x64\x70\x23\x23\x77\x99\x79\x6b\xda\xa4\xce\xe5\xb2\x20\x70\x09\x15\xd4\x22\x29\x89\x4c\xc5\xef\x40\xb3\x5e\x4b\xcc\x67\x6c\xd1\xda\x11\xee\xf3\x91\xfa\x6e\xd8\x6c\xcf\x85\x0e\x52\x79\xdf\x8e\x56\x69\xab\x55\xaa\x74\x05\x5b\x06\xc9\x7a\xf6\xad\x27\xcf\xd4\x64\xb0\x1f\x97\x66\x87\x48\xa3\xd6\x34\xa3\x43\x81\xef\x77\x95\x64\x2d\x3f\x6b\x2e\x07\xd1\x21\xc8\xfb\xbd\x6d\x67\x86\xb5\x8a\x0a\x5e\x73\x6e\xf4\x79\x7b\xdf\x19\xc7\x19\xa8\x06\x37\x67\xc1\xa3\x87\xe2\x38\x2f\xc4\xff\xc9\x6e\xc1\x9b\xfd\x9c\x33\x2f\xe0\x91\x38\xce\xf6\xcc\xb1\xec\x5e\x47\xfc\xdc\xcf\x79\x02\x3f\xde\xa8\x6f\xba\x4f\xe0\x5f\x7e\x1a\x1b\x68\x1f\x5a\x46\xfa\xa5\x52\x31\xd9\x5e\x2f\x92\x01\x0a\x56\x95\xc1\xc8\x63\x45\x89\x8b\x4d\xe2\x0a\x30\xd6\xaf\xb1\xd8\x10\x46\x2f\x56\xca\xfe\x94\xed\x9f\xe2\xdf\xb6\x1c\x5f\x01\xca\xa0\x90\x9a\x50\xce\x80\x61\x80\x3b\x8c\xa1\x91\xc0\x50\x25\x34\x31\x96\x23\x20\x19\xb4\x5e\x68\x23\x8c\x33\xde\x12\xa5\xb0\x10\x9a\x72\xae\x98\xd1\xef\x2a\xf3\x82\x68\x75\xe6\xa2\xf8\x3f\xf4\xb8\x48\x30\x98\x46\xf2\xf1\x7a\xbf\x53\xc8\xd5\x07\xcb\x66\x2b\x07\xfb\x59\x2a\x63\x12\xe4\xfa\x64\x4b\x19\xe0\x4c\x8b\x54\x76\xd7\xf1\x47\x83\xfd\x2c\x27\xb6\x8b\x52\x33\xe2\xab\xe1\xa0\x9c\x06\xc6\x27\x3a\xb5\x7e\x3a\x11\x5b\x4f\x41\x75\xbb\x6f\x4f\x0a\xf3\x5a\x3d\x85\x7a\xbb\x58\x64\x35\xe6\xbd\xf0\xa6\x3e\x8c\x24\xb1\xe9\x6e\x93\xad\xaa\xe0\x93\xfe\xa4\x31\xec\x8d\x37\x36\x3d\xab\x35\xbd\x4b\xbb\x64\x7f\xcb\x87\x5d\xe7\xeb\xc7\xa3\x1e\x55\xb7\xd1\xeb\xeb\x4a\xab\x9d\x6f\xa7\xc8\x21\x95\x89\x25\xe6\xb9\x5a\xc1\x74\x47\x3d\x4c\x36\xe9\xc3\x32\x5c\x9f\x0f\xfa\xb9\x06\x9e\x2d\x7f\x15\x3f\xba\x68\xc9\xd7\xab\x4c\x2f\xd1\xc8\x91\x67\x7b\xf9\x0b\xf1\x2f\xdb\xff\x26\xfc\xd7\xa8\xcc\x65\x2f\xff\xc9\xca\xde\xaf\x52\x99\x19\x8f\x54\x76\xe5\x27\xf0\x7f\xf8\x34\x1e\x2d\x76\xe3\xdb\x4a\x35\x33\x04\xab\x6a\x71\xd7\x31\x9b\x66\x7a\x31\x01\x25\x5c\x5e\xe7\x06\xb1\xc9\xa2\xb6\x99\x6d\xb6\x66\x91\x18\x89\xdf\xa3\x32\x50\x68\xcf\x8c\x71\x08\x18\xaf\x35\xf0\x12\x70\x69\x88\x16\x5c\x60\x0e\x85\x24\xd2\x42\xac\x2d\x44\x16\x72\xac\x18\xc0\x0c\x5b\xa4\x85\xc3\x0a\x70\xe7\x9d\xb2\xef\x2a\x83\x9f\x57\x99\xec\x45\xf1\x7f\xe8\x71\xb9\x65\xee\x60\x0e\x9d\x92\x36\x49\xde\xaf\xc0\x40\xcd\xa0\x5c\xf7\xc6\xd1\xc2\x21\xb9\x9d\xa8\x7a\xa2\xa4\x5d\x26\xd4\x4b\xd4\x1b\xfc\x74\xbe\xdd\x27\x77\x60\x84\x2b\x8d\xd5\x94\xed\x57\xc1\x3c\x35\xb3\xac\x93\x68\x0e\xb6\xad\xf2\xbe\x35\x9d\x65\x8b\x95\x83\x28\x57\x37\x07\x60\x45\x65\x5a\x5a\x14\xe3\x91\x6e\x21\xbe\x0e\x06\x22\x34\xd4\xfb\x5e\x95\x97\xfb\xae\x38\xdf\xea\x7e\x66\x51\x05\x41\x5d\xb4\x9b\x2a\x52\x2e\x93\x83\x09\x6d\x8f\xeb\xe7\x93\x39\xb9\x3c\xf4\x63\xa5\xf5\x36\x54\x76\xa6\x4a\x5c\xcc\xb4\x47\x19\x50\xdb\x54\x72\x15\xc3\xda\xb1\xb6\xcc\x12\xc2\x22\xa1\xf0\xfc\x35\xeb\x7b\x9e\xe8\xe5\x6e\x5b\x37\xf5\x67\x7b\xf9\x0b\xf1\x2f\xdb\xff\x26\xfc\x97\xa8\xcc\x0f\xbd\x7c\x7a\x1d\xf1\xcb\x54\x66\xb7\x2a\x1e\x82\x27\xf0\x7f\xf8\x74\xbd\xdd\x14\x0e\x85\xa1\x5c\x6d\xf5\x3a\x93\xaa\x47\xe6\x93\x16\x62\xc9\x76\x1a\xe7\x75\xd4\xce\xca\x75\xb9\x22\x13\x16\x6f\x54\x5a\xcb\xe3\xaf\xbe\x5c\x65\x8c\x75\x9e\x50\x6b\xdf\xfc\x15\x2a\x31\xa7\x98\x1e\x8f\xdc\xb1\xdc\x79\x46\x20\xf1\x9e\x48\xcc\xa1\xc2\x98\x72\x84\x9d\x20\x56\x79\x65\x9c\x82\x0e\x62\xc6\xe8\x71\x7d\xcf\xf9\xe1\x86\xc5\xc2\x2a\xcc\xb6\xc9\xb4\x10\xa4\xd3\x67\xcb\x76\xac\x1d\x85\xc9\x62\x23\x6c\x17\x93\x1e\x29\x9a\xca\xa2\xb6\x98\x67\x4a\xd3\x62\xad\x7e\xb4\xaa\x63\x0f\x3b\xd9\xcb\x1d\x51\xe2\x3b\x58\x6c\x5d\x8b\x12\xa7\xbe\xe3\x97\xd3\x83\xdc\xdc\xb4\x5b\x71\x11\x0f\x96\x29\x16\xdb\xa1\xde\xb6\x34\xe8\xc7\x7d\x2a\xd9\x21\x83\x65\xbe\xd0\xe9\x18\x5e\xda\x4f\x0a\xfd\x4c\x5f\x0e\x13\xad\x81\xdf\x6c\x72\xb1\x51\xb3\x7f\x48\x06\x0b\x14\x91\xf9\x44\x6c\xe1\x63\x95\xd8\x66\x30\x89\xec\xb2\xd9\x5e\xa6\xef\xe3\xa6\x9c\x3f\xaa\xc2\xc1\xc9\x04\xee\xb4\x6d\xb3\x66\x6b\x75\x37\x93\x30\x24\x87\x89\x92\xcc\x14\x76\xd3\x43\x63\x5f\x9a\xd6\x54\x68\xc9\x7a\xa4\xd6\x19\xfd\x6a\xad\xcf\x6d\x51\xe2\xf8\x99\x15\x3c\x30\xbb\x3c\xe5\xa5\x3e\xbd\x6d\xe0\x17\x8a\xf3\x3a\xfc\x67\xa3\xc4\x67\x09\xfd\x47\x66\x0f\xc5\xb3\x1d\xdd\x0f\x45\x89\x5f\x8d\x7f\x6f\x94\xb8\xf2\xf1\x9d\x7b\xf1\xcf\x62\x38\x51\x1e\x15\x38\x8f\x6a\x08\x47\xd6\x64\x68\xcb\xc9\xb9\xf5\x7a\xda\xe9\x0e\xcc\x6e\x99\x41\xa3\x48\x0d\xe1\xbe\x9f\x56\x1a\x09\xb7\x3b\x6b\x8a\x67\x63\x38\x16\x7a\x2a\xb1\xd3\xd4\x41\xe2\x25\x07\x88\x6b\xc3\xa5\x40\xd0\x2b\xc2\x18\x12\x06\x02\x0e\x30\xf1\x5a\x49\x45\x95\x71\x9e\x29\x69\x15\x97\x0e\x50\xe8\x1c\xc7\xef\x8a\xf4\x7d\x76\x15\x94\xd3\x2c\xa8\x45\x12\xe9\x71\xad\x0a\xd3\x3c\x31\xda\xcb\x76\x7f\xed\xcb\x61\x1b\x25\xeb\x7c\xd1\xad\x8a\xa1\x71\x38\xb2\x5f\x36\x5b\xc7\xed\x72\xf7\x28\x52\xa5\xd1\xa8\xbe\xff\xc3\x93\x8a\x94\xf8\x8e\x5f\x4e\xf3\x9e\xde\x76\x0c\x0c\x65\x9b\xbe\xe7\x1a\x93\x76\x30\xa7\xb5\x56\xa2\x25\xd5\xc4\xa4\x32\xe3\xcc\x1c\x6c\x1b\xc0\xc8\x62\x21\xed\x93\xac\x2e\x56\x8b\x5e\xba\xe1\x1a\xd3\x7e\x3c\x86\x5c\x3d\x91\x18\xf7\x76\x21\x1d\x59\x25\x64\xad\x54\xdd\xf4\x7d\x22\x3c\xf6\xb1\x51\x79\x78\x54\x0d\xe0\x9b\x35\x06\x49\x3d\xd4\x0a\x26\x9b\xd4\x38\x9a\x62\x95\x71\x36\x1f\x4f\x05\x20\xc4\xc6\xa3\x45\x51\xce\x27\xca\xb9\x48\x85\x4f\x3e\x96\xa4\xbe\x4a\x91\x1e\x98\x89\xbe\x54\x91\x9e\xc4\x7f\xa1\x22\x3d\x32\xd3\x78\xa5\x22\xbd\x04\xff\x09\x45\xba\x17\x3f\x91\x68\x34\xde\x27\xda\x7f\x46\x91\x24\x40\x5a\x02\x73\x3c\x74\x4b\x3a\xa6\x31\xa6\x8e\x53\x82\xb1\x90\x8a\x13\xc2\xb4\x60\x0e\x03\x2c\x9d\xf6\x54\x3a\xc3\x98\xf5\x5e\x53\xe0\x94\x33\xc0\x1a\x41\xdf\x14\xe9\xfc\x6c\xd6\x3b\x6b\x71\x9b\x22\x9d\x6a\x75\xe7\xb8\xfb\x98\x4f\x75\x6a\x45\x3e\x5e\x9e\x7b\xc3\xf1\xef\xe5\x2d\x47\x65\x0b\xa5\x71\xe7\x00\x77\x38\x28\xe7\xe7\x39\xd2\x8a\x1e\x5c\xa9\x36\xda\x4e\xa6\xc3\x0d\x8a\x94\x27\xcd\xe4\xb8\x06\x00\x9f\xa6\xa8\xec\xaa\x3e\x76\x85\x35\x0f\x37\x1b\xd3\xd4\xaa\x29\x7a\xcb\x6e\x6a\xb0\x84\xe3\x4e\x96\x03\x99\x38\x1c\x2a\x09\x64\x74\x0c\xad\xca\xf1\xa3\xca\x0c\xa3\xeb\xf2\x76\x90\x5e\x4c\xc6\xcb\x43\x6b\xd2\x88\x15\x33\x33\x50\x59\xf4\xd6\xf9\xd8\x64\x21\x3b\x3c\xa9\x7d\x08\xc6\xe6\x3c\xc0\xe9\x5f\x5d\x0b\x72\x5b\xde\x2a\x7e\x16\xbc\x7c\x60\x96\x7b\xba\x16\xe4\x19\x05\x7b\x1d\xfe\x63\x0a\xf6\x91\xb7\xfa\x97\xfa\x14\xdf\xff\xae\xfe\x91\xf2\xc5\xd6\x6a\xdf\x7d\x5a\x61\xb4\x03\xd4\x11\x6d\x25\x63\x96\x0a\x26\xa4\x83\x9a\x79\xe5\x00\xc4\x8e\x2a\xc5\xb9\xb6\x8e\x32\xc7\x94\xb1\xc8\x6a\xa9\x25\x13\x1c\x38\xea\x38\x61\x8a\x28\xcd\xff\xfe\xcf\x5f\xe8\x7c\x2f\x57\x62\xbf\xe9\xd9\x6a\x6d\x51\x2a\xc6\x63\x65\xd2\xa1\xfd\x34\xd9\x8f\x02\x50\x9a\xf5\x72\x7c\x32\x36\xc1\x3e\xcc\xcb\xa3\x7a\x63\xd7\xa6\x1f\xb1\x9e\x48\xfd\x9a\x95\x7c\x32\x0b\x8b\xc0\x48\x32\xc3\xca\xd1\x5e\xb3\xb2\x9e\x99\xd1\xc2\xc7\xbb\x3d\x67\x32\xbb\xe1\x32\x28\xd6\xe8\xae\x11\xea\x8c\x0f\x30\xbd\xb4\xed\x42\xfb\xaa\xcf\x13\xff\x8e\x5f\x8e\xe5\xa3\x4d\x1f\x05\x2e\x59\xc8\xac\xdb\xe9\x16\x5e\xd2\xa0\x5e\xc8\xb9\xc5\x64\x66\x52\xb5\x89\x28\xb2\x7d\x77\x1e\x2e\x6c\x71\x95\x6e\x26\xfb\x70\x93\xa0\x22\x4d\x92\x24\xab\x2f\xfb\xbd\x46\x1d\xee\x2c\xd5\x15\xd2\x1f\xa3\x50\xe3\x50\x1e\x95\xdb\xe5\x9e\x03\x83\xde\xb6\x7b\xec\xd5\x9b\x6e\x6b\xb8\xe9\x74\x56\xcd\x64\xdf\x25\x51\x68\x1d\xd4\xa8\x9a\xe1\x8d\x6b\xac\xd5\x12\xac\xd6\x7a\x34\x35\xc5\xd6\xa4\x32\xaf\x2e\x7e\x75\xa4\xd5\x6d\x3e\xcf\xd9\xad\x86\x41\x2b\x1b\x4a\xc0\x4c\x71\x29\x48\xb9\x10\xeb\x4d\xc6\xe9\xc1\x20\x5b\x8f\x95\x43\xe3\xf8\x66\xed\x3a\xdb\x58\x2e\xbc\x8a\x36\x2a\xad\xc4\x60\x72\xda\x42\xf4\xe1\x73\xfc\x64\xb7\x62\x70\x69\x5d\x3f\xb6\xd5\x0b\xf1\x9f\xf5\x79\x9a\x67\x1f\x99\x05\x69\xd5\x87\xec\x70\xe8\x05\xa0\x98\x74\xed\x7e\x31\x3f\x2b\x17\x62\xac\x5d\x0d\x51\x3a\x09\xf2\x9b\x10\xc8\x34\x12\xa6\x59\xb4\x17\xfb\xba\x12\x8f\xaf\xd5\x79\x35\xfe\xbd\x3e\x4f\xf3\xe3\x3b\xf7\xe2\x9f\x29\x52\xaa\x1e\x6f\x4f\x66\x41\x36\xd1\x49\xb2\xd1\xbe\xb9\x12\xd5\x68\x82\x6e\x27\xc9\xea\x36\xa0\xa5\x49\xa2\x45\xc7\xba\x54\xef\xef\x60\x17\x9e\x9d\x49\xf2\xb4\x22\x19\xc5\x29\xb3\x90\x42\x69\xdc\xdb\xec\xca\x0b\x8e\x10\x20\x48\x43\x64\x9c\xe2\x5a\x01\x40\x0c\x7e\x53\x2c\xa8\xac\x66\x48\x53\xe9\x85\x50\x82\x71\x2f\x98\xd3\xf8\xdd\xe7\x41\xcf\xfb\x3c\x9f\xac\xd5\x39\xdb\x38\xd7\x68\xd4\xbe\xb9\xb8\x77\x8e\x93\x67\x8e\x4c\xfc\x1a\xde\xe9\xa9\x7c\xfb\x7e\x24\xc8\xad\x55\x9f\x96\x77\xc6\x25\xf4\x2a\xe8\x47\xe9\x64\x38\x59\x15\x1a\x93\x4d\xb5\xe4\x9a\x95\x50\x34\x94\xe8\xce\x46\xa5\xc0\x56\xba\x95\x6a\xa8\x54\x8a\x57\x67\xf5\x7e\x35\xba\x5f\xf7\xb7\xeb\xde\x78\xb3\x8e\x6d\xf9\x70\xbb\x9b\x84\x02\x16\x07\x79\x62\x14\x5c\xa2\xf9\x21\x1f\x74\x4f\x8a\xb2\x9f\x34\x56\x89\xca\xa4\x88\x26\x13\x62\xfa\x91\xe8\xb2\x7a\x98\x3b\x16\xc4\xb7\x1c\x35\x93\xab\x55\x7f\xd5\x09\xa5\xe7\x49\x4f\xf4\xe2\x57\x33\xb4\xeb\x87\xb0\xdd\xcb\xcd\x87\x05\x9f\xde\xff\xb8\xbf\x78\x1c\x28\xcf\xde\xf7\x43\xea\xec\x77\xf8\x60\x0f\x29\xda\x0b\xf1\x9f\xbd\x4d\xba\x7a\xf6\xd9\x03\x91\xe4\xd3\x59\xfa\x27\xb4\x87\x8e\x53\x7e\x35\xfe\xaf\x14\xf5\x87\xcf\x2f\x26\x1d\x67\xdf\x3c\xcd\xda\x8f\xff\xfd\x90\x8f\x79\xd6\x06\x5f\xa8\x25\xb7\xec\x52\xe1\x5a\x73\xe9\x99\xa4\xd2\x00\x27\x9c\xd4\xd8\x62\xe8\x99\x91\x18\x08\x2b\x2c\x10\xc4\x4a\xc3\x38\x41\xc6\x2b\xca\x8c\x02\x92\x18\xaf\x98\x53\x4e\x4a\x82\xbe\x29\x2f\x7e\x5e\x79\x3f\xb9\x6e\xe8\x74\x71\xdd\x43\xf1\xaf\xb3\x16\x5e\xae\x22\xee\x8c\xad\xeb\xbd\xf3\x4c\x79\x17\x87\x99\x4c\xec\x76\xf3\x51\x68\x3f\xdd\x2f\xbb\xa3\xd8\xa0\x35\x96\xa1\xc5\x32\xe3\x0a\x2d\x94\x5c\x56\x15\xaf\x15\xf7\x38\x38\xa4\x8a\x6b\xd2\xa6\x1d\x91\x8e\xee\x28\x2a\x0b\x41\xbb\xe5\x64\xb9\x99\x5f\xc5\x4b\x60\xcb\xf6\x3d\x81\x2d\x0b\x4d\xd9\x70\x10\x0d\x37\xd7\xdf\x94\xb7\xc0\x57\x54\xce\x9a\x26\x36\x65\xba\x54\x4b\xa1\x7d\x2d\x5a\x18\x94\x7b\x85\x49\xd2\x46\x0f\xac\xb1\x9c\x66\x6a\xa5\xd9\x7a\x31\x1b\x45\x7f\xa3\xf2\xbe\x24\xfe\x11\xdd\x83\xc4\xfb\x35\xee\xd7\x7d\xa9\xdf\xa1\xbc\xbf\xba\x14\x33\xb8\xfa\x79\x91\x2e\x7e\x4c\x3e\xbe\x5a\x89\x7e\x76\x09\xe3\x3f\xfe\xba\x4d\x89\xca\xdf\xdf\xf7\x6a\xfe\x7e\x76\x67\xde\x67\x65\xfe\x9d\xfc\xfd\x38\xb2\x5d\xe3\x2f\x97\x2b\xb7\xba\x9f\xf0\x17\xbc\x42\xc9\x4f\x23\xcb\x57\x6b\xd3\x2d\x2b\x38\xa4\x10\x84\x18\xa1\x09\x47\x56\x29\x63\xa8\xe6\x90\x33\x49\xd5\x9b\xdf\xc7\x94\xe1\x52\x2a\x88\xbd\x46\xc6\x13\x48\x91\x85\xd2\x21\x08\xb9\x72\xd0\x50\x66\x8e\x4a\x2e\x5f\x92\x5b\xfd\xc4\x87\x3e\xb1\xf5\x9a\x38\xe0\x7d\x99\x96\xa0\xde\x68\xd4\xdf\xad\xe1\x5e\x75\xfc\x7e\xec\xc5\x0f\x6a\x76\x96\xdb\xcd\x2f\xe5\xa6\xd0\xa1\x50\x4c\xdb\xf5\xfc\x0c\x8b\x9a\x1a\x4e\x37\xcd\x70\x38\x16\xab\xe9\x65\x58\x4e\x4b\x03\x58\x09\xfa\x3b\x1a\x1f\x45\xc3\x96\x77\x75\x53\xa9\x42\x21\xb3\xcb\x96\x2b\xdc\xe5\x0b\x45\xb6\x88\x84\x26\xab\xe4\xdc\x39\xd2\x5c\x2f\x6a\x99\x6e\x40\x86\x68\xbb\x3c\xaa\x65\xb2\xdd\x8b\xef\x73\x95\x3d\x9a\x1f\x12\xab\x9d\x9d\x35\x87\xfb\x9e\x5a\xba\xce\xb4\x16\xda\x1f\x40\xa2\x0a\x3a\xa4\x97\x60\xc4\x34\x96\xbf\x1a\x2d\xce\xfc\xb0\xee\xc3\xd6\x7a\xf6\xbe\x08\x2e\x74\xde\x3f\x78\xc2\x8f\x39\x13\x8e\x47\xca\x13\x7d\x5d\xfb\x06\x97\x7f\xff\xbe\xec\xc1\xd9\x31\x44\x3f\x1d\x21\xcf\xf6\x15\x3c\x92\xf3\x2e\x06\x17\x73\x93\x5f\x29\x7c\xf0\xcf\x36\x7f\x21\xfe\x6d\x23\xf4\x05\x7e\xf4\x6a\x7c\xf8\xdf\x94\xe1\xf9\xfe\x77\xed\x8f\x94\xef\x68\x43\xbf\x2a\xdf\xd9\xdc\xee\x5f\x17\xbf\xbe\xc6\xdf\xbf\x2d\xfe\x7f\xc6\xdf\xe3\x1a\xfa\xb4\x66\x9d\x7e\xf4\xdd\xc3\xf9\x49\x7f\xbe\xe0\xf3\x4f\x97\xf7\x23\x2c\xf3\x49\x79\x5f\x1d\x7b\x78\xa1\xc7\xf8\xf6\x9b\xc8\xf9\x01\x5a\x77\xda\xd7\xc7\x35\xf2\x27\xf4\xeb\x57\x3d\x5d\x78\x7f\x97\x63\xe4\xd9\x98\xfb\xf1\x9c\xcd\x00\x4e\xef\xfb\x17\xc7\xde\x82\x7f\x8e\x27\x7f\xba\xbc\x67\x7c\xfe\x2c\x56\x78\xc3\x79\xe6\x40\x58\x03\xbd\x33\x90\x02\x8f\x38\xa3\x0c\x09\xc6\x8c\x23\x9e\x22\x8e\x3c\xa3\xc2\x78\xa0\xad\xf4\x56\x18\x68\x25\x53\x08\x19\x28\x99\x76\xc8\x41\xfd\xff\x91\xf7\x67\x4d\x8a\x33\xc9\xba\x28\x7c\xbf\x7e\x45\xdd\xf5\xfe\x8c\x77\x1b\x8a\x51\x8a\xb5\xed\x3b\x66\x02\x84\x98\x41\xcc\xe2\x66\x5b\x8c\x4c\x62\x9e\xf9\xf5\xc7\x12\xb2\x12\x15\x95\x23\x90\xd5\xd5\x67\x85\x75\xd7\x8b\x52\x10\xee\x31\xf8\x13\x1e\x1e\xee\x1e\xf0\xe4\xd9\x08\xad\x87\x68\xdf\xef\xd8\x51\x62\x2d\x8b\x0d\xd2\x17\x7d\x55\xee\xd9\xeb\xbc\x26\x54\xa9\x17\xe4\xf6\x52\x09\x7b\xb4\xd7\xab\x54\xb1\xb8\xcc\x22\x8c\x66\xd3\xc3\x41\x8e\xe6\x70\x3d\x0c\x4a\xbd\xa1\x9f\x83\x5e\x33\x4a\x30\xb3\xa9\x2e\x66\xeb\xad\x0e\xe1\x32\xdf\xdf\xae\xd9\xb4\x9f\x08\x0a\x90\x67\x6a\x28\x51\x9b\x66\x56\xa1\xc7\x59\xaf\xc5\xdd\x44\x6f\xaa\xe1\x34\xef\xf7\xbd\x27\x6d\xca\xc9\xa3\x54\x72\x95\x0d\x9c\x69\xaf\x53\xf4\x45\xb5\x09\x0a\x07\x16\x8d\x6a\x69\x36\x65\xa3\x14\xec\xcc\x86\xbb\x1e\x4f\x94\x06\xab\x0f\xbd\x23\xf3\xd7\xb3\xef\xdf\x82\xa6\xd7\x5b\xed\xd8\xf3\x9f\xd3\x36\x62\x73\xe8\xcd\xf3\xc9\x18\x8f\x37\x68\x8c\x5f\xb7\xe9\x5c\x8d\xd9\x03\xe9\x7f\xce\x26\x72\x45\xff\xcc\xf4\x69\xc5\xf8\x8b\x35\xc2\xd3\x73\xeb\xdf\xc2\xdf\x69\xc5\xfd\x94\xc6\xf5\x1f\xa4\xc1\x3c\xc4\xa6\xf4\x68\xf9\xb9\x69\xfe\xde\x43\xdf\xcf\x79\xe1\x1d\xf4\x7f\xdb\xf1\x3e\xc4\xa6\xf9\x5b\x78\xe8\xab\x36\xcd\xcb\x3a\x75\x95\x1c\x38\xf6\x9b\xb8\xc5\xe0\x8b\xf3\xb1\x58\x9b\x3f\x5f\x61\x75\x8f\x4d\xf8\xda\x6a\xf1\x99\x1b\x90\x39\x65\x8e\xcd\x29\x43\x96\xe6\xc2\xd6\x48\x68\xc9\xa5\x61\xc2\xa6\x5a\xd9\xdc\xa2\x8e\x05\x29\x75\x24\x30\x40\x0b\xcb\x38\xd0\x10\x6a\x03\x0b\x60\x81\x05\x45\xf4\xa4\xa5\x3c\x26\x57\x7c\xe9\xaa\x31\xbf\xb5\xee\x06\x6f\x92\xb7\x32\x1f\x9a\x79\x4b\xaf\x04\x1e\x07\xc9\xba\x49\xed\x41\x6b\xbf\xa8\x54\xd7\x3d\x98\xc0\x75\xdc\xb0\xba\xfb\x63\xbf\x5f\xab\x83\x34\x0a\x0f\x83\x9e\xbb\x4c\x16\x9d\xe2\xa1\x97\xee\x63\x3d\xca\x34\xb3\xd3\xc1\x86\x2d\xdc\x01\xf6\x4b\xbd\xd2\x58\xa4\x96\xdc\x9f\xca\x26\xcb\xc8\xf0\x94\xc5\xb9\x38\x99\xe4\xe6\xf3\x72\x75\x81\xb0\x6d\x17\x8f\x64\x0d\xed\xee\xcc\xef\xa7\x7b\xb3\x9d\xc9\x2d\x33\xb8\x04\x7a\x7b\xb7\xb5\x2e\x85\xf0\x31\xf9\x55\xb3\xb1\x19\xf1\xc5\x28\x2b\x29\x9a\xab\x6d\x6c\xba\xdc\x14\x65\xf5\x40\xfa\xd7\xe3\xff\x29\xfa\xb1\xb3\xe9\x76\xec\xd5\xd7\xa3\xac\x0e\x2c\x6e\x7b\x7f\x9d\xe2\xfb\x67\xd3\x77\xd0\x9f\xf5\x4a\xd6\xfa\x0e\xfa\xee\x35\xfd\x1b\xbc\x8d\xce\x95\x67\xdf\xa3\x71\x7b\x94\x17\xa3\x18\x10\x2e\x81\x82\xc6\x66\x14\x02\x01\xa9\x00\x84\x3a\x86\x51\x64\x94\xa3\x14\x95\xc4\x92\xd0\x7a\xda\x03\xd9\x18\x3a\x52\x1b\x61\x34\x53\x5a\x3b\xd4\x26\x8e\xf3\x8c\x32\x0f\x88\x58\xbf\x3e\x1c\xfd\x1d\x43\x83\xfa\x50\x8f\xdd\x59\x7b\x2c\x16\xdd\x02\x47\xfb\x7c\xbe\x3b\x4d\xcb\x5e\xc9\xcd\x8c\x13\xb2\x6d\x26\xbd\x15\x6b\x94\x72\x9d\x4c\xe7\xa3\x58\xd2\x8c\x2a\xf8\x6a\xab\x7a\xb0\x81\x83\x59\x57\x55\x13\x55\xb5\x76\x7a\x75\xa5\xdb\x1b\x7b\x92\xda\x2e\xec\xec\xba\xc6\x66\xe3\xc5\x92\x39\x73\x3f\x93\x1c\x35\xdc\x25\x1f\x47\xc1\x96\xd7\x27\xe9\x43\xd9\x2d\xe5\xcb\x19\x38\xf6\x9d\x3a\x2c\x8e\x06\xc5\xed\xc1\x9e\xe5\x4b\x34\x7f\xca\xe2\x1c\x8d\xb3\x7c\xa7\x4a\x28\x1a\xfa\x07\xbe\x6f\xcf\x12\x9d\x1a\x1b\x29\x91\xcd\xa4\xd3\xc3\x52\x2e\x98\x1d\xb7\xdb\xc4\x54\x53\x5f\x85\x97\xc5\xed\xdf\x84\x32\xdc\x6f\xb0\xd2\xbd\x52\xfe\x40\xfa\x6f\xdc\x0d\xf9\x27\x50\xe6\x5a\xca\xdf\xb8\x96\xe1\xdb\x50\xc6\x64\xf3\x50\xdd\x41\xdf\xbd\xa6\xff\x79\xff\xdb\xab\x58\xd2\x6f\x42\x19\xe5\x08\x48\x2c\x07\x40\x44\x09\x15\x40\x19\xa0\x35\xb0\x25\xb4\xa9\xed\x40\x26\x24\x84\x5c\x60\xc0\x08\xe3\x0a\x12\x4d\xa5\x94\x04\x5a\xda\xc1\x8c\x00\x6a\xc4\xe9\xde\x1b\x88\x1e\xe2\xc5\xfc\x65\x9f\xc1\x2f\xa2\x8e\x9b\x4e\x6c\x9f\x69\xbc\xe7\xb9\xf2\x53\x17\x4a\xb9\xcd\x3a\x76\xf6\xe1\xb0\x28\x36\x8e\x5b\x9d\x75\xb3\xbb\xad\xdc\xe6\x4b\x3d\x2b\x39\x0f\xc6\xc6\xdf\xec\x76\xee\x2c\xdf\xab\x68\xb3\xb4\x0f\x2a\xbf\x8b\xe4\xa6\x84\x71\xb7\x56\xb6\xe7\x85\x24\x1d\x65\x1a\x62\x91\xda\xa8\x66\xa5\xa3\x3c\x58\xa8\x8f\x36\x0b\x3b\x97\xb7\xf3\x3f\x11\x03\x96\x0a\x41\xbf\x51\x89\xf8\x1e\xed\xed\x81\x49\xab\x69\x7f\xbe\x4d\x17\x97\x41\xaf\xc3\xad\x88\xac\x8e\xd9\x7c\x75\x50\x68\x75\x12\xf4\x22\x65\x5f\xf1\x5c\xf9\xa2\xde\x77\x2e\x97\xc9\x7d\x9b\xc7\xf8\x79\x16\x96\xa8\xf3\xbc\x8b\xfd\xa2\xe7\x4a\x76\x77\x33\xff\xb1\x73\xb1\x98\x17\xf4\x57\x77\x69\x8f\xa3\x7f\x93\x95\x25\x75\xf1\x44\x89\xe5\xa0\xbc\x45\x2f\x39\xdf\xd6\x96\xbd\xf4\xef\x17\xbc\xa0\xbd\xef\xa0\xff\xb9\x73\x83\x58\xb9\xc8\xea\x75\x4f\xc5\x6e\xd3\xff\x22\xd6\x9c\xcb\x1f\xc4\x92\x53\x1a\xe7\xf0\xf2\xfe\xab\xfc\xde\xc1\xdf\xa9\x5c\x67\x5b\xbd\x1e\xf3\xe0\xa5\x3f\xff\x22\xfe\xae\xfb\xf7\xb7\xf2\xa9\x7b\x96\x00\xc2\x54\x69\x20\x39\xb2\xa4\xb6\x10\xc0\x4c\x31\x43\x30\xc3\x84\x11\xca\x21\x34\x4c\x0a\xad\x90\x72\x80\x71\x80\xa4\x50\x08\xc2\xa4\x71\xa4\x52\x8e\x70\x18\x7a\x5a\xd5\xe2\x59\xc3\xbf\xe8\xcf\xff\xb9\xd8\x9c\xb3\xbd\xe2\x0e\xa4\x3d\xcf\x3f\xed\x8f\x3e\x9c\x89\xe2\x67\xcf\xa7\x5c\xab\x94\xa0\x2c\x03\x06\xfb\xf9\x61\xed\x8e\xbb\x54\x6e\x6b\xc3\xd4\xa6\xea\x58\x8b\xc8\x69\x04\xc5\x1e\x20\xb5\x6a\x7b\xbf\x67\xbb\x30\xa2\x93\xde\xb2\x94\xa0\xad\x8e\xcf\x45\x32\x41\xa7\x7d\x58\x4e\x70\xc8\x3c\xbb\x5a\x49\x74\x57\x98\x86\xac\x5c\x59\x34\x07\x0c\xb8\xc1\xb3\x1e\xdc\xac\xaf\xb1\x9c\xed\x8e\xfd\x72\x6b\xda\x63\xad\x28\x1b\x75\x66\xc3\x84\xdc\xae\x6b\x61\x0e\xe7\xfc\xa2\xdd\x91\x89\x32\x0a\x37\x85\x2f\xf8\x63\xde\x14\x8b\x71\x2a\xf1\x33\x9c\xcb\xaa\xf4\x10\xa9\xbf\xed\xf7\x97\x46\xde\x1b\x2b\x12\xcb\x40\xfa\xc5\x55\xd6\xbf\x9d\xff\x87\xc4\x3a\x3d\x90\xfe\x4d\x91\x01\xe9\xeb\x55\xf6\xb4\xdd\xbb\x77\x7e\xdd\x33\x9e\xdb\xe5\xee\x2b\xb6\xf0\xdb\x57\xbd\x98\x96\x75\xee\xa3\x2f\x6a\x39\x77\x63\x95\x79\xc1\x7b\xe7\xba\xbd\x17\xf9\x7c\x7b\x4c\xc3\xcb\xf7\xff\x64\x6c\xd6\xd3\xf8\xbc\x7a\xb6\xf2\x6e\x8c\xf0\x4b\xd9\xbd\xac\xb2\xee\x4d\xe3\x17\x05\x25\x7c\x3c\x4d\x90\xf3\x3e\x32\xe6\x9d\x10\x2b\xaf\x7a\x3b\xc4\xca\x6b\xfd\xfb\x9b\x3c\x7e\x55\xeb\x7d\xb9\x93\xf5\x2b\x5a\xef\xfb\x7b\xe5\x78\x39\x8f\xf7\x59\x3e\x6f\x99\x6f\x67\xc2\xf7\x6a\x29\x97\x1b\x3a\x3e\xf2\xb6\x89\x05\x9b\xde\xb2\xcf\xbf\x3b\x76\xf2\x1e\xfa\x86\xd1\xce\x57\x63\x27\x53\x57\xfd\xf3\x5b\xf9\x84\xa6\x46\x2c\x4a\xa4\xb2\x25\xb3\xa5\x11\xd4\x08\x63\x2b\xee\x60\x86\x84\xd6\x0a\xdb\x5a\x41\x69\x6b\x23\x90\xb0\x2c\x61\xdb\x1c\x4b\x06\x29\x83\x5a\x61\xc7\x36\xc2\xa1\x1c\x3f\x69\x6a\xe4\x21\x67\x29\x95\x2b\xe6\x7f\x6b\xbd\xf1\xc5\x9a\xf3\x8e\x33\xf5\xcc\xd8\x27\xb5\x1a\x48\x1b\x9c\x50\xbd\x7d\x65\x84\xca\xcb\xc3\x71\x3e\x74\x87\xd5\x79\xa6\xb0\x19\x0c\x4e\x53\xf6\xbd\xec\xbf\xeb\xc1\xae\x89\x0a\xe9\x3e\xc9\xf7\xc6\xc5\x7a\xa5\x88\xe6\xb9\x14\x4f\x6a\xdf\x39\x2e\x1c\xd7\xb0\x7e\xb6\xd6\x89\xc2\xad\xa7\xea\x33\x3a\x3a\xba\x24\xc3\x4c\x58\x95\x99\x79\x31\x83\x94\xe7\x6e\x6a\xa5\x4a\xc5\xcd\x8d\xd8\xba\x22\x7a\xad\x82\x8b\x96\xbb\x7d\x85\xe1\x93\x95\xb3\xe5\x77\x2b\xa6\x60\x6a\xeb\xed\x16\xc1\x59\xa3\xb9\xdd\x80\x9c\xdd\xd8\x27\x12\xc7\x95\xbb\x46\xf3\xf2\x78\x32\xde\x80\xbc\xb1\x07\x8b\xcb\x90\xdd\x63\xe5\xf4\x6f\xb7\x32\x76\xf7\x8d\xca\xc4\xbe\xfc\xfc\x26\x2b\xe3\x03\xe9\x5f\x8f\xff\xa7\xe8\xc7\xac\x9c\xf1\x6e\xbc\xc1\xca\x28\x62\x07\x18\x6f\xdc\xfa\xf0\xbe\xf4\xdf\x41\xbf\xbd\xcf\xe2\xd2\x1d\xf4\xdd\x6b\xfa\x4e\x6f\x03\xe6\x73\x71\x90\xf5\x44\x20\xc6\x4e\xb2\x55\x48\x8e\x08\x98\x7a\xb0\x26\x0f\xdb\x52\x75\x92\x4f\xe7\xe9\xb8\x3c\xa1\xfe\x79\xf5\xb9\x58\x39\xfd\xef\xb1\x72\x72\x9b\x6a\x0b\x52\xcb\x50\xe1\x20\x49\x35\x67\xc8\x10\x4c\x14\xb0\x95\xb6\x21\x90\x96\xcd\x94\x44\x40\x3b\x40\x6b\xa2\x95\xc4\xc0\x00\xc2\xb4\x24\x46\x60\x07\xe3\xd3\x7e\x30\x9e\x63\x3c\xb7\x9f\xd8\x9d\x49\xb4\x2d\xec\x73\x24\xb5\x69\x1e\x59\x30\x4d\xd4\xa6\x1d\xd9\x0c\xd9\xb1\xe8\xac\x68\xd8\xcf\x8f\x16\xc1\x41\xcc\xc2\xf0\xa5\x6b\x52\xaf\xde\x5b\x9e\xba\x6a\x5e\x5c\xc7\xfa\x62\x2f\x9e\xcb\x55\x94\x45\x3c\x7b\xca\x0b\x3f\x41\x6a\x71\x4c\x87\x99\x4d\x29\x9c\x26\x47\xdd\x81\xf1\xda\x7b\xcf\x1f\xf6\xcb\xe9\x82\x3f\xab\xa6\xd2\x45\x06\xa3\x96\x40\xad\x09\x20\xb5\xfe\xae\x51\xa0\x68\x5d\x89\x12\xd9\x79\xce\x49\x1c\x88\x4c\x4c\xd2\xab\xe4\xf2\x28\xb7\xea\x30\x63\x9b\xae\x9a\x29\x85\x4b\xdd\xce\x30\x38\xe7\x6e\x98\x43\x9c\x0e\x6b\x1c\xd7\x7c\x3a\xaf\x81\xba\xca\x32\x72\xc8\xb9\x5a\xed\xf6\x34\x65\x47\xb6\x0c\x4c\xb6\x67\x67\x13\xd6\xc0\xbb\x2d\x26\xef\x8b\x28\x7c\xae\xf4\xd4\xb5\x71\x1d\xf0\x6b\xe3\xf7\x5c\xcb\x95\x87\xe3\x6f\x6b\xe4\xdb\x28\xd9\xbf\x99\xff\x98\x65\xf1\x8d\x6c\xb9\x97\xb1\x7e\xad\xa4\x1e\x4c\xff\xde\xfc\x12\x3c\xf6\xea\x06\x94\x38\x5b\x16\xfd\xdb\x75\xa4\x47\xd3\xff\x9c\x8e\xf4\xaa\xff\xcb\x75\x4f\x9d\xfd\x7d\xce\xdf\xbf\x65\x7e\x9e\xf7\xc4\xdf\x82\x1f\xb1\x36\x7d\xe6\xe4\x1a\x72\x4a\xb0\xb4\x29\xa3\x94\x4b\x0a\xb8\x94\x4c\x19\x4b\xd8\xc4\x30\x20\x85\xd2\x48\x10\x02\x24\xd3\xcc\xa6\xd4\x46\x96\x03\x6d\x6e\x30\x54\x40\x43\x6c\x4b\xf9\x13\x6d\xe1\xfd\x68\xfb\xce\x99\x52\xac\x49\xb1\x1d\xc2\x57\xd1\xe5\x73\x68\x2b\x3c\xd6\xb4\x67\xa9\xe2\xac\x62\x25\x1b\xc8\x6d\xdb\xfe\xac\x51\xd7\x89\x7d\xd3\x66\x8d\xa8\x53\x49\x87\xde\xba\x04\xea\x35\x6f\x5f\x72\xb2\xa5\xc1\x8e\x78\x99\x55\xb7\x34\x73\xb7\xf9\x94\x48\x6d\x73\xf9\x25\xab\x14\x65\x6d\xdd\xc9\x1c\x06\x32\x17\xe5\x37\xbc\x57\xcc\xf7\x9d\x73\x6e\xad\x45\xaf\xb5\x87\xd1\x64\xe9\xfb\xab\x83\x72\x4a\xca\x8c\xe5\x56\x57\x41\x4b\x4e\xe7\x6a\x22\x77\xfd\xe9\xd2\x2a\xd5\xf1\xd8\x94\xff\x20\xda\xc6\x3e\xde\x3e\x1b\xff\x0a\xb4\xfd\xdc\x39\xd2\xb5\xff\xfb\xab\xe5\xd1\xe8\xf3\x85\x5c\x0c\x1f\xa1\xcf\xc5\x22\xf6\xe8\xfe\xfb\x82\x45\xe0\xdf\xd2\x7f\x9f\x3b\x97\x8a\xf5\xdf\xb5\xb7\xe0\xe5\x9b\xf7\xa2\x77\xec\xe3\xa3\xf1\xe8\x6b\xe8\x6d\x5b\x96\xe1\x18\x0b\x81\x2d\x4d\xb9\x82\x92\x38\x8e\x43\x09\x95\x0a\x6a\x5b\x38\xca\xa1\x4a\x23\x85\x08\xb1\x05\x25\x88\x6b\xea\xd8\x18\x53\x0a\x6c\xa2\x28\x66\xf0\x94\xd7\xcc\x7e\xc8\x8e\xbc\x7a\xdd\xc7\xd7\x9d\x3e\xce\x96\xfc\xf4\x68\x55\x23\xf9\xe4\xb0\x0d\x0e\xd5\xee\xa2\xe4\x4e\x2a\x43\x6b\x3b\xc5\x29\x56\xde\xd7\x61\x9b\xa0\xf9\x31\xad\xcb\x67\x07\xdc\xf7\x76\xe4\x0b\xe4\xd7\x32\x6d\x5d\xaf\x99\xdd\x62\xdd\xc1\xc4\xef\x55\x86\x2d\x15\xb0\x11\xf5\x58\x65\x75\x4c\x46\xe5\xb0\x23\x3b\x99\x8e\x9f\xee\xb9\x99\xc6\xca\x1b\x7a\xb3\x2e\x5f\x82\x5c\x27\x5b\xa4\x6a\x39\x5f\xaf\x7c\x2f\x62\x35\x9a\x67\xc6\x4e\x43\x3f\x55\x14\x38\x0c\xca\x4f\x08\x25\xdd\xc4\xb8\x61\x07\x55\xbe\x2e\x65\x87\xf9\x5e\xe7\xd8\x20\xf6\x28\x14\xba\xd6\x6c\x77\xd7\x51\x75\xc3\x73\x75\x3f\xec\x76\x3b\x8d\xc6\x47\xb9\xcc\xe2\xe5\x9d\x1d\x79\xec\x14\xfb\x8b\x3b\xe2\xb6\xac\xeb\xf4\xf0\xf2\xf3\x9b\x76\xc4\x0f\xa4\x7f\x3d\xfe\x9f\xa2\x1f\xd3\x35\x45\xec\xd5\x0d\x3b\xe2\x62\xcc\x60\x8a\x5f\xa7\xf8\xbe\xae\x79\x07\xfd\xb2\x4a\x13\x7a\x07\x7d\xf7\x8a\x7e\x3a\x68\xad\xc2\x62\x75\x97\x1c\x8f\x12\x85\x6e\x37\x4f\xf4\x6c\x95\x0e\x61\xa9\x91\x30\xfd\x9c\x75\xcc\xe6\x7a\xdd\xa9\x9e\x96\x0b\x78\x77\x86\x8f\xd8\x8e\xfc\x0d\x97\xa7\xb7\xe9\x7f\x6a\x47\x6e\x34\xb2\x2d\xdb\x08\x45\xe4\xd3\x06\x9b\x11\x49\x98\x63\x10\x50\xd2\x06\x4c\x52\x00\x81\xa3\xb0\xd4\x1c\x6b\x47\x29\xc5\x95\xa0\x36\x42\x06\x3b\x94\x5a\x0e\x03\x96\xf5\x84\x32\xf1\xfc\xac\x85\x54\x63\xdf\x9f\xd9\x99\x44\xa3\x86\x23\x25\x47\x11\x1d\xee\x0a\xa3\x70\x5d\x22\x09\xd7\x34\xcb\x2d\x15\x69\x45\xe5\x6e\x3a\x3a\xef\x05\xcf\x3a\xe2\xc9\xe4\xf1\xce\x8e\x3c\x76\xca\xf4\x45\x14\x8b\xc7\xd4\xbd\x3b\x46\xbf\x97\xd4\xcb\x28\x78\x6e\xd2\xcf\xf7\x3d\xb6\x0a\x6b\xfe\x4e\xa4\x87\x79\x55\x52\x83\x99\xb7\x81\x24\x7d\x48\x59\x3d\x57\x4e\x46\xc1\x6c\x1a\xe4\xd7\x1b\xda\xf0\xac\x3e\x6f\xa4\xda\xcd\x64\xa4\x11\x21\x6e\x52\xed\x40\xa5\xc6\x67\xdd\x90\xd5\x92\x1b\x6b\xb6\x61\x19\x7b\x40\xda\x02\x18\x79\xba\x25\x2c\x39\x92\xb9\x04\xeb\xe6\xeb\x99\x48\x76\x42\x67\x8f\x72\xbe\x0c\x1b\x7e\xa5\x59\x9d\x57\x47\x0a\xae\xd7\xd3\x72\xb2\xe1\x87\xf9\x71\x6c\x84\x5f\x47\xa5\xd6\xaf\x23\xff\x06\x2a\xc5\xaf\xf6\xba\x01\xb5\x07\xf5\xcb\x78\xbd\x51\xde\x47\x85\x07\xd2\xbf\x37\x27\x6b\xec\x28\xe8\x16\xa9\x3c\xdf\x36\xef\xbf\x1a\xe1\xf3\x5c\xde\x47\xa5\xef\xa1\x7f\xd6\xe1\xbe\x80\x72\x1f\xf1\xfb\xb9\xdb\xe1\x31\xd1\xc6\x36\x0e\x91\x54\x73\xc8\x6c\x8d\x0c\x63\xd8\x68\x6d\xa0\xcd\x04\x45\x0e\x80\x14\x3a\xd4\x01\xe2\x74\xe3\x0e\x30\x14\x10\xe0\x10\x8e\x11\x75\x34\x76\xe0\x33\x8a\xc0\xfb\x51\xe4\x9d\x9d\x66\xeb\xb5\x96\xbe\x73\x96\xf4\x6a\x89\xa1\x42\x26\xdc\x2f\xd0\x71\xce\xb3\xf9\x34\x2c\xc8\x4d\xa1\x25\x96\x01\x2a\x67\xbb\xc7\xc5\x76\x93\x20\xbe\xdd\x6d\x0d\x71\x65\x9a\x8b\x8c\x28\x6d\xd6\x53\x9b\x1e\xa2\x40\x8e\x36\xbb\x52\x5f\xb4\x7c\x18\x2d\x64\x60\x22\x9b\xa8\x59\xad\xd5\x3b\x6c\x96\xc5\x75\xb6\x06\x96\xe3\x72\xf5\x94\x4f\x2b\x6b\xa3\x44\x76\xbf\x99\xcd\xcd\x28\xd1\x6b\x26\xec\x83\x16\x21\xf6\x26\x45\xbf\x2f\xac\x6e\x75\xc0\x06\xad\xb0\x33\xae\xcc\x48\xfe\xb2\x34\xfd\x25\xa8\x10\xdf\x79\x9f\xfe\xfd\x82\xee\xe1\x5e\xff\xf6\xb5\xfe\x7f\x30\xbf\xe9\x3f\xc1\xef\xf7\xa0\xce\x75\xec\xee\x23\xa5\xde\xfd\x06\x94\xba\x97\x5f\xef\x1d\x7e\x3f\x85\x52\x90\x03\x6c\x23\xa2\x6c\x61\x11\x60\x31\x44\x18\xc6\x98\x4b\xa5\x1c\x5b\xdb\x46\x33\x28\x99\xa3\x19\x64\x44\x41\xc1\x29\x10\x16\xd1\x90\x28\x60\x6c\xad\x81\x65\x14\x7a\x46\x29\x74\x3f\x4a\xbd\x13\xd5\xfe\x0e\x4a\xbd\x71\x19\xe4\x2b\x25\xae\xbb\x14\x37\x01\xd0\xfb\xf2\xc6\x19\x28\xe3\xa8\x6a\x4d\xb7\x4a\x5d\x98\xf1\xed\x4c\x6f\x4f\x3a\x9d\x7c\x2b\x9b\xeb\x16\xca\x1d\xdf\x67\xc5\x49\x7b\x19\xcc\x7a\x99\x35\x6c\x50\x9e\x04\x9b\xd0\x6b\x17\xa6\xdb\x6d\x98\xf4\x66\x85\x32\xa9\xcf\xdb\xa3\x01\xec\xa5\x57\xc8\x6a\x87\xa7\x08\xe9\xe2\xa0\x7e\xec\x76\x57\x59\xaf\x50\xe9\xd5\xbd\x65\x05\xe6\x48\x92\x36\x0e\x21\x6d\x44\xaa\x48\x43\x91\xd2\x05\x95\x43\xf6\x20\xc3\x3e\xb2\x79\xfd\x71\x94\xba\x57\xea\x53\xf1\xdf\xbe\xd6\xff\x0f\xe6\x37\xf3\x27\xf8\xfd\x1e\x94\xfa\xcd\x83\xf0\x81\x52\xef\x7e\x03\x4a\xdd\xcb\x6f\xf9\x1d\x7e\x3f\x85\x52\xd8\x30\xc2\x1c\x68\x51\x2e\x80\x2d\x0d\xb4\x05\x91\x48\x0b\xa6\x99\x45\x15\x45\x5a\x68\x0d\x29\xa4\x94\x60\x00\xa0\xe6\x42\x29\x28\xa4\xb6\x85\x01\x50\x4a\x69\x7e\xea\x52\xf8\x7e\x94\xba\x9e\x2e\x9f\x43\xa9\xcb\xa8\xbc\xe5\x39\xfc\x6b\x69\xfe\x9c\xf5\x29\xd7\x55\xb4\x7c\xcc\x65\x46\x2d\x55\x5f\xe7\x66\xc7\x63\x66\x9a\x41\xa3\x82\x9b\xd8\xd4\x33\x69\xbe\x44\xb5\x60\xbd\xc9\x25\x31\x9a\x4f\xeb\xd5\xe3\x18\xe4\xc6\xb3\x6d\xa1\x16\x80\xf0\x70\x94\xf3\xaa\x48\x56\xf4\xa6\x95\x2c\x15\x2b\xc7\x95\x2e\x59\xb5\x42\x85\xaf\xda\x5d\x10\xfd\xf4\x89\x6d\x92\x4e\x98\xf7\x17\x7b\x53\x2b\xd8\xdd\x0c\x25\x34\x10\x9d\xda\xd2\x1e\x86\x93\x5e\xcb\x6b\xd0\x25\x6a\x6c\xab\x3a\xe9\xad\x8e\xb5\xbf\x4e\xa7\xba\x57\xfa\x33\xf1\xdf\xbe\x52\x1e\x8d\x56\xde\x9f\xe0\xf7\x7b\xd0\x2a\x26\xb6\x0f\x97\x7e\xf7\x1b\xd0\xea\x41\xfc\xbe\xaa\x59\x7c\x0a\xad\x1c\x02\x05\x87\x44\x5b\x1a\x73\x0e\x30\xe3\x10\x2a\x09\x18\x12\x52\x50\x4c\xb8\x66\x5a\x70\x88\xb4\x6d\x6c\x8c\xa0\x6d\xd9\x06\x09\x06\x2c\x6c\x63\xcd\x04\xe5\x44\x3c\xa3\x15\xb9\x1f\xad\xb2\xaf\xce\x92\x53\xf9\x08\xad\xae\x9f\x63\xe8\x75\x91\xea\xeb\x12\xd7\xb1\xa6\xd9\xa3\xa4\xe3\xc5\x4e\x1f\xf2\x25\xdc\x3c\xe6\x33\x62\x99\x70\xfc\x56\xd5\xf7\x57\xa0\x43\x46\xb2\x4b\x86\x8d\xca\x0e\x67\xf4\x6c\x7a\x0c\xdc\x7a\xa4\x47\x61\x81\x55\xaa\xd3\x64\x77\xbc\x94\xb3\x34\xcb\x6d\x95\x33\x90\x24\xaa\xec\x13\x60\xc0\x18\xf0\xf7\x85\x56\xe1\x09\x59\x06\x8d\xcd\xb0\xdb\x27\xc5\x59\x6b\x32\x2c\x49\xbf\xb9\x2d\xf5\xb2\xcb\x39\xa5\xf9\x84\x41\xc1\x41\xe6\x1c\x7b\x1c\xd4\x2d\x2a\x78\xf4\xd1\xfd\xce\x7f\x1c\xb5\x1e\x84\x02\x6f\x7a\x23\x3f\x1a\xb5\xb2\x7f\x82\xdf\xef\x41\xad\xeb\xf9\xfd\x48\x14\x70\xbf\x01\xb5\x1e\xc6\x6f\xfa\x77\x9e\x3f\xe7\x87\xe6\x20\x68\x0c\xb5\x2d\x87\x48\xc1\xb4\xa0\x06\x48\x2c\x6c\x6c\x19\xaa\x2d\x84\x04\x67\x82\x58\x0e\x37\x36\x24\x46\x18\x68\x21\x4c\x99\x0d\x19\xa7\x98\x03\xc6\x8c\xf9\xd7\x3f\x3f\x70\x3c\xa6\xbf\x36\x9e\x54\x0b\x9b\x25\xc9\x26\x27\xd5\x7d\xb3\x90\x11\x09\x4b\x94\x4b\xe9\x82\x9f\xa9\x47\x68\xa2\x6b\xb0\x9c\xf2\x32\xed\x62\xa3\x56\x3b\x1d\x20\x9c\x24\x34\x1d\xba\xef\xef\x04\xcf\x1d\xbe\x80\x74\xd5\x92\x91\x61\xc4\x47\x13\xf7\xb8\x98\x0d\xa4\xbb\x5f\xcf\x75\xa2\x35\xe4\xb3\x6d\x71\x97\x99\xa7\xb7\xd0\x5a\x53\x91\x3d\xfb\xf2\x5f\xf2\x99\xc5\x04\xb0\x35\xcf\x3b\xc9\xfe\xa9\x7a\x10\x68\x67\xda\xdf\xb9\x95\x23\x36\xa5\x45\x98\x1e\xec\xea\xa3\x3a\xd9\x4f\xfb\x54\xe6\x17\x2d\xd2\x49\xad\x47\xe3\x5e\x3f\x8b\x37\xfd\xf6\x60\xe8\x14\xe8\xb8\x39\x77\xd3\xdb\xe9\xb6\xbb\x9a\xa1\x7c\xfb\x30\xa1\x75\xa3\x68\x41\x05\x1d\x27\x90\xa5\x71\xb6\xd9\x05\x65\x3f\xfd\x9c\x07\x7e\x91\x29\x25\x7b\xbb\x81\xdc\xe8\xf5\x36\xe7\xad\xad\x0c\xc4\x99\x2a\x9d\x80\x74\x91\x1d\xba\xb6\xd3\xaf\xf8\xd1\x61\x32\x69\x0c\x26\xc6\x79\x61\xed\x75\xb4\x92\xbf\x8e\xe8\x1b\x68\x55\x8c\x2d\x7f\x89\x46\x88\x27\x74\x3b\xee\x26\x42\x3b\x5b\x1e\x57\xb6\x76\x7d\xb5\x5b\xe5\xc7\x61\xc5\xef\xea\x1e\x4e\x86\x3b\x2f\xa8\xbc\xf4\x43\x2c\x9f\xce\x79\x1c\xae\x75\xd5\x4f\xe9\x20\x0f\xa4\x7f\x3d\x0f\xbe\xaa\x03\xcd\x2e\xfd\x93\x5e\x8a\xc5\xbe\x7e\x68\x27\xd1\x58\xe8\x30\x53\x5d\x0c\xb3\xbb\x8c\x0f\x23\x9b\x34\x0a\x8b\xa1\xb3\x74\xab\xe3\x62\x52\x34\xd0\x7c\xd5\x3d\xc7\x64\x5c\xf2\x5d\x7d\x71\x1e\x3f\xb3\x72\x15\x93\x71\x5d\x4e\x6d\x98\xff\x3d\xfc\xc5\xfb\xf4\x73\x3a\x8e\x94\xd2\x92\xd0\x91\x48\x33\xc6\x29\x92\x92\x30\xc1\x95\xad\xb4\x44\x86\x48\x42\xb5\x40\x0c\x43\x49\xb0\xa3\xa5\xc2\x96\x90\x88\x49\x62\x31\x45\x85\xe5\x00\x85\x9f\x75\x1c\x7a\xbf\x8e\xe3\xbf\x3a\x0b\x4e\xe5\x53\x3a\xce\xab\xb3\x28\x0d\xdb\x38\xec\x80\x9d\xf0\x5b\x9b\x10\xb2\xf5\x6f\xdf\x8a\xed\xd0\xc6\xf9\x0c\x4d\x8f\x53\xb9\x1a\xd3\xb3\x6d\x29\xe8\x8e\xcb\x41\xc1\x0e\xc6\x1e\xad\x74\xa2\x89\x2a\xfa\x93\xd2\x9e\x0f\xf3\x20\xe4\xed\x62\x8f\x17\x0b\xfb\x23\xa9\x39\x64\x9f\xa0\xbb\xe3\x3c\xdc\xef\xc5\x8a\xa6\x14\x8c\xf0\x62\xdf\x1e\x35\xec\x00\xd1\xcc\xae\x3e\x5c\xa4\x9e\x25\x7c\x54\xde\x95\x8b\xe5\xda\x7c\x32\xa9\x95\x3b\x62\xd9\x45\xab\x1a\xd8\x77\xe8\x31\x4a\xef\x5b\xa3\x15\x70\xb7\x99\x69\x36\xad\xf8\xae\xaf\x3e\xf2\x99\xff\xe3\xba\xce\xe3\x74\x87\xfe\xdb\xf9\x45\x1f\xc8\xaf\xff\x27\xf8\xfd\x1e\x5d\x27\xe6\x9f\xf3\x70\xdd\xc1\xfd\x06\x5d\xe7\x21\xfc\x96\x7a\xdd\xc1\x40\x74\x53\xab\x5e\x83\x8c\x04\xb4\xee\xd1\x7d\x1c\x04\x2d\x60\x01\xec\x38\x96\x65\x23\xe3\x68\x63\xa8\x81\x80\x6b\x9b\x6a\x02\x24\x94\xd8\x70\x43\x10\xd2\x84\x58\x5a\x2a\x24\x21\xb4\x88\xc0\x0e\xb7\x18\x64\xd4\xe2\xcf\x68\x66\xdf\x8f\x66\xb9\x57\x67\xcd\xa9\xdc\x84\x66\xf1\x5e\x76\xa6\x6a\x5a\x6a\x0f\x53\xb5\xe2\xa2\x56\x70\x65\xa3\x32\xe8\x1d\x25\x9c\xe4\x6c\x13\xd8\xf5\xf5\xd1\x3f\x64\x5d\x67\x92\x1d\x97\x9b\xe3\xcb\xa8\x9f\x4b\x0c\xed\xd6\xe1\x3a\x5a\x2d\xca\x75\x1d\xcc\x40\x6b\xd6\x82\x7e\x38\x12\x68\x40\xe0\xce\x2b\x6e\xa7\xb3\x4d\xba\x51\xa5\xa5\xa0\x0a\xf6\x93\xa4\xbb\x1c\xac\x83\x6a\x72\xd5\x25\x0b\x44\x1a\x6b\x27\x35\xe2\x61\xc7\x1b\x66\xa7\xf3\x44\x23\x18\xc1\x6c\x2f\xed\xb0\xea\x6a\x97\x8e\x94\xbb\x3b\x23\x52\xff\xe0\x06\xd9\x7c\xdf\x95\xc9\xd1\x96\x6d\xf3\x9c\x40\x52\xdf\xad\x9a\x94\x35\x6b\x51\xab\x7a\x6c\xee\x86\x29\xd1\x28\xa6\x1b\x51\xff\xa3\x6c\x6b\x7f\x1c\xed\x1e\x82\x1e\xbf\xaf\x3a\x7f\x0c\xfd\x72\xff\x0e\xfe\xbf\x07\x0d\x63\x55\x7d\x3b\xba\xb8\xdf\x80\x8e\xb1\xd3\x89\x6f\xe1\xff\x3c\xbe\xa6\x80\x7a\x07\x10\xf6\x9b\x87\xc5\xe8\x10\xe4\xbc\x51\xd8\x91\xa8\x32\x1f\x24\x90\x55\xb5\x84\xdc\xaf\x06\x41\xad\x30\xe8\x65\x3c\x12\x1b\xaf\x73\xf9\x0c\xa2\x52\x66\x28\xe6\xda\x32\x8e\xc5\x84\xe5\x30\x46\x25\x30\x88\x61\xad\x6d\x46\x2c\x0b\x70\x6c\x69\xad\x29\x3b\x79\x4f\x11\x2e\x28\x12\x46\x01\x86\xa0\x42\x9c\x1b\x71\xb2\xd8\xb3\x87\xf8\x50\x5d\x4f\xbf\x6f\xb7\xd8\x0f\x29\x5b\x64\x72\x32\x6a\x37\x98\xeb\xf8\x2e\x5f\x1c\xc6\x74\x96\xdf\x0f\xcb\x69\x58\xec\x76\xbd\xa9\xce\x0e\x47\x66\x9f\x23\xed\x43\xc9\xcf\x07\xbd\x8a\xbb\xaf\x56\x65\xba\x36\xcf\xf3\xa8\x45\x6b\x60\x1e\xd6\xbb\xa8\x88\xab\x51\x31\xd7\xc3\x83\xbc\xda\x17\x8e\x19\x9a\x7a\xb6\xd8\x73\xd3\x2b\xe2\x5a\xbf\xb0\xca\x4f\x3a\x3b\x53\x6d\xd9\xd3\x28\x70\x79\x50\xb5\x27\x93\xf5\x7a\xda\x59\x86\x76\xb2\x3e\x3e\x58\x74\x69\x3f\xc8\x62\x1f\xdb\xcd\xdd\x80\x30\x7d\xec\x5e\x21\x4c\x2c\x3a\xe6\xc1\x08\xf3\xec\x0f\x7d\x50\x50\xae\x3b\x79\xcf\x59\xcc\x9c\x71\x6a\x9f\x87\xd9\x69\xe5\xc8\x43\xb3\x66\x99\xb5\x8f\xca\x22\xdf\xca\x1c\xc2\x4e\xb0\xaf\x06\x57\xe3\x7e\x99\x07\xa9\x58\x8c\xe1\x17\xe7\xdd\x29\x22\xfe\xec\x1b\x2a\x2e\x93\x27\xe6\xef\xfc\x55\x5f\xbd\x93\x44\xaf\x23\xed\x67\xd7\xd2\xdf\x47\xa5\x49\x65\x2b\x82\xa7\x6a\xf3\x31\x5b\xec\x1d\x2b\xfb\xe5\x39\xfd\x42\xef\x7f\x66\xfb\xd5\xe5\xf9\x16\x04\xcf\x9c\xb0\xf5\x8c\xe0\x7d\xf7\xff\x03\x08\x2e\x91\x54\xd8\xe6\x08\x00\x6d\x41\x82\x31\x35\x36\x94\xc4\xc2\x90\x0a\x22\x08\xc6\x58\x13\x48\x01\x46\xc0\x48\x62\x53\x4b\x3b\x9a\xd8\x98\xda\xd2\xb1\xa5\xc2\xcc\xc8\x7f\xfd\xf3\x03\x59\x0f\x41\xf0\xc2\xd5\x70\xfd\x75\x3a\xb1\xdd\x2b\x17\x17\x8e\xb5\x91\x41\x63\x9d\x20\x64\x91\xa0\xed\x60\xe9\xa3\xdc\x72\x4b\x8f\xb9\x75\xb5\xb4\x1b\x1b\x77\xbf\x5f\xf5\x54\x58\xcb\x6f\xc6\xf6\xbe\xb7\xea\x8b\xc3\xa0\x9a\x6e\x77\x47\x03\x5d\x0d\xd8\xa1\xef\x76\xc0\x76\x7d\x10\xaa\xeb\x63\xe0\xee\x1b\xd9\xfa\xfa\xe7\x3d\x92\x3b\x07\xe4\x66\xfb\x5c\xbf\xd0\xaa\x6f\xe5\xaa\xe5\x15\x96\x1d\x50\xf7\x48\x23\x6c\x95\xcd\xbe\x1b\x56\x47\x91\xf2\x4d\xde\x54\x1a\xe6\x62\x68\xba\x0b\xf1\x63\x3a\xce\x2d\x88\x6f\xdc\xab\x95\xf7\x3f\x02\xf1\x63\xa6\xb1\x5b\x10\x2f\x77\xea\xfb\x33\xe2\x5d\x47\x84\xfd\xbd\x88\x17\x43\xfc\xff\x91\xed\xd7\x97\xe7\x5b\x10\x3f\x75\x32\xd8\x9f\x11\xff\x3a\x22\xef\x3f\x12\xf1\x21\x63\x4a\x52\x8a\x80\x22\x0e\xe1\x84\x70\x8d\xa8\x05\x0d\xa5\x96\x96\x44\x10\x6e\x59\x8e\xa3\x20\xe6\x00\x0b\x84\xb1\xb4\xa1\x96\x52\x42\x4e\xa1\x62\xdc\x61\xc8\x79\x42\x7c\xf0\x10\xc4\xbf\xce\x5d\xfe\x6f\x44\xfc\x18\xbd\x18\xe2\x5b\xbb\xe5\x50\x2f\xa7\x8d\x65\x82\xd4\x60\x90\xd6\xb3\x29\xd8\x8c\xc8\x64\x59\x2d\x55\x9a\xd5\x65\x2d\xac\xd5\x86\x64\x39\x94\xa5\x4d\x3f\x39\x5d\x6a\xaf\x35\x58\xf5\x1b\xc9\x31\x8a\x5c\x56\xf0\xe7\x6d\xa1\x12\x6b\x2e\xcb\x5e\x71\xd2\x2d\x4e\xb2\xfb\x5c\xda\x2b\x8f\x3a\xb5\xd4\x33\xe2\x17\x7b\xc8\x0f\xf7\x20\xec\x44\x9d\x4d\xa5\x5f\x82\x61\x75\x2f\x3a\xfd\x74\xde\x1a\xcf\x5a\x2b\xab\x99\x2b\xad\x8e\xe9\xf9\x10\xf2\x61\xf3\xa3\x6c\xd0\x9f\x44\xfc\xd8\x09\xc5\x2d\x88\xef\xbb\x57\x2b\xf5\x7f\x04\xe2\x5f\x4e\xdb\x6e\x42\xbc\x73\x20\xf1\x19\xf1\x2e\x12\xfa\xb7\x23\x5e\x0c\xf1\xff\x47\xb6\xdf\x5c\x9e\x6f\x41\xfc\xb3\xe1\xfa\x8c\xf8\x33\xf7\x2f\x44\xfc\xb8\xbf\xcf\x67\x10\x1f\x28\xdb\x41\x48\x62\xc3\xb9\xb0\x1c\x4d\x21\xb5\x18\x97\x06\xd9\x00\x2b\x20\xb8\xd0\xd0\xa6\x10\x70\x28\x10\x74\xb4\x32\xc8\xc6\x94\x68\xc6\x38\x37\xc8\x61\x92\x8b\x7f\xfd\xf3\x83\xc4\x11\x3f\xe3\x0d\xca\xed\x4c\x6e\x18\x76\xd5\x91\x1c\x9d\xc8\x46\x5d\xff\xb0\x0c\x60\xbd\xe2\x90\x5e\xbd\x03\x36\xa5\x55\xba\x12\x6c\x26\x66\x75\x02\xac\xde\x8b\xcc\xbf\xe7\xa9\x74\xea\xe9\xac\x98\x64\xd7\xbd\xa6\xf7\xcb\xfb\x54\xc6\x3b\x94\x8f\x31\xf1\x6e\xd0\x5e\x62\x3f\x3e\xbd\xce\x77\xf0\x61\x99\x55\x63\x4a\x4d\x3f\x93\x19\x2e\xed\x30\xeb\x36\x3d\x05\xa3\xa8\xba\x11\xc7\x7d\x72\xc8\x0b\xb2\x0c\x77\xe3\x2c\x9a\x6d\x16\x85\xa0\x92\x70\x8f\xc3\x03\x5c\xb6\xd7\x45\xe2\xce\x0e\xf3\xc1\x6c\x3c\xdc\xad\xc2\xee\x36\xd7\xa0\xad\x2c\x2b\x0f\xd4\xb4\xe5\x66\x9e\xad\x30\xb9\x6e\xff\xb8\xaf\x2d\x96\xe9\x6a\x38\x49\xf3\xe3\x51\xb6\x2c\xb1\x48\x14\x60\x9e\x17\x8f\xc5\x2a\x3a\x2a\xbf\x3b\x9f\x2c\x1c\x3c\x2d\x7e\xe4\x81\x14\xbf\x2b\xed\x6d\x84\x2e\xc7\x10\xba\xdc\xf0\xf6\xad\xb2\x2e\x0c\x14\xaa\x4d\x6b\x87\xee\x56\x49\x51\x5c\x67\x7a\x1e\x3a\x46\x51\x56\x74\xf0\x66\x97\x07\xe9\x9f\xfd\x70\x3e\x53\xcf\x5c\xfa\xf9\xdc\x81\x1f\xdd\x91\x73\xc5\xeb\x03\xe9\x67\x6f\xa1\x1f\xb3\x13\x9f\xef\x50\x3a\xf3\xb3\xcf\x37\xb3\xc1\x1e\x4f\xb2\x48\x26\x64\xb2\xa0\x19\xd8\xaf\x16\x56\x65\xdc\x34\xd5\x4e\xab\xbd\x16\x43\xdb\x1d\xb5\x4a\xf3\xa9\x7d\x8e\xaa\x6f\x6f\xc2\x0e\x88\xca\x2f\xd3\x25\xd8\x97\x47\xe5\xeb\x74\x52\xb1\xf6\x96\x6f\x69\xef\xf5\x3c\xf5\xca\xcd\xfc\x31\x1e\xac\xfc\x09\xa9\x14\x82\xa9\xb3\x2f\x33\x30\x5c\x13\x0b\x10\x86\xb1\x65\x29\xc9\x2c\x20\x6d\x4b\x61\x1b\x3b\x8c\x53\x1b\x50\xa4\x20\x47\xd8\x30\x81\x34\x82\x9c\x41\xc0\x89\xa5\x4e\x3b\x6f\xf8\x10\x3d\xec\x9d\x3b\x7c\xae\xf5\xb0\x37\x6e\x38\x7a\xbf\xc4\xfd\x05\xb3\x87\x75\x6b\x3f\xda\x57\xb0\x98\x16\xca\x4b\xaf\x30\x6e\xcc\x97\x53\xaf\xc1\x86\xfe\xbc\xba\x77\x57\x95\x6a\x36\x5c\x36\x6b\xc9\xfd\xda\x6f\x8f\x93\xb5\x1e\x9c\x35\x07\xad\x4e\x22\x39\x28\xd5\xf3\xe3\xc4\x20\x0c\xbd\x7e\x16\x02\xdf\x10\xa7\x92\xe4\xa2\x50\xcc\xce\x17\xd1\x2a\xff\x24\x51\x1b\x02\x26\xed\x94\x67\x96\x91\xdb\x8e\x3c\xb7\x72\x08\x72\xb9\x4c\x4b\xe5\x27\x13\xd9\xa9\x35\x66\x56\x42\xd4\x46\xc5\x79\x9e\xb7\x2a\x8f\xd9\x41\xc7\x0d\xce\x37\xe8\x53\xa6\xe5\x5e\xe9\xc1\x7f\x99\x3e\x95\x7a\x4d\x9f\x8a\x5b\xc9\x6f\xd0\x27\xd0\xc9\xed\xe7\x59\x9f\xb8\xce\x62\xfa\x57\xe8\x13\xd7\xa9\x35\xae\xf4\xa9\xff\x99\xed\x8f\xe1\xf8\x0d\xfa\x14\x3b\xdf\xd1\x74\xd6\xa7\x62\x91\x92\xb7\x47\xee\xfd\xbb\xf5\x29\x2a\x90\x23\x95\x22\x12\xd8\xca\x40\x0b\x20\x45\x38\xd1\x10\x00\x89\x05\x82\x10\x38\x82\x0a\xcd\x80\x05\x09\x02\x54\x00\xce\x05\x74\x84\x04\x10\x01\x4a\x01\x51\xe4\x19\xb9\x1f\x10\xf3\xfb\xce\xbd\x48\x7f\x7a\x07\x1d\x2b\xb1\x1d\x74\x55\x58\x0b\xbf\x33\x1d\x83\xce\xb2\xd1\xea\x36\xe8\x30\xc8\xce\x24\xcf\x57\xc3\x64\x2a\x33\xe9\xfb\xe0\xd8\x9c\x44\xb5\x43\xdf\x12\xb3\xc6\x50\xa1\x51\x33\x55\x44\x47\xd6\x72\x12\xf9\x9a\xef\x56\xbd\x52\xa5\xd4\x1f\x07\xb9\x75\xdf\x0f\xb3\xfd\xac\x5f\x1e\xce\xc0\x3e\x4c\xbc\x9c\x92\x1d\x47\x15\x20\xb3\xcc\xe9\x7b\xac\x13\xe1\x41\xce\x5b\x1d\xf2\xe1\x7a\x49\xeb\x6e\x54\xee\xac\xf8\xe2\x30\x74\xbc\x51\x76\x92\x55\x97\xbe\xf8\x4b\x10\xbf\x74\xa9\xff\xf6\xd8\xdb\xff\x34\xc4\x8f\xa9\xa6\xb7\x21\xde\xa9\xfc\xe7\x22\xfe\x7f\x50\xfb\x1f\x88\xf8\xbb\x5f\xe7\xd3\xc3\x11\x3f\x5e\x3e\xe5\x05\x46\x95\xed\x18\x60\x1b\x6e\x38\x44\xc0\x56\x94\x1b\x6a\x33\x0d\x34\xc1\xd0\x32\x88\x00\x68\xd9\xc6\x50\x20\x95\x31\x10\x48\x6a\x59\x9a\x3b\xc6\x21\x80\x10\x81\xf4\xe9\xbe\x29\x84\x1e\x92\x5d\xaa\x76\xc5\xfe\xef\xd9\xa5\x16\x4d\x45\xfb\x51\xa0\x8e\x6b\xc7\x86\xc0\xf6\x69\x3e\x94\xa8\x8f\x52\xe1\xbe\xdc\xef\xf8\xb5\x79\xc6\xd4\x6b\x83\x03\xe8\x89\x73\xf6\xf3\xb7\xb3\x4b\xa5\x13\x93\x7e\x31\x7f\xec\x2d\x4c\x14\xe4\x8b\xf9\x45\x67\xca\x4a\x4b\x39\xdc\x1c\xbc\xbd\xdd\xad\x99\xae\xdf\x1a\x6c\x0f\x01\x5a\xe5\x83\xd4\xd4\x57\xd5\xce\x60\x5c\x5d\x13\xbb\xd5\x4a\xda\xa4\xb4\x6e\x1d\xf0\x52\xcb\x66\x62\xb4\x0c\xa1\xcc\x15\x7b\x23\x84\xe6\x9b\x8d\x76\x4e\x77\x67\x8a\xee\x68\x6f\x68\x62\x58\xee\x82\x05\x9b\x4e\x07\xa4\x95\xaf\x55\xea\xf9\x5c\x12\xe6\x2a\xc9\x43\xce\x77\xab\x8b\xda\xa0\xde\x16\xb5\xc5\x65\xf7\x77\x4f\x76\xa9\x7c\x0c\xa5\xbe\x98\xdd\xa9\x99\x0b\x36\x3a\x76\xcc\x78\x53\x76\xa7\x07\xd2\xbf\x1e\xff\x4f\xd1\x8f\x65\x97\x8a\xdd\xc6\x71\x4b\x76\x27\x1c\x9b\x2b\xce\xeb\x14\xdf\x8f\xe6\xbb\x83\x7e\x26\x9f\xb4\x67\x77\xd0\x77\xaf\xe8\xa7\x1b\xf3\x0a\x5a\xa4\xdb\x29\x54\x45\xc7\xad\xe8\xae\xc4\x6c\x30\x38\xea\x8c\xcc\x8e\xbc\x43\x2a\x0c\x13\xe3\x0a\xf3\x12\xb9\x52\x3b\x3a\xdf\xe5\x77\xc9\x2e\x95\x7f\x8f\xc6\xed\xb1\xcc\xdc\x22\x8a\x73\x0d\x91\x25\x80\xb1\x31\xc2\x36\xd6\x0e\xe2\x82\x2a\xec\x3c\xa9\x8d\xc0\x20\x63\xdb\x94\x02\x6e\x2b\x07\x10\x63\x53\x68\x49\xad\x21\x67\x8e\xc5\xb0\x63\x3d\xa1\x4c\xfc\xfe\x9f\x42\x71\x8c\xf4\xac\xd0\xca\x49\xdb\x54\xd9\x5a\xef\x37\x43\x3f\x57\xc1\x95\x5d\xa7\xdc\xcc\x67\x07\x23\x1a\x20\xab\x89\xe5\xba\xd3\x39\xad\x38\xe7\x38\x9b\x57\xf3\xc3\xc6\x9e\xcf\x37\x43\xc5\x32\x64\x7e\x7e\x14\xd1\xd5\xcd\x49\xa7\xe2\xbd\xd0\x0f\x52\x61\x6b\xda\x46\x79\x50\x45\xc4\x73\x0f\xfc\x60\x4d\x56\xa3\x3e\x2a\x1f\x7b\x86\x4f\xd3\xeb\x2d\x8f\x8a\xbe\x9f\x60\x78\xae\x69\x7d\xdf\xf7\x92\xe3\xf4\x18\x8e\x9b\x4d\x96\xeb\xf6\xbb\x23\xb1\xe4\x8b\x64\x32\x48\x5a\xdb\x82\xe5\xce\xd2\x6e\xb7\xa1\x9b\xc0\x69\x8d\xfa\xe3\x13\x2a\xcc\xb2\x70\x81\x47\xe9\x3d\xb3\x2a\xb9\xe6\xac\xba\x14\xad\x7e\x17\xed\x9d\xa4\x82\x21\x37\x61\xd6\xa8\x61\xa6\x8a\x17\x13\x37\x8a\x29\x6c\xaf\x23\x4e\xf8\xeb\xa8\xbe\x85\x38\xf1\xb3\xf2\xaf\x23\xf2\xf9\xbe\x98\xf4\x9b\x52\xfd\x31\xe2\x3c\x8e\xfe\xbd\xb9\x93\x63\xa9\xf1\x6e\x91\xb8\xf3\xfd\x12\xf9\xe0\x1d\x9a\xef\x23\xce\xa3\xe9\x7f\x94\xbd\xf4\xba\x0c\x2f\xdf\xf9\x2a\xfd\x58\xee\xef\x9b\xf4\xbe\xbb\x63\x79\xb0\x86\x18\x43\xa3\xa1\x76\x94\x72\x24\x75\x28\xb1\x2d\xc9\x0c\x41\x36\x97\x02\x1a\x62\x01\x82\x38\x73\x1c\x64\x1c\x05\x18\x13\xd4\x60\xdb\x02\x5a\x40\x87\x09\xc4\x4f\x88\x44\x1e\x82\x48\xef\x64\xaa\xba\x03\x91\xce\xda\xe2\xe5\xc6\xf7\xf3\xac\xb9\x20\x52\x65\xd3\x5f\x24\x52\xc8\x9a\x2b\x71\xdc\xb6\xdb\xfe\x91\xd5\xab\x28\x91\x29\xeb\xba\xea\x2c\x64\xb2\xbb\x52\xb0\x12\xaa\x3e\xad\xa4\x36\xb6\x5e\x6d\xab\xaa\xd9\x09\xd0\x74\x3b\x4b\x79\x85\x83\xf6\x8f\x8e\xe7\xb1\x63\x3d\x18\x36\x86\x8b\xd9\x72\x97\x8b\x26\x09\xd7\x37\xbb\xfc\x39\xc3\xc2\xb0\x9e\x4e\x0e\x69\x05\x96\xb9\xdf\xde\x1d\x4c\x0b\x2d\x4b\x25\xe0\xb6\xab\xf3\x61\x26\x51\xf1\x7b\xeb\x6d\x7d\x97\x5b\x16\x0b\x2b\x7a\xe1\xec\x2e\x44\x8a\x9f\xe5\xde\x80\x08\x55\xf7\x0a\x11\x7e\x9b\xf5\x1f\x20\xd2\xe3\xe8\xdf\x74\x4f\x65\xec\xa4\xe0\x2f\x95\xc8\x97\xe7\xd1\xbf\x8f\xbf\x73\xa9\x92\x65\xf1\xf7\x3e\xfd\x1c\x62\x60\x29\xa8\x74\xb4\xc2\x4a\x68\x49\x30\xe4\x06\x70\xae\x20\xb2\x2c\xa0\x14\x53\xd4\x76\xa4\x01\x4c\x3a\x12\x53\xc0\x29\x41\xda\xa6\x90\xdb\x90\x20\xad\xb4\x3a\xe5\xb6\x43\xf4\x21\x88\xf1\x4e\xac\xf0\x37\x22\x46\x35\xa1\x9b\xf9\x5a\xb7\xd5\x1b\x27\x7c\x77\x61\x57\x69\xce\x51\x20\xd9\x69\x12\xb1\x99\x59\x7c\x3e\x2a\x0d\xfc\xfe\x3a\xa5\x1b\x87\x08\xd9\xad\xb6\x5d\x4a\xcf\x7b\x26\x3d\xa5\x99\xb0\x2d\xed\x28\xa8\xb6\x2b\x9d\x41\x4a\xda\xc5\x8c\x6b\x57\xb4\x83\xdc\x3a\x06\xe3\xd0\x3d\xeb\x30\xf5\xf2\x7a\x35\x5a\x37\x85\x9d\x0d\x16\x0e\x5f\x36\xca\x6e\x4e\x4d\x3b\xba\xec\xf4\x0e\xe5\xfa\x60\x1e\xd5\xa6\xe1\x42\x46\xb5\xb5\x1d\x7e\xe4\xe1\xfd\x39\xc4\x88\x3b\x57\xde\x20\xb1\xcf\xf1\xba\xb7\x4b\xec\x03\xe9\x67\x6e\xa1\x1f\x43\x8c\xbf\x54\x22\x5f\x9e\xc7\x7f\x27\x7f\x9f\x42\x0c\x02\x91\xe3\x70\xe6\x68\xac\x11\x95\xc0\xb6\x31\xe3\x0c\x23\x1b\x43\xdb\x92\x92\x12\xa1\x84\x0d\x6d\x20\x05\x01\xd0\xb6\x8d\xc5\x08\xe7\xdc\x31\x40\x72\xa6\x10\x84\xa7\x33\x4d\xfb\x21\x88\xf1\x4e\x06\xa7\xbb\x11\xe3\x7a\xd4\x2e\x88\x51\x26\x8d\xf4\xac\x03\x2c\xaf\x30\x2b\xa6\x52\xbb\x5d\x79\x63\xb5\x77\x09\x93\x10\x81\xe5\x8f\x02\x96\xad\xd2\x1d\x8a\x58\x90\xcc\xe6\xe5\x7a\xe2\xd8\x10\x3b\x6b\x36\xea\x36\x45\x64\xd5\x15\xae\xf4\x7d\x39\x9b\x58\x87\x99\xbf\xef\xcb\xc2\xd0\xab\xef\x7a\x7e\xaa\xdc\x0d\xe4\x49\xaa\x5b\xa3\x61\x71\x52\x6d\x8e\x44\x4a\x59\x93\x79\x80\x82\x69\xa6\xdc\x13\x10\x15\xf6\x07\xe0\x4d\xcd\x2e\xe2\x8b\x99\x23\x17\xaa\x3c\xfc\xe8\x7c\xf3\x93\x88\x11\x8f\x09\xb9\x41\x62\xa5\x7b\x9f\xc4\x3e\x90\xbe\x77\x0b\xfd\x73\x87\x9d\x10\xe3\x2f\x95\x48\xf7\xd7\x3b\x18\xbe\x28\x2b\xf1\x1c\xff\xb7\x9c\x37\xff\xbb\xc7\xe7\xe1\xf4\x7f\x2b\xaf\xfe\xf9\x53\xb6\x1f\xa3\x85\x63\x39\x16\x81\x50\x0b\x6e\x03\xc9\x11\x74\x20\x24\x42\x48\x63\x23\x60\x41\xa6\x95\x34\x1c\x12\x2c\x1d\x68\x4b\x4c\x84\x26\x8e\x25\xb8\x66\x44\xda\x10\x9d\x2c\xcc\xce\x43\x2c\xcc\xd7\x7d\xfa\xdb\x7e\xf7\x8b\x39\x56\xde\xb1\x30\x67\xa6\xc7\x6d\xa5\xef\x85\x29\xb0\x41\x29\xbf\x99\xcb\x66\xa2\x7c\x67\x3a\xb6\xfc\xea\xc2\x4e\x95\xe7\x46\x1e\xf4\xae\x50\x5f\x15\x8a\x2c\x6a\xe2\x5c\xb3\xec\xed\xca\x01\x1c\x35\x0a\x87\x65\x67\x92\xb2\xf7\x2a\xb5\xcf\x15\x79\xa5\xdc\x0d\xb8\x9b\xdf\xd3\x74\x63\x50\xea\xce\x83\xdc\x13\x3a\x2d\x13\x1b\xb7\x9f\xcd\x6f\x36\xd3\x5c\xb1\x3c\xcb\x47\x1b\x87\x1d\xbd\xf4\x74\x7d\xa4\x85\xd6\x21\x6d\xbc\x4e\xa2\xe3\x6e\x36\x91\x94\xa3\xc7\x58\x98\x0b\x31\x7b\xcb\x17\x2d\xbc\xc1\xa1\x96\x20\xb1\xab\xeb\x6f\xb2\xf0\x3e\x90\xfe\x1b\xd6\x8c\x4f\xdb\x7b\x26\xb1\x57\x37\x58\x78\x23\x79\x55\xf3\xef\xe5\x7d\x7b\xcf\xed\xf4\x67\xc4\x72\x58\xfb\x0e\xfa\xee\x15\xfd\xaf\xe6\x6e\xb9\x58\x98\x0b\xef\x65\xaf\xbd\xdd\xc2\x0c\x11\xc1\xca\x38\x16\x04\x00\x60\xe0\x70\xc6\x98\x46\x40\x42\x46\xb1\x02\x54\x38\xda\x68\x47\x63\x06\x85\xad\x6c\xac\x34\xc1\x0c\x31\x07\x12\xc0\x2c\x0d\x2c\x0c\xcc\x33\xca\xc0\xfb\x51\xa6\x7e\xc5\xfe\x6f\x7d\x7d\x43\x86\xa0\xb7\x50\x26\x43\x3b\x5b\x37\x2c\x81\xdd\x30\x5a\x29\xfb\x18\x66\x0a\x6b\x6b\x98\xad\x26\xa3\xf9\x3c\xa0\x7e\xa1\x30\x4d\xba\x4e\xab\x10\xb1\x51\x73\x54\xae\x54\x47\x9b\xa0\x96\x5a\xbb\xb6\x69\xec\xeb\xa4\xd8\xb4\x52\xbd\x92\x58\x07\x07\x67\x91\x8d\x0e\x2b\x2b\x4f\x4d\x53\x27\xe5\xee\x94\x79\x3c\x0f\x9a\xa6\x9f\xf6\xea\x41\xb8\xe8\x4d\x47\xb9\x74\x34\xb6\x3a\x9b\x6a\x72\x46\x0a\x45\x04\x2c\x14\x35\x9a\x93\x74\xab\x97\x19\xa4\x52\x1f\x65\x70\xba\x1a\xc9\xc7\xa3\x4c\x55\xd5\x6a\xed\x7b\xa5\xfc\x81\xf4\xaf\xc7\xff\x53\xf4\x1f\x82\x32\xbf\x49\xf9\x4d\x56\xe5\x3b\xe8\xef\xfa\x24\x99\xbd\x83\xbe\x7b\x45\x3f\x43\x0a\xa3\xa1\x58\x24\xea\x86\x8c\x56\xad\x43\x00\x93\x6b\xff\x98\xde\x0d\xeb\x7d\xab\xa7\xc8\x74\xc4\x46\x6e\xdd\x05\x8d\xf1\xe8\x98\x38\x7d\xff\xdb\x51\x06\x00\xdb\x22\x86\x61\xa9\x28\x51\xb6\xa0\x36\xe2\x00\x62\xee\x10\xa9\x11\x75\xa4\x63\x19\x07\x13\xc7\x18\xae\x95\x31\x36\x60\xc8\xc2\xca\x31\x0e\x66\x04\x11\x81\xf5\xc9\x6a\x1c\x8f\xf0\xbf\x3d\x5f\xdc\x47\xb7\xa4\x5c\xb7\x34\x36\xcb\x3e\x55\x52\x2f\xbd\xea\xa5\x0f\xa3\x0c\x07\x3a\x31\x5a\x77\x37\xe3\xe6\x32\x17\x6d\xaa\xf6\xde\x2a\xef\xed\xce\x08\x4f\xea\xb3\x32\x6e\x90\x96\x9b\x9d\xd4\xdb\x09\xb8\x6c\xcf\xf6\xa3\xf2\x6e\x91\x2d\x0c\xd6\xe1\xd4\x73\x5b\x6d\xc0\x12\x69\x72\x90\x73\x32\xaa\x96\x4a\xf3\xce\x7e\x99\xd6\xf5\x62\x21\x68\xf9\x4f\x48\xe0\x75\x53\x26\x2a\x83\x08\xd8\xbd\xe3\xac\xd1\x98\x75\xab\x95\xd9\xc1\x4d\x78\x9d\x5a\x62\x83\x92\xb2\x57\xf6\x60\x6d\x50\x68\x81\x75\xec\x6c\xfa\x1e\x9f\xa5\x42\xac\xfd\x37\xa0\xf0\xf3\xd9\x51\xf8\x4e\xb7\x7d\x80\x32\x8f\xa3\x7f\xef\xad\x27\xd3\xcb\xab\x5b\xa4\xec\x7c\x76\x54\xe8\xbf\x43\xf3\x7d\x94\xf9\x46\xfa\x77\x67\xde\xa6\x86\x63\x6a\x0b\x82\x0c\x41\x0e\x55\xb6\xcd\x15\x22\x12\x12\x0b\x6a\x05\xa5\x42\x4a\x39\x02\x53\x8b\x13\xa1\x21\x14\x54\x40\x07\x38\xc2\x01\x42\x2a\xa4\x15\x54\xfc\x5f\xff\xfc\xc0\xf1\x28\xf0\xe2\x7a\xb3\xcc\xe6\x0a\xdd\xa4\xae\xaf\x49\xbf\x4c\x17\xf9\xae\x5b\x16\xbc\xbb\x8d\xf2\x93\x45\xe9\xb0\x72\x69\xb0\x64\xeb\x92\x9e\xec\x4f\xb1\x3a\x9f\x93\xf2\x6b\xbb\xcd\x17\x7a\x31\xf7\xda\x69\x75\xf6\x85\x7e\x50\xac\x38\x25\xb3\x76\xb9\xd1\x33\xd7\x9f\x6c\xe7\x2b\x6f\x36\x5e\x4c\xb0\x3d\x72\x37\x8b\x1d\xee\x83\x56\x67\x34\x29\x59\x23\x1a\xd4\x26\x60\xb4\x9f\xf1\xe8\x98\xd9\x65\x1a\xa8\x93\xa8\xc0\x5c\x35\xa7\x46\x8d\x42\xe4\x05\xbc\xb9\xf7\x53\x26\x28\xe6\x06\x4b\x3a\xad\xac\x9e\xef\x87\x14\xb4\x3e\x5d\x37\x59\x73\xb0\x56\xd4\x02\xbb\xc8\xdd\x58\x2b\x8b\xc1\x52\xbd\x3f\x17\x78\xb8\x5e\x16\x53\x43\xec\x3b\x56\xc2\x5a\x7f\x94\xed\xe8\x73\x76\x9b\x78\x50\xe5\x0d\xbb\xbb\xe7\xb3\x99\xdb\x25\xfe\x81\xf4\xef\x3d\xad\x8e\x99\xf5\x6f\xd1\xde\xcf\x77\x35\xde\x21\xf1\x8f\xa6\xff\xd5\xd3\xea\x7b\x32\x63\x5e\xec\x56\x0f\xcf\x8c\xf9\x29\x44\xb2\x84\x14\xd4\xe6\x1c\xd1\x53\x52\x0a\x05\x31\x36\x5a\x1a\x83\xb8\x25\x11\xb3\x8d\x03\x0c\xe2\x4c\x00\x84\xa1\x43\x1d\x87\x51\xa2\x6d\x9b\x2a\x8c\x6d\x69\x09\xa0\x7f\x22\x12\xbc\x1f\x91\x3e\x3c\xad\xbe\xe4\x9d\x7d\x20\x22\x95\x6b\xed\x7e\x68\x12\x3b\x8b\x29\x3d\xcf\x34\xf6\x65\x59\x98\x8e\xda\xbd\x9c\x0b\xb3\xd1\x38\x35\x19\xd4\x26\x43\xab\x42\x69\x76\x33\x70\x8f\x4d\x3d\xee\xc8\x74\xb5\xac\xd2\x79\x4b\xb6\x64\x62\x5f\x18\x1c\x76\xa5\x6e\xa3\x3c\x2c\xba\x74\x57\xa3\x45\x86\x2b\xf5\x28\x1b\x05\xde\x09\x35\xd2\xce\x7a\xba\x18\xf5\x5a\xf5\xad\x35\x6e\x26\x8e\xc9\x6a\x7f\x47\x0c\xce\x1d\x17\xc2\xb3\x8a\xfe\xb0\xd0\xd3\x0a\x02\xcf\xb8\x2b\xfd\xd7\x21\xd2\x4d\xa7\xd5\x0f\xa4\x7f\xdb\x69\xf5\xb7\x20\xd2\xa7\x6e\xdf\xbd\xe6\xf1\xd1\xf4\x3f\xba\xbd\xf6\xba\xfc\xa5\xb9\x7a\x3f\xe9\x37\x0c\x35\xb2\x8c\x22\x36\x66\x50\x18\xa8\xa1\x00\x08\x6a\x20\x24\x03\x9c\x60\x87\x23\xca\x80\xc3\x84\x16\xc6\xb6\xb5\x80\x02\x29\x07\x32\x00\x01\x67\x0a\x4a\x62\x3d\x67\xce\x7e\xc0\x4e\xe8\x1d\x44\xba\x2d\x73\xf6\x45\xa7\x8a\xcd\xe4\x58\xe6\x6c\x5a\x85\x46\x83\x7e\x90\xda\xcd\xaa\x96\x29\x57\x2a\x5e\xab\x98\xb3\x02\xd5\xee\xb6\x47\x5e\x47\x54\x48\xbb\x44\x40\x66\x52\x6f\x69\x15\x96\xcb\xdd\xb5\xe8\x92\x42\xb1\xdd\x38\x46\x1c\x8e\xf3\xfe\xb6\xd3\x8f\x56\x40\x75\x37\xdd\x5c\x2f\x4c\xe6\xab\x11\x2f\x5a\x60\xf9\x33\x8a\x43\x34\xf0\x2e\xd9\x56\x85\x62\xb2\x34\x5c\x35\x4b\x83\x6d\xc1\x8f\x1a\xc5\xca\xdc\x2f\x6c\x97\x0c\xd1\xc3\x8a\xf5\xe7\xde\x60\xa1\x4a\xb1\x28\x9d\xbf\x24\x73\xf6\xb5\xf4\xfd\xe9\xcc\xd9\x37\x65\xee\x7e\x50\xe6\xec\x6f\xd4\x0f\xdc\x47\x64\xce\x7e\x30\x7f\x5f\x3e\x09\x57\xd4\x96\x46\x40\x1b\x70\xc7\x61\xda\x76\x08\x36\x46\x51\x20\x2c\x47\x73\xa9\xb4\x4d\x15\xa1\xda\x26\x0e\xa6\xd4\x48\x64\x73\x47\x6b\x09\x15\xe2\xd8\xd2\xc6\x11\x00\x3f\xa1\x05\x7c\x08\x5a\xbc\x73\x12\x7e\x6f\x9e\xfd\x58\x89\xa1\x85\x57\x2b\xca\x60\xe2\x36\xfd\xb9\xde\x2e\xd7\x91\x2b\x7b\xd3\x4a\x3e\xe9\x8f\x4c\xa9\x14\x78\x73\xc6\xab\x19\xdf\xaf\x67\xdb\x09\x98\xc6\xad\xaa\xa3\x5a\x89\x96\x5b\x6e\x8e\xd3\x8d\x6e\x50\xca\x24\xf6\x35\x5e\x0f\xf6\xc7\x1d\x43\x0d\xe9\xcd\xc6\xd4\x3f\x86\xe9\xf5\xda\xfe\x99\x35\x05\x4c\x8f\x76\x61\xbf\xc8\x4f\xa7\x83\x56\x92\x85\x22\x5d\x5d\x56\x08\x04\x1d\x02\x06\xbe\x70\x2a\x74\xb4\xd9\xad\xab\xe3\xcc\x76\xb8\xbf\x88\xd9\x5d\x68\x11\xb3\xaa\xdd\x22\xad\xf2\x32\x0e\x37\xe5\xb9\x7f\x20\xfd\x6b\x42\x5f\x45\x8b\xbf\x34\x8f\xfd\xcb\xf3\xe2\xef\xe1\x2f\x5e\x3e\x85\x16\x0c\x13\x41\x81\x0d\x94\xb6\xb1\xcd\x05\x82\x48\x20\xa9\x38\x81\x90\x59\x0c\x21\x65\x10\xd3\x4a\xd9\x16\x05\x86\x6a\x48\x2d\x9b\x42\x4a\x91\x36\x92\x00\x21\xa5\x38\xe9\x16\x8f\x89\x49\xba\x96\xec\xdf\x34\xcc\xd1\x76\xc3\x67\xa0\x56\x02\xad\x44\x9a\xa7\x8d\x9d\x4c\xd0\x44\x39\xb9\x6f\x4d\xbd\x69\xab\xa5\x32\xc3\x72\x71\x3d\x28\xe1\xe5\x08\xeb\x8f\x4e\x8c\x53\x59\xd1\x80\x92\x2c\x97\x61\xc5\x5f\x45\x95\xf6\x2a\x6a\xe6\x72\xce\xc8\xd9\x5b\xfd\xbe\xde\x01\x9d\xcb\x55\x5b\xcd\x0a\x1f\x95\x6b\x07\xc7\x0f\xa7\x04\xd6\x1b\xbb\xfa\x54\xee\x76\xdb\x2d\xd0\x23\xcf\xb8\x89\x7e\x72\xd2\xec\x96\xe7\xdd\x65\xaa\xea\x60\x3b\x8d\x69\x71\x76\xba\x9f\x31\xca\xae\x07\x52\x11\x4b\x2f\xcb\xa3\x95\x03\xa3\xfc\x3c\xdd\xac\x99\xaa\x46\xdd\xd4\x80\x6d\x0a\x7d\x35\xec\x8d\x6c\xa7\x25\x8e\xb1\xcc\x07\xf7\x9c\xe5\x14\x6f\xbf\x71\xbe\x9c\xaf\x9a\x5d\xe2\xf2\xf3\x9b\xce\x52\x1e\x48\xff\x77\x64\xff\x04\xfd\xd8\x0e\x67\x19\x7b\x75\xc3\x59\x4a\xe6\x22\x55\xa9\x37\xee\x13\x7a\x7f\x87\x73\x07\xfd\x69\x19\xb9\xc7\x3b\xe8\xbb\x57\xf4\xd3\xd5\x04\x59\x8c\x5a\xce\xb6\xdd\xc4\x85\x59\x21\xb9\x4d\xda\x4b\x7c\x4c\x66\x1b\xb2\xa1\xea\x75\xab\x9a\xdf\x2d\xa0\xb7\x1d\x6e\x6a\x03\xfb\xea\xc4\xb8\xf8\x3d\x37\xde\x6b\xcb\xb6\x91\xb2\x6c\x2e\x38\x44\x0a\x00\x4d\xb9\x45\x85\x05\x01\x75\x20\x64\x58\x68\x60\x98\x81\x16\xe4\x90\x41\xea\x40\xdb\x82\x90\x20\x46\x29\x94\x1a\x4a\xfb\x94\xeb\x13\xc7\x63\x92\xf2\xb6\x3d\x59\x54\x9a\x07\xd6\xae\xf5\x27\xfd\x69\x22\x99\xdc\x6c\x47\x35\xa7\x5d\xd8\x17\x40\x36\x17\xe0\x51\x7a\x19\x36\x12\x45\x9c\xc8\x6d\xdd\x17\x9d\xe4\xa3\x1b\xef\xcf\x0b\xde\x4d\x77\x11\x87\x3f\x51\x27\xe5\xa2\x51\xc1\xde\xa5\x96\xf5\xf9\x6a\x29\xa7\x8b\x54\xd0\x19\x1d\x8e\xbb\x6d\xfb\x08\xb7\xa4\x55\x20\xd4\xa7\x56\x7e\xd0\x5f\xf1\x4e\x90\x6d\x98\x84\x3d\x9b\x60\x0a\x8b\xcd\x99\x4c\xe4\x0a\xd0\xe6\xa5\x76\x35\x70\x90\xf2\x07\x60\xb8\x9d\x27\xda\xf9\x4d\xdd\x2b\x2c\x92\x8d\xd4\x73\xfe\x7a\x9c\x93\x2c\x45\x37\xc3\x5a\x3d\x37\x99\xf9\xab\x74\x76\x96\x9f\x37\x12\x39\xe2\xf4\x8b\xc3\xf1\xa4\x3f\x75\x87\x2d\xd2\x1b\x1e\x87\xfb\xe4\x47\x9e\x78\xb1\xc5\x3d\x0a\x4a\x98\x9c\xbf\xff\x16\xca\xc4\xd3\xb4\xdc\x80\xc2\xcf\x67\x29\xb7\xdf\x60\xff\x40\xfa\x37\x59\x76\x63\x1e\x79\xff\x46\x29\x3f\xf1\xb8\xba\x9d\xfe\x13\xca\xa5\x5b\xb7\xd3\x2f\x5f\xd1\xbf\x05\x65\xce\x67\x49\xc5\x9b\x6e\xf0\x8f\xf1\xfb\x05\xf9\xff\x8c\xef\xb0\xc0\x50\xda\xb6\x85\xa1\xb1\xb0\x30\x36\xa0\x94\x30\x6e\x11\x6d\x4b\x8e\x0c\xb6\x2d\xc4\x8d\x85\x1c\x6e\x2b\x6e\x13\x01\x2c\xe1\x10\xe4\xd8\x96\x2d\x99\x31\xc0\x86\xa7\x9b\xc9\xc8\x43\x74\xa0\xe6\x55\x93\x7f\x9b\xad\x98\xa1\x30\xe5\x15\x55\x53\xb7\x2b\x68\xd7\x1a\xf5\x57\x86\xd0\x44\xdb\x0e\xfb\xf3\x51\x43\x2d\x32\xe9\x4e\xb3\x6c\x46\x7e\x7a\x7d\x90\xe9\xfd\x6c\xb9\xdb\xec\x7f\xe9\xce\x78\x5c\xb6\x9f\x8e\xea\xba\x26\x5d\x6f\x1f\x24\x3b\xc5\xe5\x6c\x86\x92\x48\x19\x39\xa8\x25\x0f\x79\xa7\x59\xcf\x2c\x97\xa3\x75\x52\x0e\x7a\x0e\x6a\x95\x86\x4d\x49\x70\x44\x76\xf2\x08\xdc\xb1\x28\x71\x9a\x76\xf9\x5c\x35\xfc\x79\xab\xd3\x1d\x93\xf1\xaa\xb9\xc8\x74\x4b\x53\x7c\x46\x90\x8e\x55\xca\x49\xaf\xb4\x6b\x24\x65\xa7\xd7\x9b\x65\x89\x33\x4b\xd6\x77\xd5\xad\x8b\xe7\x6c\x0e\x56\xc1\x26\x5b\xcd\xa5\x9c\x69\x32\x7b\x78\x8c\x3f\x4b\xe9\xf6\xb8\xe8\x93\x0e\x12\x4b\x65\x72\x93\x0e\xf2\x40\xfa\xd7\xe3\xff\x29\xfa\x31\x1d\x28\x76\x8f\xd4\x2d\xe8\x10\xf3\x59\x48\x5d\x27\x78\x79\x2e\xef\xa3\xd3\x8d\xf4\x57\xbc\x48\xd6\x91\x75\x17\x7d\xf7\x8a\x7e\x66\x84\x54\xdf\x0b\xe6\xa0\x42\x5a\xc8\xa4\x1a\xd5\xf4\x3e\x39\x5d\x92\xee\x7a\x98\x9e\x54\x0a\x70\x56\x2e\xf4\xca\xfb\x44\x39\x2c\xa2\xc2\xae\xe4\x0f\xb7\x69\xfb\xa7\x99\xaf\xf4\x3d\x71\xd9\x36\xb4\x6c\xa5\x89\xb0\x09\xc4\x48\x5b\xc2\xa2\x50\x22\x07\x21\x43\x1c\xdb\x42\x54\xd8\x9a\x19\x8a\x31\x41\x42\x63\x66\x0c\xb1\x0c\x32\xc8\x28\x69\x13\x40\xb5\xa4\xe2\x09\x65\xe2\x31\x4d\xd5\x9a\x82\x6e\x3d\x3d\x6d\xa1\xa8\xa9\x9c\x6c\x1e\x97\x72\x09\xbd\x8d\x34\xcc\x17\x43\x6b\xca\xfb\xbb\x68\x7c\xcc\xe1\x7d\x7f\x29\x4f\xcb\xdf\x59\x07\x3a\xa5\xa3\xfb\xc8\x9f\x25\x75\x4b\xfd\x5f\xce\xf5\x13\xa3\x7f\x1e\x85\xd3\x24\xaa\x8e\xfd\x6a\xad\x59\x4d\x65\x1a\x81\x3d\xed\xc0\xde\x34\x21\xa2\x15\xac\x65\x5a\x5a\x8c\x61\x72\x8c\x92\xfd\x45\xae\x18\x38\x3a\xac\x66\x57\x19\x3a\x4d\x69\x6f\x7b\x28\x67\x1c\xe2\x6c\x67\x24\xc5\xc5\x28\xd8\xa5\xd8\x70\x3a\x72\x53\xf9\xb2\xa3\x57\x99\x81\x2d\xbc\x71\xfa\x09\x39\x64\xdf\xe8\x0e\x6a\x8d\x6b\xfd\x95\x5f\xca\xf4\x8f\x2c\x94\x19\x8e\xa8\xe9\x79\x2d\x9b\x14\x92\x20\x73\x74\x92\x28\xd7\xea\xd8\xfe\x63\x6e\x75\x2d\xc5\x54\xac\xaf\xa3\x76\x2d\x39\xbd\x8c\xd7\x1b\xe5\x03\x54\x7a\x1c\xfd\x7b\xfd\x5f\x36\x97\x57\x5f\x97\x4a\x2f\x99\x38\xe9\x0c\xa5\xdb\x63\xb7\xbf\x87\x7e\xf0\xd5\xfa\x3e\xe2\xf7\x73\xd6\x5d\x88\x0d\x76\xa8\x50\x36\x84\x46\x01\xc7\x26\xc2\xc1\xc8\x41\x4c\x3b\x8e\x25\x94\xd6\x1c\x41\xac\x21\x51\xc2\xb6\x28\x87\x94\x1b\xa2\xb1\xe2\xdc\x91\xc4\xb2\x81\xfe\x89\x22\x0f\xf0\xbd\xbd\x4e\xdf\xf3\x3a\x8a\x7c\x35\xf6\xe4\x0e\x14\x89\xd9\x77\xc2\xbc\xd5\x2c\x07\xed\x4e\x6d\x3b\x4d\xc3\x62\x4d\x64\xe6\x03\x56\x3e\x1c\x49\xab\xbc\x49\xd5\xf3\xe1\x1a\x86\x81\x5a\x47\xb5\x30\x8d\x5b\x39\x3e\x09\xa7\xb9\x55\xb9\x3f\x98\xe7\xcb\x86\x37\xec\x72\x47\xe5\x36\x7e\xe8\x80\x44\x36\x35\x3b\x56\x57\x8d\x44\x32\xe7\xcf\x06\x41\xe6\x49\xd2\xad\x31\xcb\x73\x26\x87\xc9\xfa\x00\x6c\xbc\x6a\x66\x3a\xeb\x97\xd0\x66\x76\x68\x0e\xbb\x42\xfa\xb3\xc9\x12\x90\xca\x62\xb6\x0f\xa4\x7e\x3c\x8a\x7c\x41\xb7\x28\xf9\xc3\x8d\xe8\xa9\xda\xf6\x78\xf9\xf9\x4d\xba\xc5\x03\xe9\x5f\xcf\x97\x4f\xd1\x7f\x1d\x45\x6e\xd0\x2d\x12\xc9\x8b\x42\xf1\x5b\xba\xb1\xe7\xf2\x69\x14\x79\x20\xfd\xdb\x33\x53\xdd\x83\x22\xd2\xe1\xd0\x31\x02\x12\x85\x6d\x07\x1b\x64\x73\x9b\x5b\xb6\xa3\x81\xd1\xda\x58\x5a\x20\x4b\x72\x8a\x35\x63\xd8\x46\x98\x42\xc2\x25\xd6\xdc\xa2\xb6\x94\x14\x02\x4c\xf1\xbf\xfe\xf9\x41\xe0\x43\xf2\x32\xbf\x73\xbb\xea\x7b\x79\x99\xdd\x5d\x39\x7e\xaa\x11\xcb\xcb\x8c\xbc\x7d\xa1\x92\xb3\xd9\xce\x6f\xd4\xc3\x9e\x5e\xd6\x6a\xe0\x58\x0e\x23\x3d\x2f\xaf\x36\x83\x59\x21\x4b\xb6\xb9\x29\xec\xa7\x57\xb9\x49\x66\xde\x31\xfd\xaa\xd3\x2e\xa6\x51\xaa\x9e\x9f\x54\x13\x53\xcd\x56\xf3\x56\x37\x6a\xe7\xca\x23\x6f\x33\xa8\xe6\x66\xb5\x41\x04\x06\xcb\xf2\xcf\xbb\x96\x0f\xc5\x62\x6d\x15\x81\xdc\xa0\x56\xa1\xba\xaf\xab\xb9\x84\xbd\xa3\xc7\x4c\xb1\x57\x9d\xb4\xa4\x15\x46\x4b\x8f\xf6\x7b\xce\x7e\x98\xf5\x3f\x3a\x03\xfa\x5c\x5e\xe6\x78\x5e\xdf\x1b\xf2\x22\x0f\x16\xee\x7d\x79\x91\x1f\x48\xdf\xbf\x85\x7e\x4c\xfa\xcf\x40\xf2\xcd\x79\x99\xcf\xed\x7d\x50\x5e\xe6\xa7\x39\x1a\x23\xf0\x19\x2b\x29\x67\x48\x1b\xe5\x48\x68\xb0\xc6\x44\x5a\x08\x38\x92\x32\x2d\x19\x71\x28\x44\xdc\xd2\x18\xd9\xd8\x60\x4b\x11\xca\xb4\x96\x00\x62\x85\x91\x74\x38\xc1\x8a\x42\x42\x9f\xd6\x76\xfb\x21\x76\x88\xf6\xab\xa3\x71\x2a\xb1\x23\x95\xf6\x4f\x2b\x68\xca\x4d\xb5\x72\x9b\x6e\x98\x28\x37\xfb\x9d\xe4\x2e\xb3\x25\x89\x4a\xa6\x3d\x60\x66\x87\x27\x7a\x75\xdc\xeb\x6e\x95\x39\x39\x2f\x30\xfd\x6e\x5b\xa7\x7b\xb6\xae\x8a\x74\x1e\xce\x96\x0d\xbf\x55\x71\x93\x8d\x22\xcd\xb5\x59\x72\xd3\x6c\x37\xf6\xf9\x20\xe8\xe4\x57\x33\x10\xcc\xf6\xb9\x9f\x7e\x1a\x74\x5e\xdb\xc2\x72\xc9\x22\xd9\x5d\xc6\x2f\x73\x7d\x68\x0f\x86\xd5\x3e\xc9\xa8\x5a\x50\x69\xcf\xed\x95\x37\x06\x99\x43\xb1\x5d\x09\xa3\x8b\x57\xd8\xeb\x52\x17\xe3\xfd\x7c\x85\xd6\x97\x70\x77\xb8\x6a\x94\x0b\xa3\xd4\xd9\xec\xfb\xb5\xdd\xd1\x70\xd5\xa8\xb0\x3d\x3e\xeb\x04\x6f\xae\xf5\xb7\x9d\xa5\xbc\xac\xb5\xfc\xf2\xf3\xd8\x5a\x7b\x7b\x96\xcf\x0f\x75\x83\xc7\xf1\xdb\xfe\x13\xfc\xc6\xac\xb8\xdb\xd8\xab\x1b\xd6\x72\x76\x81\xef\xd4\x75\x04\xc8\x23\xd7\xf2\x97\x36\xdd\xcc\xef\x3a\x4a\xee\x13\x83\xa4\xf7\xe7\xf8\xfd\xc6\x1d\xdf\xc3\x77\x5c\xaf\xf5\xef\xd7\xf8\x5d\xf2\x9c\x1e\xcb\xb3\x05\xe4\x2f\xd9\x21\x6a\xe1\x10\x87\x4a\x06\x6c\x2a\xb1\x34\x50\x3b\x14\x0b\x48\x20\x60\xd8\xe1\xcc\x86\x4a\x10\x68\x63\xa5\x21\xa6\x36\xa2\x94\x61\x8a\xb4\x25\x6d\x07\x62\xa9\xb5\x75\x5e\x45\x1e\x13\x03\xde\xb9\x62\xff\xb7\x1d\xdd\x0d\x3a\xc5\x5b\x59\x46\xdd\x72\x75\x4a\x7d\x3c\xda\xac\xfa\x73\xd3\x98\xe5\x76\xd3\x75\x2e\x18\x87\xf9\xcc\x3e\x9f\x6c\x4f\x0f\xb9\xe4\x22\x3f\x4c\x08\x55\xee\x1c\x87\xa0\x49\x3b\xd1\x6e\x5a\x4d\x1c\xf2\xcd\xfe\x04\x26\x26\x55\xde\x91\xf4\xd8\xde\xec\x87\xa5\x51\x2e\x8a\x8e\x29\x1d\x24\xf7\xc5\x6d\x50\x39\xad\x3e\xb8\xe3\x1f\xea\x6a\xd5\xac\x95\x66\xbd\x52\xa1\xe1\xb7\x86\x73\xb9\x5e\x37\x54\x05\x8f\x7b\xc7\xde\xbc\x3e\xc2\x65\x9d\x6e\x56\x71\xf6\xa3\xd5\xe7\x6a\x24\xdf\xba\x8b\x23\xf6\xad\x2f\xa1\xea\xb2\x67\x1c\x33\x33\x31\xcf\xe8\x3f\x82\xaa\x0f\xe4\xb7\xf3\x27\xf8\x8d\x59\xcb\x63\xf2\x76\x0b\xaa\xb2\x8b\x36\x9b\xba\xf7\xc6\xf9\xf8\x6f\x5f\x2b\xde\x9d\xfc\x42\x65\x8f\xd6\x7f\x90\x5f\xf7\x8a\xdf\xaf\xea\xec\x17\x8f\x84\x37\xce\x01\xde\xa1\xff\x39\xbf\x27\x63\x0c\x05\x0c\x50\x1b\xd0\xa7\x8d\x30\xb1\x2c\x8c\x0c\x97\x8c\x3a\x5c\x52\x09\x90\x63\x41\x6e\x08\xb0\x29\x07\x96\x91\x90\x01\xcb\x31\xd2\x48\x8c\x89\x36\x04\xa0\x27\x94\x64\x0f\xd9\x01\xbf\x63\x8d\xbf\xed\x66\xa2\x7d\x71\x98\x0b\xc3\x4a\xa9\x30\xec\xa0\x25\x49\x8c\xd3\x85\x89\xb3\x91\x7c\xd6\xb6\x53\x72\xe9\x4d\x83\x6e\x56\xa0\x15\xa8\x1f\xea\x87\x96\x70\xc7\x99\x88\xa7\xb7\x5e\xa2\x5e\xdc\x95\x7b\xb3\x4a\xcb\x88\x71\xd0\xf2\x97\xb3\xcd\xa1\x5d\x3c\x80\xde\xbc\xa5\xa5\x4c\x1d\x16\x99\xe7\x1d\xf0\x34\xc9\x06\xe3\x8e\xec\x24\x0e\xed\x20\x95\x49\xac\xa2\xd9\xd2\xdf\x35\xfb\xe9\x25\xc8\xc2\x59\x90\x4c\x8f\x83\x91\x93\xf4\xea\x9a\xd5\x2f\xe3\x76\xd7\xcd\x44\xb1\x26\xde\x72\x33\x10\x70\x5f\xf1\x7f\xfc\xa5\x7c\x80\x6e\x8f\xa3\x7f\x6f\x4c\xd9\x3e\xf6\xee\x06\x69\x2a\xb5\x5e\x6a\xba\xcd\x8a\xfe\x68\xfa\x5f\x8d\x29\xfb\xce\x9b\x99\x3e\xa5\x57\x61\x6a\x31\xe0\x58\x36\x01\xda\xb6\x2d\x88\x29\xe5\x8e\x83\x89\x43\x6c\x65\x30\xd2\x58\x01\x82\xb5\x74\xb0\xa0\x82\x2b\x0a\xa5\x26\x96\x6d\x34\x80\x06\x28\x6e\x18\x7b\x46\x0c\x78\x3f\x62\xbc\x13\x85\x11\x47\x8c\xfc\x2f\xef\x53\x99\x16\xac\x1c\x63\x06\x98\x18\x62\x8c\xf6\xfd\x69\xb3\x9e\x4a\x73\x6b\x0a\xb4\xe9\xcd\xe4\x7e\xee\x8d\xba\x3a\xdf\x0c\xc8\xca\x0b\x9b\x6d\xc5\xcc\x6c\xb7\x59\xcf\xe0\xb8\xb6\x23\x3a\xbb\xeb\xb7\xa7\x47\x5a\x5d\x16\x0b\xbb\x74\x7d\x4d\x4a\xce\x21\x9a\x74\x86\x6e\xb3\xdb\xce\xa3\xde\xc1\x0c\xd1\xa1\x59\x5c\xa4\x9e\xa5\x9a\xf8\xe9\x7a\x3f\xd7\xd2\x6a\x57\xf0\xf9\x6c\x90\x1d\x74\x91\x55\x1b\x5b\xed\xe6\x6a\x50\xe2\x14\x0c\x8f\x51\x2a\x89\x1b\x8e\x5a\x92\x8b\x6a\xf7\x97\x20\xc6\x4d\x31\x5f\x0f\xa4\x7f\x6f\xcc\xd7\x03\x25\xf6\xa6\x98\xaf\x47\xd3\xff\x6a\xcc\xd7\xfd\x88\xf1\x22\x2e\x01\xa8\x8c\x64\xcc\xef\xfa\x53\x88\x81\x1d\x0c\x88\x54\x96\x51\x9c\x09\xc9\xb8\x16\xc0\x58\x02\x03\x26\x8c\x80\x8c\xd9\xc6\xe6\x90\x73\x20\x80\x36\x50\x13\xc0\x2d\x6a\x41\x49\x01\xb0\xb0\x91\x10\x49\xf9\x8c\x18\xe8\x7e\xc4\x78\x27\x8b\x69\x0c\x31\x1a\xbf\xbe\xcf\xc0\xc8\x92\x87\xd4\x54\xa0\xa0\x2f\x51\x6a\x10\xc2\xf6\xf1\x97\x9c\xf5\x31\x04\xa9\x4c\xc2\xfe\x70\x1a\x0e\xba\x09\xda\x76\x57\x11\x28\x6c\x26\x66\x3f\x4e\x11\xfb\x00\x4b\xb9\x25\xef\x64\x5a\xe3\x7a\xa2\x98\xd9\x77\x3a\x4e\x44\xe6\xa6\xd9\x1e\x96\xf6\x7b\xbb\xe0\x90\xe2\xb2\xda\xb6\x16\x95\x74\x88\xeb\x86\xaf\xfa\x8b\x7d\xd6\xca\xa6\x91\xb7\x0c\xa5\x4e\x3f\xdb\xff\x1a\x5e\x56\x5a\x35\x38\xdf\x16\x96\xcb\xdc\x6e\x9d\x9a\x24\x57\xf3\x28\xa9\x87\x8b\xc1\x4a\x3b\x9b\x16\x4f\xf5\x4b\xbe\x17\x34\x9d\xbc\xf3\x91\xd7\xe3\x1f\x47\x90\xf3\x8c\xfd\xea\x6d\x88\x8f\xa3\x9f\xb9\x85\xfe\xf7\x20\x48\xd9\xfd\x9a\x04\x3f\x1a\x41\xca\xee\xab\x9a\xe0\x37\x23\xc8\xc5\x67\x91\xcd\x55\xae\xdc\xef\x41\x66\xe5\x73\x95\x5d\xd8\xa9\x44\xf2\xf0\xcb\x38\x7c\x2a\x12\x14\x50\x49\x2d\x66\x61\x5b\x1b\xc7\x30\xc9\x99\xe5\x70\x6c\x3f\xfd\x8f\x63\x21\x2c\xe0\x60\xcc\x24\xa1\x8c\x60\xc6\x15\x94\x9c\x5a\x84\x59\x9c\x0b\x1b\x43\x6a\x6b\xe7\x5f\xff\xfc\x20\xd6\x43\x76\x2d\xef\xc4\x76\xbd\xaa\x83\xc4\x47\xf6\xa5\xbe\xc0\x0d\xeb\xbd\x4a\x6d\x50\x48\x37\x77\xa3\x42\xdf\x2d\x30\xa1\x3d\xd4\xab\x26\x73\x68\x1c\x16\x06\xe1\xa4\x0d\xe6\xe9\xc9\xc1\x96\x4e\x6f\x09\x57\x45\x55\xac\x4e\x78\x69\x8a\xcd\xc4\x25\x0b\x5e\x4a\x44\x41\xb9\xb8\xab\x36\x06\xeb\xd1\x6e\xdc\x73\x0a\xb9\x7d\xad\xa5\x1c\xff\x39\xcf\x71\xd8\xd9\xf7\xc7\x9e\xd9\x8e\xc8\x61\x9e\x2e\xd6\x69\x9d\xce\x4b\xab\xd4\xc0\x9b\x66\x79\xbb\xc1\xad\xd5\xbc\xdf\x09\x16\x4b\x95\xee\x25\x3e\xba\xe5\xfa\x93\xa8\x11\x93\xb2\x5b\xa4\xf6\x92\xdf\xf2\xf9\xdf\xdf\x3c\xf1\x3f\x40\x8d\xc7\xd1\xf7\x6e\xa1\x1f\xb3\xae\x7f\xe7\xba\xeb\xba\xf1\x3b\xb2\xee\xae\xff\xc4\xef\x21\x56\xf7\x0d\x28\x53\x88\xdd\xe6\x1a\xb8\x5f\x43\x19\xef\x3b\xe8\x7f\x12\x65\x3f\x65\x27\x11\x12\x00\x41\x24\x06\x4a\xdb\x0c\x20\xca\x8c\x72\x88\xe1\x40\x4a\x63\x01\x89\x88\x84\x96\x32\xc4\x30\xc7\x18\x68\x6c\xa2\x2c\xa8\xb9\xa2\x40\x18\x45\xa0\xa5\x21\xf8\xd7\x3f\x3f\x68\x3c\xf6\xbc\xe8\x77\xed\x7a\x93\x51\x9d\x9f\x42\x8b\x6c\x66\xad\x5c\x38\x5d\x94\xc4\x1a\xca\x5a\xbd\x52\xad\x2f\xb9\x37\xd3\x4d\x57\x2e\xeb\xc5\x13\x76\x9f\x24\xd2\xeb\xf6\x7a\xa5\xfe\x3b\x3a\xcc\xea\xe9\x31\x0b\x3b\x0d\x1c\xf7\x20\xcd\x15\xad\x46\x74\xfa\x7d\x5a\xe6\xa9\xde\x5b\x99\x05\x0d\xdd\x01\xe5\x45\x80\x47\xb9\xfd\xc6\xdd\x0e\xb6\x45\x1f\x26\x2a\x9b\xa3\x98\xb9\xc5\xa5\x09\xd3\x3c\x0d\x7a\x8d\xc0\xb6\x53\x61\x2e\x49\xca\xfd\x41\xad\xcb\xec\x42\x95\x75\xba\x6d\x60\xeb\x41\xa5\x68\x2b\x6b\x33\xd9\xa7\xfa\xbc\x30\x72\x4e\xe7\x78\xdb\x94\x0f\xf6\x29\x34\x1d\x37\xb9\x81\xd9\xc4\xe0\x58\x73\x65\x45\xe6\x2b\xcc\x4c\x6a\xce\x56\x29\x77\xb3\xec\xf8\x49\xd0\xc8\x0c\x3f\xca\x10\xba\xfa\x75\x64\xde\x40\x99\x5a\x6c\x24\x67\x3d\xb3\xce\xd6\xd0\x1c\x0f\x8d\x68\x4e\xe8\x20\x50\x43\x3d\x5b\x6f\x50\x6f\xc7\x3c\x8b\xf8\xeb\x59\x63\x40\xca\xa9\xc3\xda\x9b\x9f\x67\xc5\x8b\x94\x9f\xfb\xf3\xf7\x59\x72\x2a\xef\x4b\xf9\x03\xe9\xbf\x61\x95\xf9\x40\x37\xf9\xa4\x97\x9c\x21\xc6\xd2\x8e\x40\x82\x20\xa4\x14\x93\x8a\x5b\xc6\xd8\x04\x5b\x42\x1b\xa4\x99\x06\x0c\x51\x66\x51\xcb\x38\x1c\x0b\x0b\x03\x2c\x2c\x8d\x24\x10\x18\x01\x22\xc0\x93\xe6\x4d\x1e\x13\xd5\xd8\x7d\xbd\x15\xb1\x3f\x14\x74\x73\x52\xac\x83\xc5\x32\x91\xee\xcd\xf2\x87\x91\x6b\xfc\xfd\x32\xdf\xed\x25\xd7\x79\xd0\xce\x2b\x58\x35\xbd\x71\x7d\xb6\xcb\x9c\x43\x47\xde\xcb\x50\x79\xc8\xed\x06\x1d\xe6\x77\x83\x76\xd7\x07\x8b\xa1\x10\x7a\xd1\x18\xed\xc3\xe3\x60\x4b\xf2\x69\xcb\x29\xc2\x6d\x63\xbc\x3f\x86\xcd\x5d\xe1\x30\xde\x06\x4e\x64\x25\x34\x2e\xe3\x01\xec\x6f\x66\x45\x87\xad\x9c\x5c\xcb\xe4\x17\xf9\xea\x31\x33\x99\xf9\xab\x4a\x93\x97\x64\x78\xce\x1d\x87\x80\x53\x1d\x1e\xd7\xcd\x9a\x9a\x56\x66\x35\x06\x82\x92\x7d\xa4\xda\x6f\xf2\x20\xac\x0d\xc7\x2b\x2f\x5b\xca\x8c\x76\x22\xd8\x77\xf6\x1f\x69\xe0\xf1\xf2\x8e\xdf\xcb\x6d\x1e\xf5\x25\x7f\xd9\x53\x53\x8d\x69\x2c\xb1\xcd\x1f\x39\x53\x78\x20\xbf\xdd\x3f\xc1\x6f\x4c\xc3\x07\xb1\x57\x37\x9c\x29\x2c\x2f\x21\x1c\xa9\x18\xfd\xef\x3b\x03\xb9\x83\xdf\x75\x01\x47\xe2\x0f\xf2\xeb\x5e\xf1\xeb\x7a\x11\xa9\x86\xf3\x5c\x67\xb1\xc5\x85\x49\x7f\x54\x2c\xa7\x1c\xe1\xaf\x06\x6a\x9a\xb0\x46\xed\xd6\x00\x85\x84\x4d\xea\xfe\xc8\xad\xd5\x4e\xfa\xc9\xe5\x0c\xa4\xf2\x3d\x11\x09\x0e\x11\x42\x41\x41\x88\x43\x28\x22\xc0\xe1\xc8\xd1\x4c\xd8\x98\x09\x85\x85\x23\xb5\xa2\x96\x60\x46\x08\x61\x73\x2a\xa0\x83\x34\x20\x5c\x33\x87\x60\x07\x59\x90\xcb\x93\x17\x20\xbe\x1d\x25\x63\x6a\xcf\x75\xd2\xb7\xd8\xda\x74\x9e\xc9\x5f\x44\xc9\xe7\xd2\x05\xf8\xdc\x3b\xcf\x08\xd4\xe8\x8e\xc9\x70\xac\xf8\x22\xd9\x9f\xf0\x74\x79\xb6\xcb\xed\x57\xfc\x90\x85\xc6\x6e\x54\xda\x8d\x9c\x1a\x4d\x61\xcf\xe3\x65\xd7\x49\x5c\x7a\xf6\xb6\x59\x91\x32\xdd\x41\xbc\x3d\x31\x94\xae\xd7\x3b\xbb\xf2\x52\x95\x96\x83\x69\x94\xc8\xe6\x6b\x09\x1b\xac\x9b\xb9\x14\x59\x46\xc7\xf4\xaa\xd6\x3e\xf8\xd3\x3a\x5a\xc9\x6d\x3e\xc3\x2a\x93\x7c\x09\x95\x7a\xde\x8c\x31\xb8\x69\x6e\x33\x79\x16\x94\x0e\x2b\x22\xd2\xf0\x50\x97\xa8\x13\xd6\xad\x6d\x76\xd8\xab\xaf\xb0\x95\x7f\x99\x35\x5e\xa6\x2b\xba\x9d\xb6\x3a\x4e\x2a\xb4\xd2\x49\x8d\xc2\x16\xa9\x6e\x53\x08\x75\x9a\x2d\xce\xe1\x2e\xd3\xeb\xa2\xfa\x24\xdb\xec\x05\x41\x32\x61\x17\xb6\x35\x25\xa2\xf2\xba\x92\xde\xcf\x9c\x7c\x35\xd4\xb5\xa0\xcf\xac\x3a\x1f\xb5\xd9\x32\x95\x18\x3b\xb5\x44\xc3\x9b\xd7\x72\xe9\xd6\x29\x1b\xfa\x40\x6c\x1b\xeb\xf6\xa0\x53\xa9\x0f\x47\xa3\xf9\xda\x9a\xb0\x06\x3e\xae\xc3\xd2\xd4\xde\xa0\xf9\xb2\x98\xc1\xed\xe5\x7c\xd0\xea\xef\x8a\xab\xcb\x94\x3c\xbc\x33\xa6\xaf\x3f\xbf\xb3\x2a\xdc\xea\x8b\xbc\xec\x89\x86\x2e\x74\x62\xde\x8c\x7f\x04\x65\x1f\xc8\x6f\xf8\xcd\xfc\xa6\xdd\x5f\x77\x70\xff\x26\xd4\x7a\xe1\x11\xde\x41\x9f\xbb\xb2\x75\x07\xfd\xf2\x15\xfd\x5b\x56\x99\xf0\x72\xb6\x94\xea\x5f\xd1\xfc\x96\x55\xf1\x1e\x7e\x33\x76\xae\xf5\x07\xf9\xbd\xec\x90\xef\x91\x8f\x20\xb1\x07\x7f\x50\x3e\xfe\xd3\xe4\xf9\xb7\xfe\xfd\xea\x2e\xa3\xd3\xcf\x9d\x3d\xc6\x33\x6f\x84\x6d\x7c\xb1\xbf\x6e\xde\xe5\x7c\x9d\xfe\xa7\x6e\x8b\x12\x42\x68\x65\x04\x81\xda\x28\xa0\x88\x62\x36\xd2\x10\x12\x6c\x59\x18\x73\x68\x0b\x07\x00\x62\xdb\x10\x01\x0c\x19\xd2\x48\x70\x47\x00\x23\x00\xd4\x14\x49\x0e\xf5\x93\xe6\xf3\x98\x88\xef\xde\x6b\x3d\x17\x2f\x7e\x74\xa8\xe6\xeb\x95\x69\x83\xe6\x32\xde\x78\xe2\xbb\x1e\xeb\xcf\x7b\x85\xd6\xb4\xd4\xab\x4c\xc3\xd5\xe8\xb8\x4e\xcc\xbb\xed\x7d\x3d\xc9\x02\xf7\x83\xac\x37\xe9\x72\x79\xd4\x65\xfb\x2a\xea\x16\xe7\x01\xdd\x34\x92\x2d\x90\x5a\xa8\x63\x7d\xd0\x48\x85\x01\x22\xc3\xed\xa4\xb7\xaf\xa5\xfa\x66\x11\xac\x9a\x99\x09\x07\xa9\x63\x75\xb5\x48\x8a\x49\xae\x80\x6b\x09\x33\x0e\x0b\xf5\x42\x4b\xf5\x7a\xfc\xd8\x2d\x94\xe1\x10\x4f\xb2\xf6\xf4\xac\x19\x74\xec\xed\x3a\x01\x4a\x5b\x4b\x75\x7b\x32\x91\x8f\x02\xb7\x5e\x2c\xd8\xfd\x7a\x1b\xe5\xf7\xc1\xbc\x36\xda\xcc\x56\x66\xd5\x20\xa3\xc3\x10\xbf\xd6\xf0\xaf\xef\x0f\x6f\xf5\x3c\x3e\x4b\x62\x3b\x76\xf4\xff\x67\x90\xe3\x71\xfc\xf6\xfe\x04\xbf\xb1\xfd\x61\xfc\xd6\xc9\x1b\x56\xc2\x6e\x2c\x9e\x2f\x36\x2d\xbf\x6f\x25\xbc\x83\xdf\x11\x00\xd3\xdc\x1f\xe4\xd7\xbd\xe2\xd7\xe5\xdd\x3c\x1e\x78\x50\x95\x66\xb2\xdc\x68\x84\xa1\xdb\x84\xe9\x68\x1c\x35\xe4\x7a\x0c\xd5\xf0\x50\xab\x22\x1a\xa9\x6e\x36\x97\x3c\xab\x67\x31\x4d\xeb\x7b\xb2\xf6\x40\xee\x58\xc4\x06\x50\x52\x05\x2c\xc3\xb4\x8d\x85\xb0\xa4\x34\x04\x73\xcd\x20\x87\x02\x0b\xa0\x89\x43\x31\x01\x46\x3b\x00\x21\x0e\x31\x42\x0e\xa0\x86\x0a\x42\xed\x93\x15\x2d\x1e\xb1\x9e\x9a\xcb\xd1\xd0\x6b\xf6\xac\xcd\x60\xb7\x2f\x14\x06\xfd\x54\x2d\x2c\x76\x1a\xed\xc2\x01\x36\x7b\xb0\x94\x77\x6c\xb3\x68\x03\xd9\x32\xc9\x8b\xed\x37\x73\x9a\xb5\xef\xf8\xc8\x9d\x67\xf2\x17\x51\xf2\xb9\xbc\xec\x0f\xcf\xe5\xe5\x7d\xca\x2d\xd2\xb9\xec\x86\xe5\xa3\xeb\x4d\x72\x96\x93\xee\x81\x52\x67\xb2\x5d\x57\x32\x45\xbe\x19\xec\x13\xd5\xfc\x64\x5d\x4b\x96\xc6\x78\xd0\x6e\x96\x0b\xf5\x76\xaa\xaa\x45\x7b\x45\x3a\x5e\x6d\xc4\x86\x8d\x65\xdf\x6f\x5a\xde\x6a\xb7\xc9\xa4\x7b\x70\x48\x5c\xef\xb8\xeb\xfb\x33\xc3\xdc\x67\x1f\xba\xe2\x2c\xd5\xf5\x56\xa2\x9e\x21\xc4\xda\xec\x8e\xb5\x76\x91\x36\x66\xcb\xc6\x9e\x84\xbd\x6c\x2e\xd1\x6f\x56\x87\xc1\xb1\xdf\x61\xcb\xf6\xf4\x23\x6b\xda\xe7\xf6\x4d\xb1\x0b\x1d\x6e\x59\x4d\xce\xd9\x73\x32\xf2\x9d\x29\xf6\x3e\x9a\x3c\x90\xfe\x6d\x3e\x74\x9f\xcc\xfb\xad\x89\x50\x08\x41\xc8\x80\x46\x16\x73\x34\x66\x8e\x43\x95\x81\x52\x09\x26\x08\xa2\x8c\x13\xc3\xb4\xc5\x19\xb3\x91\xb1\x14\xd3\x80\x33\xec\x30\x49\x89\x03\x04\x87\x4f\xb3\xfd\x31\xd1\x57\xfc\xf5\x56\x5c\xca\x0d\x96\xf7\xb7\x6c\xc6\xb9\x16\x23\x1e\xdb\xed\xfb\x5e\x33\xe3\x34\x17\xfb\xd6\x72\xdc\x4f\x5b\x49\xbb\x9b\x3b\x54\x32\xeb\x15\x0d\xc8\x60\x53\xcf\x99\x4c\xfd\x50\x97\xb3\x9c\xda\xda\xbc\x3c\x4f\xae\x6a\xdb\x34\xaa\xd7\xc6\xdd\x51\xb5\x3c\xea\x8b\x62\xa1\xd5\xb5\x1b\x7d\x6f\xdf\xd2\x61\x8a\x18\x27\xfb\x34\x13\x33\xd1\xb6\x59\x1e\x8e\x75\xb9\x30\x1a\x4f\xf2\xc2\x94\x2a\x1b\xd1\x82\x93\x28\xa1\xd3\xf3\xe8\xe8\x54\xa6\x83\x45\x6b\x28\x7b\xa1\x4f\x3f\xba\x67\x36\x5e\xde\x99\xe5\xb7\xdb\x60\x43\xa6\x7a\x7b\xe1\xbe\xc6\xc6\xf7\xad\xb1\x0f\xe4\x97\xff\x09\x7e\x63\x3a\x01\x89\xbd\xba\x61\x8d\xcd\x5e\x8e\xba\x52\xb1\xb3\xf5\xef\xd3\x09\xee\xe0\x97\x0f\x0e\x33\xf0\x07\xf9\x75\xaf\xf8\x4d\x0f\xa2\x84\xd5\x4a\xea\xe9\xb0\xc0\xd6\x55\xb1\xc8\xa6\x60\x81\x0e\xa1\xad\xa6\x19\xab\xd9\x1c\x73\x38\x28\xe6\xc6\xbb\x97\x93\xce\x98\x4e\x50\xfd\x26\x9b\x31\x64\x8a\x20\x03\x95\xd4\x5a\x68\x60\x71\xe3\x58\x96\x4d\x28\x16\x16\xd7\x46\x69\x07\x30\xc1\x88\x8d\x30\x57\x18\x01\x65\x1c\x0c\x6d\x8b\x12\xa0\x6d\xad\x1c\xce\xac\x27\x94\x74\xee\x3c\x0f\xce\x9c\xc0\xec\x1d\x9d\x20\x76\x1e\x1c\x7b\x7f\x39\x0f\xce\x2c\xac\x42\x7b\x50\xac\xe4\x17\x8c\xf7\xad\x55\x3d\x51\x4f\xca\x2d\x52\x6c\xed\x6d\x78\xe8\x4d\x60\x8a\x1f\xf3\xc7\x7c\xa9\xae\xfc\x11\xe3\x11\x6f\x97\x7b\xa9\xc1\x7e\x56\x40\xbd\xfc\xbc\x86\x96\x4b\x9e\x2e\x1c\x0f\xb3\x62\xaf\x9a\x98\x93\x5c\xaa\xfd\xd4\x0b\x30\x71\x3e\x29\xeb\xcf\x41\xd3\x59\x1f\x37\xdb\x41\x7a\xdb\x77\x55\xa7\xb1\x5b\x6e\xd1\xcc\x17\x51\xb7\x52\x04\x99\x9c\x19\xa4\xa5\xdf\xd2\x66\x3d\x9c\x5f\x18\xbb\xe7\x3c\xb8\x1a\xdb\x63\xdf\xb0\x2a\x3c\xaf\xad\xe3\x77\xa6\xca\x07\x28\xf6\x38\xfa\xf7\x66\x99\xa1\x97\x57\xb7\x48\xcd\x39\x33\x5d\xf5\x3a\x86\x2f\x5e\xde\x47\x99\x87\xd0\xaf\xab\x68\xbc\x79\x8b\xcc\xed\x52\x6b\x63\x41\xa1\x22\x10\x01\xa0\x4f\x29\xed\x10\x61\xc6\xc6\x36\xb3\x08\x23\x08\x23\xc3\x6c\xca\x0d\xc7\x46\x21\x8b\x4a\xce\xb5\xd1\x9a\x68\xa3\x84\x10\xc0\xc2\xc6\x3c\x49\x2d\x7b\x88\x17\xc7\x07\x52\x7b\x2e\x71\x89\xb8\x48\xad\x5b\x5d\x6e\x7b\x8d\xec\xb4\x89\x0a\xdb\x49\x13\xd4\x48\x54\x48\x46\xfd\xfe\xbc\xa7\xf1\x74\x9f\x23\x9d\x6d\x81\x15\x93\x8d\x52\x35\x83\xd9\xce\x2c\x16\x0e\x5e\x6d\xa6\x72\xd6\xcb\x4f\x51\xde\x35\x56\xcd\xdb\x97\x77\x48\xaf\x37\x24\x3b\xcc\xb4\x77\x48\xa2\x51\x18\x0e\xdc\xd2\x93\x64\xa9\x52\xb8\x6e\x8d\x3c\x3d\x4b\xd6\x8f\x1d\xa3\x72\xe3\x6c\xd4\x0c\x92\x11\x5c\xd2\x26\x2b\xfb\x87\x85\x9d\x20\x3a\x29\x36\xfb\x54\xed\xa3\x8c\x75\x9f\x94\xda\xd8\x5a\x70\x8b\xd4\x54\x2f\xfd\xf9\xc6\x54\xf9\x40\x6a\x1f\x47\xff\x3b\x35\x72\xe9\x00\x04\x05\x23\xd2\xb2\x28\x92\xdc\x28\x68\x09\x48\x15\xb4\x8d\x45\x25\x80\x9a\x3a\x0e\xb5\x98\x82\x8a\x29\x64\x43\x2c\x1c\x6c\x39\x10\x68\x87\x02\xc7\xb6\x84\xa3\xff\xf5\xcf\x0f\x6a\x3d\x64\xd6\xbe\x13\x71\x11\x5b\x6b\x62\xb6\x83\x98\xef\x11\xce\xd9\xcd\xcc\x74\x5d\x6d\x75\x33\xe5\x3e\x2e\x9b\x59\xba\x16\x89\x52\x3d\xe8\xe5\xec\xf6\xae\x32\x6f\xe5\xca\xdb\xf5\xb4\xde\x59\x74\xf2\xc3\x30\xb9\x98\x86\xe1\xc6\x12\xdb\x7e\xd8\x6a\xaf\x67\xd9\x6a\x55\x2f\xbc\xa8\x5e\x2c\x85\x8b\x75\xb5\x83\xb2\x47\x36\x2c\x46\x56\x27\x28\x9c\xb2\x91\xa4\xca\xcb\x48\xba\x7e\xad\x98\x6c\xa4\x0f\xa2\x61\x76\x22\x55\x9a\x0c\xfd\xb4\x2a\xf5\x2c\x54\x28\x0d\xdc\xfe\x80\xfa\x7e\x2e\x8d\x3f\xb2\xba\x7d\xd2\xf7\xc8\xbd\x6b\xd6\x9c\xfd\x92\xef\x98\x35\x0f\xa4\x7f\x93\xef\xd3\xcf\x59\xfb\x5f\xff\xf5\xbf\xff\xf7\x7f\xfd\xef\xff\xfd\x23\xc3\xd7\xfc\x87\x99\x2d\x7f\x54\xf8\x44\xff\xf7\x8f\xcd\xbc\xbf\xe4\x4a\x3f\xcf\xe2\xff\xf3\xa3\x79\x98\xeb\xff\xfe\xd1\x74\x53\x25\xef\x47\xc6\x6d\xba\xff\xe7\x47\x43\x0e\xf4\x84\xff\xf7\x8f\xf9\x46\x44\x43\xf9\x7f\x7e\x54\x77\x53\xbd\xfc\xef\x1f\x4f\x95\xfd\xd7\x2f\xb2\xf0\x6b\x55\x2f\x02\x11\xcf\xb8\x73\x6a\xd6\xea\x32\x56\xaf\x48\xd4\xdb\xb5\xbc\xc4\x20\xed\xdc\x5a\x30\x76\x7f\xab\xe5\x67\x0b\xcf\x0d\xe3\x52\xce\x36\xd3\xb5\x7a\x6a\x6e\xec\xf3\xff\x9d\x8f\xf5\x4b\x33\xd3\xd5\x4a\xa3\x59\x77\xf3\x95\xe6\x07\xcd\x74\x4b\x4d\xaf\xfe\xdc\x2b\xd5\x4a\x29\x8c\xd7\xf8\x5f\x3f\x7e\xfc\xf8\xe1\x66\x32\xb1\xda\x7e\x23\xf8\xa3\x56\xcf\x97\xdd\x7a\xf8\xa3\xe8\x85\x3f\xfe\xd7\xf3\xdb\xa1\xfa\xe7\xc7\xd3\x37\xa6\x7c\xa2\xdf\x62\x7f\xf5\xf2\xe1\xb1\x8c\xaf\xde\xe1\x7a\xf5\x1e\xcb\xbf\x31\x2a\xf8\xf4\xe9\xff\x0f\x62\x4f\xf0\xe9\x6b\x9c\xfd\x24\xf0\x2b\x53\xd3\x99\xd2\xaf\x70\x14\x69\xd5\xd7\xcb\x81\xe6\x4a\x2f\x57\xbf\x3e\xfd\xdf\xf3\xd3\x4a\x2f\xfe\xef\x43\xd8\xfd\xa5\xf2\xd7\x18\x7f\x87\xfa\x8f\x56\x25\x1f\xb4\xbc\x1f\xff\xeb\xe5\xaf\x5f\x6a\xc9\x63\xfa\xfb\x8b\x0d\xf8\x7d\x0c\x9e\xdf\xf3\xd5\xe0\x37\xee\x67\xc6\x3c\xb1\x7d\xfe\xcf\x83\xf8\x3d\x57\xf6\x1a\xa3\x31\x32\xbf\x72\x78\x7a\xf1\xca\x34\x99\xeb\x27\xee\x4e\xff\x3e\x88\xb9\x53\x5d\xaf\xf1\x76\x21\xf2\x2b\x6b\xc3\xf9\x3f\x3f\xe6\xb3\xe5\xfa\x77\xde\x9e\xe8\xad\x06\x8b\x8d\xde\xe8\x5f\x1e\x1e\xc5\x69\xac\xca\x57\x19\xbe\x26\xf9\xda\xa0\xbf\xc6\xf5\x6a\x23\x9e\xff\xf3\x38\x4e\x57\x1b\xf1\x06\x8f\x3f\xc9\xfc\xca\xdd\x52\xaf\x5e\x19\xee\xc5\x66\xb6\xdc\x4c\x86\x53\x33\x8b\x7d\x7c\x10\x93\x97\x0a\x5f\x63\xf4\x8a\xdc\xa7\x30\x6c\x25\xe7\xe7\x9f\xad\x62\x1f\x1f\xc4\xed\xa5\xc2\xd7\xb8\xbd\x22\xf7\x2b\xb7\x8b\x95\x5e\xbf\x2a\xeb\x4f\x8b\xb5\x5e\xad\xf9\x5a\xc7\x3e\x3e\x8a\xdf\x97\x0a\x5f\xe5\xf7\x57\x72\xbf\xf2\x7b\xfa\xfb\xab\xeb\xeb\x7a\xb9\x59\xad\xa3\xe1\x54\xaf\x62\x1f\x1f\xc4\xf0\xa5\xc2\xd7\x18\xbe\x22\xf7\xa6\x6a\x30\x5c\xad\x36\x7a\xf9\xcf\x0f\xbe\x5a\xe9\xb5\x9c\xa9\x57\xda\xb0\x37\xfa\x45\x51\x8a\x3f\x3c\xaa\x1d\xb1\x2a\x5f\x6d\xc9\x35\xc9\xd7\x50\x62\xa5\x17\xff\xfc\x58\xef\x87\x53\xa5\xf7\xaf\xb4\xe0\xc2\xfe\xa3\x79\x7f\x97\xf1\xbb\xb8\xbe\x52\x51\x7f\x7d\x7c\x10\xff\xbf\x56\xfa\x5a\x23\x5e\x21\xfb\x66\x4b\x9e\xbf\xfb\x7a\x73\x9e\xe7\x9c\xe0\x11\x9f\x4a\xbd\xfa\xc9\x7b\xbe\x92\xf1\xba\x1f\xb0\x9d\xae\x7b\x6e\xd3\x3b\x7f\xf5\xba\x9e\x1f\xd5\xca\x45\x8b\x6d\x35\xf2\x15\xff\x87\x58\x2f\xb5\xfe\xf1\xbf\x9e\xbf\xf1\xff\xfb\xd1\xc9\x79\x75\xef\xe5\xf9\xc7\xff\xf3\xff\xff\x01\xac\x9f\xe5\x77\x45\x53\xaf\xd6\xe7\xb5\xfc\xa9\x15\x37\x73\xf9\x6b\x35\x4f\x4c\x3e\xeb\x29\xbf\xb0\xb8\xd2\x51\x34\x9c\xf6\x4f\xb2\xf7\xcf\x0f\xb1\x39\x5c\x1e\xe6\xcb\xa1\xfc\x5d\x16\x9f\x86\x41\x1c\x56\x7a\x71\x33\x63\x2f\x35\x3c\xf1\x74\x11\x8c\x5f\xd8\x7a\x5b\x55\x7c\xfa\xba\xd1\xfa\x7e\x16\x7e\x56\x72\xe6\x22\x06\x30\x9f\x64\xe4\xf9\xcd\x7d\x8c\xc4\x2b\x79\x62\xe4\x57\x45\xf8\x93\x9c\xac\xe4\x5c\x4f\xb7\x77\x72\x12\xaf\xe4\x89\x93\x95\x9c\x7f\xb1\x43\x2e\x0b\xea\xdd\x9c\xc4\xeb\x79\x66\xe6\xa7\x96\xf0\x2b\x33\x7c\xb5\x7e\x9b\xa1\x18\x70\xdc\xc7\xd1\x75\x45\x4f\x2c\x5d\x61\xe3\x87\x7d\x54\x9b\xad\xd6\xfd\xa5\x6e\x04\xa5\xd3\x5e\x58\xf0\x95\xfe\xa1\x36\x93\xf9\x0f\x39\x9b\xcc\x23\xbd\xd6\x27\xb2\xff\x6f\x00\x00\x00\xff\xff\x7f\x3e\xae\xf4\xbf\x8c\x03\x00") func kahunaCoreSqlBytes() ([]byte, error) { @@ -830,7 +272,7 @@ func kahunaCoreSql() (*asset, error) { return a, nil } -var _kahunaHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x79\x6f\x22\xcb\xd9\xef\xff\xf9\x14\xe8\x28\x92\x13\x31\x39\xd4\xbe\x4c\x6e\xae\xd4\x40\xb3\x77\x03\xcd\x4e\x14\x59\xbd\x54\x43\xb3\x35\xfb\xf6\xea\x7e\xf7\x2b\x16\xdb\xd8\x06\x8c\x3d\xf6\x24\x39\xf3\x5a\x27\x11\x43\x55\xd7\xb3\xd4\xf3\xab\x67\xa9\xaa\xe6\x6f\x7f\xfb\xd3\xdf\xfe\x16\x29\x85\xb3\x79\x67\xaa\x2a\xe5\x42\xc4\xb3\xe7\xb6\x63\xcf\x54\xc4\x5b\x0c\xc7\x7f\xfa\xdb\xdf\xfe\xb4\x6b\x4f\x2e\x86\x63\xe5\x45\xfc\x69\x38\x7c\xea\xb0\x54\xd3\x59\x10\x8e\x22\xf2\x77\xf6\x3b\x3c\xe9\xe5\x6c\x22\xe3\xce\xfd\xee\xf1\x17\x5d\xfe\x54\xd1\xab\x91\xd9\xdc\x9e\xab\xa1\x1a\xcd\xef\xe7\xc1\x50\x85\x8b\x79\xe4\x1f\x11\xf0\xf7\x7d\xd3\x20\x74\xfb\xaf\xbf\x75\x07\xc1\xae\xb7\x1a\xb9\xa1\x17\x8c\x3a\x91\x7f\x44\xee\x6a\xd5\x94\xb8\xfb\xfb\xc3\x70\x23\xcf\x9e\x7a\xf7\x6e\x38\xf2\xc3\xe9\x30\x18\x75\xee\x67\xf3\x69\x30\xea\xcc\x22\xff\x88\x84\xa3\xe3\x18\x5d\xe5\xf6\xef\xfd\xc5\xc8\x9d\x07\xe1\xe8\xde\x09\xbd\x40\xed\xda\x7d\x7b\x30\x53\xcf\xc8\x0c\x83\xd1\xfd\x50\xcd\x66\x76\x67\xdf\x61\x65\x4f\x47\xc1\xa8\xf3\xf7\x23\xef\xca\x9e\xba\xdd\xfb\xb1\x3d\xef\x46\xfe\x11\x19\x2f\x9c\x41\xe0\x7e\xdb\x09\xeb\xda\x73\x7b\x10\xee\xba\x69\x85\xaa\x6e\x45\xaa\x5a\xbc\xa0\x47\xb2\xa9\x88\xde\xcc\x56\xaa\x95\x48\xd1\x2c\xb4\x8e\xfd\x7f\xef\x06\xb3\x79\x38\xdd\xdc\xcf\xa7\xb6\xa7\x66\x91\xa4\x55\x2c\x45\x12\x45\xb3\x52\xb5\xb4\xac\x59\x3d\x79\xe8\x79\xc7\x7b\x37\x5c\x8c\xe6\x6a\x7a\x6f\xcf\x66\x6a\x7e\x1f\x78\xf7\x7e\x5f\x6d\xfe\xfe\x33\x08\xba\xfb\x4f\x3f\x83\xe4\xce\xae\x7e\x9e\x80\x07\x6a\xef\x97\xee\xc0\xe0\xce\x90\xaf\x11\x3b\xe9\xf5\x34\xf8\xbe\x7b\xd6\x4c\xea\xcd\x93\x9e\xc7\x61\xf7\x5c\xdd\x2b\xdf\x57\xee\x7c\x76\xef\x6c\xee\xc3\xa9\xa7\xa6\xf7\x4e\x18\xf6\xaf\x3f\x18\x8c\x3c\xb5\xbe\x3f\x11\x6e\x34\xb3\xf7\x86\x3e\xbb\x0f\x47\xf7\x81\xf7\x9e\xa7\xc3\xb1\x9a\xda\x8f\xcf\xce\x37\x63\xf5\x03\x4f\x3f\x71\xf2\x43\x5c\xbc\xef\xd9\x81\xf2\x3a\x6a\xba\x7f\x70\xa6\x26\x0b\x35\x72\xdf\x25\xc2\xc9\xe3\xe3\xa9\x5a\x06\xe1\x62\x76\xfc\xee\xbe\x6b\xcf\xba\x1f\x1c\xea\xc7\x47\x08\x86\xe3\x70\xba\x83\xe3\x71\x4d\xfd\xe8\x30\x1f\xd5\xa5\x3b\x08\x67\xca\xbb\xb7\xe7\xef\x79\xfe\xc1\x98\x3f\x60\x4a\x47\x5c\x7e\x80\xe9\xd3\x27\x6d\xcf\x9b\xaa\xd9\xec\xfa\xe3\xdd\xf9\xd4\xdb\xfb\x9d\xfb\x41\x18\xf6\x17\xe3\x1b\x7a\x8f\xdf\x62\xe9\xd0\xcb\x0e\xa6\xef\x1c\xf8\x61\xd1\xbd\xf9\x81\xdd\x3a\xe1\xfb\x6a\x7a\x5b\xd7\x87\xe1\x3f\xf0\xc8\x51\xad\xb7\x3d\xb4\x5f\x5a\xdf\x41\xe4\x74\x29\x7e\xeb\x89\xf1\xee\x81\xee\xfc\xcd\x19\x98\x3d\x5b\x80\x9c\xcd\x9b\x66\xd4\x7d\x44\xfa\x2d\x9d\xc3\x03\x1f\xe1\x9b\x1d\x83\xd9\xfc\x7e\xbe\xbe\x1f\xbf\x3d\xe4\xae\x67\x38\xbe\xb5\xa7\xba\xb5\xdb\x83\x2b\xb9\xde\xd9\x79\x80\xfb\x9b\xdd\xde\x5e\xc5\x9c\xcd\x6d\x93\x79\xf0\x91\x3b\x6d\xcf\x66\x8b\xb7\x28\x3f\x76\x76\x43\x4f\xbd\x33\x2e\x78\x34\x83\xb1\x3d\x9d\x07\x6e\x30\xb6\x47\x57\x9d\xf7\x5b\x8f\xde\x8f\xdf\x19\x9b\x3c\x7a\xb4\xf7\x72\x70\xfe\xc1\x77\xd3\xdf\x2b\xef\x16\x7a\x87\x8e\x5f\x3e\xfe\x61\x32\x77\x33\x79\xfc\xb8\xf3\x0f\x0f\xa1\xdf\xde\x18\xee\x6f\xe4\xa0\x13\x4e\xc7\xf7\xc3\xa0\x73\x0c\x18\xae\xb0\xf0\xa2\xe7\xcd\x32\xbe\x3f\xde\xbb\x36\xf2\xad\xc6\x79\x78\x3a\x51\x2c\xd4\x0c\x33\x12\x78\x07\xca\x49\x3d\xa5\xd5\x0a\xd5\x1b\xc7\xbe\x60\x74\x9f\x30\xf2\x71\xba\xaf\x8f\xb4\xff\xd7\xed\xe2\x3f\x78\xe9\x8a\x5e\xae\xe9\x66\xe2\x03\x3a\xdb\xc5\xd9\x33\x35\x79\x37\xe5\x67\x83\xdc\xfc\xb4\xa7\x6e\xec\xfb\x14\xcd\xde\x2c\xe1\x05\xd4\xbf\x47\xbe\xf3\x43\xdc\xf6\xec\x31\xee\xbb\xad\xf3\x31\xc8\xbb\x59\xb6\xe3\x0a\xf0\x1e\x59\x0e\x8f\xdc\xd8\xf7\x18\xfe\xdd\xce\xcf\x43\xbc\x78\x0b\x47\x2f\xd6\x90\xeb\x9d\x4f\x96\x84\x63\x47\x2d\x9d\xb6\xf4\xb4\x56\x3d\xd3\x79\x18\xec\x32\x8e\xc0\x55\x7f\x19\x2d\x86\x6a\x1a\xb8\xff\xfc\xd7\x5f\x6f\x78\xca\x5e\x7f\xe0\xa9\x81\x3d\x9b\xff\xc5\x1e\x6d\xd4\x60\x5f\x8a\xb9\xe1\x09\x3f\x98\x9e\x7d\x24\x55\x33\x13\xd5\x6c\xd1\xbc\x22\xcf\xbd\xdd\xe9\x3c\x71\xf7\x2d\xf2\x8a\xd1\x2b\x63\x3c\x48\xf7\x03\x63\xec\x64\xdd\x3f\xfe\xc4\xfc\xb7\xc8\x7b\x04\xd9\x8b\x7e\xc3\x08\x7a\xb3\xaa\x9b\x95\x17\x43\x0c\xc6\x9d\xd9\x64\xf0\x60\x8b\x89\x8c\x6e\x68\xaf\x28\xfc\xfd\x4f\x87\x2a\x9c\x69\x0f\xd5\xf7\x87\xef\x22\xd5\xcd\x58\x7d\x3f\x3e\xf2\xf7\x48\xc5\xed\xaa\xa1\xfd\x3d\xf2\xb7\xbf\x47\x8a\xab\x91\x9a\x7e\x8f\xfc\x6d\x5f\x9c\x4b\x58\xfa\x6e\xbe\x8e\x23\x3f\x8c\xf7\xa7\x67\x23\x3e\x6f\x3c\x0e\x9c\x28\x1a\x86\x6e\x56\xaf\x8c\x7c\xe8\x10\x29\x9a\xcf\x07\x88\x64\x2b\x91\xbb\x87\xb2\xdb\xc3\x77\xb3\xfd\x20\x77\x2f\x29\x3f\x88\x7f\xa4\xf9\xa8\xa1\x37\xe5\x79\xa6\x4b\xb3\x58\x7d\xa1\xcf\x48\x23\x5b\xcd\x3c\xb2\x75\x5a\x7f\x7b\x46\xfe\x69\x94\x17\x8c\xbc\x47\xf8\x57\x83\xec\x15\x50\x2a\xc4\xc6\x9d\x4a\xb9\x10\x19\x4f\x43\x57\x79\x8b\xa9\x3d\x88\x0c\xec\x51\x67\x61\x77\xd4\x5e\x0d\x37\xd6\x0b\x4f\xd9\x7d\xdb\xd0\x8e\xec\x3f\xd8\xea\x13\xff\x0f\x73\x7b\x4e\x97\x8f\x96\xfd\xe6\xf8\x11\x4b\xaf\xd6\x2c\xb3\x72\xf2\xdd\x9f\x22\x91\x48\xa4\xa0\x99\xe9\x9a\x96\xd6\x23\x7b\xe9\x0d\xa3\x76\x58\xef\x2a\x55\x2b\x9b\xa8\xee\x7b\x68\x95\xc8\x9f\xef\xff\x1c\xa9\xe8\x05\x3d\x51\x8d\xfc\x19\xee\xfe\xf5\x72\x36\xde\x04\xe2\x8f\x49\xf7\xd6\xf0\x9f\x26\x1c\x3a\x27\xdc\x2d\x2b\xd5\x8f\xc9\x77\x03\x85\x47\x11\x1f\xbf\xfa\x90\x84\x7f\xf9\x53\x24\x92\xd0\x2a\x7a\xa4\x91\xd1\xcd\xc8\x9f\xe1\x3f\xe1\xbf\x62\x7f\x86\xff\x44\xff\xfa\xbf\x7f\x46\xfb\xcf\xe8\x9f\xe8\x5f\x91\xea\xa1\x31\xa2\x17\x2a\xfa\x4e\x29\xba\x99\xfc\xeb\x59\xcd\xdc\xe0\x07\x7e\x50\x33\x6f\x53\xf8\x6a\xcd\xfc\x9f\x8f\x68\xe6\xb5\x4f\x3d\xea\xe1\xd1\x0f\xdf\xa6\x88\x27\xb7\xfd\x6a\xc4\x3d\xc7\x91\x48\x65\xa7\xab\xc8\x3f\x9e\x56\x80\x6f\x87\xaf\xab\xad\x92\x1e\xf9\xc7\x29\x22\xfe\x7a\x0e\xb5\x9f\xca\xe3\xcb\x01\x5f\xb0\xf8\x00\xe3\xdb\x39\x3c\x1b\x02\xfd\x28\x97\xe7\x06\x7d\xc1\xe9\x33\x40\x3e\x67\xf7\xc9\xca\x5e\x73\x7b\x2e\xcc\xfb\x61\x6e\xcf\x0c\xfa\x92\xdb\x53\x90\x5c\xe5\x76\xe7\xb9\x3c\xe5\xdb\x8b\xc1\xfc\x7e\x6e\x3b\x03\x35\x1b\xdb\xae\x8a\xfc\x23\x72\x77\xf7\xf7\xe7\xad\xab\x60\xde\xbd\x0f\x03\xef\x64\x2b\xed\x99\xac\xa7\xf1\xef\x51\xc4\x3d\xc0\x6e\x13\xef\x80\xc5\xd3\xe4\xfb\x20\x51\xe0\x45\x9c\xa0\x13\x8c\xe6\xfb\xc0\xc0\xac\x15\x0a\x07\x71\xec\xe1\x2e\x8c\x8f\xb8\x5d\x7b\x6a\xbb\x73\x35\x8d\x2c\xed\xe9\x26\x18\x75\x5e\x74\x1b\x2d\x86\x8f\x21\x7f\x24\x18\xcd\x55\x47\x4d\x5f\x74\xf1\x07\x76\x67\x16\x99\x0d\xed\xc1\xe0\x35\x99\x79\x38\x1c\xbc\x26\xf2\x17\x44\xe9\x5f\x1f\x7b\xbe\x9e\xf6\x97\x79\xc3\x47\xd5\xf1\xb2\xda\xf1\xa8\x92\xb9\x5a\xbf\x52\xc8\x78\x3c\x08\xf6\x35\xfb\xc8\x3c\x18\xaa\xd9\xdc\x1e\x8e\x23\xbb\x39\xdb\xff\x33\xb2\x0d\x47\xea\x35\xa3\x97\xb2\xa2\x87\x78\xf4\x98\x4e\xdd\xc6\xf3\x63\xf2\x75\x61\xd4\xa3\x19\x6a\x56\xf5\x10\xd1\xc1\xfd\x17\x59\x33\x61\xe9\xfb\xf0\x2b\xde\x3a\x7e\x65\x16\x23\x46\xd6\xac\x6b\x85\x9a\xfe\xf8\x6f\xad\xf9\xf4\xef\x84\x96\xc8\xe8\x11\xf8\x96\x30\x1f\x56\xfb\xcb\x81\x5e\x99\xe2\xb1\xe8\x11\x19\xa9\xf5\x7c\x69\x0f\xfe\x72\x77\x41\xe2\xbb\xef\xdf\xa7\xaa\xe3\x0e\xec\xd9\xec\xaf\x2f\xa7\xeb\xb0\x57\x71\xc6\xb6\x18\xf9\xeb\x95\x89\x3a\xe4\xc6\x3f\x2c\xd9\xa1\xa2\xf3\x28\xd7\x79\x64\x3c\xd5\xea\xce\xb3\x79\xb6\xbb\x1b\x7a\xe7\xba\x43\x74\xbe\xfb\xa1\xfc\x77\xe6\x01\xca\xae\x21\xec\x7c\x79\xe1\x93\xcc\xf6\x74\xcc\x9f\x66\xb4\xd7\x04\x89\x14\x1b\xa6\x9e\x8c\xc4\x5b\x6f\x48\x74\xa8\xd0\x5d\x17\xe8\x71\xac\x17\xcd\xbf\x07\xde\x25\xde\x1e\x6a\x3e\x3f\x6a\x75\xc7\x71\x8e\x66\xf7\x02\x33\xf7\x97\x56\xfa\xd7\x25\xae\x4b\x3d\x7f\xdb\x6f\x7c\xfc\x76\xc1\x9a\xf7\x76\x7c\xbe\xc9\x53\x73\x3b\x18\xcc\x22\xbd\x59\x38\x72\x2e\x1b\xdb\x43\xa1\xec\x47\xf5\x70\x1c\xe7\xa8\x87\x87\x7d\xeb\x0b\xbc\x9d\x6c\x26\xdf\x84\xc2\x73\xfb\xd8\xe7\x1f\x3c\xaa\xe5\xa4\x32\xba\x9f\x88\x47\x3e\x1e\x56\x39\xf0\x82\xc2\xd3\x44\xdc\xd6\xff\x71\x33\xf9\x85\x63\x0a\x17\xf3\x27\xdf\xf4\xf2\x99\xa9\xb2\xe7\x6f\x3e\x74\xe8\xbb\x18\x7b\x37\xf7\x7d\x34\x9d\xe3\x3f\x5f\xec\xb3\xbf\x92\x05\xbe\x8a\x07\xe6\xf6\xe0\xde\x0d\x83\xd1\xec\xbc\x0d\xfa\x4a\xdd\x8f\xc3\x70\x70\xbe\x75\xbf\xf3\xe9\xab\x4b\x73\xbd\x6f\x9e\xaa\x99\x9a\x2e\x2f\x75\xd9\xc5\xa1\xf3\xf5\xfd\x3e\x4c\x0a\xb6\x97\x7a\x8d\xa7\xe1\x3c\x74\xc3\xc1\x45\xb9\x5e\xce\xd1\x83\xb1\x28\xdb\x53\xd3\x7d\x78\x71\xf8\x7e\xb6\x70\x5d\x35\x9b\xf9\x8b\xc1\xfd\x45\x43\x39\x0a\x6e\x07\x03\xe5\xbd\xd5\xeb\xc8\xfa\x05\x13\xba\x0c\xbd\x0b\xf5\xed\x1f\x45\xe2\x85\x3d\x93\x37\xfc\xe2\xed\x2b\xd2\xdb\x6b\xdc\x7b\x45\xfe\x5c\x57\x77\x95\xc6\xcf\x72\x7d\xef\x12\xf4\x07\x5d\xe1\x55\x5a\xaf\x5d\xe3\xf9\xee\x57\x5c\xe5\xc9\xee\xcf\xa7\xd9\xe6\x5b\xa9\xd0\xf3\x93\x57\x17\xd2\xa5\x5d\x76\xe0\x1e\x44\xd9\x7b\xc9\x1f\x74\x92\xc7\xd5\x21\x5c\x4c\xdd\xc7\xa3\x1c\x17\xdc\xd3\xc3\x92\x73\x77\xf7\xfd\xfb\xe5\x74\xed\x32\x0e\x8e\x9b\x6f\x3f\xaa\xce\xe3\x79\xc1\xbf\x7c\x6a\x4c\x71\x5c\x36\x3f\xe2\xe1\xf6\xe7\x65\x2e\x92\x7d\x71\x5a\xf1\x5a\xa7\xe3\x01\xca\x6b\x5d\x0e\xb9\xf2\xd9\x0e\xaf\xcf\x7d\xbe\xd1\xef\x2a\xb9\xc7\x5e\x57\x28\xee\x59\x0a\x66\xf7\x33\x35\x18\xa8\x69\xc4\x09\xc3\x81\xb2\x47\x0f\x7e\x2b\x70\xd5\xfd\xe8\x99\x8f\x3e\x7c\xf7\xdc\x6f\x3f\x9d\x38\xba\x7f\xe1\xd1\x9f\x9d\x79\x7a\xd9\x78\xb2\x95\x7f\xf6\x74\xe8\x9e\xeb\xfb\xfd\xf9\xe1\x48\x22\xa3\x27\xf2\x91\xbf\xfc\xe5\x54\x83\xff\x37\x02\xfe\xfa\xd7\xb7\x86\x3a\xf7\xf8\x83\xd2\xfe\xcf\x2b\x3d\xde\x30\xde\x33\x9d\xbe\x18\xfe\x85\xc2\xf7\x0c\x5e\x85\xd2\xf9\x5d\xf0\x4f\x00\xd7\xf9\x73\x0d\x37\x7a\xd2\x5b\x96\xb0\x1f\xf1\xa5\x6f\x9d\x21\xf8\x1c\x6f\xfa\x06\x95\x9f\xe5\x4f\xdf\x29\xec\x0f\x7a\xd4\x37\xa8\xbd\xf6\xa9\x97\x1e\xb8\xe2\x55\x9f\x9d\x1b\xf9\x44\x5b\x7d\xb0\xcf\x53\x96\x6e\x4e\xb4\x8e\x6b\xff\x1b\xe9\xdb\xad\x8e\xf7\xba\x0f\x3d\xdb\xf7\x89\xf4\x59\xbc\xec\x32\x85\xcb\xa9\xc6\xa5\x24\xee\xdf\x92\x86\xcd\xd7\xf7\x6a\xb4\x54\x83\x70\xac\xce\x95\x36\xe7\xeb\x5d\x52\xb4\x18\xcc\x2f\x34\x0e\xd5\xdc\xbe\xd0\xb4\x4b\xc7\x2e\x35\xcf\x82\xce\xc8\x9e\x2f\xa6\xea\x5c\x15\x4e\xb2\xbf\xfe\xf3\x5f\x4f\xb1\xcb\xff\xfc\xbf\x73\xd1\xcb\x3f\xff\xf5\x52\xe7\x6a\x18\x5e\x28\x98\x3d\x8d\x35\x0a\x47\xea\x6a\x2c\xf4\x34\xd6\xeb\x61\x8e\x92\x05\x43\x75\xef\x84\x8b\x91\xb7\xaf\x6a\x8b\xa9\x3d\xea\xa8\x97\x19\xdb\x73\xd7\xba\xd3\xc4\x6e\xb4\x8e\x7a\x91\x02\x8f\x46\x6a\x7a\x7f\x1b\x02\x9e\x46\xba\x6a\xae\xa7\x03\xbf\xad\xe4\x63\xa1\x5e\xad\xee\x1f\x2c\xf6\xc0\xde\x5b\x45\xbf\x48\xe0\x3d\xac\x05\x0f\x87\xd0\x6e\x59\xc0\x0e\x8b\xc1\xfe\xc4\xdf\x1b\xe7\xdb\x2a\x7a\xf5\x4a\xa5\xf7\xb4\xa6\x76\x5a\xe7\x7d\x5f\x96\xf3\x79\x42\xdc\x78\xfc\xef\xaa\x50\x57\xb3\xa3\x5b\x84\xbc\x18\x07\x7c\x9a\x98\x37\x9f\xa0\xbc\x2a\xe8\x1b\x4e\xeb\xbc\xa8\x49\x7b\x6e\x47\xfc\x70\xfa\xc6\x7e\x57\x24\xa9\x55\xb5\x37\xc4\xcb\x9a\x15\xdd\xaa\x46\xb2\x66\xb5\xf8\x6c\xcf\x6b\xef\xe3\x2b\x91\xbf\xc0\x6f\x91\x3b\x04\x8e\x7f\x77\xdf\x22\xf0\x5b\x04\x7c\x8b\xdc\xdd\xfd\xf5\xef\x6f\x3e\x8a\xbe\x45\xee\xde\xf9\x08\x3e\x3e\x02\xbe\x45\xf0\x8d\x8f\x90\x6f\x91\x3b\x0c\x3e\xc6\x21\x7d\xe2\xf0\x56\x72\xec\x5b\xe4\x0e\x9e\xa7\x76\x61\x76\xae\x6d\xc1\xbd\x77\x86\x5e\x6e\xc3\x3d\x70\x75\x07\xef\x83\x51\x30\x0f\xec\xc1\xfd\xe1\x48\xd4\xef\xb3\xc9\xe0\x6e\x3f\x75\x50\xfe\x0d\xb0\xbf\x01\x1c\x81\xe2\x3b\x12\xdf\x09\xff\x1d\x60\x44\x24\x8b\x02\xf4\x52\xde\x8b\xa3\xa3\xfb\xc3\x55\x97\x67\x06\xea\x6c\xee\xe7\x61\xe0\x5d\xa7\x24\x19\xe5\xef\xa1\x84\xef\x17\x33\xf5\x18\x4e\xdc\x07\xa3\x57\xd7\x6b\xae\xd2\x23\x04\x10\xf1\x1e\x7a\xe4\xde\xf6\xbc\xfb\x97\x45\xca\xab\x34\x28\xa1\x18\xbd\x87\x06\xbd\x3f\x04\x2f\x0f\x69\xd4\x7e\x73\xfb\x2a\x09\x86\x01\x7a\x97\x18\xec\x81\xc4\xd1\x19\xdc\x40\x42\x10\x48\xdf\x43\x82\xdf\x0f\x43\x2f\xf0\x37\xb7\x4b\x21\x20\x43\xef\x22\x21\x9e\x49\x71\x3c\xd3\x7e\x03\x1d\x4e\x18\x7e\x1f\x9d\xdd\xa4\xdb\x9d\xce\x54\x75\xec\x79\x38\xbd\x6e\x53\x12\x40\x20\xdf\x33\xbc\xdc\x0f\x7f\x28\x60\xdf\xaf\xbd\xe9\xf5\xd1\x11\x87\xef\x9a\x6a\x08\xf6\xc3\x1f\x67\x61\x5f\x92\xb8\x4e\x80\x4a\xfe\x2e\xed\x40\x78\x4a\xe0\x31\xc7\xdd\x2d\x00\xd7\x09\x49\x26\xdf\x27\x09\x7a\x36\xd1\xc7\xaa\xc2\xe1\x16\xf5\x35\x4a\x10\x70\x4a\xde\x35\x23\x10\x1f\xc4\x79\xac\xc5\x5c\x9d\x71\x08\x11\x67\xef\x93\x84\xdc\xfb\xc1\xfa\xe1\x46\x49\x38\x1c\xdc\xfb\x81\x1a\x5c\x5d\x1a\x21\xa4\x10\xbe\x6b\x11\x86\xf4\x61\x23\xed\x61\x83\x63\xfd\x86\x18\x8c\xbf\x6f\x99\x87\xec\x3e\x18\x75\xd4\x6c\x7e\xff\x7a\x0b\xe5\x0d\x52\x5c\x8a\xf7\xcd\x08\x7f\x16\xf9\xec\xf7\xaa\xec\xeb\xce\x04\x22\x00\x30\x39\x12\xb9\xe0\x6b\xaf\x1e\xbc\x78\xaf\xb3\x7d\x75\xf8\xe2\x34\x26\x4a\x27\xca\xed\x12\xce\xd6\x78\xb3\xc6\xf4\x1c\xc3\xb9\x76\x33\x9f\x28\x17\x5b\x55\x64\x99\x4d\x13\x67\xe2\x34\x61\x66\x74\xd3\xac\xe9\xb5\x4c\xc5\xd0\x48\xbd\x96\xcb\xe5\x2a\xba\xf9\x52\x43\x17\x89\xec\xa2\xa7\x74\xdc\x2a\xb5\x32\xd9\x02\x4a\x64\x71\xca\x2c\x93\x78\xb3\x90\x32\xcc\x64\x21\x95\xab\x99\xa5\x1a\xca\xb4\x70\xdb\x48\x55\x32\x45\xb3\x96\xd0\x8b\x5a\xa5\xc1\xcb\x09\x5e\x6c\xa2\xcc\xcd\x44\x76\x51\x4f\x5a\x33\x53\xed\xa4\x15\x4f\x98\xd5\x5a\x33\x5b\x4c\x26\x72\x7a\xcb\xd0\x12\x25\x23\x51\x69\xeb\x75\x9d\x34\xda\xe9\x36\x4e\xb4\x93\x6d\x5c\x42\x95\x66\x9e\xe4\x33\x9c\x66\xf3\xac\x75\x33\x11\xb2\x27\x92\xc8\x95\x74\xd2\xaa\x59\x08\xd5\x4b\x24\x61\xa0\x78\x32\x95\xd4\x32\x2d\x9c\x2c\xe8\x29\x9c\xe1\xa6\x6e\xe6\x6b\x65\x8a\x93\x55\x5a\xd5\xb3\x28\xad\x65\xaa\xd4\x24\xcd\x9b\x89\xd0\x3d\x91\x56\x25\x61\xe4\xcb\x2d\xa6\xb7\x0a\xcd\x62\xa9\x5a\x65\xb9\x52\xa9\xd8\x4c\x1a\x75\x33\xde\xc8\x56\x4b\xd5\x4a\x3b\x5b\x6f\x34\x48\xa1\xa1\x59\xf5\x78\xb1\x9a\xa1\x56\xb5\xa0\x25\x6f\x26\xb2\x0b\xfe\xd2\x49\x8b\xe2\x86\xa6\x67\xf3\xc5\x1a\x6e\xe7\x4d\x4c\x12\x95\x8c\xd6\xc8\xf0\x4c\x9d\xe5\x19\x4e\xc4\x73\x56\xad\xda\xa8\x25\xe3\xa9\x8a\xd1\xe2\x96\x55\xce\xe3\x4a\x29\x5f\xac\xdc\x4c\x84\xef\xad\x2b\x53\x6a\xa6\xeb\xc9\x7c\x29\x45\xf3\x55\x92\x30\xb5\x2a\x6f\x72\x5e\x6c\xb6\xda\xbc\x55\xd7\x49\x2e\x93\x4f\x25\x6b\x99\x44\x3a\x51\x6f\x24\x0a\x24\x4f\x4a\x65\xc6\xf3\xf9\xf6\xcd\x44\xc4\x5e\x12\x52\x31\x8a\x3a\xae\x97\x2a\x29\xde\xb6\x70\xa2\xaa\x97\x71\x89\xd6\xcc\x6a\xdc\xd0\x73\x49\x0d\xa5\x0b\xcd\x6a\xc6\xe2\x86\xa1\x59\x9a\x99\xcf\xe7\x92\x6d\x6e\x95\xd2\xa9\x9b\x89\xc8\xbd\x24\xf5\x06\x2d\x24\xac\x76\xaa\xc4\x4b\xba\xd9\xac\x6a\xe9\x62\x3d\x5b\x6e\x6a\xc9\xa4\x59\x6b\x36\xdb\xb9\x84\x99\x4f\x91\x7a\x39\x8e\xb2\x79\xde\x40\x85\x52\xae\x91\xe2\xb8\x96\xbe\x99\x08\x04\x7b\x2a\xb9\x7c\xae\x59\xca\xc7\x53\xd9\x4c\xb1\x88\x09\xa5\x8d\x66\x23\x4d\x13\xc9\x78\xbb\x59\x36\x5b\x29\xcb\x4a\x67\x13\x2d\xa3\x54\x2b\x63\x9a\x28\x95\x49\xa3\x5e\xc1\xf9\x76\xe1\x1d\x54\x0e\x98\xcf\xa6\x52\x56\x39\x9f\x31\x32\x2c\x97\xe4\x89\x3c\x2d\x66\x49\xb3\x9e\x68\x25\x0c\xd3\x32\x53\xac\xd4\xd2\x78\xae\x9a\xb0\x70\xaa\x94\x29\xe5\xda\xe5\x6a\xab\x95\x8a\x53\xfd\xf6\xa9\x87\x07\xd0\xb3\xb4\x89\x0b\xb9\x5a\x83\xe5\x5a\x16\xd7\x93\xc5\x1c\xe1\xf5\x78\x86\x27\x09\x35\x48\xae\x91\x69\xa6\xf3\xac\x90\xc9\x59\x9a\x9e\xa5\xb9\x78\xc5\x44\xc9\x78\xb9\xc5\xcb\xb7\x53\xd9\xa3\x3e\x5e\xcc\xf3\x78\xb1\x56\x29\x36\x4a\x99\xb8\x66\xc6\x5b\x06\x33\xb2\x56\xab\x9d\xcb\x26\xb3\xa5\x5a\x2b\x57\x6a\x66\xaa\x19\x2d\x99\xe2\xb4\xa6\xd7\xb3\xf5\x56\x23\x93\x29\x9a\xe5\xc4\xed\x54\xf6\xb0\x8f\xa3\x72\xb6\x55\x45\x59\xad\x96\x32\xac\x66\xbe\x50\x29\x14\x4a\x96\x9e\x48\xb0\x62\xa2\x98\xce\x19\x5a\xb2\x52\xaa\x5a\x79\x5e\x4d\x9b\x55\x54\x49\x59\xa8\x95\x6e\x24\x35\xeb\x76\x44\xc2\x03\xee\x9b\x46\x8a\xe0\x6a\xba\x9d\x69\xe0\xb2\x89\x2d\xbd\x58\xd3\x50\x8d\x96\x1a\x34\x5e\xd5\xac\x66\x3a\xdd\xca\xe1\x5c\x36\x95\x69\xe0\x56\x95\x95\xad\xbc\x55\xc0\x89\x52\xa9\x76\x3b\x95\x23\xf0\x1b\x98\x53\x43\x6b\x59\x84\x15\x93\xe9\x14\x6a\xa4\x35\xb3\x9c\x40\x96\xd5\x2e\xf0\x22\x22\x2c\xd9\xca\x64\x12\xe9\x46\xb5\x8e\x2c\x9d\x67\x33\x3a\x2a\xd7\xca\x85\x77\xc8\xc2\x0f\x0b\xa5\x66\x21\x4d\x6f\xe9\xf9\x6c\x55\x47\x85\x7c\x96\x5a\x46\x33\x45\x8d\x6c\xbd\xcd\xca\xbc\x99\x2d\x58\xc5\x74\xb2\x8a\x50\x91\xe7\x9a\x24\x59\x69\xa4\x2a\x3c\x95\x4c\x96\x6e\xa7\x22\x0e\x6b\x7e\x3b\x5d\xca\xb7\x68\xa3\x92\x69\xa4\x69\xab\xd8\x36\xcc\x34\x45\xe9\x44\x9e\x56\x12\x39\xd2\x4a\xd7\x1a\x46\x2e\x57\x4f\xb7\x2b\x79\x94\x2a\x91\x78\x16\xe5\xb2\x39\x13\xbd\x63\xf6\x0f\xd8\xcf\x24\x48\x12\x25\x2a\x84\x26\x72\x96\x69\x92\xb2\x96\xa9\xa2\x42\xaa\xad\xe5\xb2\x35\x5a\xd2\x78\x86\xe2\x3c\xae\x17\x4b\xac\xa1\xe7\x58\xb3\x91\x31\x2b\x66\x3b\x5f\xbe\x1d\x95\xe8\x80\xfd\x38\x4f\x95\x5a\xe9\x42\x81\x59\x39\xcc\x33\x79\x4b\x6b\x35\x68\x55\x6b\x18\xa9\x78\x3a\x9d\x4a\x1b\x24\x6b\x30\xdd\x8a\x27\xda\xcd\x2c\x8a\xb7\x49\xb1\x58\x6c\xa2\x9a\x76\xbb\xff\x42\x7b\xec\x27\x13\xf5\x6a\x3c\x5d\xd1\xf5\x1a\xcf\x17\x9a\x35\x23\x63\x54\x9a\x71\xad\xd0\xcc\xa1\x2a\xc9\xa2\x7c\xb1\xd4\x6c\xa0\x0a\xad\x5a\x85\x7c\xd2\xca\x6a\xcd\x24\xad\x25\x33\x5a\xab\x78\x3b\x95\x3d\xf6\xb5\x34\x45\xd5\x06\x2b\x6b\x71\x56\x4d\x9b\x46\xb1\x5a\xc0\xa8\x45\x0c\x5c\x2b\x97\x0b\xa6\x69\x66\x4a\x7a\xa6\xa5\x65\x5b\x56\x89\x55\x52\x29\xd6\xd6\xea\x56\x8a\xb6\xcb\xef\x90\xe5\xe0\xf1\x09\xab\x5b\xf9\x78\xa2\x90\x45\x4d\x96\x6c\x16\x9a\x5c\xcb\xea\x75\x2b\x55\xc8\xe0\x9a\xc6\x9b\x71\x1d\x9b\x69\xb3\xc4\x8a\x9c\x64\xca\xb4\xd0\xcc\x18\xe9\x6a\x1d\xe5\xe2\xb7\x53\xd9\x63\x3f\xd9\x4c\x69\xe9\x5c\xa2\x92\xc8\x92\x44\x1e\xb5\x32\x79\xd6\xb2\x0a\x1a\xab\xe6\xf5\x66\xca\x6a\xf2\xb8\x91\xae\x1b\xe5\x62\xdc\x28\x64\xf5\x5a\xce\xca\xd1\x56\xd9\x2c\x18\xd9\x77\x50\x39\x62\x3f\x8b\x71\x2d\x51\x28\x57\x13\x79\x03\x99\x86\x15\xaf\xf0\x66\x2b\x6e\x51\x4c\x0b\x05\xbd\xae\x65\x0a\xb4\x15\x37\x49\xaa\x9a\x88\x93\x4c\x3b\x53\xe5\x6d\x8d\x26\xea\xf9\xbb\x8f\x9e\x40\x8e\x54\xf4\xb7\x4a\x86\xc7\x5b\x1b\x4f\x17\xae\x7e\x9f\xa9\xeb\xa7\x73\xbf\x45\x76\xc2\xcc\xa7\x0b\x75\x43\x6c\xfb\xfa\xe0\xed\x87\x23\xdb\x43\xb9\xf9\x34\xae\x75\xa7\xca\x0b\xe6\xf7\xf6\x60\xdc\xb5\x47\x8b\x21\xd9\x45\xe3\xb5\x4a\xf2\xee\x2b\x16\xf3\xe7\xd4\xd1\x1b\xd4\x3f\x7b\x91\x7f\x4e\x1d\x5f\xa0\xae\xd7\xac\xbb\xaf\x88\x95\x9e\x53\x27\x6f\x50\xff\x5a\xd9\xe9\x1b\x9a\xff\x5a\xd9\xd9\x1b\xd4\x3f\xdb\x89\x3c\xa7\xbe\xf3\xb9\x23\x7b\x1e\x2c\xd5\x8e\xd8\xdd\x8b\x52\xee\x7b\x4e\x46\x7f\xca\xba\xf0\x6c\x2f\xe7\x5b\x84\xdf\xba\x28\x9c\x3b\x18\xfd\xd1\x55\xe1\xe1\x70\xf4\xc9\xb2\x80\x88\x84\x40\x40\xc0\x11\xa3\xfb\x9a\x37\xd9\xe1\xe5\x7f\x7e\x1b\xa9\xd5\x8e\xd3\xdf\xbe\x47\x9e\x4a\xf0\x00\xfc\xbf\x4b\xba\x3f\x3b\x32\x11\x10\x43\x2c\x25\x93\x8f\xd5\xf4\xff\xf9\x6d\x36\xb7\xa7\xf3\x60\xd4\xb9\x77\xec\x81\x3d\x72\xd5\x6f\xdf\x23\xbf\x41\x00\xc0\xef\x47\x12\xbf\xdd\x4c\x03\xbd\xa4\x81\x0e\xc5\xfe\xff\xf9\xed\x50\x70\x7a\x35\xf2\xb7\xc8\x6f\x4f\xd7\x0d\x76\xad\x07\xf3\xb8\x9d\xe2\x2b\xa9\xf0\xb7\x08\x3c\x88\xb5\x52\x41\xa7\xbb\x23\x09\xbf\x45\x7e\x3b\x4c\xc8\x7d\x5f\x6d\x76\x54\x3e\x5a\x50\xb8\x9d\x2f\xbc\xe3\x0b\x50\x28\x20\x47\x8c\xe3\xbd\xb6\xd1\x2b\x4d\x7c\x9e\x1e\x5e\xd1\x3b\xab\xf9\xcf\xa5\x87\x19\x42\x18\x01\x8a\x39\xff\x32\x6b\x7a\x46\xe3\xcb\xad\xe9\x95\x54\xb7\x59\xd3\x07\x8b\x3a\xb7\xf3\x45\x76\x7c\x41\x89\x04\xc2\x02\x08\xf8\xe5\xd6\x84\x5e\xd2\xfb\x62\x6b\x7a\x4e\x0f\x7d\xb9\x7c\xe4\x25\xbd\x2f\x96\x6f\x47\x0f\x71\x86\x31\xe2\x80\x0b\xfa\x65\x68\x79\x46\xe3\xcb\xd1\xf2\x4a\xaa\x1b\xd1\xf2\xb1\xea\xe4\xed\x7c\xed\x64\x47\x18\x63\x81\x01\x26\xe2\xe0\xe9\xc8\xc1\x9c\x46\xf6\xf0\x28\xea\x50\xc1\x9d\x06\x96\xf6\x60\xb1\xff\xc6\x48\x6a\x2b\x43\xfb\xc7\x3f\xde\x47\x06\x4a\x40\x30\xc6\x0c\x4a\x7c\x23\x99\x6a\x76\x6b\xbe\x9f\x0c\xe1\x44\x60\x26\x84\x3c\xac\xb4\x04\xbe\x22\x83\xde\x39\x22\x20\x14\x13\x00\x19\x38\xac\x26\x04\x7c\x0d\xe3\x07\x32\x94\x3d\x30\xfe\x9a\x0c\x7a\x46\xc6\xac\xb6\x70\xf1\xa3\x64\x24\x7f\x98\x86\xd7\x64\x22\xcf\xc8\xd8\x4d\x6b\x9b\x4d\x7b\x4b\x2f\x11\xdf\xba\xe9\x54\xaf\xdd\x34\xba\xef\x23\x09\x18\xa4\x82\x60\x82\xc1\xd7\xc1\xf9\x19\x8d\x2f\x87\xf3\x2b\xa9\x6e\x84\xf3\xc7\xf6\x01\xde\xa9\x09\x28\x18\x26\x8c\x03\x20\xcf\x3b\x07\x8a\x28\x67\x9c\xfd\x2e\x29\x66\x40\xa2\x1f\xd7\x06\x7b\x49\x15\xbd\xa6\x8a\x05\x24\x04\xed\xa7\x00\x12\x28\x3f\x85\x28\x94\x9c\x32\x41\xa4\xe4\xf0\x60\xcb\x7c\x4f\x34\x18\xf9\x83\xc3\x19\x2d\x4f\xcd\xe6\xc1\x68\xff\x79\xaf\xff\x0f\x6e\x91\xbc\x4b\xff\x07\xa6\x28\xc0\xe2\xa8\xff\xb7\x98\xfa\xe0\x5e\xda\x3b\x35\x85\x11\xc7\x14\x23\x02\xdf\x8a\x3f\xd1\x53\xbe\xf4\x21\x24\x3e\x27\x75\x06\x89\xe7\x08\x7c\x8e\x35\x9c\x12\xbe\x0d\x90\x5f\x6e\x10\x3b\x6d\xef\x5c\x91\xa0\x8c\x42\x04\x1f\x8f\x74\x9d\x2a\x44\x4a\xf9\xbb\xdc\xfd\x7d\x52\x78\xf8\x9c\xe0\x19\x2c\x7e\x2a\xc1\x57\x12\x1e\xa0\x78\xf7\x3f\xef\x1b\x81\x30\x81\xa9\xe4\x02\x7d\x99\x8b\x78\x4e\xe3\xcb\x5d\xc4\x2b\xa9\x6e\xcc\xb6\x3f\xb6\xc1\x7a\x3b\x5f\x62\xc7\x17\xc0\x42\x30\x0c\x28\x3a\xba\x08\xb2\xe7\x6b\x3e\x5d\xec\x9e\x39\xf0\xf1\xb1\xed\xd1\x27\xbd\xb9\xa1\xb7\xd7\x9b\x5e\xb3\x5e\x2b\xf3\x65\x5d\xed\xa9\xc7\xe1\x6d\x07\x07\x70\x7e\xac\xbc\xf7\x3e\x55\x70\x06\x24\x66\x0c\x23\x7c\x2c\x3c\xe0\xaf\x53\x45\xad\x92\xfc\x2f\x50\x05\xc7\x0f\x56\xf1\x85\xaa\xf8\x0f\xb6\x8a\x9d\xf0\x1c\x72\x29\x98\xa4\x12\x1f\xdc\x25\x3a\x00\x77\x10\x0c\x83\xc3\x0a\xba\x4b\x9a\x38\x02\x98\x09\xfa\x3b\xe1\x9c\x0a\xc0\xff\xab\xe6\xfb\x51\x48\x0e\x00\x78\x30\xfd\x0f\x09\xf9\x1f\x3c\x93\x3b\xa3\x66\x9c\x02\xcc\x91\x60\xe4\xe0\x7c\xd9\x61\xd1\x5f\xcc\xbb\xf7\x53\x35\x59\x04\x53\xe5\xdd\xfb\x03\xbb\xf3\xdb\xf7\x7d\x45\x7b\xc7\xe7\xa1\x6d\x19\xba\xb6\x33\x50\xa7\x8d\xef\xd2\x2e\xc3\x08\x08\xce\x20\x26\x5f\xe7\xd1\x9e\xd1\xf8\x72\x8f\xf6\x4a\xaa\x1b\x3d\xda\x07\xd7\x8c\xf7\x4d\xf3\x81\x2f\x4a\x8e\xd3\xfc\x85\xda\x3e\xd0\xf8\x72\x6d\xbf\x92\xea\xc6\x88\xf6\xab\x41\xb5\xe3\x01\x52\x21\x21\xe6\x92\x00\x72\x74\x15\xf0\xf9\xd2\x71\x46\x0f\x3f\xbe\x28\x7e\x79\xa2\x74\x10\x8d\x30\x28\x04\x62\x9c\x1e\x57\x45\xf4\x5c\x34\x78\x6e\x92\xff\x6b\x84\x03\x18\x61\x41\x25\xa1\xfc\x8f\x27\x1c\x61\x00\x09\x21\x11\x64\xf0\xdf\xe2\xb4\x7f\x92\x94\x90\x63\x2c\x11\x11\xec\xeb\xfc\xca\x33\x1a\x5f\xbf\x2f\xf9\x4a\xac\x1b\x1d\xcb\xc7\xce\x56\xbe\x83\xb1\x9d\x1d\x61\x4e\xb0\x90\x94\xd3\xe3\x3e\xf0\x95\x00\x62\xff\xce\xc7\x8b\x11\xc4\xbe\xf5\x23\xb4\x19\x64\xc7\xb9\x86\xe8\xb9\x52\xd0\x19\xa5\x7c\xec\x28\xe8\x87\x94\x72\x64\x6c\x67\x31\x87\xf5\xff\x05\x2f\x71\x96\xc3\x8d\x62\x21\xdf\x2a\xeb\x2c\x5f\x4f\xb6\x75\x8d\xe4\x92\x46\xaa\x5a\x2d\x9a\xb5\x56\x09\x97\x6a\x19\x33\x69\xb6\xad\x46\x36\xaf\xb1\x5c\xb9\x91\x35\x72\x6d\xad\x9a\xd2\xdf\xcb\x0b\x86\x04\x4b\x09\xd0\x71\xeb\xf8\x3f\x47\x49\xa7\x8c\xa1\xd7\x8c\xd1\xd7\x8c\xfd\x1c\x8d\x21\x80\xa8\x04\x42\xe0\xe3\xf6\xda\xbf\xbd\x42\x79\xc2\xd5\x6e\x09\xb8\x29\x52\xff\xd0\xe0\x8c\x1e\xf7\xdf\x9f\x0d\xfe\x23\xa1\xfe\xd3\xe8\x10\x00\xf6\x9f\x66\x82\x47\xc6\x08\x3f\x2e\x5e\x87\x3a\xcf\x20\x5c\xdd\xcf\xbb\x53\x35\xeb\x86\x03\xef\xb7\xef\x3b\x17\xf2\xdb\x50\x79\xcf\xbe\xdb\xb1\xdc\x0d\x3a\xdd\xe7\x5f\x7e\x88\xba\x78\x70\x55\x74\x4f\xbd\x1b\x0e\xd5\xbd\x17\x0e\xed\x60\x6f\x5d\x6a\x6d\x0f\xc7\x03\xf5\xbb\x1b\x0e\x3f\x24\x1c\x44\xf2\xe8\xef\xff\xc3\xb4\x7e\x64\x0c\xdd\xe4\xcb\x7e\x0e\xf0\x21\x95\x8c\x40\x04\x81\xf8\xb2\x33\x4d\xcf\x69\x7c\x7d\xec\xf0\x4a\xac\x1b\x63\x87\x2f\x37\x84\xfd\xbc\x73\xcc\x09\x14\x8c\xc8\x2f\x3b\xf5\xf3\x9c\xc6\xd7\xeb\xfb\x15\xc9\xdb\xf4\xfd\xc1\xbb\x23\xef\x60\x8c\xec\xf8\xc0\x80\x4b\x04\x25\x3a\xee\xd4\xe3\x83\x32\x0e\xef\xd1\x3a\xf0\xf1\xb1\xdb\x25\x3b\xc5\x3d\xdc\xd1\xfc\xed\xfb\x4e\xe6\xdf\x66\xe1\xc0\xbb\x3f\xdd\xd5\x3a\x55\xb2\x13\x2e\x3a\xdd\xf9\xc5\xe6\xc3\xb3\xe7\xd2\x8e\x93\x96\x6b\xb9\xc7\xc3\xf8\xe7\xe6\xf2\xf9\x28\xa7\xf9\xc9\xc7\x8e\x49\xbf\x63\x0e\xf0\xcb\x39\x40\x67\xe7\xe0\x83\x7c\x7c\xd9\x1c\xbc\x56\xe0\x33\xfd\xbe\x98\xa2\xb3\xba\x7f\x73\x92\x7e\xf6\x3c\x48\x42\x84\x44\x82\xb0\x87\x53\x00\x3f\x3b\x19\xfe\x29\x42\x02\x28\x09\x86\x1c\x1f\xf7\xff\xbf\x60\x7d\x7d\x46\xe2\xeb\x97\xd7\x97\x42\xdd\xb8\xba\x7e\x70\x55\x7b\xd7\xea\x7a\xe0\x0b\x41\x02\xbe\x2c\x78\x78\x46\xe2\xeb\x95\xfd\x52\xa8\x1b\x95\xfd\xe5\x96\xcd\xbf\x45\x04\x15\x52\x62\x0a\xc0\xf1\xbc\xc6\xeb\x13\x9e\x57\x0a\x75\x1f\xdf\x92\xf9\xe0\x7d\x8e\x77\xc8\xc6\x5e\xc8\x76\x7e\x96\x3f\x71\x92\x5f\x12\xc4\xe7\x5c\xd2\x47\xe5\x7e\xee\x92\xd0\x6b\x97\xf4\x42\x96\x57\x3e\xe9\x45\xfb\xfb\x9d\xd2\x71\xae\x7f\xd8\x29\x7d\xfd\xcc\xd3\x17\x13\x41\xce\x4d\xc4\x07\xef\xb2\x7e\xe5\x44\xbc\xd0\xf4\x57\x46\x68\x5f\x3f\x09\xbb\xa5\x05\x32\x40\xb0\x40\x1c\x9d\x3f\x1c\x8f\xfe\x9b\x97\x96\x53\xd9\x6e\x5d\x5a\x7e\x3c\xd8\xf9\xf9\xb2\x7d\xe1\x2a\x06\xdf\x0f\x1e\xf4\x26\x78\x7e\x42\x7a\xf3\x73\x56\xb0\xd3\x49\xf8\xc2\x15\xec\xcc\x24\xa0\xaf\x76\x25\x9f\x95\xdf\xfc\x7c\x34\xd0\x9f\xea\xd3\xdf\x9a\x88\xcb\x68\xf8\x43\xfa\xf4\xd3\x89\x60\x3f\xd5\xa7\x7f\x7c\x22\xfe\x50\x3e\x9d\x7d\x8b\x70\x8e\x81\x24\x90\x92\xe3\xf1\xd9\x77\xa5\x0b\xff\xc9\x7e\x8f\xbe\x90\xed\x0f\xe6\xd3\x39\x06\x90\x10\x22\x20\xfa\xf7\x54\x69\x7e\x4a\xc0\x79\x10\x92\x22\xf4\x60\x9c\x3f\xf9\x9c\xe1\x4f\x99\x49\x26\x38\x94\x44\x00\x81\xbf\xac\x14\xf5\x8c\xc4\xd7\x57\x47\x5e\x0a\x75\xeb\x8d\x8a\x8f\x2d\xf6\xef\xb2\xa8\x23\x5f\x44\xa2\x2f\x2b\x45\x3d\x23\xf1\xf5\xca\x7e\x29\xd4\xad\xd7\x43\x3f\xf4\x4e\xa6\xf7\xad\xbf\x47\xbe\x24\xf8\xba\xab\x19\xcf\x48\x7c\xbd\xb2\x5f\x0a\x75\xa3\xb2\xbf\x7c\x19\x11\xdf\x22\x8c\x10\x44\x28\xc4\x14\x5f\xaa\xfb\x7d\x85\xaf\xfb\xe0\xab\x4c\xde\x21\x9a\x7c\x21\xda\x8d\x97\xc8\xff\x1b\x44\xdb\xcd\x1a\x80\x48\x52\xc2\x10\xf9\xfa\xf7\x0d\xec\x55\x79\x4a\xef\x8b\xef\xe3\x3f\xc9\x47\x01\xfe\x37\x5d\x87\xf8\x29\xf6\x49\xa9\xc0\x84\x72\x21\xbf\xee\xc0\xfe\x33\x12\x5f\xbf\xce\xbd\x14\xea\xd6\x1b\x68\x3f\x01\x31\x07\xbe\x04\x06\x5f\x77\x5e\xff\x19\x89\xaf\x57\xf6\x4b\xa1\x6e\x7d\x1d\xca\x87\xde\x77\xf8\x0e\x45\x80\x6f\x11\x0a\x29\x96\x0c\x42\x46\xde\x0a\x97\xe8\x47\x54\x0d\x5f\x50\x38\xa3\x6b\xfa\x99\x2f\x40\x79\x29\xd1\x8d\x66\xfd\xb1\xb7\x31\xbe\x4f\x0f\x84\x23\x42\x18\x21\x98\x7e\x59\x16\xf0\x8c\xc4\x97\x9b\xf5\x2b\xa1\x6e\xcc\x02\x3e\xf6\x52\xca\xf7\x29\x02\x49\x22\x19\xe7\x80\xde\x1e\x2a\x7d\x58\x0d\x2f\xe9\x7d\xfd\x4b\x7e\x9e\xc8\x89\x9f\x2c\x9e\xf8\x7a\xf1\x76\xe3\x0b\x46\x09\x07\x92\xb3\x2f\xf3\x00\xcf\x48\x7c\x3d\x54\x5e\x52\xbc\xd1\x03\x7c\xec\xcd\xaa\xef\x53\x04\xc1\x54\x72\x82\x08\xbb\x50\x1e\xfc\x44\x2d\xe0\x17\xe4\xce\xe9\xfd\x53\x81\x72\xa4\xc6\x28\xbb\x10\x7c\x7f\x89\x70\x07\x72\x3f\x49\x38\x0a\xd8\xa5\x45\xee\x2b\x84\x3b\x92\xfb\x59\xc2\x91\xc7\xab\x76\x3f\x45\xb8\x03\xb9\x2f\x16\x6e\x47\x0e\x00\xb6\xcb\x85\xe0\xd7\xbd\x40\xf2\x19\x89\xaf\x5f\xe0\x5e\x0a\x75\xe3\x02\xf7\xb1\x97\x3a\xbf\x83\x2f\xf2\x2d\x82\x28\x67\x52\x00\x2e\x6e\xbf\x81\xf1\xc1\xd7\x40\xff\x00\x5f\x67\xee\x00\x9d\x8b\x9d\xb0\xce\x33\x79\xc3\x32\xab\x2c\x93\x8e\xa7\x33\xf1\x2a\xcb\xb2\x9c\x4e\x4c\x54\x21\x0d\x9a\x6f\x23\xc2\xaa\xe9\x1c\xc9\x97\x2b\xcd\x1c\x2a\x91\x78\x33\x51\x2b\x95\x8d\x77\x14\xf5\xf6\x7c\xed\x5f\x93\x46\xc8\xa5\x1b\x2b\xe7\xf8\xfa\x29\xfa\x3a\xe5\xeb\xb6\xab\x13\x3f\x53\x5f\xe2\xfa\x45\x1a\xf4\xf9\x17\x69\x76\xc4\x8f\x6f\x6a\xc0\x48\x7c\xdd\xe5\xf6\x53\x12\x5f\xbf\x92\xbc\x14\xea\xc6\xac\xe2\xcb\x2d\x70\x17\x1e\x21\x21\x88\x04\x54\x7e\xdd\xbb\x27\x9f\x91\xf8\x7a\x65\xbf\x14\xea\xd6\x72\xf7\x87\xde\x5f\x7f\xe0\xeb\x8d\xb7\x42\x1f\x7e\x2f\xea\x73\xde\x0a\x7d\x1c\xeb\xe9\x4d\x60\xf0\x5b\xe4\x8e\x13\x97\x79\xbe\x87\x85\xcb\x1c\x97\x38\x10\x78\xca\xf3\x1c\x85\x7c\xcf\xa3\x36\x24\xd8\x16\x90\x33\x0a\x11\x56\x4c\x39\x0c\x23\xe2\xf9\xca\x07\x9e\xeb\x11\x9b\x52\xdf\x81\x77\xdf\x22\x77\xbe\x2b\x08\xf6\x10\x24\xd8\xe5\xcc\xf1\x90\x54\x0e\x76\xa0\xef\x7b\x9e\x8b\x3d\x22\x3c\x06\x5c\x6e\x43\xcf\xf5\x6d\x88\x6d\x4f\x08\x28\xa1\x67\x03\xcc\x81\x44\x3e\x44\xde\xf1\x47\x18\xe1\x8b\x5f\x8d\x62\xdf\x31\xfb\x8e\xf8\xcb\x1f\x93\x62\xdf\x31\xfd\x8e\xf1\xef\xfb\x77\x33\xa3\x37\x5b\x11\x83\x52\x62\x00\x28\xa0\xec\x5b\x04\xee\xfe\x07\x00\x80\x12\x70\xf4\xf8\x23\x90\x60\xe7\xad\x09\x87\x68\x7f\xd9\x6b\xf7\x4f\xf8\xd4\x02\x1f\x3f\xec\x18\xd4\x34\x4d\x4b\xc4\x36\x7a\xa9\x92\x4a\xae\xd1\xb2\x32\x9a\x16\xd7\x31\x89\x93\x30\x0b\x3b\x6b\x96\x71\xa3\xdd\xe2\x3c\x88\xf7\xbd\x30\xe9\xe6\x0a\xeb\x42\x79\x35\x72\xc2\x64\x7b\x53\xec\xb8\x1b\xdf\x21\x7d\x45\x57\x59\x5c\x09\x67\xf5\x36\x6b\x95\x17\xeb\xec\xc8\x44\x35\xe6\xc5\x3d\x22\xbb\xad\xdd\xd0\x5a\xb3\x54\x37\x82\x95\xf6\xf8\x17\xce\xf4\xee\xd2\xaa\x26\x96\xb6\x97\x8d\xe5\xe4\x34\x2a\xfa\xf1\xe8\xa0\xa5\xb1\xe2\xb8\x5b\xed\x65\x32\x31\x1a\xa2\x68\xd0\x1f\x64\x49\x89\x4c\x97\xa5\x8c\xb6\xc6\xf6\x2c\x80\x21\xe1\x46\x09\xa2\xa9\x99\x28\x57\xb2\xb5\x7a\xb2\x07\xeb\x53\x6f\x21\x60\x74\x5e\x2c\x24\xfd\xdd\xf8\x49\x60\x92\x46\x79\xdc\x30\x7b\xf9\x23\xa9\x38\x28\x59\x74\xff\xa9\xfc\x48\x3e\xbd\xfb\xbf\xb6\xd6\x84\xa4\xbc\x7b\x24\xa7\xe5\x19\x9a\xf8\xbd\x74\x33\xb9\xe9\x45\xe1\xb8\x59\x2d\x68\x6a\xc6\x62\xb1\x92\x17\x64\x8c\xec\x80\x76\x32\xc5\x7e\xb5\xa7\x9a\xc5\xd8\x0a\x68\xff\x09\x7f\x8f\xbf\xef\x69\xd6\x0a\x85\x0b\xcb\xc0\x2b\x5c\x80\xcf\xb1\xe9\x3b\x41\x15\x47\x8c\x11\xd7\x83\x02\x53\x84\x18\x12\x8c\xf9\x80\x62\x4a\x09\x80\x98\x21\xc7\x16\xae\xb2\x99\x8d\x7c\xc2\x15\xe2\x90\x11\x0e\x6d\x47\x00\x8f\xdb\x02\x01\x71\x0d\x17\xec\xa2\xe5\x63\x4a\x10\x7c\xb3\xf5\x18\x6e\x61\xce\x77\xe2\x5e\xc7\x05\xbc\x11\x17\xa4\x39\xca\x0d\xab\x66\x3a\x59\x0b\x5a\x61\x7b\x19\xaf\xd6\x6b\x5a\xb5\x35\x9d\x18\x6c\x18\x2e\xad\x68\x6e\xdd\xce\xa4\xa7\x1d\x53\x85\xd9\x2c\x15\x7e\x7d\x39\x98\x56\xbb\x6e\x61\x66\x75\xdb\x31\xa3\xd1\x35\x0c\x3f\x56\x6b\x4d\x51\x71\xdb\xb7\xfa\xd5\x7c\xaa\xd5\x4e\xa6\xcb\x54\x1d\xc0\xb0\xc7\x45\xe7\x69\x5e\xdb\x71\xd4\xe4\x03\x37\xe1\x70\x8e\x06\x25\x5e\x1e\xcc\xb3\x2b\x9f\x6b\x7e\x54\xaf\x04\xb3\xfc\x2c\x4c\x8d\x6b\xd0\x8d\xb7\x97\x15\x97\xbb\x5d\x27\x85\x4b\x5d\xd5\x2c\x45\xb7\x3c\x3a\x9f\xe5\xa8\x43\xd3\xad\x59\x43\xb7\x37\x2c\x19\xb0\x44\xbf\xdf\xb7\xbd\xdc\x30\xd5\xc7\xbb\x81\x93\xab\x33\xb8\x28\xd7\xf7\x9f\x7e\x71\x5c\x50\xf9\x39\x36\x7d\x07\x94\x84\x8c\x21\x8f\x41\xc7\xe1\x0e\x12\xbe\xed\x53\x4e\x1d\x69\x63\x0a\x28\x67\xbe\x4b\x80\x0f\x99\xc2\x02\x41\xce\x31\x04\x92\x11\x2c\x89\xe3\x20\xe4\x29\x46\x85\x73\x0d\x17\xf4\xa2\xe5\x13\x06\xd8\xf5\x56\xb6\xc7\x05\x26\x00\x03\x0e\x08\x23\x6f\xe1\x02\xdc\x88\x8b\x15\xb3\xda\x01\xec\x2e\xf0\x2c\x8c\x2e\xeb\x70\x61\x9b\xe5\x3a\x8a\xe9\xc9\xb5\xd3\xeb\x74\xbd\xad\x9e\x6b\x27\x07\x85\x59\x80\x87\x8d\x42\x34\x9b\x18\xe1\x78\xa1\xdc\xb4\x66\xdc\x1f\x90\x59\xd0\x48\x25\xd0\xc0\x4b\xaa\x28\x87\x9e\xdf\x8e\x16\xe7\xac\xb2\x5d\x58\x79\x27\x3c\xcc\xe3\x1e\x17\x4f\x76\xa9\x0d\x4c\x63\x15\x4f\xd6\xf4\xc9\x3c\xd0\xab\xc3\x5a\xd4\x5e\x0c\xfa\xc6\x34\xb9\xa8\xcf\xe3\xbe\x5f\x10\xb3\xba\x9a\x0c\xc1\x7a\x18\xdd\xa4\xb6\xf3\x8c\xdf\xa3\x4d\x91\x28\xd4\xc3\x8a\xb2\x50\x67\x2c\xb4\x44\xa8\x6f\xb2\xaa\x32\x37\x49\x91\x4e\xe7\x7c\x52\xa9\xd8\xeb\x75\x77\xb1\xf7\x17\xb3\x33\xb8\x28\xae\xf7\x9f\x7e\x75\x5c\x88\xcf\xb1\xe9\x3b\xe2\x33\x4f\xda\xb6\xf0\x81\x8b\x6c\xe0\x38\x9c\x21\x04\x31\x82\x18\x22\x07\x10\x22\x39\x02\x0a\x10\xee\xb8\x2e\xe1\xb6\xf0\x08\x57\x58\x08\xca\x10\xc4\x92\x79\x0a\xa3\x6b\xb8\x20\x17\x2d\x9f\x72\x44\x2f\xc7\x51\x0f\xad\x0f\xbf\x1f\x82\x21\x13\x6f\xe0\x02\xc8\x1b\x71\x01\xe4\x7c\x38\xe9\xad\x56\x93\x04\xf7\x82\x6c\x35\x5b\xd5\xa7\x71\x7d\xb0\x49\x76\x2c\xbe\xd5\x55\x08\x33\x84\x74\x1b\xd9\xea\x60\x4e\x36\x74\x60\xdb\x6a\xdd\x0e\x70\x5c\x85\x39\x27\xde\xca\xeb\x99\xba\x65\x37\xcb\xf1\x6d\x7b\xdb\x4c\xf6\xa6\xc1\x76\x18\x6f\xdb\x69\x24\x1a\x07\x60\xec\x71\x71\x32\xaf\x69\xc3\x2f\xc7\x53\xb1\xd6\xa4\xa5\x3c\xbd\x66\x8e\xca\x8b\x60\xb0\x5d\xf4\xb7\x85\x5c\x49\xd5\xa7\x96\xcc\xb2\x09\x76\x6c\x33\x2d\xf0\x48\xf4\xbd\x86\x55\x9a\x58\xbe\xc7\x66\xfd\x62\xd5\xcb\x75\x71\x67\x05\x13\x85\x8d\xd6\xf6\x07\x20\x3f\x1b\x2f\x95\xdd\x8f\x35\x6b\xf1\xe9\x6e\xe0\x64\x78\x06\x17\xa6\xb9\xff\xf4\xab\xe3\x82\x7f\x8e\x4d\xdf\x11\x22\x09\xb6\x6d\x97\x01\x9f\x63\x2e\x10\x72\x1d\x47\x28\x0f\x48\xcf\xf6\xb0\xed\xfa\x3e\x03\xbe\x14\x10\x7a\x8e\x74\x5d\xca\x94\xbf\x4b\x5f\x18\x10\x48\x79\x1c\xfa\xce\xd5\xfc\x02\x5f\xb4\x7c\x26\x08\xb9\xde\x4a\xee\x9e\x7e\x27\x86\x0a\x8e\xde\xc2\x85\xb8\x15\x17\x95\x5a\x71\xb2\xee\xc8\xad\x4a\x14\x0a\x8b\x22\xc8\xa1\x79\x71\x16\x43\x49\xda\xb1\x10\xdd\xa6\x9c\x25\x59\xc2\x4e\x67\x01\xd7\xd1\x55\xa5\xad\x2f\x54\xbd\x3c\xae\x4f\xbd\x26\x09\xa3\x79\x63\xc1\x68\x9b\x69\x93\x92\x5e\xee\xe0\x6e\xb2\x63\xa4\x9b\xf5\x6d\xc3\xf3\x3b\xe4\x29\xbf\xe8\x9e\xe4\x17\x90\xcc\x52\x59\x6b\xd1\x6b\xac\x3a\x32\x3f\x6e\xe0\xb5\x5b\xaa\xc6\xb5\xb4\x5a\xc4\x59\x62\x36\xaa\x18\xd5\x71\x49\x54\x7a\x95\x99\x27\xc3\x9e\x1c\x88\x72\xcc\x29\x42\xd1\x18\xab\xcc\xba\x08\xab\xdd\x7c\x35\xed\x68\xf3\xec\x90\x5a\x09\xb2\x99\xcc\x9b\x24\x5f\xb0\xad\x4c\x6c\x67\xf7\xc9\xfe\x19\x5c\x14\xc6\xfb\x4f\xbf\x3a\x2e\xd8\xe7\xd8\xf4\x9d\xf4\x15\x13\x82\x43\xe2\xd8\x84\x21\xc7\x41\x8e\xed\x39\x14\x21\x1b\x09\x9f\x60\xca\xb8\x70\x5d\x6c\x7b\x58\x60\xcf\x25\xb6\xef\x49\x68\x0b\x17\x42\x85\xa9\x8d\x3d\x8e\xe9\x35\x5c\x5c\xf6\x08\x02\x10\x79\xd9\x9b\xec\x5a\xe9\xdd\xe3\xef\x06\x31\x41\xf9\x5b\x79\x37\xe0\x37\xe2\x82\xc6\x86\x41\x26\x55\x18\xa7\xf3\x3c\xcf\x10\xcc\x4e\xf2\xa5\x32\x6c\x93\x6d\x72\x5a\xed\xc8\x75\x3e\xd6\x4e\x87\x2b\x8b\xc0\x50\xba\x50\xf3\xa7\x0b\x1d\x66\x4d\xd7\x8c\xda\xd6\xb2\xaf\x0d\x8c\x92\x8b\x90\x57\xed\x74\x3a\x81\xcf\x56\x83\xd0\x98\x97\x09\xef\xe5\x26\x56\x76\x3f\x8f\x7b\x5c\x9c\xe4\x17\x0b\x6f\x99\xcd\x3b\x5e\xaa\x5c\x64\xee\x68\x12\x1f\xf8\x5a\x19\x4c\x56\xc1\x52\x54\x63\x4e\xb8\x8a\x35\x4a\xd5\xac\x66\x86\x31\xdd\xb2\xf4\x49\x99\x24\x56\xb6\xca\xb4\x53\xc3\x28\x58\xa4\xc3\xb6\x33\x6c\x79\x61\x7c\xa5\xd9\xc3\x14\x5d\x42\xa0\x0f\x47\x75\x9f\x2c\xd6\x19\xb6\x1b\x3f\xd9\x39\x83\x8b\x7c\x6a\xff\xe9\x57\xc7\x05\xfd\x1c\x9b\xbe\x73\x84\x04\xae\xef\x71\x8c\x18\x10\xd8\xf6\x28\x97\x36\xa4\x90\x31\x89\x20\xf2\x29\x44\x1c\xbb\x40\x00\x85\x1c\xc6\x6d\xcc\x18\x51\x0e\x77\x1d\xd7\x91\x3e\xe4\x1c\x92\xab\xfe\xe2\x72\x66\x2d\x11\x61\xd7\x5b\xf7\x71\xd4\xf1\x97\xa0\x20\x12\x6f\xe5\xdd\x80\xdd\x88\x0b\x1e\x94\xb7\xd2\xdd\xb4\xb2\xc5\x79\x9d\x86\xf5\xd4\xb0\xdf\x2d\x40\x7d\x54\xd2\x3a\xc5\x3c\x52\xbd\x76\x9f\xe1\x8d\x58\xf8\x29\x9c\xd2\xd2\xba\x4a\xeb\x32\x8e\xe7\x03\x1e\xca\x84\x9f\x9f\x97\xea\x06\x49\xaa\x86\x53\xf3\x63\xf1\x10\x4b\x37\x99\xa9\x4e\xf5\xac\x3d\x72\x4f\xfc\xc5\x49\x7e\x91\x29\x2e\x40\xdc\x8a\x22\x5a\x4d\x6e\xdc\x16\xf7\x5c\xb3\xb2\xa9\xbb\x7d\x38\xda\xb4\xe3\x89\xbe\x16\x4f\xb5\x9b\xab\x5e\x3f\x70\x29\xaa\xd0\x12\x42\xed\x61\x2d\xda\xe9\x95\x92\xd9\x5e\x57\x6b\x74\xda\xf1\xc6\xb6\xdd\x06\x2b\xab\xcb\x37\x45\x6b\x2a\x47\x41\x6f\x1c\xc7\xab\xc6\x3e\xbf\x70\xcf\xe0\x22\xdb\xdd\x7f\xfa\xd5\x71\x41\x3e\xc7\xa6\xef\x88\x60\x84\xda\x9e\x20\x18\x28\x2a\x29\xa2\x14\xbb\x1e\x93\x94\x49\x9b\x72\x08\x1d\xdb\x95\x98\x30\xe8\x40\x57\xba\x00\x03\x87\x01\x07\x30\xe4\x13\x41\xb1\xc3\x1c\x48\xee\x1e\xf7\x9e\x5f\xe3\x02\x5c\xb2\x7c\x02\xa8\x80\x17\xbd\xc9\x63\xeb\xc3\x2f\x67\x61\x29\xde\xca\xbb\x01\xbd\x35\x8e\xea\xf6\x1b\xf3\x6e\x32\x39\x18\x54\xea\xd5\x6d\x63\xd0\x18\x0e\x5c\x6b\x31\xeb\x83\x96\x93\xc9\xad\x92\x09\x94\x58\xb5\x96\x95\x54\x11\xcd\x6a\x9e\xb6\x1d\x0f\xdb\xa4\x3e\x0c\x72\x5a\x3a\xdb\x1d\xc1\x84\x48\x30\xba\xd1\xfa\xc3\x79\xdc\x4d\xf4\x53\xcd\x4c\x72\xd5\xaf\x96\xc2\x56\xff\xa9\x1e\xd5\x3d\x99\x57\xbf\x59\xf7\x4b\x15\xd9\x8b\x4f\xba\x55\x7f\x4b\x0a\xc1\xb2\xd5\x2a\x49\x67\x3e\x5a\x44\x27\x2b\x3f\x36\x19\xd7\x5b\x05\x9e\xe9\x38\x9a\x81\x68\xd1\x2b\x64\x48\xa1\xb9\x58\x8d\x4c\x99\x1c\x2f\x72\xc5\xbe\x88\xeb\x2e\xc9\x06\x6e\xd0\xb3\x7a\xda\x74\xd5\x0a\xdc\x3a\xee\x93\xf5\x3e\x8e\x6a\x9d\xc1\x45\x5a\xee\x3f\xfd\xea\xb8\xc0\x9f\x63\xd3\x77\x8e\xc7\x1d\x82\xa4\xe7\x78\xc2\x17\xca\xf7\xa0\x43\x99\xf2\x38\x40\x8e\x0f\x05\x56\x84\x63\x0c\xa9\x42\x3e\x20\x08\x79\x0e\xa5\x52\x52\x22\x5c\x02\x88\xab\xd4\xb1\x6c\x74\xc9\x5f\x40\x79\xd1\xf2\x11\x40\x52\xbc\xd9\x7a\xfc\x2d\x34\xc6\x98\x78\x33\xef\xc6\xb7\xfa\x0b\xc8\xcb\x63\x24\x7b\x84\xcb\x34\x74\xe6\x6e\x62\xb9\xee\x44\xad\xad\x51\x27\xcb\x78\xa2\xe0\xd4\xdb\x83\x5a\x4f\x8f\x1b\x7c\x18\x1f\x26\x97\x56\x80\xc9\x82\x5a\x1d\x5d\x4b\x06\xce\xd8\x2d\x12\x97\x16\xe3\x4e\x21\x4b\x33\xa9\xc6\x1a\xce\xb7\xb0\x18\x5f\xad\x79\xd6\x78\xf2\x17\x9d\x93\xfc\xa2\x25\x80\x3d\x5b\x87\x99\x7a\xd6\xe3\x60\xdd\x97\xb4\xd0\x9d\x59\x66\x3f\xc0\x8b\x4a\xab\xdb\xc9\x4d\x97\xc6\x78\xcb\xca\x0a\xd3\x55\x99\x19\x72\x13\x1d\xc7\xc6\x73\xb3\xcd\xb6\x71\x34\x09\xd8\x78\xb2\xca\xa4\x36\xd4\x8f\x79\xc6\x00\x93\x14\x1c\xaf\xfd\x55\x67\x19\xf7\xf6\xfe\xa2\x76\x06\x17\x49\xb8\xff\xf4\xab\xe3\x02\x7d\x8e\x4d\xdf\x49\x40\x31\xc1\x14\xf8\xd8\x57\x36\xb0\x99\x4d\xa9\xf4\x14\x02\x9c\x49\xaa\x90\x40\x4a\x48\x21\x81\xa4\x84\x08\x84\x6d\x97\xba\x1c\x00\xe0\x73\x66\x3b\xb6\xe7\x02\xa1\xae\xe1\xe2\xb2\xe5\x63\xc0\xc1\xc5\x38\xea\xb1\xf5\xf0\x5b\x7c\x48\x4a\x2c\xdf\xcc\xbb\x6f\xdd\xd7\xa3\xf1\x6a\x19\x26\xb7\xb1\x49\x62\x38\xae\x8f\x54\x36\x63\xd7\x49\x58\x08\x87\xb9\x44\xdd\xca\x66\xd9\xda\x75\xb5\x24\xb6\xa7\x53\x37\x51\xdc\xaa\x94\x6e\xa3\x1e\x9b\xa7\xd3\xa2\xe3\x18\x31\x68\x58\xc2\xd6\xe2\xad\x58\x69\xbd\x28\xca\xf6\x16\xcd\xe4\x70\x9d\x1e\x15\xea\xe1\xc1\x18\xf7\xb8\x38\xc9\x2f\xbc\xd4\x0c\x2c\x96\x5e\x7f\x81\x14\x24\xed\x42\xdb\x6c\xc5\x82\x51\x3f\x09\xb2\x9d\xb4\x1c\x46\x65\x17\x88\xb4\xd3\x1f\xb5\x67\x52\xdf\xb6\xb7\x8b\xb1\xd6\x0c\xb6\x7e\xbc\x39\xec\x4a\x39\xca\x54\x17\xbc\x41\x33\x70\xbb\x1c\xf7\x1b\x15\x94\x48\xc1\xf9\x24\xae\xe7\x57\x8b\xc4\xde\x5f\x94\xcf\xe0\x22\x61\xed\x3f\xfd\xea\xb8\x80\x9f\x63\xd3\x77\x0e\x74\xb9\xc7\xa1\xad\x1c\x5b\x70\xe0\x40\x86\x1c\x80\x90\x8b\xa1\xed\x29\x07\x31\x06\x89\x62\x3b\x3b\x95\x48\x30\xc2\x6d\xe8\x48\x97\x39\x2e\x85\xb6\x63\x0b\xec\x01\xef\x1a\x2e\x2e\xee\x77\x93\x1d\xd7\x97\xbd\xc9\x43\xeb\xc3\x8f\x47\x22\x20\xdf\xcc\xbb\x6f\xdd\xd7\xe3\x99\x0c\x5c\x4f\xa7\x93\x4c\x62\xdd\x9a\x6a\xc1\x6a\x3d\x55\xb3\x61\xab\x46\x7b\xf1\x55\x3f\x6c\x67\x42\x67\x94\x5e\xa6\xd2\xd3\x49\x12\x98\x73\xb4\xcc\x55\x33\xb3\xfc\xc6\xc8\x78\xf5\x44\x26\xd6\x99\x01\x17\xd7\x62\xaa\x9c\x9f\xd8\x0d\x4b\xe9\x51\xd2\xdb\xa0\xce\x3c\xba\x38\x89\xa3\x3a\x27\xf9\x45\x5a\x16\x96\x2a\x14\xf9\xa2\x11\x9f\x2d\xaa\xcd\xf5\xda\x9e\xda\x7e\xab\xbc\xcd\xe4\x07\x93\x55\xb7\xd9\x98\xbb\x56\x6f\x3c\xac\x16\xdd\x68\x31\x1e\x1d\xab\x85\x59\x9a\xb5\x06\xbe\xca\x9a\xb1\x78\x19\x47\xd7\xc5\x72\x9b\x7b\x31\xa7\x1e\x9b\x8f\x72\x9d\x82\x3e\x6e\xfa\xa3\xca\x90\xec\x71\x61\x9c\xc1\x85\x36\xdf\x7f\xfa\xd5\x71\x01\x3e\xc7\xa6\xef\x80\xe7\x0a\x06\x81\x72\x19\x91\x8a\x43\xe1\x11\x0a\x04\x76\x98\x84\x80\x42\x8a\x1d\xca\x84\x74\x94\xcb\x38\x41\xdc\xe6\x08\x50\xe1\x48\x4c\xb9\x52\x0e\xb0\x5d\x65\xbb\xd7\x70\x71\x71\xbf\x9b\x50\x0e\xe9\x65\xd4\x3c\xb4\x3e\xfc\xda\x29\x11\xe0\xcd\xbc\xfb\xe6\x7d\x3d\x9c\x6d\x95\x79\xba\xa2\xdc\x16\x4c\x25\x92\xf3\xb1\x9e\x4a\x55\xe7\x8d\xc0\xe1\x69\x2f\xa1\x46\xd9\x54\x40\xcd\x26\x9f\x26\x66\x6c\x16\x00\xa7\x3a\x8b\x3b\x15\x2f\x59\x4c\x85\xdd\xe8\x86\xfa\xc2\x1d\xe0\x79\x74\x58\x68\xfb\xdb\x69\x37\x93\x8e\x31\x67\x1d\x1f\x58\xd0\x38\xc1\xc5\xc9\xbc\x2a\xb4\x35\x6a\x8d\x3a\x0a\xfd\xf5\xba\x92\xab\x79\xa0\xdb\xd1\xc7\x8d\xa8\xd7\x8f\x1a\x14\xe0\x9a\xd9\x9d\x4d\x9a\x85\x7c\x01\x54\x8d\xce\x74\x6a\x8f\xa3\x46\xdb\x2d\xe5\x4b\xbc\x31\xf0\x8c\x59\x9c\x6d\xa7\x31\x21\x51\xd6\x5d\x05\xcd\xa1\xe6\x32\xab\x68\x52\x97\xc7\x92\x7b\x5c\x64\x5f\xe3\xa2\x18\xcb\xed\x3f\xfd\xe2\xb8\x20\xf2\x73\x6c\xfa\x8e\x40\x87\x42\xa1\x1c\x4c\x39\x86\x0c\x79\x8e\x8d\x25\x11\xd2\xa3\x8a\x4b\x17\xba\x80\x28\xc5\x5c\xe6\x01\xe1\x42\x89\x21\x74\xa8\xe3\x73\x4f\x3a\xc2\x97\xb6\x0d\xb9\xb7\x33\xfd\xc3\x7d\xa2\x33\xb8\xb8\xb8\xa3\x4d\x38\x02\xf8\xed\xd6\xc3\xaf\xdc\x62\xc9\x29\x78\x23\xef\x66\xf2\xe6\x7d\xbd\x34\x4c\x17\x67\xd0\x5d\xb7\xe6\x8b\xde\x20\x3b\xaa\x53\xba\x72\xe3\x45\x3a\x73\xca\xbd\x78\x7f\x9d\x86\x4b\x8c\x9c\x1e\x9d\x74\xfd\x86\xaa\x5b\xa9\x68\x2a\x68\xc0\xf2\xc0\x8d\xe2\x05\x1c\xc6\xdd\xb6\x20\xb5\x82\xe5\x85\x38\xea\x56\x43\x42\x5b\x56\x2e\x59\x8c\x96\x2a\x64\x3f\x8f\x3b\x5c\xf8\x27\xf9\xc5\xac\x52\x2c\xc4\xa3\xa9\x2e\x2f\x65\x61\xdc\x1b\x6a\xd1\xd1\x60\x4d\x93\x9e\x6a\x56\xb4\x76\x8b\x17\x47\x9b\x8c\xbb\xd8\x28\x43\x1f\xe6\x34\xec\xf4\x09\x5c\xcd\xa7\x1b\x23\x86\x07\x9d\xee\x48\xd3\xea\xa3\x52\x2c\x88\xef\x04\x03\x93\xec\x3c\xe9\x0f\xa3\xf3\x41\xb1\x61\xda\x7b\x5c\xe8\x67\x70\x21\x07\xfb\x4f\x57\x70\xf1\xdf\xf6\x77\x30\xad\x77\xe2\x42\x7c\x8e\x4d\xdf\x39\x44\x2a\x1b\x28\x07\xfa\x8a\x21\xe9\xbb\xc8\x95\x9e\x8f\x5c\xc9\x99\xe3\x4a\xc9\xa1\xaf\x3c\xe6\x7b\xc2\x43\x94\x2b\x57\x71\x2c\x14\xa1\x2e\xf6\x85\x64\xdc\x83\x94\xc9\x6b\xfe\xe2\xe2\x0e\x05\x11\x88\xa0\xcb\x71\x94\x40\xfb\x4d\xbf\x87\xdf\x2c\x06\x08\xbc\x91\x76\x33\x79\x73\x99\xb6\xa2\xc2\xe2\xcc\xa7\xc1\x48\x14\x72\x78\xb3\x69\xda\x62\xd8\xcc\x44\xe1\x12\x99\xb9\x26\x2f\xba\x84\xa6\x56\xb1\xa0\xe1\x5b\xf5\x31\xb3\x93\x0d\x5c\x28\x39\x8d\xf2\xa8\x5f\x9e\x68\x1b\xb3\xdd\xce\x0d\x92\x0d\xbb\xae\x15\x64\x7a\x58\xcf\x0f\x8c\xba\x93\x09\x6d\xad\xba\x79\x72\x17\xfe\x89\xbf\x28\x9b\x1d\xe2\x4e\x49\x32\xe4\x93\x45\x13\xe3\x90\x4c\x1d\xbb\x69\xf3\x68\x3c\xe9\x65\x5c\x51\x72\xaa\x7a\x33\xee\x2e\xca\x7a\xb5\x24\xa6\xd5\x8e\xeb\xf0\x11\xae\x35\xf5\x34\xb0\x97\x22\x58\x2c\xbb\xeb\xc6\x20\xd1\xce\xf9\x8c\x18\x89\x4c\x74\xbe\x6e\x75\xca\xcd\x7c\xa3\xb4\x1b\x38\xa9\x9d\x81\x05\x79\xf3\xd8\xe0\x7f\xdb\xdf\x87\xdc\x05\xff\x1c\x93\xbe\xe3\x80\x79\x92\x08\x9b\x51\x1b\x40\x4a\xa5\x8b\x31\x62\x04\x32\xa1\x24\xc4\x3e\x71\x88\x04\x00\x13\x49\x90\xcf\xa5\xad\x6c\xc9\x7c\x06\x99\x0d\xb0\x92\x02\x49\xee\xe2\x6b\xb0\xb8\xb8\xa1\x4d\x24\x85\xec\x72\x52\xbe\x6b\xdd\xa7\x17\xc7\x5f\xaf\x46\x12\xbe\x91\x76\x33\x79\x6b\x99\x16\xc7\xe7\x83\xec\x78\x10\xc6\xeb\xed\xd5\x36\xd7\x4f\x85\xcc\x2a\x81\x79\x4e\x4b\x56\x6a\x05\x3c\x5c\x4c\x1a\xb2\x6b\x77\x4a\xe3\xce\xd8\x4f\x42\xbd\xce\x60\x89\x86\x7a\x1a\xf6\xc6\x4b\x92\xb5\x63\x99\x5a\x27\x9d\x18\xe7\x57\xd5\x32\x69\x8f\x07\x99\xee\x9c\x87\x7c\xac\x71\x78\x00\xc3\x1e\x17\x27\xe9\x85\x28\x1a\x3c\x61\xf6\x06\xe1\xba\x31\x59\x0d\x6c\x7b\x34\x8c\xdb\x53\x6b\x3b\xb4\x75\xad\x57\x81\x56\xb5\xca\x93\x46\xbc\xd6\x8d\x15\x33\xc1\xd2\x68\x76\x03\x28\xba\xe9\xb5\xd6\xe2\x3c\x60\x5a\xa2\xaa\x4f\xec\x55\x52\x2c\x9b\xfd\x65\xb3\xd0\x8b\x6f\x95\x6a\x25\x3b\x89\x52\x75\x37\x7e\x42\x9c\xc1\x05\x7e\xf3\xd8\xe0\x7f\xdb\xdf\x87\x70\xc1\x3e\xc7\xa6\xef\x98\x14\x04\x28\x01\x7d\xc5\x15\x15\xc4\xb6\x3d\xe0\x23\xe4\xf9\xb6\x90\x4a\x71\xc6\x5d\x0f\x53\x44\x88\xe4\x94\x61\x45\x38\xb4\x7d\x61\xfb\x8c\x3b\x14\xfb\xc2\x23\x7c\x5f\x35\xba\xb0\x7d\x71\x79\x83\x82\x02\x46\xc9\xc5\xe4\xe3\xb1\xf5\xe1\x07\xd6\x29\x83\x27\x69\xf7\x8b\xbf\x6f\x11\xfe\x80\x81\xb7\x30\x81\x86\x7a\x32\xcc\x44\xfd\x41\x37\x3f\x2d\x8b\x00\xb3\x40\x51\xe4\x9b\x66\xc5\xca\x79\x8d\x52\xdf\xb5\xa3\x79\x39\x9a\x57\xa3\xa6\xb5\xd6\x3a\xd5\x6c\xa9\x90\x2e\x6e\x46\x8b\x72\xa7\xd8\xdc\x0e\x9b\xe5\xf6\xb4\xb0\x49\x57\xb5\x74\x36\xd9\x28\x66\x72\x56\x39\x37\xa9\xf9\x8e\x16\xd4\xf6\x73\xb8\xc7\xc4\xc9\x9c\x76\xfb\xad\x4e\xb5\x55\x4f\xf9\x81\xb9\xde\xac\xda\xa9\x4d\xbe\xd6\x63\xd3\x9a\xb2\x08\xaa\x58\x5b\x73\x5b\x1c\xd9\xb3\x4e\x3d\xd6\x58\x24\x97\xf3\x95\xd9\xb7\x1d\xaf\x1c\x9d\x77\xda\x8a\xe0\xcc\xbc\xa9\xcf\x12\x4e\x59\x76\x1a\xc5\x85\xd5\x64\x05\xea\x2e\x8b\xa2\xbd\x8a\x5b\xe3\x3d\x26\x88\x49\x0a\xf6\x76\x8c\x4e\x00\x18\x9f\xb7\x5e\x98\xd4\x1f\x01\x13\xe8\xdd\x98\xa0\x9f\x63\xcf\x77\x54\x29\x1f\x02\xc6\x6d\xe0\x3b\x9e\x43\x20\x46\x50\x11\x8e\x6c\xe8\x42\xe2\x2b\xcf\xa5\x14\x7b\x10\x53\xbc\x5b\xbf\x3d\x65\x13\xdf\xf3\x30\x94\x1e\x70\x6d\xee\x21\xdb\xbf\x76\xc4\x1c\x5e\x2c\xc2\x52\x28\x28\xb9\x98\x72\x3f\xb6\x1e\x7f\x66\x1e\x09\x8c\xc0\x15\x4c\x30\x71\x23\x26\x20\x5f\xea\x69\xd5\x89\xca\x79\xdc\xe8\xd2\x4c\xbe\xbb\xaa\xc5\xe6\xeb\x7a\xc9\x32\xab\x03\xcb\x51\xe3\x12\xae\xa6\xbd\x64\xde\xaf\x4c\x49\x3f\x9d\xc8\x64\x46\x1a\xcb\x17\xbd\xb0\xe4\x56\x96\x63\x66\xad\xbb\x7d\xd4\xad\x59\x83\x74\x0a\xd6\x4b\x28\xac\xd4\xcd\x78\x3f\x99\x95\xee\x7e\x0e\x77\x98\x50\x27\x69\x05\x9a\x45\x5b\x1e\x66\xe9\x5a\x7c\x98\x9a\x26\x46\x62\xb4\xde\x5a\x38\xcd\xd3\x2c\x3e\x68\xac\x92\xbd\x46\x76\x59\x59\x94\xd7\x69\x23\x9b\x68\x49\x64\xf5\x9a\x34\xe9\x14\xd7\xad\x6e\xce\x30\x62\x7a\xd9\x85\xe1\x24\xbd\x02\x9d\x59\xca\x99\x4f\x66\xc5\x66\xbc\x57\x28\xd4\xa5\xde\xdc\x0b\x01\xce\x60\x62\x52\x7e\x61\x52\x7f\x04\x4c\xbc\xdf\x4f\x90\xcf\xb1\xe7\x3b\x42\x80\xb4\x05\x87\x1e\xdd\x2d\xcf\xc0\x61\x36\xb0\x19\x06\x10\x33\x25\x80\xeb\x21\x2a\x6d\x8c\xb1\x6b\x53\x8a\x00\xf6\x1c\x48\x89\xf0\x30\xa4\x3e\x94\xca\x27\x36\xbd\x5a\x86\xba\xb8\xcd\x4d\x91\x90\x57\x10\xf3\xd0\x0a\x85\x90\x5c\x50\x06\x01\x22\xd7\x30\xc1\x6f\xc4\x04\x28\xe7\x26\x99\x4c\xbd\x96\xae\x15\xec\xce\xb8\xa7\x55\x9d\x30\x69\xe6\xda\xe1\xb6\x94\xaf\x57\x34\x39\xab\x57\x4c\xa3\x2e\xda\x1c\x8c\xdd\x69\xb8\xaa\x79\x79\x6b\xab\xc5\xda\x56\xdf\x53\xa1\x48\x2f\xd0\xa4\x4e\xaa\xdd\x1a\x64\x9e\x1c\x0b\x93\x93\x8c\x3d\x5a\xd0\xda\x6c\xb6\x9f\xc3\x3d\x26\x4e\x72\x8a\x46\xc3\x85\xe3\x56\xb7\xde\xb0\x42\x3d\x67\xb3\xb4\x9b\xc9\xce\xec\x1e\xdc\xcc\xd6\x59\x92\x28\x47\xe3\x6e\x6e\x12\xa4\x1b\x78\xd5\x1b\xe6\xa2\x4b\x3f\x65\x15\x02\x9a\x43\x41\xd2\x68\x9a\xd5\xc6\xc4\x1c\x8e\xfc\xb9\xd8\x66\x52\x45\xc2\x48\xab\x93\x6b\x57\xf9\xc2\x01\x93\xe9\xde\x4f\xac\xce\x60\x22\x9c\xbd\x30\xa9\x5f\x13\x13\xf8\x73\xec\xf9\xce\x96\xcc\x75\x7c\xe9\x63\x17\x79\xd8\xa5\xcc\xf1\x20\x71\x08\xa0\x00\x11\x66\x53\x85\xa5\xa2\x12\x01\x1b\x01\xa8\xa4\xc7\x98\x4b\x80\xe3\x52\xdb\x66\x82\x0b\xe4\x2b\x7a\x2d\xa7\xb8\xbc\x29\x41\x09\x44\x57\x62\xa7\x87\x56\x28\x08\x13\x98\x4a\xcc\x91\xb8\x86\x09\x76\x23\x26\xd8\x60\xb6\xa4\x42\x14\xaa\xeb\xc6\xd2\xaa\x80\x78\x39\x97\x1e\xab\xa2\x6a\x54\x12\x81\xa6\x46\x0d\x47\x4f\x88\xc6\xc4\xce\x74\x96\xb4\xda\x36\x2b\x9b\x6e\x33\xe9\xe7\xf5\x4d\x8d\xf5\xfa\x60\x28\x46\x6b\x4d\x67\xa5\x44\xce\x4e\xaf\xb5\xb0\xb8\x9a\x2c\x5d\xad\x62\xcc\x6a\x27\xe5\x27\x75\x62\xa6\xb2\x80\x56\x93\xb8\x3d\x14\xeb\x35\xd3\x8d\x41\x19\xaa\x98\xc5\x73\xa5\x6e\x7f\x96\x9b\xa4\xc2\x76\x72\x98\x4f\xb9\xa9\xf8\xca\xc7\xeb\xc4\xca\x45\xb9\xc2\x20\xcc\x6e\xc7\xf3\x56\x37\x34\x13\x3c\x03\x8a\xf9\xa4\x4a\xca\x70\xd5\xd6\xfa\x34\x6b\x8f\x46\x53\xd5\x9b\x82\xa2\xb6\xf3\x43\x89\xd9\x19\x4c\x8c\xb2\x2f\x4c\xea\xd7\xc4\x04\xfa\x1c\x7b\xbe\x43\xc8\x01\xcc\x21\x40\x12\xc2\x5c\xe8\x03\x17\x71\x61\xfb\xc0\x55\x90\xda\x9e\x94\x8c\xee\xbc\x90\x8f\xa0\x64\x36\x75\x7c\xe5\x29\x8f\x32\x8f\x49\x0f\x33\xce\xa5\x2b\xaf\x6d\xe3\x81\x8b\x99\x34\xa5\x48\x5c\xce\xc2\x1f\x5b\xa1\x00\x58\x08\x86\x18\xc1\xe8\x1a\x26\xe8\x8d\x98\xd8\xe4\x57\x36\x48\xd4\xac\x59\x66\xb5\x1a\x05\xcb\x64\x31\x65\xa3\x76\xbb\x19\x96\x44\x77\x30\x69\xc4\xb8\x82\x0d\x38\x06\xc8\xa3\x1b\x2f\x0b\xb7\x19\x7b\x1e\xad\x66\x2a\x41\x5a\xa4\x82\x5c\xab\xdb\x44\xd9\xde\xc4\x55\x2b\x63\x33\x19\x73\x95\x2d\x58\xf3\xc2\x7a\x30\xd1\xea\x87\xd2\xfe\x1e\x13\x27\x73\x4a\x86\xe5\xf5\x22\xbb\x49\xf7\x8d\x51\xcd\x1c\x4f\xd7\x21\x5c\x30\x07\x9b\xc5\x7c\xa7\x12\x4b\x4c\x2c\x0b\xf4\x65\x68\x94\x4b\x85\xc6\x4c\x44\xeb\x4c\x4c\x46\x09\x3b\x95\xd2\xd7\x24\x0f\x3b\x61\xc3\xc6\x56\x32\x23\xb2\xed\x59\x8b\x07\x28\xde\x6c\x54\x12\x46\x63\xb2\x1d\xaf\x77\x7e\x28\x11\x9e\xc1\xc4\xa0\xff\xc2\xa4\x7e\x4d\x4c\xc0\xcf\xb1\xe7\x3b\x9b\xf9\xd4\x71\x39\xf1\x6c\x49\x98\xe4\x40\x12\xe9\xba\xc2\xa6\xc2\xe1\xbe\x0b\x5c\x9b\x22\x5b\x32\xc4\x7d\x1b\xda\x84\xfa\xae\xeb\x53\xc6\x6d\x66\x7b\xc8\xc7\x10\xda\x12\x5c\xc9\xb1\xc1\xe5\x8c\x81\x11\x79\xf9\x6a\xde\x63\x2b\xe4\x0c\x48\xcc\xa8\x84\xf8\x5a\x8e\xcd\xc8\xad\x7e\xc2\x81\xcb\x4c\xd5\x1e\xa4\x07\xab\x41\x6e\x9b\x1d\xb7\xe6\xb1\x95\x31\xae\x4c\x1a\xb9\x58\x68\x5b\xfe\xb6\x54\x1f\x8d\x27\x60\x69\x58\x93\x72\xde\xdc\xb4\x9c\xe2\xaa\xc0\x2d\x27\xb0\x7b\xd9\xec\x48\xae\x42\xd8\xcc\x4e\xd6\xd3\x75\xbe\xd9\xad\xb8\x95\x5c\x7b\x31\xeb\x76\x46\xb0\x26\xf6\x73\xb8\xc3\x84\x77\x92\x4f\xe0\xb9\x5a\x67\x1a\x7d\xd5\x1c\xcc\xba\x62\x33\xa0\x28\xb7\xd5\xa1\xc1\xc7\x31\xb1\xd8\xf6\x31\x4b\x7a\x03\x67\xb9\xf2\x26\x8d\x15\x6c\x01\x5e\xcd\xcc\x42\x7d\x16\xe7\xb1\x95\xb0\xca\xbd\x1c\x01\x83\xb1\x41\xf3\x50\x77\xc2\x84\xaa\x8a\x4d\xac\x17\x8b\xc5\x7a\x58\xb3\xf7\x98\xe8\x9f\xc1\xc4\x4b\x48\xfc\x21\x30\xf1\xfe\x1c\x1b\x7c\x8e\x3d\xdf\x39\x2e\xb6\xa9\x2d\x29\x16\x44\xf8\x0a\xb9\x0e\x61\xca\xe3\x54\xb9\xca\x51\xcc\xb1\x81\x74\x05\x65\x1e\xe1\x1e\xf3\x95\x0d\x10\x45\x08\x0b\x2a\x3c\xe1\xb9\xdc\xb6\xbd\xc3\x6d\x88\x4b\x98\xb8\x1c\x1d\x09\x80\x2f\x6f\x7a\x3f\xb6\x1e\xde\x0d\xc2\x24\x14\xe4\x6a\x8e\x8d\x6e\xc4\x04\x5f\xb1\xc6\xb8\x46\x2a\x25\x32\x9b\xa7\x79\xb3\x39\x63\x51\x9b\x25\xdc\x6e\x03\x66\xe0\x92\x75\x72\x95\x2c\x69\x98\x3d\x57\x4d\x50\x3d\x16\x8c\xb2\x2a\x9d\x4b\x4d\xeb\xd0\xaa\xd7\xa2\xeb\xf1\x34\xdb\xb6\x32\x22\x5f\xb7\xb3\x9c\x0c\x62\x55\x6d\x1e\x8d\x4d\x73\x2a\x93\xa3\x4f\x7e\xc2\x3b\xcd\x27\x72\x83\x50\xf2\xa9\x5f\xee\xf5\xb2\xe6\x42\xd3\xfb\x2a\x51\x74\xb0\xb5\x1a\x30\xb3\x55\xeb\x4b\xda\xb4\x19\x36\x5d\x50\x4b\x2c\x21\xa8\xe1\xd9\xd8\x2c\x27\xc4\x90\x96\xeb\xf6\x00\x19\x0d\xc4\xcb\xa1\x28\xae\xe2\xda\x28\xb3\xe8\x8a\x95\xde\xc8\x1b\xdd\xd6\x3c\xbb\x1f\x3e\xd1\x39\x83\x89\x0e\x79\x61\x52\xbf\x24\x26\xb0\xfc\x1c\x7b\xbe\x73\x04\x92\xcc\x16\xd0\x75\xb0\x4b\x98\x70\x09\xf7\x21\x00\x8c\x21\xdb\x75\x30\xe6\x0a\x32\x21\x18\xe4\x18\xb9\x0a\x41\xe8\x79\x9e\x8d\x01\x82\x02\x48\xa1\x04\x60\xee\xb5\xa3\x81\xe0\xb2\x27\x90\x88\x93\xcb\xd9\xc6\x43\x2b\x64\x9c\x02\xcc\x11\xa1\xe4\x6a\x8e\x7d\x6b\x2d\x96\x77\xc6\x76\x98\x29\x94\x74\xdb\xb0\x62\xba\xd6\x0e\xa6\x05\x03\x93\x46\x90\x4e\x6d\x0b\xc5\xac\x85\xbd\x70\x95\x6d\x25\x5a\x4c\x73\x8a\x99\x60\x59\x58\x6f\x4a\x22\x1b\x65\x7d\x92\x1b\xc7\x89\x86\x4b\xeb\x62\x7e\x66\xe9\xed\x9a\x31\xda\xb6\xe2\xa1\x36\xea\x88\xf6\x42\x3f\x5c\x10\x3d\x60\xe2\xc4\x4c\x2b\x2a\x13\x9f\x2e\x92\x1d\xb3\x94\x73\x64\xdf\x77\x73\x75\x63\x93\xe8\xb0\xa1\x72\x40\x3f\x5c\x52\xaf\x21\x8b\x7d\xa1\xeb\x6a\x8c\x1c\x1d\x56\x7b\xdc\x9a\x24\x61\x0c\x94\x59\x34\x03\x16\x46\xdf\xa8\x17\x57\x8d\xc6\xb4\x9a\x32\x7d\xdc\x12\x6e\x7d\x2b\xc3\x5e\x22\x07\xf7\x39\xb6\x7b\x06\x13\xa7\x1e\x6a\xff\xf7\x47\xc0\xc4\xbb\x63\x27\x2c\x3e\xc7\x9e\xef\x7c\x2c\x25\x83\x8a\x7b\x8a\x62\x00\xb0\xb7\x4b\xda\x05\xe2\x1c\x13\x0c\x24\x74\x19\x50\x50\xd9\x9e\xf2\x1d\x1b\x63\x04\x90\xa3\x80\xc0\x98\xb8\xb6\x62\x5c\x70\x47\xf9\xd7\xfc\xc4\xc5\xed\x6c\x06\x30\xbd\xe8\x26\x1e\x1a\x21\xc3\x08\x08\x4e\x39\x22\xd7\x32\x6c\x2a\x6f\x44\x44\xac\xd8\x6e\x29\x5f\xd5\x56\x9a\x1c\x86\x2a\xe1\x6d\xcb\xab\xbe\xdb\x2a\x66\x26\x78\xb9\xe8\x19\x9d\x7c\x34\x91\x34\x8d\xe9\x50\x65\x96\xcb\xa5\x57\x34\x9a\x6e\xbb\xbc\x44\x7e\xc2\x28\x8f\xea\x46\xcd\xcf\xc7\x73\xbc\x59\x49\x35\x9c\x4e\x3c\xb6\xd2\x71\x7c\xc6\xd5\x54\xf0\xc5\x61\x06\xf7\x88\x38\x99\x51\x33\x16\xf5\x12\xb3\x66\xa5\xee\x06\xe3\x5c\xa1\x49\xfd\x4a\x7d\x10\xf3\xe6\x49\x31\x4e\xa9\x68\xd0\x1e\xf9\x23\xb3\x8d\x3a\x7c\xd9\xec\xc5\x74\x27\x18\x83\x4d\x61\xd9\xb0\x44\x9b\x2f\xc6\x6e\xc9\x9c\x4e\x92\x4d\x55\x58\xd6\xd7\xed\x60\x1b\x27\xa0\x1b\xa0\x7e\x36\xe8\x8e\x46\xfb\xc8\xa9\x75\x06\x11\xae\xf1\xc2\xa0\xfe\x08\x88\x78\xbf\x97\xe0\x9f\x63\xcd\x77\xbe\x64\xd4\xa7\x8a\x33\x85\x3c\x9f\x4b\x22\x39\x55\xbb\x75\x59\x60\xe8\x48\xea\x08\xa6\x5c\x57\x72\x08\x7d\xee\x70\xdf\x81\x84\x78\xbe\x74\x5c\xdb\xc5\xae\xb0\xb9\x8d\xec\x6b\x5e\xe2\x62\x0e\xcd\x20\xa5\xf2\x62\x25\xf6\xb1\x15\x52\x21\x21\xe6\x42\x4a\x7a\x2d\xc3\xa6\xb7\x56\x62\x63\x83\x81\x54\xde\xa2\xe0\xab\xda\x00\xd2\x8d\xd5\x32\x9c\x81\xd3\x5d\x6c\x73\xae\x25\xb9\xcf\x53\x3a\xa6\xcb\xfc\x4a\x04\xa3\x70\xd2\x53\x4d\x7f\x46\x2d\x3b\x11\x1b\x57\x1c\xa3\x0c\x6a\x7d\xb3\x53\xcc\x4c\x58\x3e\x35\x4e\x0d\x27\x34\xb6\x2e\x75\xbb\x76\x6c\x92\x9d\x06\x87\x48\x7e\x87\x09\xf7\x64\xad\x2e\x15\x2d\x67\xb1\xcc\x98\x66\xca\x9f\x55\x2a\x43\xcf\x9b\x0c\x6b\x25\x91\xea\x8b\xa0\x21\x73\x0e\xdc\x94\x0b\xb1\x85\xbe\x69\xa5\x5d\xb4\xc8\xb6\x42\xcf\x31\xcb\xe9\x6a\x5a\x9b\x15\xaa\x78\x55\x4f\xcd\xb6\x8b\x72\x7c\xd3\x34\xc7\xa5\x3c\x9a\x95\x05\xe8\xe4\x3b\x5a\xc8\xac\xfd\x21\xd9\x44\xed\x0c\x26\xda\xfa\x0b\x93\xfa\x23\x60\xe2\xfd\x5e\x82\x7d\x8e\x3d\xdf\xf9\x40\x02\x46\xa9\x0f\x3c\xea\x2a\x45\x05\x46\x88\x7b\x00\x08\xe1\x3a\xdc\xf6\x91\xc3\x05\xf0\x99\xef\x49\xa8\x04\x66\x36\x81\x90\xdb\x8e\x03\xa1\x47\xb8\x74\xa8\xab\xe0\x35\x4c\x5c\xdc\xc5\x66\x98\x52\x71\x31\x72\xda\xb5\xee\x03\x27\x4a\x18\x14\x02\x21\x46\xaf\x25\xd8\xf4\xd6\x42\x6c\x2c\x51\x6e\xd7\x85\xd9\x2c\xd2\x96\x11\xf8\xe5\x44\x76\x83\xa7\x9b\x39\x49\xa2\x58\x3b\x13\x9a\x93\xb2\xa5\xa6\x33\x0b\x66\x86\x70\xdb\x9d\x13\xe0\x8e\x97\xcc\x4e\x98\xc3\x76\xd3\x1d\xf4\x40\x7a\x0c\x3b\x22\x56\xae\x3a\xd1\xa9\x3e\xdb\xf2\x22\x2b\x5b\x6a\xa9\x8f\xf9\xf8\x04\x12\x27\xc9\x44\x72\xcd\x17\xb8\x3a\x17\x12\x24\x93\x09\xad\x85\x4a\xb5\x10\x0f\xf2\x41\x0d\x1b\x78\xb4\x19\xb8\xd3\xc9\x70\x69\x0c\x52\x85\x4a\xd4\xd7\x47\x6b\x5f\x6f\xf4\x06\x4e\x52\x65\x3d\x2f\xd9\x54\x89\x7c\x95\xcb\x5e\x48\xfc\xd5\xa6\x0e\x36\xc3\x92\xb6\x65\x31\xa8\x49\x92\xda\x5f\xb2\x4b\x94\xcf\x40\xa2\xd9\x79\x61\x51\xbf\x26\x24\xe8\xe7\x98\xf3\x9d\x02\x12\x50\xc7\x63\x90\x49\x2e\x20\x55\xdc\xf3\x04\xb0\x99\xcf\x6d\x4f\x28\x81\x01\xe7\x36\xc5\x80\xd8\x0e\x60\x02\x0a\x44\x15\xb5\x05\x02\x8e\xef\xb8\x2e\x44\x9e\x73\xb5\x10\x7b\xd9\x11\x10\x0a\x2f\xbf\x5d\xf0\xb1\x15\x52\x80\x77\xf9\x0f\xc5\xec\x5a\x82\x4d\x6f\x2d\xc4\x46\x13\xe5\x86\x6c\x35\x06\x24\xa5\x7c\xaf\x93\x77\xf0\xb4\xc5\x92\x71\x3c\xae\xc6\xf3\xb3\x74\xa7\x95\x53\x8d\x30\x5b\x88\x8a\x55\x05\xc9\xea\xb4\x51\xf3\x58\x91\x1b\xa4\x02\x7c\x25\x6a\xba\xeb\x75\x07\xee\xb0\xe5\x6e\x3c\x10\x0d\x9d\x8e\xed\x95\x7b\xad\xb6\x16\xab\xe5\x9f\x36\x27\xdc\x13\x33\xad\xe1\x41\xa3\x24\xfd\x6a\x25\x37\xb4\x46\x26\x2f\x8d\xcd\xb8\xdd\xb6\x5b\xdb\x20\xdd\x95\xcd\x3e\xca\xa2\xc1\x46\xeb\xb4\x6a\x9e\x39\x5b\xad\xcb\xd5\x79\xd6\xcc\xd0\x9a\xea\x8c\xbd\x22\x40\xfd\x76\xb8\x2d\xfa\x33\x16\xeb\xb5\xac\xd4\x78\x9d\x18\xb7\x3a\x7a\x75\xcb\x2a\x8a\xef\x43\x27\xe3\x0c\x26\xea\xe2\x85\x49\xfd\x9a\x98\x20\x9f\x63\xcf\x77\x14\x71\xec\x21\xc4\x7c\x6c\x7b\x92\x10\xcf\xe1\x42\x71\x02\x3c\xa4\x7c\xc8\x31\x13\x84\x42\xc9\x6d\x20\x85\x2f\x5c\x84\x5c\x64\x43\x9b\x40\x24\xb0\xf0\x90\x8f\x38\xbf\xf6\x0e\x03\x70\x71\x13\x9b\x51\x26\x2e\x6f\x62\x3f\xb6\x42\xc2\x00\x12\x42\x08\xc0\xae\x25\xd8\xf4\xd6\x42\x2c\xcc\x6d\x41\xe0\x6c\xa7\x6d\xcb\x9c\x13\x0a\x92\x15\xbe\x76\x51\x37\x95\x6e\x86\xb9\x1e\x59\x05\xab\x49\xba\xaf\x87\x45\xb3\xb0\xf1\x56\x9b\xb9\x99\xcb\x2d\xf2\x64\x61\x8d\xe3\x13\x53\x67\x49\x2d\x36\x5f\x25\xe6\xb3\x8d\xb1\x6a\xc6\xe2\x66\xaf\x9a\x47\x3d\xa8\x21\xb7\x30\x7e\x7a\xaf\x87\x7b\x32\xa7\x31\x47\x8f\x96\x54\xd9\x72\x5c\x63\x59\xc9\xfa\xe5\x8d\xdd\xac\x34\x9a\x7a\x67\x1b\xe7\xb6\xb3\x9a\x2a\xb3\x5e\x56\xad\x56\xb6\xbb\x0a\xda\xa0\x3d\x59\xbb\xee\x66\xe3\xad\xf2\x41\x67\x51\xcf\x79\x4e\x36\xdd\xd6\xd3\x15\xa3\x2d\x65\xad\x5c\x68\x48\x2b\xbb\x29\x85\xae\x1b\x54\xf7\x42\x64\xcf\x60\xa2\xf6\x47\x3c\xec\xf4\x7e\x4c\xe0\xcf\xb1\xe7\x3b\x40\x15\xe7\xae\x23\x19\x60\xc0\x75\xa0\x43\x09\xe6\x84\xfa\x42\xf8\x0a\x33\x85\x11\x61\x0e\xa1\x0e\x62\xb6\x54\x8a\x4a\xee\x43\x49\x7c\xcf\xdf\xe5\x27\x12\x52\xdb\xbd\x7c\x4f\x9b\x7e\xa7\x97\x83\x23\x46\x29\xbd\xb8\x9d\xf7\xd8\x0a\x09\xe4\x18\x4b\x04\x38\xbb\x9a\x62\xe3\x1b\x31\xb1\x6a\x8e\xfc\xc2\xa0\xd3\x32\x66\x4e\x3d\xe9\xa5\xa2\xd9\x58\xcf\xe9\xe5\xd2\xf3\xd4\x6c\x38\x51\xb4\xed\xaf\x07\x25\xcc\x8c\x4d\xbf\x3e\x4d\x2f\x94\x91\x5e\xe5\x6b\x1b\xbc\xf5\x12\x39\xdd\x71\x47\x85\xd1\x3a\x6c\xeb\x35\x5c\xa7\xd2\x6e\x4d\x79\x74\xe2\xf8\x46\x00\x92\xab\xd1\xd3\xa1\x58\xe7\x24\x9d\xc8\x78\x25\x31\x8f\xc7\xe7\x63\xb5\x29\x08\x29\xe7\x85\xd2\xc8\xf4\xec\x49\x2d\xcc\x58\x8d\x61\x26\xdf\xcb\x8b\x61\xe8\x4c\x09\x44\x2b\x3d\xeb\xf5\xea\x6e\xc6\xc1\xf5\x5c\xb7\xac\xcd\x17\x23\xb3\xd4\xeb\x8e\xbb\xfd\x8a\xdf\x8d\x76\xfb\xa4\xef\xc6\x57\x7d\x32\xf7\x4b\x32\x60\xfb\x4d\x6c\xfd\x0c\x26\x2a\x2f\x2f\x04\xfd\x9a\x98\x40\x9f\x63\xcf\x77\xbe\x82\x18\x33\xe6\x12\x97\x62\x17\x10\x9b\x51\xe5\x12\xaa\xa8\xe7\x71\x4a\x80\x87\x31\xb2\x85\x8b\x05\xa1\xcc\xe7\xd0\x26\xcc\x11\xee\x0e\x68\xc2\x67\x90\x41\xe2\xe0\x8b\x45\x27\xfa\xfd\x8a\xd5\x73\x8e\xf8\xe5\x04\xfc\xa1\x15\x62\x4e\xb0\x90\x14\x13\x7e\x35\xc5\xbe\x75\x73\x22\x46\xaa\xe6\x70\x6d\xd4\x44\x3c\xdf\x56\xeb\x14\xf5\x20\x2c\x9b\xc6\x66\x62\x14\xf5\xfa\xd2\xb5\xad\x69\x2f\x3e\x60\x3d\x94\xea\x56\xb6\x8e\xb7\x5e\x3b\x7e\x2a\x59\x8f\xce\x02\xa6\xa5\xad\x65\x81\xce\xa2\x61\xdd\x9d\xb5\x44\x7b\xd5\x4f\xd1\x7e\x41\xea\xf1\xcd\x38\xe0\xfd\xa7\x0d\x3b\xe7\x24\xaa\x47\xdb\x24\xe5\x1e\x0a\x6b\x2b\x54\x60\xc3\xc5\x74\x3e\x8c\x85\x0a\x25\x7b\x2c\xb5\xd8\xc6\x9b\xa3\xfa\x90\x0f\x78\x26\x4c\xce\x8c\xda\xd6\x9c\xb4\x9c\xb6\xea\x35\x86\xcb\x95\x45\x48\xaa\x5e\x2e\x39\x46\xd6\x5b\x20\xa7\x97\x61\xfd\x26\xce\xe6\x78\xa2\x1b\x90\xd6\xb0\xb3\xd8\xc7\x4e\xda\x19\x4c\x58\x7f\xc4\x03\x80\xef\x2f\x3b\xc1\xcf\xb1\xe7\x3b\x4e\x81\xaf\x3c\x7f\xff\x52\x66\xac\x28\x10\x04\x71\x8f\xbb\xcc\x87\x36\x86\x3e\xc0\xc8\xf5\x7d\x4f\x38\x14\x62\x65\x3b\xc8\x77\x6d\xec\x12\x81\x38\xc1\xae\x44\x0a\xb2\xcb\x07\x00\xe9\xf7\xcb\x37\x4d\x99\xdc\x79\x80\x37\x5b\x21\xc6\x90\x60\x29\x18\xe4\x57\x73\xec\x5b\x37\x27\x70\xad\xc4\xfd\x20\xde\xaf\xd2\x72\x37\xe1\x37\xd7\xcb\x74\x2f\xb3\x32\x66\x31\x19\x40\x3d\x3a\xd9\xc4\xf2\x25\xbd\x33\x2a\x8b\xfe\x22\x35\x73\xb3\x93\xfa\xb0\xb7\x59\x4e\xb2\x03\x27\xe5\x0d\x87\x89\x99\x5b\xcd\xac\x16\x29\xb8\xf6\x63\x10\x89\xfc\x30\x1c\xc7\x0b\x46\xb9\x61\x4e\x9e\x2e\x15\x39\xa7\x97\x27\xd2\xc3\x36\x1a\x76\xd3\x8d\x52\xc2\x6d\x68\x1e\x1c\xd7\x64\x25\x9e\x6b\xfa\xaa\x37\x4f\xf2\x54\x51\x0f\x0b\x49\x16\xa6\x66\xd5\xe2\x92\x18\xf9\x46\xd6\x5c\xd6\xb6\xfd\x64\xa0\x9b\xa3\xad\xa1\xcd\xe0\x60\x99\x11\x7a\xa0\x37\x72\xb6\xb5\x9a\xe6\xac\xa5\x09\x5a\x0b\x6b\xb9\xdd\x0d\x1c\x17\x67\x30\x51\xfc\xdf\xc3\x4e\x3b\x4c\x80\xcf\xb1\xe7\x3b\x89\x99\x0b\x15\xf4\x81\xe3\x43\xdb\x97\x0c\x0b\xa0\x1c\x20\x15\x95\x8a\x22\xe8\x51\x85\x3d\xcf\xc3\x1c\x78\x08\xfa\x3e\xf1\x3d\x68\x03\x69\x3b\x10\x61\x9b\xb8\xbe\x63\x5f\x2e\xc5\xd2\xef\x97\xf7\x1f\x38\x10\x44\x5c\xcc\x27\x1e\x5b\x8f\xbf\xb9\x00\x77\x19\xc5\x15\x4c\x90\x5b\xb7\x27\xa8\x39\xcb\x74\x45\x41\xd8\xd1\x46\x51\x63\xab\xd1\x60\x34\xc8\x7a\xcd\x1e\xf6\xcc\x15\xe8\xc6\x40\xcc\x0a\x73\x93\x75\x96\x55\x4b\x8b\x49\x7f\x5b\x6c\x6e\xe9\xd0\x47\x85\x4e\x6b\x64\x87\xda\xbc\xb9\x36\xdb\x85\x7e\xb4\xe6\x57\x45\xcb\x92\xa8\xec\xc8\x36\x6f\x95\x9c\x02\x3e\xec\x0c\xec\x31\x71\x32\xa7\xb0\xd7\x2c\xd8\x61\x3e\x96\x2d\x4e\xf2\x66\xbd\x1f\x38\xc8\x35\x0b\xd3\xde\x40\xaf\x66\x9a\xe3\xf6\xc0\xcd\x91\x78\xaa\x55\x14\x8e\x81\x87\xd6\x76\x32\x6e\xf8\x9d\xe5\x9a\x8f\x7c\x2a\xb8\xb7\xee\xe5\x5a\x75\x73\xd8\xb1\x06\xbe\x9f\xd3\xb7\x8d\x64\xbc\xb3\xea\xfa\xb9\x61\xa7\xb6\x83\x5f\xfc\xdc\xe5\x09\xe3\x7f\x0f\x3b\x55\x22\x7f\x41\xf2\x73\xec\xf9\xce\x85\x84\x50\x49\x11\xf2\x15\x41\x0a\x79\x10\x38\x48\xda\x98\x03\xc7\x51\x8e\xbd\x83\x13\xb1\x95\x22\x48\x22\x81\x3c\x47\x11\x22\x08\x12\x98\x7a\xd0\x21\x04\x33\x76\xf9\x50\x2c\xfd\x4e\x2f\x6e\x62\x73\x28\x08\xb9\x58\xa8\x7d\x6c\x85\x88\x50\x4a\x00\x85\x54\x5c\xcb\xb1\xc9\xad\x97\x27\x44\x4a\x6f\xd4\xb3\x4b\x9a\x20\x73\xbd\x90\xb7\xcd\xd5\x22\xba\x18\xe8\xd1\xca\x82\x26\xfa\x61\xc1\xa1\x7a\x37\xd1\x81\xc0\xb1\x92\xed\x9e\x91\x49\xce\x86\xb9\xb0\x3a\xde\xf8\xc6\x14\x8c\x78\xdb\xea\xc1\xd2\xbc\xde\x72\x83\x55\x85\xa6\x10\x8d\x29\xa7\x4e\xf3\xc3\x52\x66\xf3\x94\x63\xdb\x27\xf9\x84\x63\x27\x92\xc4\x72\x7c\x7d\x52\x99\x66\xa3\x93\x71\x76\xb3\xdd\xd6\x6a\x51\xa7\xd5\x32\x72\x33\x6b\x85\xc7\x19\x77\x98\x59\x95\xa7\x4b\x5b\x0b\x32\xb5\xad\x5e\x71\xf8\x70\xdd\xe8\x38\x6c\x9a\x94\x41\xd4\x59\xb6\x6c\xaf\xd7\x5d\x1b\x56\x3a\xa6\xd6\x61\xb2\x31\x16\xb1\xb0\xb6\x7f\x2d\x42\xfc\xdc\xe5\x89\xc2\x4b\x93\xfa\x35\x31\x21\x3e\xc7\x9e\xef\x24\x40\x0e\xf0\xa9\x82\x4a\x51\xc0\x1c\xe9\x4b\x8f\x09\xa1\x08\x23\x8c\x63\xc7\xb3\x91\x6f\xdb\x80\x32\xc1\x99\xeb\xf9\x0a\xd8\x2e\xa2\x40\xf9\xd4\x95\x9e\x0f\x6c\x61\xef\x5c\x01\xdf\xff\x77\x06\x13\x17\x37\xb1\x39\x92\x57\xde\x9d\xf9\xd8\x0a\x11\x40\x54\xee\xdc\x9f\xb8\x96\x63\x93\x5b\xb7\xec\xa8\x36\x4d\x42\xa2\x68\xd9\xa6\x51\xcf\xce\xd2\xb4\x35\x2a\xca\x70\x39\xe9\xd4\x43\x6f\x86\xa3\x89\x59\xae\xcc\xe1\xc6\x13\xf9\x60\x38\x32\x93\xab\x42\x2b\xa3\x78\x27\x9b\x69\x19\x9b\x75\x2b\x68\x94\x0a\x4c\xf3\xc6\xc5\x61\x31\x9d\xb0\xb2\xe6\xb0\xe4\xea\xcb\x61\x7c\x44\x9f\xde\x3f\x6e\x9f\xbe\xef\xa9\x1c\xab\x92\x4d\xce\xcc\x8f\x64\x37\xc8\x85\xd5\xc5\x3a\x39\x33\x1d\x4f\x06\x8e\xd5\xf0\x51\xd7\xcc\xe4\xba\xb3\x60\x12\xcf\x37\x92\xd0\x99\x0f\x66\x41\x43\x33\xd7\x13\xbd\x8d\x6b\xf1\x3c\xca\xce\x16\xad\x94\x41\x6c\x26\xa6\x45\xab\xbc\x5a\x78\xaa\x3d\x8b\xe7\xe1\xa2\xbe\x83\x41\xfc\xdc\xe5\x89\x9c\xfb\xc2\xa4\xfe\x08\x98\xe0\xef\xc6\x04\xff\x1c\x7b\xbe\x93\x88\x2a\x22\x7c\x25\x5c\x0c\xa5\x42\xd8\x11\x14\x40\xe2\x79\x3e\x53\x98\x49\xe1\x39\xb6\x72\x20\x75\x3c\x41\x14\x50\x84\x60\xca\x20\xf1\x31\x44\xd4\x13\x84\x2b\xdb\xbf\xe6\x27\x2e\x66\x0c\x9c\x32\x7c\xf9\x92\xdd\xbe\x75\x5f\x77\x82\x54\x32\x02\x21\x93\xf2\x5a\x8e\x4d\x6e\xcd\x27\x68\x4e\x55\x4a\xcc\x30\xda\xa4\xb7\x48\x69\x35\xec\x3b\x3d\xbb\x85\x18\x5b\x37\x64\xb7\x98\xec\x97\x61\xab\x26\xd6\x39\xaf\x9b\x61\xcb\xf2\xc6\xcb\x65\x9b\xba\x36\x83\x8b\x62\x92\x65\xfb\x35\x63\x26\xd2\x83\xd1\xa6\x94\xac\xae\xad\x49\x68\xe5\x1b\x24\xb6\xea\xb4\xdb\xb6\xf9\x94\x4f\xd8\x27\x66\xda\x1f\xab\xa6\x67\x36\xfd\x61\x17\xea\xa3\x5a\x2f\xd1\xca\x1a\xca\xf1\xb6\x75\x51\x1a\x74\x12\x8a\xe5\x98\xca\x4d\x84\xe1\x90\x4a\xb3\x55\x35\x6a\xd2\xa2\x63\x27\x55\x8e\xc7\xc6\x5d\x7d\xbc\x0e\xd2\x81\x5b\xed\x0f\xe2\x7a\xb3\x56\x29\x37\x44\x73\x3a\xaf\x83\x8c\x8c\x9b\xd1\xdd\xc0\xf1\x33\x97\x27\xb4\xe8\xff\xee\xd9\xed\x30\xc1\x3e\xc7\x9e\xef\x7c\x4a\x5c\x00\x24\xf7\x08\x81\xbe\xcf\x99\x4b\x04\xf7\x88\x72\x1c\x28\x7c\xaa\xa8\x4f\x91\x4b\x6d\x0a\x5d\x5b\x32\x01\x80\xe3\x4b\x47\x40\x81\x24\xe5\x12\xd8\x98\x73\x71\xad\xee\x74\x39\x3a\x62\x5c\x90\xcb\x91\xd5\x43\x2b\x84\x90\x31\x09\x89\x64\xf2\x5a\x8e\x8d\x6f\x3e\xee\x54\x37\xb4\x9c\x5f\x2b\xfb\x12\xad\xb3\x7e\x8d\xf1\x74\xa9\x39\x90\x95\xb5\x5d\x73\x27\x8d\x8e\xb6\xa4\x8b\x78\x67\x5c\xa7\x89\x9e\x47\x8a\x4e\x7c\xe2\xaa\x99\xd8\x36\xdb\x5a\xcf\x2f\xa4\x6d\x2b\x6a\x78\xa0\x93\x59\x95\xea\xa4\x10\x35\x17\x5e\xa9\x53\x29\xe7\xbc\x99\x4e\x9f\xea\x4e\xf6\xc9\x9c\xa6\xab\x79\xb7\xe7\xd1\xf9\xcc\x1d\xa4\x70\x29\x3a\x9e\x27\x03\xc3\xab\x35\xc6\x02\xcf\x17\xad\x54\x74\x3b\xd0\x92\xe3\x68\x33\xda\x99\x47\x55\x7c\x00\x87\xed\x4e\x19\xf5\xe3\x9d\xe2\x20\x99\xc0\x1b\x83\xf4\x61\x33\x55\xe9\x77\xc4\x68\xae\xea\x39\x63\x1c\xcb\x77\x27\xc5\x4d\x03\xed\x63\xa7\x33\x97\x27\x34\xf1\x47\xdc\xb3\x7b\x77\xdd\x09\xd1\xcf\xb1\xe7\x3b\x8f\x43\x07\x22\xe4\xf8\x0e\x04\x0a\x42\x89\xa9\xe4\xb6\xeb\x13\xce\xa4\x2f\xa5\xc3\x21\x53\x5c\x2a\xee\x41\x65\xbb\xae\x8f\x10\xb5\x3d\x9f\xfa\x1e\xa3\xae\xa3\x94\xc2\xfc\x9a\x9f\xb8\x1c\x1d\x71\xc9\x2f\x1f\x0f\x7c\x6c\x85\x80\x63\x4e\xa0\x40\x04\x5c\xcb\xb1\xf1\xad\xb1\x93\x74\x1d\x3d\x58\x72\xbd\xa8\xb7\xcd\xb6\x9a\xc9\x8c\xed\x0f\x1d\xb7\x41\x29\x95\x99\xc9\xb6\x94\x1d\x4c\xfd\xa6\x6c\xbb\xcb\x05\xc1\x09\xea\xf5\x5a\x2b\x95\xe8\xfb\x0b\x47\xb5\x82\xcd\x54\x5b\xae\x07\xa5\xe1\xa2\x96\xe9\xac\x9d\x7e\x74\xdc\x6f\x12\x0a\x06\x4e\x50\x8b\x3f\xe5\x13\xed\x93\x7c\xc2\x90\x9d\x42\x3d\xb9\xec\xad\x8c\x45\xbd\x1d\x1d\xf5\xac\xde\x72\x69\xac\x07\xdd\xd0\xb3\x3a\xb1\x7a\x6e\xbc\xb0\xc7\x41\xc2\x01\x1b\x59\x49\xce\x1a\x59\x1d\xb4\xdb\xcd\x44\x8e\x23\x63\x66\xc7\x58\x6d\x5a\xf3\xaa\xc9\x7e\x74\x38\x31\x8d\x09\xca\xab\x76\x3d\x1f\xef\x79\xf3\xc3\xfe\x47\xfc\xcc\xe5\x09\x8d\xbe\xdc\x9f\xd8\x1f\x7f\xfa\x2f\xc7\xc4\xfb\xfd\x04\xf9\x1c\x7b\xbe\xf3\x80\x74\x11\xa7\x54\xd9\x18\x42\x20\x39\xe3\x1e\xb3\x77\xff\x71\x48\xa9\xeb\xfb\xd0\x61\x18\x28\xcf\x61\x98\x09\x9b\x38\x48\x00\xc7\x61\xc2\x53\x88\xb8\x48\x39\x0e\xb9\x86\x89\x8b\xfb\xd8\x5c\x42\x88\x2f\xee\xe8\x3d\xb6\x42\x80\x01\x97\x08\x52\x08\xae\xe5\xd8\xf8\xd6\xf3\x4e\x32\xe1\xe6\x60\x73\x62\x58\x89\x66\x5b\xda\x73\x7b\xee\xd6\x9b\x25\xe1\xb4\x56\xdc\x69\xa1\xa0\x3f\x0b\x13\xdc\x36\x49\x7f\xb5\x58\x00\xdc\x35\x98\xcb\x2a\x9b\x95\x66\x55\x46\x25\x07\xbb\xf3\x14\xf3\xc3\xba\xe7\x74\x36\xeb\xee\x38\x66\x91\xd8\x2c\xda\xd0\xa3\x73\x75\x78\xb5\xd2\x01\x13\x27\x11\x0c\xdc\x06\x19\xbb\xb7\x70\x92\xd3\x1e\xcc\x2e\xa8\x5e\x16\xad\x76\x1c\x91\xc4\x76\x88\xa4\x96\x2b\x79\x76\x6e\x34\x6b\xe2\xa8\x16\xf5\xeb\x38\xef\x7b\x2a\x98\xe4\x26\x9b\x4d\xd7\xef\x47\xf9\x70\xd5\xa8\xc5\xc1\xd4\x71\x96\x73\xb6\x61\x04\x74\x0b\x31\x67\x14\x96\x8c\xb6\xec\xec\x2f\x4a\x9c\xc1\x04\x79\xb9\x3f\xf1\x6b\x62\x02\x7f\x8e\x3d\xdf\x39\xc2\x13\xd0\x96\xc4\x75\xa5\xed\x42\xcf\xf5\xf6\x07\x09\xa9\x63\x2b\xc0\x04\xb0\x39\x61\x3e\x81\xb6\x23\x11\xf6\x94\x74\x98\x60\x14\x10\x84\x00\x96\xbe\xf0\x7c\xc2\xaf\xd5\x62\x2f\x5f\x8f\x10\x90\xa2\xcb\xb5\xd8\x7d\xeb\x2e\xee\x92\x82\x0b\x82\x08\x17\xe0\x5a\x8a\x8d\x6f\x3d\xee\xc4\x7b\xad\xf4\xb8\x6a\x0c\x67\x19\x17\xe6\x3c\xd5\x60\x24\xdd\xc9\x7b\x69\x19\x9f\xd0\xac\x64\x8e\x9d\xae\xe9\xd9\x4e\xd1\xef\xf9\x16\x2b\x96\x3a\x54\x0b\x83\x54\xad\x33\xc7\xe9\x34\x68\x14\x73\x53\x92\xc0\x39\xbb\x9c\x19\x72\xa3\x14\x2f\x07\x33\x2f\x41\xba\xfd\xed\xba\xf2\x14\x3a\xb5\x4f\x0c\x53\x2d\x58\xbb\xb0\x8d\x46\x55\x71\xd3\xc0\xb1\x4c\xa9\xc5\x20\x5b\x46\xc3\x14\x6a\x72\xca\x1a\x89\xaa\x48\x4b\xac\x8d\xbd\x4c\xe0\x87\xb3\x5a\x71\x9c\x70\xa2\xb3\xa2\xe3\x8e\x67\xdb\xd2\xbc\x24\xa3\x99\x0d\x30\x32\xc3\xed\xba\x3b\xde\x6a\xa5\xd8\xac\xaa\x55\xdd\xf2\x78\x94\xdf\x43\xe2\xcc\xdd\x09\x0d\xbd\x7c\x3f\x41\x52\xfb\x15\x21\x81\x3e\xc7\x9c\xef\xa0\xe2\x18\x31\xe6\x48\x17\x7a\x4c\x79\x82\x2a\x0f\x01\xc4\xc1\xfe\xbd\xfd\x04\x08\x48\x08\xf5\xa8\x8f\x00\x84\x42\x3a\xca\x71\x28\x47\xd0\x95\x0e\xa2\x8c\xfa\xc7\x6b\x3f\x97\x20\x71\x71\x1b\x5b\x20\x4e\x2e\x1f\x77\x7a\x6c\x95\x84\x08\x89\x04\xa0\xf0\x5a\x86\x8d\x6f\x3d\xed\xb4\xa6\xdb\xdc\x70\xe1\x66\x1a\xbc\xd5\x9c\x67\x13\x6e\x21\x93\x5b\x6b\x9d\x9a\xe5\x35\x37\x9a\x15\x38\x8c\xd7\x37\x99\xdc\x6c\xd0\xf6\xbd\x1c\x49\x6e\xb7\xcb\xba\x5f\xea\x29\xba\x4c\x30\xb7\xd3\x4d\xa4\xfc\x69\x7b\x65\x64\x0c\x3d\x69\xa4\xe0\xb8\xbb\x1a\xc7\xfa\xd9\xde\x22\xc6\x4f\x20\x71\x32\xa5\x40\x33\x82\x4d\x95\x24\x36\xc9\x42\x61\x69\x6f\x2a\x40\x1b\x96\x24\xef\xaa\x91\xec\xc1\x69\x3f\x3b\x0b\x5b\xca\x04\x41\x79\xda\x5b\x8c\x81\x5d\x4a\x79\x8b\x7a\x76\x96\x8b\x8e\xfc\xad\xcc\x9a\x89\x5c\x65\x4a\x85\x59\x2c\xad\x4b\x66\xb9\x9a\x6f\x4f\xaa\xd5\xd6\xb6\x42\xa3\xc5\x7d\xe4\x74\xe6\xf2\x84\x06\x5f\xee\xd8\x25\xb4\x5f\x11\x12\xf0\x73\xcc\xf9\x4e\x01\x57\x0a\x1b\x30\x85\x3d\x97\x70\x28\xb0\x4d\x04\xc0\xbe\x24\xdc\xf5\x00\xb0\x7d\x85\xb9\x27\x1c\x49\x3c\x17\x13\x4f\x11\x24\x6d\xcf\x23\xc0\xb7\xb9\x0b\xa5\xcb\xe0\xb5\x0c\xfb\x72\x5d\x49\x60\x01\xaf\x00\xe6\xa1\x55\x02\x28\x09\x86\x18\x5d\x7d\xdb\x19\xbe\xf5\xb0\x53\x34\x99\x0b\x3a\x4e\x0f\xeb\x6e\xab\xd8\xef\x24\xa3\x35\xdf\xd4\xf2\xb1\x9e\xdf\x5a\xd4\x70\xb2\xaa\xca\xe3\xa9\x57\x2e\x8d\x45\xda\x6d\xb5\x52\x21\x8f\xa6\x07\xf6\x0c\xf5\x82\x71\x98\x1e\xd8\x72\x39\x2d\x14\xf2\x20\x0c\xb5\xc0\xc8\xd2\x74\x59\x15\xfb\x85\x7a\x6c\xd1\x93\xee\x53\x32\xd1\x3a\xbd\x89\x5d\xd0\x46\x66\xaf\xb2\x1a\x16\x42\xc2\x49\xd8\x0b\x33\x9d\xcd\xcc\xef\x37\x87\x4a\xc5\xb3\x4d\xaf\xd3\x70\x36\xc5\xdc\xca\x19\xcd\xd6\xd1\x72\xcd\xb3\xf3\x25\x5f\x6b\xb6\xba\x9b\x65\x7f\x9b\x2f\xe7\xf5\x68\xb5\xe5\x74\xb1\x67\xf4\x84\xdb\x04\x9d\xb9\x0f\xa2\xc5\xb0\x3a\xdf\xff\x40\x6a\xfc\xcc\xdd\x09\x6d\xfb\x72\xc3\xee\x8f\x00\x89\xf7\x27\xd8\xe0\x73\xcc\xf9\xce\x55\xd0\xf5\xb8\x6d\x3b\x40\x21\x64\x43\x25\xa0\x2b\xa4\xe3\x41\x0e\x3d\xe0\x78\x36\xf5\x84\xa7\x5c\x24\x04\x22\x90\x60\x80\xa8\xcf\x7c\xe0\x41\x6a\x43\x8f\xdb\xae\x0b\x2f\xbf\xed\x8c\x7e\xbf\xfc\x9e\x1a\xb1\x0f\x86\xde\x6c\x15\x54\x48\x89\x09\x95\x57\x5f\x76\x86\xe1\xad\xfb\x75\xc4\x85\x6c\xb2\x22\x41\xa8\x3a\x6e\xe0\x80\x66\xa6\xbc\xb4\x9b\x2d\x3c\xcb\x67\x73\xf1\xf2\x2a\xe7\x3b\x2b\x50\x0f\x3d\x35\x5b\xb5\xa2\x7e\xb8\x9a\x15\xdc\xfc\x96\xe7\xa0\xa7\x63\xda\xc9\x8f\x5a\x96\x61\xa3\xad\xf6\xff\xd9\x7b\xb3\x1e\xd5\x91\x65\x5f\xfc\xfd\x7c\x8a\xa5\x7e\x59\x57\xa2\xf7\x26\xe7\x4c\xf7\xd5\x79\xb0\x8d\xc1\x36\x93\x01\x1b\x30\x57\x47\x2d\x8f\xcc\xf3\xcc\xd6\xff\xbb\xff\x05\x35\x30\x54\x51\x83\xa1\xaa\x57\xef\x7d\xd0\xd2\x52\x65\xb9\xf8\x39\x32\x32\x32\x22\x23\x33\x22\x12\x07\xd3\x78\x39\x2e\x39\x45\x18\x47\xdd\x96\xb5\x3c\x5a\x09\xf7\xc4\x97\xd8\xa4\x3b\x1b\x4f\x6b\xa0\x66\xc9\x54\x70\x37\x13\x23\x1c\xb9\x71\x2e\x58\x07\x15\xc1\xd0\xa4\xb6\xe0\x65\x93\x65\xb3\x10\x08\xc3\x4b\xab\x9d\x6d\x37\x9c\xc6\xf3\x28\xed\x61\x9e\xed\xc6\x05\x79\x90\xc9\xa7\xb4\x65\x05\x6f\x72\x5b\x6f\xaa\xd6\x68\xb1\xd0\x6f\x54\x9c\x43\x86\x84\xf2\x4a\xee\x84\xbc\xbe\x3c\x9b\xf8\x77\x98\x12\x9f\xb6\x12\x50\xba\x8f\x38\xff\x8c\x58\x4c\x49\xe4\xd1\x30\x88\x3d\x09\xb1\x98\x46\x84\x85\x21\xa0\x8c\x49\x20\xf6\x01\x86\x61\x80\x25\xc4\x21\x0f\x03\x10\xfb\x5e\x00\x7c\x14\x13\x08\x23\x41\x24\x46\x11\xbc\x1e\x27\x4e\xff\xb8\xbe\xd3\x2a\xd8\x1b\x21\xb1\x4f\x0f\x05\x64\x80\x60\x2e\xd8\x9b\x95\xce\xf0\x47\x0f\x26\x52\x3e\xb4\xa7\xcd\x20\x35\x31\x57\xcd\xbe\x1f\x2a\x0d\xaf\x92\x5a\x17\xc3\x35\x35\x37\x71\x90\xe1\x33\x79\xbe\xaa\x54\x99\x36\x18\x18\x15\xcf\x95\x6a\xc6\x7c\x93\x42\xc3\xdd\xc0\xef\xa7\x62\xa9\xa6\x8d\x57\xd1\x68\x52\x18\xa7\x0b\xe6\xd6\xb1\x3a\x4c\x4e\xb5\x53\xf5\xac\x98\x1c\x13\x27\xdc\x13\x19\x75\x77\x2a\x23\xf1\xb0\xd1\x6b\x95\x17\x53\x8d\x98\xbd\x79\x7e\xba\x8e\x66\xe1\x68\x57\x62\xdb\xf5\xc8\xac\xad\xc2\x79\xa6\x91\xb5\x82\x25\x9e\x98\xd9\x45\x71\xa8\x0f\x27\x73\x14\xc8\x9b\x71\xa5\x9f\x9e\xee\x62\x51\x19\x97\xca\x4a\x57\x31\x72\xb2\xc6\x44\xa4\x4b\x9b\xea\xf6\x70\xf0\xa1\xbc\x92\x38\x21\x2f\x2f\x2b\x13\xfc\x67\x4e\x08\x71\x1f\x61\xfe\x29\xbc\x38\x06\x00\x31\x1a\xfb\x92\x20\x10\x49\x00\x85\xb1\x14\xd2\x00\x83\x08\x4a\xc4\x03\xd0\x0b\xfd\x90\x4b\x88\x48\x20\x8a\xa9\x10\x98\x11\x2e\x42\x5f\x0a\x45\x84\x21\xbd\x5e\x6c\x9f\xfe\x41\xae\x6e\xb3\x0a\x81\xa5\xeb\x75\x0b\x0e\x4f\x0f\x27\xe3\x1c\x03\x89\x40\x88\xdf\x2c\x74\x86\x3e\x7a\x2e\x41\x66\x69\x59\x6d\xc5\x4b\xb7\x52\xeb\xab\x98\xc2\xa0\x58\xce\x39\x63\x65\xe6\x43\x6a\x9a\x99\x55\xc3\x28\xf5\xa3\xd2\x32\xec\xf5\xb2\x8d\x09\xd7\xbb\xa9\x7e\x46\xd1\x0a\x81\xe3\x0e\xca\xe9\x7a\x64\x4e\x56\x05\xb6\xa2\x63\xa3\xd2\xee\xc5\x8a\x2e\x2d\x50\x7d\xee\x3a\x60\x75\xbc\xc7\xeb\x34\x79\xa1\x94\xdf\x6c\xe5\xe2\x78\x5b\x4c\xb7\x47\x54\xea\x28\xee\xae\xb0\xf1\x1d\x24\x1a\x7e\x77\x83\x2b\xfa\x96\xcf\x81\x60\xab\x49\xcd\x25\xe1\x3c\x9e\x77\x20\xd8\x4e\xa2\x99\x3f\x34\xe2\xbc\xe3\xad\xc7\x63\xcb\x2d\x4d\x4b\xe9\x8a\x82\x7a\x79\x32\x5d\xa2\x85\xdc\x4c\x2d\x8c\x43\xcc\x88\xf2\x4a\xde\x84\xbc\x70\x2e\x24\xea\xdf\x61\x4a\x7c\xba\xce\x3e\xe4\xf7\x11\xe7\x9f\x2c\x26\x3e\x0f\x24\xca\x3d\x82\x3c\x8c\xc2\x50\x60\x10\x12\x8c\x20\x0a\xa9\xef\x7b\x71\xe4\x4b\x08\x41\x8a\x45\x44\x00\x04\x1e\x41\x98\x50\x8a\x31\x08\x43\x1f\x48\x3e\xf2\xdf\xf2\x24\xae\x9e\x5f\x0b\x89\x4b\xd7\xcb\x2a\x3f\x3f\xe5\x18\x40\x42\x08\x01\x6f\xd6\x39\x43\x1f\xdd\x82\x45\x52\x21\x36\xeb\xac\x32\x2d\x2e\x50\x26\xe3\x14\x3b\x85\xfa\x92\xa5\x67\xfd\x6e\xd6\xee\xf5\xe5\xca\x44\x2d\x65\x9d\x5d\x26\x9c\x9b\xf3\xd9\x36\x28\x63\x33\xad\x4f\x50\xa0\xad\x66\x04\xe3\x9c\x15\x4d\x71\x73\x61\xea\x56\x5d\xa4\x76\xcd\x70\x53\xa8\x56\x9d\x0d\x64\x95\xce\x43\x02\xf4\x7e\x4a\x34\x4f\x3c\x89\xa9\xde\x28\x67\xab\x61\x23\xb3\x8e\xf2\xa4\x65\x68\x8a\x6b\xbb\xe5\xfe\x6e\xdd\x45\x53\xd1\x35\xc6\x8a\xb4\xc9\xee\xe4\xf2\xd4\xaa\xa5\xe3\xb8\x67\x15\x3c\xad\x9a\xcb\x14\x66\xae\xca\x17\x2d\xb7\x5e\xe5\x23\xdb\xb6\x1d\x6e\x8f\x00\x29\x05\xd8\x2e\xcf\x21\x6e\xcf\x55\x78\x98\x12\xaf\xa4\x4d\xc8\xe3\xf1\x6b\x62\xf5\x37\x9f\x12\x9f\xf6\x24\xf6\x02\x72\x0f\x71\xfe\x29\x3c\x24\x21\x8c\x24\x09\x85\x4c\xf2\x7d\x06\x63\x42\x79\xc0\x99\xf0\x38\xa1\x3e\x8b\x7d\x14\x0a\x18\x7a\xa1\x2f\x42\xc6\x05\x88\x89\xc4\x80\x2f\x45\x11\x16\x28\x90\xbc\x90\xbe\x65\x25\xae\x0a\xbd\x04\x01\x25\x57\xf7\x9b\x9e\x9f\x32\xc1\xa1\x44\x38\xe3\x6f\x96\x39\x43\x1f\xdd\x6f\x22\xe3\x89\xb1\x1d\xd6\xe0\x64\x89\x74\x50\x17\xe1\x78\x02\x1a\x28\xb5\x45\x0a\x5a\x2c\x4b\x2d\x92\x01\x83\xf6\x32\x22\xa4\x60\xce\xea\x2e\x6c\xcb\x4e\x43\xc9\xad\x2b\x15\xab\x38\x75\x99\x65\x89\x6c\x76\x3b\x99\xf4\xf5\xf1\x3c\x5f\x25\x76\x06\xae\xe7\x6e\x98\x4e\x1b\xa9\x63\xd9\xe4\xd3\x5c\x68\x37\x3f\x5e\x72\xa5\x6f\x2d\x2a\x8b\x61\x86\x94\x29\x49\xdb\xf6\xd8\x69\x2b\x72\xdd\x51\x87\xea\x20\x5d\x4e\x49\x76\x7b\x8a\x3a\x25\x7d\x37\xc8\xbb\x52\xa5\x4d\x55\xd9\xd8\x84\xd5\xa6\x3f\x4f\x37\x83\xfa\x48\xf3\xb1\xe9\x9a\x71\x3a\xd3\x97\xf2\xa0\x54\x1c\x37\x68\x59\xd8\x87\x29\xf1\x4a\xd6\x84\x3c\xb8\x8c\xe8\x38\x7c\xfe\xe6\x53\xe2\xf3\x56\x82\xde\x47\x9c\x7f\x7a\x8c\x78\x31\x0c\x80\x88\x7d\x1a\x22\xe1\xf9\x41\x08\xe3\x40\x0a\xbd\x48\x04\x81\x0f\xfd\x38\x90\x7c\x3f\x0a\xa0\xcf\x7d\xc2\x79\x04\x49\x1c\x78\x28\xf0\xbd\x30\xf0\x88\x04\xf8\x5b\x59\x13\x6f\x08\x3d\x02\xec\x8d\x09\xf3\xf4\x94\x11\x82\x08\x05\x12\x79\xb3\xca\x19\xfa\xa8\x73\xcd\x5a\x79\x11\xa8\xd6\x22\xcc\xe7\x57\x25\x5d\x8c\x3c\x56\xdc\x6e\x56\x62\xc8\xb9\xb2\xe0\x55\x4c\x9c\x74\xbe\x50\x98\x05\x13\x53\x11\x21\x6a\x87\x9e\xe4\x35\x7b\xd5\x0d\x18\x7a\xa9\x65\x8e\x1a\xa3\x8c\xa5\x69\x0d\x1f\xf3\xb8\xd7\xda\x96\x2a\x5b\x6b\x6d\x75\x2b\xda\xea\xc4\x4a\x9c\x26\x61\xcf\x7b\xce\xa0\x61\xee\x9a\xbb\x66\x26\xa7\x2d\x79\xab\x29\x4a\x45\x92\xc3\x9d\x66\xd1\x6c\xdb\xd3\x21\x1c\x93\xe9\x4a\x2b\xc6\x3e\xcb\xe9\x6a\xb5\x5f\xef\x8e\x94\x60\x12\xb5\xd7\xd4\xef\xac\xdc\xe2\x64\x6d\x22\x3f\xdc\x6b\x34\x3c\x80\x7e\x4d\xb1\xea\x4e\xa6\xb7\x9e\x1d\x04\xff\x95\xa4\x09\xb9\xfd\xea\x6d\x5b\x7f\xf3\x29\xf1\x79\x5f\x82\xdc\x47\x9c\x7f\x82\x00\x12\x8f\x30\x1a\x33\x00\x00\xc4\x00\x7b\x94\xb1\x38\x0a\x20\x8d\x51\xe0\x07\xa1\x87\xb8\xe7\x07\x98\x44\x52\x20\x7c\x0a\x7d\x21\x24\x4a\x3c\x14\x4b\x3e\x06\x31\xf3\xaf\xdf\x38\x41\xff\x20\x57\x0f\xaf\x25\x8c\xa1\x74\x75\x37\xea\xf9\x29\x03\x10\x49\x94\x20\xf8\x66\x91\x33\xf4\x51\xf7\x7a\xbd\x76\x26\xb9\x26\x92\x65\x6d\x5d\x1e\xb4\x56\x5c\x69\x6e\xb7\x02\x75\xa3\xd9\x1a\xb0\xa0\x0b\x73\xa4\x5b\xaf\x75\x53\x7e\xd1\xf2\x36\x2b\x1a\x2c\xdc\x30\x28\xd6\xb4\xa1\xc0\xf3\xda\x6a\xdc\x9f\x60\xa4\xc2\x5a\x5a\x36\xda\xbe\x1f\x2c\x5a\x0d\xaf\xb1\x72\x36\x25\x24\x1f\x73\x26\x9a\x27\x43\x3a\x10\x51\xd1\x5f\x15\xcc\x45\x59\x19\xdb\xea\x6a\x3c\x1b\x68\xf9\x4d\x99\xb5\x27\xa3\xb9\x1a\xcd\x7b\xa3\x14\x54\x61\x5a\xcf\x81\x15\x9c\x85\x88\x8f\xcb\x3c\x55\x6f\xd4\xb4\x9c\x98\x89\x38\x28\x67\xdd\xbc\xe8\xe3\x56\x38\x19\x38\xfe\xce\x08\x63\x63\xd3\x2f\x79\x8a\x97\x3f\xcc\x82\x57\x72\x26\xe4\xf8\xf2\xec\xfa\xf0\xf9\x9b\x4f\x89\xcf\x2f\x9c\xf0\x7d\xc4\xf9\x27\xc0\x52\x28\x61\x80\x03\x04\x02\xc9\xa3\x02\x08\x14\x43\x1a\x13\xc1\x69\x24\xc8\xa1\xec\x6c\x44\xc2\x00\x81\xc8\x43\x98\x0b\xc6\x02\x2a\x85\x54\xe2\x41\x80\x89\xe4\xc1\xf0\x8d\x29\x71\x3d\x62\x43\x22\x42\xba\xea\x5d\x3f\x3d\xa4\x54\x60\x42\x39\x11\x6f\xd6\x38\x83\x1f\x4d\x98\x58\x97\xc3\xfe\xda\x52\x33\xe6\xc4\x55\x55\x51\x97\x8c\x30\xea\x14\xf5\xf5\xae\x8f\xd5\xcc\xd4\xc0\x9d\xe1\xa6\x05\x5b\x71\xb1\x64\x8e\xc3\x6c\xbc\x0a\x77\x8b\xcd\xcc\xd5\x2d\x69\xb3\x0b\xa7\x7e\x5a\x9a\x04\xf9\x71\xc7\x68\x76\xed\xd1\xa2\xb1\x4b\xd5\x36\x16\x1a\x6f\xa9\x82\x8f\x95\xf5\x1b\x27\x9e\x44\xb6\xdf\x70\x4a\xdb\x6c\x6a\xcd\x78\x95\x8e\x52\x7a\x3b\x53\x8a\xfc\x01\x9d\x8f\xea\xc8\x1d\x28\xf3\x1d\xde\x14\xec\xa9\x52\xac\xcc\x2b\xda\x22\x95\x6b\x14\x25\x67\xa1\x85\xb3\xbe\x3b\x1c\x1a\xb4\xae\xbb\xe3\xa5\x8d\x77\xd6\xc0\x9d\x14\xd4\xf2\x76\x30\xed\x4d\x51\xd0\xad\x1e\x82\x39\xe4\x57\x12\x26\xe4\xe0\xf2\x98\xee\xf0\xf9\x8f\x9b\x10\xe8\x3e\xc2\xfc\x93\x46\x34\x12\x12\xf6\x41\x2c\x01\x2e\x3c\xce\x19\xc0\x31\x03\x4c\x48\x04\xd0\x10\x91\x10\x11\x44\x78\xb8\xf7\xd6\x7d\x00\x62\x01\x69\x88\x20\xf2\xa3\xd8\x17\x50\x62\xf4\xad\xa2\x04\xf8\xea\x1e\xab\xc4\x00\xe4\xd7\xa7\xcb\xd3\x53\x0a\x29\x96\x18\xe0\xf4\xcd\x12\x67\xf0\xa3\xce\x35\xa4\x51\xd7\x9e\x5b\x7d\xbd\x3b\x0a\xdb\x16\x52\xc6\x03\xb9\x59\xb3\x6b\x95\x7e\x5c\x21\xad\xb9\x9c\x52\x9a\x35\x6d\xc6\x79\xbb\xd5\x6a\x64\x6b\xfa\x36\xe8\xca\x56\x64\x0c\x81\xec\x45\x9d\x69\xaa\x39\xab\xfa\xb1\x12\x23\xb7\xb1\x40\xe3\xe1\x2e\xae\x8c\x8a\xb5\x51\xd1\x9b\x1c\x3d\x89\xc6\xc9\x7a\x3e\x20\x16\x1e\xa7\x14\xb3\x6b\xae\x9a\x4d\x23\xee\xa5\xa3\x7a\xc5\xca\xc2\x6a\xd5\x98\x8d\x34\x34\x8a\x9b\xc0\x23\x26\x6f\x64\xb7\xb5\x59\xc6\xde\xd5\xa7\x5e\x21\x15\xae\x73\xb3\x05\xec\xa9\xb5\x69\x8b\x87\x7d\x2b\x72\x32\x92\xf0\x6a\xf9\x42\xab\x04\xc3\x8a\xee\x8e\x2b\x9d\xc3\x2c\x78\x25\x5f\x42\x6e\xbd\x2a\x56\x7f\xf3\x29\xf1\xf9\x65\x13\xbc\x8f\x38\xff\x64\xc8\x0b\x89\x8f\x3d\xcf\x0f\x90\x27\xe1\xe8\xb0\xe7\x29\x24\x26\x22\x06\x21\x09\x61\x04\xa9\x17\xc3\x30\xf6\x39\xc5\x31\xf5\x39\x20\x22\x00\xd0\x8f\x68\xec\xe3\x48\xf2\xdf\x0a\xe6\xc0\x57\x4f\xae\x25\x0e\xd9\x07\x9e\x12\x8e\x08\x61\x04\xa0\x37\x4b\x9c\xc1\x8f\xc6\x37\xa1\xfc\xa2\xb6\x9b\xce\xd6\xd3\x7e\x4a\x75\x34\x77\x30\xa6\x9d\x6c\x49\xef\x34\x56\x7a\xbc\x80\x16\x5c\xac\x6b\x45\xd9\xa7\xf1\x3c\x35\xa4\x9c\x17\xb3\xd4\x87\x46\xd4\xc5\x3b\x3d\x2b\x69\xf2\x70\x5e\xb0\x05\x19\x70\xd7\x97\x9d\x9a\x9e\xe6\xd9\xf4\x7a\x3b\xac\x4e\x25\x71\xbc\x32\xbe\x71\x22\xa5\x13\x63\x33\xf1\x6c\x4b\x2e\x99\x35\xdc\x8c\x17\xb9\x66\xb6\xe6\xce\x34\x13\x14\x3b\x71\x89\xe5\x4a\xb0\x1c\xd1\x94\xab\x59\x0c\x48\xa9\x05\x1c\x12\x35\xe3\xf9\x7e\xb6\xae\xae\x37\x9e\x0d\xeb\xc6\x4a\x25\x0d\x35\xcd\x46\x6c\x38\x9b\x95\x6b\xab\x71\xba\xec\xd3\x61\xff\x50\x1b\x56\x7e\x2d\x5d\xa2\x79\x79\x4c\x77\xf8\xfc\xc7\x4d\x09\x70\x1f\x71\xfe\xc9\xa4\x18\xf1\x88\x23\x5f\xe2\x31\x0f\x7c\xee\xc7\xe1\xfe\x87\x10\x00\x88\x7c\xee\x7b\x40\x80\x10\x87\x51\x00\x05\x64\x42\x08\x22\x18\x62\x3e\x8c\xa0\xef\x85\x88\x46\x1e\x7d\x20\xfe\xf5\x65\xd3\x75\x5f\x41\x80\xc7\xac\xbe\x37\x9f\x12\x24\x11\x89\x71\x24\xbd\x59\xe1\x0c\x7e\x74\xbf\x09\x8d\xb6\xf1\x28\x4f\x63\xbc\xc5\x2b\x29\xc6\xbb\x8a\x5c\x5b\xf0\xb1\x91\xb1\xf1\x3c\xa7\x78\x46\xc7\x70\x87\xf3\x28\xc7\xc0\x80\x0d\x26\x92\x43\x59\xb5\x36\x0e\xaa\xa4\x35\x69\x36\x5b\xf3\x74\x7b\x10\x8c\x72\x75\x5d\xab\xd5\xb3\x59\x87\x15\xba\x79\x29\x5e\x47\x85\x82\x7b\xac\xfa\xd7\x38\x19\x52\x29\xd5\xeb\xcd\x1b\x79\xb6\x62\x6d\x50\x76\x8b\xd9\x8d\x3d\x86\x29\x77\xdc\xee\xa2\x6d\xa6\xd6\x6b\x76\x4c\xc1\x4a\x50\xde\x98\xe5\x95\x16\xc0\xc1\xa6\x84\x06\x13\x43\xd4\xa2\x76\xce\x65\x8b\x95\xec\xcd\x27\x4b\x12\xea\x9b\x61\xa1\x1e\xce\xb4\x7e\xaf\x36\x30\xdc\x55\xfc\x50\x55\xf0\xb5\x6c\x89\xfa\xe5\x41\xdd\xe1\xf3\x9f\x36\x25\xa4\xfb\x48\xf3\x4f\xe6\xc5\x21\xc4\xd8\x8b\x39\x8e\x63\x3f\xe4\x51\x48\x59\x80\x18\x0d\x59\x88\x7d\x1e\x61\x4e\x7c\x10\x42\x0e\x28\x0c\x42\x18\xc4\x22\x92\xa2\xd0\xe7\xcc\x8f\xe2\x20\xf4\x09\xf7\xdf\x32\x12\xd7\x7d\x05\x21\x89\xb7\x66\xc4\xe3\x53\x2c\x18\x25\x1c\x50\xf6\x66\x7d\x33\xf8\xd1\xba\x35\x68\x26\x69\xbb\x19\xb6\xd2\xab\x26\xaf\xfb\x6a\x2b\xf4\xed\x45\xaa\x04\xe6\xa5\xec\xda\x09\x40\x90\x2a\x8f\x16\x0b\xb4\x5a\xed\xfc\x2a\x37\xa0\x57\x76\x52\xfa\x62\xb7\x82\xee\x76\x5c\x6e\xa4\x4a\x4e\x73\x3c\xef\x69\x6b\x56\x6d\x65\x3b\xeb\x45\x19\x5a\xc5\x91\x5c\x95\x17\xcb\xe3\x8c\xa8\x9f\xe6\x5e\x37\x2b\x85\xc6\xb2\x8d\x8c\x16\xca\x91\xea\x68\xed\xcc\x54\x7b\x65\xac\xcb\xcc\x2e\x4e\x96\x08\xa6\x6a\xc8\x69\x76\xa6\x85\x7c\xc3\xd6\x73\xf2\xba\x49\xb7\x20\x5b\x77\xb4\x5e\x26\xa4\x6e\xa6\xeb\xf3\x75\x27\xed\x97\x6a\x9b\x16\x03\xcc\x2d\x82\x0c\xb5\xa4\x55\xb7\x5d\x3b\xcc\x88\xd7\x72\x25\x6a\x97\x05\xc4\x0f\x9f\xff\xb4\x19\x21\xee\x23\xcd\x3f\x41\xe0\x7b\x34\x64\x44\x30\x1f\x08\x10\x20\x20\x11\x12\x8a\x08\x01\x2e\x42\x0f\x50\x41\x49\xe4\x93\x90\x09\x1f\x04\x84\x78\xdc\xe3\x20\x06\x2c\x8c\x7d\x1f\x89\x00\x88\xc3\x35\x5c\xe4\xf0\xef\x15\xe1\xbe\x7a\x72\x2d\x49\x12\xbd\x7e\xf7\xca\xf3\x53\x4c\x30\x95\x38\x16\xf8\xcd\xea\x66\xf0\xa3\x1b\xb0\xeb\x2d\x6b\x36\x6a\xb9\xb9\x91\x51\x55\xc7\x76\x49\x3b\x2a\x8d\xb3\x1d\x87\x01\x38\x9e\x17\xab\xf9\x68\x94\x59\xfb\xf1\x72\xdb\x93\xdb\x66\x2b\xdd\xae\xeb\x1d\xa2\xe5\xc6\xd5\x66\x6f\xa3\x0c\xcc\x66\x3b\xf4\xd9\x98\xd2\x88\x16\x2c\x45\xa4\x67\xc6\xa2\x99\xea\x2a\xc5\x61\xfb\x78\xcd\x44\xfd\xc4\x93\xa0\x71\x07\x64\xaa\xad\x54\x39\x8e\x64\xd2\xd5\x71\xce\x2e\xfa\x39\x16\x4c\xcd\x9c\xb6\x01\x53\x95\x72\x04\x99\xee\xdb\xeb\x8a\xe5\x80\xce\xae\x5c\x01\x0b\x6d\x3d\x0e\x41\x23\x9f\xcb\xd0\x7e\x91\x15\xd6\x75\xbd\x90\xf7\x8d\xf2\x4e\x19\xfa\x69\xa9\x66\xac\xb5\x31\x51\x0e\x72\xff\x5a\xa6\x44\xf5\xb2\x80\xf8\xe1\xf3\x37\x9f\x11\xe4\xb3\x33\x82\xdf\x47\x9a\x7f\x46\x94\xf9\x12\x96\x50\x0c\x24\x22\xa1\x98\x00\x41\xb8\x90\x3c\x16\xf3\x28\xf2\x30\xe2\x24\x64\x92\x04\x03\x09\x8a\x50\xa2\x40\x62\x00\x48\x91\x24\x68\xec\x47\x2c\x00\x21\x78\xd3\x91\xb8\x62\x05\xc8\x3f\x01\x84\x44\x5c\xf1\xbc\x4f\x9e\x62\x00\x18\xe1\x1c\x82\x37\x6b\x9b\x7d\x34\x9d\x2e\x55\x9f\xf5\x69\x61\x3d\x30\x0b\x40\xd5\x22\x73\xb2\x8a\x97\xe3\x6d\x58\xf2\x5a\xba\x99\x2b\x0d\x2a\x83\xb6\x1a\x0d\xb3\xa9\x94\x2f\x03\x73\xe6\x20\x65\x44\x3c\xbb\xe7\x16\x0b\x93\x4c\x1c\xc7\x46\x3a\x62\x7a\x06\xe7\x6a\x55\x55\x33\xc7\x44\x9e\xb9\x8b\xae\x44\xca\x8d\xe9\x31\x94\xa3\x7e\x9a\x76\x4d\xf5\x72\x65\x82\x6d\xd5\xd8\x96\x9d\x9e\xa8\x0f\x4b\xb9\x59\x67\x8e\xd4\x94\xd1\xec\x49\x04\x4d\x46\x78\x6a\xd5\x0d\xb9\xd9\xdc\x30\x17\x73\x31\xb3\xba\xf3\x4a\xda\x6a\x54\x0b\xde\x6e\x53\x54\x07\x85\xb5\x28\x20\xa7\x6f\x84\xd2\x98\x91\xc8\x98\x0c\xbc\x7a\x5f\x3c\x5c\xb7\xfd\x5a\x9e\x44\xfe\x32\xc5\xf4\xf0\xf9\x9b\x4f\x88\x4f\x9b\x08\x76\x1f\x61\xfe\x19\xd3\x58\x0a\x60\x1c\x70\x00\x28\x87\xa1\x47\xc3\x18\x84\x2c\x02\x51\x10\x85\x9e\xcf\x45\x1c\x09\x18\xb1\x98\x31\x40\x49\x44\x30\x45\xb1\xc4\x3d\x1c\x83\x20\xc6\x21\x8d\xdf\xcc\x30\xc5\x57\x4e\xe1\xc8\x3f\x01\x82\xd7\xa7\xc3\xc3\x33\x44\x39\x93\x04\xc0\xfc\xcd\xa2\x66\x1f\xae\x1b\xde\xa4\xeb\x78\xb3\x56\x9a\xba\xd7\x8c\x33\x0d\x52\xde\x2d\xa6\xb8\x97\x6a\x47\x3e\x72\xb3\x76\xbf\x54\x4b\x35\xc7\xe9\x8c\x65\xd5\x05\x2e\x6d\x25\xde\x4f\x83\x2c\x92\x1b\x3a\xb2\x2c\xd6\x53\x36\xe3\xd0\x68\x16\xdb\xbd\x61\xb5\x60\xae\x3b\x99\x45\x59\x2c\x2a\xad\x76\x2c\x8e\x5b\xaf\xf5\x93\xc1\x2c\x89\x0a\x92\x17\xaa\x3a\x8f\x06\x44\x37\xe6\x79\xb2\x0c\xa7\xcd\x6d\xa1\x32\x0d\x66\x5e\xae\x17\xc8\x7a\xbd\xe6\x94\x04\xa4\xed\x59\x76\xdd\x0c\x46\x4b\xdd\x81\x4b\x67\x92\x9b\xda\xce\xc2\x37\xd2\xdb\x96\x05\xb7\xee\xaa\xa2\x8d\xba\xf2\xb2\x18\xa3\x4e\x77\xdd\xf5\x16\x87\x7a\xb0\xf2\x6b\x19\x12\xe6\x65\x3d\xd8\xc3\xe7\x3f\x6d\x32\xd0\xfb\x08\xf2\xcf\x00\x31\x00\x25\x08\x51\xc4\x43\xe8\x61\xc0\x7d\xee\x33\x4f\x10\xec\x85\x94\xc5\x21\xc7\x3e\x85\xb1\x1f\x06\x28\x62\x98\xc6\x11\xf7\x41\x1c\x04\xc2\xf7\x22\xc2\x22\x89\x40\xfe\x46\x0c\x07\xbe\x72\x60\x4d\xfe\x09\x30\x7d\xc3\x38\xec\x1f\x1e\x4e\xfd\x20\xe1\x44\x60\x46\xde\x2c\x68\xf6\xd1\x4d\x26\x61\xb6\x73\x55\x6d\x19\x57\xc7\xeb\x08\x2f\xa6\x9d\xcc\xac\xee\x4b\x01\x77\xe2\x55\x50\x18\x96\x62\xca\x33\x62\x5b\x98\xf5\xfd\x49\xa5\xb9\xdd\x49\x5d\x17\xcd\xf4\xce\x7a\xe9\xac\xca\xd9\x65\x41\x63\x43\x65\x65\x97\x09\xeb\x18\xa9\xe6\x26\x8f\x4c\x1a\xc0\xc5\xb2\x30\x3f\xb9\x0c\xde\x39\x59\xc5\xf7\xd9\xaa\x9c\xce\x57\x37\xeb\x16\xd8\x8e\xcc\x62\x71\x96\x77\x26\xe5\x5a\x4c\x1b\x1d\x3f\xec\x97\xfa\xa0\x60\x94\xd3\xbb\xd6\x46\x49\x4d\xa3\x26\xf7\xdc\x1c\xd8\xe1\xe6\x30\xbb\xde\x0c\x67\x98\x58\xb3\x4d\xa7\xbe\x15\xb5\xea\x6e\xe0\x14\x73\xbd\x8e\x5d\x68\x44\xb8\x9b\x1a\x3c\x48\xf5\x6b\xe9\x11\xfa\xbf\xe3\x71\xf5\xa7\x23\x38\xc8\x7d\x64\xf9\x27\x26\x30\x8e\xa5\x80\x48\xc2\x97\x00\x67\xb1\x88\x11\xf4\x22\x8f\x0b\x0f\x63\x3f\x00\x01\xc3\x92\xe7\xd3\x20\x96\x04\xf3\x42\x3f\x40\xa1\x08\x01\x09\x25\xe4\x53\x4f\x0a\x59\xf8\x56\x99\x1a\x7c\xe5\xb4\x9a\xfc\x13\x50\xc4\xaf\x9d\xcd\x9d\x3c\x3d\xb9\xa7\xee\xed\xd3\xea\x0f\x4d\x88\x5d\x25\x4e\x05\x35\x77\x59\x09\x57\xbd\x6d\x6e\x39\x21\xe3\xdd\x4a\xde\xf4\x86\xb3\xa6\x35\xcc\xcd\xfc\xf5\xa2\x57\xb1\x5b\x79\x38\x0d\xfd\xb8\x96\x6a\x46\x31\xc9\x36\x9b\x86\x8d\xfa\x01\x6c\x06\xf1\x6e\x54\x86\xb2\x6b\x49\x66\x69\x99\x51\x0d\x68\x66\x9b\xfa\x64\xe4\x48\xc6\xd1\x40\x38\x27\xee\x83\x21\xb2\x91\xae\xed\x4c\x90\x26\xd9\xb2\x48\x97\x72\x69\x82\xd7\xb6\x36\xda\x42\xb5\x91\x5e\x05\x3a\xea\x05\xb3\x4a\x7f\xe7\xfb\x41\x2f\x95\x8d\x59\x26\x6e\x8f\x48\xb6\x62\xe7\xcc\xe6\x00\xcf\x53\x1b\x65\xba\x55\x46\xa9\xe5\x4a\xb3\x34\x77\x3d\x9d\x59\xf6\xcc\xd2\xd2\x0f\x06\xe8\xb5\xe4\x88\xcc\xbf\xe3\xd9\xdc\xe7\x8b\x5e\xde\x47\x98\x7f\xc6\xa1\x84\x98\x08\x21\x0b\x39\x05\xd0\x67\x91\xcf\x25\xca\x7c\xc6\x29\xf3\x91\x88\x23\x82\x83\x88\x7a\x0c\x40\xe0\x73\x16\x71\xce\x42\x09\xc6\x0c\x44\x34\x8a\x42\xee\xbf\x71\xfd\x10\xfd\x03\x5d\x39\x7c\x23\xff\x04\x8c\x42\x7e\xc5\xdd\x7e\x7c\x4a\xcf\x6b\x5e\xbe\xe5\x50\x7f\x74\xc5\x84\x6a\x5e\x29\xbb\x08\x2b\x39\xc4\xf0\xa0\xb1\x18\xd5\x67\x79\x8b\x66\x76\x83\x49\x5b\x2b\x84\xcb\x10\xa1\xaa\xd4\xa6\x11\x6f\xce\xa7\x99\x56\xae\xa2\x68\xd0\x9d\x8f\x17\xc6\xac\xda\xec\xaf\xf9\x86\xa5\x83\xbc\x15\xa2\x5d\x59\x55\x96\x3b\xae\xa3\xea\xa0\x3a\xae\xe5\xdc\x63\x40\x93\x73\x22\xa3\xd4\x1a\xad\xb4\x55\xb1\xac\x89\xfe\x36\x33\xc7\x39\x7f\x09\x3b\xe3\xa5\x08\x86\xe3\xf5\x1a\x1a\x7c\x33\x75\x73\x65\x7f\x01\x5a\x63\x30\x6e\xc9\xf9\x0c\x75\x60\x75\x53\xda\x8a\xf1\xaa\x97\x22\xe5\x5e\x91\xcc\x0c\x05\x58\x69\x15\x07\x95\x54\x47\x2d\xc8\xb3\x22\x91\xda\x87\xaa\x4d\xf2\x6b\xc9\x11\x2f\xef\x32\x95\xff\x03\x27\x04\xba\x8f\x30\xff\x64\x38\x94\x44\x4c\x31\x8b\xa2\x3d\x94\x8f\xb8\x4f\x7d\x21\xc5\x08\x7b\x31\xc5\x10\xfa\x9c\x32\xc9\x43\x24\xf6\x62\x48\x00\xf6\x42\xe0\x53\xe4\x33\x8c\x7d\xc0\xfd\x48\xda\xcb\x3c\x38\xfc\x7b\x65\x42\x5c\x5f\x14\x71\x86\xae\xdd\xc7\x75\xf2\xf4\x98\x3f\xf7\xc6\x7c\xf8\xe0\x7e\xab\xd5\xea\xc1\xd2\x92\x8e\x81\x6f\xf2\x06\x19\x6d\xcb\x2b\x67\x93\xc3\xf5\xc9\xb8\x9f\x5a\x65\xe5\xf2\x42\x85\x79\x54\xe4\x0a\x67\xad\x65\xab\xaa\xcf\x24\x27\x6c\xe6\x7d\x3b\xdf\x0d\x06\x71\xb9\xb7\xe5\xc8\x6d\x65\x4d\xa7\x6f\x5a\xf5\x20\x6f\xd3\xce\x62\x35\x9e\x0d\xe1\xf1\x50\xee\x61\xe5\x64\x3c\xff\x27\x3f\x1c\xa2\x1d\xdb\x6b\xd9\xaa\x3c\xca\x2d\xde\x49\x9d\xa1\x5c\x9b\x14\xa4\x85\x5c\xdf\xf4\x17\x9b\x0c\x6e\xd6\xca\x13\xdc\x5d\x6c\x6a\x2b\x6d\x58\x64\xb2\xd3\x5f\x2b\x35\xa2\x55\x47\xab\x54\x61\xb1\x48\x6f\x83\x5d\x7a\x23\xd2\xa9\x41\x56\x11\x60\x36\xaa\x6f\x78\x0f\x15\x67\x43\x24\x69\x93\xe5\xdc\xa9\xa6\xda\x2b\xe9\xe1\xb4\xfa\xb5\xbc\x89\xd7\x3f\x7f\xf3\xd9\x02\x3e\x7d\x68\x77\x1f\x49\xdf\xbf\xf1\x59\xde\xa1\xc4\xc1\x3f\x00\xfc\x07\x80\x3f\x00\xf8\xe3\xf0\xef\xaa\x44\x0b\xc4\xd8\xf5\xd9\xf0\xf4\xf4\x78\xea\xf6\x69\x79\x7f\x20\xe9\xaf\x1e\x9a\xeb\x1f\xa5\x99\xef\x92\x6d\x7a\x5b\xcb\x2b\x3c\x33\xca\x48\x3a\x02\x9b\x9e\x92\x9a\x83\xf6\x62\xbe\x36\xd6\x3b\xd8\x0c\x6b\x0d\xd7\x53\x4c\x2f\x7b\x58\x69\xbd\x96\xef\xf0\xfa\xe7\x49\x94\xaf\x19\x86\x5f\xf9\x73\x29\xca\xff\xf5\x5f\xff\xf8\xc7\x7f\xfd\xe3\x1f\x3f\x32\xde\xc2\xfb\x11\x8f\x67\x3f\x4a\xde\x30\xfa\xe3\x59\xaa\xc7\x93\x68\xe6\x2d\xba\xe3\xd1\x9f\x13\x6f\xb6\xe8\x06\xdd\x89\x37\x5a\xcc\xff\xef\x0f\x7b\x3b\x89\xfe\xf8\x61\xcb\x4a\x41\xfb\x91\x91\x6d\xf9\xff\xfe\xa8\x05\x9d\x68\xe8\xfd\xf1\x63\xb2\xf4\x07\xdd\xe0\xff\xfe\x28\xaf\x47\xd1\xec\x8f\x1f\x7b\xf0\xff\x7a\x75\xc2\xbc\x0e\x7d\x3a\x7f\x10\x83\x92\x84\x01\x90\x20\xc5\xbf\xff\x80\x57\x26\xde\x3b\x38\xe8\x79\x5f\x88\x40\x41\x79\x62\x1c\xbc\xc7\xc1\x04\x60\xc0\x09\x65\x30\x31\x0e\xf9\xfd\x07\x22\x12\x04\x02\x02\x8e\x18\x4d\x8c\x43\xf7\x38\x44\x40\x0c\xb1\x24\x31\x29\x31\x0e\xbb\xc4\x41\xc9\x70\xf8\x21\x19\x84\x42\x01\x39\x62\x1c\xff\xfe\x03\x27\xc3\x11\xbf\xff\x40\x98\x21\x84\x11\xa0\x98\xf3\xc4\xf4\x48\x97\x38\x09\xe9\x81\x7b\x8f\x10\x43\x09\x09\x84\x05\x10\x30\x31\x41\xfb\x95\xc1\x39\x10\x49\x08\x84\xce\x80\x50\x72\x20\x7c\x09\x94\xb4\x6b\x7b\xa1\x46\x9c\x61\x8c\x38\xe0\x82\x26\x07\xa2\x97\x40\x49\xbb\xb6\x17\x6b\x84\x31\x16\x18\x60\x22\xa4\xdf\x7f\xd0\x84\x40\x7b\x09\x84\x12\x20\x18\x63\x06\x25\x9c\x1c\x48\x1c\x37\xe4\x84\x90\x78\x72\x20\xe9\x90\x63\x42\xf6\xca\x08\x32\x00\x13\x03\x21\x70\x04\xa2\xec\x06\x8a\x10\x3c\x02\x49\xfc\x06\x1e\xa1\xbd\x08\x02\x06\xa9\x20\x98\x60\x90\x5c\x8e\x10\xbe\x04\x4a\x4a\xd1\x5e\xb2\x01\x14\x0c\x13\xc6\x01\x48\xae\x1e\xd1\x5e\xd3\x4b\x9c\x32\x41\x24\x89\xef\x67\x1e\x4b\x08\xc4\x9e\x80\x28\xc0\xe2\x16\x8a\xf6\xb6\x50\xc2\x88\x63\x8a\x11\xd9\xcb\x79\x52\x8a\xc4\x25\x50\x52\x8a\xf6\x56\x6c\x3f\x37\x04\x65\x14\xa2\xe4\xaa\x16\x83\x4b\x20\x9e\x10\x68\x6f\xe7\x05\x61\x02\x53\x89\x8b\xfd\x18\x26\x05\x42\x97\x40\x49\xbb\x86\x0f\xd9\x03\x58\x08\x86\x01\xdd\x73\x4c\x24\x04\x22\x97\x40\x52\x42\xa0\xbd\x64\x73\x06\x24\xcc\x18\x46\x7b\xfa\x92\x52\xc4\x2e\x81\x92\x52\xc4\x8f\x40\x1c\xdf\xc2\x23\x71\x09\x94\x94\x22\xe9\xb8\xf9\x4c\xa5\x3d\x7d\x09\x81\x0e\x99\x87\x07\x20\x0e\x00\xb8\x81\x47\x64\x2f\xd9\x8c\x53\x80\x39\x12\x6c\xdf\x4a\xc8\x23\x82\x9e\x6f\xf6\x67\x10\x93\xe4\x92\x4d\xf0\x25\x50\xd2\xae\x91\x23\x10\x25\x24\xb9\x1a\xd9\xd3\x70\x0e\x94\x94\x47\xec\xf9\xa6\x77\x89\x00\xb2\x17\x06\x90\x10\x89\x1f\x2f\xc8\x66\xfc\xe0\x16\x25\x45\x12\xc7\x6b\x85\x25\x72\x70\x8c\x92\x22\x49\xcf\x97\xb1\x4a\x08\x1e\x5c\xa3\x84\x48\x14\x1c\xaf\xb0\x24\x82\x25\x97\x25\x0a\x2f\x81\x12\x93\x84\x8e\x37\x08\x72\x7a\xf0\xb3\x92\x3a\x6c\xf8\x19\x89\x41\x76\xa0\x29\x29\x12\x79\xbe\xc1\x4d\x02\x68\xef\x6b\x25\x46\xa2\xcf\x67\x00\x08\x49\x7b\x2f\x29\x31\x12\x3b\xde\x16\x44\xd9\xde\xbb\x49\x8c\xc4\x8f\x77\xac\x08\x2c\x6e\xe1\x93\x78\x46\xda\x8b\xc1\x2d\x34\x49\x47\x24\x46\x6f\xe1\x13\x03\x4f\x48\x10\x00\x76\xcb\xd8\x1d\x26\xda\x23\x12\xe1\xb7\x48\x26\x43\x47\x24\x21\x6e\x91\x4c\x86\x9f\x91\x20\x92\xd8\x0d\x1c\x3f\xc4\x3c\x3f\xdc\x2a\x82\x20\x10\xc9\x97\xb9\x0f\xdd\x39\x05\x4a\x4c\x12\x7b\xbe\xd4\x81\xe2\x83\x9b\x03\x93\xd2\xc4\x8f\x48\x5c\x1c\x68\x4a\x8a\x24\x8e\x45\xf5\x19\x91\x92\xaf\xbd\x0f\xf2\x73\x06\x94\x94\x24\x0e\x8e\x35\xcd\x25\x04\x0e\x9a\x38\x21\x12\x7c\xaa\x04\x4d\xa1\xb4\x77\xe2\x60\xc2\x3d\x1c\x8e\x9e\xeb\xe7\x12\xb6\x77\x99\x12\x03\xe1\xe7\xaa\xa3\x1c\x1f\xb6\x4f\x12\xe2\x90\x0b\x9c\xc4\x04\xd1\x27\x20\x04\xc9\x0d\xce\x20\x67\x17\x38\x89\xc7\x8c\x3f\x1d\xa2\x51\x00\xf6\xbe\x20\x4c\xe8\x55\x72\x71\x09\x94\xd0\xf5\xe2\xd2\x53\x15\x40\x81\x38\x82\xc9\x29\x12\xe0\x12\x28\x21\x45\x7b\x4b\xf4\x58\x84\x8d\x92\xc3\xc6\x40\xc2\xdd\x09\x81\x2e\x81\x92\x76\x0d\x3f\x03\x49\xf4\xd0\xb5\xa4\x14\x91\x27\x20\x84\xd9\x61\xd4\x92\x02\xd1\xe7\xaa\x5c\x02\x1e\x36\x06\x92\x76\x8d\x3d\x01\x51\x84\x0e\x3c\x4a\x3a\x6a\xfc\xa9\x28\x92\x00\x02\x27\x9f\xfb\x42\x5c\xe0\x24\xee\x99\xf4\x0c\x44\x24\x94\x7c\xee\x4b\xe0\x02\x27\x29\x87\x24\xf8\x0c\x24\x81\x1b\xf6\x38\x24\x74\x81\x93\x54\x88\xf6\x36\xfa\xa1\x68\x0f\xc4\xf4\xb0\x2b\x90\xd0\xa5\x94\xc8\x25\x50\x42\x4f\x50\xa2\xcf\x35\x53\x18\x3a\xf8\xe0\x49\x29\x62\x97\x40\x49\x29\xe2\x4f\x40\x14\xe0\x9b\xba\x26\x9e\xab\x5f\x08\xe9\x86\x7d\x00\x49\xba\xc0\x49\xca\xa2\xc3\x19\xf5\x03\x92\xc0\xe0\x86\x7d\x00\x78\xd8\x64\x3f\x05\x4a\xca\x23\x08\xd0\x53\x3d\x04\x08\x19\x39\xec\xe4\x27\x45\xc2\x97\x48\x09\x3d\xdc\xc3\xb5\x33\x8f\x09\xe9\x04\xd3\xe4\x8a\x0d\xee\x97\x68\xe7\x40\x89\x3b\xc7\x9e\x43\x13\x38\xd8\x3b\x84\x28\x31\x4d\xfc\x12\x29\x29\x90\x38\x05\x12\xb7\x90\x24\x5d\x22\x25\x3d\x50\x04\xcf\x49\xa2\x12\x67\xb7\x9c\x4c\xc2\x4b\xa0\xc4\x48\xe8\x29\x4b\x8f\x20\x72\xd8\xc0\x49\x7a\xec\xba\x5f\x15\x9f\x23\x25\x05\x22\xcf\x40\xec\x70\x70\x9f\x9c\x24\x7a\x89\x94\x14\x88\x3d\x01\x51\xc0\x0e\x42\x99\x98\x24\x7e\x89\x94\x14\x48\x3c\x03\x91\xc3\xbe\x62\x72\x92\xa4\x4b\xa4\xa4\xc7\xdc\xe0\x39\xbf\x8d\xc2\x1b\x22\x13\x0e\x07\x40\xe7\x40\x49\xfb\x86\x8e\xd1\x24\x5c\xec\x9d\x41\x94\xf8\x0c\x1f\x3f\x1d\x07\x13\x70\xd8\x50\x4a\x8e\x44\x9e\x91\x08\xbb\x8d\x26\xfa\x8c\x24\x0e\x1b\x4a\xc9\x91\xd8\xf3\x31\x05\x46\x87\x98\x89\xc4\x48\xfc\x12\x29\x29\x90\x78\xde\xea\xa4\xd2\x2d\x21\x0a\x87\x15\xf2\x19\x10\x3d\x89\xa3\xfa\x48\xf8\xd4\x9f\xdd\xf0\xcf\x79\x34\x7d\x8a\xa2\xaa\x69\x15\x47\x2b\xa9\xda\x8f\x9a\x66\xbf\x13\x47\x55\xd3\x0a\x9a\x6a\xff\x98\xb4\xff\x0c\xbc\x85\x37\x18\xb7\xff\x39\x8f\x16\x2b\x6f\xf0\x7f\x7e\x7e\xe8\x8d\x87\x88\x6f\xe9\xf7\x1f\x8b\xd9\x32\xfa\x44\xec\xd7\x9d\xe3\xbd\x4e\xcf\xb2\x4f\x03\xbc\x4e\x5a\xe8\x21\xe6\x1d\xfe\xfe\xe3\xe7\xbf\x7e\xf3\x97\xc3\xc9\x9f\x8b\xf1\x6f\x7f\xfc\xf8\x0d\x1f\xc3\x12\xf1\x6f\xff\xdf\xcf\xdf\x7f\xfc\xcc\xa9\x95\x96\x85\x0d\x87\x37\x1d\xa6\x99\x0c\x9b\xad\x66\x5e\xad\x94\x5d\x1b\x55\x4b\xcd\x12\xd6\x15\xaa\x96\x74\xad\x54\x72\x34\x47\xaf\x15\x65\x52\x77\x4c\xd3\xac\x69\xa5\x9f\xef\x8d\xfe\xe9\xd1\xfd\x69\xf8\xd8\x49\x8b\xbd\x4f\x25\xfc\x46\x2a\x4f\x83\xd3\x4e\x5a\xe0\x0a\x95\x10\x80\xef\x23\xee\x2c\xe2\xed\xa4\x45\xde\x67\xe1\x77\x52\x79\x16\x07\x77\x6c\x89\xa7\x68\xf9\x9f\xff\xfa\x2d\x5e\x8e\xc2\x68\xb6\xa7\x31\xa7\x54\x2d\x57\x37\x0a\x48\x35\x70\xb6\x54\x21\x4a\xb3\x90\x2d\x96\x32\x85\xac\xe9\x94\x2c\x07\xe9\x2e\x6e\x15\xb3\x35\xbd\x5c\x72\x54\xad\x2c\xd7\x1a\xbc\xa2\xf2\x72\x13\xe9\xbf\xfd\xfe\xe3\x37\x2f\x08\xc6\xcb\xd1\xe2\x00\x93\xb0\x63\x7b\x98\xf9\x62\x3f\xc9\x47\xed\x3f\x7d\x6f\xe0\x8d\x82\xe8\x71\x5c\xc1\x3f\xcf\x59\x97\x90\xd0\x4f\xb1\xee\x34\xf4\xef\xa4\x85\x9e\xb3\x57\xfe\xf5\xdb\xc3\xd0\xe6\xe4\x52\xb6\x95\xa9\x2a\x6a\xc9\x76\x9a\x46\x39\xa3\x9a\x9a\x5b\x94\x55\xab\xa8\xd6\x5a\x5a\x5d\x23\x8d\x56\xae\x85\xd5\x56\xa6\x85\x2d\x54\x6b\xe6\x49\x5e\xe7\xd4\xc8\x33\x77\xdf\xdf\x78\x36\x1e\xde\x8a\xe1\x0d\x9f\x38\x0f\x8f\x7c\xda\xff\x7e\x3e\x8f\x16\x7f\x2e\xb6\x93\x03\x17\x47\xde\xa2\xbb\x8a\x1e\xf9\x97\xf0\x6d\x9f\xe1\xdf\x79\xc8\xe3\xb1\xc5\xbe\x54\xf4\x6e\x60\xe3\xaf\x23\x7a\xe7\xc1\x99\xc7\x16\x78\x45\xf4\x54\xd3\xd2\x88\xeb\x54\x11\xaa\x5b\x44\x2d\x22\x25\x93\xcd\xc8\xba\x8b\x33\x05\x2d\x8b\x75\x5e\xd2\x4a\x79\xa7\x42\x71\xc6\xa6\xb6\x66\xa0\x9c\xac\xdb\xb4\x44\x9a\x67\xa2\x77\x0b\xeb\x3f\x2f\x7a\xdf\xca\x3f\x74\xc9\x3f\x74\xc1\xbf\x1b\xfa\x7e\x9c\xba\xc9\xc7\x20\xc9\xd4\x4d\xf6\xb6\xcf\xf0\xef\x3c\xf0\xf5\xd8\x22\x5f\x3b\x75\x93\xb3\xf1\xd7\x99\xba\x67\x11\xba\x27\xad\x07\x83\x0b\x1f\x78\x37\xf2\x86\x8f\xe3\x3a\x8c\xe0\x9e\xfe\x95\x37\x58\x1e\x7e\x53\xcc\xc8\xeb\xa2\xfc\xdf\xff\xfd\x34\xd6\x6e\x4d\x2d\xe6\x2b\x2e\xd3\xdc\x42\xb3\x6c\xd9\x36\x33\x2d\xab\xdc\xcc\x14\xeb\x25\xa5\x61\xd8\x96\x5d\x6b\x19\xf5\x46\x83\x14\x1a\x72\xb5\xae\x94\x6d\x9d\x56\xed\x82\x9c\xf9\x0c\xc1\x67\x91\xc0\x27\x2d\xf4\x41\x82\x6d\x63\x57\xfa\x5e\x82\x4f\x23\x8e\x4f\x5a\xec\x1a\xc1\xe8\x94\xe0\xd1\x72\x30\xf8\x3e\x52\x4f\x63\x9a\x4f\x5a\xe0\x97\xe5\xed\x69\xec\xf4\x49\xeb\x63\xbc\xfd\xad\x64\xbb\xb8\xfc\x57\x10\xfc\x10\xa3\x7d\xd2\xba\x2a\xbd\x3f\xce\x08\xf6\x9a\xd5\x9d\x91\x0b\x57\xa1\xaa\xec\x82\x5c\xb6\xd7\x6a\x16\x3b\xdf\x47\xfc\x79\x5c\xf8\xb1\xf5\xc5\x6a\x36\x59\xc7\x7e\x2d\x35\x7b\x1e\xc0\x7e\x6c\x3d\xa8\x59\x69\xcf\xba\xef\xa2\xe5\x3c\x06\xfe\xa4\xf5\x20\x83\xf4\x30\x8c\xdd\x51\x3c\x78\xd8\xc4\x08\xa3\xf9\xc3\x38\x64\xaa\x14\x37\x64\xcd\xc8\x97\x1d\xdc\xca\x97\x30\x51\x6b\xba\xdc\xd0\xb9\x5e\x67\x79\x86\x55\xc5\xac\x3a\x76\xc3\xc9\x28\xd9\x5a\xd1\xe5\xd5\x6a\x25\x8f\x6b\x56\xbe\x5c\x7b\xe4\x71\xc2\x6f\x7f\xba\x5f\x4f\x21\xf9\x27\x2d\xf1\x76\xbf\x92\x8a\xe9\xf7\x8d\xd7\x69\x60\xff\x49\xeb\x6b\x1d\x93\xa4\xc3\x7d\x65\xda\xa1\xe3\x6e\xc2\xb7\xcf\xbe\xf3\x44\x84\x93\xd6\x83\x5d\x13\x8f\x92\x71\xfb\x0a\xfb\x6c\x4f\x41\xb7\x9a\xb9\x7a\x26\x6f\x65\x69\xde\x26\x6a\x49\xb6\x79\x93\xf3\x72\xd3\x6d\x71\xb7\xae\x11\x53\xcf\x67\x33\x8e\xae\xe6\xd4\x7a\x43\x2d\x90\x3c\xb1\x2a\x8c\xe7\xf3\xad\xa7\xad\x96\x64\xdf\xfe\x14\x53\x4e\x73\x21\x4e\x5a\x5f\xab\xcd\x93\xb2\xe5\x57\xd2\xe6\xe7\x49\x1b\x27\xad\x07\x4d\xc3\x1f\xfc\xb5\xd9\x72\xbe\x88\xa2\x87\xb9\x44\x6a\xc5\xb2\x86\xeb\x56\x2d\xcb\x5b\x55\xac\xda\x5a\x05\x5b\xd4\x29\xd9\x4a\x51\x33\x33\x32\xca\x15\x9a\xb6\x5e\xe5\xc5\xa2\x5c\x95\x4b\xf9\xbc\x99\x69\xf1\xaa\x95\xcb\xee\x3b\x7d\x80\x19\x3f\x0c\x81\x5a\x6f\xd0\x82\x5a\x6d\x65\x2d\x6e\x69\xa5\xa6\x2d\xe7\xca\x75\xa3\xd2\x94\x33\x99\x92\xd3\x6c\xb6\x4c\xb5\x94\xcf\x92\x7a\x45\x41\x46\x9e\x37\x50\xc1\x32\x1b\x59\x8e\x9d\xdc\x61\x08\x96\x8b\xce\x78\xd6\xdd\xed\xe9\x89\xbd\xc1\x3c\x7a\xf6\xd9\x82\x71\x78\x20\x52\x73\xaa\x2f\x1d\xb9\x60\x16\x85\xdd\xc5\x9f\xde\x60\xd2\xf1\x46\xcb\x21\x39\xfe\x45\x77\x3e\x5f\x3e\x4a\x46\xd2\xde\x3d\x1a\x86\x64\xdf\xfe\xcc\x70\x9d\x65\xb4\x9c\xb4\xd0\xdf\x62\xb8\x16\xb3\xe5\xcb\xd1\x72\x6a\x99\x7f\xf3\xd1\x7a\xc8\xf6\x39\x69\xfd\x3d\x26\xd7\xab\xa3\xf5\xef\x3c\xb7\x4e\x53\xaa\x4e\x5a\x0f\x8b\x13\x76\x18\xad\x41\x77\xd8\x3d\x68\x7f\x09\x21\x8c\x39\x02\x98\x09\xfa\x4f\xc2\x39\x15\x80\x3f\x8f\xc3\xaf\x33\x9c\xbf\xc4\x4c\x4b\xd8\x81\x4f\x8f\xdd\x53\x16\xdb\x49\x0b\xfd\xbb\x8c\xdd\x5f\x35\xef\xbe\x61\xec\xce\x12\x07\x4f\x5a\xe0\xc4\xd9\xd9\xf7\x29\x1e\x78\xed\xf9\x6f\x7f\xfc\xf8\x7f\xf0\xf7\x1f\xe8\x7f\xf6\xab\xa8\xa7\x5f\xfe\x79\xf8\xf5\x41\x79\xfd\x39\x8b\xa6\xcb\xee\x2c\x0a\x9f\xb4\xd9\x9f\xb3\x68\x35\x0e\x3c\x7f\x10\xfd\xf6\x3f\xdf\xa6\x4a\xce\x32\x0f\x4f\x5a\x5f\xbc\x20\x4d\x2e\x6c\xbf\xce\x82\xf4\x2c\x45\xf2\xa4\x05\xbe\xd6\x45\x4c\x3e\xdd\x7f\x1d\xd6\x9d\x27\x85\x1e\x5b\xe2\x35\x25\x78\x76\xe6\x71\xaa\xf9\x6e\xe0\xe8\x99\xe6\x33\xf3\x66\xd3\xca\x2b\x59\x43\x2f\x97\x31\xa1\xb4\xd1\x6c\xe4\xa8\x9a\x51\x5a\xcd\x4a\xc9\xcd\x56\xab\x39\x43\x75\x8b\x96\x53\xc1\x54\xb5\x2a\xa4\x51\xaf\xe1\x7c\xab\x70\x57\xab\x75\xdb\x76\x48\xc2\x0e\x7c\x6a\xc0\xce\x72\x6f\x8f\xad\x57\xad\x16\x04\xff\x3b\x64\xbf\xc0\x90\x9d\x25\x39\x1f\x5b\xaf\x2e\x12\xff\x77\xc8\x7e\x85\x21\x3b\xcf\x26\x3f\xb6\x40\xd2\xb5\xe1\xff\x8e\xdd\xf7\x8d\xdd\x59\xda\xfd\xb1\xf5\xc5\x0b\xa9\xe4\x23\xf3\xeb\xac\x06\xce\xeb\x0c\x1c\x5b\xa7\x67\x08\xc1\x20\xf2\x66\x2f\x17\xd6\x27\xbf\xfe\xdc\xd2\x5a\x35\xb2\xd9\x6a\x25\xaf\x17\x75\x66\x66\xb8\x9a\xa7\x65\x83\x34\xeb\xaa\xab\x16\x4b\xd5\x52\x96\x59\xae\xcc\x4d\x5b\xad\xe2\xac\xa5\x5b\x66\xab\x62\xbb\x6e\x56\xa1\xda\xa7\x8e\x46\xce\x8b\x1e\x1c\x5b\xe4\xd4\x5b\xe8\xb6\x47\xd1\xec\xcf\x7e\xb4\x7d\x90\x0a\x66\xe2\x46\xb9\x90\x77\x2b\x1a\xcb\xd7\x33\x2d\x4d\x26\x66\xa6\x98\xb5\xed\x72\xc9\x71\x2d\x6c\x39\x7a\x29\x53\x6a\x55\x1b\x46\x5e\x66\x66\xa5\x61\x14\xcd\x96\x6c\x67\xb5\xc3\x70\x3e\x20\xad\xa3\x6e\xbb\xb3\x97\x0d\xf0\x7d\xfd\x3c\x2b\xc9\x70\x6c\xa1\x6f\xe9\x27\xfd\xb6\x7e\x9e\x17\x8c\x38\xb6\xd8\xb7\xf4\x13\x7e\x5f\x3f\xcf\xca\x59\x1c\x5b\xa7\x5e\xee\xd0\x9b\x2f\x1e\xfa\x79\xa4\x10\x7d\x1f\x85\x67\x65\x32\x8e\x2d\xf2\x95\x87\x8e\xdf\xd6\xaf\xa7\xa2\x1d\xc7\xd6\xf5\xfd\x85\xf7\x37\x17\xbe\x4f\xdf\x9d\x17\x0a\x39\xb6\xd8\x35\xea\xdf\xda\x1a\xf9\x7e\x75\x7d\x5e\x9d\xe4\xd8\x42\xbf\x96\xd8\x3f\x57\x3d\x39\xb6\x4e\xed\xe4\x60\xbc\xfe\x73\xd1\x99\x45\xf3\xce\x78\x10\xee\xcd\xc0\xef\x3f\x7e\x1b\x46\xe1\xd9\xef\xd0\xef\x3f\x7e\xeb\x74\xdb\x9d\xf3\x5f\x7e\x77\x37\x1e\x4b\xae\x1c\x5b\xa7\xb3\xb7\x33\x1e\x46\x7f\x86\xe3\xa1\xd7\x1d\xed\xa7\x6e\xb4\xf1\x86\x93\x41\xf4\xcf\x60\x3c\xfc\xe6\xd9\xf8\x5c\xd0\xe5\xd8\x02\xff\x66\xfa\xfe\xa2\x4a\xcc\x73\xeb\x8b\xc3\xff\x93\x75\xec\xd7\x5a\xb9\x9e\x97\xc5\x39\xb6\x1e\x74\x06\x39\xb0\x6e\x32\xeb\x3e\x92\x78\x16\xbb\xfb\x1c\xd3\x8b\xce\x5d\xef\xc3\x9f\xff\xb9\x67\xf5\xbf\x7e\xdb\xcf\x4b\xf8\xfb\x8f\xdf\x46\x07\x79\xf8\xfd\xc7\x6f\xfe\x72\xbb\xef\xf7\xab\x81\xbf\x07\x5d\x3a\x18\x1c\x9f\x5f\x38\x5d\xe7\x0f\xdf\x72\xbe\xce\xff\xf2\xd4\x09\x63\xb9\x12\x2e\x98\x4e\x83\x99\x6e\x95\x6b\x99\xb2\x49\x78\x5d\xd1\x79\x86\xd0\x22\x31\x1b\x7a\x33\x97\x67\x05\xdd\xac\xca\x9a\x41\x4d\xa5\x56\x42\x19\xa5\xe2\xf2\xca\xd3\x78\x24\xfb\x76\x82\xf1\x78\x2c\x2e\x74\x6c\x89\xef\x18\x8f\x0b\x7e\xbf\x3a\x56\xef\xb3\xfb\xe5\xa8\x9e\x01\xfd\x9d\x46\xe3\xbc\xae\xd2\xb1\xf5\xb5\x31\x54\x49\xd9\xf2\x4b\x29\x96\xf3\x42\x52\xc7\xd6\x83\xed\xc1\x1f\x12\x64\xfc\x71\x39\x1e\xc7\x71\x34\xfb\xb3\xfb\xb4\x60\xf8\xab\xd5\x0c\xaa\x18\xae\x8d\x0c\xd9\xc9\x16\xab\xcd\x7c\xa1\x56\x28\x58\x55\x4d\x55\x59\x59\x2d\xe7\xcc\xa2\x9c\xa9\x59\x76\x35\xcf\xed\x5c\xc9\x46\xb5\x6c\x15\xb9\xb9\x46\x46\xae\x66\x9e\x46\x27\xd9\xb7\x3f\x31\x3a\x67\xc5\xb9\x8e\x0d\xf2\x89\xb1\x41\xf7\x19\x9b\x6f\x57\x39\xb7\x8d\x4c\x39\xcf\x95\xb2\x53\x2b\x37\x2c\x5d\x91\x4b\x8a\x5b\x64\x45\xa3\xea\xb6\x4c\x23\x63\x58\x8e\x6b\x5a\x4d\xdd\xd6\xe5\x4c\x96\x53\x47\xab\x1b\x75\xb7\xa1\xeb\xe5\x52\x45\xfd\xcc\xc8\x9c\x56\x3b\x3b\x36\x5e\x3d\x56\xfa\xd0\xfe\x69\xc2\xfe\x5e\xec\x9f\x26\xec\xf8\x5d\xf7\x4f\x7f\xf5\x91\x3b\x2d\x0b\x77\x6c\xa0\xaf\x35\x15\xc9\xc7\xe5\x97\x31\x15\x67\xe5\xeb\x8e\x8d\xaf\x5d\xbc\xdf\x30\x2f\x7e\x19\xc6\x9d\x55\xd9\x3b\x36\x1e\x16\x27\xe8\x3c\x7d\x52\xae\x22\x59\x73\xb5\xbc\x61\x6b\xa8\x90\x37\x68\xb5\xd8\xcc\xd2\xa2\x51\x6f\xb1\x0a\x6f\x1a\x85\x6a\x39\x97\xb1\x11\x2a\x73\xb3\x49\x32\xb5\x46\xb6\xc6\xb3\x99\x8c\x75\x96\xfe\x97\xa9\x36\x30\xa7\x45\xd9\xad\x12\x56\xce\xe4\xb2\xa8\x91\x93\x4b\x15\x15\x55\xab\xad\x02\x2f\x23\xc2\x32\xae\xae\xab\xb9\x86\x5d\x47\x55\x8d\x1b\xba\x86\x2a\x4e\xa5\x70\xe0\xd8\xc4\x5b\x74\x7e\xfb\xe3\xc7\xff\xfb\x9f\x8b\x54\xc0\x57\x72\x01\x3f\x1d\x83\x33\x1f\x2f\x67\x41\xf4\xe7\xd0\xdb\x5c\xc5\x3c\x51\x22\x72\xb3\x98\x25\xd8\xce\xb5\xf4\x06\xae\x94\x70\x55\x2b\x3b\x32\x72\xa8\xd5\xa0\x8a\x2d\x57\x9b\xb9\x9c\x6b\x62\xd3\xc8\xea\x0d\xec\xda\xac\x52\xcd\x57\x0b\x58\xb5\x2c\xe7\xe4\x45\x57\xe9\x7f\x7a\x7e\x3d\xa5\x31\x21\x07\x3f\x23\x11\xa7\x55\x0e\x8f\x0d\xf0\xcb\x4a\xc4\xbf\xae\xa4\x80\xfe\xcf\x5b\x0e\xcd\xbf\x95\xa4\x5c\x2e\x3e\x5f\x93\xa2\x37\x7a\x73\x37\xba\xbf\x4b\x44\xcf\xca\x5e\x1e\x1b\xe4\x65\xce\xf7\x0d\xe2\x75\xcc\x59\x4e\x3e\x8a\x1f\x54\x54\xc9\x17\x34\xb7\x8d\x54\xc2\x6f\x7f\x7e\xa4\x1e\xea\x8a\x1e\x1b\xaf\x3a\x70\xe0\x9f\xf4\x35\x27\x81\xbc\xbd\x13\x81\x7e\x55\x2f\xe1\xef\x31\x34\x8f\x95\x5a\x8f\x0d\xf6\x29\xdf\xfa\x7b\x9d\xeb\x47\x35\x7d\x07\xe7\xfa\x97\x1f\x9c\xd3\xea\xb7\xc7\x46\x62\x17\xee\x06\x1d\x76\xea\xc2\xdd\xa0\x4e\x7f\x0d\x8d\xf7\x0d\xb6\xe9\xb4\xdc\xf0\xb1\x41\xfe\xe2\x91\xbb\x61\xad\x76\xaf\xc0\xf6\x1b\xe7\x5c\xb2\x0e\x7c\x62\xe4\xce\xea\x32\x1f\x1b\x5f\xeb\x7c\xdf\x30\xa3\x7e\x19\x1f\xf2\xac\x7e\xf4\xb1\xf1\xb5\xce\xf7\x0d\x02\xfd\xab\x31\xee\xa1\xce\xf5\xb1\xf1\xc5\x45\x0d\x6e\x70\x4a\x7e\x19\xc6\x9d\x96\xe3\x3e\x36\xd8\x6b\xf5\xc6\x5a\x39\x2b\xef\xd2\x46\x4d\x6f\xe4\xa8\x5b\x6e\x15\x4b\x39\x8a\x72\x6a\x9e\xd6\x54\x93\xb8\x39\xa7\x51\x34\xcd\x7a\xae\x55\xcb\xa3\xac\x45\x14\x03\x99\x86\x59\x42\xea\x99\x03\xa0\xea\x2a\xc9\x20\xb5\x46\xa8\x6a\x56\x4b\x25\x52\x91\x75\x1b\x15\xb2\x2d\xd9\x34\x1c\x6a\xc9\x5c\xa7\x38\x8f\xeb\x65\x8b\x35\x34\x93\x35\x1b\x7a\xa9\x56\x6a\xe5\x2b\xb9\x4b\x07\xe0\x2b\xd6\xff\x49\x49\x7b\x4a\xf5\x4e\xf4\xed\xcf\x0c\xd4\x69\x95\xf2\x63\xe3\xb5\xea\x5c\xbf\xf2\x40\xbd\xba\x15\xf3\x5d\xdc\x7b\x2c\xcd\x7e\x6c\x24\x4e\x70\xbc\x81\x3f\x67\x6b\x89\xe4\x43\xf5\x6b\xc8\x7d\xc2\x0e\x7c\x62\xe4\xce\x6a\xd8\x1f\x1b\x5f\x5d\xe0\x20\xf1\xf0\xfe\x32\x9a\xfd\xac\xd2\xfe\xb1\xf1\xb5\xd9\x64\x37\x08\xf4\xaf\xc3\xb8\xd3\xeb\x00\x8e\x8d\x2b\x8b\xb0\x8c\x5a\xb7\x95\x5c\x4d\xd3\x1c\x9e\x2f\x34\x9d\xa2\x5e\xac\x35\x15\xb9\xd0\x34\x91\x4d\x0c\x94\x2f\x5b\xcd\x06\xaa\x51\xbb\x5a\xc8\x67\xaa\x86\xdc\xcc\x50\x27\xa3\xcb\x6e\xf9\x85\xc4\x29\x3c\x6b\xb9\xb9\x42\x81\x55\x4d\xcc\xf5\x7c\x55\x76\x1b\xd4\x96\x1b\xc5\xac\x92\xcb\x65\x73\x45\x62\x14\x99\x56\x55\xd4\x56\xd3\x40\x4a\x8b\x94\xcb\xe5\x26\x72\xe4\xab\x25\x24\xe9\x25\xdb\x12\x92\xf9\x09\xb6\x9d\x5d\x59\x70\x6c\x7c\xf1\xa2\x3f\x39\xf7\x7f\x19\x79\x3b\xbb\x57\xe1\xd8\x78\x65\x09\x76\x97\xba\x91\x39\x8a\xec\x06\xab\xc8\x0a\xb3\x73\xa5\x62\xd9\x2e\x60\xe4\x92\x22\x76\x2a\x95\x42\xa9\x54\xd2\x2d\x4d\x77\x65\xc3\xad\x5a\xac\x96\xcd\xb2\x96\x5c\xaf\x66\x69\xab\x92\xb8\xe4\x6b\xb2\xb7\x25\xe2\x9e\xb8\xe0\xde\x97\x54\xdd\xfc\x37\xe3\xde\xd9\x75\x15\xc7\xc6\x17\x1b\x89\xe4\x4c\xfc\x65\x26\xed\xd9\x9d\x1a\xc7\xc6\x2b\x07\x27\x77\x11\x3b\xc2\xea\xd5\xbc\xa2\x16\x0c\xd4\x64\x99\x66\xa1\xc9\x65\x43\xab\x57\xb3\x05\x1d\x3b\x32\x6f\x2a\x1a\x2e\xe5\x4a\x16\x2b\x73\xa2\x57\x68\xa1\xa9\x17\x73\x76\x1d\x99\xca\x85\xd8\x7d\x54\xea\x92\xbd\xec\xf3\xcc\x7b\xb8\xfd\xe3\xd8\x78\xc5\x97\xf9\x5f\xe6\x5d\x61\xde\xe3\x3d\x25\xc7\xc6\x57\x99\x8b\x7f\x4b\xe6\x3d\xdc\xa8\x72\x6c\xbc\x52\x5e\xfd\x7f\x99\xf7\x92\x79\xa7\x97\xbf\x1c\x1b\x5f\xbc\x3b\x99\x9c\x87\xbf\x8c\xb1\x38\xbf\xeb\xe6\xb9\xf1\xc1\x4c\xa0\x4c\x33\x2b\xe7\x4c\xb5\xa6\x1a\x44\xcd\x23\x57\xcf\x33\xb7\x5a\x90\x99\x9d\xd7\x9a\xd9\x6a\x93\x2b\xc5\x5c\xbd\x58\x29\x2b\xc5\x82\xa1\x39\x66\xd5\xa4\x6e\xa5\x54\x28\x1a\x9f\x19\xd8\xf3\x1b\x74\x9e\x1b\xec\x1d\xfa\xe0\x37\xd3\xf7\x78\x2f\xcf\x73\xe3\x8d\x84\xd0\x0c\xd6\xb8\x9e\x2f\x56\x4b\x36\xd3\x73\x4a\x4e\x57\x6c\x66\x30\x53\x23\x25\x54\x23\x0d\x9a\x6f\x21\xc2\xec\x9c\x49\xf2\x95\x5a\xd3\x44\x16\x51\x9a\xaa\x63\x55\x8a\xd6\x1b\x89\x33\xdf\xd6\xcb\xc7\x3b\x83\x9e\x1b\x6f\x65\x63\xa1\x4f\x66\x63\x7d\x7d\x27\xce\x2e\x19\x3a\x36\xbe\xb8\x86\x4d\xb2\x6e\xfd\x52\x3a\xe2\xec\x2e\xa4\x63\xe3\xab\x4f\x30\x0c\x8c\x1d\xb5\x50\xb1\xd5\x7c\x11\x95\x8a\x55\xa5\xc6\x9b\xae\x52\xa5\x98\x16\x0a\x5a\x5d\xd6\x0b\xd4\x55\x4a\x24\x6b\xab\x0a\xd1\x5b\xba\xcd\x5b\x32\x55\xeb\xf9\xef\x61\xdc\x3b\xf7\x2a\x2d\x66\x5e\x18\xdd\xe7\x4e\xa5\x07\xa8\x2b\xd9\x12\x7b\xde\x23\x00\xa5\x7f\x00\xf6\x0f\x80\x7f\x40\xf6\x07\xa6\x7f\x50\xf0\xf3\x10\xda\x01\x1f\xc6\xe7\xb9\x30\xee\xef\x3f\x20\x3e\xd4\x37\x3c\xf9\xcd\x63\xa9\x4e\xf8\x94\x33\x74\xed\xd6\xb4\x0b\x2a\xce\xe2\x49\x5f\x25\x82\xb0\x9f\x0f\x5e\x2e\x3d\xe0\x42\x70\x42\x05\x3b\x50\x71\xfa\xab\x87\xa2\x86\xf0\x29\xf8\x90\x30\x08\x99\x60\x10\x10\x8c\x18\xc7\xfb\xfe\x7e\x90\xae\xd3\xa8\xc6\xd7\xe9\xa2\x3f\x1f\x5e\xf4\xe8\x84\x9f\xd2\x45\xcf\xb9\x73\x64\xcf\x63\x8a\xdb\x13\x55\x00\x60\xc8\x39\x60\x87\xba\xb6\x09\x08\x83\x57\x09\x3b\x32\x0c\xbd\x64\x18\xfa\x00\xc3\x8e\xa4\x7d\x48\x48\x47\x73\x2f\x78\x71\x93\xd8\xbd\xc4\xf6\x55\xf0\xa3\x20\xbf\xb8\x0d\xec\x3a\x27\xdf\x46\x42\x2f\x6e\xec\x4a\x8a\x84\x5f\xdc\xaa\x95\x14\x89\xbc\xb8\x02\x2b\x29\x12\xbd\xbc\xa6\xea\xda\xa5\x76\xef\x22\xb1\x17\x17\x5e\x25\x45\xe2\x97\xf7\x3f\xbd\xa1\x36\xde\x46\x12\x97\x37\x21\x25\xee\x9d\x74\x89\x94\x98\x26\x08\x5e\xdc\x91\x93\x18\xea\xc5\x75\x45\xd7\x2e\x49\x7c\x1f\x0a\x5d\xde\x3c\x93\x9c\x2a\x7c\x09\x95\x9c\x2a\x72\x79\xa9\xcb\xb5\x7b\xbc\xdf\x87\xa2\x97\xd7\xad\x24\x87\x62\x97\x17\xa1\x24\x87\xe2\x97\x17\x95\x24\x87\x12\x97\x57\x88\x24\x87\x92\x2e\x2f\xf7\x48\x0c\x85\xc0\xe5\x55\x1b\x89\xe5\x0a\xc1\x4b\xa8\xe4\x54\xa1\xcb\x5b\x2c\x92\x53\xf5\xe2\x12\x8a\x6b\x97\xf1\xbf\x0f\x45\x2e\xef\x7d\x48\x4e\x15\xbd\xbc\x6a\x21\x39\x14\xbb\x84\x4a\xde\x41\x7e\x79\x7d\x01\x4f\x0c\x25\x2e\xa1\x92\x77\x50\xba\xbc\x3f\x20\x31\x14\x06\x97\x50\x89\x3b\x88\xe1\x65\x69\xfe\x6b\x37\xc6\xbf\x0f\x85\x2e\xa1\xae\xdd\x87\xff\x3e\xd4\x8b\x0a\xf4\xc9\xa9\x22\x97\x50\xc9\xa9\xa2\x97\x95\xd6\x93\x43\xb1\x4b\xa8\xe4\x1d\x7c\x51\x51\x3c\x39\x55\xe2\xb2\xc0\x75\x72\x28\xe9\xb2\xde\x72\xe2\x0e\x1e\x02\x2a\xce\xea\x1c\x27\x9e\x38\xa7\x75\x7f\x1f\xa0\x12\x77\x90\xa0\xcb\x12\xc2\xc9\x3b\x88\x2f\xa1\x92\x77\x90\xbc\xa8\xce\x0b\x12\x63\xd1\x17\x85\x63\x93\x63\xb1\x17\x15\x4d\x93\x63\xf1\x17\xa5\x36\x93\x63\x89\xcb\xd2\x8f\xc9\x59\x2f\xbd\xa8\x22\x99\x98\x2c\x0a\x5e\x94\x55\x4c\xee\x7a\xc1\x17\xb5\x0c\x93\x63\xa1\x17\xf5\x02\x93\x63\xe1\x17\x35\xf9\x92\x63\x91\x17\x75\xef\x92\x63\xbd\xac\x50\x97\x1c\x8b\xbd\xa8\x0a\x97\x1c\xeb\x65\x8d\xb6\xe4\x58\xe2\x45\xc1\xb4\xe4\x58\x2f\x4b\x9b\x25\xc6\x3a\x4c\xe6\xf3\xfa\x62\xc9\xb1\x5e\xd6\x00\x4b\x8e\x85\x5e\xd4\xd9\x4a\x8e\x85\x2f\xb1\x92\xef\x85\x90\x17\x35\xac\x92\x63\xd1\x17\xf5\x97\x92\x63\xb1\xcb\xea\x41\xc9\xa1\x5e\x16\x22\x4a\x8e\x25\x5e\x54\xe6\x49\xbc\x65\xc0\xa4\xcb\x42\x32\x89\x77\x6a\x38\xb8\xac\x7c\x92\x1c\x0a\x5e\x94\xe2\x48\xcc\xab\xbd\x4e\x38\x2f\xea\x91\x9c\x28\x7c\x51\xe6\x22\x39\x51\xe4\xb2\x60\x46\xe2\xf1\xe3\xf4\xb2\x84\x44\x62\x77\x73\xaf\x8a\xcf\xa1\x12\x7b\x63\x9c\x5f\x96\x31\x48\x4e\x95\xb8\x84\x4a\x4e\x95\x74\x99\xb9\x9e\x78\x47\x64\x6f\x02\xcf\xa1\x12\x77\x50\xbc\xc8\xd2\x4e\x4e\x15\xba\xcc\x2a\x4e\x0e\x85\x2f\x73\x60\x93\x77\x90\x5c\x26\x65\x26\x1e\x41\x41\x2f\xb2\x04\x13\x4f\x41\xc1\x2e\xf3\x0d\x93\xf7\x8f\x5f\x66\xe0\x25\xef\x9f\xb8\x80\x4a\xde\x3f\xe9\x22\xbb\x2d\xf9\x56\x3e\xb8\xcc\x93\x4b\x2c\x54\x12\xbc\xcc\x1c\x4b\xec\xb6\xee\x17\x09\xe7\x50\x89\xdd\x56\x09\x5f\xa6\x49\x25\xa7\x8a\x5c\x42\x25\xa7\x8a\x5e\xa6\x1f\x25\x87\x62\x17\xf9\x30\xc9\x65\x81\x5f\x66\xd6\x24\x67\x95\xb8\xc8\x35\x49\x4e\x94\x74\x99\xb5\x92\x98\x53\xf0\x70\xa4\x70\x9a\xc8\xf1\xd6\x59\xf7\x7b\x58\xf0\x12\x2b\xb1\x1f\x0d\x01\xba\xc8\x94\x48\x7e\xdc\x04\x2e\x93\x2e\x6e\xe9\x22\xb9\x8c\xa4\xbf\x81\x2e\x7a\x89\x95\x1c\x8a\x5d\x84\xa8\xdf\x00\xc5\x2f\xa1\x6e\xc0\x12\x17\x01\xe0\xe8\x86\x53\x51\xe9\x12\x2b\xf9\xa9\x28\xb8\x08\xad\xbe\x81\x2c\x78\x19\xa6\x7d\x03\x59\xe8\x22\x68\xf9\x16\xb2\xf0\x25\x56\x72\x28\x72\x11\x0e\x7c\x0b\x59\xf4\x12\x2b\x39\x14\xbb\x08\xb4\xbd\x01\x8a\x5f\x42\xdd\xd0\x43\x71\x11\xc6\x8a\x92\x1f\x6e\x43\xe9\x22\xe4\xf4\x06\xac\xc3\x09\xd8\x69\x78\xe8\x2d\x58\xf0\x22\x08\xf3\x16\x2c\x74\x11\x0b\x99\x7c\x18\x11\xbe\x84\xba\x81\x2c\x72\x11\x69\x78\x03\x59\x97\x41\x8b\x67\xc1\x51\x1f\x8b\x89\xfa\xb3\x1b\xfe\x39\x8f\xa6\x4f\xa1\x51\x35\xad\xe2\x68\x25\x55\xfb\x51\xd3\xec\x77\x82\xa3\x6a\x5a\x41\x53\xed\x1f\x93\xf6\x9f\x81\xb7\xf0\x06\xe3\xf6\x3f\xe7\xd1\x62\xe5\x0d\xfe\xcf\xcf\x0f\xbe\xf3\xe7\x9e\x7a\xfa\x10\xf2\xf5\xa9\xa0\xae\xbb\x07\x72\x1d\x79\xfa\xd3\x0f\x20\xf4\x69\x40\x60\x18\x71\x09\x62\x26\xc5\xa1\xa0\xb1\x07\x83\x20\x06\x30\xc0\x34\x40\x20\x8c\x69\x2c\x89\x38\x46\x31\xa7\x21\x40\x91\x17\x32\xe8\xc7\x21\x45\x20\x42\xf0\xe7\xef\x3f\xd8\x63\x24\x5c\x4e\xad\xb4\x2c\x6c\x38\xbc\xe9\x30\xcd\x64\xd8\x6c\x35\xf3\x6a\xa5\xec\xda\xa8\x5a\x6a\x96\xb0\xae\x50\xb5\xa4\x6b\xa5\x92\xa3\x39\x7a\xad\x28\x93\xba\x63\x9a\x66\x4d\x2b\xfd\x3c\xe8\x8c\xa7\x0f\x3e\xc4\xf2\x5d\x89\xad\xc3\xf8\x9f\x18\x12\x04\xf6\xaf\x7d\xfb\xe9\x79\x48\xda\x4f\x79\xff\xc9\xe7\x9a\xbc\x6a\x4b\x2c\x32\x46\x08\xd0\xe5\xd8\xd1\xdd\xd1\xb4\xe0\x2f\x50\x60\x55\x4b\xe5\xea\xcc\xd3\xc6\x91\x2d\x07\xb3\x6a\xde\xd9\xff\x79\x6b\xff\x9f\xd6\x6c\xb5\x0a\xed\x8c\x7c\xfe\x51\x8e\x3f\xce\xf7\xcd\x2c\x6a\xd4\x88\xbc\x3e\x3e\xd7\xf3\xa0\x36\x38\x7c\x5f\x0d\x0c\x16\x6d\x40\x66\xca\x5c\xb9\xc3\xbc\x3c\x24\x3d\x7d\xb3\x94\x57\x9d\x55\x3e\x87\x52\xa5\xe5\xce\x1f\xcb\xf9\x59\xec\xaa\x9e\x0a\x5b\xb5\x0a\xe7\x8a\xab\xa7\x69\xb1\xdd\xb1\x9a\x12\x37\xcb\x52\xa3\x59\x87\x3c\xea\x94\xf2\x3c\x04\xcb\xe1\x46\x69\x7b\x66\x4f\xc8\x3f\x9f\xfa\xb4\xff\xe4\x2a\x47\x72\x8e\x3f\x16\x4e\xe8\xfd\xef\xe7\xbf\x3f\x3c\x37\xf6\xff\x1d\xfa\x64\x9d\x7c\x75\xdc\x8a\x17\x59\x0b\x4f\x48\x37\xf6\xed\x21\xeb\x54\xc2\x6e\x34\x5e\x2c\x71\x6b\x2d\x69\x80\xe6\x16\xe3\x5a\x87\x16\x95\xed\x42\x9b\x1c\xbe\xa4\xd6\xe5\x55\x37\x38\xf2\x48\x95\x5f\xfd\x68\xaf\xff\xfa\x91\x87\x77\x7c\xff\xe5\x18\x7d\xe8\xfd\xb2\xfc\xdf\x47\xde\xb4\xf7\xff\x15\xf7\xff\x89\xe3\x9f\xa9\x9d\x41\x0a\x38\xe9\x68\xd4\x35\xa5\x45\xd9\x9f\x66\x15\x64\xb2\x2e\xe2\xe1\x28\x03\x6c\xbb\xef\xa1\x4e\x5e\xef\xaf\x9f\xc7\x5b\x36\x1d\x35\x55\x38\xc8\x4f\x35\x1c\xf4\x97\x0f\xbc\x7e\xf9\xa9\x5c\x23\xeb\x40\xaf\x74\xdb\xfb\xcd\x75\xb2\xf7\x3f\xf0\xe2\x5f\x23\xb5\x3c\x9a\x87\x32\x5b\x0e\x65\x23\x1a\x76\x17\x91\xb1\x11\x7e\xbb\x40\xfc\x6d\x67\xb1\xea\xf9\x73\xc4\x64\x75\x8a\x91\x3c\x6c\x2f\x1a\x4e\xbf\x9c\x5a\x37\x94\x74\xca\x36\x0c\x1b\xa6\xa3\xad\xbd\xaa\x0f\x60\x18\xe1\xb1\x5d\x5b\xe2\xb0\x30\x99\x57\xdc\x5c\xd7\x4d\xef\xc1\x0f\xc1\xda\xa3\xf1\x28\xfa\xf9\xfb\x8f\x92\x53\x28\x3c\xfd\xff\x18\x03\x0b\x3e\xe0\xe3\x9c\x68\xae\x40\x40\x8c\x7c\x89\x06\x00\x30\x1c\x78\x71\x88\x80\x8f\x58\x88\x78\x0c\x58\x00\x51\xc4\x84\x60\x40\x0a\x51\x28\x85\x98\x23\xe2\x0b\x02\x04\x82\x91\x60\x50\x70\xe0\x8b\x3d\x11\x8f\xc9\x80\x77\xd2\x5c\xe8\x3d\xcd\x85\xf7\xae\xe6\x55\xcd\xb5\x7f\x4a\x7e\x5e\x86\xc0\xde\xaa\xb9\x2e\x67\xe5\xeb\x9a\xeb\x28\x0d\xa7\x9a\x8b\xe8\xdc\xce\x8c\x16\x65\xa7\x99\x29\xb6\x49\x31\x1e\xab\xd6\xc0\x2f\x54\x2b\x2d\x9d\xd7\xd7\xa5\x89\xa3\x17\x57\x8b\x51\xb5\x31\x6d\x18\x5d\x37\x3d\x1d\xb9\xee\x12\xf8\xab\xb6\xeb\xd4\x17\xe3\x6c\xb9\x1c\x4d\xb5\x41\x35\x5f\x70\xa7\x8b\x72\x03\x67\x77\x52\x37\x3f\x00\x8d\x8a\x79\x37\xcd\x75\xf2\x47\x49\x34\x07\x3c\xf2\x48\x79\x7d\x8a\xbc\xa3\xb9\xee\xf7\xfe\x44\x9a\xf3\x8a\xe6\xe2\xc7\x3f\x4b\xa2\x39\x8a\x44\x7e\xd6\x1c\x57\xde\xff\xb6\xe6\xba\xa3\xe6\xfc\xcc\xfb\x1f\x35\xd7\x52\x49\x81\x35\xe5\xf6\x20\xbb\xde\x19\xe5\x8c\xce\xe4\x1e\x6d\x6c\x81\x93\xab\xa6\x60\x90\xf1\xea\xca\xae\xc0\x5b\xa0\x3e\x1d\x74\x8d\xa1\xc5\x26\x28\x57\x58\xe4\x38\xc9\x65\xb3\xbe\xa7\xd8\xbd\xd1\xb4\x63\x3a\xb5\x2e\xca\xcf\xec\xc1\x62\x13\xa4\xdd\xee\x24\xcc\xf6\xd5\xca\xbd\x35\x17\x27\x3e\x43\x21\x45\x18\xc2\xc8\xc3\x31\xe1\x98\x4a\x31\x27\x7c\xbf\xac\xa5\x98\xe0\x58\xe2\xcc\x8b\x3d\x12\x87\x18\xb0\xc0\xf3\xa2\x38\x8a\x68\x14\x87\xbe\xef\x43\x40\xe2\xf8\xe7\xef\x3f\x0e\x27\xce\x77\xd3\x5c\xf0\x3d\xcd\x45\x18\xa2\xfc\xaa\xe6\x7a\x7a\x7a\x1e\x72\x7f\xab\xe6\xba\x9c\x95\x17\x9a\xeb\xe1\xd3\x3a\x79\x7e\xd4\x5c\x72\x79\xb6\x6a\xd5\xb2\x23\x1b\x9b\xab\xa1\x0d\x2d\x3a\x30\xd3\x83\x76\x7b\xd2\x8a\xc8\x68\xa3\xd3\xc6\xca\x94\xf2\xe9\x5a\xa1\x9c\x21\xd2\x3a\x9e\x4e\x05\x99\x2f\x47\xc1\xb8\x65\x8c\xb0\x21\xc7\xc0\xd2\x36\xc5\x35\x8e\x16\x4b\x9a\xed\x66\xea\x6b\x1c\xe0\x9e\xeb\x76\xe4\xc2\xbd\x34\x57\xf9\xb8\x4e\x4c\xa2\x39\x7a\xe5\x23\x8f\x5e\x9f\x21\xef\x68\x8e\x3b\xbe\x3f\x91\xe6\xbc\xa2\xb9\xd8\xf1\xcf\x92\x68\x8e\xf2\x61\x29\xf8\xa0\x39\xae\x7c\xde\xd6\x5c\x77\xd4\x9c\x9f\x79\xff\xa3\xe6\xca\x4c\x39\x72\x3a\x2d\x20\x6d\x7d\xda\x97\xec\x54\xab\x16\x53\xd7\xc8\x37\x9a\x4b\x53\x54\x53\xf5\xd9\x36\xae\xad\x40\x77\xd7\x4e\x59\x81\xce\xa6\xab\x72\xa1\x30\xc1\xf9\x5c\xcd\x94\xb6\xb2\x2e\x65\x36\x45\xbb\x58\xc2\x33\x7f\x59\x75\xdb\x30\x28\xe1\x12\x41\x39\xa3\xa2\xae\xef\xad\xb9\x04\x92\x42\x8a\x63\x14\x06\x51\xe4\x47\x10\x78\xb1\x00\x80\x53\x46\x7c\xe0\x45\x71\x18\x09\x28\xf9\x12\xe5\x98\x78\x21\xc1\x30\x8c\x05\x41\x1c\x30\x0a\x23\x1e\x85\xc2\x93\xc0\x5e\x73\x89\x9b\x35\xd7\x53\xf2\x0b\x3d\xa4\x3a\xbf\xad\xb9\x28\xc7\x92\x74\x55\x73\x3d\x3d\x3d\x4f\xf1\x49\xae\xb9\x32\x7d\xf9\x5c\x53\xc9\xf2\xd5\x35\xd7\xc9\xf3\xa3\xe6\xca\x4c\x81\x59\xef\xe4\x4b\xc6\x54\xf2\xda\x60\x5e\x4d\x55\xd3\xc1\x0a\x87\xd2\x42\x5b\x7a\xae\x36\x44\x8a\xb7\x33\x76\x46\xa1\x1a\xe6\x7a\x92\x37\xf0\xea\xc5\x96\xd2\xd9\x8c\x4d\xdc\x32\x26\x16\x9e\xcd\x3c\xd5\xdc\x6d\xc7\xf9\x56\x39\x35\xa1\xba\x52\xdf\x8f\x10\x4a\x39\xb9\xbb\x69\xae\x13\x85\x93\x44\x73\x8c\x8e\x3c\xba\xf2\x79\x47\x73\xdd\xef\xfd\xc9\x34\xd7\x9d\xb5\x55\xb9\xf2\xc6\x3b\xdf\xd6\x56\x7f\x91\xb6\x7c\x55\x73\xd3\xdb\x68\x79\x78\x51\xf9\x6a\x7f\xbf\x87\x17\x9f\x7f\xff\xa3\xe6\x66\x0b\xb5\xee\xd6\x7a\xb5\xfc\xaa\x31\x2e\x15\xb4\xb8\x1f\xe3\x82\x84\x63\xbf\x5a\x18\x0e\x15\x73\xd1\x6e\xcc\xb7\xc5\xad\x0a\x9a\xd5\x71\xba\x31\x69\x0c\xec\x5c\xc5\x0d\x3c\x35\x44\xb5\xbc\x2d\x31\x86\xda\xdd\x40\x4c\xd5\xa1\xbd\x9a\x46\xd5\x75\xbd\xb9\x08\x73\x8b\xd5\x40\x69\xdf\x5b\x73\x83\x88\xfa\x21\xc6\x08\x49\x30\xc2\x40\x12\x11\x91\x84\x60\x61\x8c\x82\xd0\x97\x7c\x8a\x99\xe4\xd1\x58\x8a\x80\x27\x49\x1c\xc7\x20\x94\x22\xe8\x49\x44\x48\x01\xa3\x02\xfa\x1e\xda\x6b\x6e\xfe\xa8\xb9\x93\xa6\x5b\xff\xfe\xe3\x90\xe1\xf2\xa6\xbe\x66\x82\x81\xeb\x3e\xf2\xd3\xd3\xf3\xf4\xc7\x07\x79\xcc\x15\x84\x5e\x59\x55\xfa\x7e\x1e\xe9\x32\x6e\xd4\x7b\xd5\x59\x7e\xd8\x6b\x02\x10\xe7\xc4\xbc\x60\xf0\x21\xd0\xaa\x6b\xb3\x91\x96\x9b\x58\x3e\x5f\x39\x7a\x17\x03\xfb\x42\x37\x24\xd0\x35\xa7\x4a\x4e\xa9\xaf\xd6\x59\x69\x7d\xd0\xef\xba\x23\x51\x4d\x5a\x6f\xda\x9a\x9d\x11\xf6\x74\xe3\xcc\xfa\x6d\x15\xa4\x79\x53\xdf\x96\x32\x8b\x39\xab\xd0\xce\xb2\xaa\xc7\x99\xea\xb6\x1a\x8c\xf5\x70\xc5\xbd\xe2\x24\x3d\xb7\x56\x2a\xae\x5a\xfd\x66\xaf\x5c\xec\xb5\xfd\xbc\xe9\x34\x79\xad\xad\x6d\x9c\xc8\x55\x68\x2c\xb2\x1f\xd0\xef\x67\x82\x7b\x55\xbf\x9f\xfc\xbd\xbb\x5a\x87\xaa\xa4\x56\xe7\x33\x37\xc8\x84\xad\x46\x29\x37\x9f\x7a\xa5\xd8\xae\x0a\x7f\xbb\x9e\xf7\x96\x7e\xa5\xaa\xcb\x03\x5f\x28\x71\x50\xc8\xcd\x5a\xae\x14\xb6\x36\xfe\xf1\xeb\x27\xec\xd5\x3e\x8b\x27\x5f\x7e\xf7\x95\x8f\x72\x67\x7a\xbd\xef\xa0\xf7\x61\x87\xf8\x52\x67\x2a\xdd\xb4\x02\x0a\xc0\xcc\x6d\x17\x9d\x75\x09\x0e\x5c\xe0\x6d\x27\x63\x28\x95\xf4\xcd\xaa\xa0\x6e\xcb\x74\xa1\x68\x81\xfa\x20\x43\x73\x6f\x31\xe8\x41\x38\xca\x1e\x5d\x20\x65\x7c\x84\xaa\x7c\x16\x4f\xbe\xf8\xee\x6b\x1f\xed\x46\x7a\xbd\xce\x76\x0c\xbf\x91\x5e\x59\xfe\xeb\x6c\xd2\xab\xf6\x11\x27\xe7\xdd\x7e\xac\xf5\x93\xdd\xb9\xfe\x17\xf3\xee\xd6\xb1\xbe\x94\xcd\xaf\xa4\xf7\xd1\xfe\x6e\xa0\x15\x55\xad\xa0\xe8\x2a\xda\x3a\xad\xb1\x79\x3d\x4f\x0d\x79\x61\xa5\xe0\x46\xf4\x2a\xdc\x2f\xf7\xcb\xae\xdf\xaf\xe2\x35\x08\xfa\xcd\xbc\x82\xfd\x14\xea\xe5\x63\x9e\xe1\xeb\x05\xb0\x69\x96\xec\x7a\x06\xc9\x6d\xbb\xf5\x6c\x0a\x8c\x95\x62\x5d\x1f\xca\x51\x33\xad\xdc\x7d\xcf\x07\x79\x02\x50\x0e\x51\xc0\x42\x08\x62\x29\xe2\xc4\xf7\x41\x10\xc4\x94\x78\x91\x84\x3c\xe4\x13\x1f\x46\x54\x30\x42\x61\x1c\x09\x88\xb1\x87\x08\xc6\x02\xb2\x98\xf9\x94\xf1\x60\x6f\x7f\xd9\xa3\xfd\x95\x4b\xd9\x56\xa6\xaa\xa8\x25\xdb\x69\x1a\xe5\x8c\x6a\x6a\x6e\x51\x56\xad\xa2\x5a\x6b\x69\x75\x8d\x34\x5a\xb9\x16\x56\x5b\x99\x16\xb6\x50\xad\x99\x27\x79\x9d\x53\x23\xcf\xdc\x9f\xc7\xc4\x7a\xf8\x50\x39\xe7\x4d\x4b\x2c\x00\x13\xe2\xaa\x25\x7e\x7a\x7a\x5e\x3e\xe0\x41\xf2\x95\x49\xd0\xeb\x6a\x76\x0b\x2c\x3b\xeb\x8d\x69\x76\xda\x8a\xe5\xe6\x1b\xb5\xba\xb9\x45\x76\x0b\x15\x0c\xc1\xe3\x69\x1d\x06\x4e\x9c\x3e\xf1\x9c\x0e\x5a\xf4\x0d\xcf\xe9\x41\xb3\xe6\x06\xdb\xb2\x51\x2d\x8d\x6a\x4c\xcf\x68\xfd\x61\x4e\xd6\xa4\xf6\xa4\x65\x3a\xa3\x42\xab\x34\x72\xe7\xbd\xdd\x22\x35\x69\xd6\x37\xd5\xb4\x74\x2a\x32\x4d\x48\x4e\x9b\xcf\xcf\x15\x39\xcf\x26\x41\xd3\x2d\xee\x64\x6d\xa8\x03\xa1\xb6\x60\xa1\x31\x5c\x2d\x4a\x99\xbc\xb7\xec\x6c\x52\x65\x63\xb8\xb0\xd2\x85\x3e\xe9\xd4\xed\xa2\x59\xad\x2b\xe5\xc8\xaf\xcf\x69\x43\xb3\x7a\x52\xb7\x36\x6b\xe7\x6c\xa0\xcd\xd7\xcb\x8c\xda\x42\x5d\x2a\x6b\xbb\x75\x3b\x37\x8e\x25\xb9\x7d\xa2\x05\xe4\xab\x16\xf9\xb4\xaf\xd7\x2d\xf2\xc9\x1f\x7d\xb2\xef\x27\x1e\x4f\xf0\xda\xf4\x39\xe3\xeb\x2b\x1f\xe5\xce\xef\xbf\xe7\x5e\xd1\x89\x46\x95\xbd\xa6\x41\x3a\x1a\x0a\x0b\xe3\xa0\x58\xab\xb9\xae\x6c\x23\x75\xd0\x1f\xd4\x82\x45\x1f\x85\xdd\xad\x55\xc6\x6c\x10\x36\xb3\x7a\xfa\xb0\xe3\x7e\xa2\xdd\x4b\xeb\x37\xd8\xf2\xb6\x86\x24\xb7\xbd\xff\xc1\xe3\xf8\xfc\xfb\x1f\x35\xde\x57\x09\xed\x7d\x35\x1e\xf5\x7d\x3f\x0a\x63\x9f\xa2\x28\x0e\x61\x48\x43\x89\xe3\x08\x21\x4a\x00\x20\xc4\x43\xdc\x17\x10\x52\xce\x11\x86\x04\x49\x38\xc2\xbe\x27\x7c\x18\xfb\x10\x45\x0c\x07\x1e\xda\x13\x71\xc8\x43\xbb\xd1\xe3\xa0\xef\xe9\x39\x09\xf1\x37\x3c\x8e\xa7\xa7\xe7\x25\x49\x6e\xf5\x38\x5a\x17\x03\xfb\x62\x6e\x24\x98\x6b\x57\x3c\x0e\x45\x2d\x16\x7b\x4d\x69\x53\xc6\xcd\xfc\xa4\xc2\x96\xb5\xb4\x03\x95\x69\xb8\xab\x76\x6a\x8a\x5b\xc1\xb4\xbb\x1a\xb6\x36\x96\xd2\x8e\xa7\x95\xb9\x9d\x19\x7a\x50\xd9\x95\xe7\xd3\xb4\x3f\xd4\x4d\x62\xa5\xe2\xbe\x6b\x56\x4d\x27\x6c\xb5\xbc\x5d\xd3\x2c\xa2\x2e\x19\x66\xf9\xc8\xd1\xef\xe5\x71\x9c\xce\x81\x4f\xae\xe0\xfd\x5a\x64\xd6\xc1\xc9\xd7\x8f\x3f\x7e\xdd\x0a\xfe\x8e\xf4\x7e\x8b\x87\x74\xe2\x71\xdc\xb0\x0a\x5d\x98\x64\xd0\xfc\xee\x55\xe8\xdf\x68\xd5\x2c\xcb\x7f\x9d\x4d\x7a\xd5\x3e\xa2\xe4\xbc\xdb\x8f\xb5\x7b\x14\x53\xa5\xfd\xc5\xbc\xbb\x75\xac\x2f\x65\xf3\x2b\xe9\x7d\xb4\xbf\x95\x5e\xc6\x80\xe9\xc0\x5e\xc0\xed\xd4\x29\xcf\xfa\x2b\x58\xaa\x78\xa3\x00\xb8\x4e\xbb\xa1\x95\x52\xee\x8c\x0e\x03\x7b\xed\xea\xac\x5f\xd0\xd6\x74\xb8\xa8\x04\xbb\x59\x7e\x85\x68\x67\x1b\x65\xd2\x23\x9a\x53\x9d\x5a\x5d\x6f\x34\x1a\x73\xb8\xb5\x4b\xe3\xa5\xd9\x89\x28\x54\xee\x7f\x56\x43\x7d\x3f\x44\x3e\xa5\x82\x32\x4c\xa1\xf0\xb0\x88\x24\x9f\x13\xc9\x0f\x89\x2f\x82\x28\x64\xc0\x97\x62\xdf\xf7\xb9\xc7\x7c\x24\x70\x04\xa9\x17\x49\x82\x12\x81\x01\xf2\x02\xb2\xb7\xbf\xe4\x76\xfb\xfb\x50\x02\xef\xe1\x2a\xe2\xd7\x2c\x2c\x01\x0c\xa0\xab\x7e\xc6\xf3\xd3\xf3\xe2\x5b\x89\xec\xef\xf6\x38\x90\xee\xc5\xc0\xaa\x17\xf2\x28\x2b\x66\x64\x0f\xf3\x55\x38\x9d\xa5\xd4\xd6\xd8\xd8\xf6\xe4\x38\xb7\x99\x19\xcd\x56\x7a\x61\xc0\xba\x11\xa2\x72\xdc\xea\x57\xc7\xeb\xcc\xee\x74\x29\xf8\xec\x67\x3c\xda\xf3\x5a\xb3\x4f\xbb\xfd\xd0\x9b\xa6\xdb\x43\x4f\x2d\x8e\xd7\xfa\x66\xee\x6d\xb3\x28\xe6\xb5\x52\xbd\xa6\x87\xbd\x11\x6a\x69\x5e\x51\x16\xa9\x5b\xe5\x55\x89\x9b\x9d\xd3\xfe\x9c\xec\x38\x56\xab\x8d\x75\x71\x16\x16\x66\x9d\xd1\x20\x95\x35\xac\x14\x87\x0b\x5b\x57\xe8\x6c\xb0\x53\xe7\x56\x7d\x9b\x1b\x55\xf1\x3c\x58\x19\x19\xa9\x34\x34\x0a\xb8\xd0\xd2\xc6\x92\x84\x96\xf6\x2a\x63\x48\x95\xc2\x76\x4e\x7d\x15\x6d\xab\x01\x6e\xb8\x55\xb0\xca\x76\x5b\xd5\x39\x01\x46\xae\x27\x5b\x56\xfb\x80\xdf\xf4\x9b\x8d\x7a\xb8\x1b\x96\x58\xa9\xa1\xf4\x5c\x87\x96\x57\x0a\xc6\x0d\xdb\xf1\x3c\xb4\xce\xb4\x9a\xb8\x3a\xcc\xda\xad\x4a\x25\x9d\xe2\xe6\xca\x0a\xfd\x41\x71\x51\x52\x37\x63\x61\x94\xdd\xc8\xaa\xb4\x25\x50\xf5\x7a\x75\x69\xa6\xa4\xfa\xc2\x4a\xd5\xb4\x89\xa5\xab\x17\xeb\x8b\xe2\xc9\x9c\x3e\xfe\xf8\x86\xaf\xf8\xc6\x7a\xe3\x04\x2a\x81\xfd\x6e\x94\x4e\x06\xfb\x52\x66\xbe\x64\xbd\x71\x3f\x7a\xbf\x7a\x7d\xa4\x1e\x07\xe1\x60\x83\xe0\xe9\x97\x06\xb4\xec\x4e\xf4\xc6\x74\x45\xcc\x61\xbb\x97\x2f\x2a\xc2\xcf\xcd\x3b\xe1\x28\x05\x7a\x75\xa7\x83\x5d\x2a\x0d\xab\xcf\x32\x75\x6a\x0f\x93\x9f\x0a\xa1\x1b\xde\xef\xc9\x81\x73\xc3\xfb\xff\x96\x36\xf8\x16\x7a\x33\x5c\x77\xbe\x91\xde\xc3\x83\x9b\xe7\x73\x25\xb5\x81\xdf\x38\x3f\xfe\x6e\xf3\xf9\x05\x7f\x3f\x69\x13\xd5\x46\x5b\xcf\x3e\x20\x39\xd7\xde\xf1\x29\x7e\x7d\xf6\xfd\xcf\x3e\xf1\xe7\xdf\xff\xda\x9a\xfa\x44\x9f\x25\x99\xcf\xfe\x31\x32\x52\x39\xe1\xff\xaf\x39\x9f\x2f\xf4\xcf\x57\xd2\xfb\xb8\xa6\x06\x4e\x7d\x9e\xc9\xe3\x1a\x23\x2d\x1a\x77\x6a\x99\xf4\x52\xf2\x9d\xcd\x3a\xf2\x68\xb0\x9e\x65\x60\xd0\x99\x80\x90\xeb\x85\xad\x9c\xb6\x5b\x5d\x55\xda\xa2\x6a\xde\x8a\xc3\x59\x9f\xaf\xb7\x96\xa3\x8a\x59\xb9\xb1\x5e\xcc\xfb\xcd\x12\x1c\x6a\x61\x61\xe3\x0e\x1d\xbf\x5c\x52\xe5\xff\xfe\xef\xdf\x21\x82\x70\xd0\x0c\x68\x2f\xea\xd5\xdb\x2e\xca\x96\xed\xd9\x3a\x94\x60\x1f\xe6\x86\x8b\xb9\x8c\xea\x12\x68\x75\x1c\xe4\x68\x56\x7a\xb9\xf5\x77\xb8\x41\xed\x82\x5d\x99\x7b\x96\x9a\x19\xea\x3d\x60\x58\xa1\xd6\x18\xc3\xd8\x5b\xc7\x13\x2b\x93\xee\x77\xf2\xf6\x66\x3d\x78\x7f\xb1\x8e\x3e\xb9\x58\x0f\x63\x1a\x83\x48\xf8\xd8\xa7\x18\x87\xa1\x14\x84\x1e\x88\x63\x4e\x09\xf0\xa3\x18\x47\x52\x04\x25\xcc\x24\xc0\x40\x2c\x3c\xe2\x03\x02\x89\x0f\x22\x1c\x40\x9f\x60\x48\x7d\x78\x38\x1e\xc0\xb7\x2f\xd6\xdf\x0b\xa7\x22\x08\x10\x8a\xae\x2e\xd6\x9f\x9e\x9e\xd7\xa4\xbd\x75\xb3\xac\x79\x21\x31\x2f\x36\xcb\x12\x2b\x86\xc7\xaf\x9f\x2c\x96\xb7\xfa\xba\xd3\x90\x72\xcd\x4a\xbd\x99\x83\xd3\xae\xef\x47\xd3\x5a\x6f\xe3\xee\x3a\x2b\x6a\xa8\x40\xe4\xd1\xaa\xd6\xdf\xec\x5c\x7b\x6d\x6e\xfb\xab\x8a\x18\x80\x54\x44\x8a\xa4\x83\xda\xcb\x71\x5e\x48\x73\xa1\x3b\xb1\x31\x35\xca\xbb\xcc\x70\x9c\x9b\x97\x6c\xaf\x10\xb8\x1f\x0a\xbf\x3a\x9b\x11\x57\x17\xaf\xc9\x8f\xbb\xc3\x51\x44\x58\xfa\xf8\xf5\xc6\xf1\xc7\x2f\x34\x76\xf7\xa3\xf7\x5b\x16\xdb\x27\x9b\x65\x37\x28\x7b\x14\xf2\xde\xec\xbb\x95\xfd\xdf\xc8\x38\xc9\xf2\x5f\xe7\x1c\xbc\xba\x59\xb6\x4e\xce\xbb\xfd\x58\x2f\x4e\x5c\x52\xf7\x8b\x79\x77\xeb\x58\x5f\xca\xe6\x57\xd2\xfb\x68\xd8\x45\x47\x18\xf5\x55\x75\x00\xb2\xf5\xcd\xc2\x1b\x0f\x11\x9e\xf6\xc7\xa2\x51\x24\x7e\xaa\x26\x2f\x2c\x75\x31\x03\x93\x62\x80\x34\xa1\x06\x93\x02\xb0\xcc\xd0\x1a\x2d\x33\x65\x23\x1c\x17\xa6\xea\xca\xf2\x2d\x05\xea\xdb\x7c\x37\x33\x5f\xd3\xa9\x32\xcb\x38\xa8\x8b\x73\xd9\xfb\x87\xc7\x05\xc2\x43\x22\xf6\x11\x0d\x09\x17\x24\xc6\xdc\xe3\x1e\xe0\x22\x82\x71\x14\xc5\x20\xf2\x31\x08\x3c\x46\x22\x49\x22\xfc\x90\xee\xe0\x05\x24\xf2\x00\xe3\x41\xc0\x10\x24\xec\xb0\x59\x86\x9e\x8e\xe7\xdd\x9a\x5a\xcc\x57\x5c\xa6\xb9\x85\x66\xd9\xb2\x6d\x66\x5a\x56\xb9\x99\x29\xd6\x4b\x4a\xc3\xb0\x2d\xbb\xd6\x32\xea\x8d\x06\x29\x34\xe4\x6a\x5d\x29\xdb\x3a\xad\xda\x05\x39\xf3\xf3\x58\x73\x1b\x20\x48\xde\xb3\xc4\x18\x08\x7a\xf5\xd8\xea\xf0\xf4\x90\x4c\x76\x56\xd2\xfd\x41\xf2\x33\x5a\xa7\x58\xcf\xe8\x5d\xb7\x19\xee\xe8\x4e\x0c\x38\x6e\xe6\xb6\xb3\x0a\xaa\x96\x04\x6d\x55\x1b\x70\x59\x98\xab\xa5\xca\x72\x18\xcf\x0f\x46\xf8\xe1\x78\xfe\xf0\xcd\xdc\xc5\x10\x9f\x58\xe2\x43\x50\x4f\xd6\x1f\x66\x17\x2d\x5b\x3b\x7b\xae\x64\xe4\x75\xf1\x34\x39\xb3\xc6\x5a\xa9\x4d\xff\xf0\x18\x6b\x1b\xb3\xa4\x73\x69\x9d\xab\x55\xdd\x56\x34\xb3\x2c\xb8\x2b\xba\x83\x68\x52\x9c\x2f\x3b\x63\x33\x4b\x57\xfa\x08\xb5\xd5\xb9\x3e\xcc\x4c\x1a\x71\xbb\x2c\xea\x79\x15\x2b\x55\x63\x58\x4e\x8d\x22\x69\x3e\x71\x9a\x83\xba\x5e\xec\x69\xcb\x4e\x59\x1f\x5b\x9d\x01\xec\xcc\x8a\xea\xc7\x8e\xdf\xf3\xa7\xa2\x7a\xd5\xe2\x9e\xfc\x51\xb1\xa6\x6d\x9c\x62\x64\x76\x42\x6c\x8d\xac\x6d\x73\x15\x06\x7e\x7e\x91\x69\x69\x78\x37\x18\x64\xfd\x06\x59\xae\x0d\xa8\x3e\xf5\xed\xb0\xca\xe8\x4c\x8f\xbc\x7b\x70\x85\x5e\x64\x6c\xbc\x63\x41\xef\xf7\xfe\x5c\x92\xf7\x9f\x68\xc9\xdd\xa1\xfd\x30\xeb\x37\x86\x9d\xad\x6c\xc8\x30\x8b\x83\x54\x90\x36\x23\x09\x6e\xe6\x53\x50\xea\xdb\x71\xb9\xe1\xd4\x17\x7e\x97\xcb\x3d\xa7\x30\x19\xf1\x07\xd6\xd7\x97\x6e\x03\x0e\x8a\xcf\xbc\xaf\x6c\x8a\xbd\x22\xb8\xde\xdf\x62\x92\xfe\x5e\xca\x9e\x56\xdc\xcb\xdd\xc9\x0b\x5e\xd1\xfc\xbb\x93\xc7\x9f\xec\xd3\xde\x0a\x19\xc5\x23\xb5\x07\x17\xf3\x65\x22\xdf\xdb\x9a\x1c\xdc\xf6\xfe\xdc\x38\xd9\xfb\x1f\x35\xf3\x57\x4d\xbe\xfb\x6a\x66\x18\x72\x81\x71\x40\x62\xcf\xf3\x81\x88\x18\x62\x40\xf2\x82\x18\x73\x48\x42\xe8\x7b\x7e\x84\x38\x43\xd0\x43\x3e\x46\x22\x0a\x63\xcc\x09\xa3\x91\x24\x79\x5e\x8c\x85\x14\x78\xfe\x5e\x33\xc3\x7b\x6a\xe6\x77\x7d\x24\x82\x39\xba\xae\x99\xf7\x4f\x0f\x9a\xf9\xec\x86\x8c\x5b\x35\x73\xf6\x62\x88\x3f\xa8\x99\xb5\x6d\x71\x77\x22\x22\x27\x9a\xd9\x68\x90\xed\x2c\x1b\xf6\x19\x8b\xdb\x99\x4c\x77\xc6\xdd\xac\x6c\x6b\x21\x1a\x0c\xca\x4b\x7f\xb7\x49\x77\x3d\x33\x28\xa2\x75\x3f\x8b\xc7\xcb\xa9\x59\x29\xa5\xe4\x5d\x77\x8b\x66\xf5\x45\x9e\xca\xe3\xed\xa4\x33\xee\x77\xd7\x73\xb7\xb9\xd2\x6b\xcc\xc9\x4a\xc5\x4e\x38\x72\xe4\x4c\xe5\x7e\x9a\xb9\x78\xb2\xfe\x48\xa0\x19\xbb\x99\x23\xef\x1e\x98\xf2\x49\xcd\x78\xc7\xf7\x27\xb2\x0c\x27\x5a\x6c\x73\x68\x7f\xb1\x66\x2e\x1e\x7d\xa3\xdb\x35\xb3\x6d\xec\x4e\x2d\xdb\x2b\x9a\xf9\xe4\xac\x2e\x89\x66\x34\x4f\xa8\x7d\x08\x90\x79\xc1\xc5\xb7\x35\xf3\x1d\x2d\xc3\x67\xde\xff\xa8\x99\xbf\x6a\xf2\xdd\x57\x33\x33\xc8\x02\x06\x24\x40\x78\x14\x8b\x58\x0a\x3c\x09\x08\x8f\xf0\xfd\x3f\x8f\xf8\x3e\x80\x82\x10\x29\xa0\x4c\xa2\x44\xf2\x42\x14\x78\x0c\x50\x09\x78\x9e\xcf\x09\x62\x3c\x12\x7b\xcd\x0c\xee\xa9\x99\xdf\x2b\xc0\x40\x28\xc7\x80\x5e\xd5\xcc\x4f\x4f\xcf\x2f\x1c\xba\x55\x33\x5f\x4e\xe3\x2b\x9a\xf9\xb5\x32\x1d\xda\x33\x5e\x45\x76\xab\xad\x92\xd5\x31\x55\x7b\xdd\x33\xdb\xb2\x29\xf9\x91\x86\x5b\xe5\xb4\x8e\xfb\xae\xd9\x71\x87\x75\x38\x51\x87\x5b\x1e\x88\xd6\x0c\xcd\xf3\x61\xbe\x3c\xf4\x0a\x23\x12\x0f\x65\x3a\xf5\x0a\xa9\x41\xa5\x98\x5f\x97\x6b\x9d\x45\x6f\xdd\x6f\x09\x53\xdf\x58\x4e\x28\x72\x72\xff\x7e\xda\xf8\x44\x7b\x25\xd1\x86\xc1\x91\x5f\x0f\xff\xbf\x08\x83\x79\x47\x1b\xdf\xef\xfd\x5a\x92\xf7\x9f\x1c\x7b\xde\xae\x8d\x9f\xfb\x52\x81\xa5\x5e\x40\x2e\xde\xa7\xde\x0f\xff\x4b\x34\xed\xcb\x32\x3c\x6f\x6b\xda\xbf\x48\xd3\xbf\xba\x13\xb4\xb9\x8d\x96\x87\xe2\x15\xc5\x23\x6f\xff\x42\x5e\x7c\xe6\xfd\x8f\x56\x47\xe9\x64\xfb\x20\xa5\xf5\x4d\x4b\x2d\x0e\x65\x79\x04\x17\xc4\x0e\xfb\x5c\xc4\x51\xb5\x3d\xcc\x76\x5b\xcd\x46\x3f\xef\x17\x16\xbb\xcd\x70\xe5\xad\x27\x60\xcc\x5a\xe3\x65\xdc\x49\xb9\x99\xe1\x64\xbc\x62\x75\x79\x3d\x93\x69\x3e\x87\x2c\xb5\x3a\x5a\xf7\x63\x4d\xaa\xe2\xb5\x7b\xff\xe2\x19\x52\x1c\xc7\x0c\x4a\x90\x71\xc8\x62\x1f\x51\x0a\x00\xc1\xb1\x17\x48\x4c\x78\x01\x0b\x20\x16\x00\x79\x31\x85\x9c\x79\x10\xc4\x01\x92\x20\x10\x71\x10\x07\x84\xd0\x28\xa6\x70\xbf\x30\x27\xd2\x1d\xad\x0e\x90\xde\xb3\x3a\x1c\xc1\xeb\x65\x7f\x9e\x9f\x9e\xdf\x4d\x77\xab\xd5\x79\x23\x38\x26\x99\x3f\xb0\xc9\x77\x75\xd7\x2d\x15\xcc\x6e\x03\xcf\x68\xaa\xaf\x9a\x43\xb1\x0c\xbc\x71\x9d\x2b\xc1\x4c\x1b\x55\x9a\x59\x1f\xcf\x61\x75\x5b\xdd\x3a\xbe\xdc\xcf\x0c\x3c\x75\xa5\xa5\xaa\xf9\x75\xb1\x35\x2e\x39\xb1\xdf\xaf\x38\xb9\xd9\x78\xb9\xad\xe7\xb7\xb0\x35\x71\xa2\x20\x50\xb6\xd3\xcc\x1d\x77\x6a\x8a\x27\x5f\x4d\x62\x01\xe0\xeb\xf3\xe5\xe4\xf3\x8e\x05\xba\xdf\xfb\x93\x25\x4a\x1c\xe7\xfe\x1d\xb5\x58\xa2\xd4\xf4\x7b\xbf\xff\x25\x3f\xde\x3e\x5b\xf8\x4a\x7f\xe8\x9d\xf3\x83\x24\xfd\x7d\x78\x59\xf1\xad\x1e\x7d\x29\xbf\x1f\x92\x51\x3e\xff\xfe\xa7\xf4\xbb\x2f\x52\x0c\xf7\xb5\x1a\x11\x61\x40\x82\x02\x70\x0a\x23\xce\x01\x22\x8c\x79\x42\x10\x2a\x28\x0f\x63\x82\x23\x12\x42\x4a\xa2\x40\x10\x9f\xf9\x5e\xc8\x50\x10\x51\xc0\xe3\x08\xa2\x18\x86\x5e\x7c\xa8\x11\xb2\xb7\x1a\xe8\x6e\xbe\x0a\x78\xdf\x6a\xe0\x37\x76\x91\xf6\x4f\xc9\xcf\xcb\x6b\x48\x6f\xb5\x1a\x6f\x14\x8b\x7b\xd5\x57\x79\xb4\x1a\x0e\x2a\xed\x4e\x16\xe0\x27\x56\xa3\xb7\x69\x8f\xec\xaa\xa2\x7a\x60\x04\xa3\xb8\x35\x0e\x36\x13\xad\xd7\x8c\x0c\xbb\x42\xe7\x9a\x6b\xd7\x43\x29\x1e\xaf\x97\x8b\x31\xea\x5b\x6b\x1a\x65\xd7\xed\xfa\x68\xc7\xca\xb3\xbc\xb9\x56\xab\x0b\x5a\x10\xdb\xc1\xb0\xd1\x95\xed\x66\xdd\xc0\xad\x6d\xdc\xc5\x5b\x3b\x3f\x55\xe4\x5f\xd2\x6a\x28\xaf\xcf\x94\x6f\xb3\x1a\x6a\x92\xf7\x7f\x8d\xd5\x30\xe4\xcf\x69\xed\x7b\x5b\x0d\x43\xfe\xdc\x8e\x8f\x2c\x7f\xb1\xdf\xf6\x05\xbe\x46\x52\xad\x2d\xdf\x89\xdf\x0f\xe5\xae\x12\x5b\x8d\xaf\x52\x0c\xf7\xb5\x1a\x44\x10\x48\x83\x10\xc4\xa1\x27\xf9\x81\xe4\x45\x3e\x8c\x81\x4f\xa0\xe4\xc7\x3e\x92\x24\x1e\x73\x0f\x79\x1e\xf4\x61\x14\xa3\x88\x42\x0f\x30\x80\x02\x06\x21\x20\x71\x80\x70\x10\x3c\x5a\x0d\x7c\x37\xab\xf1\x5e\xd2\x36\xe1\x88\x60\xf6\x86\xd5\x78\x78\x7a\x7e\xe3\xf4\xad\x56\xe3\x8d\xe2\xc8\x27\x56\xa3\x76\xfe\x3c\x83\x06\x20\xd8\x2a\x23\x1f\x57\xda\x01\x56\x3a\x2e\xaa\xef\x8c\x53\x89\x39\xb1\x22\xa5\xa1\xdb\xee\x8e\xdc\x4e\x33\xc5\xea\xf2\x7c\x00\xcd\xe5\x30\xde\xf4\x15\xca\xb7\xa8\xa0\xcf\xbc\x46\xc6\xe9\x57\x53\xf9\xcc\xa6\xd1\x10\x03\x3a\x89\xed\x7a\xb7\xb0\xd9\x70\x53\xd0\xfc\xac\x5c\x07\xd3\x92\xea\x92\x6a\xec\xcd\xdb\xd3\x4d\x16\x64\x55\xac\xcd\xdc\x20\x52\xef\x79\x16\x71\x6f\x2d\xfe\xd9\xb3\x88\xfb\xbd\x3f\x93\xe4\xfd\x5f\x63\x45\x8a\x72\x82\x7d\xfb\xbf\x70\x07\x47\x96\xef\x61\x45\x8e\xfb\xc0\xd2\x24\xd4\x8b\xed\x16\x92\x80\xa1\x97\xd6\x6e\xa3\x34\x08\xb6\x67\xe3\xf0\x05\x56\x25\xa9\x56\x97\xbf\x80\xff\x9f\x79\xff\xa3\x55\xf9\x2a\x45\x71\x67\x5f\xc4\x17\x54\xb0\x40\x82\x9c\x05\x24\x88\x51\x24\x18\xf1\x11\x45\x50\x22\xc2\x93\x38\x0a\x7d\x8a\x38\x09\x23\x44\x18\xc7\x8c\x49\x84\xe1\x08\x04\x5c\x20\x12\x44\x11\xa0\x7b\x05\x4e\xc4\xed\xb1\xbe\xef\x9e\x96\x08\x44\xc5\xd5\xa2\xaf\xcf\x4f\x9f\xac\x13\xc1\xe0\x0e\xb1\xbe\x8d\x8b\x81\x7d\xb1\x8a\x4c\xa0\xdf\xae\xc4\xfa\xaa\x72\xb1\x3c\x62\x39\xd2\x5b\xce\xdb\x93\xb8\x36\xd6\xd7\xa3\x85\x5e\xe9\xbb\x46\x66\x63\xa4\xeb\xa3\xad\x9e\x9e\x1a\xdd\x94\x1f\x16\x1b\xbb\x2e\xb4\x59\x63\xb0\x1e\x95\x53\x5b\xc3\x6e\x0f\x51\x6a\x58\xf6\x1a\x01\xdb\xd5\x97\x9b\x6e\xa1\xa7\x0f\x06\x3b\x25\xaa\xa4\x37\xf9\x55\xa5\x74\xaf\x58\xdf\xd3\x39\xf0\xc9\xd8\xd9\x58\xc4\xe3\xf8\x24\xb2\xaf\x7e\xfc\xf1\xeb\x62\x67\xef\x48\xef\xb7\xc4\x26\x9f\xd8\xac\x1b\xe2\x3f\xd3\x9b\x54\x47\xfa\xee\xf8\xcf\xbf\x51\xbc\xaa\x2c\xff\x75\xfb\x63\xaf\x9e\xf0\xac\x92\xf3\x6e\x3f\xd6\xe9\xa3\x50\x29\xce\x17\xf3\xee\xd6\xb1\xbe\x94\xcd\xaf\xa4\xf7\xd1\xfe\xb6\x33\x99\x49\xaa\xb3\x34\xf8\xcc\xc8\x37\xc1\x54\x11\x26\xaf\x02\x33\xa7\xca\xa2\x66\xc1\x96\xe8\xa4\x59\xd7\x58\x0d\xb1\x9d\x9d\x93\x85\x93\x1a\x4c\x02\x73\xb7\x9a\x77\x35\x62\x2e\x56\x93\xde\x70\x30\x2a\xcf\xa1\x3f\x77\xbb\x64\x43\x5b\xc1\xba\xd9\xb7\x44\x6d\x06\xee\x1f\xb7\x10\x79\x12\x8e\xe2\x50\x04\x28\x26\x11\xa1\x01\xc0\x50\x04\x4c\x8a\x02\x89\x0a\x86\xb0\x07\x22\x82\x39\x89\x09\x08\x29\x93\xa2\x28\x80\x88\x84\x04\x07\xc2\xa3\x24\x64\xe8\xc1\xfe\xde\xa1\x14\xe6\xbb\xbe\x9c\x44\x09\xbc\x9e\x6b\xb3\x7f\x7a\x38\x37\x02\x50\x30\x4c\x18\x07\xe0\x0e\xa5\x30\xeb\x17\x03\x7b\x62\x7f\x4f\xcc\x68\xfd\x49\xd7\x2a\xb2\xe2\xe8\xcb\xa6\x9b\x2a\xda\xed\x46\x7a\x9d\x59\xd1\x54\x29\x53\xef\x48\xf1\x9a\x0c\xa3\xf9\x6e\x13\x35\xcb\x92\xd0\xb5\x4a\xdc\x6e\xd6\x23\xb5\xc5\xa3\xb2\xaf\x1a\x68\x3c\xab\xe5\x9c\x92\x9c\xae\xe5\x99\x5e\x97\xd2\x4b\xbb\x5e\xdb\x18\x95\x4a\xc3\x98\x8f\x61\x65\xbc\xd1\x95\x8f\xf9\x66\xe6\xf1\x97\x0f\xab\xe6\x4f\xd9\x09\x63\xa6\xf5\x54\x77\xfd\x90\x58\x92\xe9\xe1\xb0\xad\x55\x26\xb0\x44\x1d\x1c\x2b\xb5\xb2\xba\x49\x8f\x66\xb4\xb9\xe8\xaa\xc3\x92\x89\xc6\x45\xb3\x55\xdc\xa4\x8a\x6e\x1e\x9b\xeb\x87\xaf\xc6\x41\x54\x38\x95\xfd\x23\x6d\x47\x1b\x5e\x48\x5a\x2c\xa6\xbb\xf4\x5b\xa1\xb5\x3a\xa9\x49\x79\x32\x79\xbf\xce\x26\xde\x91\xde\x6f\x59\x73\x9c\x44\x5d\x24\xd6\xeb\x79\xba\x18\x80\x94\x74\xac\x49\xf9\x3d\x7a\xfd\x6f\x64\x87\x0e\xfc\x3d\xa9\x12\xfd\x99\xb9\x52\xc8\x75\x57\x2a\xd7\xd2\xa9\xc3\xa0\x16\x2a\xf2\xf9\x98\x56\x3e\x8b\x97\x84\xbf\x9f\xa3\x77\xe6\xe9\x51\x3f\x08\x46\xdf\x43\xef\xab\x6b\x94\x13\x5e\x27\x91\xe5\xf4\x71\xa9\xa4\x5c\xea\xcd\x5f\x4b\x96\x5f\xce\xbd\xaf\xa4\xf7\x29\xca\xe5\x8b\x0c\xd6\x9d\xaf\x88\x41\x80\x87\x11\xf5\x39\x45\x04\x47\xc0\x07\x0c\x05\x58\x60\x1c\x53\xc1\x01\x66\x3e\x8f\xa4\x98\x11\x42\xb1\x1f\x11\x29\x8e\x29\x88\x71\x8c\xe3\x30\xe0\x14\xb2\x28\x60\xfe\x7e\x8d\xf2\x54\x2e\x34\x53\xa5\xb8\x21\x6b\x46\xbe\xec\xe0\x56\xbe\x84\x89\x5a\xd3\xe5\x86\xce\xf5\x3a\xcb\x33\xac\x2a\x66\xd5\xb1\x1b\x4e\x46\xc9\xd6\x8a\x2e\xaf\x56\x2b\x79\x5c\xb3\xf2\xe5\xda\xcf\xdf\x7f\x40\x09\x23\x8e\x29\x12\xf8\xdd\xd5\x0a\x05\x8c\x49\x57\xcf\x2b\x9f\x9f\x42\x89\x53\x26\x88\x24\x71\xf8\xbc\xf3\x5c\xb6\x42\x24\x57\xd5\x91\x83\x07\x76\x28\xb2\x06\x29\xe8\xa9\x68\x35\x88\x90\x91\x77\xc1\xc8\x6b\xaf\x07\xfd\x9d\x4e\x36\xed\xd9\xc3\xac\x3c\xac\x56\xd4\xc3\xa1\xfc\x1b\x51\x2e\xce\xb1\xfd\x49\xfc\x2b\x25\x3a\x3f\xf2\x51\x9e\x67\xbd\x26\x97\xfb\xb9\xb2\x65\x97\x95\x4c\xad\xc2\x47\x0d\xd4\x1a\xa5\xfc\xc1\x1c\x59\x19\x27\xf2\xfb\x28\xdd\xc7\xe9\xf6\x54\xcf\x57\x44\xe4\x96\xb3\xf3\x0c\x1b\x29\x91\xb6\xda\x16\x33\x82\x8a\xd5\x98\x2a\x9e\xdf\xab\xac\x15\xa9\x3b\xea\xc9\x8a\x51\x14\xd1\x3c\xd3\xe1\xbe\xd6\x57\x3f\xb0\x2a\x3a\xcd\x04\xb8\xbe\x32\x39\xd9\xe1\x25\x12\x76\x15\x2d\x1f\xda\x51\xbd\x84\xd7\x4e\xaf\x3d\x8f\x29\x4b\xd5\xb9\xdb\x9e\xf4\x6a\xe1\x34\xa3\x36\xec\x62\xdc\xcb\xa9\x8b\x6d\xa0\x6e\xc6\xb3\xf5\x72\x63\xa5\x47\xc7\x31\xb8\xf2\x79\x67\xa5\x71\xbf\xf7\xdf\x7a\x91\xc3\xd7\x58\xb6\xd3\xcf\xdb\xda\xf3\x6f\x62\x59\x5f\xb5\x54\x8b\x5b\x68\x7f\x12\xd4\xc2\x5b\xbb\x07\xdf\xc6\xbb\xcf\xbc\xff\xe9\xca\x9e\x89\xd2\xeb\x81\x5d\xbb\x02\xfa\x65\x0a\x17\xc3\x56\x7a\x48\xfd\x52\x6f\x0d\xf5\x21\x2d\xad\x68\x29\x4d\xf2\x9d\x6d\xdf\xd2\x87\x99\x8e\x2f\xa7\x26\xeb\x66\xa7\x20\x7a\x72\xba\x1c\x17\x58\xb9\xd2\x18\x12\x50\x94\x63\x77\x42\xd6\x72\x2d\x63\xe9\x33\x99\x44\x68\x63\xde\xbf\x0c\x6b\x88\x48\x4c\x04\xf3\x43\x8e\x50\x1c\x42\xc1\xa9\x2f\x08\x16\x58\x8a\x84\x00\x7e\x18\x45\x1e\x46\x24\x42\x34\xf4\x39\x60\x1e\x62\x5e\x4c\x23\x12\x7a\x9e\x08\x28\xe0\x30\x7a\xb2\x24\xe8\x46\x6f\xf7\xbd\x78\x17\x0a\x98\xa0\x57\x4f\x2e\x9f\x9f\x3e\xd8\x0f\x0a\xb0\xb8\x87\xb7\x7b\x59\x17\xe6\x75\xfb\xf1\x49\xfc\x5b\xec\xc7\x49\xd9\x56\xd7\x00\x76\xb1\x52\x6f\x58\xab\x91\x8a\xf2\x96\x9f\x99\x74\xa4\xe2\x76\x47\x9d\xe2\x52\xa9\x1a\xee\x02\xb9\x95\x70\x31\xb0\x5c\x95\x38\xba\x37\x74\x47\xfa\xbc\xd8\xee\x4c\x8c\x62\xec\xd5\x78\xb1\x11\xea\xcb\x9c\x2b\x60\x2a\xab\x8c\x77\xe5\x79\x2d\x95\xd6\x73\xe3\x4e\x25\xf3\x15\xf6\x23\x89\xa7\x78\x92\x5e\x63\xbf\xce\x8a\x8f\xdb\x8f\x1b\xdf\x7f\xa5\x36\x50\x12\xfb\x71\xc7\xd5\xfa\xe9\xe7\xc3\x3a\xf0\x57\xf6\x16\xde\xb3\x1f\x09\x68\x4f\x9f\x5e\xb8\x7c\x65\x7f\xf8\xdb\x78\xf7\x99\xf7\x3f\xda\x8f\x86\x5a\xd2\x76\x5a\xb6\xde\xe3\x74\xbd\xe8\xf6\xd0\x9a\xb9\xb1\x5d\x9c\xa7\xea\x99\x42\xdb\xa9\xe5\x0a\xe1\x50\xd3\xfd\x96\x8d\xe4\x65\x56\x41\x93\xa1\xb9\xe1\x19\xc3\xf0\x6a\x19\x1d\xf5\x97\xbb\xec\xa8\xca\x3b\x43\xab\x14\x77\x2a\x5e\x71\x37\xd3\x56\xab\xcd\x66\x6a\x38\xf2\xdd\xcb\x88\x52\x9f\xa0\x80\x73\x40\x50\x0c\x88\x1f\x73\xc8\x18\x95\x3c\x40\x23\x1e\x1c\xee\xae\x04\xd8\x8b\x01\x16\x1e\x0f\x3d\x4e\x7d\x08\x7c\x41\xb1\xe0\x80\x07\x52\x1c\x43\x8e\xe2\xbd\xfd\xb8\xbd\x8c\x37\x7c\x2f\xca\x9e\x42\xc1\xf9\xd5\x8b\xde\xf6\x4f\xc5\xd1\xa1\xc1\x88\xc0\x3b\x54\xf1\xbe\x54\x5d\x2f\xd4\xfd\xe7\x97\xb6\x67\xf2\x72\x7a\x58\x99\x53\x07\xd5\xc8\x0a\x64\x6d\x53\x49\x37\xf2\xb3\xf1\x18\xa7\x71\x18\x07\x1d\x2b\xbd\x35\x84\x5d\xcd\xcc\x66\xbd\x45\x3a\xe8\xb4\x04\x76\x0a\x5d\x3b\xa0\x64\x40\xd7\xc1\x0e\xca\x7d\xbf\xe0\x31\x55\xf6\x26\x61\x2d\x37\x71\x1a\xcd\x3e\xed\xcf\xed\x69\xa6\x59\x18\x11\xf9\x23\xb7\x88\x9f\xc9\xed\x55\x73\x70\xf2\xf7\x9f\x50\xc7\x25\x52\xf0\x8a\x46\x39\x3e\x4d\xd3\xaf\xbd\xfa\xe6\xf7\xcc\xc1\xfd\xde\x9f\xc8\x1c\x9d\x1c\x26\x26\x54\x69\xb8\xbd\x18\xaf\xdb\xf4\x76\x95\xf6\x17\xaa\x54\x59\xfe\xeb\x5c\x82\x57\xcd\xcb\x3c\x19\x2f\x9e\xc6\x42\x3d\x2e\x0d\x94\x44\xb7\xb8\xdf\x51\x16\x12\xdc\xe2\xde\x69\x4f\x9c\x66\x0f\xcb\x4a\xd1\xb1\x60\x77\xca\xf2\xa5\xb4\x84\x9b\xd8\xb0\xd3\xa2\x6b\x69\xa0\xc2\x18\xe1\x31\x36\x1a\x71\x09\xaa\xa4\x8f\xcb\x91\x19\x05\x7a\x51\xaa\x98\xb9\x2d\x5a\xb6\xdb\xb9\x69\xd3\xe9\x4c\xeb\xd9\x01\x2d\xb7\x0a\x1a\x6b\xc3\x2d\x4d\xc9\xf7\xbf\xc5\x3d\x02\x9c\xe3\x10\x70\xcf\xf7\x10\x0e\x21\x8c\x98\x07\x98\x0f\x10\x64\x02\x21\x89\xf8\x11\x8c\xa5\x18\x01\xe4\x21\x09\x31\x81\x38\x40\x88\x62\x89\x31\x14\x44\x28\xe0\xf1\x21\xc4\xf2\xa9\x4a\xb5\xaa\x5b\xcd\x5c\x3d\x93\xb7\xb2\x34\x6f\x13\xb5\x24\xdb\xbc\xc9\x79\xb9\xe9\xb6\xb8\x5b\xd7\x88\xa9\xe7\xb3\x19\x47\x57\x73\x6a\xbd\xa1\x16\x48\x9e\x58\x15\xc6\xf3\xf9\xd6\xde\x2e\x08\xc2\x04\xa6\x12\xe6\xe8\x5d\x43\x83\x24\x40\xaf\x26\x11\x3f\x3f\x85\x42\x48\x5c\x50\x46\x21\x7a\x4e\xe7\x32\x38\x1f\x4e\x4b\xf6\x56\xaa\x5b\xed\x61\x7b\x94\x4a\xa7\x97\xab\x9e\x25\xea\xe6\xc6\x84\x59\xbd\x42\x7a\xea\xcc\xad\xa5\xf2\x24\xa5\x1f\xb6\x54\x1f\x36\xba\x0e\x42\xfc\xc6\x46\xd7\xc3\x4a\x38\xd1\xf1\x8a\x3b\xeb\x91\x48\x3c\x14\xe2\xe9\x99\x7c\xad\xcc\xaa\x93\xf9\x2c\x18\x4d\x95\x4a\xa3\xb7\xdd\xad\x57\xf5\x1d\x5a\x51\xc7\xa4\x2c\xc7\x80\xd1\x69\xcf\xbd\x46\x25\x5b\x8b\x53\x7c\x3c\x24\x0c\xe5\xed\x71\x90\xd2\x4d\xc4\xbd\x42\xbd\x5c\x11\x38\xcc\x75\x60\x77\x35\x49\xd5\x8d\x65\x55\x33\xa7\xe9\x9a\xb2\xfe\xd0\x31\xde\x89\x68\x1f\x03\x9b\xdf\x3c\x56\x3b\x61\x44\x6f\xb5\xf4\xc6\xd0\x2a\x40\x27\xa5\x7a\x6a\xcc\xd3\x29\x96\x2a\xa6\x37\xce\x48\x1b\x39\x4e\x98\xe9\x16\xf3\x8b\x4e\x81\x3c\xf5\xf3\xe4\x4e\x1a\x75\xfe\xfa\x8c\x3a\x7c\xde\xb1\x36\xf7\x7b\x7f\xa2\xcd\xab\x93\x63\xaf\xd9\xc9\xa3\x4f\x6a\x98\x51\x11\xcb\x27\xc5\xcb\x93\x69\xb8\xbf\x50\xc3\x5e\x6a\x78\xb5\x9c\xa2\xd3\x9e\x23\x56\x75\x9b\x98\x63\x33\xbd\x4a\xf3\x19\xd9\xa5\xb3\xb5\xa0\x16\x56\xab\xa0\x6c\xac\xa7\x48\x5b\x75\x97\x56\x87\x1f\xf4\xea\x51\xd6\xf2\x6b\x39\xc1\xe6\xdd\x09\xbd\x9f\x98\xd7\xaf\x58\xa9\xd9\x6d\x7d\x78\x20\x30\x9f\xfc\x2e\xa3\x3b\xf2\xf0\x33\xef\x7f\x2a\x42\xf4\x45\x8a\xe7\xce\x49\xc7\x84\xfa\x0c\x72\x18\x46\x9c\x70\xcf\xc7\x08\xfb\x38\x08\x3d\x8a\x90\x04\x24\x8c\xc3\x18\x4b\x51\x18\x72\xc0\x60\xcc\x22\xc4\x00\x67\x88\x31\x1c\xc5\x01\x85\x7e\x10\xf8\x60\x6f\xa5\x6e\x2f\xcf\x0a\xc5\x7b\xb6\x89\x40\xcc\xaf\x86\x6c\x3e\x3f\x7d\xb2\x76\x5c\xa0\x3b\x84\x6c\x5e\xae\xd8\x5f\xe8\xb4\x04\x3a\xf2\xda\x5d\x46\x59\xbf\x86\x02\x3a\x9b\xb9\xa5\xdc\x7c\x50\xaa\xcf\x07\xb6\xae\x8b\x9e\xd8\x80\x76\x3b\x5a\xc3\x48\xd7\xcb\x8e\x5d\xf2\x7a\x45\x6b\x2b\x72\xee\x88\xa2\x6a\x6d\x5d\x1d\x05\xeb\xf5\x6a\x05\xa3\x9e\x16\xcb\xa9\x76\x7a\x68\x37\x8b\x93\xe6\x4c\x29\x0b\xc2\x55\xc2\xf2\xe3\xbb\x79\x41\xf9\x64\xe1\x13\xcf\x5e\x48\xea\xf8\xf5\xea\xab\x6f\x7e\xc7\x2e\xdc\xf1\xfd\x89\xbc\xb0\x13\x2f\xe8\x06\xbb\xb4\xb7\x0b\x99\x5b\xed\xd2\x5f\x68\x17\x65\xf9\xaf\xd3\xe9\xaf\x7a\x41\xc3\xe4\xbc\xd8\x8f\x45\xf6\xb8\x60\x54\x12\x1d\x70\xdd\x51\x16\x3e\xf3\xfe\x47\xfb\x52\x6d\x80\xc5\xa8\xec\x31\x94\xa9\xce\x4c\xbb\xee\x9b\xce\x66\x93\x36\xd2\xc5\xd0\x30\xf4\x79\xa9\xd9\xd9\xec\x06\xda\xae\x31\xde\x65\xc4\x4a\x19\x9a\xa9\xb0\xef\xcc\xb5\x16\x2e\x16\x0b\x5c\x6a\x8e\x37\xfa\xda\x1a\x5b\xb4\x0f\x77\xf9\x3a\x5b\xdb\xab\x72\x79\xbd\x2c\x77\xa7\xf7\xf7\x82\x42\xc6\x83\xd8\x47\x1c\x7a\x42\x48\x11\x17\x94\xc4\x71\xc8\xa0\x0f\x44\xe4\x05\x61\xc4\x59\x48\x59\xc4\xa9\x20\x8c\xc5\x01\xe6\x9e\x88\xa2\xff\x9f\xbc\xf7\xe8\x4e\x5c\xd9\xfe\x86\xbf\xca\x7f\x76\x07\xdc\xb5\xa8\x1c\x06\xef\x40\x28\x91\x85\x88\x12\x33\xa9\x24\x91\x73\xe6\xfd\xf2\xcf\x6a\x70\x1b\x8e\xdb\x36\x06\xe4\xee\xbe\xeb\xd4\xe0\xac\xe3\x2e\x60\x97\xaa\x4a\xfb\xb7\xf3\x56\x28\xc2\x01\x01\x71\x22\x42\x48\x7e\xe0\xcb\xcf\xf2\xa3\x06\x69\x54\x1c\x13\xb7\x6b\x0d\x8b\x77\xeb\x58\x6f\x9a\x2e\xae\xd1\x56\xb5\x99\xab\x98\x45\x43\x43\x76\xd9\x6b\xe6\xeb\xbc\x52\xd1\xea\x5a\xb5\x54\x2a\x1a\x5d\x5e\xaf\xd9\xd6\x0f\x5c\x60\x18\x01\xc1\x29\x47\xf4\x56\x72\x00\xa5\x48\xb2\x8f\xb5\xa0\x9f\xb3\x50\x00\x2c\x04\xc3\x80\xa2\x57\x77\x4d\x6d\x34\x71\x8a\x9b\x25\xb5\xb2\x13\x67\xdf\x2c\x1a\x61\x06\x84\x95\xb2\x5e\xb4\x8d\xfa\x18\x4f\xe2\x1a\xaa\xe4\x4c\xa3\x5d\x6a\xd4\x6a\xa7\x93\x3f\x6b\x41\xbe\xf6\x79\x29\xa5\xf3\x25\x5d\x20\xb6\x6a\xa9\x71\x22\xa9\x8d\x27\xda\x71\x31\xeb\x2b\x6d\xbf\x9e\xc7\x99\xd6\x20\x98\x6d\x4b\x3b\x63\xae\x6f\x11\x58\xb3\xd0\x3a\x21\x4d\xae\xde\x6e\xff\xca\xe9\x5a\xf3\x82\xc8\xf6\x4e\x3f\x6f\xd6\x4a\xca\x9d\x68\x4d\x7b\x1e\x6f\x97\xeb\xb1\xa6\xba\xd3\x6a\x21\x6b\x0f\x93\x72\xd9\x35\xe7\x32\x70\x0c\xdb\xae\x5b\xed\x0c\xd2\x49\xcb\x11\x51\x2b\xd3\xd2\x2a\xcd\x91\xde\xf0\xdc\xb2\x91\xd9\xd7\x82\xba\xbb\x3f\xee\x24\x6e\x28\x73\x36\x62\xf6\xd1\xd7\xd7\x6b\x9e\xfb\x5a\xd1\x8b\xfc\xf5\x55\xfe\x10\x71\xae\xdc\x20\x99\x86\x4f\x26\x6c\x3b\xf2\x32\x3e\xb7\x2a\xa3\xea\x96\xd7\x57\xbb\x55\x61\xe4\x57\x6d\x2f\xee\x92\xac\xbf\x33\xdd\xea\xeb\xb3\x5d\x95\x3d\x3a\xef\xed\xdb\x44\xa7\x97\xbf\x6f\x20\x4e\x7a\xf4\xdf\x12\xfa\x12\xfd\x2b\x2e\x37\xbf\xec\x8f\xbe\x0c\x17\xfb\xfa\xa1\x9d\xc5\xa3\x30\xf6\x0d\x67\x31\xb0\x76\x86\x8d\xc6\x9c\x36\x8a\x8b\x81\x58\x6a\xce\xa8\x94\x0d\x1b\x78\xbe\xf2\x4e\x1c\xd6\xb2\xda\xed\x17\x2e\x7f\xe7\xdd\x7c\x59\x4a\xf6\x75\xbc\xab\x49\x9c\xfe\x5e\xfc\x3d\xeb\xbb\x1e\xef\x22\xc6\xfc\xea\x18\x68\x71\x38\x08\x17\x99\x7a\x42\x87\xab\xd6\xc1\x45\xd9\xb5\x7d\xd4\x77\x83\x7a\x0f\x74\x23\x3a\x1d\xca\xa1\x56\xd7\x60\x63\x34\x3c\x9e\xa5\x87\x4b\x12\x57\xf1\xf2\x7b\x57\xe3\xe5\xef\xcf\x11\x63\xf1\x1c\xfd\x73\x30\xc3\xfd\xf4\x5f\x10\xe3\xbb\x5e\xfa\x94\x8b\xef\x45\x28\xc6\x20\x89\x28\x27\x12\x85\x09\x8a\x51\x08\x31\x8a\x61\xa8\x24\x0c\x28\x11\x01\x66\x12\x0a\x19\xc6\x61\xc2\x79\x1c\xa2\x10\x47\x02\x49\x88\x60\x20\x23\xa4\xe8\x49\x23\x81\x69\x22\xc6\x4d\x07\x3f\xa3\xf0\x54\x27\xfb\xf3\x59\xc8\x19\x90\x98\x31\x8c\x30\x7a\x1e\x31\x3e\x29\x68\xf1\x18\x62\xb4\xdb\x55\xf3\xea\xa6\x9e\xc7\x15\x62\x30\x07\x25\x31\xec\xb9\xb9\xdd\xcc\x01\x49\xa5\x5a\x35\x5b\xa5\x3c\x70\xa3\xb6\xd7\x1e\x9a\x9d\xb0\x4a\xdb\x65\x0a\x8d\x49\xbd\x15\x47\x7e\xa5\xe2\xad\x43\x8f\x16\x4b\xed\xc6\x71\x1c\xa0\x51\xc1\xde\x76\x7a\xe3\x15\x8c\xbc\x8d\x97\xef\xfa\xd9\x82\x33\x0e\x4a\x00\x2e\xbf\x18\x0e\xff\x35\xc4\xb8\xfa\xea\x23\x1c\x1b\x5e\xf6\xf6\xad\x9e\xf7\x35\xc4\x48\x8f\xfe\xdb\xb3\xbd\x17\x31\x66\x97\xfd\xb9\x9b\x23\xb7\x5b\xe0\xe5\x41\x52\xe7\xc8\xaf\xcf\xf0\x0c\xa2\xa5\xbc\xbe\xeb\x3d\x7d\x17\x31\xa6\x57\xc7\xf0\x00\xc7\x3e\xdb\x90\xce\x1c\xfb\xed\xf9\x7d\x09\x31\x9e\x44\xac\x73\xda\xf3\xfd\xf4\x5f\x10\xe3\xbb\x5e\xfa\x74\x11\x23\x10\x18\x25\x09\xe3\x40\x50\x15\xca\x38\x64\x09\x54\x24\xe4\x04\x24\x2c\x06\x18\x87\x81\x0c\x29\x10\x41\xc2\x11\x4d\xc2\x04\x01\x4c\x98\xe4\x48\x06\x8c\x04\x50\xca\x24\x79\x41\x0c\x94\x1a\x62\xdc\x0c\x29\x66\x94\x7c\xdc\x19\xf4\x34\x2b\xaf\x10\x83\xe3\x34\x74\x8c\x4f\x8a\x59\x3c\xab\x63\xbc\x8f\x18\xd0\x8d\xc5\xb4\xb7\xd3\xaa\x47\x92\x94\x17\xbe\xde\xdf\xd5\x87\x75\xba\x9f\xf6\x98\x2a\x2c\x5a\xb4\x93\x5b\x0f\x47\xdd\x9e\x45\x36\xbd\x76\x7f\x20\x8a\x6c\xd4\x9c\x6b\xfa\x76\xba\xf5\x56\x33\x5c\x68\x1f\x26\xac\x9e\x44\xac\x18\xb9\x1d\xe1\xaa\xf2\xc8\x6a\x7a\xb0\x62\x7f\xb1\x05\xc2\xef\x46\x8c\x87\x38\x76\x8a\xf4\x1f\xd2\x71\x52\x42\x8c\x6f\x94\xe1\xb5\x34\x10\xe3\x1b\x75\xa0\xef\xd0\x31\x1e\xe5\xd8\x5a\x4a\x88\x71\xad\xe3\x3c\x80\x18\xdf\xf5\xd2\xa7\xac\x63\x24\x01\x61\x3c\xa4\x38\xa1\x58\xb0\x88\xf3\x20\xc2\x54\x21\x0a\x50\x1c\x21\x15\xe1\x28\x12\x21\x61\x20\xa0\x61\x8c\x50\xc8\x42\x24\xa0\x08\x05\x0c\x55\x84\xe3\x08\x45\xc1\x0f\xc4\xf8\x59\xe0\x5b\x6f\x77\x68\x59\xaf\x77\xad\x1a\xaf\x99\x55\xaf\xa9\xd9\x4e\xbb\xe0\x7a\x9a\x61\x54\x5b\x9e\xd7\x2d\xea\xd5\x92\x45\xda\x6e\x0e\x15\x4a\xbc\x83\xca\xb5\x62\xc7\xe2\xf8\xd4\x3a\xed\x82\x18\xe4\xa6\x6f\x5e\x00\x22\x3e\xb6\x4a\xfd\x9c\x85\x1c\x72\x29\x98\xa4\x12\xbf\x46\x81\x95\xd6\x9b\xa5\x95\x2f\x7a\xd9\xb8\xbe\xa6\xbd\x0a\x5b\x14\x3c\xad\x12\x06\xde\x76\x5c\x98\x2c\xca\x87\x95\xc6\xdc\xa5\x5c\x97\xe3\xc9\x3e\xd1\xfe\x89\x18\x9f\xf8\xe6\xcf\xf3\x17\x9d\xe1\x8e\x9b\x96\xbf\xbc\x50\x97\xdf\xb3\x5e\xe9\xbb\xa5\xaa\x28\x27\x6b\x2d\x48\xe2\x99\x66\x4f\xb6\xf3\x95\x39\x1b\x2d\x26\x84\x0f\xb5\xcd\x62\x47\x7a\xb0\xd5\x19\x4e\xca\x60\xc8\xdc\xda\x04\x0e\xf7\xb3\x60\x7c\x34\x76\x46\x03\x77\x32\x55\x94\x77\xf2\xd1\xb0\x51\x1c\x9b\x6e\xd0\xdc\xdb\xb9\xc4\x2d\xe5\xfb\x4b\x36\xad\xae\xae\x51\x40\xfb\x10\x35\xae\x9b\x00\x7d\x8c\x1a\x57\x1f\xba\x13\x31\x4f\x3e\x72\xe7\xb2\xbf\x1f\x8c\x1b\xa8\x91\x1e\xfd\x67\xcb\xb1\x5e\xd2\xdb\xee\xe6\xca\xb7\x38\xdd\xcb\xf8\x9c\xd3\xa5\x4d\xff\xde\x72\xac\x7f\xa9\x9e\x75\xcb\x57\xf2\xc8\x5e\x9d\xd7\x5a\xfc\xa5\x7c\xd6\x57\xf6\x2a\x8d\xb3\xba\xd6\xa3\xee\xa1\xff\x82\x4a\x33\xbc\x5b\x67\x40\x6e\x2e\x59\x4f\x0b\x82\xcc\x64\xd7\x18\x34\x16\xe1\x70\x53\xd1\xd9\xd2\x18\x18\xed\x7a\xe0\xf8\xdb\x46\x6d\xae\x65\xc2\x4e\xcd\xee\x2f\xbc\x4a\x4d\xab\x96\xa3\x90\x60\x5f\x91\x08\x55\x0b\x93\x56\x3d\x37\xaf\x99\xbe\x25\xb5\x59\x6c\x6f\x17\x0a\xed\xd2\xf7\x95\x80\x50\x85\x8c\x07\x01\x66\x94\x10\x96\x44\x88\x90\x24\x56\x49\x82\x03\xa0\xb0\xe4\x89\x80\x09\x0e\x64\x08\x31\x41\xe2\xd4\xc3\x81\xc6\x9c\xb3\x88\x10\xae\x40\x08\xe3\x9f\xa8\x84\xd2\x42\xa5\xdb\x96\x2f\x01\x3e\x31\x7c\xbd\x4c\x9e\x31\x89\x03\x00\x2e\x76\xaf\xc7\x31\xe9\x13\xbb\xd7\x99\xa7\x5d\xb4\x92\x14\x31\xa9\x52\x6b\xf7\xfc\x24\xb3\x03\x32\x8a\xe7\x46\x63\x5f\x51\xc5\xe9\xb0\xdd\xcd\x6b\xc8\x1a\x8f\x72\x93\x7e\x6d\x32\x00\x55\xc6\xac\x4d\x5f\x3b\x36\xe3\x51\x47\xe9\x4e\x25\xd2\x0b\x40\xb5\x54\x66\x5f\xec\x1f\x76\x65\xaf\x51\x19\x94\x34\xb6\xab\xb1\x92\x24\xd5\xfa\xd8\x1a\xbb\xe6\xdf\x88\x49\x0f\x15\x7b\x4d\x91\xfe\xb3\xc5\x5e\x53\xc4\x84\x87\x8a\xbd\xa6\x4d\xff\xde\x62\xaf\x7f\xa9\x26\xf7\x2e\x26\xfd\x21\x4c\xd0\xbe\xe1\xac\xee\xa1\xff\x82\x49\x3b\xd9\xc9\xf5\xb3\xdc\x68\x42\xc8\x46\xd5\xb2\xb9\xdf\x4d\xe2\x6a\x7b\xa4\x0c\xbf\xd3\x71\xed\xc0\xcc\x04\x65\x17\x2f\x67\x1d\x66\x1a\xd5\x2a\xab\x77\x77\x05\xb2\x07\x85\x61\x7d\x5f\x3f\x72\x73\x92\x2f\x6b\xeb\xa8\x70\x28\xcc\x8c\xa5\x96\x9d\x2d\x71\x0f\xda\xad\x4e\x5b\x4b\xdd\xb6\x06\x21\x07\x34\x91\x44\x45\x8c\x46\x3c\x64\x1c\x07\x10\x91\x40\x50\x15\x63\x26\x94\x00\x89\x20\x54\x24\x49\x10\x47\x49\xc2\xa1\xc4\x80\x44\x22\x11\x44\x52\x4c\x43\x12\x83\xff\xfc\xf7\xff\xb0\x4c\xd1\x1b\x73\x5b\x53\x92\xe8\xe3\x64\x99\xf3\x1c\x64\x9c\x02\xcc\x91\x60\x04\x3c\x6f\x57\xbb\x95\xaa\xff\xf6\x26\x5c\x71\xac\x2f\x8d\xdc\xab\x7e\x6e\xea\x87\xa1\x11\xc0\x38\x33\x5c\x7b\x9b\x51\x73\x99\x1f\x6f\x1c\xbe\x07\x95\x3d\xef\x0c\xc9\xa4\x3e\xab\x90\x06\x6d\x69\xd6\xa4\xde\xce\xa0\x65\x7b\xb6\x1f\x56\x76\x0b\xab\xd8\x5f\xfb\x53\x53\x6b\xb5\xa1\xcc\xe8\xf4\xa0\xe6\x74\xe8\x94\xcb\xf3\xce\x7e\xa9\xc7\xf5\x52\xd1\xfd\x52\x13\xef\x2f\xa5\x4e\x5e\xa7\x5a\x3f\x60\xcf\x7a\x89\x1e\x7e\x5c\x33\x4a\x91\xfe\xb3\xa9\xf7\xdf\xe8\x35\x78\x19\x9f\x73\xb6\x3f\xe4\xb5\xb8\xa5\x79\x3c\xb2\x96\xa7\x35\x8f\x14\xf7\xe2\x1e\xfa\x2f\x5c\x7e\x35\xdb\xa1\xb5\xb7\x9d\xf1\x36\x9f\x9b\x6c\x4f\xc3\xe1\x46\x44\x46\x25\x86\xb3\x4c\x71\x14\x18\x8e\xb9\x69\x6b\xb9\xee\xa8\x9d\xac\x17\x30\xa8\xf8\xc7\x4a\xa9\xdf\xf0\xc3\x4e\x71\xaf\x59\x56\x94\x24\xbd\x8d\x9a\x96\x62\xff\x38\x38\xb0\xf6\x2a\xd8\x4d\x47\x8d\x41\xeb\x1b\x9a\x44\x07\x49\x1c\x0a\x20\x00\x45\x28\x0e\x03\x0e\x55\x80\x91\x40\x88\x86\xa1\x4a\x38\x86\x00\xc9\x38\x52\x49\x80\x28\x51\x02\x71\x45\x68\x18\x53\x01\xc2\x20\x96\x54\x71\x84\xe1\x0f\x2e\xff\x7c\xe1\x56\xc8\x6e\xf0\x76\x06\x30\x17\xf0\x23\xee\xfe\x3a\xfb\x82\x16\x0c\x62\x92\x42\x14\xf0\xdb\xd3\xfd\x85\x37\x3c\x20\xf1\x7e\x10\x05\x6c\x4c\x8f\xdb\x6a\xcf\xf4\x73\x70\x83\x73\x76\x33\x6f\x19\xe3\x42\x67\x3a\x02\xb6\xb3\xe0\xb9\xca\x3c\x51\x87\x78\x57\xac\xaf\x8a\x25\x39\x6e\x92\x7c\xb3\x62\xee\x2a\x2e\x1a\x36\x8a\x87\x65\x67\x92\xe3\xfb\x28\xb7\xcf\x97\x82\x6a\xc5\x73\x03\xad\xb0\x67\x7a\xa3\x5f\xf6\xe6\x6e\x3e\xad\x28\xe0\xe2\x63\xa9\xe9\x55\x52\x0e\xdc\x43\x2d\x43\xbd\xcb\xd7\x6b\xef\x52\xbe\xc5\xdf\xd3\xa3\xff\x01\xc7\xf8\xb2\x96\xf1\x78\xe4\xe9\xdc\x28\x64\xf9\x58\xbd\xf9\xe5\x5f\xc7\xe7\x3c\xed\x89\xc8\x57\x0a\x84\x6c\x3f\x41\x5f\xd3\xfe\x9c\x35\xe9\x5d\x7c\xe9\x3f\xbc\x17\xa7\xb3\x98\x5d\xbd\x8b\xe2\xce\xbd\x78\xf2\x2c\x4e\xf4\xaf\xe0\xe9\x2e\xfa\x2f\xf8\x42\x05\x3f\xfa\x39\x5b\x8b\xc2\xf5\xae\x3e\xda\xef\x5d\xda\xb0\xe6\xb4\x9a\x1b\x2e\x36\xbb\x66\xc9\xc3\x95\xe9\x4a\x6f\x85\x7a\x63\xdb\x6d\x65\x72\xe0\x98\xab\x18\x66\x75\x06\x06\x6a\x01\xe7\xbd\x58\x78\xae\xaa\x1f\x26\xc3\xa6\x05\xec\x9e\x5e\x89\x7b\xa3\x59\x03\xb2\x56\xfa\x59\x26\x08\x53\x12\x25\x02\x20\x08\x21\x81\x22\x90\x52\xc6\x18\x2a\x24\x19\x89\x20\x0b\x45\x9c\xc4\x22\x26\x12\x85\x3c\xe2\x24\x8a\x29\x91\x58\x0a\x44\xa1\x04\x31\x04\x04\x26\x2f\xf8\xf2\x64\xa9\x16\xc8\x6f\xe3\x8b\x94\x1f\x7a\x59\x5e\x67\x7f\xe2\x0b\x25\x17\xfd\xe1\x71\x7c\x79\x9b\x11\xf1\xcb\x1b\xf9\x80\x2c\xfb\x11\xbe\x18\xac\xb3\xd5\xfc\x32\xdc\x0d\xc6\xab\x88\x1f\x7d\xa3\xb8\x06\x03\xcb\xc9\x8e\xe7\x73\x97\xd9\xc5\xe2\x34\xab\x89\x56\x71\x2c\x87\xcd\x61\xa5\xea\x0c\x37\x6e\x2d\xb7\xd6\x78\xd2\xd8\xd7\x69\xa9\x09\x72\xdd\x72\xb8\x76\x0f\x62\x61\x8d\x0f\x2b\x50\x60\x49\x33\xce\xaa\x9d\xf3\x17\xe0\x8b\x13\xd5\x6a\xed\x67\xf9\x7b\x8a\xf4\x1f\xca\x72\x49\x05\x5f\x7e\xe1\xef\x0f\xe9\x0f\x7f\x30\xb3\x42\xd3\xfe\x9c\xce\x90\x72\x96\xc9\x53\xfc\x5d\x4b\x09\x5f\xae\x64\x8d\x47\xf0\x65\x97\x19\x2f\x77\xb6\x2e\x55\x61\x1e\xe6\x63\x81\xb4\x43\x18\x15\xfa\xcd\x2d\x0d\x82\x96\xd3\x1f\x34\xba\xd9\x5d\xcd\xd2\xbb\x89\x0f\xc8\xd1\x68\xce\xf8\xc8\xd8\x85\xae\x83\xc1\xaa\x15\x37\x46\x52\xeb\x34\x10\x6f\x55\xb6\xa5\x7e\x57\x2d\xab\xba\x33\x05\x78\x8b\x2b\xe9\x37\xc1\xa3\x08\x0b\x11\x48\x11\x93\x18\x33\x05\x39\x27\x32\x90\x04\x73\x82\x38\x50\x8a\xd1\x30\x0a\x39\xe2\x50\x85\x14\x22\xce\x13\x20\x69\x10\x04\x22\x81\x2a\x90\x11\x46\x48\xfd\xc0\x97\x9f\x85\xaf\xf5\x62\xa9\xe8\xd5\x4a\x39\xab\x90\x77\x1c\x4c\x28\xed\x78\x1d\x9b\xea\x46\xae\xeb\xb9\x55\xdf\xaa\xd7\xed\x82\xee\x57\x6a\x2d\x17\x53\xbd\xe6\x92\x4e\xbb\x81\x4b\xdd\xf2\xc9\x73\x42\x20\xc7\x58\x22\xc0\xf9\xad\x2c\x13\x06\xa9\x80\x1f\x6b\x32\x3f\x67\x21\x15\x12\x62\x2e\x09\x20\xaf\x11\x60\xc5\xd2\x08\xc7\xb3\x62\x2b\xaf\x78\xe2\xc8\x75\xbc\xdf\x0c\xec\x7c\x95\x54\x77\x9d\x4a\xb3\x60\xf5\x87\xcc\xc5\xa0\x49\xd4\xba\xd3\x39\x05\x08\x9d\x2d\x55\xa6\xf6\x79\x96\xc9\x5b\x7f\xfe\x83\x05\x92\x2e\x37\xf7\x95\xbe\x5b\xa1\x0d\x7d\xd6\x81\xc0\x2c\xce\x4a\xb9\xdc\x6e\x57\xd9\x80\xf6\x2e\x93\x64\x42\x17\xd8\x43\x57\x5a\x0e\xdb\xe1\xb1\x74\xb3\x56\x41\xad\x27\x82\x23\x22\xd6\x72\xe8\x35\xc3\x31\xa8\x47\xa4\xda\xb3\xd5\x6c\x02\x0e\x33\x7b\xdf\x53\xc5\x81\x59\xdf\x75\xed\x5c\xc5\x73\x55\x6a\xbe\x93\xe2\xd5\x57\x47\x8b\x66\xc4\x7a\x63\x37\x3a\xae\x05\x47\x90\xdb\xac\xe0\x2b\xdc\xc3\x39\x7f\x5f\xe9\x75\xec\xda\xdc\x48\xea\xb5\xfe\x01\x76\xc3\x93\x65\xef\x2a\xd3\xc3\x7c\xfd\xbd\x7b\x7d\x17\x29\xd2\x37\x1f\xa1\x7f\x95\x73\x3f\xba\x7c\x5f\x6f\xcc\xab\x78\xa1\xb7\x73\xd8\xc1\xc7\x6d\xe8\xad\xc2\x59\xbf\x7f\x8c\x0d\x65\x0d\xcd\x43\xce\xf7\x33\xa3\xaa\x34\x33\xf9\x72\x7b\xbc\x3e\x7d\xfe\xca\x9f\x7d\x6f\x51\xb9\xab\xe1\xd0\x65\xe9\xfd\x35\x5f\xf9\x62\xee\xbc\xff\x5a\xbb\xdd\xfc\x09\xc7\x77\xd6\x92\x48\xfb\x7e\x3c\x74\x3e\xa9\xd3\xff\x65\xbc\xfb\xcf\xef\x21\xe1\x95\x54\x79\xef\xfd\xb8\x44\x96\x9d\x5b\xa1\x55\xb4\x07\x7c\x6b\xe3\xe7\xe8\x9f\xed\xc3\xf7\xd3\x7f\x41\xc2\xe3\xb8\x50\xea\x87\x9e\xeb\x4e\x7a\x33\x33\x6f\x68\x07\x5e\xf7\x0c\x9a\xa5\x6b\xc3\x0d\xaa\x06\x68\xf1\xa5\x11\x7b\xd0\x10\xad\xfe\x01\x85\xc7\x6d\x38\x3c\x60\x54\x8d\xaa\x1b\xaf\x6e\xe1\x1e\xd2\xba\x87\x41\xd8\x2c\xf5\x42\x3b\xb7\x9b\x14\xea\xf9\xdc\xc8\x37\xf7\x51\xfa\x9a\x16\x21\x2a\x64\x4a\xc4\x11\x89\xc2\x58\x51\x82\x82\x04\x06\x41\x84\x30\x00\x30\x8a\x64\xc4\xb8\x50\x09\x94\x4a\x28\xc2\x60\xc0\x28\x8e\x39\x43\x01\x47\x14\xc7\x51\x1c\x09\xf4\x03\x09\x59\x9a\x48\x78\x2b\x16\x9a\x61\xca\xe9\x87\xe5\x95\x5f\x67\x21\x25\x0c\x0a\x81\x18\xa7\xe8\x79\x24\xfc\x24\x16\xfa\x69\x24\xe4\x93\xd5\xec\xfa\xe6\x5e\x90\xd0\xc9\xc4\xcd\x42\xcd\x6b\x75\x47\x19\x5b\x5b\x70\x87\xe5\x45\x04\xb3\x9d\x26\x0d\x37\x33\x10\xcc\x87\xe5\xbe\xdd\x5b\xe7\xe2\xc6\x61\x8c\x79\xab\xcd\xcb\xfa\xbc\x9b\xe8\x53\x66\xf8\x6d\xc5\xc7\xae\xd3\xae\x76\xfa\x39\xc5\x4b\x86\xc6\xab\xb1\xc0\x5a\x9d\xc0\x91\xaf\x8d\xd2\x43\xc2\xab\x0f\x3d\xc2\x69\xe0\x65\x7f\x1f\xf2\xe2\xa7\x48\xff\x21\x24\xbe\xe2\x74\xc3\xcb\xf7\xff\x36\x24\x3c\xfd\xfd\x97\x22\xf5\xbb\xfa\xd3\xf0\x32\xff\x08\xd7\x3e\x7b\xd9\x0b\x97\xbb\x7a\x2f\x6a\xa4\x88\x5a\xf7\xd0\x7f\x41\x0d\x4e\x69\xa5\x27\xa3\xfa\xa4\x49\x7c\x7d\xb9\xe2\xb3\x64\x8f\x3d\xd9\xad\x8d\x37\x6c\x58\x5f\x4c\x2a\x1b\x33\xd0\x81\x45\xcb\x25\x2f\x59\xd7\xbd\xd5\xaa\x34\x1e\x8b\x52\x32\xab\xf6\xdb\xc7\x4d\x5b\xa3\x2d\x18\x98\xd6\x71\x35\xab\x18\x2b\xc8\x8f\x2a\x97\x1f\x76\xea\xbd\xf4\x1b\xf7\x91\x18\x11\x82\x92\x18\xc5\x22\x8a\x84\x62\x82\x51\x0e\x94\x4c\x28\xe6\x81\x0a\x51\x42\x01\xa4\x38\x90\x42\xe0\x44\x44\x50\xca\x90\x25\x84\x03\x18\x87\x48\xc8\x10\x07\x27\x2f\x3f\x4d\x13\x35\x6e\x45\x9e\x31\x42\x11\xfb\x18\x35\x7e\xce\x42\x0a\x30\xc2\x82\x4a\x42\xd9\xf3\xa8\x71\x33\xf6\xec\x5b\x50\xa3\xba\xe9\x2d\x32\x39\x0c\xe6\x51\x78\xdc\xb6\xdb\xf6\x51\xd6\x1d\x9c\x31\x2a\x71\x3d\xea\x2c\x54\xd6\x5b\x45\xa8\xea\x47\x3d\x56\xcd\x6d\x78\xbc\xda\x3a\x51\xb3\xe3\xe2\xe9\x76\x96\x33\x8b\x87\xd8\x3e\x0a\xd3\x94\xc7\xba\x3b\x68\x0c\x16\xb3\xe5\x2e\x3f\x9e\x64\x34\x3b\xd9\x15\x52\x43\x8d\xc2\x95\xfe\xf7\x00\xd7\x7e\x89\xfd\xba\x8a\xbf\xbd\x93\x6b\xa7\x48\xff\xb1\xd8\xb3\x0b\xa7\x1b\x5c\xbe\xff\xbb\xb9\xf2\x97\x32\xf5\xff\x52\x54\x7b\x17\x35\x06\x97\xf9\x47\xb8\xf6\xd9\x6b\x7f\xe6\xda\xf7\xc6\x76\x5f\xed\xd5\xc3\xf4\xaf\x51\xeb\x1e\xfa\x2f\xa8\x81\x98\xbe\x24\xf9\xa4\x31\x86\x5b\x47\xb6\x5b\x61\x0d\x9a\x3c\x21\x95\x3d\xb5\x60\x30\x3f\xca\x78\x8f\x7d\xd8\x47\xc6\x0c\xd8\x7c\xcd\x0e\x82\xc2\x6a\xd7\x88\xe3\x4c\xcf\x74\xa7\x45\x12\xd6\x76\x6e\x13\x57\x2d\xbd\x58\x2a\x2d\x06\x5b\x2d\xee\x84\x44\xeb\x66\xd3\x2f\xc0\x1f\x00\x1a\x05\x41\x8c\x30\x08\x61\xc2\x09\x26\x9c\xc4\x02\x07\x21\x8b\x88\x80\x3c\x4a\x60\x82\x13\xce\x19\x83\x01\x8f\x04\xa4\x09\x67\x08\xa8\x38\x46\x81\x14\x40\x12\x71\x42\x0d\x92\x22\x6a\xb0\x5b\xb1\x61\x8c\x32\xf9\x71\x16\xcd\xeb\x2c\x24\x0c\x20\x21\x24\x82\x0c\x3c\x8f\x1a\x77\x64\xd1\xdc\x81\x1a\xf8\xbd\x88\xe5\x2b\xd4\xc8\xf9\xad\x69\x1b\x17\xa0\x83\xa9\xa9\x1d\x82\x03\x98\xac\x86\x3d\x5c\x39\x76\x93\x60\xaa\xaf\xb7\xc1\xb8\x64\xdb\x19\x49\xe6\x31\xab\xef\x7b\x66\x76\xa4\x8f\xd0\xa8\xd9\x94\x79\xaf\xe7\x0d\xc3\x65\xb0\xc8\x66\xdd\x2c\xd8\x16\x81\x36\xd3\x35\xaf\x11\x37\xa1\x68\x0d\x7b\xe9\xe9\x1a\x85\x2b\xdb\xfc\x23\x5c\x7b\x7a\xd9\xdf\x0f\xc6\x0d\xd4\x48\x8f\xfe\xb3\x59\x34\x69\x73\xba\x5f\xc7\xe7\x9c\xee\x0f\x72\x5a\x4d\xfb\x7b\x51\xf3\x56\xac\xc1\x23\x7b\x75\x5e\x6b\xe1\xb3\xfd\xf8\x6d\x67\x75\x0f\xfd\x17\x54\xb2\xfa\x8d\xc8\x53\xc3\x16\x4f\x46\xae\x51\x5c\x96\x1b\xc1\xc1\x31\xd4\xb1\x3a\x96\x0b\x55\x42\x72\xd1\x9a\xf9\x21\xc7\x83\x31\x9f\xe7\x6d\xad\x99\x71\x4b\xcd\xa0\x5e\xad\x81\x28\xce\xc5\xd5\xcd\x7a\xb1\xcc\x4a\x23\xdb\x10\x53\x57\xef\x15\x72\x51\x91\xd6\xbc\x7d\xc3\x49\x5f\x97\x61\x11\x17\x09\xe4\x49\x90\x04\x08\x43\x1e\xb1\x20\x61\x5c\xc6\x30\xa6\x04\x81\x04\x53\x88\x00\x4f\x12\x06\x55\x94\x24\x08\x2a\x06\x40\x1c\x88\x44\x50\x48\x69\x88\xe3\xe0\x14\xcb\x96\x42\x45\x4b\x7a\x0b\x8b\x18\xe5\x1f\x37\x41\x7d\x9d\xfd\x89\x6e\x44\xb0\x14\x62\xd9\xde\xc6\x5d\xfd\xf2\xae\x3e\xc0\x0b\x3f\x6a\x42\x9e\x99\xf4\x4a\x85\x63\x77\x91\x8c\xdd\x42\xa9\xb0\xe8\x4c\x65\x79\xa9\x06\x9b\x83\xb9\xe7\x5e\x2d\xf1\xec\x56\x7f\x7b\x70\xf1\xaa\xe0\xe6\xa6\x76\xe4\x74\xfa\x23\x67\x4d\x79\xab\x95\xe5\xb4\xbc\x6e\x1d\xc8\x32\x56\xcd\xcc\x70\xe9\x23\x95\x2f\x75\x87\x18\xcf\x37\x9b\x58\x58\x69\xc5\x1a\x5c\xbf\x03\x77\xfa\xfa\x9b\x79\x77\x13\x5f\xd9\xaa\x9c\x77\x29\xdf\xc2\x9f\xf4\xe8\x3f\x14\x4b\x77\x85\x3f\x4f\xc4\x4f\x55\x22\x9d\x92\x67\xe3\xa7\xfe\x60\xfc\x96\xa6\xfd\x39\x9e\xfe\x2e\xbe\x84\x8f\xef\xc5\x8f\xb3\x60\x57\x25\x3d\xc9\x9d\x7b\xf1\xec\x59\xbc\xbd\x0b\xf7\xd0\x7f\xc1\x97\xed\x7c\xa6\x0f\x2a\x28\x98\xd2\x96\xae\x0f\x4a\xe3\x79\xb6\xc1\x70\x61\xb9\xea\x57\x62\x78\xc4\x70\x3f\x2e\x84\x62\x54\xe5\xba\xa9\x75\xf7\xd3\xe6\x78\xd6\x35\x96\x71\x0c\xad\x5a\x26\xd3\xe0\xed\xca\xa6\x84\xa7\x66\x76\xc6\x50\x75\x9a\x3b\x4c\x7c\x29\x59\xb8\x9c\x6e\xd3\xaf\x36\x13\x86\x32\x62\x8c\x12\x08\x61\x12\xc4\x14\x40\x2a\x09\x01\x20\x52\x12\x40\xc5\x41\x44\x38\x11\x32\x60\x1c\x32\x1c\xa1\x00\x93\x44\x86\x38\xc6\x28\x90\x08\x06\x14\x44\xa7\x58\x83\x9f\x15\x2d\xf5\x82\x65\xd5\xdd\x52\xbe\x92\x67\x45\x83\xeb\x25\xea\x14\x88\xd7\xd6\x7d\xbd\x52\xad\x57\x2d\x56\xf3\x35\x5e\x6c\xea\x75\x6c\xd5\xf2\xb5\x62\xd7\x6d\xfa\xbe\x95\xa3\xe6\xa9\x81\x25\xa4\x92\x11\x08\x39\x00\xf8\x16\xd2\x70\x4e\xf0\x87\x0d\xc8\x5e\x67\x21\xe6\x04\x0b\x49\x39\x65\x97\x58\x83\x5c\x63\xdf\x9b\x71\x23\xd3\xa8\x91\x71\xa4\x86\x63\x36\xd8\x15\x87\xfe\xba\x4c\x33\x5a\xd2\xac\xb4\xa2\x71\x1c\x31\xb5\x9b\x0e\xcf\x1d\x96\x4e\x48\x93\x3b\x95\xdd\x2e\xbf\x39\xe2\x4f\xb2\x62\x3e\xf0\xc5\x7d\x3e\x72\x95\x22\xd9\x9d\x7e\xc9\xd4\xac\xc3\xba\xb5\x1f\xee\xab\x24\x9c\x16\x2b\x4b\xb3\x38\x6a\xcc\x97\x53\xb3\x21\x07\xf6\xdc\xd9\x6b\xab\xaa\x63\xf9\xcb\x66\x2d\xbb\x5f\xdb\xed\x51\xb6\xd6\x45\xb3\x66\xbf\xd5\xc9\x64\xfb\xe5\x7a\x61\x94\xe9\xfb\xbe\xd9\xb3\x10\xb4\x13\x2a\xaa\xd9\x20\x2c\x96\xac\xf9\x62\xbc\x2a\xa4\x95\x15\x73\x5d\x65\x77\x64\x95\x6d\x7d\xb8\xaa\xd1\x42\x76\xd0\x86\x07\xc7\x5b\x94\xb5\x49\x75\x00\xb6\x53\x92\x93\x95\x7d\x1d\xb5\x29\x9e\x1f\xf5\xb8\x72\xfe\xe5\x1f\xe8\x9a\xb4\x2e\x7b\x5a\xba\xfc\xfe\x99\xbb\x3f\xe2\xcf\xd6\x51\x9b\xf8\x1d\xb8\x0b\xed\xd6\xc6\x47\x72\x7d\x5a\x61\xef\xca\xb2\x9d\x3f\x44\x48\xad\x3b\x05\x53\x2c\x66\x62\x94\xdb\x17\x90\x35\xad\x1e\x03\x3f\x59\x4b\x63\x6d\xe3\x4a\x58\x68\x19\x07\xbf\xe3\xee\x9d\xd3\x4a\x7e\xe9\xed\xe5\xbe\xb1\x94\xde\x79\x87\xb4\xb1\x5b\xc6\x67\xcf\xfd\x89\x1b\xea\x17\xc9\xfc\xb1\xa6\x75\xa7\xef\xaf\xc7\xb1\x6d\xad\x95\xbd\x1f\x97\x27\xd5\x6d\xe8\xfe\x58\x61\xe1\xca\xde\x97\x13\xd3\x68\x5a\x6e\x0f\x72\xb5\xd2\xa2\x56\xd4\x54\xa3\xda\xef\x1e\x15\x9a\xe4\x79\xe2\xf2\xfa\xfa\x68\x1f\x2c\x4d\x4c\xac\x51\xa5\x79\x66\x71\x6f\x7b\xab\x5d\xd9\x0f\x77\xff\xda\xe7\xbf\xd2\xa9\x75\xb7\xb5\xf2\x4b\xce\x2e\x3b\x1a\x66\x8a\x9e\x57\xa0\xf1\x6c\xa5\xfb\xa8\xdc\xc8\x24\xbd\x3c\x38\x5a\xf9\xae\x37\x8d\xa7\xaf\xef\xf0\x0f\x24\x95\xf2\xb4\x12\xfb\xb4\xde\xab\x1e\x12\xe7\xf5\x3d\x12\x8f\x54\xee\x7a\xfd\x7e\xe8\xe5\x56\xdd\x06\x1d\x86\x08\xfc\x58\xa1\xae\x5d\x65\x35\x25\x45\xdc\x3d\x40\xbf\xd7\x3c\x2c\x86\x07\x37\x6f\x0e\xfd\x8e\xc2\xd5\x79\x3f\x83\x81\x03\x42\xb5\x5f\xf5\xdd\x5a\xb1\xdf\x35\x4c\x7a\xfa\xf8\xfb\xef\xfb\x05\xbd\x93\xa7\x9e\x3f\x73\x36\x07\x9d\x9f\x7f\xf6\xe4\xf3\x57\xbe\xfb\xf9\x5f\xd7\xf7\x2c\x7f\x3b\xb5\x12\xfa\x1f\xe1\x6f\xe7\x36\xdb\x6a\xd9\xae\xf8\xa2\x19\xdb\xf4\xd0\x2c\xed\xf5\xae\xb9\x08\xe8\xde\xdc\xfa\xfd\x45\x73\xe5\x96\x8d\x66\xbf\x53\x02\xc7\xac\x08\xeb\xe3\x6e\xed\x88\xa2\x85\x49\xda\xd6\x76\x4b\x1a\xa0\x51\xac\xcd\x3a\x76\xae\x90\x8b\xd6\xf5\x69\x26\x31\x12\x34\x39\x34\xfa\x41\x30\x0f\xf5\xd4\x6b\x49\xb0\x10\x0b\x15\x45\x54\x41\x1e\x25\x08\x40\x1c\xd1\x80\xc6\x08\x42\x45\x42\x8c\x10\x14\x21\x0b\x63\x09\x01\xa2\x18\xb2\x10\x06\x41\x88\x44\xa8\x20\xc2\x90\x31\x48\x23\xfa\x22\xa5\xa0\xd4\xa4\x14\x72\x5b\x4a\x61\x1f\x77\x1f\x3a\xcd\x5e\x49\x29\x0c\xb2\x8b\x3e\xfc\xb8\x94\xf2\xb6\x88\xee\xd7\x72\x77\x6f\x8d\x87\x38\xea\xd5\x68\xfe\x7c\x43\x72\x9a\x13\x82\x85\xdd\x99\x8e\x60\x67\xd9\x68\x79\x0d\x36\x70\xad\x99\x0a\x0a\x8e\x9f\xcd\x19\x93\x9e\x0d\x8f\xcd\xc9\xb8\x76\xe8\x81\x70\xd6\x18\x44\x78\xd8\xcc\x95\xf0\x51\xb6\x44\xa6\x50\xb3\x35\xc7\x2c\x57\xcb\xbd\x91\x9b\x5f\xf7\x6c\xdf\xea\x59\x76\x65\x30\x83\x7b\x3f\xf3\xc5\xaa\xab\xbf\x5b\xba\x29\x5f\x7e\xff\xa1\xb7\xff\xfc\xa3\xff\x63\xd2\xcd\x39\x50\xe5\x09\x74\x3f\x8d\xff\x5d\xe9\xe6\x7f\xe8\xf9\x53\x94\x6e\x76\xff\xbc\x4f\xa9\x4b\x37\xd7\xe3\x5d\x3b\xc3\x93\xcf\x92\x01\xda\xbf\x50\x52\xf9\x5f\xd2\xc4\x4e\x92\xca\x77\x81\x47\xca\xb9\x81\x52\x46\x8a\x31\x0c\x23\x2a\x68\x40\x69\x10\x63\x06\x50\xc2\x18\x88\x15\x0d\x69\x00\x80\x10\x11\x22\x01\x24\x21\x26\x44\x71\x14\x2b\xa5\x50\xc0\x50\x24\x03\x21\xb1\xf8\x21\xa9\xc0\x34\xed\x29\x37\x73\x37\x24\xc1\xf4\xc3\x1a\x23\xaf\xb3\x10\x63\x48\xb0\x94\x00\x71\xf4\xbc\xa4\x52\x7a\xef\x46\x9f\xc7\xef\x96\x54\xae\xe8\x5d\x49\x2a\x60\xb7\x1c\xc4\xcb\x69\x63\x99\xa1\x35\xe4\xea\xf1\x6c\x0a\x37\x43\x3a\x59\x3a\xe5\x6a\xd3\x59\xd6\xfc\x5a\x6d\x40\x97\x03\x55\xde\xf4\xb2\xd3\x65\x6c\xb6\xfa\xab\x5e\x23\x3b\xc2\x63\x4d\x16\xed\x79\x3b\x8c\x32\xeb\x40\x55\xcc\xd2\xc4\x2b\x4d\xac\x7d\x5e\x37\x2b\xc3\x4e\xed\x8b\x1d\x45\xbe\x24\xa9\xe4\xaf\xe3\x84\xee\x7f\xfb\x7b\xf6\xe5\x2c\x8a\x97\xdf\xff\x7b\xde\xfe\x5f\x2c\xab\xee\xe9\x68\x2f\x7f\x3f\x80\xd4\x24\x77\x62\xc1\x67\x3b\xc4\xdb\x3a\x89\x7f\x85\x1d\xe2\xdd\x38\xa7\x8b\xa4\xf2\xef\x7c\xfe\x7f\x93\x1d\xe2\x3d\xe9\x26\x7e\xee\xf9\xcf\x97\xe6\xfc\xfc\xa3\xbf\xf1\xf9\xdf\x8d\x28\xfa\x37\xf1\xb7\x93\x74\xf3\x5d\x80\x93\xae\x74\xa3\xb0\x8a\x08\x0f\x30\x84\x31\x40\xa7\xb2\x9e\x1c\x29\x0a\x08\x62\x21\x0d\x29\x21\x24\xa6\x88\x41\x82\x61\xa2\x28\x67\x20\x16\x31\xe5\x84\x71\x25\xb8\x8a\x88\x3c\x75\x81\xc6\x20\x4d\xe9\xe6\x56\x3e\x0e\x07\x82\x7f\xec\x2d\x3a\xcd\x9e\x3a\x6d\x22\x21\x88\x04\x08\x49\xce\x9e\x97\x6e\x8a\xef\xdd\xe8\xf3\xf8\xdd\xd2\xcd\x15\x47\xbd\x92\x6e\x78\xb7\x52\x5a\x08\xb0\x51\x6e\x63\x9d\xa1\x74\x91\x61\x6d\x77\x69\xe3\xfc\x72\xcb\x8e\xf9\xb5\x53\xde\x8d\x12\x6d\xbf\x5f\x75\x23\xbf\x56\xd8\x8c\xf8\xbe\xbb\xea\x85\x87\xbe\xa3\xb7\xbd\x61\x3f\x76\x5c\x79\xe8\x69\x1d\xb8\x5d\x1f\xc2\xc8\xb3\x09\xd4\xf6\x0d\xab\xbe\xd6\xd2\x94\x6e\xae\xe3\xd9\x1e\x78\xfb\x93\xcb\x59\x14\x2e\xbf\xff\x77\xbe\xfd\xaf\x7f\xe7\xae\x7c\xcc\x8f\xa0\xfb\x99\x65\x9e\xd1\xfd\x6d\xfc\xda\xdf\x8b\xee\x57\xd2\xcd\xbf\xf2\xf9\xff\x4d\xe8\xfe\x9e\x74\x13\x3d\xf7\xfc\x46\xef\xf2\xfc\xbd\xbf\xfd\xf9\x5f\xff\xfe\x37\xf1\xb7\x73\xde\xd8\x37\x01\x4e\xca\x5e\x26\x99\x30\x12\xc4\x20\x11\x40\x86\x40\x48\xc9\x14\x4c\xb0\x24\x71\xcc\x25\x05\x00\x06\x04\xc4\x71\xcc\x64\x10\x85\x8c\xd3\x20\x64\x38\x4c\x22\x28\x31\x8a\x70\x10\x24\x21\xfa\xcf\x7f\xff\x0f\xc9\x34\xa5\x9b\x5b\x79\x63\x1c\x0a\xf6\x71\xdd\x8d\xd3\xec\x29\xea\x12\x11\x4a\x09\xa0\x94\x09\xf0\xbc\x74\xf3\xb6\xd1\xf2\x1d\xd2\xcd\xbb\x79\x67\xef\x8f\x2b\x69\x65\xc0\xe4\xc2\xc8\xab\x71\xbb\x21\x35\x61\x6b\xc1\xe2\x30\x62\xb3\xc2\x7e\x50\xd1\x51\xc9\xf3\xcc\x69\x6c\x0d\x86\xc9\x3e\x4f\xdb\x87\xb2\x5d\x70\xbb\x55\x6d\xef\x38\x4a\xaf\xcd\x0b\xc1\xb8\xc5\x6a\x70\xee\xd7\x3d\x5c\x22\xce\xb8\x94\xef\x92\x7e\x21\xda\x17\x8f\x06\x4b\xd3\x6b\x94\xbf\xfa\xea\x23\x6f\x33\xb9\xec\x6d\xfe\xf2\xfb\x7f\xe7\xdb\xfc\xfa\x77\x0e\x5c\xfe\x7e\x04\xad\xcf\x71\xa6\xe1\xe5\x42\xfc\x4f\xa0\xf5\x95\xb4\xf2\xaf\x7c\xfe\x7f\x13\x5a\xbf\x27\xad\xa8\xe7\x9e\xdf\x32\x2f\xcf\xaf\xfe\xf6\xe7\x7f\xfd\xfb\xdf\xc4\xdf\x4e\xd2\xca\x77\x01\x4e\xba\xd2\x4a\x12\x63\x0e\x78\x12\x46\x54\x09\x42\xb0\xa4\x8a\x4a\x91\x60\x18\x29\x0e\xa5\x62\x10\x41\x11\x11\x15\x07\x24\x16\x51\x14\x9d\x64\x16\x8c\x13\x22\x18\x03\x42\x42\x00\x7e\x48\x2b\x22\x35\x69\x85\x49\x79\x2b\x72\x97\x23\xc9\xd8\x87\x9e\xa6\xd7\x59\x88\x00\xa2\x12\x08\x81\x45\x0a\x31\x31\xb7\xea\xd9\x3f\xc6\x71\xef\xb5\xdd\x5c\xd1\xbf\x8a\xf4\xcd\xda\x85\x9e\x29\x57\x7e\xcd\xde\x85\xfa\xa0\x10\x95\xa3\xfe\xcc\xdc\x20\xaa\x1f\x72\xa0\xab\xa9\xc9\xd0\x9d\x4d\xdd\xc2\x7a\xc3\x1a\x26\xe8\x05\x8d\x5c\xbb\x99\x1d\xc7\x98\x52\x2d\x1b\xed\x60\xb5\x16\xcc\x3c\x5f\xd6\xb2\x1b\x30\xdb\x48\x83\xf7\x69\x3b\x84\x89\x2a\xa5\x26\xd5\x5c\x7d\xe8\x81\xb7\xbe\x5f\xbf\x9c\xc1\x07\xe3\xf3\x9c\x8e\x14\xe9\x3f\x5b\xff\x3e\x45\xae\xff\x50\x4e\xe3\xf7\xd0\x7f\x3c\x56\xe3\xc1\x1c\x90\x47\xd6\x7e\x26\x64\x7f\xd6\x5f\xe2\x5b\xf7\xee\x9c\x63\x78\x3f\xfd\x97\x1c\x90\xda\x7e\x50\xc8\xd5\x42\xdb\xd8\xaf\xec\xdd\x6c\x90\x6f\x60\x3f\xc8\x95\xd7\x1b\x77\xd5\x8b\x6c\x37\x5f\x9c\x81\x52\x11\xe8\xe5\x70\x33\xea\x57\x0b\xf6\xa8\xd7\x6e\x65\xa9\xb7\xce\xc4\x6e\x0d\xab\x6a\xb3\x89\x16\x16\xaa\x35\xb3\x7c\x5d\x2a\x6f\xdd\x0c\x89\xdb\x1d\xe9\xe1\xf4\xfb\x47\x62\x42\xe3\x84\x27\x82\x2a\x16\x07\x48\xf2\x18\x27\x52\x92\x24\x8e\x13\xc4\x65\xc8\xb0\x80\x88\x21\xc1\x04\x0c\x23\xc8\x71\x00\x13\x06\x29\x14\x34\x20\x98\x89\x98\x9c\xaa\x6c\x21\x91\x5a\x74\x25\x93\xf2\x56\x74\x25\x47\x52\x88\x0f\x5b\x75\xbd\xce\xbe\x20\x89\x44\x24\x0d\xbd\xf7\x93\x7a\x29\x9f\xe8\xbd\x9f\x67\x6b\xfd\xe3\xf7\x2e\xc8\x60\xf8\xfb\x05\x3e\xce\x03\xab\xa0\xa3\xa2\xda\x14\x5b\xe1\xd2\xc5\x15\xcb\x3b\x2e\xb6\x9b\x0c\xb5\xb9\xd7\x1a\x90\xea\x34\x3f\x4e\xc2\xf2\x66\x3d\xe5\xec\x30\x76\xd5\x70\xb3\x2b\xf7\xc2\x96\x8d\xc6\x0b\xe5\x26\x63\x4e\xa3\x59\xad\xd5\x3d\x6c\x96\xa5\xb5\x55\x83\xcb\x51\xe5\x2b\x95\x8d\x7f\x37\x32\xbc\xb5\x0d\x3c\x14\x25\xf9\x1b\x91\x44\xff\x1d\xeb\xfd\x1e\xe4\xb9\x32\xdb\xa4\xce\xf9\xb5\x6f\x40\xaa\x67\xd7\x6b\x7e\xb2\xde\x77\x91\xea\x0f\x21\x45\x5a\x7b\x77\xae\xd1\xf2\x30\x52\xa1\x4a\xb0\x16\xac\xd3\x6f\x68\xeb\x81\x57\x1e\xb4\x6d\x06\xaa\xc7\x5c\x5b\xb0\x25\xdf\x6e\xea\x1b\x08\x0b\x1b\xa3\xbb\xa7\x1e\x3a\xf0\x65\x37\x93\x59\xcd\x5b\xf9\x02\x5f\xe9\xc4\x86\xb9\xf5\x3c\x98\x9a\x79\x1a\x67\xbc\xc0\x80\xb6\x5a\x2e\x0e\xcb\x7a\x53\x06\xd4\x48\xbf\x32\x32\x0a\x20\xe1\x98\x46\x3c\x04\x14\x02\x89\xa9\x24\x84\x04\x2a\x8a\x04\x8f\x79\x12\x4b\xa4\xa4\x88\x25\x92\x34\x42\x61\xc0\x60\x08\x68\x8c\x68\x04\x13\x1e\xc7\x10\x24\x11\x7e\x41\x2a\x9c\x1a\x52\xdd\xca\x8b\xe7\x18\x80\x4f\x74\x1e\x0c\x00\xbf\x02\x2a\x46\xd3\x70\x3f\x7f\x52\x0e\xf2\x13\xa0\xfa\xac\xbc\xf8\x9b\xdf\xbb\x52\x61\x4a\x1b\x17\xc6\xfb\xca\x46\xf4\xa3\x44\x44\x4e\x2d\x6e\x95\x3d\x64\xd8\xfc\xc7\x5d\xe9\x74\x0a\x2d\x2b\xef\x15\x2b\x1d\xdb\x96\xa5\x49\x7b\xe9\xce\xba\xc6\x1a\x35\x58\x90\x85\x1b\xdf\x6c\x17\xa7\xdb\xad\x9f\x35\x67\xc5\x0a\xad\xcf\xdb\xc3\x3e\xea\xea\x2b\x0c\xda\xbe\xf6\x17\x02\xd5\xb3\x8c\x3f\x77\xfd\xdd\xf7\xf6\x34\xe5\xf5\x1a\xbf\x63\xbd\xdf\x03\x54\x57\x59\x2c\xa9\x33\x7e\xed\x1b\x80\xea\xd9\xf5\xde\xdd\x82\xec\x0f\x01\x45\x5a\x7b\x77\x2e\x41\xf9\x30\x50\xe9\xcb\x51\xd5\x5b\x35\xcb\xdb\x82\xe7\x65\xf3\xcd\x21\x1e\xeb\x50\xf6\xf6\x9b\x1d\x52\x71\x7b\x3c\xb0\x72\x75\x78\x68\x5a\xfd\xfe\xb6\x31\x1f\x07\xa0\x64\xbb\x3c\x1a\x6d\x26\x5b\x19\x4e\x72\x56\xa3\xcb\x39\xaa\xed\x4b\x7a\xd3\x69\x05\x6d\x9f\x44\x13\x77\x59\x95\x56\x27\xfd\xe6\xc7\x24\x91\x54\x0a\x04\x58\x10\x42\xae\x12\xc4\x43\xaa\x70\x1c\xca\x58\x02\x16\x31\x1c\x87\x71\x8c\x18\x3a\x27\xde\xa3\x38\x08\xa3\x08\x85\x2a\xe6\x61\x02\x91\x52\x2a\xf9\xa9\x52\x91\xd4\x80\xea\x56\x33\x32\x8e\x01\xa2\x1f\x07\x4a\xfd\x9c\x3d\x23\x15\x04\x80\xa5\x11\x06\xfe\x49\x09\xff\xef\x71\x25\x6a\x11\xab\x1c\xf3\xc6\xb0\x15\xd5\xd7\xf9\xd9\xf1\x68\x4c\x0d\x3c\x2c\x6a\x99\x4d\xdd\xd0\x83\x25\xae\xb9\xeb\x4d\x3e\x4b\xf0\x7c\x5a\x77\x8e\x23\x98\x1f\xcd\xb6\xc5\x9a\x0b\xfd\xc3\x51\xcd\x9d\x30\x5b\x8d\x37\xad\x6c\xb9\x54\x3d\xae\xe2\x32\xa8\x15\xab\xc1\xaa\xed\xc1\xb1\x96\xa6\x2b\xf1\xea\x43\x7f\x18\x01\x8c\xeb\xef\xbe\x33\xd2\x46\x2c\xf3\x77\xac\xf7\x7b\x10\xeb\xed\x79\xa7\x89\x00\xda\x37\x20\x56\x4a\xeb\x7d\x57\x62\xfc\x0e\xc4\x7a\x14\x31\xd2\xda\xbb\x73\xa9\xfd\x87\x11\xeb\xbb\x98\x4e\xba\x88\x25\x28\x0a\x03\x44\x63\x10\x93\x20\x80\x44\x06\x08\x45\x0a\x4a\x1c\xaa\x90\x11\x1a\xc4\x32\x0e\x03\x84\x63\x9e\x70\x82\x11\x07\x3c\xc1\xa1\x84\x80\x70\x12\xcb\x90\x05\x34\x7c\x41\x2c\x9a\x1a\x62\xdd\x6a\x6f\xc6\xf1\x0f\xea\x9f\x20\xd6\x79\xf6\x27\x62\x11\x9e\x46\x21\x98\x77\x53\xf1\xce\xe3\x4b\xa1\xbd\xef\x23\xd8\x05\x05\xde\x8e\x6b\x5d\x6b\x6a\x1d\x15\x1b\x2d\x76\xf1\xa1\x50\x26\xcd\x63\xc1\x08\x97\x19\x61\xb7\x1c\xdb\x5e\xc1\x0e\x1d\x2a\x8f\x0e\x1a\xd5\x1d\x31\xe2\xd9\xf4\xe8\x6a\xf5\x71\x3c\xf4\x8b\xb2\xea\x4c\xb3\xde\x68\xa9\x66\xba\xcc\x6f\x23\xd1\x57\x74\x5c\xdd\x67\x60\x5f\x4a\x68\xef\x8b\xad\xe2\x5f\x88\x5c\x29\x21\xc1\xbb\xfb\xa9\x7d\x03\x72\x59\xbf\x63\xbd\xdf\x83\x5c\x6f\xef\x6c\x9a\x48\xa0\x7d\x03\x72\xa5\xb6\xde\xaf\xa6\x16\xff\x21\xe4\x48\x6b\xef\x0a\x95\xc7\xe8\xbf\x20\x57\x71\xaf\xb0\x33\x2f\xad\xf2\xab\x81\x9e\x31\xc5\x41\x43\x2c\xbb\xcd\x8d\x8d\x7e\x7f\x59\x6d\x6f\x7c\x6c\x65\xfc\xd1\x50\x39\x1a\x5e\x14\x05\xd0\xcc\xae\x37\x43\x7a\xd2\x6c\xce\xb3\x90\x96\x70\x49\xdb\xd6\x39\x4e\x0a\x9e\xd3\x6d\xaa\x64\xed\x27\x49\x54\x5f\x35\xda\xe9\x97\xc8\x14\x4a\x29\xa0\x90\x50\x38\x96\x32\x60\x58\x29\x2a\xc3\x20\xe2\x51\xac\x70\x42\x15\x65\x71\x88\x25\x41\x8a\x12\x11\xab\x88\x80\x50\x61\xa9\x28\x90\x11\x0b\x81\x80\x11\x79\x41\x2e\x96\x1a\x72\x89\xdb\xc8\xc5\x3e\x2e\xf7\x7f\x9a\xbd\x46\x2e\x21\xd2\x28\x0e\x62\xbf\x39\xe2\x67\x93\x52\x4e\xf3\xbf\x86\xe2\xbc\x19\x57\xba\xd7\xa8\x60\x30\x7d\x94\xcb\xd7\x64\x3c\xdb\x96\x5d\x6f\x54\x71\x8b\xdc\x1d\x99\xac\xda\x19\x4f\xa2\x92\x3d\x29\xef\x83\x41\x01\xfa\x41\xbb\xd4\x0d\x4a\xc5\xfd\x91\xd6\x04\xdd\x67\xd8\xee\x38\xf7\xf7\xfb\x70\xc5\x72\x11\x1a\x93\xc5\xbe\x3d\x6c\x70\x17\x33\x63\x57\x1f\x2c\x72\xda\x5f\xa9\x7b\xa5\x87\x08\xbd\xf7\xa5\x82\x94\xd7\x6b\xff\x8e\xf5\x7e\x0f\x82\xf9\x6f\xce\x3b\x4d\x44\xd0\xbe\x01\xc1\x52\x59\xef\x33\xc5\x32\xfe\x10\xa2\xa4\xb5\x97\xf6\xec\x31\xfa\x2f\x88\xf6\x5d\x4c\x28\x65\x44\xc3\x08\x40\x00\x89\x10\x00\x70\x9c\x88\x38\x49\x58\x82\x60\x10\x73\x16\x53\xa8\x90\x22\x49\x90\x50\x8c\x63\x4a\x41\xac\x22\xac\x10\x02\x34\x24\x22\x00\x12\x49\x06\x82\x17\x44\xe3\xa9\x21\xda\xad\x56\x04\x1c\x03\x49\x3e\x73\x73\x9d\x3b\x4d\x9f\x01\x0d\xfe\x58\xe3\xf3\x80\x96\x7f\x73\xc2\x7f\x5d\x96\xe5\xda\x5f\x8f\x57\x8b\x4a\x3d\x76\x67\xb0\x35\x6b\x21\xdb\x1f\x86\xb8\x4f\xd1\xce\x2c\x6d\xa7\xb3\x8d\xde\x70\x58\xd9\x75\xe0\x7e\x92\xd5\x96\xfd\xb5\xeb\x64\x57\x1e\x5d\x60\xda\x58\x8b\xdc\x30\xf0\x3b\xe6\xc0\x9a\xce\x33\x0d\x77\x88\xac\xae\x2e\xa4\xb3\xda\xe9\xe3\x48\xdb\xfd\x95\x80\x97\x0a\x80\x7c\x12\xd7\xfb\x76\xa4\x0d\x80\xf9\x3f\xb1\xfe\x6f\x8c\x2b\xbf\xba\x0f\xdf\x09\x30\xda\x37\x00\xe4\x5f\x1f\x17\xff\x0d\xa0\xfa\x28\xa8\x7d\xc7\xfe\xdf\x43\xff\x05\x54\xbf\x8b\xd1\xa5\x0b\xaa\x1c\x80\x24\x20\x24\x0c\x09\x88\x59\x10\x21\x45\x85\x10\x8c\x32\x15\xa1\x98\x87\x22\x12\x2c\x8a\x71\x84\x29\xe5\x21\xa3\x38\x88\x99\xe0\x84\x30\x06\x39\x8d\x18\x91\x88\xff\x00\x55\xfe\x7c\x27\x85\x9b\xb1\x8d\x94\x51\xf2\x61\x27\x85\xd3\x2c\xbe\x80\x33\xfa\xa1\x1e\x3e\xdf\x49\xe1\x6d\xd5\xff\x5f\x3b\x29\xdc\xcf\x5f\x3f\xe8\xa4\x90\x5b\x60\xbb\x66\xb4\xe3\x7a\x2d\xd9\x2d\xd6\x1d\x42\xed\x6e\x75\xd0\x8a\x5c\x39\x64\xa6\xac\xae\x8e\xd9\x71\xc5\xef\xa8\x8e\xd1\xb1\xf5\xae\x66\x34\x56\xe6\xc0\x9c\x79\xc1\x12\xe6\x3b\x56\x89\x45\xcb\xf9\x7a\x65\x9b\x63\x59\x63\x05\x99\x70\x1d\xd9\xb9\x52\x48\x7c\xb7\x92\x56\x27\x85\xeb\x77\xe0\xce\x4e\x06\x6d\x55\x8f\xf5\xab\x96\x26\xd5\x77\x29\xdf\x70\x50\xa5\x48\xff\xa1\x4e\x0e\x57\x9d\x14\x9e\xa8\xde\xdf\xde\x5b\xa4\xf4\x6c\xf5\xfe\x3f\xd8\x3d\x40\xd3\xfe\x5c\xe4\xfa\xbb\x4a\x5b\xf7\xf1\xbd\xf8\x71\x16\xe5\xab\x34\x0c\x70\xe7\x5e\x3c\x7b\x16\x6f\xef\xc2\x3d\xf4\x5f\xf0\x25\x58\xef\x87\x3b\xe8\x8d\x9a\x58\x94\x96\xed\x8d\x53\x9f\x34\xfd\x71\xbe\x55\xf3\x33\xfd\x5a\x33\xac\x64\x69\xd3\xb6\xa6\x56\x0f\xf6\x7b\x13\x57\x03\xcb\x5c\xa1\x5f\xb2\xd0\x42\xd6\x61\xbf\xb1\x99\x06\x2c\x0c\x73\xfd\x62\xd2\xcc\x0c\x6a\x5e\x66\xb7\xee\xf7\x1a\x93\x8c\x6d\x1a\xa9\x2b\x6d\x01\x67\x31\x40\x0c\x24\x2c\x14\x58\xb1\x38\x90\x38\xa1\x84\x46\x90\x47\x31\x47\x50\x01\x2e\x23\x85\x61\x2c\x60\x1c\xd3\x38\x52\x04\x26\x90\xca\x58\xd1\x24\x24\x82\x9c\x98\x3a\xfa\xd9\xab\x3a\xc7\xec\x2a\x2e\x17\x5b\x1d\x56\xf4\xeb\xdc\x34\x9c\x22\xe1\xed\x5c\x9e\x1b\x84\x56\x48\xb1\x93\xf7\xec\x12\x2b\xe7\x8b\x75\xcd\x2c\xd0\x62\xae\x51\x45\x46\xce\xf5\xb9\xfb\x03\x17\x00\xc7\x9c\x40\x81\xc8\xed\xda\x38\x4c\x7c\xd2\x49\xe1\x34\x7b\x0a\x4e\x84\x90\x31\x09\x29\xe6\xf2\x35\xe4\x23\xbf\x9f\xf0\xce\x64\xbc\x2d\xee\xf3\x34\xb7\x69\x1e\xa5\x3b\xcd\xd4\xa6\x1d\xd5\xf4\xe5\xb1\x24\x56\xcc\xef\x15\x86\x0b\xf7\x10\xce\x7c\xff\xf5\xfa\xe6\xae\xea\x53\x5c\x5d\xa7\x37\x57\xe0\xba\x7f\x9c\xe8\x6e\xe0\x7c\x1e\x1e\x54\x3d\xe3\x86\x23\x91\x6d\x15\xb3\x43\x0a\xa7\x26\xaa\xa9\xc3\xb6\xec\x4c\x0a\x7a\x81\x8d\x2a\x13\x66\x5f\xdb\x36\xa3\x63\xa7\x75\x75\x73\xaf\x1d\x6e\xaf\xeb\x71\x73\x8b\xa3\xee\x1b\x9b\xb2\x3f\xcd\x0e\xbd\x7e\x62\xb6\xf7\xa6\x3d\xe8\x55\xf4\xa2\x3d\x73\x72\x7a\x49\xa2\x71\x2b\xc4\xad\x09\xa4\xb5\xde\xae\x51\x64\x78\x5d\x1d\x67\xac\x79\x5e\x64\x0e\x54\x65\x26\xfa\x2a\xbb\x3c\xaa\x6d\x74\x98\xc9\x8d\x17\xcd\xa2\x88\x94\xbd\xce\xc0\xed\x7d\x45\x33\x7b\x1b\x9c\xa9\x3d\xb2\x9f\xe7\xd1\xfa\xbe\xfd\x7a\x93\x11\x79\xf9\xb7\x2b\xa4\xbc\xd2\x06\x12\x3b\x5c\x07\x41\x47\x4c\xcd\x64\x64\xd3\x5a\x0d\xea\x09\xc9\x44\xdd\x7d\x75\x88\x2b\xcb\xc3\x71\x3e\xd0\x06\xce\xdc\x28\x6e\xfa\xfd\xd3\x97\x2e\x9d\x4a\x73\xbf\x54\x8b\xbe\x1a\x37\x90\x32\x3d\xfa\xcf\xf6\xbc\x0b\xae\xa6\xee\x3c\x83\xab\x80\x3c\xf7\x13\x9a\x9f\x73\xe7\xb4\xe9\xdf\xea\x79\xf7\x92\x65\xab\xe0\xf8\xa3\x65\xbd\x7e\xf2\xa4\xd8\x9c\x9d\xdc\xff\x0b\x77\xfc\x7d\xc4\x7d\x60\x4f\x5f\xd0\xff\x33\x09\xe3\x5b\xcf\xf4\x25\x1b\xe1\x6e\xfa\x2f\x88\x6b\x2f\x2b\xc5\x9e\x43\xd6\x83\x24\x53\x8d\x2d\x51\xf7\x4c\x37\x28\x69\xbb\xc2\x28\xe8\x11\xb3\xb0\xc4\x41\xbb\xbe\x8d\x1a\xa1\x37\xca\x18\xb9\xc2\x74\x19\x03\xe4\x91\xce\x28\x39\xf2\xf2\xf8\xc8\xfc\xd2\x31\xb3\xad\x1e\x24\x2e\x0d\x11\x8d\x50\x1f\xe2\xde\x3a\x0a\x8a\xe9\x77\x05\x90\x28\x60\x94\x28\xce\x24\x63\x81\x62\x30\x50\x4a\x46\x09\x08\x39\x4d\x24\x54\x61\x14\xe3\x90\x52\xa8\x64\x2c\x39\x63\x1c\x03\x81\x78\x90\x10\x14\xc1\x18\x11\xae\xd4\x4f\xc4\x45\xa9\x21\xee\xad\x5a\xbb\x9c\x49\xf0\x09\xe0\x9e\x27\x7f\xe2\x2d\x17\x17\xcd\xee\x71\xbc\xfd\x24\x6b\xed\xea\x02\xb4\xdb\xcd\xfa\xcb\xff\xde\xc9\x4b\xbf\x88\xb7\xa1\x29\x9b\x7c\x96\x2b\xcd\xaa\x20\xdb\xc0\x5a\x9b\xdb\xb3\x46\x3d\xce\xec\x9b\x5c\x36\xc6\x9d\xaa\xee\x9b\xeb\x32\xac\xd7\xcc\x7d\x59\x58\xe5\xfe\x8e\x9a\xc6\xca\x2b\xcf\xb4\x6d\x21\x17\xe6\xb6\xf9\xc2\x52\x56\x4b\xaa\xb6\xee\x18\x87\xbe\xca\x8f\x0b\x9b\xa0\x5b\x2a\xf4\xc4\x6f\xc6\x5b\xff\xfb\xf6\xeb\xf7\xe2\xed\xd7\x3a\x93\x9f\xc5\x31\x5c\xed\x7e\xc6\x44\xd2\xc6\x9f\xab\x2a\x0e\xbf\xac\xe5\x42\xe4\xf4\xdf\x5b\xf8\x73\xfa\x4e\xe5\x3b\xf6\xef\x6b\x9d\xd5\xff\xdc\xfe\xfd\x1a\x16\x7d\x63\xff\x2e\x77\xf2\xcd\x78\x1a\xbf\x7f\xf3\x3b\x73\xc1\xef\x3f\x84\x9f\xda\x37\x9c\xe9\x3d\xf4\x7f\xf6\xb6\x5d\x35\x61\x6d\xd3\x33\x17\x3d\xdc\x94\x65\x95\xf3\x56\x41\xbf\x68\x71\x6e\xd5\xb6\xb0\xd4\xf6\x41\xb1\xd7\x00\xdb\xb6\x29\x9a\xe6\x76\xd7\xda\xe4\x8d\x91\xeb\xec\xd5\xa6\xa7\x8b\x9e\xb5\xb2\x85\x1a\x6c\x01\x98\xef\x32\xd0\xaf\x95\xac\x5d\xdc\x1a\xd0\xf9\x68\x36\x30\x52\xb7\xc8\x52\xc0\xa8\x8a\xb8\x92\x5c\x25\x21\x4b\xc2\x84\x47\x81\x20\x12\x87\x71\x1c\x11\x1e\x47\x48\xf1\x38\x09\x71\x08\x40\xc8\x79\x40\x94\x44\x4c\xa2\x38\x22\x82\x27\xa1\x60\xc1\x29\x70\x87\x3e\x6f\x91\xbd\x59\xb7\x84\x4b\xf1\x89\x73\xf3\xe7\xec\x4f\x39\x80\x11\xc9\x9e\xb7\xc8\xbe\xb5\x1e\xfe\xc2\x13\x1f\xe0\x61\x1f\x59\x64\xd7\xfd\x5d\x13\x17\xf5\x1e\x2d\x74\x47\xa5\x7a\xb5\x84\xe7\xf9\x5c\x90\x8d\x6d\x71\x5c\x08\x2d\x91\x3d\xab\xd6\x19\xfb\x5b\x33\xaa\xcf\xd8\xf0\xa8\x51\x43\x26\xbe\xa3\x8c\x79\xc9\xc0\x91\xa9\x6d\x6a\xe5\x6a\x55\xcb\x0f\xe5\xba\x1a\x76\x5b\x45\x0d\x2f\x77\xfb\xaa\x24\xb9\xd4\x2c\xb2\x57\x9f\xbf\xd3\x22\xea\xed\x1b\xd5\x09\xbf\x7c\xfd\x6d\x7f\xa4\x97\x71\x43\xcf\x4c\x8f\xfe\x43\x16\xe1\x2b\x3d\xf3\x09\x2b\x60\x62\x15\x50\xf8\xac\x15\xf0\x0f\x5a\x21\xb5\xb7\xf4\x7f\xa3\x4e\xf6\xae\x45\xb6\xfd\xf8\x5e\xfc\x38\x8b\xe8\x8a\xd2\x07\x26\xe2\x6f\x3b\x8b\xb7\x77\xe1\x1e\xfa\x2f\xf8\x12\xfa\xca\x94\x07\x77\xe6\x34\xec\xae\x3e\x6a\x36\xd6\xac\xbe\xeb\x6c\x71\x7f\x5b\x61\x5b\x2d\x9f\xf5\x73\x4d\x38\xef\x94\xf7\xf9\x56\xe0\xcc\xc4\xce\x71\xb3\x1e\x32\xa6\x1a\x6b\xf4\x24\xae\x6b\xe5\xe1\xe1\xd8\x74\x73\x24\x1b\x36\x3b\xa8\xad\xbb\x55\x26\x2a\xcd\x24\x4e\x3f\xa5\x01\x40\x4c\x58\x14\x43\x15\x60\xa0\x62\x80\x21\x91\x91\x4c\x28\x91\x84\x4a\xca\x02\x84\x12\xa9\xc2\x38\xc2\x91\x80\x89\x80\x8a\xa1\x30\xa4\x52\x25\x42\x45\x91\x08\x85\x3c\xe9\x87\xe4\x27\xbe\x20\xb7\xe0\x37\x51\x41\x6b\x59\x95\xba\x57\x2a\x37\xca\xe5\x5a\xdd\xd4\x75\xe6\xe8\x8e\x5d\xac\x68\x46\xa3\xd6\xac\x97\x78\xd3\xae\x36\x51\xc3\xaa\x23\xdf\xee\x18\x5a\xdd\xf8\xcf\x7f\xff\x4f\x02\x28\x09\x86\x18\xc1\x9b\x19\x0d\x12\x7e\x82\x33\x2f\x93\x10\x60\xc0\x25\x82\x12\x81\xd7\x20\x9a\x7c\xcb\xf4\xa7\x73\xad\x64\x75\x6d\x36\x3e\x74\xd6\xa2\xa1\x5b\x74\x37\xb5\x1b\x3b\x8d\xd6\xa6\x96\x47\x27\x61\xad\x35\xd8\xc3\x1e\xec\xbf\xde\x9d\xdc\x55\xf9\xab\xab\xbb\x74\xf9\xdf\x73\x23\xdb\x2b\xd3\x0b\xcc\xd9\x45\xe6\xea\xfd\x4e\x7d\x33\x57\xe3\x65\x62\xf6\xfa\xb1\x2a\xee\x47\x2b\xcd\x69\xd2\x7d\x3b\xd3\x9d\x1c\x61\x61\x15\xf9\x55\xff\xea\xea\x98\xb1\x3d\xbc\xba\xb6\xef\x9b\xda\xc2\x7c\xc7\xe8\x98\xa7\x69\x50\xce\x30\x69\xc0\xfe\x7e\x7e\x58\x6b\x23\x8f\xa9\x6d\x6d\x90\xdb\x38\x02\x2c\xc6\xa2\xe1\x96\xba\x90\xd6\x9c\xf6\x7e\x2f\x77\xfe\x98\x4d\xba\xcb\x72\x86\xb5\x3a\x76\x10\x66\x33\x6c\xda\x43\x95\x4c\x80\xa4\xc9\x9d\x6a\xc6\x5b\x11\xe6\xcb\x4a\x75\xd1\xec\x4b\xf8\xc5\x0c\xbd\x5f\x32\xe6\xbc\x52\xc6\x82\x45\x67\x25\x88\x5b\x35\xfa\xd3\x49\x61\x38\x2c\xb5\x0c\x37\x33\x31\xb7\x9b\xb8\xbb\x33\xca\xd9\xb5\xde\xae\x7b\xd6\x70\xaa\xde\x7d\x9b\xf4\xcc\xf6\x45\x14\xb7\xda\x2d\xf0\x42\xe8\xce\xb3\xd2\xb4\xed\x72\x77\x1d\x78\x71\xf7\xf7\xb5\xf7\x4c\xeb\x0f\x9d\x65\x2e\xf1\xfa\x9f\x9d\xe5\x87\x10\x7e\xf5\x99\xc8\xad\x0f\xe2\x91\x36\x6b\x8f\xc2\x85\x57\x0c\xf0\xbe\x50\xf0\xa6\xba\xea\x96\x35\x63\x94\x51\xed\x64\xd2\x5d\xc9\x46\xf9\xe7\x7d\x38\xab\x5e\x53\xed\xf5\xbe\x7e\x30\x6e\x40\x78\x7a\xf4\x1f\x32\x15\xeb\x17\x55\xd4\x3b\xfd\xeb\xb9\xf6\xa5\x5a\x12\xaf\x35\x62\xc7\x63\x5f\x03\x8e\x1d\xfb\x03\xa7\x32\x77\xab\x06\xf3\x1b\x19\x4a\xa7\x5a\x65\x9b\x01\xc5\xb6\xa5\x3a\x4e\x74\xb9\x53\x57\x77\x34\x95\x3b\xf5\x49\x91\xa2\x2b\x55\xd2\x3a\x6c\xfb\x51\xa3\xb9\xac\x39\xa6\xe1\x92\x2e\x1d\x14\xc8\x61\xac\x81\xda\xbc\x5f\xe6\xd3\x89\xd2\x0e\x59\xee\x8e\x5b\xed\xbd\x4f\xaf\xda\xd8\x5d\x54\x6f\xeb\x2a\x2f\xff\xce\x77\xea\xe9\x3b\x9b\x64\x7f\x0e\xf1\xf6\x79\xcb\x4c\x7c\x98\x73\xf3\x73\xbd\xfe\xe5\xf3\xf7\x9e\xd7\xb3\xe7\x93\x7b\x5d\x79\xf6\x6d\xd3\xe4\x5b\xe3\x54\xa0\xf6\x8a\x27\xdd\x7b\x7e\x63\xb7\x4c\x8e\xa7\x0b\x72\x16\x73\x7a\xda\x7b\xf9\x49\xb9\x77\xf6\xeb\x7a\xbc\xb7\xbf\xbf\xbc\x8f\x77\xde\x07\xbd\xa1\x6b\xfd\xb3\x29\xe6\xf4\x3e\xde\x61\x8a\xf9\xd2\x38\x9f\xf7\xf9\xfd\x7c\xe4\xbe\x9d\x09\x5f\x99\x3a\xee\xe4\x37\x3f\x77\x05\x12\xf7\xb2\x5f\xef\xaf\xbf\xa2\xfd\xd3\xbe\x72\xef\x7a\x2f\x66\x0e\xeb\x71\xd7\xd3\x33\xf4\x13\xc9\x3a\x6f\xe9\x7f\xcd\xf4\x77\xd9\x9f\x5f\xc6\x0d\x51\xfd\x81\x3d\x3a\x13\xb2\x1e\x37\x05\xa5\x78\x46\xf7\xd0\x7f\x11\xd5\xbf\x4b\xa0\x4a\x57\x54\x8f\x44\x88\x28\x10\x10\x61\x46\x59\x08\xa3\x04\xc6\x31\xe4\x0a\x71\xc6\x05\x92\xa1\x42\x28\x08\x09\x94\x54\x06\x11\xa2\x31\x53\x4a\x51\x04\x62\x41\x24\x85\x2c\x09\x03\xf8\x43\x54\xc7\x3f\x45\x75\xa7\xc4\x73\x4e\xab\xe1\x74\x6a\xf9\x9c\x56\xcd\xf9\x15\x56\x29\xd4\xfd\x6e\xb1\x60\x14\x6a\x2d\xbf\x58\xf3\xf2\xcd\xbc\x66\x58\x9c\xb6\xcc\x76\xa1\xed\x77\xf2\x79\xa7\xea\xea\xff\x10\xd5\x6f\xa5\x70\x09\x48\xa9\xf8\xd0\x95\xf3\x3a\x2b\x05\x17\x04\x51\x28\xc1\x6b\x06\xd7\x9d\xbc\xf8\x4a\x56\xff\xc4\x95\x73\x65\xd9\x78\x82\xf7\x5c\xe4\xd5\x4f\xb0\xe6\x95\x17\xe7\xb4\x66\x9d\x88\xbd\x3f\x28\x85\x1b\xa1\x39\x33\xcf\xda\x6d\xd5\xb6\x50\xee\x82\xec\xdc\x1d\x25\xf6\x66\xb7\xd3\x66\x85\x6e\x35\x4e\x96\xfc\x10\x15\x76\x63\xb5\x29\x13\xe2\xd5\x2a\x7c\x5e\xcc\xb2\xa1\xd1\x08\x17\xb9\x4d\xd4\xac\x76\x22\x13\x15\xeb\xc3\xcd\x82\xe7\x0b\xbc\xa0\x7d\x2d\xa3\xeb\x7d\xb7\xce\xe3\x72\xca\xb7\xef\xdd\x47\xb2\xb1\x75\xa5\x2f\xdc\x8b\x85\x17\xb7\xc4\x95\x6c\x7a\x0b\x0b\x2f\x23\x97\x32\xfd\xaf\x61\xf1\x1b\xfa\xb9\xb7\xb2\xf1\x79\xea\x4e\x59\xeb\x62\x32\xb7\xbe\xee\x46\x7a\xbb\xc6\xb4\xe9\x7f\xcd\x0d\x73\x35\x2e\x77\xe8\xed\x4e\x29\x2d\x05\x59\xfc\x3c\xbe\x9b\x3f\x9c\x64\x4f\xff\x32\x7f\xef\x7a\x9f\x95\x9d\xf2\x17\xb1\xf9\x9d\x3d\x7f\x69\x5e\xa1\xfe\xb2\xf5\xbd\xdd\xdf\x5f\xc6\x7b\x26\xc8\xce\xf5\x05\xb9\xff\xbe\xfe\x22\xfb\xfd\xc1\xf7\xe5\x1e\xfa\x2f\x72\xcd\x77\x81\x4f\xba\x72\x4d\x18\x03\x1a\x93\x30\x92\x8c\x45\x54\x30\x21\x63\x18\xb2\x24\x88\x01\xc4\x31\x0d\x02\xce\xc3\x28\xa6\x2c\x66\x81\x8a\x50\x14\xca\x50\x32\xc1\x41\x4c\x63\x4e\x58\x40\x82\xf0\x94\x74\x80\x52\x94\x6b\x6e\x99\x20\x05\xe2\x94\x7f\x98\x7d\xf0\x3a\x2b\x09\x11\x12\x09\xc2\x80\x78\x5e\xae\xf9\xc4\x06\x79\xe6\x23\x0f\xd9\x00\xbc\x37\xef\xd9\xf9\xde\xbe\xd2\x77\x8d\x8a\xde\x49\x74\x10\xdb\xd5\xe2\xc6\x2f\x78\x78\x45\xb5\x56\xb5\x1c\x2f\xa7\x73\x95\x6f\x4e\x85\xc3\x0e\xbd\x45\xb6\xba\xc3\x0d\xba\x9d\x1e\xb2\x1d\x82\x1c\x6a\x13\x9b\xb5\x56\x83\x7e\xbb\x05\xf7\x11\x0d\xeb\x64\x30\x41\x99\xf6\xd1\x1d\xbb\xbe\xdb\x8f\xc1\xb0\xbf\xfb\x52\x08\xe8\xb5\xfa\xfb\xa1\xdb\xcb\xba\xb2\xf9\x3d\x82\xcb\xcf\xda\xcc\x52\xa4\xff\x6c\x78\x65\xda\x7c\xee\xd7\xf1\x39\x9f\xfb\x83\x7c\x56\xbb\xd0\xff\xed\x36\xa8\x13\xbd\xf7\x6c\x50\x2f\xe3\xa6\x5b\xec\x81\xbd\x7a\x5a\xd7\x4e\xf1\xac\xee\xa1\xff\x82\x49\x95\x5d\xb1\x2b\xca\x75\xe2\x83\x09\xed\xf5\x93\xf8\x38\xca\xb9\x60\xcd\x36\xf1\x78\x17\x39\xc9\x8e\x2f\x4b\xfa\x52\x60\x23\x2a\x4f\x32\x49\x59\x86\x43\x9f\x8f\xc2\x5e\x38\x6f\x1c\x4a\x56\xbb\xe9\x59\x78\xbc\xce\x0f\x4a\x61\x48\xbd\xaa\xde\xce\xf5\x75\x8b\x37\x9c\x7c\xfa\x61\x93\x28\x60\x52\xf0\x80\x49\x0c\xe2\x20\xe4\x31\x0e\x63\x15\xa8\x44\x86\x9c\xc5\x11\x0f\x00\x13\x00\x31\x26\x14\x4c\x60\x1c\x82\x44\xa0\x84\x32\x0e\x01\x24\x21\x09\x19\x66\xa7\xec\x72\xf8\x7c\xd8\xc5\xad\xf4\x04\x81\x05\x06\x1f\x56\x49\x79\x9d\x7d\xc1\x36\x8e\x21\x7a\x3e\xea\xa2\xfc\xe6\x5c\x7f\x79\x55\x1f\x60\x85\x1f\x44\x5d\x18\xc9\xbc\x15\xaf\x42\x32\x72\xb3\xf5\x24\xb7\x87\xad\xfd\xa2\xea\xac\xbb\x28\x43\xea\xa4\x01\xbc\xfd\xb1\xd7\xab\xd5\xa1\x8e\xfd\x43\xbf\xab\x2d\xb3\x25\x51\x3a\x74\xf5\x1e\x89\x87\x46\xd3\x9a\xf6\x37\x72\xa1\xf5\x89\x5d\xee\x96\x47\x61\x6e\x19\xd8\x53\xd5\x94\x86\xf2\xad\xb4\xa2\x2e\xac\xc7\xa3\x1e\x54\xd8\x5c\x6d\xaf\x80\xa7\xf4\x2e\xe5\x5b\xf0\x93\x1e\xfd\xb7\x67\xfa\x25\xfa\x57\xf0\xf3\x84\xa7\x7f\xbf\x76\x0e\xf2\xea\x49\x3e\xe8\x86\xf3\x39\x4b\x7b\x82\xfe\xac\x5b\x06\xeb\x27\xe8\x6b\x6f\xe9\xff\x46\x96\xfe\x2e\xbc\xb8\x8f\xef\xc5\x7e\xed\x1c\xaf\x4d\xb1\xb3\x3b\xf7\xe2\xd9\xb3\xf8\x71\x17\x32\xe0\x31\xfa\x2f\xf0\x82\x59\x3b\xbf\xb4\x33\x45\xb3\x06\xbc\x9d\x8a\xda\x95\x60\xd8\x5c\x76\xa2\xed\xc6\x8c\xcd\xb5\x25\x14\x29\x18\x20\x72\xd7\xa8\x32\xeb\xb8\xa5\xec\x61\xab\xaf\x26\xee\xcc\xc9\xcf\x76\x60\xdf\x25\xe1\x36\xe8\x15\xe2\xdc\x00\x35\xa8\xbd\x0b\x50\x7f\x8e\xcd\xac\x8b\xed\xf4\xfb\x92\x49\x46\x20\x0d\x14\x8c\x50\xc2\x25\x43\x30\x44\x2c\x84\x94\x89\x44\x32\x9c\x44\x22\x8a\x98\xa2\x40\x21\x10\x20\xa4\x38\x41\x42\xc5\x49\x98\xc4\x32\x8a\x63\xc1\x38\x15\xe2\x05\x5e\xd0\x93\xf0\x72\x2b\x16\x5f\x60\x41\xd8\x87\xbd\x53\x5f\x67\xcf\xf0\x82\x20\x01\x29\xa4\x59\xbf\x0d\x40\xfb\x05\x5e\x1e\xf0\x4e\x7f\x04\x2f\x51\xd1\x8e\xb6\x51\x17\x35\x88\x3b\xf3\x22\x27\xe3\x44\x6b\xd1\xad\x47\x71\x7b\xc3\x27\xb9\xed\x82\x5b\xeb\x9a\x9c\x8d\x16\x4b\x29\xe6\xb6\x91\x1d\x36\xb4\x65\x30\x1a\xbb\xdb\xa0\x3e\xd1\x0f\x15\xad\x5c\xa8\x18\x68\x64\x8b\x3a\x2a\x0d\xfb\xa5\xed\x81\xcf\x0a\x65\x56\x48\x2d\xa8\xef\x09\xf6\x1e\xd8\x0d\x59\x7e\x96\xbd\xa7\x48\xff\xa1\xa0\xc2\x74\xe0\xe5\x2d\x7b\x7f\x28\x90\xec\x0f\x06\xb2\x69\x6f\xe9\xff\x46\xef\x5c\xda\x41\x7d\xcf\xb0\x77\x2d\x25\x78\xb9\x16\x35\x1e\x81\x97\x46\x7d\x1a\xe2\x4e\x34\xda\x98\x25\x0b\x37\xb7\xc3\x69\x98\xd8\x2d\xcf\x1b\x87\x1b\xda\x0b\xd9\x66\x1f\x36\xb3\x41\xb1\xb4\xc8\x26\xa5\x7a\x2f\x4b\x40\xaf\x84\xe6\xc5\x56\x19\x8d\xba\xbd\xd5\x50\xd3\x0f\x86\x26\xe7\xb9\xad\x19\x0d\x66\xa4\xb1\x14\x1b\xa6\xeb\x99\x41\xfa\x9e\xc2\x04\x88\x48\xc1\x24\x56\x90\x82\x04\x71\x46\x19\x12\x8c\xa9\x98\x24\x14\x71\x94\x30\x2a\x54\x02\xc2\x48\x26\x91\x50\x30\x92\xec\x07\xcc\x40\xc9\xc2\x18\xc5\x30\x44\xf4\xa4\xbd\xbc\xc0\x82\x6d\xd4\x3b\x98\xd3\x8a\xe6\xd7\x09\x73\x0c\xdb\x42\x1d\x5b\xab\xba\x3a\xaa\xd7\xbb\x65\xee\x20\xc2\x0c\x3f\x9f\xd7\xed\x4e\xb3\x8d\xea\x26\x2f\xe4\x4d\xe4\xb6\xdc\xb2\xf1\x9f\xff\xfe\x1f\x13\x1c\x4a\xc2\x19\xc7\xb7\x4a\x63\x09\x22\x20\xfe\xd8\xa2\xf6\x73\x56\x50\x21\x25\xa6\x00\xc0\xd7\xe0\x71\xa7\xba\xce\xb2\x9d\x5d\x10\x82\x74\x07\x6c\xe5\x1b\xbe\x0e\x6d\xa7\x9d\x8d\x96\xd3\x3e\x71\x54\x7d\xd9\x5c\x2e\x8a\xb5\x99\xd3\x6c\x9d\x44\xec\xb3\x45\xed\xf4\xcd\x4f\x3a\xc0\x5c\x45\x64\x18\x9b\xe0\xd0\xfb\xf9\x81\xe1\x2c\x57\x31\x5b\x83\x6e\xb5\xdc\x1a\xae\x3a\x5e\x19\x0e\x4a\x54\x1a\x12\x94\x07\x64\x47\x19\xe0\x2c\x14\xf9\xd2\xbe\x9b\x9c\x3d\x2b\xf5\x76\xbb\xf1\xf2\x2b\x9b\xdd\xb6\x7a\xac\x8e\xe4\x7a\x17\x6e\x8a\xf9\x56\x6e\x31\xf5\x10\xb3\xfd\x02\xae\x84\x7a\x34\x77\x5b\x72\x4d\xa6\xcc\x6c\xd7\xbd\xd5\xf9\xee\xf1\xc9\xea\x97\xbb\x99\x63\xc6\x08\xea\xbd\x53\x30\x7a\x86\x0f\xf7\xf1\x2a\x57\x2a\x2d\x2d\x4c\xf0\x6c\x7a\x38\xa8\xe1\x1c\xad\x07\x6e\xb9\x3b\xb0\xf3\xc8\x6c\x8e\x33\x32\xd9\x38\x8b\xd9\x7a\x1b\xfb\x68\x59\xe8\x6d\xd7\x72\xda\xcb\xb8\x45\x14\x18\x35\x9c\xa9\x4d\x8d\x95\x6f\x06\xb2\xdb\x0a\xb4\x4c\x77\x1a\xa3\x69\xc1\xee\x99\x5f\xc0\xad\x5f\x3a\xbc\x94\x57\xe5\xa3\x3a\x76\x6b\xa1\xb2\xf9\xa0\x0e\xb5\x60\x0e\xe5\xa6\x3f\xd1\xab\x47\x7b\x37\x0d\x5a\x56\x2d\x8c\x8b\x99\xbe\xd5\x6a\xf3\x2b\x5e\x7f\xda\x4f\xcb\x6a\xb7\x5f\xf6\x59\xe7\xba\xc0\x15\xd4\x44\x38\xb7\x21\xa3\xc8\xb5\x17\x51\x12\xce\xba\xbd\xa1\xda\xaf\x8a\x68\x9c\x6b\x22\x3c\x48\x66\xf5\xb6\x15\xef\xdf\x9e\xc9\xdf\x71\x46\xff\xdf\xc7\x18\x7e\xb5\x4c\x82\x70\x76\xa9\xf9\xc3\xe3\xb1\x3f\x29\x2f\xf6\xbd\x6a\xaf\xdc\xf2\xa9\x27\xd1\x26\xce\xf7\xe8\xde\x5e\x3b\x9b\xd9\x28\xd3\xa3\x55\xf7\x9c\x50\xd4\xd6\xb6\x03\x78\xb9\x99\x0f\x79\x0e\x53\xa4\x6f\x3c\x42\xff\xbc\xe8\x13\x6e\x34\xaf\xbe\x6f\xea\x4e\xcf\xdc\xd5\x1b\xc5\x11\x58\x37\x9c\x7d\x57\x6d\x3b\x85\xe5\x14\xd4\xb0\xbb\x29\x0f\x8d\xe9\xb2\xb9\x9d\x6f\x77\x6a\x69\x8d\xc5\xb3\x77\xe5\x94\xc0\xf5\x99\x85\xee\xf5\xef\xd6\x1f\x59\x5f\xb9\xec\x7a\xef\x47\xb1\x5d\x8d\xab\xfd\x3b\xdf\xf3\x7b\xef\xea\xe5\x28\x5a\xed\x76\xeb\xe5\x5d\x79\xe8\xdd\xbd\xbc\x6b\x5f\x8b\x8a\xbc\x77\x3f\x2e\xdf\x4f\xfb\xfd\x79\xe8\xfe\x3e\x43\xdf\xce\x9b\xfe\x13\xf4\x4f\x9f\x37\xaf\xc4\xc5\x3b\xcf\xeb\xfd\xe7\xff\xa5\x3c\xdd\xbb\x51\x80\x17\xde\xf6\x6e\x02\xe9\xd5\xfb\x72\x1e\x77\xde\xc7\x52\x6d\xbe\x38\xb6\x2e\xd4\x2b\xda\xd7\xa3\xda\x2e\xe3\x6d\x42\xe6\x3b\xb2\x6a\xf3\x6a\x3b\x87\x61\x92\x59\xe5\x06\xb5\x9a\x63\xfb\x9b\xa5\xad\x21\x6d\x5d\x1f\x8e\x13\x1c\x50\x12\x1b\x53\x33\x00\x8c\x0d\x9a\xaf\x18\x7b\xe5\x7d\x3d\xaf\xf1\xa1\x68\x89\xd6\x73\xf4\xcb\xad\xc7\xe8\xbf\xc8\xaa\xc9\x86\x08\x6f\xa9\x35\x06\x8b\x7d\x94\xa9\xb2\xa2\x58\x4d\x0b\x2c\x5a\xfa\x23\x1d\xf9\xfd\xbe\xec\x9b\x34\xd9\x7a\x7c\xb8\x58\x94\x43\x3c\xa9\x2e\x0e\x85\x32\x4f\xba\xa4\x36\xd2\xa3\x49\xef\x28\xb3\x43\xba\xe3\x76\xce\xde\x76\xda\x76\xaf\x36\xe9\xe2\xf5\xfc\x90\x9b\xa5\x5f\xc7\x15\x4a\x21\x08\x51\x22\x24\x1c\x45\x41\xa0\x14\x0d\x39\xe4\x4c\xd2\x80\xa8\x00\xb2\x40\x71\x29\x03\x88\x93\x10\xa9\x84\x40\x8a\x22\x28\x63\x04\x21\x0f\x62\xa8\x28\x3b\x15\x28\x80\x32\x45\x59\xf5\x66\x54\x1b\xa3\x92\xf1\x0f\x65\xd5\x9f\xb3\x02\x32\x40\xb0\x40\x1c\x81\xe7\x65\xd5\x4f\xa2\xda\xce\xf7\xe2\xe2\xfd\x7d\x46\x8e\x71\x0b\x4c\x6b\xe6\xac\xc2\xa4\xd9\x80\x05\x6e\x8d\x0f\xd2\x1f\x6c\x12\x37\x1b\xe9\x64\x53\x71\xe2\xb5\x93\x99\x64\x73\x87\x55\xc7\x3b\x9c\x3e\xfe\x04\x96\xbc\x49\x56\xbe\x1a\xf9\xd7\xe7\x77\x2b\x2b\xb9\xad\x76\x29\x14\x33\xbf\x55\x99\x63\xd1\x0c\x46\xb3\x6d\x27\x9b\x35\x8c\x66\xb8\xca\xca\x59\x6d\x08\xeb\xda\x60\x4f\xcd\xb1\x9e\x8d\x78\x2f\xec\x04\x41\xb5\x5a\xdc\x97\xdc\x3a\x8f\x2b\x55\x87\x2d\x73\x99\xe9\xda\x5e\xc4\x31\xe9\x6c\x96\xcd\x62\x4f\x23\x23\xb4\x5b\x7d\xc5\xfb\xac\xbf\xd9\xdf\xc7\xb0\xf2\xea\xa7\x2f\xcf\x7b\xe5\x6d\x7c\x42\xee\xfd\x23\x72\xf7\x5b\x2c\xb8\xfa\xfb\xf7\xc9\xdd\xd7\xc5\x02\x3e\x96\xbb\xaf\x71\xf3\x01\xb9\xe1\x25\x62\x4f\xd3\x1e\x8d\x18\x4c\x91\xfe\x43\x72\xbf\x7e\xc1\xc0\xfa\xd5\xf7\x7f\x9f\x5c\x7b\x5e\xca\x57\xe4\xee\xbf\x58\x2f\x38\xed\x5f\xe3\xb2\xbe\x7b\x31\xfc\xd9\x77\xfd\xde\xfd\xfb\x8d\xeb\xfb\xd2\xf9\x5e\xed\xdf\x9f\xd6\x5b\x4e\x7a\xd6\x79\xd1\x57\xf7\xed\xe3\xfd\xfc\xd3\xeb\xfd\x92\x9e\x75\xb5\xbf\xda\x23\xeb\x7d\x2b\x63\x56\xb4\x2f\x47\xe4\x5e\xf6\xf3\x5d\x63\xd5\x39\x82\xf4\xca\xec\x7f\xef\xfd\x1a\xbb\x65\x72\x36\xdb\x9f\xa9\xbf\x6d\x77\x7e\xbd\x96\xd7\x71\x7e\x0a\x87\x2e\x5f\xdc\xe9\xef\x16\x96\x39\xe3\xc3\x55\xb6\xd6\x93\xd8\xfe\x84\xec\x75\x05\xe8\xee\xbb\xcf\xa7\xfd\x13\x4f\xfe\xf4\x7a\xaf\xf6\xf3\xfd\xf5\xbe\xe7\x2f\xa8\x5f\x6d\xfd\x03\x3a\xd0\x39\xda\xc8\xbc\x9c\xef\xbd\x3a\x58\x8a\x3a\xe0\x03\x11\xb8\x87\x23\x12\x70\x3a\xf5\x0e\xfd\xbe\x7b\x98\x26\xfb\xea\xa2\x31\x90\x61\x56\x54\xaa\xd5\xcd\x31\x8b\x7a\x99\x5a\xdb\xd4\xcb\xf9\x51\xa3\x55\x96\x78\x93\x5b\x77\xe7\x33\x00\xa6\xe6\x3c\x97\x5f\x93\x1d\xe0\x8b\x55\x9e\xc5\x20\x98\x53\xde\x0f\xd8\xba\x32\xd1\x8c\x41\x33\xd4\x53\x2f\x32\x23\x01\x0a\x25\x50\x08\x23\x14\xca\x98\x85\x18\xd3\x98\x53\x82\xb1\x90\x01\x27\x84\x85\x82\xc5\x18\x60\x19\x87\x09\x95\xb1\x62\x2c\x4a\x92\x90\x82\x38\x88\x15\x88\x94\x38\xf5\xad\x10\x2f\x3a\x98\xe6\x55\x2c\x82\x9b\x76\x37\xdf\xc1\x6e\x15\xd7\x4d\xa7\xa5\xa1\x16\xad\x75\x68\xae\xa9\xd5\x3d\xdb\xf6\x8b\xb8\x58\xb0\xf2\x1d\xec\x37\x99\x5b\x2f\xd5\xcb\x58\xaf\xd5\x5a\xff\xd0\xc1\x6e\x46\xe0\x0a\x02\xe4\xc7\x3a\xd8\xcf\x59\x7e\x6a\xb9\x01\x29\x41\xaf\x99\x45\x77\xf2\xa1\x2b\x1d\xec\x56\x97\xc2\x7b\xe5\xbc\x94\x74\xb6\x13\xfd\xd7\xf5\xba\xba\xf4\x50\x01\x77\x8f\x70\x8f\x35\xb7\xb2\x28\x13\x4f\x3f\xc6\xb5\xe6\x78\x37\x9d\x8d\xb6\x28\xe7\x4e\x3b\xf6\xa4\x09\x00\x9f\xe5\xa9\xec\x05\x03\x1c\x57\x37\x3c\xdb\x69\xcf\xf2\xeb\x8e\xe8\xaf\x7a\xf9\xe1\x0a\x4e\xba\x25\x0e\xa4\x75\x3c\xd6\x2d\xa4\x42\x03\xad\x5d\xf3\x2b\x3a\xd3\xfb\xe5\xff\xdf\xca\xe5\x57\xf6\xa7\x27\xed\x59\x1f\x8c\x1b\x72\x79\x7a\xf4\x1f\x8b\xd8\x7d\x57\x2e\xff\xdb\xe4\xb6\xd3\xdf\x7f\xa9\xdc\x7b\x2b\xe4\xe9\x11\x19\xc8\xfd\xfc\xe4\xde\x52\xf8\x68\xaf\x1e\xa6\x7f\x8d\x71\xf7\xd0\x7f\xc1\x98\x32\x4c\xfc\x61\x34\xad\x79\x79\x95\xd3\x0e\xb3\x6d\x5f\x95\xab\x44\x3a\x9e\x1e\x0f\x1a\x59\xdf\xd2\x23\x3f\xe8\xd6\x9a\xcd\x4d\x2f\x99\xa2\xdc\xa2\x1c\x11\xc4\xb7\xb2\xdb\xe9\xc5\x30\x3c\xd8\x07\x2d\x76\x8e\x9d\xee\x68\xb9\x6d\x02\xaf\x56\x35\xbd\xee\x7e\x55\x0b\xbe\x21\x7b\x55\x05\x9c\xb2\x08\x52\x28\x55\x1c\x05\x5c\x26\x82\x23\x04\x08\x0a\x21\x52\x71\xc0\xc3\x00\x00\xa2\x70\x18\x49\x06\x83\x28\x64\x28\xa4\x32\x11\x22\x10\x8c\x27\x82\xc5\x21\x7e\xc1\x18\x94\x16\xc6\xdc\xb4\xf3\x09\x82\x39\xfd\x04\x63\x30\x67\x17\x8c\x91\xf4\x62\xe7\x7b\x1c\x63\xee\xce\x5e\xbd\x57\x16\xbc\x00\x87\xf9\x1e\xbd\xf3\xa8\xff\xfc\x7c\x4e\x2b\x6f\x82\x01\x75\xf7\x2a\xb6\xc2\xb5\x36\xd0\xe9\x74\x34\x5d\x57\xdb\xd3\x6d\xa3\x16\x77\xea\x19\x3d\x63\xf5\xe6\xe3\x9a\x16\xd5\x7b\xf5\x46\xa6\x56\x33\x1b\xf3\xd6\xa0\xa1\x1f\x36\x83\xdd\xa6\x3f\xd9\x6e\x8c\x1d\x1f\xed\xf6\xd3\x8c\xc6\x4c\x50\x21\x2a\x80\x2b\xb4\x38\x56\xb4\xde\x13\xd9\xab\x0f\xf1\x3b\xf3\xb7\xec\xdd\x6f\xc0\xbc\x87\x30\x27\x45\xfa\x1f\x64\xde\x7d\x39\x8e\x2b\x45\x5d\xf5\x83\xaa\x24\xdf\xca\xa7\xef\xf6\xc7\xfc\x32\xff\xae\xae\x7c\xfa\xe4\xb3\x3e\xd3\xdf\x7c\xc7\x2f\xd8\xfb\x87\xb0\x4f\x4b\xe9\x4c\xaf\xf5\xbb\x7b\xe8\xff\xc4\xde\x6f\x62\x90\xe9\x62\x2f\xe6\x61\xc8\x65\xc2\x24\x95\x0a\xc4\x22\x96\x21\x8e\x30\x4c\x98\x92\x18\x88\x48\x44\x40\x90\x48\x2a\xc6\x09\x52\x49\x40\x99\x0a\x80\x24\x2a\x09\x58\x1c\xc4\x52\x12\xf4\x13\x7b\x71\x5a\xd8\x7b\x33\x1e\x4c\x10\xfe\x49\x86\xe5\xcf\xd9\x33\xf6\x22\xcc\x2e\xf1\x60\x8f\x63\xef\x27\xf1\x60\x67\xff\xf4\x13\xb1\x42\xa7\xb1\x5a\xe7\xe2\xab\x7b\xfb\x41\xe5\x88\x0b\xf6\x2e\x8f\x73\x69\xed\xf7\x8b\x71\xe6\x30\x3b\xac\x7a\x63\x63\xe8\x4d\x64\x66\xb9\x2a\xc6\x55\x0f\xd9\xab\x46\xc0\x9b\xce\x01\x6b\xc7\xbc\xb3\x21\x3e\xed\x8a\x82\xbe\xa7\xc8\x15\x82\xf6\x5c\xdb\xed\x54\xd6\x66\x0d\xec\xd8\xa1\x2f\x70\xc4\x32\x33\x36\x1a\xea\xd9\xce\xe6\xf7\x63\xef\xd3\x71\x56\x5f\xda\xbb\xdf\x80\xbd\x8f\x55\x51\xba\x18\x23\xdf\x7e\x27\x6d\xbb\x6d\x3a\x58\xe4\x6a\xff\xa8\x4a\x96\xe2\xfe\x7d\x2d\xfe\xe5\xcf\xed\x5f\x3a\x76\x6f\x2d\x0d\x2c\xff\xcd\xef\x4c\x6a\x58\xfe\x28\x96\x6a\xdf\x70\xa6\xf7\xd0\x7f\xc1\xf2\xef\x62\xb8\x29\xeb\xd1\x51\x9c\x10\x1a\xfd\xd0\x93\x23\x2a\x31\xa7\x98\xc2\x38\xe0\x51\xc4\xe3\x84\x11\x48\x92\x84\x48\xcc\x61\x80\x31\xe5\x08\xc7\x82\x44\x41\x12\xa8\x38\x80\x31\xc4\x8c\x9d\x62\xbb\x21\x4f\x31\x5e\xe6\xa6\xad\x56\x0a\xc0\x3f\xb6\xd5\xfe\x9c\xe5\x18\x40\x42\x88\x80\x48\x3c\x1f\x2f\x73\x47\xb5\x84\x3b\xee\xd9\xbb\xd5\x12\xae\xe2\x55\x0a\xc3\xf2\x42\xf9\x9e\x29\x4c\x6d\x95\x67\xc6\x1e\xf5\x77\xb5\xe1\xc0\x4c\xf2\x76\x97\x0c\x57\x95\x6a\xb7\xab\x78\xed\x30\xad\x0e\x8a\x03\x39\xb2\xbc\x61\xb2\xdd\x96\x8d\x71\x67\x70\xb4\xb5\x25\xca\xc9\x8a\x65\x2c\x13\xa3\x6e\x6c\x87\xd3\xdc\xbe\x54\xea\x17\x07\x89\xa9\xdc\x4a\x6a\xd5\x12\xcc\xab\xaf\x3e\x12\x93\x30\x7d\x6f\x67\xff\x31\x6e\xe8\xa1\xe9\xd1\x7f\xb6\x5a\x42\xda\x3e\xa9\x5f\xc7\xe7\x7c\xee\x0f\xfa\xc4\x34\xed\xef\xb5\x3d\xdf\xb2\xed\x3e\xb2\x57\x4f\xdb\x76\x53\x3c\xab\x7b\xe8\xbf\x60\xd2\xa0\xb2\x99\xef\xfb\xaa\xb9\x73\xf5\x5d\x32\xab\xe5\x83\xbc\x96\x71\x0a\x75\xa1\xba\xd3\x81\xb3\xdb\xc1\xf1\xf8\xb8\xca\x96\x14\x2a\x4c\xca\xc8\x6d\xc7\xd5\x4c\x46\xac\x9c\x76\x50\xae\xf8\xfa\xd6\xcf\x83\x5d\xcb\x59\x8b\xaa\xe9\x64\x1c\x95\x37\x67\x0b\x73\x52\x14\xf5\x7d\xfa\x6d\x83\x23\x98\x50\x89\xe3\x90\xc6\x90\x24\x92\x03\xc4\x43\xc5\xa5\x40\x30\x09\x08\x63\x48\x28\x08\x38\xc0\x24\x09\x03\x19\xd0\x40\xc5\x09\x0b\x64\x14\x70\x19\x03\x0a\xe3\x98\xe3\x17\x4c\x3a\xdb\x76\x75\xad\x8e\x34\xd3\x37\x4b\x85\xa6\x89\xca\xa5\x02\xad\x57\x3c\x8b\x56\x0a\xed\x2e\x73\xb9\x57\x28\xd7\x1d\xdb\x68\x22\xe4\xf0\xa2\x47\x8c\x46\xc7\x6a\x70\xcb\x30\x6a\xf7\x62\x12\xfa\x44\xbf\xfc\x31\x8b\x5f\x31\x89\x22\x74\xf1\x1f\xde\x19\x23\x79\x0f\x26\x3d\x24\xef\xbd\x8b\x49\xd6\x2b\x7d\xb7\xc0\xfb\xe1\xae\xab\x60\xa6\xd4\x49\xfa\x71\x7b\xea\x6b\x0b\xda\xf4\x2c\x4f\x06\x53\x95\x2f\x4e\x8a\x0b\xb0\x6b\x03\x25\x9d\x6a\x21\xb1\x59\x4b\xac\x97\xfd\x42\x3b\x6e\xcf\x06\xa6\x81\xe2\x96\x65\x4d\xfa\xfb\x4c\x98\x5b\x5b\xb2\x59\x6b\x6c\x07\x89\x95\x9d\x24\xc6\xd8\x1d\x7d\x0b\x26\xdd\x19\x43\x98\x3a\x26\x3d\x49\x3f\x45\x4c\xba\x37\x0e\x2e\x6d\x4c\x4a\x85\xfe\x13\x98\xf4\x37\xc5\x29\xde\xf4\x37\x3e\xb0\x57\x69\x62\xd2\xb3\x67\x75\x0f\xfd\x17\x4c\x1a\x6e\xac\x6d\x6e\x7c\xf4\xc8\xbc\x9b\xb1\x68\x27\xea\xe9\xcb\x71\x55\xb5\x13\xb8\x88\x76\x6a\xe2\x4f\x96\xcd\x9c\x57\x3f\x02\x02\xfa\x22\x9c\x37\x0f\x68\x63\xf6\xdb\xb4\x33\x28\xb8\xb5\x2e\x75\x5b\x9d\x20\x9f\xa7\x2b\x1b\x78\xb0\x22\x4b\x99\xa2\xf0\x32\x5d\xe1\xb4\xf5\xd4\xfd\x8d\x01\x0d\x64\x8c\x55\xc0\x70\x2c\x95\x82\x94\x62\x2a\x95\xe4\x18\xf3\x50\x85\x90\x10\x46\x94\x0a\x28\x0b\x11\x06\x01\x89\x80\xe2\x09\xe2\x54\x20\x46\x48\x04\x99\x00\xa7\x36\x12\xec\xe9\x0a\x3e\xb7\xbc\x8c\x12\x02\x76\x2a\xe7\xf0\xf9\xec\x19\xda\x04\x10\x38\x85\x02\x3e\x6f\x5d\x27\xbf\xbc\xa9\x0f\x48\xe7\x1f\xb5\x4d\xea\x5b\x46\x36\xf4\x83\x66\xb7\x5b\xc4\xed\xa2\xdc\x17\x17\xde\xac\x43\xe3\xb8\x5c\x02\x5a\x6c\x05\x5a\x33\x97\x97\x48\xd5\x93\x3d\xe8\xb4\x9a\xd6\x62\xce\x96\xde\x9e\xf0\xa4\x92\x6b\xed\x47\x1d\x7f\x21\x42\x2d\x5f\x49\x7c\xbd\x41\x3d\xaf\x56\xef\x09\xb6\xd2\xec\x56\x29\xad\x0a\x0b\xd7\x6f\xc0\x9d\x15\x0e\x86\x41\x9b\xab\x2b\x88\xcb\xbf\x4b\xf9\x16\xfa\xa4\x47\xff\x03\x77\xd8\x97\xd1\xe7\x1a\x07\xef\xcb\xaa\x5f\x54\xe7\xde\x7a\x77\x55\x34\xe6\x97\x14\xb3\xf3\xf8\x9c\xa3\x3d\x41\xdf\x6c\xb7\xb6\xbd\x27\xe8\xbf\x9d\xfd\x9d\x5a\xc6\xbb\xe8\x52\x7d\x7c\x2f\x7e\x9c\x05\xbc\x5a\x86\xba\x73\x2f\x9e\x3d\x8b\x1f\xf4\x8f\xbd\xc7\xe8\xbf\xa0\x8b\x5f\x77\xb3\x08\xd9\x23\xd4\x69\x44\xb0\x91\xa8\x46\x30\x66\xd6\xc6\x9b\x0e\x0e\x6b\x2d\xdf\xef\xfc\xc0\xba\x6c\x34\x35\x3d\x11\x59\x63\x73\x1f\x2c\xe2\x05\x14\xb1\x83\x8f\x5a\xbb\xd2\xb5\x26\xa5\xad\xbd\xcb\x1d\xf3\x48\x1b\x6d\xda\xf0\x08\xfc\x9a\xb3\xd4\x72\x63\x3d\x75\x2b\x1c\x0b\x00\x65\x50\xc8\x90\x50\xce\x80\x62\x80\xc7\x18\x43\x25\x81\xa2\x81\x08\x89\x8a\x38\x02\x92\xc1\x28\x11\xa1\x12\x2a\x56\x49\x44\x82\x00\x0b\x11\x52\xce\x03\xa6\xc2\x17\x74\x79\xb2\x80\xcf\x2d\x3f\x9a\x84\x40\x90\x0f\x63\x58\x5e\x67\x5f\xd0\x85\x48\x94\x42\xfd\x9e\xe2\x9b\x63\xfd\x05\x5d\x1e\x90\xb3\x3f\x40\x17\x6d\xaf\x53\x35\xe6\xeb\xd1\xd0\x2d\x00\x95\x58\xdd\xe6\xa0\x60\x19\x9b\x19\x68\xec\x0e\xfe\xb4\xba\x68\xb6\xf2\xa8\xbf\x37\x72\xeb\x09\xef\x67\xb7\xad\x51\xce\xc6\xaa\xb7\xb3\xbd\x86\xe0\xd3\xc1\xb4\x3d\xea\x4f\xb6\x51\x61\xde\xec\x24\x71\x21\xb6\x07\x3b\x3e\xea\xc5\x49\x4b\xfb\x0b\xd0\xa5\x6f\xb5\xcb\xe4\x59\xee\x9e\x22\xfd\xb7\x67\xfa\x25\xfa\xe9\xa0\xcb\x5b\xee\xfe\x41\x33\xfc\xef\xe2\x68\x73\x9e\xab\xef\xdd\x27\xe8\xff\x32\xfb\x1b\xf5\x85\x94\xcb\xc3\x3d\xc5\xdd\xb5\x94\xd0\x65\x2f\x1e\xa3\xff\xb3\xfa\xa8\xbb\xf1\x8a\x31\xef\x16\x80\x5e\xcd\xe7\xf7\x9d\x16\x19\xe4\x5c\xbe\xa8\x9a\xab\xca\xa4\x78\x0c\x46\x30\x27\x67\xca\xdd\x85\xdd\x0d\x49\x38\x2c\x6a\xf5\x35\x2e\x54\x72\x63\xb0\x75\x28\x99\xc3\x6e\xa1\xbb\xc4\x8d\x52\x0b\x4e\xf1\x20\xdf\x9f\xad\x1c\x5a\xc8\x4f\x61\xfa\x15\xb1\xa1\x08\x13\xa6\x54\x8c\x80\x4a\xc2\x10\x24\x12\x70\xa9\x48\x28\xb8\xc0\x1c\x0a\x49\x64\x04\x71\x18\x41\x14\x41\x8e\x03\x06\x30\xc3\x11\x0a\x45\x8c\x03\xc0\xe3\x24\x0e\xa2\x17\x74\xc1\x4f\x96\x87\x03\xb7\xe1\x45\xb2\xcf\x94\x97\xf3\xec\x0b\xbc\x48\x70\x31\xa3\x3d\x0e\x2f\x6f\xbd\xc1\xbf\xc0\xcb\x03\x6e\xea\x0f\xe0\x45\xcf\xd6\xdb\xeb\x19\x3b\xac\xb5\x45\x7e\x1e\xb1\xae\xd5\x19\xee\x3c\xf7\xe0\xcd\xe6\x25\xa7\x7e\x14\x6e\x63\x7b\x04\x91\xa8\xcf\x6a\x4b\xc7\xcc\xf5\xaa\xe6\x46\x1b\x8a\xcc\x28\x3c\xf4\x1b\xdc\x1d\xc4\xce\x62\x17\x0e\x8a\xcb\x06\xd0\x5a\xc2\xef\x04\x39\xd7\x25\x47\x95\xd9\x95\xff\x02\x78\x89\x77\x2d\xd5\x7a\x96\xbd\xa7\x48\xff\xa1\xea\xa7\xa9\xc0\xcb\x2f\xec\xfd\xa1\x92\x64\x4f\xd0\x7f\xb6\xe2\xe6\x2f\xb3\xbf\x31\xfc\xfd\x3b\xe0\xe5\x51\xf6\xae\xa5\x04\x2f\xd7\x8a\xec\x03\xf0\xb2\x05\xed\x30\x70\x56\x4b\xb7\xd4\x67\x5e\x3c\xa9\xb7\x67\xc2\x02\x95\x31\x2b\x35\x86\x23\x95\x35\xcd\xa5\x90\xf9\xc4\x0c\x0c\x76\xec\x6b\xbe\x51\x2f\xf7\x0a\xd9\xda\xdc\x16\xb3\xd6\x06\x14\xa6\xc3\xc5\xca\x26\x83\x00\xac\x35\xab\x66\x5b\x93\x5e\xcb\x74\x2a\xb8\xb6\x4a\x3f\xdd\x0b\x12\xa4\xa4\x10\x21\x4c\x18\x97\x82\x24\x9c\x04\x90\x0a\x18\xc5\x52\x05\xb1\x4a\x88\x94\x31\x03\x09\x8c\x41\x1c\x47\x44\x32\xc6\x60\x10\x20\x45\xa9\x44\x58\x70\x46\xd4\x0f\x6c\xf8\xd9\x53\x5c\xcf\xeb\xc4\x40\x7a\x83\x50\xbd\x58\xaf\x56\x89\xab\xe5\x9b\xa8\x6c\x75\xb5\x62\xa1\x45\x6b\x1a\xcf\x53\x5c\xc2\x6d\xa7\xc6\x3a\x66\x91\x79\x9d\x7c\xb5\x51\xed\x96\x5c\xfb\x3f\xff\xfd\x3f\x4a\x05\x26\x94\x13\x41\x6f\xe2\x0c\x02\x02\x90\x0f\x71\xe6\xe7\x2c\x23\x04\x11\x0a\x31\xc5\xaf\xe1\x80\x05\xb2\x31\x40\xc9\x73\x06\x4d\x6b\x19\xbb\x5a\x1c\x8f\xc7\x87\x5c\xa9\x14\xc5\x06\xcd\xf0\xf6\x66\x39\xcd\xac\xea\xb5\x25\x72\x50\xf3\x74\xd8\x67\x9c\x39\x55\x28\xfc\x24\x14\xff\xfc\xa6\xd8\xb4\x22\x3b\x0e\x1a\xc5\xfb\x0d\x89\xc6\xc3\x66\x04\xfc\xc6\xe6\x60\x4e\x27\x46\x6b\xb5\x2f\x05\x93\x63\xb1\x33\xd8\x12\xcb\x1e\xcd\xce\xb9\x93\x97\x90\x03\xdd\x29\xf7\xa4\x3e\x3e\xce\x46\xfb\x00\x8f\xb4\xfc\x74\xde\x55\xbd\xc6\x60\xea\xf5\x32\xc9\x06\x86\x0b\x9a\x5d\x9a\x4d\x26\x87\xeb\xd1\x4b\x77\x1a\x4b\xc6\xd7\x6f\x67\xfe\x75\xbd\x6e\x31\xd7\xda\xd3\x75\x27\x19\x6a\x3b\x6f\x1f\x84\xb2\x45\xf3\xce\xb0\xbb\xcd\xd5\xb7\x78\x23\xe9\xd0\x0b\x0f\xc7\xcd\x22\xee\x66\x47\xc3\xd5\xa1\xb2\x6a\x81\xa1\x93\xed\x01\x5c\x4f\xe0\xb1\x17\xab\x35\xec\x0f\x49\xdf\xf0\xed\xaa\x98\x74\xc8\xcc\x9c\xad\xc1\xaa\xd1\xec\xf6\x76\xa9\xa5\x7b\x19\x57\x65\x10\x86\x03\x52\x73\xe7\x8a\x15\x2b\x9d\x35\xd5\x72\x94\x75\xbc\x82\x39\x9b\x43\x52\x9b\xf2\x75\x87\x6d\x12\xb6\x37\x33\x5b\x9f\x77\xab\xa7\x2f\xe9\xcd\xbe\xaf\x3b\x97\xf3\x78\xc8\xbd\x92\x22\xfd\xc7\x42\xdf\x2f\x7c\xd1\xb9\xda\xbf\x70\x74\x84\x3e\x0f\xea\xdc\xe6\x7d\xd4\xa9\x56\x71\xbd\x5f\xe2\x85\x46\xec\x57\x1b\x47\x73\xbe\x08\x2b\xe3\xa0\x94\xed\xb5\x82\xc6\xb9\xcb\xc0\x95\xcb\xfd\xce\xfb\xfc\xb2\x94\xaf\xa4\x7b\xd5\xfe\xcc\xfa\x3c\x48\xdc\xbb\xdd\x2f\xce\x65\xfe\xde\x77\xa9\xe8\x58\xbd\xd2\x89\xb6\xe1\x7e\x72\x7e\x9f\x63\x4c\xed\x39\xfa\x05\xf2\x18\xfd\x17\x8c\x19\x59\xcd\xfc\x04\x76\x33\x15\x23\x97\x58\xf3\x2d\x6c\x8e\x14\xab\x4e\x84\x65\x67\x63\x8e\x27\xd5\x68\x5b\x76\xd8\x9c\x4e\x33\x0d\xe7\x58\x38\xec\x9b\x8d\x0a\xcf\x18\xcd\xc8\xca\x7a\x4e\x8e\x1e\x70\xc7\xae\x0d\xcc\x6a\xcf\xc7\x87\x6e\x38\xe8\x35\x06\xb8\xb1\x2f\x56\x27\x46\xea\x2a\x0c\x06\x42\x80\x28\x22\x28\x12\x31\x01\x28\xc0\x20\x12\x01\xa6\x88\x87\x94\x29\x18\x63\x1c\x43\x11\x0b\xae\x08\x8b\x21\xc6\x28\x0e\xa8\x4a\x14\xe4\x08\x26\x91\xe0\x2a\x39\x19\xc8\x48\x7a\x18\x43\x6e\x9a\xca\x30\x66\xe8\x63\x8c\xf9\x39\xcb\x00\x44\x92\x12\x86\x08\x78\x1e\x63\x6e\xa6\x14\xdf\x89\x31\x2f\xe3\x4d\xe3\xcf\xe4\x27\x4f\xcb\x69\x83\xb8\xdb\x68\x6c\x9c\xee\x62\xbc\x5b\x1f\x86\xd3\x21\x8d\xb2\x0d\x60\xb7\x1a\xf6\xc0\xdd\x1e\xc0\x60\x5e\x2b\x1f\xa6\xf3\x31\x69\x6d\x1d\xb1\x50\x5c\x37\x8e\x78\xbb\x2a\xd7\x9d\x71\x15\xf5\x28\x58\x78\x83\xe5\x21\x6a\x38\x51\x30\xa3\xac\xbf\xad\xf7\x97\x66\x52\x5f\xd9\xfa\xd7\x9a\x11\x7e\x0d\x2f\xae\x8c\x0b\xf7\xf2\xeb\x57\x77\xbc\x06\xde\x7f\xa7\xae\xf6\xf5\x9d\x91\x4b\x99\xfe\x43\x78\x75\xfe\xd2\x5b\x1e\x77\x2f\x3f\xbe\xb8\x78\x8d\xcf\xf4\x86\xcf\x79\xdc\x33\xf4\x03\x4d\x35\x9e\xa0\xff\x34\x8f\x7f\xf3\xfc\x0f\xf1\xf8\x3f\x84\x31\xb7\x1c\x42\x8f\xec\xc5\x99\x50\x3a\x77\xe1\xd9\xb3\xb8\x87\xfe\xcf\x10\xb8\x6f\x62\x5a\x29\x87\xc0\x85\x91\x64\x24\x51\x49\x14\x62\xcc\x02\x0c\x12\x04\x15\x22\x20\x49\x92\x28\x48\x38\x8e\xb8\xe2\x54\x08\x10\x47\x30\x94\x12\x73\xaa\x18\x4a\x04\x89\x71\x4c\x25\xa2\x1c\xbc\xe0\xdd\x39\x04\xae\xda\xb5\x6b\x25\x9f\x76\x1a\xf9\x8e\x4d\x7d\xa7\x5b\xa9\xda\x14\xd9\x7a\x89\x36\xf4\x22\xf1\xed\x56\xa7\x52\x2c\xb6\xed\x6e\xa3\x84\xac\x1a\xc9\x15\x50\xb1\x50\xac\x22\xfd\x4e\xbc\x23\x00\x7f\xd8\x39\xe8\x75\xf6\x8c\x77\x14\xe0\x8b\x4e\x95\xdb\x34\x6b\xed\xe1\x7a\x9e\x5f\x85\x9b\x7c\xd7\x07\x38\xb2\xcd\xe5\xaa\x5f\xa4\x3d\x58\xae\x34\x26\xf3\xd5\xa1\x3d\x5b\x66\x72\xf5\x79\xe9\x74\x79\xbe\x86\x77\x6f\xc3\xb2\xef\xb8\x67\x6f\x9b\x45\x9e\x86\xfd\x4a\xdf\xb5\x0d\xad\x9d\xa5\xce\x1c\x19\x13\xab\x55\x13\x24\x9a\x1c\x9a\xd4\xce\xf6\xf6\x53\xd8\x39\xf6\xa2\xca\x72\xd4\x68\xb4\xf8\x2e\x99\x6f\xb0\x3c\xa8\x05\x66\x8d\x5e\xa6\xb7\x42\x87\x79\x7d\xb8\xa3\xfd\xfd\x3e\xae\xb4\x86\x59\xbb\x6d\x96\x06\x73\x65\xd8\xd3\x28\x1e\x60\xa1\x7d\x49\x47\xfa\x52\x08\xdc\x35\xe6\xdc\x89\xf7\x7a\xa7\x97\x37\xd3\xc4\xbc\x27\xe9\x3f\x1b\x02\x97\x22\xe6\x3c\xcb\xf3\x53\xa1\x7f\x6f\x08\xdc\x5f\xaa\x23\xde\xc2\xa4\x47\xe4\x93\x34\x31\xe9\x77\xca\x47\x3f\x83\x14\x2a\x39\x2f\x3b\x62\x53\xdf\xf1\xdb\x6e\xf6\xd8\x47\x61\xb1\x36\x0a\x33\x86\x9d\xb4\x43\x27\x07\x0e\x9b\x7a\xb1\xd8\xdc\xe6\x32\x13\x9e\xe0\xe2\x61\x99\xcc\x4b\x06\xd3\x8f\x61\x69\x6c\xd7\x8c\x49\x3e\x6f\x91\x7d\xa3\x26\xba\x2d\x77\x51\x1a\xef\x2a\x41\x04\x59\x39\xd9\xa5\xaf\x83\xa9\x48\x04\x22\x96\x71\x48\x71\x12\x21\x26\x22\x88\x24\x89\x11\x12\x52\x52\x85\x78\x42\x10\x8a\x24\xe0\x02\x2b\x02\x28\x89\x09\x09\x42\x00\x90\x48\x14\x8c\x02\x04\xc1\x29\x55\x08\x3f\x1d\x02\xc7\x6e\x21\x11\x91\x10\x7f\xd8\x26\xfe\x34\xcb\x2f\xd0\x26\x24\x49\xc1\x8b\x64\xbf\x39\xd6\x5f\xde\xd4\x07\xa4\xff\x8f\x82\x14\x5a\xeb\xc8\xef\x1c\x96\x8c\x1c\xb6\xd9\x65\xa9\xb6\x04\xd9\x6d\x9b\x6c\xfd\xc3\x6c\x9a\xac\x3a\xfb\xf9\x3e\xbf\x1a\xf8\xe5\x7c\xa9\x88\xc3\x09\x1b\x65\x0e\xf3\x81\x96\x3b\x28\xb1\x06\xa5\x0c\x0f\x8f\xfb\x46\xb9\x36\x9c\x0c\x4b\xa5\x2a\xad\x2d\x77\x5c\x8b\xe2\xe9\x58\xe7\x95\xd4\x9a\x0c\x5d\xbf\x01\x77\x7a\x71\x66\xa6\x17\x8c\xaf\x22\x51\xad\x77\x29\xdf\x42\x9f\xf4\xe8\xbf\x3d\xd3\x2f\xd1\xbf\x42\x9f\x27\xc2\xae\x7a\xf5\x68\xd1\xbe\x22\xe4\xbf\x4f\xf1\x73\x8e\xf6\x04\xfd\x8e\x0c\x56\xd6\x13\xf4\x35\xed\xcf\x69\x19\xef\xa2\x4b\xf9\xf1\xbd\xf8\x71\x16\xfe\x55\xb5\x9c\x0f\xda\xfb\x7e\xdb\x59\xfc\xa0\xdf\x99\x3d\x46\xff\x05\x5d\xac\xb2\xd7\xb1\x56\x8b\xcc\xa6\xb2\xcc\xb2\xc3\x90\xc9\x1a\x87\x71\x19\x55\x16\x45\xcc\xad\x55\xa0\xea\xbc\x30\xd1\xf7\x87\x41\x84\xe8\x66\x5e\x5b\x2d\xfc\x9e\xa6\xa6\xb5\x72\xa4\x6f\x37\x48\x88\xd6\xe0\x48\xe8\xec\x30\x18\xc6\x4d\x26\x9c\x5d\xde\x9b\x53\x77\x73\x4c\xbf\xa0\x53\x98\x84\x11\x8d\x25\xa1\x3c\xe2\x90\x87\x2a\x11\x84\x23\x09\x03\xa6\x10\x09\xb9\x8a\x44\x14\x92\x24\xe1\x82\xc4\x2a\x22\x54\xa2\x30\xc6\x20\x02\x02\x12\xa6\x80\x42\x8c\xbc\xa0\xcb\x93\x21\x70\xb7\x52\x7d\x24\x91\x98\x7c\xd8\xc2\xee\x75\xf6\x8c\x2e\x02\x83\x8b\x5d\xef\x71\x74\x79\x1b\x0c\xfc\x0b\xba\xdc\x2b\x67\x7f\xd2\xc2\xce\x87\xcd\x41\x65\x98\x59\x0c\x45\xe6\xe8\x87\xa8\x1d\x32\xd0\xcf\x2c\x3a\xfb\xee\xda\x4a\x1a\xf6\x2e\x04\xa3\x6d\x69\xbd\x6e\x58\x5a\xde\xed\xdb\xce\xb0\x10\x45\x83\xb6\x3b\x9b\xef\x65\xd9\xa8\x3b\xac\xd5\xab\x4d\xca\xe5\xbd\xb5\x75\xe7\x85\x63\x6c\x4f\x83\x5e\x1f\x6f\x5d\xe3\x2f\x40\x97\xf1\xb6\xb3\xcc\x3d\xcb\xdd\x53\xa4\xff\x50\x80\x77\x3a\xe8\xf2\x96\xbb\x3f\xe4\x17\xff\x83\x41\xc5\x9a\xf6\xe7\xf4\x85\xb4\x03\xac\x9f\xe1\xee\x5a\x4a\xe8\x72\x2d\x69\x3c\x80\x2e\xa8\xda\x22\xc3\x42\x76\x31\xcb\xd6\x56\xc8\x96\xe3\x4e\x66\x5d\x48\x16\xe3\x55\x27\xac\x7b\xa0\xbf\xb2\x65\xb1\x7c\x58\x86\xad\xbe\x9b\x03\x85\xfa\x70\x76\xc8\x7b\xfe\xb8\x55\x2a\xa9\xa4\xb1\x03\xcd\xcd\xb8\x60\xd0\xc1\x41\xd4\x43\x50\x6a\x54\x70\x7f\x8e\x66\x85\x88\x83\xf4\x53\x4a\x41\x0c\x91\x60\x84\x87\x28\x94\x98\x0b\x16\xb2\x90\xb3\x18\x0a\x14\xa9\x28\x00\x90\x63\x4e\x39\x60\x2c\x11\x2a\x48\x00\x45\x38\x82\x61\x80\x43\xc2\x93\x88\x25\x1c\x81\xe8\x67\x7b\xd3\x53\x99\x03\xbd\xdd\xcc\xd9\x0d\xd3\x6c\xf1\x52\xd9\x6b\x55\xf2\x95\x86\x97\xd3\xca\x5e\x11\x35\x49\x01\x95\x9c\x9a\xd7\x41\x0d\xda\xac\x97\x4b\x46\xbd\xa0\x79\x06\x6d\x19\x79\xcd\x77\xfe\xf3\xdf\xff\x23\x1c\x11\xc2\x08\x40\xf4\x26\xce\x30\x80\x99\xfc\x10\x67\x7e\xce\x52\x48\xb1\x64\x10\x32\xf2\x1a\x6a\x5d\x69\x77\xfb\xd5\x42\xbf\x94\xb4\x36\xd2\xce\x77\x4b\xc4\x2d\x6f\xa6\xad\x4c\x01\xcc\x8f\x1c\xc1\xf2\x8a\x2c\x5b\x4e\x49\xf3\xf2\xa8\x77\xd4\x5e\x71\xe6\xd4\xa5\xf8\x13\x7b\xda\x79\xf4\xb2\xa5\x6c\x6e\xbc\x94\x96\x93\x9d\xb6\x4d\xbb\x1c\x4d\xf4\xa3\xde\xaf\xf8\xf3\x89\x72\x8f\xfb\x42\xdf\x9a\xb0\x6a\xee\xb8\x3f\x4e\xbd\xb3\xfd\xe8\x4d\x87\x87\x9c\xb5\x97\xb3\xca\x39\x91\x67\xe7\xcb\xbc\xab\xd5\x51\xa3\x52\x8b\x71\xb1\xb6\x9d\xe4\x72\xeb\xdc\x08\x0d\x93\x59\x0f\xd8\x96\x69\xf9\xa3\x72\xd5\x3a\xba\xd5\xc5\xd6\x1f\xf3\x41\x77\xb0\x9e\x38\xd4\x72\x27\xa3\xd2\x78\x9b\xad\x3a\xb4\xab\x82\x4e\x6e\xe1\xa9\x7c\xdf\x71\xe7\x23\xb0\x42\x5e\x23\xe7\xa6\xd6\x89\xfb\xba\x5e\xd1\xbe\x3d\x31\xc1\xc0\x9c\xcb\x06\x07\x7e\x34\x5a\xf6\xb5\x0d\x8b\x9a\x64\xd8\x98\xd6\xb6\x61\x6b\x73\x1c\xac\x5d\x32\xcb\xa9\x24\x30\xce\x65\x5f\x2e\x7e\x9b\x0f\x3a\x3f\x9f\xc6\x0d\x9c\x49\x8f\xfe\xb3\x36\xb4\x2b\xc9\xd7\xb0\x3a\x7e\xb3\x51\x68\x4c\x61\x79\x5b\xef\xa3\xc6\xc6\xd4\xf9\x1c\xd6\x06\xd5\x92\xca\xc8\x75\x83\x3b\x25\x68\x0c\x7a\xaf\x67\x7c\x65\x17\xd1\xdf\x8d\x13\x78\x19\x9f\xf3\xb6\x27\xe8\x17\x50\x6d\xca\x9e\xa0\xaf\xbd\xa1\xaf\x1b\x62\x29\xec\xce\x16\xb4\x78\x26\x6a\xb9\xfe\x1a\xf9\xe5\x4a\xc9\xdc\x0f\x26\xdd\xbd\x51\x33\x07\x66\x27\x9c\x81\x7c\x2d\xef\x44\xc9\xf9\x37\x5f\xbb\xb4\xbc\x5f\xff\xea\x33\xfa\xb7\xb4\x98\x47\xce\xe2\x4c\x48\xff\xa0\x63\xec\xe7\x7b\xf1\xec\x59\xbc\xbd\x0b\xf7\xef\xc5\xff\xaf\xec\x5a\x1d\x68\x66\x34\x1a\x1a\x78\x7d\x68\x72\xda\x73\x43\xb7\x5b\x9d\x61\x56\xa8\xe6\xfa\xf5\x5c\xa7\xa8\x1f\xeb\x0a\x18\xc1\x12\x15\x63\x32\xf1\x97\xdd\xe1\xa6\xde\x2a\xce\xf5\x79\x98\x3d\x36\x37\x1d\xcf\x1e\xf7\x82\x31\xce\x91\xe6\xa8\xd4\xad\x96\xab\x63\xd0\x6b\xa5\xdf\x89\x9b\x71\x06\x60\x80\x54\x80\x20\x0a\x05\x01\x12\x05\x3c\xc2\x8a\x22\x08\x39\x0a\x19\x4f\x48\x28\x71\xc4\x51\xc8\x11\x0b\x00\x53\x94\x00\x09\x79\x84\x82\x50\x60\x05\x83\x1f\xba\x03\x84\x4f\xdb\xc8\xe8\x2d\x74\xe1\xf0\xe3\x1a\x3a\x3f\x27\x5f\xc0\x8a\x60\x9a\x42\x92\xe8\x5b\x6b\xce\x2f\x7c\xe9\x01\x3e\xf7\x51\x92\x68\xbe\x3c\x9a\xb1\x6c\x33\xdc\x82\x6d\x96\xea\x9d\xfc\x68\xb0\xf7\xa6\xe1\x61\xd6\x62\x0b\x97\x1d\xe2\x5d\xd7\x5e\xd4\xf2\x56\xe3\x58\xdd\x57\x92\x4d\x24\x58\xec\xdb\xa3\x2a\x18\x92\xc9\xaa\xa2\x7b\x49\x59\x9b\x6d\xf8\xa0\xe4\xb4\xa7\xa0\xd2\x39\x1c\xc7\xf3\xad\x5f\xd7\x40\x6a\x16\xb2\xeb\xfb\x7f\xa7\x0e\xb1\xe8\xfa\xa5\xd2\x15\x2f\xf9\x80\xa1\x7d\xce\xdb\x53\xa4\xff\x90\x85\xee\x0a\x5b\x9e\xb0\xca\xcc\xc7\xbd\xd9\xec\x59\xab\xcc\x1f\xb4\x0a\x69\xda\x9f\xe3\xe7\xef\x62\x4b\xe9\xf1\xbd\xf8\x71\x16\xf3\xdd\xcd\x87\xfe\xb6\xb3\x78\x7b\x17\xee\xa1\xff\x82\x2d\xf5\x03\x2d\x39\x5b\xf0\xff\xa8\xfb\xb2\x26\x67\x6d\xe5\xef\xfb\x7c\x0a\xd7\xff\x26\xe7\x94\x9f\x1c\x83\x00\x01\x39\x95\x53\xc5\xe6\xdd\x60\x1b\xec\x31\x7e\x2f\xa6\x40\x08\x1b\x6f\x60\xc0\xdb\xe4\xcb\xbf\xe5\x65\xc6\x8c\xc7\x2b\x66\xf2\x24\x54\xa5\xe2\x79\x24\xba\x5b\x8d\xd4\x3f\x75\xab\x25\x01\x96\xaf\x17\xf2\xad\xc9\x90\xa9\x44\x5d\x06\x70\xf3\xa2\x36\x1f\x6b\xd1\x2c\x2a\xb5\xe7\xa3\xf5\xba\x13\xbd\x21\xa3\xcc\xce\x5c\x6d\x36\x15\x03\xd9\xa9\xe4\xab\xa1\x2c\x4c\xa8\xcd\xaa\x56\x5f\xd0\xde\x68\xd2\xe7\xe5\x62\x14\x31\x96\x0d\x94\x96\xfa\x0d\xd7\x70\x3b\x36\xe4\xa1\xc5\xf2\xac\xcd\x42\x9e\x64\x21\xb2\x2d\xec\x50\x16\x43\x60\xda\x82\x16\x07\x59\x92\x24\x79\x08\x48\x17\x32\x16\xe5\xf2\x0c\x6d\x51\x36\x72\x49\x82\x40\x2c\x76\x09\xf4\xbe\x07\x67\x97\x13\x50\x62\x80\xf1\x02\x5b\x82\x08\x8d\x92\xda\xd0\x8c\x3a\x05\x4c\xba\x41\x75\x5a\xad\xba\xaa\xaa\xe5\xa6\x52\x36\x85\x8a\xd9\x6e\x42\xbd\x58\x84\x7d\xa1\xdb\x2e\x32\xfd\x96\xf9\xeb\x8f\x1c\xc5\x41\x86\x66\x09\x06\x42\xe6\x47\x0e\x6c\x51\x06\x5c\x02\x12\x8e\xe0\x98\xcb\x3e\xcc\x7b\x29\x0d\x78\x9a\x87\xec\x96\xe4\x87\x8d\xa5\x1c\x23\x86\x82\x90\x9f\xf6\xc3\xb2\xd1\x5b\xbe\x68\x0d\x4a\x57\x8a\xb1\x45\xb0\x9b\xf2\x4a\x2c\x55\x96\x7c\x25\x70\xfb\xe2\x4b\x75\x77\x24\xe1\xfe\xfe\xc0\x1d\x1c\x9c\xe2\xca\x97\x2b\xa6\x1f\xb0\x79\x09\x32\x27\x39\x70\xad\x47\xfb\x69\xa2\x77\xbb\xbd\x61\x82\x92\x08\x5a\x5d\x6f\x77\x04\xa4\x22\xac\x37\x13\x66\xb0\x94\x24\x59\x62\x27\x44\x30\xe7\xed\x82\x18\x3b\x14\xd2\x3a\x1d\x64\xf2\xed\x25\x21\xd4\xd7\xdd\xd1\x62\x42\x2b\x5d\xbd\x4e\x76\x37\x83\x90\x24\xd8\xd2\x48\xf6\x49\x32\x6f\x46\x2b\x67\x3a\x91\x16\x2f\x2e\x5b\xab\xc4\x1d\x02\x0d\x27\xfe\x20\x98\x45\xf4\xe7\xfd\x41\x8d\xc4\xe2\xfc\xf1\xe7\x35\xbf\xef\x32\x8e\x25\x48\xc9\x0e\xa9\x51\xbe\x20\xc3\xfe\x34\x72\x54\xcc\x9b\xf4\x9b\x53\x69\xbd\x90\xa1\xb1\xac\xb8\x82\x62\x7a\x05\xc2\x9b\xf0\xe3\xa2\x39\xd9\xa5\xaa\x1e\xaf\xa4\xbb\xb4\xfd\x31\xf1\xbd\xce\x3c\x62\xc6\xfc\x1f\xf5\x91\x24\xe1\x73\x6e\x5d\x62\xbf\xd3\xc3\xb6\xab\x3f\x89\x86\xcf\xda\xce\x67\x6c\xb7\x3b\xaa\x4d\x9e\xe0\x7f\x8a\x1d\x82\x4a\x75\x58\x3c\x10\x9a\xc1\xd4\x5a\x13\x24\x4b\x8e\x46\x2a\x31\x14\xed\x97\x58\xe3\x86\x9c\xd0\xf6\xea\x05\xbd\xd6\xfb\xe8\xf3\x89\x63\x3e\xa5\xf4\x79\x16\xcf\xf0\xff\xc8\x9f\x4e\xc7\x7f\x57\xf0\x65\x3c\x3c\x3a\xaf\xea\xd1\x9b\x00\x9d\x34\xea\x42\x5b\xcf\x3d\x5f\xc6\x43\x9a\x79\xdd\x13\xfc\x9f\xb6\x07\xc7\xbd\x11\xa9\xc6\xe3\xd3\xf6\x40\x97\x84\x61\x4a\xfe\xe7\xe6\x52\xc9\xfd\x8f\x29\xc6\xc3\x61\x5e\x97\x3e\x97\x25\xc3\xf1\xf8\x08\xff\xf7\x2d\xd1\x28\xc0\x66\x7d\x35\x18\xac\x16\x8c\x53\xb3\x96\x2f\x85\x95\xdd\x73\x28\x79\x52\x2c\x97\x9a\x1d\x9b\x17\x24\xae\x6b\xb2\x01\x16\x8b\x1d\x8f\xef\x22\xbf\xc6\x3b\xda\xda\x5f\x41\xd5\x71\xa7\xf5\x46\xb9\x1f\xb4\xc2\xc9\x2c\xbf\xf1\xea\x5d\xb5\x5c\xe9\x5b\x95\x5a\x9f\xd5\x6e\xef\x59\x03\x8f\xfa\xe9\x10\x01\x0e\x11\x08\x39\x8c\x05\x30\xcd\x12\x00\x5a\x16\xb2\x5c\x0b\x60\xb4\xf5\xd7\x09\xd2\xc5\x8c\x83\x29\x9a\xc7\x2e\xc5\x42\x44\xb8\x9c\xe5\xda\x1c\x4f\x21\xd6\xb6\x19\xc6\x39\x9c\x96\xf1\x9c\x9b\x4e\xdf\x72\xd3\x39\x9e\xbf\x7c\x2f\xd9\x47\xe9\x61\x46\xc6\xb3\x30\x83\xc5\xc6\xd3\x5e\xfe\x65\x30\xa4\x00\xdb\x4b\xa9\x2c\x6d\x19\x36\xba\x2f\x03\x45\xd0\x17\x91\x3b\x0c\x61\xd5\x29\xf2\x35\xaa\xed\x61\xd0\x93\xda\xd5\xda\xa4\xa0\xfa\xb5\x4d\x15\x85\x0e\x39\x2e\x45\xd4\x66\x10\x04\x0c\xb3\x5e\x70\x84\x39\x29\xae\x06\x6a\x57\x09\xfb\x05\xa4\x08\x65\x53\x9b\x13\x50\x5a\xa9\xee\x4c\x01\x91\x94\x99\xa3\x9e\x7e\xb1\x2f\x0a\xad\x5a\x94\x30\xa8\x17\xe2\x7f\x37\x0c\x5a\x76\xfc\x53\x01\x4a\xc2\x51\x7f\x62\x82\xb3\x89\xfd\xf9\xfa\xd9\x09\xce\x4f\x9c\x60\x09\xc2\xcf\x33\xe8\x67\x1d\xf5\x4a\x7a\x5d\x6c\xbf\xc5\x5b\x22\x52\xd1\x78\x50\x17\xcf\x7e\x8b\xd3\xbe\xf0\x08\xff\x03\xb8\x28\xad\xfc\xa8\xd8\xf5\x45\x41\x09\xc3\x32\x6d\xe5\xbd\x5e\xdb\xd5\x63\xc2\x9c\xc5\x93\xd5\x58\xd7\x03\xf7\xcd\x92\x22\xaf\x57\xa3\x9c\xbe\x18\xaa\x9c\x5f\xb3\x30\x46\xf6\x52\x2d\x55\xdb\xa8\x22\x77\xdb\x35\xe0\x52\xa2\x20\x02\x79\x1e\x6b\x83\x48\xee\x31\x6b\x35\xcc\xfe\x4c\x75\xc7\x61\x69\x8c\x31\x60\x2d\x86\xe7\x68\xca\x06\x9c\x45\x30\x96\x43\x70\x96\xed\x42\x06\x5b\x16\xa0\x48\x9b\x75\xb0\x8d\x69\x87\x60\x18\x86\x40\x84\xc5\x5a\x34\xd8\x1d\x21\xc8\x03\xfe\x70\xd0\xdf\xce\x4f\xa7\x61\xb7\x5d\x13\xa5\x7a\x05\xf4\xa0\xdc\xab\xf7\x58\xa1\xa2\x74\xdb\xc5\x7a\x99\xea\x08\x6c\x4f\x54\x28\xb5\xa4\x36\xa1\xc6\xd2\xe5\x16\x53\xef\x95\x1b\x25\xa3\x0b\xaa\xe2\x16\x15\x08\x02\xd2\x2c\x4b\x12\x2c\x75\x0b\x66\x78\x9e\xbd\xb2\x57\x6d\x5b\xca\x6c\x09\xd2\x14\xc3\xb3\x34\xa0\xe1\x47\xc6\xa4\x3c\x9b\xaf\x3b\x8a\x4e\x58\x4b\xda\x21\xa9\xbc\x28\xd6\xd6\xb5\x28\x0f\x85\x02\xaa\xaa\x71\x83\x2c\xcc\x5c\x1a\x97\xbb\x94\xb6\x22\xa0\xf0\x01\x33\x3b\xc3\x94\x80\x95\x63\x8f\xc6\xa7\xeb\x34\x4f\xf8\xd9\x42\xd5\x7b\x49\x4c\x09\x45\xe7\x2d\x52\xb5\x9d\x9f\x2d\x8e\xc6\x8c\x52\x9c\x77\xb9\x92\x57\xe7\xd7\x1d\x08\xb4\x8e\x54\xc3\x3a\xea\xad\x4b\x0d\xa3\x31\xaf\xfa\x32\x1b\x6e\xbc\x92\xcb\x8c\xea\xcd\x7e\xb5\xad\x07\x43\xfb\x45\xa2\xfa\x1b\x54\x56\xf2\x81\xbc\x58\x14\xa0\x52\xd3\xe7\x48\xed\x84\x1e\x23\xf4\xde\x5a\xd3\x46\xbe\x64\xde\x13\x1f\xbe\xcf\xaf\x4e\x54\xd2\x70\x58\x6c\xb5\xeb\xed\x79\x61\x48\xf5\x5c\x5a\x51\x42\x65\xfe\xc6\xfa\x32\xbf\x1a\x03\xe2\xad\x97\x77\x0a\x43\xda\xe9\x21\x56\x36\x3e\x0e\x4e\xf4\xd0\x51\xc7\x17\x9e\x1b\xb0\x93\x1d\xff\x67\xf7\xac\x25\x72\x64\x1e\x36\x35\x61\xab\x58\x7f\xd6\xd4\x3d\x63\x6a\x43\xa0\x4d\x9e\xe0\x7f\x6a\xea\x05\x06\x46\x5d\x51\x89\x4b\x61\xbe\xec\x38\x85\x41\x4b\x8f\xf4\xb0\xb9\x18\x34\x29\xc9\xb0\x0d\xd5\x65\xa8\x7c\x79\x48\x7e\xf4\xf1\x1d\xec\x54\x77\xa3\x41\x4c\xbf\xf6\xfa\x0c\x7f\x03\x11\xcb\x94\xfc\xcf\xc2\x5e\xf9\x39\x5d\xec\x19\x89\xe9\xd7\x3e\x9f\xfc\x16\xfb\xb5\xcf\xc7\xf9\xbf\xef\x0f\x60\xb4\xb6\x68\x4d\x5c\xd1\xf7\x0a\xa8\xab\xc5\xa3\x89\xe0\xcd\xc6\xb3\x22\xd7\x1e\x29\x6f\x35\xcf\x12\xf2\x90\xf3\x87\xb3\xbc\xb9\x79\x03\x7a\xa7\x33\x37\x5f\xc8\x41\x0c\xd0\x4c\x5c\x37\xe7\x2d\x36\x5c\xe6\x87\xd2\x78\x3e\x93\xbb\x35\x7a\xd1\x2a\x72\x44\x75\xd4\x1c\x4e\x3f\xe2\xd3\xde\xd6\x99\xf9\x95\xdc\x5d\xcb\xf5\x0c\xea\x01\x86\x21\x31\x0b\x2d\x0a\x61\x9a\xe3\x48\x9b\xb5\x11\x4b\xb9\x8e\xeb\x70\xbc\x03\x59\xc2\x61\xc8\xdd\xc5\x22\x34\x66\x20\xc9\x40\xc0\x00\x9b\x21\x59\x96\x25\x00\x05\x08\xe0\x60\x76\x8f\x7a\x20\x2b\xd4\xbb\xee\x5c\xd1\xff\x21\xb6\xcf\x85\x1d\x6b\x87\x52\xfa\x88\x7a\x90\x39\x3a\x57\xe9\x51\xef\x34\x1a\x5d\xb4\x4a\xdd\xc8\x2e\x7d\x1c\x52\xf3\x65\xc7\x76\xba\x68\xb5\x64\x4e\x92\x07\xff\x7c\x58\x68\x51\xd0\x41\xbe\x61\x35\x05\x96\x17\x46\x32\x21\xb2\xf3\xd1\x84\x98\x2b\x6f\x84\x0a\xa5\xb1\x3c\xf5\x75\x7a\x3c\x98\xf5\x46\x7d\xd7\x5e\x3a\x88\xaf\x8c\xe7\xea\x94\xd0\xf3\xcb\x9a\xa8\x0e\xba\x1c\x11\xe8\xae\xb7\x36\x49\x9a\xad\xe7\x47\x4b\xbd\x30\xb0\x66\xfe\x72\x6e\xd7\xbd\x6d\x47\xfa\x3b\xa0\x5f\x87\x52\xeb\xdc\x51\xd7\xe9\xa2\x48\xd9\xf1\x4f\x75\xc2\x47\x02\xfd\x7e\x22\xfa\x3c\x8d\x7e\x11\xea\x15\x7e\x26\xfa\x9d\xa0\x4f\xaa\xcb\x3d\x9f\xe1\xaf\x83\xb0\x9b\x92\xff\x2d\xa7\xef\xaf\x44\x9f\x4c\x74\xf1\x11\x51\x4c\x8d\x7e\xdf\x65\xb4\x76\xe8\x17\xe3\x75\xbc\xfd\xff\x10\x4f\x26\xfe\x93\x08\x48\xd9\x14\xc4\xc8\xb5\x11\x02\x96\x63\x13\xc8\x75\x5d\x82\xb3\x30\x07\x49\x9e\x77\x21\x8d\x49\xc0\x73\xb4\x4b\x70\xb4\x6d\x13\x94\x8d\x79\xdb\x06\x34\x0f\x49\xd2\x71\x39\x40\x01\x60\xef\x11\x90\xca\x0a\x01\xaf\x67\x01\xed\x30\x0e\x90\x17\x76\xca\x25\x4a\xf7\x08\xc8\x10\xf0\xb8\x3e\x9b\x1e\x01\x13\xa1\xb0\x86\x28\xb4\x94\x3b\xff\x13\xfe\x02\xbf\x50\x96\xf8\x61\x23\x6e\x98\x7d\x38\xb4\xd7\xa4\x27\x38\xbd\xd9\xa0\x8d\x24\xb3\x35\x75\x39\xbc\xa0\xdf\x90\xc8\xeb\xf5\x32\xe0\x79\x2e\xee\x9a\xc8\x82\x2d\xd3\x1b\x30\x72\x34\xd8\x00\x5f\x6a\xc8\x64\x95\x1d\x0f\x2b\x75\x7e\xf4\x56\xe8\xbe\x8c\x50\x73\xb8\x34\xba\x4b\x89\xbb\xe7\x7c\xc6\xef\x47\xc6\x78\x4e\x26\xfc\xb2\x54\xc8\x94\x21\xff\x54\xe1\xd0\x8c\x90\xf1\x49\x64\x7a\x1a\x19\x63\x69\xd8\xff\x99\xc8\x78\x82\x4c\xcf\xb6\xff\x71\xfe\xad\x21\x9b\x92\xff\x77\x20\x63\x5a\x64\xca\x44\x17\x1f\x57\x4c\xa6\x46\xc6\xd5\xd2\x34\xea\x46\xa9\x84\xfd\x17\xce\x31\x07\xe5\x2e\x43\x2b\x3d\x61\xaa\x54\x67\x85\x72\xb8\x68\x50\x82\xdb\xf1\xd6\xfc\xd2\x75\xeb\xdd\x97\x72\x69\x31\x2e\x55\x7c\xad\xc5\x56\x1a\xf1\x5c\x18\x09\xbc\x8e\x99\x8a\x2e\x15\x4c\xae\x40\x76\x7d\x4a\xa6\x6d\x82\xb4\x57\xcb\x8f\xb5\xb6\xa1\x15\x0d\x77\x1a\xbf\xdb\x4a\x2b\x7f\x3c\x09\xa0\x98\xa4\x39\x8e\x41\x36\x84\x96\xcb\xb8\xac\xcb\x60\x9e\x27\x6d\x82\xa4\x31\x46\x34\xcb\x20\x48\x22\xc4\x51\x24\xe0\x01\x72\x19\x06\x40\xe4\x38\x04\x72\x2c\x92\x66\x28\x82\xe0\xa8\x83\x0b\x49\x67\x05\xa0\xd7\xb7\x9a\xef\x20\x92\x26\x2f\x6c\x06\x4c\x94\x1e\x00\x94\x66\x8f\x89\xb4\xe9\x01\x34\x89\x82\x92\x30\xa8\xdc\xf9\xdf\xe9\xab\xc2\x77\x04\x56\x35\x77\xce\x37\x5b\x9c\x52\x42\xc1\xa8\xfd\xa2\x58\xf3\xd2\x7a\x39\x14\x47\x7a\x77\x31\x86\x35\x46\x00\x61\x3c\xac\x9b\xe5\xd9\x54\xe8\x4d\x5b\x64\x75\x54\x95\x29\xc5\x71\x46\x9e\xa2\x53\x76\xb3\xdf\x29\x32\xd8\x2d\xb5\x96\xed\x91\xaf\xd4\x06\x9e\x08\x9c\x0e\xe5\x82\xd5\x3d\x9b\x3a\xbe\x1f\x40\xc7\x15\x9c\x70\xed\xd2\xad\xe7\x65\xc7\x3f\xd5\x7a\x5e\x46\x00\xfa\x24\x80\x3d\x0f\xa0\xcf\xad\x61\x3d\x0f\xa0\x9f\x01\x2c\xd5\x7a\xe6\x33\xfc\xdb\x73\x73\x98\x92\xff\x77\x00\x68\x5a\x00\xcb\x44\x17\x27\x41\xee\x47\xf8\x1f\x00\xd4\x98\xc1\xa5\x41\x34\x45\x71\x56\x33\x89\xee\xb0\x34\x1f\x46\x36\xdd\x32\x89\x89\x1d\x68\xde\xa2\xa5\xce\x59\x53\x07\x22\xc3\x0c\x8a\xcc\x58\xd5\xcd\x4d\x8b\x5f\x97\x7b\x26\x3d\x54\x62\xf0\x06\xba\x22\xee\xcd\xd6\xe3\x3a\x61\x42\x51\xf2\x2b\x03\x67\xd6\x55\x29\x3e\xfa\xd8\x54\x12\xe2\x78\x11\xce\x76\x3a\xbf\xdb\x4e\x57\x9e\x85\x50\xc2\xb5\x79\x04\x30\x20\x78\x1a\x02\x00\x6c\x40\x61\xd2\x21\x1d\x08\x09\x07\xf3\x0e\x4b\x33\x2c\x44\x34\x89\x5c\x87\xb7\xb7\x5e\x29\xef\x30\x90\xb1\x08\x92\x42\x24\x76\x39\x1e\x59\x87\x3d\xf0\xcf\x25\xb6\x5c\x5f\x71\xa4\xff\x43\x90\x24\xe4\x2e\x5c\x98\x99\x28\x3d\x20\x31\x43\xc2\x0c\x2e\x92\x39\x35\xda\x5f\xe2\x83\x29\x56\xbb\x2e\xed\xa2\xe7\xe2\x4a\x71\xe3\x0f\x78\x0d\x4b\x73\xcf\x12\x55\x77\x5d\x74\x84\xc9\x0c\xab\xa6\xe1\x8e\x7c\xb5\xd3\xa8\x79\xb0\x58\x95\x4c\x46\x9c\xe3\xe9\x4c\x16\xd7\x25\x7f\x4d\x8d\x6a\x7a\x61\xbd\xa6\xdf\x82\xb5\x60\xf8\x4a\x31\xa0\x4c\xd0\xc8\xab\xed\x6a\xa5\x43\x0f\x0a\x65\xa2\x9a\x55\x62\x8b\x98\x7e\x07\xc8\xa2\x40\xac\x00\x79\x7c\x3d\x5d\x8c\x33\x3b\xfe\xa9\x80\x38\x91\xd8\xf2\xc4\x0a\x23\x5b\x30\x64\xfb\x59\x20\xfc\x89\x2b\x9c\x82\xf0\xf3\x56\xd5\xce\x02\x91\x92\x5e\x17\xdb\x6f\x81\xe8\xe3\xfb\xa9\xe2\xbd\x19\xf6\x85\xc7\xe3\xbd\x7f\x16\xea\xba\x88\xe6\x95\xa6\x31\x1b\xcc\xfd\xe9\xc0\xe8\x71\xed\x5e\xab\xda\xa7\x46\x2f\x0a\x45\x43\xb9\x2b\x4b\xfe\x62\xa8\xb7\xa6\x5a\xcb\x9a\x05\xc1\x6a\x85\xda\xf3\x86\x43\x6f\xc6\x4b\x0e\xe1\x06\x44\x2d\x05\x8a\xa2\xe5\x00\x75\xd4\x1c\x75\x74\xbd\xa8\x55\x9a\x6b\xfe\x1b\x2e\xc1\xe4\x09\x8e\xc1\x24\xe5\xda\x98\x77\x39\x1a\x13\x2c\xa6\x00\x61\x11\x0e\x4d\x33\x0c\x05\x1d\x4c\x5a\x2e\x02\xc8\x75\x38\xc4\x62\x9a\xe4\x20\xe4\x58\x8e\x60\xb1\xe3\x00\x9b\xe6\x76\xc9\x8a\xef\x77\x60\xca\xbd\xa2\x50\xaa\x4a\xba\x54\xa1\xa5\x1a\x30\xcb\x35\x68\xb6\xeb\x02\x34\x6a\x4a\xaf\xd8\xee\xb1\x62\xa3\xd4\x6d\xb4\x34\xb1\x51\xaf\x28\x9d\x6a\xbb\xca\x98\x2d\xb5\xde\xa8\x88\xbb\xab\x9d\x49\x96\xe7\x20\x4f\x72\xd7\x6f\xc3\xa4\xff\x43\x00\x92\x87\x97\x61\xe6\xbd\x14\x30\x2c\xe4\x39\x82\xe5\xd8\x0f\xff\x4c\x63\x5a\x25\xbd\xd6\x1a\x23\x25\x7c\x91\xe7\xbc\x57\x5b\xe1\xa9\x3f\xd9\xac\x97\x5c\x5d\xee\xf6\xc5\xd5\x4b\xbd\xa5\x7b\x66\xc0\x7a\x72\x57\xf8\x80\x99\xb3\x19\xe4\x09\x98\xe9\x9c\xeb\x0a\xa7\x4b\x7e\x17\x4c\xea\xc9\xe3\xcd\x16\x15\xb5\xb3\x7b\x9d\x6e\xb6\x05\x4c\xe0\x59\x81\x60\xfa\x65\x30\xc1\x12\x36\xb4\x68\x6d\x1b\x04\xea\x2c\xa8\xd5\xa0\xe3\xbd\x74\xd0\x42\x1e\xd3\x1b\x8b\x2b\x15\x06\x15\x9e\x18\x4e\xba\x30\x78\xd3\xcc\x8d\x20\xc2\x7e\xcc\xb8\x2a\x1b\xb4\xc3\x66\xbb\x5e\x88\x8d\xc9\x6c\x34\xe8\x08\x23\x4b\x5c\xae\xd4\x75\x07\xed\xe8\x17\xa7\x4e\xa9\x0d\xab\xfd\xc5\xb8\x56\xed\x48\x54\x37\x04\xa6\x52\x2d\x00\xba\x44\xc5\x38\x9a\x1b\x4b\x1a\x75\x99\x0e\x12\xfc\xb7\xf6\x50\x07\xf9\x15\xd1\x34\xbb\xdd\x39\x66\x5b\xc6\x54\x6b\xa8\x7a\xa9\x57\x90\xa8\xfa\xba\x49\xc6\xfa\x32\xe8\x39\x9d\x82\x36\x34\x23\x4d\x5e\xdd\xb5\x64\x98\xdc\x60\x78\x19\xce\x12\xce\x28\x3b\x11\xfa\x95\x40\x6a\xaf\xf4\xd8\xd4\x42\x50\x09\x45\x68\x79\xbd\x7a\xa9\xb0\x8a\xd4\xee\xb8\x2c\x9a\xb1\x58\xab\x7e\xe8\x2e\x99\xb0\x72\x4c\xe4\xff\x3a\x4c\x95\xed\xbc\xec\xf8\xad\x9a\xfd\xe6\xac\xb3\xa9\xf7\xf3\x9a\x59\x1d\x0d\x67\x4c\x79\x3c\xa6\xa9\xce\xe2\x05\x86\xda\x02\x4f\xfb\xcd\x62\x6b\xe2\x68\x33\x4e\x46\xdd\xf2\x59\x7a\xbb\xbf\x13\x47\x6a\x3d\xd8\xd7\x84\x49\xab\x4e\xcf\x8e\x1d\x46\x3c\xfe\x4c\x3e\xe2\x6e\x3e\x79\x6c\x1a\x30\x18\xb2\xe1\x01\x77\x34\x95\x4c\xba\x9f\x6f\x33\x55\x4d\x25\xeb\x93\xc5\xfc\x2d\x9c\x05\x53\x63\xdd\xa9\xf6\x8c\xa0\x20\x50\xc5\xf6\xe5\x43\xfd\xf7\xf4\x56\xff\x58\xf9\x13\x87\xfe\xc8\x8b\x8e\x38\xf6\xc6\xd5\xb2\x58\x23\x07\x70\x69\x7a\x51\x39\x98\x57\x51\x64\x17\xa4\x15\xf9\xd2\x42\x45\x8f\x50\xfc\x69\x0d\xd3\x03\x72\xc7\x3f\xe1\x6b\x1c\x85\xfa\xba\xc4\x7c\x12\x6b\xe1\xc7\x79\xc7\xa8\xc4\x33\x9a\x19\x4c\xb5\x92\x3b\xc6\xba\x31\x72\x74\xc6\x9e\x47\x90\x81\xfd\x31\xd7\x95\xba\x04\x74\xdf\xc7\xda\x85\x38\xc6\x11\x22\x8b\xcf\xc9\x7f\xf0\xd5\x84\x0f\x7a\x67\x0e\x14\xcd\x4c\xfe\x8f\xbf\xff\x49\xe3\x73\x07\xc5\xdf\x62\x50\x07\x7f\xfc\xf1\xe3\xbb\x2c\x69\xb6\x18\x8f\x79\x87\xb4\x28\x82\x20\x2c\x6c\x51\x90\xa5\x29\x92\x06\x2e\xc0\x0e\x26\x09\xe8\x50\xc8\xa6\x58\x44\x39\x2c\xe6\x38\x86\xe0\x30\xe5\x02\xd2\xa6\x79\x48\xb1\x84\xcd\x70\x90\xe2\x18\xee\x70\xfc\x40\x56\x18\x7f\x73\x11\xf3\xf2\x3d\x0b\xc7\x42\x40\xd2\x2c\xcd\xd1\x04\xc3\xc2\xe7\x11\xfe\xca\x76\xc9\xbb\x10\xfe\x42\x62\xca\xc9\xa3\x1f\x11\x5e\x7f\x23\x84\xb8\x8f\xd5\xb7\x9e\xde\x1b\x8f\x9a\xe3\x5a\xd5\xd5\x14\xce\xea\x18\xc2\xa2\xd9\x86\xc1\xba\xd1\xb0\x8b\x14\xc5\xae\xd6\x0a\xb5\x7a\xd3\x0c\xd9\xea\x22\xb9\x05\x54\xa6\x49\x29\x7c\xa3\x86\xf2\xae\x6d\x17\x87\x7d\xbe\x96\x27\xd8\x7c\x95\x58\x35\x4a\x93\xb8\x2d\xde\x77\xcd\xc2\x7d\x08\x9c\x78\x35\xcd\x08\x27\x4f\x98\x7e\x7d\x6e\x38\x94\xd9\xf1\x4f\x77\x5c\xce\xb7\x58\xe8\x54\x29\x9b\x3f\x89\xff\x2d\x87\x2e\x8d\x2c\xad\x84\x82\x2f\x3c\xdf\xaa\x0b\xed\x5a\x16\xd9\x4d\x5d\xfc\xf9\x5d\x83\x36\x5b\x63\xcf\xf3\x8c\xcd\x03\xc8\xbb\xbc\xcb\x23\x1a\x91\xd8\x42\x98\x65\x18\x82\x24\x39\x8e\x85\xd0\x81\x98\xb3\x30\x4d\x20\x86\x26\x29\x12\x10\x1c\x49\x5a\x0c\x41\x53\x2c\xe4\x28\x64\xb3\xbb\xab\xdb\x98\x43\xce\x66\x16\xc6\xfe\xe6\x82\x1b\x05\x19\xfe\x72\xce\xe6\x7b\xe9\xc1\xdc\xd3\x30\x0b\x87\xee\xca\xcd\x6d\xb7\xcc\xfd\xad\xae\xf3\xc4\xa4\x36\x01\x0f\x72\x30\x6e\x34\x10\x3b\x1e\x8f\xcd\x91\xec\x37\x57\x6e\x67\xa2\x29\x7c\x5c\x37\x97\x2f\xe5\x4a\x61\x9a\x17\x45\x5c\x18\x48\x35\x95\x44\xdd\xa5\x52\x24\x3b\x62\x17\x4b\xd2\xa2\x24\x1a\xa3\x45\xb8\xa1\x8d\xb9\xbf\x0e\x26\xb5\x09\xad\xf6\xcb\x55\xdd\x60\x0a\x5a\x18\xd2\xbd\x3b\x6f\xe1\xf9\xab\xe1\x21\xdd\x8e\x82\xec\xf8\x3f\x7b\x6b\x5b\x86\xe6\x39\x55\x8c\x2b\x6b\xfe\x57\x6e\x24\xf8\x3b\x3a\x40\x69\x4d\x7a\x56\xfa\x3b\x64\x9b\x3c\xcc\xff\x00\x29\xdf\x35\xd0\x33\x3e\xa5\x86\xe5\x1c\x64\xf1\x00\xd2\x0c\xc3\xb0\xbc\x4d\x5b\x34\x45\x10\xbc\xeb\x62\x8a\xb1\x08\x00\x78\x0b\x3a\x16\x6d\x63\x87\x02\x0e\x85\x78\x9e\x77\x58\x8b\x80\x96\x03\x20\x24\x18\x6b\xb7\xd3\x8c\x39\x24\x41\x66\x01\x29\xd7\x0f\xda\xdc\x81\x06\x0f\x2f\x27\x41\xbe\x97\x1e\x20\x85\x63\x8f\x4b\x51\xe9\x21\xe5\xca\x52\xd4\x5d\x90\x92\x30\x2b\x89\xb8\xcc\xd1\xec\x9e\x3e\xe2\x47\x37\x54\xe4\xc1\xa4\xdd\xde\x4c\xe3\xfa\x68\x95\xaf\x4c\xa7\xa5\x95\xe1\x89\x46\x4d\x61\x7b\x6c\x1e\x48\x9b\xd5\xa4\xbc\xe2\xe6\xd8\xc9\xc7\x0c\x20\x74\x5b\x18\x0c\xd0\xdc\xf6\x37\x4c\xad\x57\xb5\x94\x26\x43\x16\x56\x6d\xbd\xb1\x8e\xfb\x9d\x81\xac\x15\x5d\x4b\x9e\xf1\xb2\x4b\xd0\x8a\xf0\x37\x84\x0a\xe9\x84\xff\xe1\x51\x3e\xeb\x30\x93\x58\x5e\xe2\x9b\xa5\x89\x85\xc5\x89\xb8\xf1\xf9\xcd\x52\xe2\x67\x7e\x59\xc7\xf2\xfe\x91\xf2\xff\x93\x62\x61\xdf\x00\x65\x69\xa1\xe4\x3b\xf4\xf7\x08\xff\x03\x94\xd1\xd5\x4e\x07\x05\xa1\x4e\x73\x4d\xaf\x1a\x0c\x23\x85\x1e\x74\x36\x43\x8d\xcc\x17\xe2\x41\x14\x55\xdb\x5c\xb3\x36\x9b\xb9\x21\x76\x62\x65\xba\xaa\x54\xca\xb5\x29\x6c\x2c\xf4\xc9\xe6\x65\x28\xe7\x1d\x97\x53\x3a\xa3\x86\xfd\xd2\xad\x08\x6f\xc3\x1e\x18\x30\x85\x16\xc5\x6b\xa2\x90\x39\x94\x41\x88\x01\xeb\xda\x80\xe3\x58\x02\xd9\x0c\x60\x20\xb6\x78\xc0\x42\xda\x46\x36\x00\xc0\x72\x6c\xdb\xb2\x18\x17\x23\xe0\x70\xbc\x05\x81\xc5\x5b\x16\x87\x78\xc4\x61\x80\x31\x8f\xf9\xc3\x11\x1f\xcf\xe5\x52\x80\x5b\x00\xc6\x00\xfe\x8a\x4f\xb4\x2d\xa5\x3f\x10\x91\xa5\x00\x97\xc1\x21\x21\x57\x7c\xa2\xfd\x93\xc2\x78\x5f\xc8\xa5\x90\x84\x4e\xa0\xe5\x87\x6b\x6f\x60\x15\xcc\x41\x3b\xea\x52\x61\x31\x10\xab\x1b\x67\xa0\x6d\x66\x84\xd1\xac\x4c\xab\x92\xd5\x92\x1a\xde\x78\xec\x95\xf2\x91\xda\x0b\x5b\x62\x64\xf6\x46\xd5\x70\xa2\x79\xa5\x51\x29\xea\x50\xe1\x98\x5e\x2c\x4b\x13\x8e\x11\x42\xcf\x94\xf9\xa6\x6a\x96\x33\xcb\xa5\x48\x54\x7a\x30\x97\x61\xdd\x21\x07\xb6\x76\x45\x87\xfb\xe7\x9e\xa4\xbe\x4c\xf8\xa7\xf3\x6d\x8e\xb9\x14\xe9\xd7\xef\xc3\xa2\xf1\x22\x46\xcf\xae\xdf\xff\xc4\xfc\x01\x41\xf8\x79\xe1\xae\xb3\xa1\x37\x39\xb5\x2e\x76\xdf\x62\x71\xfb\xec\x98\xef\xfa\x16\x5f\xfa\xc2\xe3\x61\xc8\x3f\x07\xc5\x9a\xb1\xf4\x91\xe9\x97\x96\xa0\xa2\xd8\x45\x07\xae\xad\x96\x8e\x66\xa6\x1c\x05\xbc\xf2\xb6\xa9\x7a\xad\xe9\x58\x18\x55\x82\x6a\x65\xb8\x0c\xe5\x2e\x24\x04\xbb\x54\xa4\x37\x16\x63\xf8\x43\x7f\x1d\x16\x55\xc8\x68\xf5\x70\x1d\xb8\x5a\xab\x46\x4f\x85\x82\xf1\xf6\x22\x66\xbe\xce\x42\x43\x86\x75\x59\xcb\x06\xae\xc3\x01\x0b\x03\x82\x72\x09\xda\x01\x04\x8f\xa1\xe5\x60\x44\x60\x68\x23\xda\x25\x78\x8e\xb2\x69\x17\x51\xae\x05\x59\x9e\x03\x04\x76\x68\x16\x03\xde\x61\x0f\x69\x76\xcf\x81\x0b\x79\x0b\x5c\x20\x43\x71\x97\x97\x57\xde\x4b\x49\xc0\x71\x34\x4f\x30\x3c\x97\xc1\x65\x6a\xe2\xe7\x0f\x2c\xee\x81\xa1\x48\xd7\x89\xe5\x95\x0e\x20\x41\x95\xf5\xab\xa8\xea\x75\xde\x8c\x97\xb6\x5c\xe7\x39\x71\x44\xb9\xdd\xb0\xda\x11\x49\x7e\x55\x5c\x4a\x6f\x4a\x79\xc8\xcd\x66\x85\xca\xde\xe6\x4d\x5a\x75\x26\xf9\x7e\xf7\x7d\x13\xb5\x28\x70\xd2\x66\xf4\xa6\xf4\x7a\x5d\xa3\xb1\x9a\xf5\x0d\xc1\x2e\xbb\x55\x3c\x07\x65\xa9\xf8\x26\xbc\x8c\x3b\x3c\xe7\x44\xa0\xdf\x2b\xce\x47\xbd\x36\xad\x78\x2a\x61\xca\xba\x60\x17\x82\xea\xaa\x87\x08\x63\xd4\xb0\x0a\x05\xdd\xeb\x71\x54\x67\xd9\x29\xea\xf3\xba\xc5\x0d\xb5\x5e\x45\xba\x6f\x93\xf4\xa7\xde\x7c\x09\x74\x84\xf4\x09\x74\x6f\x01\x68\x16\x66\x67\xd9\x25\x9f\x7b\x8c\x7e\x26\xfc\x9f\xbd\x9e\xe0\x09\x43\xa7\xcd\xcc\x42\xfe\x59\x43\xf7\x13\x0d\xad\x70\xc2\x5f\x58\x8c\x30\x94\x7a\x92\x39\x69\x10\xe4\xb8\xb5\x29\xb8\x82\xc9\x53\xa4\xb5\xe9\x0a\x8e\x8b\x44\x7b\x15\xad\x45\xda\xad\x32\x85\x8d\x7c\x92\xc0\x27\x64\x93\xc0\x27\xa6\xd7\x85\x36\xeb\x5f\x6d\xe6\x2d\x5d\x3c\xfb\x2d\x4e\xfb\xc2\xe3\xba\xf8\xf3\xbb\x8c\xc6\x57\xd0\xf9\xf5\xff\x6d\x4d\x36\xc9\xb0\x2c\x47\x51\x80\x20\xfe\xfd\xeb\x67\x08\xfa\xe5\x97\xdf\x7e\xfb\xe5\xb7\xdf\x72\xaa\x35\xc5\xbf\xe7\xac\x28\xc2\xf1\x6b\x14\x5b\x71\x94\xfc\xfd\x1a\x8c\xf1\xe6\xbf\x39\x63\x13\xe0\xdf\x73\x92\xa6\xea\x46\x5b\xa8\xa8\xc6\x7f\x73\x3a\x1a\xe2\xa9\xf5\x7b\x2e\x58\xd8\x13\x0f\xfd\x37\xa7\xad\x66\x38\xfc\x3d\xb7\xa5\xf8\xcb\x2f\x42\xdd\x50\xda\x39\x43\x10\xeb\x4a\x4e\x53\xeb\x66\x92\xe2\x2f\xb9\x5c\x2e\x27\xc8\x72\x82\xda\x17\x86\xb9\x66\xbb\xd2\x10\xda\x66\xae\xa6\x98\xb9\x7f\x79\xce\x17\x69\x07\x7e\x18\xbc\x4e\xbd\x41\x68\xed\xd1\xf2\xe4\xef\x8c\xa4\x3e\xa1\x7a\x4e\xf2\x73\x8c\x6f\x4a\xff\x0e\xf8\xbb\x66\x47\x27\x7f\xee\xff\xf7\x8a\x7c\x07\x1f\x7e\xc6\x9b\xe0\xfd\xa7\x17\x45\x0b\x1c\xbe\x66\xd2\xba\xcf\x6c\xcf\x35\x2e\x95\x60\xb9\x8e\x5a\x69\x75\x94\xdc\xbf\x8e\xd5\x7f\xe4\x8e\xf5\xdf\x7f\xef\x5f\x78\x50\x35\xd9\x7c\xd6\x87\x1b\xfe\xd0\x47\xf5\x03\xbc\xef\x0c\xaf\x81\x15\xc6\x1e\xf2\x02\x6b\x96\x68\xc9\xf9\xe2\x8c\x5b\x76\x9e\xc9\xb5\x96\x5e\x11\xeb\xee\x96\x27\xe6\xaf\xe7\xdb\x7e\xa9\x42\xc6\xad\xbf\xc4\xe6\x5a\xfb\xaf\x8a\x76\x53\x03\xfb\x2e\x6d\x6f\x76\xbd\xfd\xbd\x21\x15\x55\x56\x7a\x37\xda\x20\xb5\x15\xc1\x50\xf6\x55\x3f\x53\xc9\x69\xea\xe9\x60\xe8\xe8\x15\xb5\x94\xb3\xe3\x10\xe3\xe4\xe8\xba\x2c\xcd\x7e\x8c\x3d\x2f\xcf\x9e\xce\x7d\x12\x5d\x18\xd7\xf6\xe6\xd5\x42\xc8\x5f\xcc\xe2\xd4\xe2\x1c\x49\x24\x25\xf9\xe4\x34\x7d\x96\x67\x5f\xf9\x47\xee\xf0\xe3\x35\xc2\xf3\x05\x9e\xa1\xaf\x0a\xb3\x37\xaf\x2e\xc6\x8f\x09\x18\xf8\x51\x3c\x08\x71\x74\x56\xce\x04\xb5\xfb\x64\x4d\xbc\xf0\xef\xdc\x4b\x59\x69\x2b\xb9\x24\x8d\x8a\x9e\x53\x35\x63\x87\xeb\xff\xfd\x22\xfa\xd0\x8a\x86\x19\xc8\xbc\x25\x73\x9f\xb0\xc9\xb1\xb2\x7d\xeb\x9c\x3e\xbd\xd9\x0c\x87\x59\x89\x76\x24\x76\x9f\x80\xfb\xfa\x5f\xc4\x3c\x28\xf6\x7c\xe9\x75\x1d\x4f\xb0\x33\x78\x62\x24\x7d\x50\xb8\x4f\xfe\x7d\xdd\x8f\xfe\xfa\x23\x67\x05\xc1\xc4\x43\x7b\xfb\xec\x87\xce\x05\xdc\x7c\xc5\xdb\xc1\xba\x2b\x4f\x21\xe9\x01\xb6\xf7\x02\x9f\x90\x4b\x8a\x8d\x5d\x17\xa3\xd3\xb1\xff\x15\x46\x3c\xe7\x47\xee\xff\x76\x2f\xff\xdf\x25\x61\x3d\x27\x23\x31\x3d\xe7\x6e\x01\xdf\x6d\xc1\x56\xbc\x14\x42\xfb\xc1\x6b\x90\x95\xdc\x07\x5a\x49\xd1\x2f\xcc\x1d\x52\xb5\xe4\x7c\x03\xe2\x75\x76\x0d\x38\xd0\xba\xd0\xa7\x53\x36\x21\x49\xe1\x5c\x23\xfc\x60\xdb\x2b\x87\x7e\xaa\x36\x1c\x84\x3f\xd2\x48\xab\xfc\xeb\x8a\x8e\x0e\xa3\x7d\x87\x9d\xcf\xeb\xfa\x33\xb9\xa4\xc8\xfb\x7f\x3f\xb5\x7e\x67\x25\x4a\xea\x35\x2b\xb1\xbe\xd0\xbc\xd3\x3c\x9f\x11\x30\xde\x7f\x92\xf8\x99\xcf\x7a\xa4\x91\xbe\x4b\xde\xea\x7e\x71\xe8\x6c\x99\xd8\x56\xf4\xe0\x7c\xe1\xac\xc0\x5f\x89\x9d\x48\xee\xe0\x13\x39\x93\x75\x6f\x0a\xe8\xbb\xee\x13\xa0\xf5\x95\xd4\x5d\xc2\xed\x6a\x5e\x13\x6d\x27\x3b\x0e\x33\x53\xdf\x09\xbd\x5b\x42\x9e\x54\xbf\x47\xd2\x6c\xf4\xf8\x89\xda\xbd\x52\xde\xd4\x66\x36\xb2\xdd\x25\xd3\x75\x59\xde\x25\x9e\xf8\xfe\x78\x11\x3c\x27\xd1\x67\x5a\x77\x7f\xd1\xbd\x03\x72\x41\xbe\xc0\xf2\xc2\xd7\xd8\x9b\xe2\x4c\x24\x3c\xa5\x76\xdf\xb8\x3d\x08\xf8\x23\x77\x2a\xf2\x8f\xdc\xc1\xc4\xa3\x89\x1f\x61\xe7\xd5\x8a\x2f\x34\x22\x03\xbb\x7d\xa0\x73\x4b\xe2\x07\x67\x47\x5b\xaa\x99\x69\xf7\x01\xc5\xde\xd4\x9b\x37\x73\xf0\xfa\xf5\x64\xca\x11\xbd\xfa\xb3\x57\xcb\x71\x42\x1c\x45\xcf\x2a\xf4\x26\x83\x4f\x8e\xf3\xa1\xf8\xc4\x55\xdd\x57\x7c\x40\xf6\xe7\xfb\xc1\x35\xda\xb7\x25\x3e\x33\xca\x3e\x13\x3c\xcc\xc2\xb7\xf4\xe2\x4d\x90\x3e\x28\x72\x95\xea\xcd\x69\xff\xb6\xd2\x0d\x41\x0f\x73\xa8\x2d\xc9\x8f\x4e\x94\x91\xb4\xe7\x48\xdf\x9c\xbe\xdd\xdb\x93\x13\xc4\xb3\xee\x0c\x9f\x48\xa7\x99\x6f\x5e\x26\x37\x0d\xfc\x70\x6b\xf8\x96\x38\x8c\x3c\x7f\x96\xbd\xa2\x4f\x39\xdc\x16\xff\xe4\x85\xfb\x1b\x73\x30\x3d\xf7\x07\x39\x52\xe8\x3f\xc1\xe3\x66\x4b\x12\x75\xef\x6f\x44\x10\xe2\xa5\xe7\x2f\xa2\xbf\xa4\x35\xe7\x98\xdd\x6c\xd6\xb9\x97\xee\x6f\xdf\x7b\x10\xe5\xdb\xda\xf4\xce\xe0\x66\x3b\x2e\x86\x1f\x3f\x93\xfe\xc0\xdb\x6f\x19\xda\xa7\xd4\xcf\x3a\xc0\x8f\x0e\xf0\xcf\x44\x3f\xbb\x50\x19\x8d\xf0\x6b\x2c\xee\x69\xc3\x0d\xbf\xee\x2a\xb3\xec\xe0\xeb\x2b\xe1\xbb\x64\xbf\x0d\x62\x49\x67\xfb\x3b\xba\xcd\x57\xfa\xa9\x5d\xfd\xdd\x24\xee\x03\xc8\xdf\x23\x8c\xaf\xb6\xef\x8f\x53\x6b\xf9\x0a\xcd\x9b\x53\x84\x7f\xfd\xcb\xc1\xb1\xe5\x4d\xa2\xdc\x6f\xff\xfb\x5f\xee\xd7\xc8\x9f\x38\x89\xe5\xcd\x5f\x7f\xff\x3d\xc6\xeb\xf8\xdf\xff\xfe\x91\xbb\x5c\x11\xf9\xce\x7d\x15\xf7\x8b\x23\x97\xab\xda\xfe\x62\x30\x8c\xef\x62\xff\xa9\xea\x75\x01\x3e\x55\x3d\x11\xe1\x3d\x28\xbe\xeb\x64\xb9\x3f\x72\x14\x75\x77\x66\x80\xe7\xbc\xba\x89\x75\xbb\x62\xed\xaf\xc9\x0f\x38\xb0\xcd\x15\xb5\xb6\x52\x29\xa9\x1f\x6b\x72\xb9\xb6\x52\x54\xda\x8a\x2a\x29\xfa\xc9\x32\xd5\xae\x54\x53\x73\x9d\xa6\xbc\xed\x32\x6d\x45\x37\xda\x15\xc9\xd8\xfe\x93\xac\xd4\x15\x43\xc9\x49\x82\x2e\x09\xb2\x72\x65\x61\x73\xeb\x77\x7c\xfe\xf3\xf5\x24\x14\x93\x9d\x32\x3e\xf3\xb9\xb1\x6a\x79\x49\x92\xcf\xfa\x39\x0d\x1b\x9d\x55\xd6\x61\xa2\x7f\x63\x89\xf7\xa2\x26\x0e\xae\xec\x4f\xd7\x43\x52\x8e\x73\x5a\x78\x8f\x12\x5c\xef\x30\x8f\x69\xe0\x6b\x50\xe9\x27\xaa\xe1\x82\x30\x9f\x75\x71\x26\x0c\x96\x6d\xa7\x38\x0d\x71\xfc\x1d\x14\x72\xb9\x6b\x7c\x89\x21\xdd\xdb\x3b\x9a\xfb\x85\x4b\xbd\x55\xcf\x39\x56\x6c\x6d\xbb\x58\xce\x59\x4c\x83\x1c\xf2\xa7\xc1\x04\xc7\x78\xd7\x86\xff\x1f\x00\x00\xff\xff\xc6\x0d\x7d\x47\xb8\x99\x04\x00") +var _kahunaHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x79\x6f\x22\xcb\xd9\xef\xff\xf9\x14\xe8\x28\x92\x13\x31\x39\xd4\xbe\x4c\x6e\xae\xd4\x40\xb3\x77\x03\xcd\x4e\x14\x59\xbd\x54\x43\xb3\x35\xfb\xf6\xea\x7e\xf7\x2b\x16\xdb\xd8\x06\x8c\x3d\xf6\x24\x39\xf3\x5a\x27\x11\x43\x55\xd7\xb3\xd4\xf3\xab\x67\xa9\xaa\xe6\x6f\x7f\xfb\xd3\xdf\xfe\x16\x29\x85\xb3\x79\x67\xaa\x2a\xe5\x42\xc4\xb3\xe7\xb6\x63\xcf\x54\xc4\x5b\x0c\xc7\x7f\xfa\xdb\xdf\xfe\xb4\x6b\x4f\x2e\x86\x63\xe5\x45\xfc\x69\x38\x7c\xea\xb0\x54\xd3\x59\x10\x8e\x22\xf2\x77\xf6\x3b\x3c\xe9\xe5\x6c\x22\xe3\xce\xfd\xee\xf1\x17\x5d\xfe\x54\xd1\xab\x91\xd9\xdc\x9e\xab\xa1\x1a\xcd\xef\xe7\xc1\x50\x85\x8b\x79\xe4\x1f\x11\xf0\xf7\x7d\xd3\x20\x74\xfb\xaf\xbf\x75\x07\xc1\xae\xb7\x1a\xb9\xa1\x17\x8c\x3a\x91\x7f\x44\xee\x6a\xd5\x94\xb8\xfb\xfb\xc3\x70\x23\xcf\x9e\x7a\xf7\x6e\x38\xf2\xc3\xe9\x30\x18\x75\xee\x67\xf3\x69\x30\xea\xcc\x22\xff\x88\x84\xa3\xe3\x18\x5d\xe5\xf6\xef\xfd\xc5\xc8\x9d\x07\xe1\xe8\xde\x09\xbd\x40\xed\xda\x7d\x7b\x30\x53\xcf\xc8\x0c\x83\xd1\xfd\x50\xcd\x66\x76\x67\xdf\x61\x65\x4f\x47\xc1\xa8\xf3\xf7\x23\xef\xca\x9e\xba\xdd\xfb\xb1\x3d\xef\x46\xfe\x11\x19\x2f\x9c\x41\xe0\x7e\xdb\x09\xeb\xda\x73\x7b\x10\xee\xba\x69\x85\xaa\x6e\x45\xaa\x5a\xbc\xa0\x47\xb2\xa9\x88\xde\xcc\x56\xaa\x95\x48\xd1\x2c\xb4\x8e\xfd\x7f\xef\x06\xb3\x79\x38\xdd\xdc\xcf\xa7\xb6\xa7\x66\x91\xa4\x55\x2c\x45\x12\x45\xb3\x52\xb5\xb4\xac\x59\x3d\x79\xe8\x79\xc7\x7b\x37\x5c\x8c\xe6\x6a\x7a\x6f\xcf\x66\x6a\x7e\x1f\x78\xf7\x7e\x5f\x6d\xfe\xfe\x33\x08\xba\xfb\x4f\x3f\x83\xe4\xce\xae\x7e\x9e\x80\x07\x6a\xef\x97\xee\xc0\xe0\xce\x90\xaf\x11\x3b\xe9\xf5\x34\xf8\xbe\x7b\xd6\x4c\xea\xcd\x93\x9e\xc7\x61\xf7\x5c\xdd\x2b\xdf\x57\xee\x7c\x76\xef\x6c\xee\xc3\xa9\xa7\xa6\xf7\x4e\x18\xf6\xaf\x3f\x18\x8c\x3c\xb5\xbe\x3f\x11\x6e\x34\xb3\xf7\x86\x3e\xbb\x0f\x47\xf7\x81\xf7\x9e\xa7\xc3\xb1\x9a\xda\x8f\xcf\xce\x37\x63\xf5\x03\x4f\x3f\x71\xf2\x43\x5c\xbc\xef\xd9\x81\xf2\x3a\x6a\xba\x7f\x70\xa6\x26\x0b\x35\x72\xdf\x25\xc2\xc9\xe3\xe3\xa9\x5a\x06\xe1\x62\x76\xfc\xee\xbe\x6b\xcf\xba\x1f\x1c\xea\xc7\x47\x08\x86\xe3\x70\xba\x83\xe3\x71\x4d\xfd\xe8\x30\x1f\xd5\xa5\x3b\x08\x67\xca\xbb\xb7\xe7\xef\x79\xfe\xc1\x98\x3f\x60\x4a\x47\x5c\x7e\x80\xe9\xd3\x27\x6d\xcf\x9b\xaa\xd9\xec\xfa\xe3\xdd\xf9\xd4\xdb\xfb\x9d\xfb\x41\x18\xf6\x17\xe3\x1b\x7a\x8f\xdf\x62\xe9\xd0\xcb\x0e\xa6\xef\x1c\xf8\x61\xd1\xbd\xf9\x81\xdd\x3a\xe1\xfb\x6a\x7a\x5b\xd7\x87\xe1\x3f\xf0\xc8\x51\xad\xb7\x3d\xb4\x5f\x5a\xdf\x41\xe4\x74\x29\x7e\xeb\x89\xf1\xee\x81\xee\xfc\xcd\x19\x98\x3d\x5b\x80\x9c\xcd\x9b\x66\xd4\x7d\x44\xfa\x2d\x9d\xc3\x03\x1f\xe1\x9b\x1d\x83\xd9\xfc\x7e\xbe\xbe\x1f\xbf\x3d\xe4\xae\x67\x38\xbe\xb5\xa7\xba\xb5\xdb\x83\x2b\xb9\xde\xd9\x79\x80\xfb\x9b\xdd\xde\x5e\xc5\x9c\xcd\x6d\x93\x79\xf0\x91\x3b\x6d\xcf\x66\x8b\xb7\x28\x3f\x76\x76\x43\x4f\xbd\x33\x2e\x78\x34\x83\xb1\x3d\x9d\x07\x6e\x30\xb6\x47\x57\x9d\xf7\x5b\x8f\xde\x8f\xdf\x19\x9b\x3c\x7a\xb4\xf7\x72\x70\xfe\xc1\x77\xd3\xdf\x2b\xef\x16\x7a\x87\x8e\x5f\x3e\xfe\x61\x32\x77\x33\x79\xfc\xb8\xf3\x0f\x0f\xa1\xdf\xde\x18\xee\x6f\xe4\xa0\x13\x4e\xc7\xf7\xc3\xa0\x73\x0c\x18\xae\xb0\xf0\xa2\xe7\xcd\x32\xbe\x3f\xde\xbb\x36\xf2\xad\xc6\x79\x78\x3a\x51\x2c\xd4\x0c\x33\x12\x78\x07\xca\x49\x3d\xa5\xd5\x0a\xd5\x1b\xc7\xbe\x60\x74\x9f\x30\xf2\x71\xba\xaf\x8f\xb4\xff\xd7\xed\xe2\x3f\x78\xe9\x8a\x5e\xae\xe9\x66\xe2\x03\x3a\xdb\xc5\xd9\x33\x35\x79\x37\xe5\x67\x83\xdc\xfc\xb4\xa7\x6e\xec\xfb\x14\xcd\xde\x2c\xe1\x05\xd4\xbf\x47\xbe\xf3\x43\xdc\xf6\xec\x31\xee\xbb\xad\xf3\x31\xc8\xbb\x59\xb6\xe3\x0a\xf0\x1e\x59\x0e\x8f\xdc\xd8\xf7\x18\xfe\xdd\xce\xcf\x43\xbc\x78\x0b\x47\x2f\xd6\x90\xeb\x9d\x4f\x96\x84\x63\x47\x2d\x9d\xb6\xf4\xb4\x56\x3d\xd3\x79\x18\xec\x32\x8e\xc0\x55\x7f\x19\x2d\x86\x6a\x1a\xb8\xff\xfc\xd7\x5f\x6f\x78\xca\x5e\x7f\xe0\xa9\x81\x3d\x9b\xff\xc5\x1e\x6d\xd4\x60\x5f\x8a\xb9\xe1\x09\x3f\x98\x9e\x7d\x24\x55\x33\x13\xd5\x6c\xd1\xbc\x22\xcf\xbd\xdd\xe9\x3c\x71\xf7\x2d\xf2\x8a\xd1\x2b\x63\x3c\x48\xf7\x03\x63\xec\x64\xdd\x3f\xfe\xc4\xfc\xb7\xc8\x7b\x04\xd9\x8b\x7e\xc3\x08\x7a\xb3\xaa\x9b\x95\x17\x43\x0c\xc6\x9d\xd9\x64\xf0\x60\x8b\x89\x8c\x6e\x68\xaf\x28\xfc\xfd\x4f\x87\x2a\x9c\x69\x0f\xd5\xf7\x87\xef\x22\xd5\xcd\x58\x7d\x3f\x3e\xf2\xf7\x48\xc5\xed\xaa\xa1\xfd\x3d\xf2\xb7\xbf\x47\x8a\xab\x91\x9a\x7e\x8f\xfc\x6d\x5f\x9c\x4b\x58\xfa\x6e\xbe\x8e\x23\x3f\x8c\xf7\xa7\x67\x23\x3e\x6f\x3c\x0e\x9c\x28\x1a\x86\x6e\x56\xaf\x8c\x7c\xe8\x10\x29\x9a\xcf\x07\x88\x64\x2b\x91\xbb\x87\xb2\xdb\xc3\x77\xb3\xfd\x20\x77\x2f\x29\x3f\x88\x7f\xa4\xf9\xa8\xa1\x37\xe5\x79\xa6\x4b\xb3\x58\x7d\xa1\xcf\x48\x23\x5b\xcd\x3c\xb2\x75\x5a\x7f\x7b\x46\xfe\x69\x94\x17\x8c\xbc\x47\xf8\x57\x83\xec\x15\x50\x2a\xc4\xc6\x9d\x4a\xb9\x10\x19\x4f\x43\x57\x79\x8b\xa9\x3d\x88\x0c\xec\x51\x67\x61\x77\xd4\x5e\x0d\x37\xd6\x0b\x4f\xd9\x7d\xdb\xd0\x8e\xec\x3f\xd8\xea\x13\xff\x0f\x73\x7b\x4e\x97\x8f\x96\xfd\xe6\xf8\x11\x4b\xaf\xd6\x2c\xb3\x72\xf2\xdd\x9f\x22\x91\x48\xa4\xa0\x99\xe9\x9a\x96\xd6\x23\x7b\xe9\x0d\xa3\x76\x58\xef\x2a\x55\x2b\x9b\xa8\xee\x7b\x68\x95\xc8\x9f\xef\xff\x1c\xa9\xe8\x05\x3d\x51\x8d\xfc\x19\xee\xfe\xf5\x72\x36\xde\x04\xe2\x8f\x49\xf7\xd6\xf0\x9f\x26\x1c\x3a\x27\xdc\x2d\x2b\xd5\x8f\xc9\x77\x03\x85\x47\x11\x1f\xbf\xfa\x90\x84\x7f\xf9\x53\x24\x92\xd0\x2a\x7a\xa4\x91\xd1\xcd\xc8\x9f\xe1\x3f\xe1\xbf\x62\x7f\x86\xff\x44\xff\xfa\xbf\x7f\x46\xfb\xcf\xe8\x9f\xe8\x5f\x91\xea\xa1\x31\xa2\x17\x2a\xfa\x4e\x29\xba\x99\xfc\xeb\x59\xcd\xdc\xe0\x07\x7e\x50\x33\x6f\x53\xf8\x6a\xcd\xfc\x9f\x8f\x68\xe6\xb5\x4f\x3d\xea\xe1\xd1\x0f\xdf\xa6\x88\x27\xb7\xfd\x6a\xc4\x3d\xc7\x91\x48\x65\xa7\xab\xc8\x3f\x9e\x56\x80\x6f\x87\xaf\xab\xad\x92\x1e\xf9\xc7\x29\x22\xfe\x7a\x0e\xb5\x9f\xca\xe3\xcb\x01\x5f\xb0\xf8\x00\xe3\xdb\x39\x3c\x1b\x02\xfd\x28\x97\xe7\x06\x7d\xc1\xe9\x33\x40\x3e\x67\xf7\xc9\xca\x5e\x73\x7b\x2e\xcc\xfb\x61\x6e\xcf\x0c\xfa\x92\xdb\x53\x90\x5c\xe5\x76\xe7\xb9\x3c\xe5\xdb\x8b\xc1\xfc\x7e\x6e\x3b\x03\x35\x1b\xdb\xae\x8a\xfc\x23\x72\x77\xf7\xf7\xe7\xad\xab\x60\xde\xbd\x0f\x03\xef\x64\x2b\xed\x99\xac\xa7\xf1\xef\x51\xc4\x3d\xc0\x6e\x13\xef\x80\xc5\xd3\xe4\xfb\x20\x51\xe0\x45\x9c\xa0\x13\x8c\xe6\xfb\xc0\xc0\xac\x15\x0a\x07\x71\xec\xe1\x2e\x8c\x8f\xb8\x5d\x7b\x6a\xbb\x73\x35\x8d\x2c\xed\xe9\x26\x18\x75\x5e\x74\x1b\x2d\x86\x8f\x21\x7f\x24\x18\xcd\x55\x47\x4d\x5f\x74\xf1\x07\x76\x67\x16\x99\x0d\xed\xc1\xe0\x35\x99\x79\x38\x1c\xbc\x26\xf2\x17\x44\xe9\x5f\x1f\x7b\xbe\x9e\xf6\x97\x79\xc3\x47\xd5\xf1\xb2\xda\xf1\xa8\x92\xb9\x5a\xbf\x52\xc8\x78\x3c\x08\xf6\x35\xfb\xc8\x3c\x18\xaa\xd9\xdc\x1e\x8e\x23\xbb\x39\xdb\xff\x33\xb2\x0d\x47\xea\x35\xa3\x97\xb2\xa2\x87\x78\xf4\x98\x4e\xdd\xc6\xf3\x63\xf2\x75\x61\xd4\xa3\x19\x6a\x56\xf5\x10\xd1\xc1\xfd\x17\x59\x33\x61\xe9\xfb\xf0\x2b\xde\x3a\x7e\x65\x16\x23\x46\xd6\xac\x6b\x85\x9a\xfe\xf8\x6f\xad\xf9\xf4\xef\x84\x96\xc8\xe8\x11\xf8\x96\x30\x1f\x56\xfb\xcb\x81\x5e\x99\xe2\xb1\xe8\x11\x19\xa9\xf5\x7c\x69\x0f\xfe\x72\x77\x41\xe2\xbb\xef\xdf\xa7\xaa\xe3\x0e\xec\xd9\xec\xaf\x2f\xa7\xeb\xb0\x57\x71\xc6\xb6\x18\xf9\xeb\x95\x89\x3a\xe4\xc6\x3f\x2c\xd9\xa1\xa2\xf3\x28\xd7\x79\x64\x3c\xd5\xea\xce\xb3\x79\xb6\xbb\x1b\x7a\xe7\xba\x43\x74\xbe\xfb\xa1\xfc\x77\xe6\x01\xca\xae\x21\xec\x7c\x79\xe1\x93\xcc\xf6\x74\xcc\x9f\x66\xb4\xd7\x04\x89\x14\x1b\xa6\x9e\x8c\xc4\x5b\x6f\x48\x74\xa8\xd0\x5d\x17\xe8\x71\xac\x17\xcd\xbf\x07\xde\x25\xde\x1e\x6a\x3e\x3f\x6a\x75\xc7\x71\x8e\x66\xf7\x02\x33\xf7\x97\x56\xfa\xd7\x25\xae\x4b\x3d\x7f\xdb\x6f\x7c\xfc\x76\xc1\x9a\xf7\x76\x7c\xbe\xc9\x53\x73\x3b\x18\xcc\x22\xbd\x59\x38\x72\x2e\x1b\xdb\x43\xa1\xec\x47\xf5\x70\x1c\xe7\xa8\x87\x87\x7d\xeb\x0b\xbc\x9d\x6c\x26\xdf\x84\xc2\x73\xfb\xd8\xe7\x1f\x3c\xaa\xe5\xa4\x32\xba\x9f\x88\x47\x3e\x1e\x56\x39\xf0\x82\xc2\xd3\x44\xdc\xd6\xff\x71\x33\xf9\x85\x63\x0a\x17\xf3\x27\xdf\xf4\xf2\x99\xa9\xb2\xe7\x6f\x3e\x74\xe8\xbb\x18\x7b\x37\xf7\x7d\x34\x9d\xe3\x3f\x5f\xec\xb3\xbf\x92\x05\xbe\x8a\x07\xe6\xf6\xe0\xde\x0d\x83\xd1\xec\xbc\x0d\xfa\x4a\xdd\x8f\xc3\x70\x70\xbe\x75\xbf\xf3\xe9\xab\x4b\x73\xbd\x6f\x9e\xaa\x99\x9a\x2e\x2f\x75\xd9\xc5\xa1\xf3\xf5\xfd\x3e\x4c\x0a\xb6\x97\x7a\x8d\xa7\xe1\x3c\x74\xc3\xc1\x45\xb9\x5e\xce\xd1\x83\xb1\x28\xdb\x53\xd3\x7d\x78\x71\xf8\x7e\xb6\x70\x5d\x35\x9b\xf9\x8b\xc1\xfd\x45\x43\x39\x0a\x6e\x07\x03\xe5\xbd\xd5\xeb\xc8\xfa\x05\x13\xba\x0c\xbd\x0b\xf5\xed\x1f\x45\xe2\x85\x3d\x93\x37\xfc\xe2\xed\x2b\xd2\xdb\x6b\xdc\x7b\x45\xfe\x5c\x57\x77\x95\xc6\xcf\x72\x7d\xef\x12\xf4\x07\x5d\xe1\x55\x5a\xaf\x5d\xe3\xf9\xee\x57\x5c\xe5\xc9\xee\xcf\xa7\xd9\xe6\x5b\xa9\xd0\xf3\x93\x57\x17\xd2\xa5\x5d\x76\xe0\x1e\x44\xd9\x7b\xc9\x1f\x74\x92\xc7\xd5\x21\x5c\x4c\xdd\xc7\xa3\x1c\x17\xdc\xd3\xc3\x92\x73\x77\xf7\xfd\xfb\xe5\x74\xed\x32\x0e\x8e\x9b\x6f\x3f\xaa\xce\xe3\x79\xc1\xbf\x7c\x6a\x4c\x71\x5c\x36\x3f\xe2\xe1\xf6\xe7\x65\x2e\x92\x7d\x71\x5a\xf1\x5a\xa7\xe3\x01\xca\x6b\x5d\x0e\xb9\xf2\xd9\x0e\xaf\xcf\x7d\xbe\xd1\xef\x2a\xb9\xc7\x5e\x57\x28\xee\x59\x0a\x66\xf7\x33\x35\x18\xa8\x69\xc4\x09\xc3\x81\xb2\x47\x0f\x7e\x2b\x70\xd5\xfd\xe8\x99\x8f\x3e\x7c\xf7\xdc\x6f\x3f\x9d\x38\xba\x7f\xe1\xd1\x9f\x9d\x79\x7a\xd9\x78\xb2\x95\x7f\xf6\x74\xe8\x9e\xeb\xfb\xfd\xf9\xe1\x48\x22\xa3\x27\xf2\x91\xbf\xfc\xe5\x54\x83\xff\x37\x02\xfe\xfa\xd7\xb7\x86\x3a\xf7\xf8\x83\xd2\xfe\xcf\x2b\x3d\xde\x30\xde\x33\x9d\xbe\x18\xfe\x85\xc2\xf7\x0c\x5e\x85\xd2\xf9\x5d\xf0\x4f\x00\xd7\xf9\x73\x0d\x37\x7a\xd2\x5b\x96\xb0\x1f\xf1\xa5\x6f\x9d\x21\xf8\x1c\x6f\xfa\x06\x95\x9f\xe5\x4f\xdf\x29\xec\x0f\x7a\xd4\x37\xa8\xbd\xf6\xa9\x97\x1e\xb8\xe2\x55\x9f\x9d\x1b\xf9\x44\x5b\x7d\xb0\xcf\x53\x96\x6e\x4e\xb4\x8e\x6b\xff\x1b\xe9\xdb\xad\x8e\xf7\xba\x0f\x3d\xdb\xf7\x89\xf4\x59\xbc\xec\x32\x85\xcb\xa9\xc6\xa5\x24\xee\xdf\x92\x86\xcd\xd7\xf7\x6a\xb4\x54\x83\x70\xac\xce\x95\x36\xe7\xeb\x5d\x52\xb4\x18\xcc\x2f\x34\x0e\xd5\xdc\xbe\xd0\xb4\x4b\xc7\x2e\x35\xcf\x82\xce\xc8\x9e\x2f\xa6\xea\x5c\x15\x4e\xb2\xbf\xfe\xf3\x5f\x4f\xb1\xcb\xff\xfc\xbf\x73\xd1\xcb\x3f\xff\xf5\x52\xe7\x6a\x18\x5e\x28\x98\x3d\x8d\x35\x0a\x47\xea\x6a\x2c\xf4\x34\xd6\xeb\x61\x8e\x92\x05\x43\x75\xef\x84\x8b\x91\xb7\xaf\x6a\x8b\xa9\x3d\xea\xa8\x97\x19\xdb\x73\xd7\xba\xd3\xc4\x6e\xb4\x8e\x7a\x91\x02\x8f\x46\x6a\x7a\x7f\x1b\x02\x9e\x46\xba\x6a\xae\xa7\x03\xbf\xad\xe4\x63\xa1\x5e\xad\xee\x1f\x2c\xf6\xc0\xde\x5b\x45\xbf\x48\xe0\x3d\xac\x05\x0f\x87\xd0\x6e\x59\xc0\x0e\x8b\xc1\xfe\xc4\xdf\x1b\xe7\xdb\x2a\x7a\xf5\x4a\xa5\xf7\xb4\xa6\x76\x5a\xe7\x7d\x5f\x96\xf3\x79\x42\xdc\x78\xfc\xef\xaa\x50\x57\xb3\xa3\x5b\x84\xbc\x18\x07\x7c\x9a\x98\x37\x9f\xa0\xbc\x2a\xe8\x1b\x4e\xeb\xbc\xa8\x49\x7b\x6e\x47\xfc\x70\xfa\xc6\x7e\x57\x24\xa9\x55\xb5\x37\xc4\xcb\x9a\x15\xdd\xaa\x46\xb2\x66\xb5\xf8\x6c\xcf\x6b\xef\xe3\x2b\x91\xbf\xc0\x6f\x91\x3b\x04\x8e\x7f\x77\xdf\x22\xf0\x5b\x04\x7c\x8b\xdc\xdd\xfd\xf5\xef\x6f\x3e\x8a\xbe\x45\xee\xde\xf9\x08\x3e\x3e\x02\xbe\x45\xf0\x8d\x8f\x90\x6f\x91\x3b\x0c\x3e\xc6\x21\x7d\xe2\xf0\x56\x72\xec\x5b\xe4\x0e\x9e\xa7\x76\x61\x76\xae\x6d\xc1\xbd\x77\x86\x5e\x6e\xc3\x3d\x70\x75\x07\xef\x83\x51\x30\x0f\xec\xc1\xfd\xe1\x48\xd4\xef\xb3\xc9\xe0\x6e\x3f\x75\x50\xfe\x0d\xb0\xbf\x01\x1c\x81\xe2\x3b\x12\xdf\x09\xff\x1d\x60\x44\x24\x8b\x02\xf4\x52\xde\x8b\xa3\xa3\xfb\xc3\x55\x97\x67\x06\xea\x6c\xee\xe7\x61\xe0\x5d\xa7\x24\x19\xe5\xef\xa1\x84\xef\x17\x33\xf5\x18\x4e\xdc\x07\xa3\x57\xd7\x6b\xae\xd2\x23\x04\x10\xf1\x1e\x7a\xe4\xde\xf6\xbc\xfb\x97\x45\xca\xab\x34\x28\xa1\x18\xbd\x87\x06\xbd\x3f\x04\x2f\x0f\x69\xd4\x7e\x73\xfb\x2a\x09\x86\x01\x7a\x97\x18\xec\x81\xc4\xd1\x19\xdc\x40\x42\x10\x48\xdf\x43\x82\xdf\x0f\x43\x2f\xf0\x37\xb7\x4b\x21\x20\x43\xef\x22\x21\x9e\x49\x71\x3c\xd3\x7e\x03\x1d\x4e\x18\x7e\x1f\x9d\xdd\xa4\xdb\x9d\xce\x54\x75\xec\x79\x38\xbd\x6e\x53\x12\x40\x20\xdf\x33\xbc\xdc\x0f\x7f\x28\x60\xdf\xaf\xbd\xe9\xf5\xd1\x11\x87\xef\x9a\x6a\x08\xf6\xc3\x1f\x67\x61\x5f\x92\xb8\x4e\x80\x4a\xfe\x2e\xed\x40\x78\x4a\xe0\x31\xc7\xdd\x2d\x00\xd7\x09\x49\x26\xdf\x27\x09\x7a\x36\xd1\xc7\xaa\xc2\xe1\x16\xf5\x35\x4a\x10\x70\x4a\xde\x35\x23\x10\x1f\xc4\x79\xac\xc5\x5c\x9d\x71\x08\x11\x67\xef\x93\x84\xdc\xfb\xc1\xfa\xe1\x46\x49\x38\x1c\xdc\xfb\x81\x1a\x5c\x5d\x1a\x21\xa4\x10\xbe\x6b\x11\x86\xf4\x61\x23\xed\x61\x83\x63\xfd\x86\x18\x8c\xbf\x6f\x99\x87\xec\x3e\x18\x75\xd4\x6c\x7e\xff\x7a\x0b\xe5\x0d\x52\x5c\x8a\xf7\xcd\x08\x7f\x16\xf9\xec\xf7\xaa\xec\xeb\xce\x04\x22\x00\x30\x39\x12\xb9\xe0\x6b\xaf\x1e\xbc\x78\xaf\xb3\x7d\x75\xf8\xe2\x34\x26\x4a\x27\xca\xed\x12\xce\xd6\x78\xb3\xc6\xf4\x1c\xc3\xb9\x76\x33\x9f\x28\x17\x5b\x55\x64\x99\x4d\x13\x67\xe2\x34\x61\x66\x74\xd3\xac\xe9\xb5\x4c\xc5\xd0\x48\xbd\x96\xcb\xe5\x2a\xba\xf9\x52\x43\x17\x89\xec\xa2\xa7\x74\xdc\x2a\xb5\x32\xd9\x02\x4a\x64\x71\xca\x2c\x93\x78\xb3\x90\x32\xcc\x64\x21\x95\xab\x99\xa5\x1a\xca\xb4\x70\xdb\x48\x55\x32\x45\xb3\x96\xd0\x8b\x5a\xa5\xc1\xcb\x09\x5e\x6c\xa2\xcc\xcd\x44\x76\x51\x4f\x5a\x33\x53\xed\xa4\x15\x4f\x98\xd5\x5a\x33\x5b\x4c\x26\x72\x7a\xcb\xd0\x12\x25\x23\x51\x69\xeb\x75\x9d\x34\xda\xe9\x36\x4e\xb4\x93\x6d\x5c\x42\x95\x66\x9e\xe4\x33\x9c\x66\xf3\xac\x75\x33\x11\xb2\x27\x92\xc8\x95\x74\xd2\xaa\x59\x08\xd5\x4b\x24\x61\xa0\x78\x32\x95\xd4\x32\x2d\x9c\x2c\xe8\x29\x9c\xe1\xa6\x6e\xe6\x6b\x65\x8a\x93\x55\x5a\xd5\xb3\x28\xad\x65\xaa\xd4\x24\xcd\x9b\x89\xd0\x3d\x91\x56\x25\x61\xe4\xcb\x2d\xa6\xb7\x0a\xcd\x62\xa9\x5a\x65\xb9\x52\xa9\xd8\x4c\x1a\x75\x33\xde\xc8\x56\x4b\xd5\x4a\x3b\x5b\x6f\x34\x48\xa1\xa1\x59\xf5\x78\xb1\x9a\xa1\x56\xb5\xa0\x25\x6f\x26\xb2\x0b\xfe\xd2\x49\x8b\xe2\x86\xa6\x67\xf3\xc5\x1a\x6e\xe7\x4d\x4c\x12\x95\x8c\xd6\xc8\xf0\x4c\x9d\xe5\x19\x4e\xc4\x73\x56\xad\xda\xa8\x25\xe3\xa9\x8a\xd1\xe2\x96\x55\xce\xe3\x4a\x29\x5f\xac\xdc\x4c\x84\xef\xad\x2b\x53\x6a\xa6\xeb\xc9\x7c\x29\x45\xf3\x55\x92\x30\xb5\x2a\x6f\x72\x5e\x6c\xb6\xda\xbc\x55\xd7\x49\x2e\x93\x4f\x25\x6b\x99\x44\x3a\x51\x6f\x24\x0a\x24\x4f\x4a\x65\xc6\xf3\xf9\xf6\xcd\x44\xc4\x5e\x12\x52\x31\x8a\x3a\xae\x97\x2a\x29\xde\xb6\x70\xa2\xaa\x97\x71\x89\xd6\xcc\x6a\xdc\xd0\x73\x49\x0d\xa5\x0b\xcd\x6a\xc6\xe2\x86\xa1\x59\x9a\x99\xcf\xe7\x92\x6d\x6e\x95\xd2\xa9\x9b\x89\xc8\xbd\x24\xf5\x06\x2d\x24\xac\x76\xaa\xc4\x4b\xba\xd9\xac\x6a\xe9\x62\x3d\x5b\x6e\x6a\xc9\xa4\x59\x6b\x36\xdb\xb9\x84\x99\x4f\x91\x7a\x39\x8e\xb2\x79\xde\x40\x85\x52\xae\x91\xe2\xb8\x96\xbe\x99\x08\x04\x7b\x2a\xb9\x7c\xae\x59\xca\xc7\x53\xd9\x4c\xb1\x88\x09\xa5\x8d\x66\x23\x4d\x13\xc9\x78\xbb\x59\x36\x5b\x29\xcb\x4a\x67\x13\x2d\xa3\x54\x2b\x63\x9a\x28\x95\x49\xa3\x5e\xc1\xf9\x76\xe1\x1d\x54\x0e\x98\xcf\xa6\x52\x56\x39\x9f\x31\x32\x2c\x97\xe4\x89\x3c\x2d\x66\x49\xb3\x9e\x68\x25\x0c\xd3\x32\x53\xac\xd4\xd2\x78\xae\x9a\xb0\x70\xaa\x94\x29\xe5\xda\xe5\x6a\xab\x95\x8a\x53\xfd\xf6\xa9\x87\x07\xd0\xb3\xb4\x89\x0b\xb9\x5a\x83\xe5\x5a\x16\xd7\x93\xc5\x1c\xe1\xf5\x78\x86\x27\x09\x35\x48\xae\x91\x69\xa6\xf3\xac\x90\xc9\x59\x9a\x9e\xa5\xb9\x78\xc5\x44\xc9\x78\xb9\xc5\xcb\xb7\x53\xd9\xa3\x3e\x5e\xcc\xf3\x78\xb1\x56\x29\x36\x4a\x99\xb8\x66\xc6\x5b\x06\x33\xb2\x56\xab\x9d\xcb\x26\xb3\xa5\x5a\x2b\x57\x6a\x66\xaa\x19\x2d\x99\xe2\xb4\xa6\xd7\xb3\xf5\x56\x23\x93\x29\x9a\xe5\xc4\xed\x54\xf6\xb0\x8f\xa3\x72\xb6\x55\x45\x59\xad\x96\x32\xac\x66\xbe\x50\x29\x14\x4a\x96\x9e\x48\xb0\x62\xa2\x98\xce\x19\x5a\xb2\x52\xaa\x5a\x79\x5e\x4d\x9b\x55\x54\x49\x59\xa8\x95\x6e\x24\x35\xeb\x76\x44\xc2\x03\xee\x9b\x46\x8a\xe0\x6a\xba\x9d\x69\xe0\xb2\x89\x2d\xbd\x58\xd3\x50\x8d\x96\x1a\x34\x5e\xd5\xac\x66\x3a\xdd\xca\xe1\x5c\x36\x95\x69\xe0\x56\x95\x95\xad\xbc\x55\xc0\x89\x52\xa9\x76\x3b\x95\x23\xf0\x1b\x98\x53\x43\x6b\x59\x84\x15\x93\xe9\x14\x6a\xa4\x35\xb3\x9c\x40\x96\xd5\x2e\xf0\x22\x22\x2c\xd9\xca\x64\x12\xe9\x46\xb5\x8e\x2c\x9d\x67\x33\x3a\x2a\xd7\xca\x85\x77\xc8\xc2\x0f\x0b\xa5\x66\x21\x4d\x6f\xe9\xf9\x6c\x55\x47\x85\x7c\x96\x5a\x46\x33\x45\x8d\x6c\xbd\xcd\xca\xbc\x99\x2d\x58\xc5\x74\xb2\x8a\x50\x91\xe7\x9a\x24\x59\x69\xa4\x2a\x3c\x95\x4c\x96\x6e\xa7\x22\x0e\x6b\x7e\x3b\x5d\xca\xb7\x68\xa3\x92\x69\xa4\x69\xab\xd8\x36\xcc\x34\x45\xe9\x44\x9e\x56\x12\x39\xd2\x4a\xd7\x1a\x46\x2e\x57\x4f\xb7\x2b\x79\x94\x2a\x91\x78\x16\xe5\xb2\x39\x13\xbd\x63\xf6\x0f\xd8\xcf\x24\x48\x12\x25\x2a\x84\x26\x72\x96\x69\x92\xb2\x96\xa9\xa2\x42\xaa\xad\xe5\xb2\x35\x5a\xd2\x78\x86\xe2\x3c\xae\x17\x4b\xac\xa1\xe7\x58\xb3\x91\x31\x2b\x66\x3b\x5f\xbe\x1d\x95\xe8\x80\xfd\x38\x4f\x95\x5a\xe9\x42\x81\x59\x39\xcc\x33\x79\x4b\x6b\x35\x68\x55\x6b\x18\xa9\x78\x3a\x9d\x4a\x1b\x24\x6b\x30\xdd\x8a\x27\xda\xcd\x2c\x8a\xb7\x49\xb1\x58\x6c\xa2\x9a\x76\xbb\xff\x42\x7b\xec\x27\x13\xf5\x6a\x3c\x5d\xd1\xf5\x1a\xcf\x17\x9a\x35\x23\x63\x54\x9a\x71\xad\xd0\xcc\xa1\x2a\xc9\xa2\x7c\xb1\xd4\x6c\xa0\x0a\xad\x5a\x85\x7c\xd2\xca\x6a\xcd\x24\xad\x25\x33\x5a\xab\x78\x3b\x95\x3d\xf6\xb5\x34\x45\xd5\x06\x2b\x6b\x71\x56\x4d\x9b\x46\xb1\x5a\xc0\xa8\x45\x0c\x5c\x2b\x97\x0b\xa6\x69\x66\x4a\x7a\xa6\xa5\x65\x5b\x56\x89\x55\x52\x29\xd6\xd6\xea\x56\x8a\xb6\xcb\xef\x90\xe5\xe0\xf1\x09\xab\x5b\xf9\x78\xa2\x90\x45\x4d\x96\x6c\x16\x9a\x5c\xcb\xea\x75\x2b\x55\xc8\xe0\x9a\xc6\x9b\x71\x1d\x9b\x69\xb3\xc4\x8a\x9c\x64\xca\xb4\xd0\xcc\x18\xe9\x6a\x1d\xe5\xe2\xb7\x53\xd9\x63\x3f\xd9\x4c\x69\xe9\x5c\xa2\x92\xc8\x92\x44\x1e\xb5\x32\x79\xd6\xb2\x0a\x1a\xab\xe6\xf5\x66\xca\x6a\xf2\xb8\x91\xae\x1b\xe5\x62\xdc\x28\x64\xf5\x5a\xce\xca\xd1\x56\xd9\x2c\x18\xd9\x77\x50\x39\x62\x3f\x8b\x71\x2d\x51\x28\x57\x13\x79\x03\x99\x86\x15\xaf\xf0\x66\x2b\x6e\x51\x4c\x0b\x05\xbd\xae\x65\x0a\xb4\x15\x37\x49\xaa\x9a\x88\x93\x4c\x3b\x53\xe5\x6d\x8d\x26\xea\xf9\xbb\x8f\x9e\x40\x8e\x54\xf4\xb7\x4a\x86\xc7\x5b\x1b\x4f\x17\xae\x7e\x9f\xa9\xeb\xa7\x73\xbf\x45\x76\xc2\xcc\xa7\x0b\x75\x43\x6c\xfb\xfa\xe0\xed\x87\x23\xdb\x43\xb9\xf9\x34\xae\x75\xa7\xca\x0b\xe6\xf7\xf6\x60\xdc\xb5\x47\x8b\x21\xd9\x45\xe3\xb5\x4a\xf2\xee\x2b\x16\xf3\xe7\xd4\xd1\x1b\xd4\x3f\x7b\x91\x7f\x4e\x1d\x5f\xa0\xae\xd7\xac\xbb\xaf\x88\x95\x9e\x53\x27\x6f\x50\xff\x5a\xd9\xe9\x1b\x9a\xff\x5a\xd9\xd9\x1b\xd4\x3f\xdb\x89\x3c\xa7\xbe\xf3\xb9\x23\x7b\x1e\x2c\xd5\x8e\xd8\xdd\x8b\x52\xee\x7b\x4e\x46\x7f\xca\xba\xf0\x6c\x2f\xe7\x5b\x84\xdf\xba\x28\x9c\x3b\x18\xfd\xd1\x55\xe1\xe1\x70\xf4\xc9\xb2\x80\x88\x84\x40\x40\xc0\x11\xa3\xfb\x9a\x37\xd9\xe1\xe5\x7f\x7e\x1b\xa9\xd5\x8e\xd3\xdf\xbe\x47\x9e\x4a\xf0\x00\xfc\xbf\x4b\xba\x3f\x3b\x32\x11\x10\x43\x2c\x25\x93\x8f\xd5\xf4\xff\xf9\x6d\x36\xb7\xa7\xf3\x60\xd4\xb9\x77\xec\x81\x3d\x72\xd5\x6f\xdf\x23\xbf\x41\x00\xc0\xef\x47\x12\xbf\xdd\x4c\x03\xbd\xa4\x81\x0e\xc5\xfe\xff\xf9\xed\x50\x70\x7a\x35\xf2\xb7\xc8\x6f\x4f\xd7\x0d\x76\xad\x07\xf3\xb8\x9d\xe2\x2b\xa9\xf0\xb7\x08\x3c\x88\xb5\x52\x41\xa7\xbb\x23\x09\xbf\x45\x7e\x3b\x4c\xc8\x7d\x5f\x6d\x76\x54\x3e\x5a\x50\xb8\x9d\x2f\xbc\xe3\x0b\x50\x28\x20\x47\x8c\xe3\xbd\xb6\xd1\x2b\x4d\x7c\x9e\x1e\x5e\xd1\x3b\xab\xf9\xcf\xa5\x87\x19\x42\x18\x01\x8a\x39\xff\x32\x6b\x7a\x46\xe3\xcb\xad\xe9\x95\x54\xb7\x59\xd3\x07\x8b\x3a\xb7\xf3\x45\x76\x7c\x41\x89\x04\xc2\x02\x08\xf8\xe5\xd6\x84\x5e\xd2\xfb\x62\x6b\x7a\x4e\x0f\x7d\xb9\x7c\xe4\x25\xbd\x2f\x96\x6f\x47\x0f\x71\x86\x31\xe2\x80\x0b\xfa\x65\x68\x79\x46\xe3\xcb\xd1\xf2\x4a\xaa\x1b\xd1\xf2\xb1\xea\xe4\xed\x7c\xed\x64\x47\x18\x63\x81\x01\x26\xe2\xe0\xe9\xc8\xc1\x9c\x46\xf6\xf0\x28\xea\x50\xc1\x9d\x06\x96\xf6\x60\xb1\xff\xc6\x48\x6a\x2b\x43\xfb\xc7\x3f\xde\x47\x06\x4a\x40\x30\xc6\x0c\x4a\x7c\x23\x99\x6a\x76\x6b\xbe\x9f\x0c\xe1\x44\x60\x26\x84\x3c\xac\xb4\x04\xbe\x22\x83\xde\x39\x22\x20\x14\x13\x00\x19\x38\xac\x26\x04\x7c\x0d\xe3\x07\x32\x94\x3d\x30\xfe\x9a\x0c\x7a\x46\xc6\xac\xb6\x70\xf1\xa3\x64\x24\x7f\x98\x86\xd7\x64\x22\xcf\xc8\xd8\x4d\x6b\x9b\x4d\x7b\x4b\x2f\x11\xdf\xba\xe9\x54\xaf\xdd\x34\xba\xef\x23\x09\x18\xa4\x82\x60\x82\xc1\xd7\xc1\xf9\x19\x8d\x2f\x87\xf3\x2b\xa9\x6e\x84\xf3\xc7\xf6\x01\xde\xa9\x09\x28\x18\x26\x8c\x03\x20\xcf\x3b\x07\x8a\x28\x67\x9c\xfd\x2e\x29\x66\x40\xa2\x1f\xd7\x06\x7b\x49\x15\xbd\xa6\x8a\x05\x24\x04\xed\xa7\x00\x12\x28\x3f\x85\x28\x94\x9c\x32\x41\xa4\xe4\xf0\x60\xcb\x7c\x4f\x34\x18\xf9\x83\xc3\x19\x2d\x4f\xcd\xe6\xc1\x68\xff\x79\xaf\xff\x0f\x6e\x91\xbc\x4b\xff\x07\xa6\x28\xc0\xe2\xa8\xff\xb7\x98\xfa\xe0\x5e\xda\x3b\x35\x85\x11\xc7\x14\x23\x02\xdf\x8a\x3f\xd1\x53\xbe\xf4\x21\x24\x3e\x27\x75\x06\x89\xe7\x08\x7c\x8e\x35\x9c\x12\xbe\x0d\x90\x5f\x6e\x10\x3b\x6d\xef\x5c\x91\xa0\x8c\x42\x04\x1f\x8f\x74\x9d\x2a\x44\x4a\xf9\xbb\xdc\xfd\x7d\x52\x78\xf8\x9c\xe0\x19\x2c\x7e\x2a\xc1\x57\x12\x1e\xa0\x78\xf7\x3f\xef\x1b\x81\x30\x81\xa9\xe4\x02\x7d\x99\x8b\x78\x4e\xe3\xcb\x5d\xc4\x2b\xa9\x6e\xcc\xb6\x3f\xb6\xc1\x7a\x3b\x5f\x62\xc7\x17\xc0\x42\x30\x0c\x28\x3a\xba\x08\xb2\xe7\x6b\x3e\x5d\xec\x9e\x39\xf0\xf1\xb1\xed\xd1\x27\xbd\xb9\xa1\xb7\xd7\x9b\x5e\xb3\x5e\x2b\xf3\x65\x5d\xed\xa9\xc7\xe1\x6d\x07\x07\x70\x7e\xac\xbc\xf7\x3e\x55\x70\x06\x24\x66\x0c\x23\x7c\x2c\x3c\xe0\xaf\x53\x45\xad\x92\xfc\x2f\x50\x05\xc7\x0f\x56\xf1\x85\xaa\xf8\x0f\xb6\x8a\x9d\xf0\x1c\x72\x29\x98\xa4\x12\x1f\xdc\x25\x3a\x00\x77\x10\x0c\x83\xc3\x0a\xba\x4b\x9a\x38\x02\x98\x09\xfa\x3b\xe1\x9c\x0a\xc0\xff\xab\xe6\xfb\x51\x48\x0e\x00\x78\x30\xfd\x0f\x09\xf9\x1f\x3c\x93\x3b\xa3\x66\x9c\x02\xcc\x91\x60\xe4\xe0\x7c\xd9\x61\xd1\x5f\xcc\xbb\xf7\x53\x35\x59\x04\x53\xe5\xdd\xfb\x03\xbb\xf3\xdb\xf7\x7d\x45\x7b\xc7\xe7\xa1\x6d\x19\xba\xb6\x33\x50\xa7\x8d\xef\xd2\x2e\xc3\x08\x08\xce\x20\x26\x5f\xe7\xd1\x9e\xd1\xf8\x72\x8f\xf6\x4a\xaa\x1b\x3d\xda\x07\xd7\x8c\xf7\x4d\xf3\x81\x2f\x4a\x8e\xd3\xfc\x85\xda\x3e\xd0\xf8\x72\x6d\xbf\x92\xea\xc6\x88\xf6\xab\x41\xb5\xe3\x01\x52\x21\x21\xe6\x92\x00\x72\x74\x15\xf0\xf9\xd2\x71\x46\x0f\x3f\xbe\x28\x7e\x79\xa2\x74\x10\x8d\x30\x28\x04\x62\x9c\x1e\x57\x45\xf4\x5c\x34\x78\x6e\x92\xff\x6b\x84\x03\x18\x61\x41\x25\xa1\xfc\x8f\x27\x1c\x61\x00\x09\x21\x11\x64\xf0\xdf\xe2\xb4\x7f\x92\x94\x90\x63\x2c\x11\x11\xec\xeb\xfc\xca\x33\x1a\x5f\xbf\x2f\xf9\x4a\xac\x1b\x1d\xcb\xc7\xce\x56\xbe\x83\xb1\x9d\x1d\x61\x4e\xb0\x90\x94\xd3\xe3\x3e\xf0\x95\x00\x62\xff\xce\xc7\x8b\x11\xc4\xbe\xf5\x23\xb4\x19\x64\xc7\xb9\x86\xe8\xb9\x52\xd0\x19\xa5\x7c\xec\x28\xe8\x87\x94\x72\x64\x6c\x67\x31\x87\xf5\xff\x05\x2f\x71\x96\xc3\x8d\x62\x21\xdf\x2a\xeb\x2c\x5f\x4f\xb6\x75\x8d\xe4\x92\x46\xaa\x5a\x2d\x9a\xb5\x56\x09\x97\x6a\x19\x33\x69\xb6\xad\x46\x36\xaf\xb1\x5c\xb9\x91\x35\x72\x6d\xad\x9a\xd2\xdf\xcb\x0b\x86\x04\x4b\x09\xd0\x71\xeb\xf8\x3f\x47\x49\xa7\x8c\xa1\xd7\x8c\xd1\xd7\x8c\xfd\x1c\x8d\x21\x80\xa8\x04\x42\xe0\xe3\xf6\xda\xbf\xbd\x42\x79\xc2\xd5\x6e\x09\xb8\x29\x52\xff\xd0\xe0\x8c\x1e\xf7\xdf\x9f\x0d\xfe\x23\xa1\xfe\xd3\xe8\x10\x00\xf6\x9f\x66\x82\x47\xc6\x08\x3f\x2e\x5e\x87\x3a\xcf\x20\x5c\xdd\xcf\xbb\x53\x35\xeb\x86\x03\xef\xb7\xef\x3b\x17\xf2\xdb\x50\x79\xcf\xbe\xdb\xb1\xdc\x0d\x3a\xdd\xe7\x5f\x7e\x88\xba\x78\x70\x55\x74\x4f\xbd\x1b\x0e\xd5\xbd\x17\x0e\xed\x60\x6f\x5d\x6a\x6d\x0f\xc7\x03\xf5\xbb\x1b\x0e\x3f\x24\x1c\x44\xf2\xe8\xef\xff\xc3\xb4\x7e\x64\x0c\xdd\xe4\xcb\x7e\x0e\xf0\x21\x95\x8c\x40\x04\x81\xf8\xb2\x33\x4d\xcf\x69\x7c\x7d\xec\xf0\x4a\xac\x1b\x63\x87\x2f\x37\x84\xfd\xbc\x73\xcc\x09\x14\x8c\xc8\x2f\x3b\xf5\xf3\x9c\xc6\xd7\xeb\xfb\x15\xc9\xdb\xf4\xfd\xc1\xbb\x23\xef\x60\x8c\xec\xf8\xc0\x80\x4b\x04\x25\x3a\xee\xd4\xe3\x83\x32\x0e\xef\xd1\x3a\xf0\xf1\xb1\xdb\x25\x3b\xc5\x3d\xdc\xd1\xfc\xed\xfb\x4e\xe6\xdf\x66\xe1\xc0\xbb\x3f\xdd\xd5\x3a\x55\xb2\x13\x2e\x3a\xdd\xf9\xc5\xe6\xc3\xb3\xe7\xd2\x8e\x93\x96\x6b\xb9\xc7\xc3\xf8\xe7\xe6\xf2\xf9\x28\xa7\xf9\xc9\xc7\x8e\x49\xbf\x63\x0e\xf0\xcb\x39\x40\x67\xe7\xe0\x83\x7c\x7c\xd9\x1c\xbc\x56\xe0\x33\xfd\xbe\x98\xa2\xb3\xba\x7f\x73\x92\x7e\xf6\x3c\x48\x42\x84\x44\x82\xb0\x87\x53\x00\x3f\x3b\x19\xfe\x29\x42\x02\x28\x09\x86\x1c\x1f\xf7\xff\xbf\x60\x7d\x7d\x46\xe2\xeb\x97\xd7\x97\x42\xdd\xb8\xba\x7e\x70\x55\x7b\xd7\xea\x7a\xe0\x0b\x41\x02\xbe\x2c\x78\x78\x46\xe2\xeb\x95\xfd\x52\xa8\x1b\x95\xfd\xe5\x96\xcd\xbf\x45\x04\x15\x52\x62\x0a\xc0\xf1\xbc\xc6\xeb\x13\x9e\x57\x0a\x75\x1f\xdf\x92\xf9\xe0\x7d\x8e\x77\xc8\xc6\x5e\xc8\x76\x7e\x96\x3f\x71\x92\x5f\x12\xc4\xe7\x5c\xd2\x47\xe5\x7e\xee\x92\xd0\x6b\x97\xf4\x42\x96\x57\x3e\xe9\x45\xfb\xfb\x9d\xd2\x71\xae\x7f\xd8\x29\x7d\xfd\xcc\xd3\x17\x13\x41\xce\x4d\xc4\x07\xef\xb2\x7e\xe5\x44\xbc\xd0\xf4\x57\x46\x68\x5f\x3f\x09\xbb\xa5\x05\x32\x40\xb0\x40\x1c\x9d\x3f\x1c\x8f\xfe\x9b\x97\x96\x53\xd9\x6e\x5d\x5a\x7e\x3c\xd8\xf9\xf9\xb2\x7d\xe1\x2a\x06\xdf\x0f\x1e\xf4\x26\x78\x7e\x42\x7a\xf3\x73\x56\xb0\xd3\x49\xf8\xc2\x15\xec\xcc\x24\xa0\xaf\x76\x25\x9f\x95\xdf\xfc\x7c\x34\xd0\x9f\xea\xd3\xdf\x9a\x88\xcb\x68\xf8\x43\xfa\xf4\xd3\x89\x60\x3f\xd5\xa7\x7f\x7c\x22\xfe\x50\x3e\x9d\x7d\x8b\x70\x8e\x81\x24\x90\x92\xe3\xf1\xd9\x77\xa5\x0b\xff\xc9\x7e\x8f\xbe\x90\xed\x0f\xe6\xd3\x39\x06\x90\x10\x22\x20\xfa\xf7\x54\x69\x7e\x4a\xc0\x79\x10\x92\x22\xf4\x60\x9c\x3f\xf9\x9c\xe1\x4f\x99\x49\x26\x38\x94\x44\x00\x81\xbf\xac\x14\xf5\x8c\xc4\xd7\x57\x47\x5e\x0a\x75\xeb\x8d\x8a\x8f\x2d\xf6\xef\xb2\xa8\x23\x5f\x44\xa2\x2f\x2b\x45\x3d\x23\xf1\xf5\xca\x7e\x29\xd4\xad\xd7\x43\x3f\xf4\x4e\xa6\xf7\xad\xbf\x47\xbe\x24\xf8\xba\xab\x19\xcf\x48\x7c\xbd\xb2\x5f\x0a\x75\xa3\xb2\xbf\x7c\x19\x11\xdf\x22\x8c\x10\x44\x28\xc4\x14\x5f\xaa\xfb\x7d\x85\xaf\xfb\xe0\xab\x4c\xde\x21\x9a\x7c\x21\xda\x8d\x97\xc8\xff\x1b\x44\xdb\xcd\x1a\x80\x48\x52\xc2\x10\xf9\xfa\xf7\x0d\xec\x55\x79\x4a\xef\x8b\xef\xe3\x3f\xc9\x47\x01\xfe\x37\x5d\x87\xf8\x29\xf6\x49\xa9\xc0\x84\x72\x21\xbf\xee\xc0\xfe\x33\x12\x5f\xbf\xce\xbd\x14\xea\xd6\x1b\x68\x3f\x01\x31\x07\xbe\x04\x06\x5f\x77\x5e\xff\x19\x89\xaf\x57\xf6\x4b\xa1\x6e\x7d\x1d\xca\x87\xde\x77\xf8\x0e\x45\x80\x6f\x11\x0a\x29\x96\x0c\x42\x46\xde\x0a\x97\xe8\x47\x54\x0d\x5f\x50\x38\xa3\x6b\xfa\x99\x2f\x40\x79\x29\xd1\x8d\x66\xfd\xb1\xb7\x31\xbe\x4f\x0f\x84\x23\x42\x18\x21\x98\x7e\x59\x16\xf0\x8c\xc4\x97\x9b\xf5\x2b\xa1\x6e\xcc\x02\x3e\xf6\x52\xca\xf7\x29\x02\x49\x22\x19\xe7\x80\xde\x1e\x2a\x7d\x58\x0d\x2f\xe9\x7d\xfd\x4b\x7e\x9e\xc8\x89\x9f\x2c\x9e\xf8\x7a\xf1\x76\xe3\x0b\x46\x09\x07\x92\xb3\x2f\xf3\x00\xcf\x48\x7c\x3d\x54\x5e\x52\xbc\xd1\x03\x7c\xec\xcd\xaa\xef\x53\x04\xc1\x54\x72\x82\x08\xbb\x50\x1e\xfc\x44\x2d\xe0\x17\xe4\xce\xe9\xfd\x53\x81\x72\xa4\xc6\x28\xbb\x10\x7c\x7f\x89\x70\x07\x72\x3f\x49\x38\x0a\xd8\xa5\x45\xee\x2b\x84\x3b\x92\xfb\x59\xc2\x91\xc7\xab\x76\x3f\x45\xb8\x03\xb9\x2f\x16\x6e\x47\x0e\x00\xb6\xcb\x85\xe0\xd7\xbd\x40\xf2\x19\x89\xaf\x5f\xe0\x5e\x0a\x75\xe3\x02\xf7\xb1\x97\x3a\xbf\x83\x2f\xf2\x2d\x82\x28\x67\x52\x00\x2e\x6e\xbf\x81\xf1\xc1\xd7\x40\xff\x00\x5f\x67\xee\x00\x9d\x8b\x9d\xb0\xce\x33\x79\xc3\x32\xab\x2c\x93\x8e\xa7\x33\xf1\x2a\xcb\xb2\x9c\x4e\x4c\x54\x21\x0d\x9a\x6f\x23\xc2\xaa\xe9\x1c\xc9\x97\x2b\xcd\x1c\x2a\x91\x78\x33\x51\x2b\x95\x8d\x77\x14\xf5\xf6\x7c\xed\x5f\x93\x46\xc8\xa5\x1b\x2b\xe7\xf8\xfa\x29\xfa\x3a\xe5\xeb\xb6\xab\x13\x3f\x53\x5f\xe2\xfa\x45\x1a\xf4\xf9\x17\x69\x76\xc4\x8f\x6f\x6a\xc0\x48\x7c\xdd\xe5\xf6\x53\x12\x5f\xbf\x92\xbc\x14\xea\xc6\xac\xe2\xcb\x2d\x70\x17\x1e\x21\x21\x88\x04\x54\x7e\xdd\xbb\x27\x9f\x91\xf8\x7a\x65\xbf\x14\xea\xd6\x72\xf7\x87\xde\x5f\x7f\xe0\xeb\x8d\xb7\x42\x1f\x7e\x2f\xea\x73\xde\x0a\x7d\x1c\xeb\xe9\x4d\x60\xf0\x5b\xe4\x8e\x13\x97\x79\xbe\x87\x85\xcb\x1c\x97\x38\x10\x78\xca\xf3\x1c\x85\x7c\xcf\xa3\x36\x24\xd8\x16\x90\x33\x0a\x11\x56\x4c\x39\x0c\x23\xe2\xf9\xca\x07\x9e\xeb\x11\x9b\x52\xdf\x81\x77\xdf\x22\x77\xbe\x2b\x08\xf6\x10\x24\xd8\xe5\xcc\xf1\x90\x54\x0e\x76\xa0\xef\x7b\x9e\x8b\x3d\x22\x3c\x06\x5c\x6e\x43\xcf\xf5\x6d\x88\x6d\x4f\x08\x28\xa1\x67\x03\xcc\x81\x44\x3e\x44\xde\xf1\x47\x18\xe1\x8b\x5f\x8d\x62\xdf\x31\xfb\x8e\xf8\xcb\x1f\x93\x62\xdf\x31\xfd\x8e\xf1\xef\xfb\x77\x33\xa3\x37\x5b\x11\x83\x52\x62\x00\x28\xa0\xec\x5b\x04\xee\xfe\x07\x00\x80\x12\x70\xf4\xf8\x23\x90\x60\xe7\xad\x09\x87\x68\x7f\xd9\x6b\xf7\x4f\xf8\xd4\x02\x1f\x3f\xec\x18\xd4\x34\x4d\x4b\xc4\x36\x7a\xa9\x92\x4a\xae\xd1\xb2\x32\x9a\x16\xd7\x31\x89\x93\x30\x0b\x3b\x6b\x96\x71\xa3\xdd\xe2\x3c\x88\xf7\xbd\x30\xe9\xe6\x0a\xeb\x42\x79\x35\x72\xc2\x64\x7b\x53\xec\xb8\x1b\xdf\x21\x7d\x45\x57\x59\x5c\x09\x67\xf5\x36\x6b\x95\x17\xeb\xec\xc8\x44\x35\xe6\xc5\x3d\x22\xbb\xad\xdd\xd0\x5a\xb3\x54\x37\x82\x95\xf6\xf8\x17\xce\xf4\xee\xd2\xaa\x26\x96\xb6\x97\x8d\xe5\xe4\x34\x2a\xfa\xf1\xe8\xa0\xa5\xb1\xe2\xb8\x5b\xed\x65\x32\x31\x1a\xa2\x68\xd0\x1f\x64\x49\x89\x4c\x97\xa5\x8c\xb6\xc6\xf6\x2c\x80\x21\xe1\x46\x09\xa2\xa9\x99\x28\x57\xb2\xb5\x7a\xb2\x07\xeb\x53\x6f\x21\x60\x74\x5e\x2c\x24\xfd\xdd\xf8\x49\x60\x92\x46\x79\xdc\x30\x7b\xf9\x23\xa9\x38\x28\x59\x74\xff\xa9\xfc\x48\x3e\xbd\xfb\xbf\xb6\xd6\x84\xa4\xbc\x7b\x24\xa7\xe5\x19\x9a\xf8\xbd\x74\x33\xb9\xe9\x45\xe1\xb8\x59\x2d\x68\x6a\xc6\x62\xb1\x92\x17\x64\x8c\xec\x80\x76\x32\xc5\x7e\xb5\xa7\x9a\xc5\xd8\x0a\x68\xff\x09\x7f\x8f\xbf\xef\x69\xd6\x0a\x85\x0b\xcb\xc0\x2b\x5c\x80\xcf\xb1\xe9\x3b\x41\x15\x47\x8c\x11\xd7\x83\x02\x53\x84\x18\x12\x8c\xf9\x80\x62\x4a\x09\x80\x98\x21\xc7\x16\xae\xb2\x99\x8d\x7c\xc2\x15\xe2\x90\x11\x0e\x6d\x47\x00\x8f\xdb\x02\x01\x71\x0d\x17\xec\xa2\xe5\x63\x4a\x10\x7c\xb3\xf5\x18\x6e\x61\xce\x77\xe2\x5e\xc7\x05\xbc\x11\x17\xa4\x39\xca\x0d\xab\x66\x3a\x59\x0b\x5a\x61\x7b\x19\xaf\xd6\x6b\x5a\xb5\x35\x9d\x18\x6c\x18\x2e\xad\x68\x6e\xdd\xce\xa4\xa7\x1d\x53\x85\xd9\x2c\x15\x7e\x7d\x39\x98\x56\xbb\x6e\x61\x66\x75\xdb\x31\xa3\xd1\x35\x0c\x3f\x56\x6b\x4d\x51\x71\xdb\xb7\xfa\xd5\x7c\xaa\xd5\x4e\xa6\xcb\x54\x1d\xc0\xb0\xc7\x45\xe7\x69\x5e\xdb\x71\xd4\xe4\x03\x37\xe1\x70\x8e\x06\x25\x5e\x1e\xcc\xb3\x2b\x9f\x6b\x7e\x54\xaf\x04\xb3\xfc\x2c\x4c\x8d\x6b\xd0\x8d\xb7\x97\x15\x97\xbb\x5d\x27\x85\x4b\x5d\xd5\x2c\x45\xb7\x3c\x3a\x9f\xe5\xa8\x43\xd3\xad\x59\x43\xb7\x37\x2c\x19\xb0\x44\xbf\xdf\xb7\xbd\xdc\x30\xd5\xc7\xbb\x81\x93\xab\x33\xb8\x28\xd7\xf7\x9f\x7e\x71\x5c\x50\xf9\x39\x36\x7d\x07\x94\x84\x8c\x21\x8f\x41\xc7\xe1\x0e\x12\xbe\xed\x53\x4e\x1d\x69\x63\x0a\x28\x67\xbe\x4b\x80\x0f\x99\xc2\x02\x41\xce\x31\x04\x92\x11\x2c\x89\xe3\x20\xe4\x29\x46\x85\x73\x0d\x17\xf4\xa2\xe5\x13\x06\xd8\xf5\x56\xb6\xc7\x05\x26\x00\x03\x0e\x08\x23\x6f\xe1\x02\xdc\x88\x8b\x15\xb3\xda\x01\xec\x2e\xf0\x2c\x8c\x2e\xeb\x70\x61\x9b\xe5\x3a\x8a\xe9\xc9\xb5\xd3\xeb\x74\xbd\xad\x9e\x6b\x27\x07\x85\x59\x80\x87\x8d\x42\x34\x9b\x18\xe1\x78\xa1\xdc\xb4\x66\xdc\x1f\x90\x59\xd0\x48\x25\xd0\xc0\x4b\xaa\x28\x87\x9e\xdf\x8e\x16\xe7\xac\xb2\x5d\x58\x79\x27\x3c\xcc\xe3\x1e\x17\x4f\x76\xa9\x0d\x4c\x63\x15\x4f\xd6\xf4\xc9\x3c\xd0\xab\xc3\x5a\xd4\x5e\x0c\xfa\xc6\x34\xb9\xa8\xcf\xe3\xbe\x5f\x10\xb3\xba\x9a\x0c\xc1\x7a\x18\xdd\xa4\xb6\xf3\x8c\xdf\xa3\x4d\x91\x28\xd4\xc3\x8a\xb2\x50\x67\x2c\xb4\x44\xa8\x6f\xb2\xaa\x32\x37\x49\x91\x4e\xe7\x7c\x52\xa9\xd8\xeb\x75\x77\xb1\xf7\x17\xb3\x33\xb8\x28\xae\xf7\x9f\x7e\x75\x5c\x88\xcf\xb1\xe9\x3b\xe2\x33\x4f\xda\xb6\xf0\x81\x8b\x6c\xe0\x38\x9c\x21\x04\x31\x82\x18\x22\x07\x10\x22\x39\x02\x0a\x10\xee\xb8\x2e\xe1\xb6\xf0\x08\x57\x58\x08\xca\x10\xc4\x92\x79\x0a\xa3\x6b\xb8\x20\x17\x2d\x9f\x72\x44\x2f\xc7\x51\x0f\xad\x0f\xbf\x1f\x82\x21\x13\x6f\xe0\x02\xc8\x1b\x71\x01\xe4\x7c\x38\xe9\xad\x56\x93\x04\xf7\x82\x6c\x35\x5b\xd5\xa7\x71\x7d\xb0\x49\x76\x2c\xbe\xd5\x55\x08\x33\x84\x74\x1b\xd9\xea\x60\x4e\x36\x74\x60\xdb\x6a\xdd\x0e\x70\x5c\x85\x39\x27\xde\xca\xeb\x99\xba\x65\x37\xcb\xf1\x6d\x7b\xdb\x4c\xf6\xa6\xc1\x76\x18\x6f\xdb\x69\x24\x1a\x07\x60\xec\x71\x71\x32\xaf\x69\xc3\x2f\xc7\x53\xb1\xd6\xa4\xa5\x3c\xbd\x66\x8e\xca\x8b\x60\xb0\x5d\xf4\xb7\x85\x5c\x49\xd5\xa7\x96\xcc\xb2\x09\x76\x6c\x33\x2d\xf0\x48\xf4\xbd\x86\x55\x9a\x58\xbe\xc7\x66\xfd\x62\xd5\xcb\x75\x71\x67\x05\x13\x85\x8d\xd6\xf6\x07\x20\x3f\x1b\x2f\x95\xdd\x8f\x35\x6b\xf1\xe9\x6e\xe0\x64\x78\x06\x17\xa6\xb9\xff\xf4\xab\xe3\x82\x7f\x8e\x4d\xdf\x11\x22\x09\xb6\x6d\x97\x01\x9f\x63\x2e\x10\x72\x1d\x47\x28\x0f\x48\xcf\xf6\xb0\xed\xfa\x3e\x03\xbe\x14\x10\x7a\x8e\x74\x5d\xca\x94\xbf\x4b\x5f\x18\x10\x48\x79\x1c\xfa\xce\xd5\xfc\x02\x5f\xb4\x7c\x26\x08\xb9\xde\x4a\xee\x9e\x7e\x27\x86\x0a\x8e\xde\xc2\x85\xb8\x15\x17\x95\x5a\x71\xb2\xee\xc8\xad\x4a\x14\x0a\x8b\x22\xc8\xa1\x79\x71\x16\x43\x49\xda\xb1\x10\xdd\xa6\x9c\x25\x59\xc2\x4e\x67\x01\xd7\xd1\x55\xa5\xad\x2f\x54\xbd\x3c\xae\x4f\xbd\x26\x09\xa3\x79\x63\xc1\x68\x9b\x69\x93\x92\x5e\xee\xe0\x6e\xb2\x63\xa4\x9b\xf5\x6d\xc3\xf3\x3b\xe4\x29\xbf\xe8\x9e\xe4\x17\x90\xcc\x52\x59\x6b\xd1\x6b\xac\x3a\x32\x3f\x6e\xe0\xb5\x5b\xaa\xc6\xb5\xb4\x5a\xc4\x59\x62\x36\xaa\x18\xd5\x71\x49\x54\x7a\x95\x99\x27\xc3\x9e\x1c\x88\x72\xcc\x29\x42\xd1\x18\xab\xcc\xba\x08\xab\xdd\x7c\x35\xed\x68\xf3\xec\x90\x5a\x09\xb2\x99\xcc\x9b\x24\x5f\xb0\xad\x4c\x6c\x67\xf7\xc9\xfe\x19\x5c\x14\xc6\xfb\x4f\xbf\x3a\x2e\xd8\xe7\xd8\xf4\x9d\xf4\x15\x13\x82\x43\xe2\xd8\x84\x21\xc7\x41\x8e\xed\x39\x14\x21\x1b\x09\x9f\x60\xca\xb8\x70\x5d\x6c\x7b\x58\x60\xcf\x25\xb6\xef\x49\x68\x0b\x17\x42\x85\xa9\x8d\x3d\x8e\xe9\x35\x5c\x5c\xf6\x08\x02\x10\x79\xd9\x9b\xec\x5a\xe9\xdd\xe3\xef\x06\x31\x41\xf9\x5b\x79\x37\xe0\x37\xe2\x82\xc6\x86\x41\x26\x55\x18\xa7\xf3\x3c\xcf\x10\xcc\x4e\xf2\xa5\x32\x6c\x93\x6d\x72\x5a\xed\xc8\x75\x3e\xd6\x4e\x87\x2b\x8b\xc0\x50\xba\x50\xf3\xa7\x0b\x1d\x66\x4d\xd7\x8c\xda\xd6\xb2\xaf\x0d\x8c\x92\x8b\x90\x57\xed\x74\x3a\x81\xcf\x56\x83\xd0\x98\x97\x09\xef\xe5\x26\x56\x76\x3f\x8f\x7b\x5c\x9c\xe4\x17\x0b\x6f\x99\xcd\x3b\x5e\xaa\x5c\x64\xee\x68\x12\x1f\xf8\x5a\x19\x4c\x56\xc1\x52\x54\x63\x4e\xb8\x8a\x35\x4a\xd5\xac\x66\x86\x31\xdd\xb2\xf4\x49\x99\x24\x56\xb6\xca\xb4\x53\xc3\x28\x58\xa4\xc3\xb6\x33\x6c\x79\x61\x7c\xa5\xd9\xc3\x14\x5d\x42\xa0\x0f\x47\x75\x9f\x2c\xd6\x19\xb6\x1b\x3f\xd9\x39\x83\x8b\x7c\x6a\xff\xe9\x57\xc7\x05\xfd\x1c\x9b\xbe\x73\x84\x04\xae\xef\x71\x8c\x18\x10\xd8\xf6\x28\x97\x36\xa4\x90\x31\x89\x20\xf2\x29\x44\x1c\xbb\x40\x00\x85\x1c\xc6\x6d\xcc\x18\x51\x0e\x77\x1d\xd7\x91\x3e\xe4\x1c\x92\xab\xfe\xe2\x72\x66\x2d\x11\x61\xd7\x5b\xf7\x71\xd4\xf1\x97\xa0\x20\x12\x6f\xe5\xdd\x80\xdd\x88\x0b\x1e\x94\xb7\xd2\xdd\xb4\xb2\xc5\x79\x9d\x86\xf5\xd4\xb0\xdf\x2d\x40\x7d\x54\xd2\x3a\xc5\x3c\x52\xbd\x76\x9f\xe1\x8d\x58\xf8\x29\x9c\xd2\xd2\xba\x4a\xeb\x32\x8e\xe7\x03\x1e\xca\x84\x9f\x9f\x97\xea\x06\x49\xaa\x86\x53\xf3\x63\xf1\x10\x4b\x37\x99\xa9\x4e\xf5\xac\x3d\x72\x4f\xfc\xc5\x49\x7e\x91\x29\x2e\x40\xdc\x8a\x22\x5a\x4d\x6e\xdc\x16\xf7\x5c\xb3\xb2\xa9\xbb\x7d\x38\xda\xb4\xe3\x89\xbe\x16\x4f\xb5\x9b\xab\x5e\x3f\x70\x29\xaa\xd0\x12\x42\xed\x61\x2d\xda\xe9\x95\x92\xd9\x5e\x57\x6b\x74\xda\xf1\xc6\xb6\xdd\x06\x2b\xab\xcb\x37\x45\x6b\x2a\x47\x41\x6f\x1c\xc7\xab\xc6\x3e\xbf\x70\xcf\xe0\x22\xdb\xdd\x7f\xfa\xd5\x71\x41\x3e\xc7\xa6\xef\x88\x60\x84\xda\x9e\x20\x18\x28\x2a\x29\xa2\x14\xbb\x1e\x93\x94\x49\x9b\x72\x08\x1d\xdb\x95\x98\x30\xe8\x40\x57\xba\x00\x03\x87\x01\x07\x30\xe4\x13\x41\xb1\xc3\x1c\x48\xee\x1e\xf7\x9e\x5f\xe3\x02\x5c\xb2\x7c\x02\xa8\x80\x17\xbd\xc9\x63\xeb\xc3\x2f\x67\x61\x29\xde\xca\xbb\x01\xbd\x35\x8e\xea\xf6\x1b\xf3\x6e\x32\x39\x18\x54\xea\xd5\x6d\x63\xd0\x18\x0e\x5c\x6b\x31\xeb\x83\x96\x93\xc9\xad\x92\x09\x94\x58\xb5\x96\x95\x54\x11\xcd\x6a\x9e\xb6\x1d\x0f\xdb\xa4\x3e\x0c\x72\x5a\x3a\xdb\x1d\xc1\x84\x48\x30\xba\xd1\xfa\xc3\x79\xdc\x4d\xf4\x53\xcd\x4c\x72\xd5\xaf\x96\xc2\x56\xff\xa9\x1e\xd5\x3d\x99\x57\xbf\x59\xf7\x4b\x15\xd9\x8b\x4f\xba\x55\x7f\x4b\x0a\xc1\xb2\xd5\x2a\x49\x67\x3e\x5a\x44\x27\x2b\x3f\x36\x19\xd7\x5b\x05\x9e\xe9\x38\x9a\x81\x68\xd1\x2b\x64\x48\xa1\xb9\x58\x8d\x4c\x99\x1c\x2f\x72\xc5\xbe\x88\xeb\x2e\xc9\x06\x6e\xd0\xb3\x7a\xda\x74\xd5\x0a\xdc\x3a\xee\x93\xf5\x3e\x8e\x6a\x9d\xc1\x45\x5a\xee\x3f\xfd\xea\xb8\xc0\x9f\x63\xd3\x77\x8e\xc7\x1d\x82\xa4\xe7\x78\xc2\x17\xca\xf7\xa0\x43\x99\xf2\x38\x40\x8e\x0f\x05\x56\x84\x63\x0c\xa9\x42\x3e\x20\x08\x79\x0e\xa5\x52\x52\x22\x5c\x02\x88\xab\xd4\xb1\x6c\x74\xc9\x5f\x40\x79\xd1\xf2\x11\x40\x52\xbc\xd9\x7a\xfc\x2d\x34\xc6\x98\x78\x33\xef\xc6\xb7\xfa\x0b\xc8\xcb\x63\x24\x7b\x84\xcb\x34\x74\xe6\x6e\x62\xb9\xee\x44\xad\xad\x51\x27\xcb\x78\xa2\xe0\xd4\xdb\x83\x5a\x4f\x8f\x1b\x7c\x18\x1f\x26\x97\x56\x80\xc9\x82\x5a\x1d\x5d\x4b\x06\xce\xd8\x2d\x12\x97\x16\xe3\x4e\x21\x4b\x33\xa9\xc6\x1a\xce\xb7\xb0\x18\x5f\xad\x79\xd6\x78\xf2\x17\x9d\x93\xfc\xa2\x25\x80\x3d\x5b\x87\x99\x7a\xd6\xe3\x60\xdd\x97\xb4\xd0\x9d\x59\x66\x3f\xc0\x8b\x4a\xab\xdb\xc9\x4d\x97\xc6\x78\xcb\xca\x0a\xd3\x55\x99\x19\x72\x13\x1d\xc7\xc6\x73\xb3\xcd\xb6\x71\x34\x09\xd8\x78\xb2\xca\xa4\x36\xd4\x8f\x79\xc6\x00\x93\x14\x1c\xaf\xfd\x55\x67\x19\xf7\xf6\xfe\xa2\x76\x06\x17\x49\xb8\xff\xf4\xab\xe3\x02\x7d\x8e\x4d\xdf\x49\x40\x31\xc1\x14\xf8\xd8\x57\x36\xb0\x99\x4d\xa9\xf4\x14\x02\x9c\x49\xaa\x90\x40\x4a\x48\x21\x81\xa4\x84\x08\x84\x6d\x97\xba\x1c\x00\xe0\x73\x66\x3b\xb6\xe7\x02\xa1\xae\xe1\xe2\xb2\xe5\x63\xc0\xc1\xc5\x38\xea\xb1\xf5\xf0\x5b\x7c\x48\x4a\x2c\xdf\xcc\xbb\x6f\xdd\xd7\xa3\xf1\x6a\x19\x26\xb7\xb1\x49\x62\x38\xae\x8f\x54\x36\x63\xd7\x49\x58\x08\x87\xb9\x44\xdd\xca\x66\xd9\xda\x75\xb5\x24\xb6\xa7\x53\x37\x51\xdc\xaa\x94\x6e\xa3\x1e\x9b\xa7\xd3\xa2\xe3\x18\x31\x68\x58\xc2\xd6\xe2\xad\x58\x69\xbd\x28\xca\xf6\x16\xcd\xe4\x70\x9d\x1e\x15\xea\xe1\xc1\x18\xf7\xb8\x38\xc9\x2f\xbc\xd4\x0c\x2c\x96\x5e\x7f\x81\x14\x24\xed\x42\xdb\x6c\xc5\x82\x51\x3f\x09\xb2\x9d\xb4\x1c\x46\x65\x17\x88\xb4\xd3\x1f\xb5\x67\x52\xdf\xb6\xb7\x8b\xb1\xd6\x0c\xb6\x7e\xbc\x39\xec\x4a\x39\xca\x54\x17\xbc\x41\x33\x70\xbb\x1c\xf7\x1b\x15\x94\x48\xc1\xf9\x24\xae\xe7\x57\x8b\xc4\xde\x5f\x94\xcf\xe0\x22\x61\xed\x3f\xfd\xea\xb8\x80\x9f\x63\xd3\x77\x0e\x74\xb9\xc7\xa1\xad\x1c\x5b\x70\xe0\x40\x86\x1c\x80\x90\x8b\xa1\xed\x29\x07\x31\x06\x89\x62\x3b\x3b\x95\x48\x30\xc2\x6d\xe8\x48\x97\x39\x2e\x85\xb6\x63\x0b\xec\x01\xef\x1a\x2e\x2e\xee\x77\x93\x1d\xd7\x97\xbd\xc9\x43\xeb\xc3\x8f\x47\x22\x20\xdf\xcc\xbb\x6f\xdd\xd7\xe3\x99\x0c\x5c\x4f\xa7\x93\x4c\x62\xdd\x9a\x6a\xc1\x6a\x3d\x55\xb3\x61\xab\x46\x7b\xf1\x55\x3f\x6c\x67\x42\x67\x94\x5e\xa6\xd2\xd3\x49\x12\x98\x73\xb4\xcc\x55\x33\xb3\xfc\xc6\xc8\x78\xf5\x44\x26\xd6\x99\x01\x17\xd7\x62\xaa\x9c\x9f\xd8\x0d\x4b\xe9\x51\xd2\xdb\xa0\xce\x3c\xba\x38\x89\xa3\x3a\x27\xf9\x45\x5a\x16\x96\x2a\x14\xf9\xa2\x11\x9f\x2d\xaa\xcd\xf5\xda\x9e\xda\x7e\xab\xbc\xcd\xe4\x07\x93\x55\xb7\xd9\x98\xbb\x56\x6f\x3c\xac\x16\xdd\x68\x31\x1e\x1d\xab\x85\x59\x9a\xb5\x06\xbe\xca\x9a\xb1\x78\x19\x47\xd7\xc5\x72\x9b\x7b\x31\xa7\x1e\x9b\x8f\x72\x9d\x82\x3e\x6e\xfa\xa3\xca\x90\xec\x71\x61\x9c\xc1\x85\x36\xdf\x7f\xfa\xd5\x71\x01\x3e\xc7\xa6\xef\x80\xe7\x0a\x06\x81\x72\x19\x91\x8a\x43\xe1\x11\x0a\x04\x76\x98\x84\x80\x42\x8a\x1d\xca\x84\x74\x94\xcb\x38\x41\xdc\xe6\x08\x50\xe1\x48\x4c\xb9\x52\x0e\xb0\x5d\x65\xbb\xd7\x70\x71\x71\xbf\x9b\x50\x0e\xe9\x65\xd4\x3c\xb4\x3e\xfc\xda\x29\x11\xe0\xcd\xbc\xfb\xe6\x7d\x3d\x9c\x6d\x95\x79\xba\xa2\xdc\x16\x4c\x25\x92\xf3\xb1\x9e\x4a\x55\xe7\x8d\xc0\xe1\x69\x2f\xa1\x46\xd9\x54\x40\xcd\x26\x9f\x26\x66\x6c\x16\x00\xa7\x3a\x8b\x3b\x15\x2f\x59\x4c\x85\xdd\xe8\x86\xfa\xc2\x1d\xe0\x79\x74\x58\x68\xfb\xdb\x69\x37\x93\x8e\x31\x67\x1d\x1f\x58\xd0\x38\xc1\xc5\xc9\xbc\x2a\xb4\x35\x6a\x8d\x3a\x0a\xfd\xf5\xba\x92\xab\x79\xa0\xdb\xd1\xc7\x8d\xa8\xd7\x8f\x1a\x14\xe0\x9a\xd9\x9d\x4d\x9a\x85\x7c\x01\x54\x8d\xce\x74\x6a\x8f\xa3\x46\xdb\x2d\xe5\x4b\xbc\x31\xf0\x8c\x59\x9c\x6d\xa7\x31\x21\x51\xd6\x5d\x05\xcd\xa1\xe6\x32\xab\x68\x52\x97\xc7\x92\x7b\x5c\x64\x5f\xe3\xa2\x18\xcb\xed\x3f\xfd\xe2\xb8\x20\xf2\x73\x6c\xfa\x8e\x40\x87\x42\xa1\x1c\x4c\x39\x86\x0c\x79\x8e\x8d\x25\x11\xd2\xa3\x8a\x4b\x17\xba\x80\x28\xc5\x5c\xe6\x01\xe1\x42\x89\x21\x74\xa8\xe3\x73\x4f\x3a\xc2\x97\xb6\x0d\xb9\xb7\x33\xfd\xc3\x7d\xa2\x33\xb8\xb8\xb8\xa3\x4d\x38\x02\xf8\xed\xd6\xc3\xaf\xdc\x62\xc9\x29\x78\x23\xef\x66\xf2\xe6\x7d\xbd\x34\x4c\x17\x67\xd0\x5d\xb7\xe6\x8b\xde\x20\x3b\xaa\x53\xba\x72\xe3\x45\x3a\x73\xca\xbd\x78\x7f\x9d\x86\x4b\x8c\x9c\x1e\x9d\x74\xfd\x86\xaa\x5b\xa9\x68\x2a\x68\xc0\xf2\xc0\x8d\xe2\x05\x1c\xc6\xdd\xb6\x20\xb5\x82\xe5\x85\x38\xea\x56\x43\x42\x5b\x56\x2e\x59\x8c\x96\x2a\x64\x3f\x8f\x3b\x5c\xf8\x27\xf9\xc5\xac\x52\x2c\xc4\xa3\xa9\x2e\x2f\x65\x61\xdc\x1b\x6a\xd1\xd1\x60\x4d\x93\x9e\x6a\x56\xb4\x76\x8b\x17\x47\x9b\x8c\xbb\xd8\x28\x43\x1f\xe6\x34\xec\xf4\x09\x5c\xcd\xa7\x1b\x23\x86\x07\x9d\xee\x48\xd3\xea\xa3\x52\x2c\x88\xef\x04\x03\x93\xec\x3c\xe9\x0f\xa3\xf3\x41\xb1\x61\xda\x7b\x5c\xe8\x67\x70\x21\x07\xfb\x4f\x57\x70\xf1\xdf\xf6\x77\x30\xad\x77\xe2\x42\x7c\x8e\x4d\xdf\x39\x44\x2a\x1b\x28\x07\xfa\x8a\x21\xe9\xbb\xc8\x95\x9e\x8f\x5c\xc9\x99\xe3\x4a\xc9\xa1\xaf\x3c\xe6\x7b\xc2\x43\x94\x2b\x57\x71\x2c\x14\xa1\x2e\xf6\x85\x64\xdc\x83\x94\xc9\x6b\xfe\xe2\xe2\x0e\x05\x11\x88\xa0\xcb\x71\x94\x40\xfb\x4d\xbf\x87\xdf\x2c\x06\x08\xbc\x91\x76\x33\x79\x73\x99\xb6\xa2\xc2\xe2\xcc\xa7\xc1\x48\x14\x72\x78\xb3\x69\xda\x62\xd8\xcc\x44\xe1\x12\x99\xb9\x26\x2f\xba\x84\xa6\x56\xb1\xa0\xe1\x5b\xf5\x31\xb3\x93\x0d\x5c\x28\x39\x8d\xf2\xa8\x5f\x9e\x68\x1b\xb3\xdd\xce\x0d\x92\x0d\xbb\xae\x15\x64\x7a\x58\xcf\x0f\x8c\xba\x93\x09\x6d\xad\xba\x79\x72\x17\xfe\x89\xbf\x28\x9b\x1d\xe2\x4e\x49\x32\xe4\x93\x45\x13\xe3\x90\x4c\x1d\xbb\x69\xf3\x68\x3c\xe9\x65\x5c\x51\x72\xaa\x7a\x33\xee\x2e\xca\x7a\xb5\x24\xa6\xd5\x8e\xeb\xf0\x11\xae\x35\xf5\x34\xb0\x97\x22\x58\x2c\xbb\xeb\xc6\x20\xd1\xce\xf9\x8c\x18\x89\x4c\x74\xbe\x6e\x75\xca\xcd\x7c\xa3\xb4\x1b\x38\xa9\x9d\x81\x05\x79\xf3\xd8\xe0\x7f\xdb\xdf\x87\xdc\x05\xff\x1c\x93\xbe\xe3\x80\x79\x92\x08\x9b\x51\x1b\x40\x4a\xa5\x8b\x31\x62\x04\x32\xa1\x24\xc4\x3e\x71\x88\x04\x00\x13\x49\x90\xcf\xa5\xad\x6c\xc9\x7c\x06\x99\x0d\xb0\x92\x02\x49\xee\xe2\x6b\xb0\xb8\xb8\xa1\x4d\x24\x85\xec\x72\x52\xbe\x6b\xdd\xa7\x17\xc7\x5f\xaf\x46\x12\xbe\x91\x76\x33\x79\x6b\x99\x16\xc7\xe7\x83\xec\x78\x10\xc6\xeb\xed\xd5\x36\xd7\x4f\x85\xcc\x2a\x81\x79\x4e\x4b\x56\x6a\x05\x3c\x5c\x4c\x1a\xb2\x6b\x77\x4a\xe3\xce\xd8\x4f\x42\xbd\xce\x60\x89\x86\x7a\x1a\xf6\xc6\x4b\x92\xb5\x63\x99\x5a\x27\x9d\x18\xe7\x57\xd5\x32\x69\x8f\x07\x99\xee\x9c\x87\x7c\xac\x71\x78\x00\xc3\x1e\x17\x27\xe9\x85\x28\x1a\x3c\x61\xf6\x06\xe1\xba\x31\x59\x0d\x6c\x7b\x34\x8c\xdb\x53\x6b\x3b\xb4\x75\xad\x57\x81\x56\xb5\xca\x93\x46\xbc\xd6\x8d\x15\x33\xc1\xd2\x68\x76\x03\x28\xba\xe9\xb5\xd6\xe2\x3c\x60\x5a\xa2\xaa\x4f\xec\x55\x52\x2c\x9b\xfd\x65\xb3\xd0\x8b\x6f\x95\x6a\x25\x3b\x89\x52\x75\x37\x7e\x42\x9c\xc1\x05\x7e\xf3\xd8\xe0\x7f\xdb\xdf\x87\x70\xc1\x3e\xc7\xa6\xef\x98\x14\x04\x28\x01\x7d\xc5\x15\x15\xc4\xb6\x3d\xe0\x23\xe4\xf9\xb6\x90\x4a\x71\xc6\x5d\x0f\x53\x44\x88\xe4\x94\x61\x45\x38\xb4\x7d\x61\xfb\x8c\x3b\x14\xfb\xc2\x23\x7c\x5f\x35\xba\xb0\x7d\x71\x79\x83\x82\x02\x46\xc9\xc5\xe4\xe3\xb1\xf5\xe1\x07\xd6\x29\x83\x27\x69\xf7\x8b\xbf\x6f\x11\xfe\x80\x81\xb7\x30\x81\x86\x7a\x32\xcc\x44\xfd\x41\x37\x3f\x2d\x8b\x00\xb3\x40\x51\xe4\x9b\x66\xc5\xca\x79\x8d\x52\xdf\xb5\xa3\x79\x39\x9a\x57\xa3\xa6\xb5\xd6\x3a\xd5\x6c\xa9\x90\x2e\x6e\x46\x8b\x72\xa7\xd8\xdc\x0e\x9b\xe5\xf6\xb4\xb0\x49\x57\xb5\x74\x36\xd9\x28\x66\x72\x56\x39\x37\xa9\xf9\x8e\x16\xd4\xf6\x73\xb8\xc7\xc4\xc9\x9c\x76\xfb\xad\x4e\xb5\x55\x4f\xf9\x81\xb9\xde\xac\xda\xa9\x4d\xbe\xd6\x63\xd3\x9a\xb2\x08\xaa\x58\x5b\x73\x5b\x1c\xd9\xb3\x4e\x3d\xd6\x58\x24\x97\xf3\x95\xd9\xb7\x1d\xaf\x1c\x9d\x77\xda\x8a\xe0\xcc\xbc\xa9\xcf\x12\x4e\x59\x76\x1a\xc5\x85\xd5\x64\x05\xea\x2e\x8b\xa2\xbd\x8a\x5b\xe3\x3d\x26\x88\x49\x0a\xf6\x76\x8c\x4e\x00\x18\x9f\xb7\x5e\x98\xd4\x1f\x01\x13\xe8\xdd\x98\xa0\x9f\x63\xcf\x77\x54\x29\x1f\x02\xc6\x6d\xe0\x3b\x9e\x43\x20\x46\x50\x11\x8e\x6c\xe8\x42\xe2\x2b\xcf\xa5\x14\x7b\x10\x53\xbc\x5b\xbf\x3d\x65\x13\xdf\xf3\x30\x94\x1e\x70\x6d\xee\x21\xdb\xbf\x76\xc4\x1c\x5e\x2c\xc2\x52\x28\x28\xb9\x98\x72\x3f\xb6\x1e\x7f\x66\x1e\x09\x8c\xc0\x15\x4c\x30\x71\x23\x26\x20\x5f\xea\x69\xd5\x89\xca\x79\xdc\xe8\xd2\x4c\xbe\xbb\xaa\xc5\xe6\xeb\x7a\xc9\x32\xab\x03\xcb\x51\xe3\x12\xae\xa6\xbd\x64\xde\xaf\x4c\x49\x3f\x9d\xc8\x64\x46\x1a\xcb\x17\xbd\xb0\xe4\x56\x96\x63\x66\xad\xbb\x7d\xd4\xad\x59\x83\x74\x0a\xd6\x4b\x28\xac\xd4\xcd\x78\x3f\x99\x95\xee\x7e\x0e\x77\x98\x50\x27\x69\x05\x9a\x45\x5b\x1e\x66\xe9\x5a\x7c\x98\x9a\x26\x46\x62\xb4\xde\x5a\x38\xcd\xd3\x2c\x3e\x68\xac\x92\xbd\x46\x76\x59\x59\x94\xd7\x69\x23\x9b\x68\x49\x64\xf5\x9a\x34\xe9\x14\xd7\xad\x6e\xce\x30\x62\x7a\xd9\x85\xe1\x24\xbd\x02\x9d\x59\xca\x99\x4f\x66\xc5\x66\xbc\x57\x28\xd4\xa5\xde\xdc\x0b\x01\xce\x60\x62\x52\x7e\x61\x52\x7f\x04\x4c\xbc\xdf\x4f\x90\xcf\xb1\xe7\x3b\x42\x80\xb4\x05\x87\x1e\xdd\x2d\xcf\xc0\x61\x36\xb0\x19\x06\x10\x33\x25\x80\xeb\x21\x2a\x6d\x8c\xb1\x6b\x53\x8a\x00\xf6\x1c\x48\x89\xf0\x30\xa4\x3e\x94\xca\x27\x36\xbd\x5a\x86\xba\xb8\xcd\x4d\x91\x90\x57\x10\xf3\xd0\x0a\x85\x90\x5c\x50\x06\x01\x22\xd7\x30\xc1\x6f\xc4\x04\x28\xe7\x26\x99\x4c\xbd\x96\xae\x15\xec\xce\xb8\xa7\x55\x9d\x30\x69\xe6\xda\xe1\xb6\x94\xaf\x57\x34\x39\xab\x57\x4c\xa3\x2e\xda\x1c\x8c\xdd\x69\xb8\xaa\x79\x79\x6b\xab\xc5\xda\x56\xdf\x53\xa1\x48\x2f\xd0\xa4\x4e\xaa\xdd\x1a\x64\x9e\x1c\x0b\x93\x93\x8c\x3d\x5a\xd0\xda\x6c\xb6\x9f\xc3\x3d\x26\x4e\x72\x8a\x46\xc3\x85\xe3\x56\xb7\xde\xb0\x42\x3d\x67\xb3\xb4\x9b\xc9\xce\xec\x1e\xdc\xcc\xd6\x59\x92\x28\x47\xe3\x6e\x6e\x12\xa4\x1b\x78\xd5\x1b\xe6\xa2\x4b\x3f\x65\x15\x02\x9a\x43\x41\xd2\x68\x9a\xd5\xc6\xc4\x1c\x8e\xfc\xb9\xd8\x66\x52\x45\xc2\x48\xab\x93\x6b\x57\xf9\xc2\x01\x93\xe9\xde\x4f\xac\xce\x60\x22\x9c\xbd\x30\xa9\x5f\x13\x13\xf8\x73\xec\xf9\xce\x96\xcc\x75\x7c\xe9\x63\x17\x79\xd8\xa5\xcc\xf1\x20\x71\x08\xa0\x00\x11\x66\x53\x85\xa5\xa2\x12\x01\x1b\x01\xa8\xa4\xc7\x98\x4b\x80\xe3\x52\xdb\x66\x82\x0b\xe4\x2b\x7a\x2d\xa7\xb8\xbc\x29\x41\x09\x44\x57\x62\xa7\x87\x56\x28\x08\x13\x98\x4a\xcc\x91\xb8\x86\x09\x76\x23\x26\xd8\x60\xb6\xa4\x42\x14\xaa\xeb\xc6\xd2\xaa\x80\x78\x39\x97\x1e\xab\xa2\x6a\x54\x12\x81\xa6\x46\x0d\x47\x4f\x88\xc6\xc4\xce\x74\x96\xb4\xda\x36\x2b\x9b\x6e\x33\xe9\xe7\xf5\x4d\x8d\xf5\xfa\x60\x28\x46\x6b\x4d\x67\xa5\x44\xce\x4e\xaf\xb5\xb0\xb8\x9a\x2c\x5d\xad\x62\xcc\x6a\x27\xe5\x27\x75\x62\xa6\xb2\x80\x56\x93\xb8\x3d\x14\xeb\x35\xd3\x8d\x41\x19\xaa\x98\xc5\x73\xa5\x6e\x7f\x96\x9b\xa4\xc2\x76\x72\x98\x4f\xb9\xa9\xf8\xca\xc7\xeb\xc4\xca\x45\xb9\xc2\x20\xcc\x6e\xc7\xf3\x56\x37\x34\x13\x3c\x03\x8a\xf9\xa4\x4a\xca\x70\xd5\xd6\xfa\x34\x6b\x8f\x46\x53\xd5\x9b\x82\xa2\xb6\xf3\x43\x89\xd9\x19\x4c\x8c\xb2\x2f\x4c\xea\xd7\xc4\x04\xfa\x1c\x7b\xbe\x43\xc8\x01\xcc\x21\x40\x12\xc2\x5c\xe8\x03\x17\x71\x61\xfb\xc0\x55\x90\xda\x9e\x94\x8c\xee\xbc\x90\x8f\xa0\x64\x36\x75\x7c\xe5\x29\x8f\x32\x8f\x49\x0f\x33\xce\xa5\x2b\xaf\x6d\xe3\x81\x8b\x99\x34\xa5\x48\x5c\xce\xc2\x1f\x5b\xa1\x00\x58\x08\x86\x18\xc1\xe8\x1a\x26\xe8\x8d\x98\xd8\xe4\x57\x36\x48\xd4\xac\x59\x66\xb5\x1a\x05\xcb\x64\x31\x65\xa3\x76\xbb\x19\x96\x44\x77\x30\x69\xc4\xb8\x82\x0d\x38\x06\xc8\xa3\x1b\x2f\x0b\xb7\x19\x7b\x1e\xad\x66\x2a\x41\x5a\xa4\x82\x5c\xab\xdb\x44\xd9\xde\xc4\x55\x2b\x63\x33\x19\x73\x95\x2d\x58\xf3\xc2\x7a\x30\xd1\xea\x87\xd2\xfe\x1e\x13\x27\x73\x4a\x86\xe5\xf5\x22\xbb\x49\xf7\x8d\x51\xcd\x1c\x4f\xd7\x21\x5c\x30\x07\x9b\xc5\x7c\xa7\x12\x4b\x4c\x2c\x0b\xf4\x65\x68\x94\x4b\x85\xc6\x4c\x44\xeb\x4c\x4c\x46\x09\x3b\x95\xd2\xd7\x24\x0f\x3b\x61\xc3\xc6\x56\x32\x23\xb2\xed\x59\x8b\x07\x28\xde\x6c\x54\x12\x46\x63\xb2\x1d\xaf\x77\x7e\x28\x11\x9e\xc1\xc4\xa0\xff\xc2\xa4\x7e\x4d\x4c\xc0\xcf\xb1\xe7\x3b\x9b\xf9\xd4\x71\x39\xf1\x6c\x49\x98\xe4\x40\x12\xe9\xba\xc2\xa6\xc2\xe1\xbe\x0b\x5c\x9b\x22\x5b\x32\xc4\x7d\x1b\xda\x84\xfa\xae\xeb\x53\xc6\x6d\x66\x7b\xc8\xc7\x10\xda\x12\x5c\xc9\xb1\xc1\xe5\x8c\x81\x11\x79\xf9\x6a\xde\x63\x2b\xe4\x0c\x48\xcc\xa8\x84\xf8\x5a\x8e\xcd\xc8\xad\x7e\xc2\x81\xcb\x4c\xd5\x1e\xa4\x07\xab\x41\x6e\x9b\x1d\xb7\xe6\xb1\x95\x31\xae\x4c\x1a\xb9\x58\x68\x5b\xfe\xb6\x54\x1f\x8d\x27\x60\x69\x58\x93\x72\xde\xdc\xb4\x9c\xe2\xaa\xc0\x2d\x27\xb0\x7b\xd9\xec\x48\xae\x42\xd8\xcc\x4e\xd6\xd3\x75\xbe\xd9\xad\xb8\x95\x5c\x7b\x31\xeb\x76\x46\xb0\x26\xf6\x73\xb8\xc3\x84\x77\x92\x4f\xe0\xb9\x5a\x67\x1a\x7d\xd5\x1c\xcc\xba\x62\x33\xa0\x28\xb7\xd5\xa1\xc1\xc7\x31\xb1\xd8\xf6\x31\x4b\x7a\x03\x67\xb9\xf2\x26\x8d\x15\x6c\x01\x5e\xcd\xcc\x42\x7d\x16\xe7\xb1\x95\xb0\xca\xbd\x1c\x01\x83\xb1\x41\xf3\x50\x77\xc2\x84\xaa\x8a\x4d\xac\x17\x8b\xc5\x7a\x58\xb3\xf7\x98\xe8\x9f\xc1\xc4\x4b\x48\xfc\x21\x30\xf1\xfe\x1c\x1b\x7c\x8e\x3d\xdf\x39\x2e\xb6\xa9\x2d\x29\x16\x44\xf8\x0a\xb9\x0e\x61\xca\xe3\x54\xb9\xca\x51\xcc\xb1\x81\x74\x05\x65\x1e\xe1\x1e\xf3\x95\x0d\x10\x45\x08\x0b\x2a\x3c\xe1\xb9\xdc\xb6\xbd\xc3\x6d\x88\x4b\x98\xb8\x1c\x1d\x09\x80\x2f\x6f\x7a\x3f\xb6\x1e\xde\x0d\xc2\x24\x14\xe4\x6a\x8e\x8d\x6e\xc4\x04\x5f\xb1\xc6\xb8\x46\x2a\x25\x32\x9b\xa7\x79\xb3\x39\x63\x51\x9b\x25\xdc\x6e\x03\x66\xe0\x92\x75\x72\x95\x2c\x69\x98\x3d\x57\x4d\x50\x3d\x16\x8c\xb2\x2a\x9d\x4b\x4d\xeb\xd0\xaa\xd7\xa2\xeb\xf1\x34\xdb\xb6\x32\x22\x5f\xb7\xb3\x9c\x0c\x62\x55\x6d\x1e\x8d\x4d\x73\x2a\x93\xa3\x4f\x7e\xc2\x3b\xcd\x27\x72\x83\x50\xf2\xa9\x5f\xee\xf5\xb2\xe6\x42\xd3\xfb\x2a\x51\x74\xb0\xb5\x1a\x30\xb3\x55\xeb\x4b\xda\xb4\x19\x36\x5d\x50\x4b\x2c\x21\xa8\xe1\xd9\xd8\x2c\x27\xc4\x90\x96\xeb\xf6\x00\x19\x0d\xc4\xcb\xa1\x28\xae\xe2\xda\x28\xb3\xe8\x8a\x95\xde\xc8\x1b\xdd\xd6\x3c\xbb\x1f\x3e\xd1\x39\x83\x89\x0e\x79\x61\x52\xbf\x24\x26\xb0\xfc\x1c\x7b\xbe\x73\x04\x92\xcc\x16\xd0\x75\xb0\x4b\x98\x70\x09\xf7\x21\x00\x8c\x21\xdb\x75\x30\xe6\x0a\x32\x21\x18\xe4\x18\xb9\x0a\x41\xe8\x79\x9e\x8d\x01\x82\x02\x48\xa1\x04\x60\xee\xb5\xa3\x81\xe0\xb2\x27\x90\x88\x93\xcb\xd9\xc6\x43\x2b\x64\x9c\x02\xcc\x11\xa1\xe4\x6a\x8e\x7d\x6b\x2d\x96\x77\xc6\x76\x98\x29\x94\x74\xdb\xb0\x62\xba\xd6\x0e\xa6\x05\x03\x93\x46\x90\x4e\x6d\x0b\xc5\xac\x85\xbd\x70\x95\x6d\x25\x5a\x4c\x73\x8a\x99\x60\x59\x58\x6f\x4a\x22\x1b\x65\x7d\x92\x1b\xc7\x89\x86\x4b\xeb\x62\x7e\x66\xe9\xed\x9a\x31\xda\xb6\xe2\xa1\x36\xea\x88\xf6\x42\x3f\x5c\x10\x3d\x60\xe2\xc4\x4c\x2b\x2a\x13\x9f\x2e\x92\x1d\xb3\x94\x73\x64\xdf\x77\x73\x75\x63\x93\xe8\xb0\xa1\x72\x40\x3f\x5c\x52\xaf\x21\x8b\x7d\xa1\xeb\x6a\x8c\x1c\x1d\x56\x7b\xdc\x9a\x24\x61\x0c\x94\x59\x34\x03\x16\x46\xdf\xa8\x17\x57\x8d\xc6\xb4\x9a\x32\x7d\xdc\x12\x6e\x7d\x2b\xc3\x5e\x22\x07\xf7\x39\xb6\x7b\x06\x13\xa7\x1e\x6a\xff\xf7\x47\xc0\xc4\xbb\x63\x27\x2c\x3e\xc7\x9e\xef\x7c\x2c\x25\x83\x8a\x7b\x8a\x62\x00\xb0\xb7\x4b\xda\x05\xe2\x1c\x13\x0c\x24\x74\x19\x50\x50\xd9\x9e\xf2\x1d\x1b\x63\x04\x90\xa3\x80\xc0\x98\xb8\xb6\x62\x5c\x70\x47\xf9\xd7\xfc\xc4\xc5\xed\x6c\x06\x30\xbd\xe8\x26\x1e\x1a\x21\xc3\x08\x08\x4e\x39\x22\xd7\x32\x6c\x2a\x6f\x44\x44\xac\xd8\x6e\x29\x5f\xd5\x56\x9a\x1c\x86\x2a\xe1\x6d\xcb\xab\xbe\xdb\x2a\x66\x26\x78\xb9\xe8\x19\x9d\x7c\x34\x91\x34\x8d\xe9\x50\x65\x96\xcb\xa5\x57\x34\x9a\x6e\xbb\xbc\x44\x7e\xc2\x28\x8f\xea\x46\xcd\xcf\xc7\x73\xbc\x59\x49\x35\x9c\x4e\x3c\xb6\xd2\x71\x7c\xc6\xd5\x54\xf0\xc5\x61\x06\xf7\x88\x38\x99\x51\x33\x16\xf5\x12\xb3\x66\xa5\xee\x06\xe3\x5c\xa1\x49\xfd\x4a\x7d\x10\xf3\xe6\x49\x31\x4e\xa9\x68\xd0\x1e\xf9\x23\xb3\x8d\x3a\x7c\xd9\xec\xc5\x74\x27\x18\x83\x4d\x61\xd9\xb0\x44\x9b\x2f\xc6\x6e\xc9\x9c\x4e\x92\x4d\x55\x58\xd6\xd7\xed\x60\x1b\x27\xa0\x1b\xa0\x7e\x36\xe8\x8e\x46\xfb\xc8\xa9\x75\x06\x11\xae\xf1\xc2\xa0\xfe\x08\x88\x78\xbf\x97\xe0\x9f\x63\xcd\x77\xbe\x64\xd4\xa7\x8a\x33\x85\x3c\x9f\x4b\x22\x39\x55\xbb\x75\x59\x60\xe8\x48\xea\x08\xa6\x5c\x57\x72\x08\x7d\xee\x70\xdf\x81\x84\x78\xbe\x74\x5c\xdb\xc5\xae\xb0\xb9\x8d\xec\x6b\x5e\xe2\x62\x0e\xcd\x20\xa5\xf2\x62\x25\xf6\xb1\x15\x52\x21\x21\xe6\x42\x4a\x7a\x2d\xc3\xa6\xb7\x56\x62\x63\x83\x81\x54\xde\xa2\xe0\xab\xda\x00\xd2\x8d\xd5\x32\x9c\x81\xd3\x5d\x6c\x73\xae\x25\xb9\xcf\x53\x3a\xa6\xcb\xfc\x4a\x04\xa3\x70\xd2\x53\x4d\x7f\x46\x2d\x3b\x11\x1b\x57\x1c\xa3\x0c\x6a\x7d\xb3\x53\xcc\x4c\x58\x3e\x35\x4e\x0d\x27\x34\xb6\x2e\x75\xbb\x76\x6c\x92\x9d\x06\x87\x48\x7e\x87\x09\xf7\x64\xad\x2e\x15\x2d\x67\xb1\xcc\x98\x66\xca\x9f\x55\x2a\x43\xcf\x9b\x0c\x6b\x25\x91\xea\x8b\xa0\x21\x73\x0e\xdc\x94\x0b\xb1\x85\xbe\x69\xa5\x5d\xb4\xc8\xb6\x42\xcf\x31\xcb\xe9\x6a\x5a\x9b\x15\xaa\x78\x55\x4f\xcd\xb6\x8b\x72\x7c\xd3\x34\xc7\xa5\x3c\x9a\x95\x05\xe8\xe4\x3b\x5a\xc8\xac\xfd\x21\xd9\x44\xed\x0c\x26\xda\xfa\x0b\x93\xfa\x23\x60\xe2\xfd\x5e\x82\x7d\x8e\x3d\xdf\xf9\x40\x02\x46\xa9\x0f\x3c\xea\x2a\x45\x05\x46\x88\x7b\x00\x08\xe1\x3a\xdc\xf6\x91\xc3\x05\xf0\x99\xef\x49\xa8\x04\x66\x36\x81\x90\xdb\x8e\x03\xa1\x47\xb8\x74\xa8\xab\xe0\x35\x4c\x5c\xdc\xc5\x66\x98\x52\x71\x31\x72\xda\xb5\xee\x03\x27\x4a\x18\x14\x02\x21\x46\xaf\x25\xd8\xf4\xd6\x42\x6c\x2c\x51\x6e\xd7\x85\xd9\x2c\xd2\x96\x11\xf8\xe5\x44\x76\x83\xa7\x9b\x39\x49\xa2\x58\x3b\x13\x9a\x93\xb2\xa5\xa6\x33\x0b\x66\x86\x70\xdb\x9d\x13\xe0\x8e\x97\xcc\x4e\x98\xc3\x76\xd3\x1d\xf4\x40\x7a\x0c\x3b\x22\x56\xae\x3a\xd1\xa9\x3e\xdb\xf2\x22\x2b\x5b\x6a\xa9\x8f\xf9\xf8\x04\x12\x27\xc9\x44\x72\xcd\x17\xb8\x3a\x17\x12\x24\x93\x09\xad\x85\x4a\xb5\x10\x0f\xf2\x41\x0d\x1b\x78\xb4\x19\xb8\xd3\xc9\x70\x69\x0c\x52\x85\x4a\xd4\xd7\x47\x6b\x5f\x6f\xf4\x06\x4e\x52\x65\x3d\x2f\xd9\x54\x89\x7c\x95\xcb\x5e\x48\xfc\xd5\xa6\x0e\x36\xc3\x92\xb6\x65\x31\xa8\x49\x92\xda\x5f\xb2\x4b\x94\xcf\x40\xa2\xd9\x79\x61\x51\xbf\x26\x24\xe8\xe7\x98\xf3\x9d\x02\x12\x50\xc7\x63\x90\x49\x2e\x20\x55\xdc\xf3\x04\xb0\x99\xcf\x6d\x4f\x28\x81\x01\xe7\x36\xc5\x80\xd8\x0e\x60\x02\x0a\x44\x15\xb5\x05\x02\x8e\xef\xb8\x2e\x44\x9e\x73\xb5\x10\x7b\xd9\x11\x10\x0a\x2f\xbf\x5d\xf0\xb1\x15\x52\x80\x77\xf9\x0f\xc5\xec\x5a\x82\x4d\x6f\x2d\xc4\x46\x13\xe5\x86\x6c\x35\x06\x24\xa5\x7c\xaf\x93\x77\xf0\xb4\xc5\x92\x71\x3c\xae\xc6\xf3\xb3\x74\xa7\x95\x53\x8d\x30\x5b\x88\x8a\x55\x05\xc9\xea\xb4\x51\xf3\x58\x91\x1b\xa4\x02\x7c\x25\x6a\xba\xeb\x75\x07\xee\xb0\xe5\x6e\x3c\x10\x0d\x9d\x8e\xed\x95\x7b\xad\xb6\x16\xab\xe5\x9f\x36\x27\xdc\x13\x33\xad\xe1\x41\xa3\x24\xfd\x6a\x25\x37\xb4\x46\x26\x2f\x8d\xcd\xb8\xdd\xb6\x5b\xdb\x20\xdd\x95\xcd\x3e\xca\xa2\xc1\x46\xeb\xb4\x6a\x9e\x39\x5b\xad\xcb\xd5\x79\xd6\xcc\xd0\x9a\xea\x8c\xbd\x22\x40\xfd\x76\xb8\x2d\xfa\x33\x16\xeb\xb5\xac\xd4\x78\x9d\x18\xb7\x3a\x7a\x75\xcb\x2a\x8a\xef\x43\x27\xe3\x0c\x26\xea\xe2\x85\x49\xfd\x9a\x98\x20\x9f\x63\xcf\x77\x14\x71\xec\x21\xc4\x7c\x6c\x7b\x92\x10\xcf\xe1\x42\x71\x02\x3c\xa4\x7c\xc8\x31\x13\x84\x42\xc9\x6d\x20\x85\x2f\x5c\x84\x5c\x64\x43\x9b\x40\x24\xb0\xf0\x90\x8f\x38\xbf\xf6\x0e\x03\x70\x71\x13\x9b\x51\x26\x2e\x6f\x62\x3f\xb6\x42\xc2\x00\x12\x42\x08\xc0\xae\x25\xd8\xf4\xd6\x42\x2c\xcc\x6d\x41\xe0\x6c\xa7\x6d\xcb\x9c\x13\x0a\x92\x15\xbe\x76\x51\x37\x95\x6e\x86\xb9\x1e\x59\x05\xab\x49\xba\xaf\x87\x45\xb3\xb0\xf1\x56\x9b\xb9\x99\xcb\x2d\xf2\x64\x61\x8d\xe3\x13\x53\x67\x49\x2d\x36\x5f\x25\xe6\xb3\x8d\xb1\x6a\xc6\xe2\x66\xaf\x9a\x47\x3d\xa8\x21\xb7\x30\x7e\x7a\xaf\x87\x7b\x32\xa7\x31\x47\x8f\x96\x54\xd9\x72\x5c\x63\x59\xc9\xfa\xe5\x8d\xdd\xac\x34\x9a\x7a\x67\x1b\xe7\xb6\xb3\x9a\x2a\xb3\x5e\x56\xad\x56\xb6\xbb\x0a\xda\xa0\x3d\x59\xbb\xee\x66\xe3\xad\xf2\x41\x67\x51\xcf\x79\x4e\x36\xdd\xd6\xd3\x15\xa3\x2d\x65\xad\x5c\x68\x48\x2b\xbb\x29\x85\xae\x1b\x54\xf7\x42\x64\xcf\x60\xa2\xf6\x47\x3c\xec\xf4\x7e\x4c\xe0\xcf\xb1\xe7\x3b\x40\x15\xe7\xae\x23\x19\x60\xc0\x75\xa0\x43\x09\xe6\x84\xfa\x42\xf8\x0a\x33\x85\x11\x61\x0e\xa1\x0e\x62\xb6\x54\x8a\x4a\xee\x43\x49\x7c\xcf\xdf\xe5\x27\x12\x52\xdb\xbd\x7c\x4f\x9b\x7e\xa7\x97\x83\x23\x46\x29\xbd\xb8\x9d\xf7\xd8\x0a\x09\xe4\x18\x4b\x04\x38\xbb\x9a\x62\xe3\x1b\x31\xb1\x6a\x8e\xfc\xc2\xa0\xd3\x32\x66\x4e\x3d\xe9\xa5\xa2\xd9\x58\xcf\xe9\xe5\xd2\xf3\xd4\x6c\x38\x51\xb4\xed\xaf\x07\x25\xcc\x8c\x4d\xbf\x3e\x4d\x2f\x94\x91\x5e\xe5\x6b\x1b\xbc\xf5\x12\x39\xdd\x71\x47\x85\xd1\x3a\x6c\xeb\x35\x5c\xa7\xd2\x6e\x4d\x79\x74\xe2\xf8\x46\x00\x92\xab\xd1\xd3\xa1\x58\xe7\x24\x9d\xc8\x78\x25\x31\x8f\xc7\xe7\x63\xb5\x29\x08\x29\xe7\x85\xd2\xc8\xf4\xec\x49\x2d\xcc\x58\x8d\x61\x26\xdf\xcb\x8b\x61\xe8\x4c\x09\x44\x2b\x3d\xeb\xf5\xea\x6e\xc6\xc1\xf5\x5c\xb7\xac\xcd\x17\x23\xb3\xd4\xeb\x8e\xbb\xfd\x8a\xdf\x8d\x76\xfb\xa4\xef\xc6\x57\x7d\x32\xf7\x4b\x32\x60\xfb\x4d\x6c\xfd\x0c\x26\x2a\x2f\x2f\x04\xfd\x9a\x98\x40\x9f\x63\xcf\x77\xbe\x82\x18\x33\xe6\x12\x97\x62\x17\x10\x9b\x51\xe5\x12\xaa\xa8\xe7\x71\x4a\x80\x87\x31\xb2\x85\x8b\x05\xa1\xcc\xe7\xd0\x26\xcc\x11\xee\x0e\x68\xc2\x67\x90\x41\xe2\xe0\x8b\x45\x27\xfa\xfd\x8a\xd5\x73\x8e\xf8\xe5\x04\xfc\xa1\x15\x62\x4e\xb0\x90\x14\x13\x7e\x35\xc5\xbe\x75\x73\x22\x46\xaa\xe6\x70\x6d\xd4\x44\x3c\xdf\x56\xeb\x14\xf5\x20\x2c\x9b\xc6\x66\x62\x14\xf5\xfa\xd2\xb5\xad\x69\x2f\x3e\x60\x3d\x94\xea\x56\xb6\x8e\xb7\x5e\x3b\x7e\x2a\x59\x8f\xce\x02\xa6\xa5\xad\x65\x81\xce\xa2\x61\xdd\x9d\xb5\x44\x7b\xd5\x4f\xd1\x7e\x41\xea\xf1\xcd\x38\xe0\xfd\xa7\x0d\x3b\xe7\x24\xaa\x47\xdb\x24\xe5\x1e\x0a\x6b\x2b\x54\x60\xc3\xc5\x74\x3e\x8c\x85\x0a\x25\x7b\x2c\xb5\xd8\xc6\x9b\xa3\xfa\x90\x0f\x78\x26\x4c\xce\x8c\xda\xd6\x9c\xb4\x9c\xb6\xea\x35\x86\xcb\x95\x45\x48\xaa\x5e\x2e\x39\x46\xd6\x5b\x20\xa7\x97\x61\xfd\x26\xce\xe6\x78\xa2\x1b\x90\xd6\xb0\xb3\xd8\xc7\x4e\xda\x19\x4c\x58\x7f\xc4\x03\x80\xef\x2f\x3b\xc1\xcf\xb1\xe7\x3b\x4e\x81\xaf\x3c\x7f\xff\x52\x66\xac\x28\x10\x04\x71\x8f\xbb\xcc\x87\x36\x86\x3e\xc0\xc8\xf5\x7d\x4f\x38\x14\x62\x65\x3b\xc8\x77\x6d\xec\x12\x81\x38\xc1\xae\x44\x0a\xb2\xcb\x07\x00\xe9\xf7\xcb\x37\x4d\x99\xdc\x79\x80\x37\x5b\x21\xc6\x90\x60\x29\x18\xe4\x57\x73\xec\x5b\x37\x27\x70\xad\xc4\xfd\x20\xde\xaf\xd2\x72\x37\xe1\x37\xd7\xcb\x74\x2f\xb3\x32\x66\x31\x19\x40\x3d\x3a\xd9\xc4\xf2\x25\xbd\x33\x2a\x8b\xfe\x22\x35\x73\xb3\x93\xfa\xb0\xb7\x59\x4e\xb2\x03\x27\xe5\x0d\x87\x89\x99\x5b\xcd\xac\x16\x29\xb8\xf6\x63\x10\x89\xfc\x30\x1c\xc7\x0b\x46\xb9\x61\x4e\x9e\x2e\x15\x39\xa7\x97\x27\xd2\xc3\x36\x1a\x76\xd3\x8d\x52\xc2\x6d\x68\x1e\x1c\xd7\x64\x25\x9e\x6b\xfa\xaa\x37\x4f\xf2\x54\x51\x0f\x0b\x49\x16\xa6\x66\xd5\xe2\x92\x18\xf9\x46\xd6\x5c\xd6\xb6\xfd\x64\xa0\x9b\xa3\xad\xa1\xcd\xe0\x60\x99\x11\x7a\xa0\x37\x72\xb6\xb5\x9a\xe6\xac\xa5\x09\x5a\x0b\x6b\xb9\xdd\x0d\x1c\x17\x67\x30\x51\xfc\xdf\xc3\x4e\x3b\x4c\x80\xcf\xb1\xe7\x3b\x89\x99\x0b\x15\xf4\x81\xe3\x43\xdb\x97\x0c\x0b\xa0\x1c\x20\x15\x95\x8a\x22\xe8\x51\x85\x3d\xcf\xc3\x1c\x78\x08\xfa\x3e\xf1\x3d\x68\x03\x69\x3b\x10\x61\x9b\xb8\xbe\x63\x5f\x2e\xc5\xd2\xef\x97\xf7\x1f\x38\x10\x44\x5c\xcc\x27\x1e\x5b\x8f\xbf\xb9\x00\x77\x19\xc5\x15\x4c\x90\x5b\xb7\x27\xa8\x39\xcb\x74\x45\x41\xd8\xd1\x46\x51\x63\xab\xd1\x60\x34\xc8\x7a\xcd\x1e\xf6\xcc\x15\xe8\xc6\x40\xcc\x0a\x73\x93\x75\x96\x55\x4b\x8b\x49\x7f\x5b\x6c\x6e\xe9\xd0\x47\x85\x4e\x6b\x64\x87\xda\xbc\xb9\x36\xdb\x85\x7e\xb4\xe6\x57\x45\xcb\x92\xa8\xec\xc8\x36\x6f\x95\x9c\x02\x3e\xec\x0c\xec\x31\x71\x32\xa7\xb0\xd7\x2c\xd8\x61\x3e\x96\x2d\x4e\xf2\x66\xbd\x1f\x38\xc8\x35\x0b\xd3\xde\x40\xaf\x66\x9a\xe3\xf6\xc0\xcd\x91\x78\xaa\x55\x14\x8e\x81\x87\xd6\x76\x32\x6e\xf8\x9d\xe5\x9a\x8f\x7c\x2a\xb8\xb7\xee\xe5\x5a\x75\x73\xd8\xb1\x06\xbe\x9f\xd3\xb7\x8d\x64\xbc\xb3\xea\xfa\xb9\x61\xa7\xb6\x83\x5f\xfc\xdc\xe5\x09\xe3\x7f\x0f\x3b\x55\x22\x7f\x41\xf2\x73\xec\xf9\xce\x85\x84\x50\x49\x11\xf2\x15\x41\x0a\x79\x10\x38\x48\xda\x98\x03\xc7\x51\x8e\xbd\x83\x13\xb1\x95\x22\x48\x22\x81\x3c\x47\x11\x22\x08\x12\x98\x7a\xd0\x21\x04\x33\x76\xf9\x50\x2c\xfd\x4e\x2f\x6e\x62\x73\x28\x08\xb9\x58\xa8\x7d\x6c\x85\x88\x50\x4a\x00\x85\x54\x5c\xcb\xb1\xc9\xad\x97\x27\x44\x4a\x6f\xd4\xb3\x4b\x9a\x20\x73\xbd\x90\xb7\xcd\xd5\x22\xba\x18\xe8\xd1\xca\x82\x26\xfa\x61\xc1\xa1\x7a\x37\xd1\x81\xc0\xb1\x92\xed\x9e\x91\x49\xce\x86\xb9\xb0\x3a\xde\xf8\xc6\x14\x8c\x78\xdb\xea\xc1\xd2\xbc\xde\x72\x83\x55\x85\xa6\x10\x8d\x29\xa7\x4e\xf3\xc3\x52\x66\xf3\x94\x63\xdb\x27\xf9\x84\x63\x27\x92\xc4\x72\x7c\x7d\x52\x99\x66\xa3\x93\x71\x76\xb3\xdd\xd6\x6a\x51\xa7\xd5\x32\x72\x33\x6b\x85\xc7\x19\x77\x98\x59\x95\xa7\x4b\x5b\x0b\x32\xb5\xad\x5e\x71\xf8\x70\xdd\xe8\x38\x6c\x9a\x94\x41\xd4\x59\xb6\x6c\xaf\xd7\x5d\x1b\x56\x3a\xa6\xd6\x61\xb2\x31\x16\xb1\xb0\xb6\x7f\x2d\x42\xfc\xdc\xe5\x89\xc2\x4b\x93\xfa\x35\x31\x21\x3e\xc7\x9e\xef\x24\x40\x0e\xf0\xa9\x82\x4a\x51\xc0\x1c\xe9\x4b\x8f\x09\xa1\x08\x23\x8c\x63\xc7\xb3\x91\x6f\xdb\x80\x32\xc1\x99\xeb\xf9\x0a\xd8\x2e\xa2\x40\xf9\xd4\x95\x9e\x0f\x6c\x61\xef\x5c\x01\xdf\xff\x77\x06\x13\x17\x37\xb1\x39\x92\x57\xde\x9d\xf9\xd8\x0a\x11\x40\x54\xee\xdc\x9f\xb8\x96\x63\x93\x5b\xb7\xec\xa8\x36\x4d\x42\xa2\x68\xd9\xa6\x51\xcf\xce\xd2\xb4\x35\x2a\xca\x70\x39\xe9\xd4\x43\x6f\x86\xa3\x89\x59\xae\xcc\xe1\xc6\x13\xf9\x60\x38\x32\x93\xab\x42\x2b\xa3\x78\x27\x9b\x69\x19\x9b\x75\x2b\x68\x94\x0a\x4c\xf3\xc6\xc5\x61\x31\x9d\xb0\xb2\xe6\xb0\xe4\xea\xcb\x61\x7c\x44\x9f\xde\x3f\x6e\x9f\xbe\xef\xa9\x1c\xab\x92\x4d\xce\xcc\x8f\x64\x37\xc8\x85\xd5\xc5\x3a\x39\x33\x1d\x4f\x06\x8e\xd5\xf0\x51\xd7\xcc\xe4\xba\xb3\x60\x12\xcf\x37\x92\xd0\x99\x0f\x66\x41\x43\x33\xd7\x13\xbd\x8d\x6b\xf1\x3c\xca\xce\x16\xad\x94\x41\x6c\x26\xa6\x45\xab\xbc\x5a\x78\xaa\x3d\x8b\xe7\xe1\xa2\xbe\x83\x41\xfc\xdc\xe5\x89\x9c\xfb\xc2\xa4\xfe\x08\x98\xe0\xef\xc6\x04\xff\x1c\x7b\xbe\x93\x88\x2a\x22\x7c\x25\x5c\x0c\xa5\x42\xd8\x11\x14\x40\xe2\x79\x3e\x53\x98\x49\xe1\x39\xb6\x72\x20\x75\x3c\x41\x14\x50\x84\x60\xca\x20\xf1\x31\x44\xd4\x13\x84\x2b\xdb\xbf\xe6\x27\x2e\x66\x0c\x9c\x32\x7c\xf9\x92\xdd\xbe\x75\x5f\x77\x82\x54\x32\x02\x21\x93\xf2\x5a\x8e\x4d\x6e\xcd\x27\x68\x4e\x55\x4a\xcc\x30\xda\xa4\xb7\x48\x69\x35\xec\x3b\x3d\xbb\x85\x18\x5b\x37\x64\xb7\x98\xec\x97\x61\xab\x26\xd6\x39\xaf\x9b\x61\xcb\xf2\xc6\xcb\x65\x9b\xba\x36\x83\x8b\x62\x92\x65\xfb\x35\x63\x26\xd2\x83\xd1\xa6\x94\xac\xae\xad\x49\x68\xe5\x1b\x24\xb6\xea\xb4\xdb\xb6\xf9\x94\x4f\xd8\x27\x66\xda\x1f\xab\xa6\x67\x36\xfd\x61\x17\xea\xa3\x5a\x2f\xd1\xca\x1a\xca\xf1\xb6\x75\x51\x1a\x74\x12\x8a\xe5\x98\xca\x4d\x84\xe1\x90\x4a\xb3\x55\x35\x6a\xd2\xa2\x63\x27\x55\x8e\xc7\xc6\x5d\x7d\xbc\x0e\xd2\x81\x5b\xed\x0f\xe2\x7a\xb3\x56\x29\x37\x44\x73\x3a\xaf\x83\x8c\x8c\x9b\xd1\xdd\xc0\xf1\x33\x97\x27\xb4\xe8\xff\xee\xd9\xed\x30\xc1\x3e\xc7\x9e\xef\x7c\x4a\x5c\x00\x24\xf7\x08\x81\xbe\xcf\x99\x4b\x04\xf7\x88\x72\x1c\x28\x7c\xaa\xa8\x4f\x91\x4b\x6d\x0a\x5d\x5b\x32\x01\x80\xe3\x4b\x47\x40\x81\x24\xe5\x12\xd8\x98\x73\x71\xad\xee\x74\x39\x3a\x62\x5c\x90\xcb\x91\xd5\x43\x2b\x84\x90\x31\x09\x89\x64\xf2\x5a\x8e\x8d\x6f\x3e\xee\x54\x37\xb4\x9c\x5f\x2b\xfb\x12\xad\xb3\x7e\x8d\xf1\x74\xa9\x39\x90\x95\xb5\x5d\x73\x27\x8d\x8e\xb6\xa4\x8b\x78\x67\x5c\xa7\x89\x9e\x47\x8a\x4e\x7c\xe2\xaa\x99\xd8\x36\xdb\x5a\xcf\x2f\xa4\x6d\x2b\x6a\x78\xa0\x93\x59\x95\xea\xa4\x10\x35\x17\x5e\xa9\x53\x29\xe7\xbc\x99\x4e\x9f\xea\x4e\xf6\xc9\x9c\xa6\xab\x79\xb7\xe7\xd1\xf9\xcc\x1d\xa4\x70\x29\x3a\x9e\x27\x03\xc3\xab\x35\xc6\x02\xcf\x17\xad\x54\x74\x3b\xd0\x92\xe3\x68\x33\xda\x99\x47\x55\x7c\x00\x87\xed\x4e\x19\xf5\xe3\x9d\xe2\x20\x99\xc0\x1b\x83\xf4\x61\x33\x55\xe9\x77\xc4\x68\xae\xea\x39\x63\x1c\xcb\x77\x27\xc5\x4d\x03\xed\x63\xa7\x33\x97\x27\x34\xf1\x47\xdc\xb3\x7b\x77\xdd\x09\xd1\xcf\xb1\xe7\x3b\x8f\x43\x07\x22\xe4\xf8\x0e\x04\x0a\x42\x89\xa9\xe4\xb6\xeb\x13\xce\xa4\x2f\xa5\xc3\x21\x53\x5c\x2a\xee\x41\x65\xbb\xae\x8f\x10\xb5\x3d\x9f\xfa\x1e\xa3\xae\xa3\x94\xc2\xfc\x9a\x9f\xb8\x1c\x1d\x71\xc9\x2f\x1f\x0f\x7c\x6c\x85\x80\x63\x4e\xa0\x40\x04\x5c\xcb\xb1\xf1\xad\xb1\x93\x74\x1d\x3d\x58\x72\xbd\xa8\xb7\xcd\xb6\x9a\xc9\x8c\xed\x0f\x1d\xb7\x41\x29\x95\x99\xc9\xb6\x94\x1d\x4c\xfd\xa6\x6c\xbb\xcb\x05\xc1\x09\xea\xf5\x5a\x2b\x95\xe8\xfb\x0b\x47\xb5\x82\xcd\x54\x5b\xae\x07\xa5\xe1\xa2\x96\xe9\xac\x9d\x7e\x74\xdc\x6f\x12\x0a\x06\x4e\x50\x8b\x3f\xe5\x13\xed\x93\x7c\xc2\x90\x9d\x42\x3d\xb9\xec\xad\x8c\x45\xbd\x1d\x1d\xf5\xac\xde\x72\x69\xac\x07\xdd\xd0\xb3\x3a\xb1\x7a\x6e\xbc\xb0\xc7\x41\xc2\x01\x1b\x59\x49\xce\x1a\x59\x1d\xb4\xdb\xcd\x44\x8e\x23\x63\x66\xc7\x58\x6d\x5a\xf3\xaa\xc9\x7e\x74\x38\x31\x8d\x09\xca\xab\x76\x3d\x1f\xef\x79\xf3\xc3\xfe\x47\xfc\xcc\xe5\x09\x8d\xbe\xdc\x9f\xd8\x1f\x7f\xfa\x2f\xc7\xc4\xfb\xfd\x04\xf9\x1c\x7b\xbe\xf3\x80\x74\x11\xa7\x54\xd9\x18\x42\x20\x39\xe3\x1e\xb3\x77\xff\x71\x48\xa9\xeb\xfb\xd0\x61\x18\x28\xcf\x61\x98\x09\x9b\x38\x48\x00\xc7\x61\xc2\x53\x88\xb8\x48\x39\x0e\xb9\x86\x89\x8b\xfb\xd8\x5c\x42\x88\x2f\xee\xe8\x3d\xb6\x42\x80\x01\x97\x08\x52\x08\xae\xe5\xd8\xf8\xd6\xf3\x4e\x32\xe1\xe6\x60\x73\x62\x58\x89\x66\x5b\xda\x73\x7b\xee\xd6\x9b\x25\xe1\xb4\x56\xdc\x69\xa1\xa0\x3f\x0b\x13\xdc\x36\x49\x7f\xb5\x58\x00\xdc\x35\x98\xcb\x2a\x9b\x95\x66\x55\x46\x25\x07\xbb\xf3\x14\xf3\xc3\xba\xe7\x74\x36\xeb\xee\x38\x66\x91\xd8\x2c\xda\xd0\xa3\x73\x75\x78\xb5\xd2\x01\x13\x27\x11\x0c\xdc\x06\x19\xbb\xb7\x70\x92\xd3\x1e\xcc\x2e\xa8\x5e\x16\xad\x76\x1c\x91\xc4\x76\x88\xa4\x96\x2b\x79\x76\x6e\x34\x6b\xe2\xa8\x16\xf5\xeb\x38\xef\x7b\x2a\x98\xe4\x26\x9b\x4d\xd7\xef\x47\xf9\x70\xd5\xa8\xc5\xc1\xd4\x71\x96\x73\xb6\x61\x04\x74\x0b\x31\x67\x14\x96\x8c\xb6\xec\xec\x2f\x4a\x9c\xc1\x04\x79\xb9\x3f\xf1\x6b\x62\x02\x7f\x8e\x3d\xdf\x39\xc2\x13\xd0\x96\xc4\x75\xa5\xed\x42\xcf\xf5\xf6\x07\x09\xa9\x63\x2b\xc0\x04\xb0\x39\x61\x3e\x81\xb6\x23\x11\xf6\x94\x74\x98\x60\x14\x10\x84\x00\x96\xbe\xf0\x7c\xc2\xaf\xd5\x62\x2f\x5f\x8f\x10\x90\xa2\xcb\xb5\xd8\x7d\xeb\x2e\xee\x92\x82\x0b\x82\x08\x17\xe0\x5a\x8a\x8d\x6f\x3d\xee\xc4\x7b\xad\xf4\xb8\x6a\x0c\x67\x19\x17\xe6\x3c\xd5\x60\x24\xdd\xc9\x7b\x69\x19\x9f\xd0\xac\x64\x8e\x9d\xae\xe9\xd9\x4e\xd1\xef\xf9\x16\x2b\x96\x3a\x54\x0b\x83\x54\xad\x33\xc7\xe9\x34\x68\x14\x73\x53\x92\xc0\x39\xbb\x9c\x19\x72\xa3\x14\x2f\x07\x33\x2f\x41\xba\xfd\xed\xba\xf2\x14\x3a\xb5\x4f\x0c\x53\x2d\x58\xbb\xb0\x8d\x46\x55\x71\xd3\xc0\xb1\x4c\xa9\xc5\x20\x5b\x46\xc3\x14\x6a\x72\xca\x1a\x89\xaa\x48\x4b\xac\x8d\xbd\x4c\xe0\x87\xb3\x5a\x71\x9c\x70\xa2\xb3\xa2\xe3\x8e\x67\xdb\xd2\xbc\x24\xa3\x99\x0d\x30\x32\xc3\xed\xba\x3b\xde\x6a\xa5\xd8\xac\xaa\x55\xdd\xf2\x78\x94\xdf\x43\xe2\xcc\xdd\x09\x0d\xbd\x7c\x3f\x41\x52\xfb\x15\x21\x81\x3e\xc7\x9c\xef\xa0\xe2\x18\x31\xe6\x48\x17\x7a\x4c\x79\x82\x2a\x0f\x01\xc4\xc1\xfe\xbd\xfd\x04\x08\x48\x08\xf5\xa8\x8f\x00\x84\x42\x3a\xca\x71\x28\x47\xd0\x95\x0e\xa2\x8c\xfa\xc7\x6b\x3f\x97\x20\x71\x71\x1b\x5b\x20\x4e\x2e\x1f\x77\x7a\x6c\x95\x84\x08\x89\x04\xa0\xf0\x5a\x86\x8d\x6f\x3d\xed\xb4\xa6\xdb\xdc\x70\xe1\x66\x1a\xbc\xd5\x9c\x67\x13\x6e\x21\x93\x5b\x6b\x9d\x9a\xe5\x35\x37\x9a\x15\x38\x8c\xd7\x37\x99\xdc\x6c\xd0\xf6\xbd\x1c\x49\x6e\xb7\xcb\xba\x5f\xea\x29\xba\x4c\x30\xb7\xd3\x4d\xa4\xfc\x69\x7b\x65\x64\x0c\x3d\x69\xa4\xe0\xb8\xbb\x1a\xc7\xfa\xd9\xde\x22\xc6\x4f\x20\x71\x32\xa5\x40\x33\x82\x4d\x95\x24\x36\xc9\x42\x61\x69\x6f\x2a\x40\x1b\x96\x24\xef\xaa\x91\xec\xc1\x69\x3f\x3b\x0b\x5b\xca\x04\x41\x79\xda\x5b\x8c\x81\x5d\x4a\x79\x8b\x7a\x76\x96\x8b\x8e\xfc\xad\xcc\x9a\x89\x5c\x65\x4a\x85\x59\x2c\xad\x4b\x66\xb9\x9a\x6f\x4f\xaa\xd5\xd6\xb6\x42\xa3\xc5\x7d\xe4\x74\xe6\xf2\x84\x06\x5f\xee\xd8\x25\xb4\x5f\x11\x12\xf0\x73\xcc\xf9\x4e\x01\x57\x0a\x1b\x30\x85\x3d\x97\x70\x28\xb0\x4d\x04\xc0\xbe\x24\xdc\xf5\x00\xb0\x7d\x85\xb9\x27\x1c\x49\x3c\x17\x13\x4f\x11\x24\x6d\xcf\x23\xc0\xb7\xb9\x0b\xa5\xcb\xe0\xb5\x0c\xfb\x72\x5d\x49\x60\x01\xaf\x00\xe6\xa1\x55\x02\x28\x09\x86\x18\x5d\x7d\xdb\x19\xbe\xf5\xb0\x53\x34\x99\x0b\x3a\x4e\x0f\xeb\x6e\xab\xd8\xef\x24\xa3\x35\xdf\xd4\xf2\xb1\x9e\xdf\x5a\xd4\x70\xb2\xaa\xca\xe3\xa9\x57\x2e\x8d\x45\xda\x6d\xb5\x52\x21\x8f\xa6\x07\xf6\x0c\xf5\x82\x71\x98\x1e\xd8\x72\x39\x2d\x14\xf2\x20\x0c\xb5\xc0\xc8\xd2\x74\x59\x15\xfb\x85\x7a\x6c\xd1\x93\xee\x53\x32\xd1\x3a\xbd\x89\x5d\xd0\x46\x66\xaf\xb2\x1a\x16\x42\xc2\x49\xd8\x0b\x33\x9d\xcd\xcc\xef\x37\x87\x4a\xc5\xb3\x4d\xaf\xd3\x70\x36\xc5\xdc\xca\x19\xcd\xd6\xd1\x72\xcd\xb3\xf3\x25\x5f\x6b\xb6\xba\x9b\x65\x7f\x9b\x2f\xe7\xf5\x68\xb5\xe5\x74\xb1\x67\xf4\x84\xdb\x04\x9d\xb9\x0f\xa2\xc5\xb0\x3a\xdf\xff\x40\x6a\xfc\xcc\xdd\x09\x6d\xfb\x72\xc3\xee\x8f\x00\x89\xf7\x27\xd8\xe0\x73\xcc\xf9\xce\x55\xd0\xf5\xb8\x6d\x3b\x40\x21\x64\x43\x25\xa0\x2b\xa4\xe3\x41\x0e\x3d\xe0\x78\x36\xf5\x84\xa7\x5c\x24\x04\x22\x90\x60\x80\xa8\xcf\x7c\xe0\x41\x6a\x43\x8f\xdb\xae\x0b\x2f\xbf\xed\x8c\x7e\xbf\xfc\x9e\x1a\xb1\x0f\x86\xde\x6c\x15\x54\x48\x89\x09\x95\x57\x5f\x76\x86\xe1\xad\xfb\x75\xc4\x85\x6c\xb2\x22\x41\xa8\x3a\x6e\xe0\x80\x66\xa6\xbc\xb4\x9b\x2d\x3c\xcb\x67\x73\xf1\xf2\x2a\xe7\x3b\x2b\x50\x0f\x3d\x35\x5b\xb5\xa2\x7e\xb8\x9a\x15\xdc\xfc\x96\xe7\xa0\xa7\x63\xda\xc9\x8f\x5a\x96\x61\xa3\xad\xf6\xff\xd9\x7b\xb3\x1e\xd5\x91\x65\x5f\xfc\xfd\x7c\x8a\xa5\x7e\x59\x57\xa2\xf7\x26\xe7\x4c\xf7\xd5\x79\xb0\x8d\xc1\x36\x93\x01\x1b\x30\x57\x47\x2d\x8f\xcc\xf3\xcc\xd6\xff\xbb\xff\x05\x35\x30\x54\x51\x83\xa1\xaa\x57\xef\x7d\xd0\xd2\x52\x65\xb9\xf8\x39\x32\x32\x32\x22\x23\x33\x22\x12\x07\xd3\x78\x39\x2e\x39\x45\x18\x47\xdd\x96\xb5\x3c\x5a\x09\xf7\xc4\x97\xd8\xa4\x3b\x1b\x4f\x6b\xa0\x66\xc9\x54\x70\x37\x13\x23\x1c\xb9\x71\x2e\x58\x07\x15\xc1\xd0\xa4\xb6\xe0\x65\x93\x65\xb3\x10\x08\xc3\x4b\xab\x9d\x6d\x37\x9c\xc6\xf3\x28\xed\x61\x9e\xed\xc6\x05\x79\x90\xc9\xa7\xb4\x65\x05\x6f\x72\x5b\x6f\xaa\xd6\x68\xb1\xd0\x6f\x54\x9c\x43\x86\x84\xf2\x4a\xee\x84\xbc\xbe\x3c\x9b\xf8\x77\x98\x12\x9f\xb6\x12\x50\xba\x8f\x38\xff\x8c\x58\x4c\x49\xe4\xd1\x30\x88\x3d\x09\xb1\x98\x46\x84\x85\x21\xa0\x8c\x49\x20\xf6\x01\x86\x61\x80\x25\xc4\x21\x0f\x03\x10\xfb\x5e\x00\x7c\x14\x13\x08\x23\x41\x24\x46\x11\xbc\x1e\x27\x4e\xff\xb8\xbe\xd3\x2a\xd8\x1b\x21\xb1\x4f\x0f\x05\x64\x80\x60\x2e\xd8\x9b\x95\xce\xf0\x47\x0f\x26\x52\x3e\xb4\xa7\xcd\x20\x35\x31\x57\xcd\xbe\x1f\x2a\x0d\xaf\x92\x5a\x17\xc3\x35\x35\x37\x71\x90\xe1\x33\x79\xbe\xaa\x54\x99\x36\x18\x18\x15\xcf\x95\x6a\xc6\x7c\x93\x42\xc3\xdd\xc0\xef\xa7\x62\xa9\xa6\x8d\x57\xd1\x68\x52\x18\xa7\x0b\xe6\xd6\xb1\x3a\x4c\x4e\xb5\x53\xf5\xac\x98\x1c\x13\x27\xdc\x13\x19\x75\x77\x2a\x23\xf1\xb0\xd1\x6b\x95\x17\x53\x8d\x98\xbd\x79\x7e\xba\x8e\x66\xe1\x68\x57\x62\xdb\xf5\xc8\xac\xad\xc2\x79\xa6\x91\xb5\x82\x25\x9e\x98\xd9\x45\x71\xa8\x0f\x27\x73\x14\xc8\x9b\x71\xa5\x9f\x9e\xee\x62\x51\x19\x97\xca\x4a\x57\x31\x72\xb2\xc6\x44\xa4\x4b\x9b\xea\xf6\x70\xf0\xa1\xbc\x92\x38\x21\x2f\x2f\x2b\x13\xfc\x67\x4e\x08\x71\x1f\x61\xfe\x29\xbc\x38\x06\x00\x31\x1a\xfb\x92\x20\x10\x49\x00\x85\xb1\x14\xd2\x00\x83\x08\x4a\xc4\x03\xd0\x0b\xfd\x90\x4b\x88\x48\x20\x8a\xa9\x10\x98\x11\x2e\x42\x5f\x0a\x45\x84\x21\xbd\x5e\x6c\x9f\xfe\x41\xae\x6e\xb3\x0a\x81\xa5\xeb\x75\x0b\x0e\x4f\x0f\x27\xe3\x1c\x03\x89\x40\x88\xdf\x2c\x74\x86\x3e\x7a\x2e\x41\x66\x69\x59\x6d\xc5\x4b\xb7\x52\xeb\xab\x98\xc2\xa0\x58\xce\x39\x63\x65\xe6\x43\x6a\x9a\x99\x55\xc3\x28\xf5\xa3\xd2\x32\xec\xf5\xb2\x8d\x09\xd7\xbb\xa9\x7e\x46\xd1\x0a\x81\xe3\x0e\xca\xe9\x7a\x64\x4e\x56\x05\xb6\xa2\x63\xa3\xd2\xee\xc5\x8a\x2e\x2d\x50\x7d\xee\x3a\x60\x75\xbc\xc7\xeb\x34\x79\xa1\x94\xdf\x6c\xe5\xe2\x78\x5b\x4c\xb7\x47\x54\xea\x28\xee\xae\xb0\xf1\x1d\x24\x1a\x7e\x77\x83\x2b\xfa\x96\xcf\x81\x60\xab\x49\xcd\x25\xe1\x3c\x9e\x77\x20\xd8\x4e\xa2\x99\x3f\x34\xe2\xbc\xe3\xad\xc7\x63\xcb\x2d\x4d\x4b\xe9\x8a\x82\x7a\x79\x32\x5d\xa2\x85\xdc\x4c\x2d\x8c\x43\xcc\x88\xf2\x4a\xde\x84\xbc\x70\x2e\x24\xea\xdf\x61\x4a\x7c\xba\xce\x3e\xe4\xf7\x11\xe7\x9f\x2c\x26\x3e\x0f\x24\xca\x3d\x82\x3c\x8c\xc2\x50\x60\x10\x12\x8c\x20\x0a\xa9\xef\x7b\x71\xe4\x4b\x08\x41\x8a\x45\x44\x00\x04\x1e\x41\x98\x50\x8a\x31\x08\x43\x1f\x48\x3e\xf2\xdf\xf2\x24\xae\x9e\x5f\x0b\x89\x4b\xd7\xcb\x2a\x3f\x3f\xe5\x18\x40\x42\x08\x01\x6f\xd6\x39\x43\x1f\xdd\x82\x45\x52\x21\x36\xeb\xac\x32\x2d\x2e\x50\x26\xe3\x14\x3b\x85\xfa\x92\xa5\x67\xfd\x6e\xd6\xee\xf5\xe5\xca\x44\x2d\x65\x9d\x5d\x26\x9c\x9b\xf3\xd9\x36\x28\x63\x33\xad\x4f\x50\xa0\xad\x66\x04\xe3\x9c\x15\x4d\x71\x73\x61\xea\x56\x5d\xa4\x76\xcd\x70\x53\xa8\x56\x9d\x0d\x64\x95\xce\x43\x02\xf4\x7e\x4a\x34\x4f\x3c\x89\xa9\xde\x28\x67\xab\x61\x23\xb3\x8e\xf2\xa4\x65\x68\x8a\x6b\xbb\xe5\xfe\x6e\xdd\x45\x53\xd1\x35\xc6\x8a\xb4\xc9\xee\xe4\xf2\xd4\xaa\xa5\xe3\xb8\x67\x15\x3c\xad\x9a\xcb\x14\x66\xae\xca\x17\x2d\xb7\x5e\xe5\x23\xdb\xb6\x1d\x6e\x8f\x00\x29\x05\xd8\x2e\xcf\x21\x6e\xcf\x55\x78\x98\x12\xaf\xa4\x4d\xc8\xe3\xf1\x6b\x62\xf5\x37\x9f\x12\x9f\xf6\x24\xf6\x02\x72\x0f\x71\xfe\x29\x3c\x24\x21\x8c\x24\x09\x85\x4c\xf2\x7d\x06\x63\x42\x79\xc0\x99\xf0\x38\xa1\x3e\x8b\x7d\x14\x0a\x18\x7a\xa1\x2f\x42\xc6\x05\x88\x89\xc4\x80\x2f\x45\x11\x16\x28\x90\xbc\x90\xbe\x65\x25\xae\x0a\xbd\x04\x01\x25\x57\xf7\x9b\x9e\x9f\x32\xc1\xa1\x44\x38\xe3\x6f\x96\x39\x43\x1f\xdd\x6f\x22\xe3\x89\xb1\x1d\xd6\xe0\x64\x89\x74\x50\x17\xe1\x78\x02\x1a\x28\xb5\x45\x0a\x5a\x2c\x4b\x2d\x92\x01\x83\xf6\x32\x22\xa4\x60\xce\xea\x2e\x6c\xcb\x4e\x43\xc9\xad\x2b\x15\xab\x38\x75\x99\x65\x89\x6c\x76\x3b\x99\xf4\xf5\xf1\x3c\x5f\x25\x76\x06\xae\xe7\x6e\x98\x4e\x1b\xa9\x63\xd9\xe4\xd3\x5c\x68\x37\x3f\x5e\x72\xa5\x6f\x2d\x2a\x8b\x61\x86\x94\x29\x49\xdb\xf6\xd8\x69\x2b\x72\xdd\x51\x87\xea\x20\x5d\x4e\x49\x76\x7b\x8a\x3a\x25\x7d\x37\xc8\xbb\x52\xa5\x4d\x55\xd9\xd8\x84\xd5\xa6\x3f\x4f\x37\x83\xfa\x48\xf3\xb1\xe9\x9a\x71\x3a\xd3\x97\xf2\xa0\x54\x1c\x37\x68\x59\xd8\x87\x29\xf1\x4a\xd6\x84\x3c\xb8\x8c\xe8\x38\x7c\xfe\xe6\x53\xe2\xf3\x56\x82\xde\x47\x9c\x7f\x7a\x8c\x78\x31\x0c\x80\x88\x7d\x1a\x22\xe1\xf9\x41\x08\xe3\x40\x0a\xbd\x48\x04\x81\x0f\xfd\x38\x90\x7c\x3f\x0a\xa0\xcf\x7d\xc2\x79\x04\x49\x1c\x78\x28\xf0\xbd\x30\xf0\x88\x04\xf8\x5b\x59\x13\x6f\x08\x3d\x02\xec\x8d\x09\xf3\xf4\x94\x11\x82\x08\x05\x12\x79\xb3\xca\x19\xfa\xa8\x73\xcd\x5a\x79\x11\xa8\xd6\x22\xcc\xe7\x57\x25\x5d\x8c\x3c\x56\xdc\x6e\x56\x62\xc8\xb9\xb2\xe0\x55\x4c\x9c\x74\xbe\x50\x98\x05\x13\x53\x11\x21\x6a\x87\x9e\xe4\x35\x7b\xd5\x0d\x18\x7a\xa9\x65\x8e\x1a\xa3\x8c\xa5\x69\x0d\x1f\xf3\xb8\xd7\xda\x96\x2a\x5b\x6b\x6d\x75\x2b\xda\xea\xc4\x4a\x9c\x26\x61\xcf\x7b\xce\xa0\x61\xee\x9a\xbb\x66\x26\xa7\x2d\x79\xab\x29\x4a\x45\x92\xc3\x9d\x66\xd1\x6c\xdb\xd3\x21\x1c\x93\xe9\x4a\x2b\xc6\x3e\xcb\xe9\x6a\xb5\x5f\xef\x8e\x94\x60\x12\xb5\xd7\xd4\xef\xac\xdc\xe2\x64\x6d\x22\x3f\xdc\x6b\x34\x3c\x80\x7e\x4d\xb1\xea\x4e\xa6\xb7\x9e\x1d\x04\xff\x95\xa4\x09\xb9\xfd\xea\x6d\x5b\x7f\xf3\x29\xf1\x79\x5f\x82\xdc\x47\x9c\x7f\x82\x00\x12\x8f\x30\x1a\x33\x00\x00\xc4\x00\x7b\x94\xb1\x38\x0a\x20\x8d\x51\xe0\x07\xa1\x87\xb8\xe7\x07\x98\x44\x52\x20\x7c\x0a\x7d\x21\x24\x4a\x3c\x14\x4b\x3e\x06\x31\xf3\xaf\xdf\x38\x41\xff\x20\x57\x0f\xaf\x25\x8c\xa1\x74\x75\x37\xea\xf9\x29\x03\x10\x49\x94\x20\xf8\x66\x91\x33\xf4\x51\xf7\x7a\xbd\x76\x26\xb9\x26\x92\x65\x6d\x5d\x1e\xb4\x56\x5c\x69\x6e\xb7\x02\x75\xa3\xd9\x1a\xb0\xa0\x0b\x73\xa4\x5b\xaf\x75\x53\x7e\xd1\xf2\x36\x2b\x1a\x2c\xdc\x30\x28\xd6\xb4\xa1\xc0\xf3\xda\x6a\xdc\x9f\x60\xa4\xc2\x5a\x5a\x36\xda\xbe\x1f\x2c\x5a\x0d\xaf\xb1\x72\x36\x25\x24\x1f\x73\x26\x9a\x27\x43\x3a\x10\x51\xd1\x5f\x15\xcc\x45\x59\x19\xdb\xea\x6a\x3c\x1b\x68\xf9\x4d\x99\xb5\x27\xa3\xb9\x1a\xcd\x7b\xa3\x14\x54\x61\x5a\xcf\x81\x15\x9c\x85\x88\x8f\xcb\x3c\x55\x6f\xd4\xb4\x9c\x98\x89\x38\x28\x67\xdd\xbc\xe8\xe3\x56\x38\x19\x38\xfe\xce\x08\x63\x63\xd3\x2f\x79\x8a\x97\x3f\xcc\x82\x57\x72\x26\xe4\xf8\xf2\xec\xfa\xf0\xf9\x9b\x4f\x89\xcf\x2f\x9c\xf0\x7d\xc4\xf9\x27\xc0\x52\x28\x61\x80\x03\x04\x02\xc9\xa3\x02\x08\x14\x43\x1a\x13\xc1\x69\x24\xc8\xa1\xec\x6c\x44\xc2\x00\x81\xc8\x43\x98\x0b\xc6\x02\x2a\x85\x54\xe2\x41\x80\x89\xe4\xc1\xf0\x8d\x29\x71\x3d\x62\x43\x22\x42\xba\xea\x5d\x3f\x3d\xa4\x54\x60\x42\x39\x11\x6f\xd6\x38\x83\x1f\x4d\x98\x58\x97\xc3\xfe\xda\x52\x33\xe6\xc4\x55\x55\x51\x97\x8c\x30\xea\x14\xf5\xf5\xae\x8f\xd5\xcc\xd4\xc0\x9d\xe1\xa6\x05\x5b\x71\xb1\x64\x8e\xc3\x6c\xbc\x0a\x77\x8b\xcd\xcc\xd5\x2d\x69\xb3\x0b\xa7\x7e\x5a\x9a\x04\xf9\x71\xc7\x68\x76\xed\xd1\xa2\xb1\x4b\xd5\x36\x16\x1a\x6f\xa9\x82\x8f\x95\xf5\x1b\x27\x9e\x44\xb6\xdf\x70\x4a\xdb\x6c\x6a\xcd\x78\x95\x8e\x52\x7a\x3b\x53\x8a\xfc\x01\x9d\x8f\xea\xc8\x1d\x28\xf3\x1d\xde\x14\xec\xa9\x52\xac\xcc\x2b\xda\x22\x95\x6b\x14\x25\x67\xa1\x85\xb3\xbe\x3b\x1c\x1a\xb4\xae\xbb\xe3\xa5\x8d\x77\xd6\xc0\x9d\x14\xd4\xf2\x76\x30\xed\x4d\x51\xd0\xad\x1e\x82\x39\xe4\x57\x12\x26\xe4\xe0\xf2\x98\xee\xf0\xf9\x8f\x9b\x10\xe8\x3e\xc2\xfc\x93\x46\x34\x12\x12\xf6\x41\x2c\x01\x2e\x3c\xce\x19\xc0\x31\x03\x4c\x48\x04\xd0\x10\x91\x10\x11\x44\x78\xb8\xf7\xd6\x7d\x00\x62\x01\x69\x88\x20\xf2\xa3\xd8\x17\x50\x62\xf4\xad\xa2\x04\xf8\xea\x1e\xab\xc4\x00\xe4\xd7\xa7\xcb\xd3\x53\x0a\x29\x96\x18\xe0\xf4\xcd\x12\x67\xf0\xa3\xce\x35\xa4\x51\xd7\x9e\x5b\x7d\xbd\x3b\x0a\xdb\x16\x52\xc6\x03\xb9\x59\xb3\x6b\x95\x7e\x5c\x21\xad\xb9\x9c\x52\x9a\x35\x6d\xc6\x79\xbb\xd5\x6a\x64\x6b\xfa\x36\xe8\xca\x56\x64\x0c\x81\xec\x45\x9d\x69\xaa\x39\xab\xfa\xb1\x12\x23\xb7\xb1\x40\xe3\xe1\x2e\xae\x8c\x8a\xb5\x51\xd1\x9b\x1c\x3d\x89\xc6\xc9\x7a\x3e\x20\x16\x1e\xa7\x14\xb3\x6b\xae\x9a\x4d\x23\xee\xa5\xa3\x7a\xc5\xca\xc2\x6a\xd5\x98\x8d\x34\x34\x8a\x9b\xc0\x23\x26\x6f\x64\xb7\xb5\x59\xc6\xde\xd5\xa7\x5e\x21\x15\xae\x73\xb3\x05\xec\xa9\xb5\x69\x8b\x87\x7d\x2b\x72\x32\x92\xf0\x6a\xf9\x42\xab\x04\xc3\x8a\xee\x8e\x2b\x9d\xc3\x2c\x78\x25\x5f\x42\x6e\xbd\x2a\x56\x7f\xf3\x29\xf1\xf9\x65\x13\xbc\x8f\x38\xff\x64\xc8\x0b\x89\x8f\x3d\xcf\x0f\x90\x27\xe1\xe8\xb0\xe7\x29\x24\x26\x22\x06\x21\x09\x61\x04\xa9\x17\xc3\x30\xf6\x39\xc5\x31\xf5\x39\x20\x22\x00\xd0\x8f\x68\xec\xe3\x48\xf2\xdf\x0a\xe6\xc0\x57\x4f\xae\x25\x0e\xd9\x07\x9e\x12\x8e\x08\x61\x04\xa0\x37\x4b\x9c\xc1\x8f\xc6\x37\xa1\xfc\xa2\xb6\x9b\xce\xd6\xd3\x7e\x4a\x75\x34\x77\x30\xa6\x9d\x6c\x49\xef\x34\x56\x7a\xbc\x80\x16\x5c\xac\x6b\x45\xd9\xa7\xf1\x3c\x35\xa4\x9c\x17\xb3\xd4\x87\x46\xd4\xc5\x3b\x3d\x2b\x69\xf2\x70\x5e\xb0\x05\x19\x70\xd7\x97\x9d\x9a\x9e\xe6\xd9\xf4\x7a\x3b\xac\x4e\x25\x71\xbc\x32\xbe\x71\x22\xa5\x13\x63\x33\xf1\x6c\x4b\x2e\x99\x35\xdc\x8c\x17\xb9\x66\xb6\xe6\xce\x34\x13\x14\x3b\x71\x89\xe5\x4a\xb0\x1c\xd1\x94\xab\x59\x0c\x48\xa9\x05\x1c\x12\x35\xe3\xf9\x7e\xb6\xae\xae\x37\x9e\x0d\xeb\xc6\x4a\x25\x0d\x35\xcd\x46\x6c\x38\x9b\x95\x6b\xab\x71\xba\xec\xd3\x61\xff\x50\x1b\x56\x7e\x2d\x5d\xa2\x79\x79\x4c\x77\xf8\xfc\xc7\x4d\x09\x70\x1f\x71\xfe\xc9\xa4\x18\xf1\x88\x23\x5f\xe2\x31\x0f\x7c\xee\xc7\xe1\xfe\x87\x10\x00\x88\x7c\xee\x7b\x40\x80\x10\x87\x51\x00\x05\x64\x42\x08\x22\x18\x62\x3e\x8c\xa0\xef\x85\x88\x46\x1e\x7d\x20\xfe\xf5\x65\xd3\x75\x5f\x41\x80\xc7\xac\xbe\x37\x9f\x12\x24\x11\x89\x71\x24\xbd\x59\xe1\x0c\x7e\x74\xbf\x09\x8d\xb6\xf1\x28\x4f\x63\xbc\xc5\x2b\x29\xc6\xbb\x8a\x5c\x5b\xf0\xb1\x91\xb1\xf1\x3c\xa7\x78\x46\xc7\x70\x87\xf3\x28\xc7\xc0\x80\x0d\x26\x92\x43\x59\xb5\x36\x0e\xaa\xa4\x35\x69\x36\x5b\xf3\x74\x7b\x10\x8c\x72\x75\x5d\xab\xd5\xb3\x59\x87\x15\xba\x79\x29\x5e\x47\x85\x82\x7b\xac\xfa\xd7\x38\x19\x52\x29\xd5\xeb\xcd\x1b\x79\xb6\x62\x6d\x50\x76\x8b\xd9\x8d\x3d\x86\x29\x77\xdc\xee\xa2\x6d\xa6\xd6\x6b\x76\x4c\xc1\x4a\x50\xde\x98\xe5\x95\x16\xc0\xc1\xa6\x84\x06\x13\x43\xd4\xa2\x76\xce\x65\x8b\x95\xec\xcd\x27\x4b\x12\xea\x9b\x61\xa1\x1e\xce\xb4\x7e\xaf\x36\x30\xdc\x55\xfc\x50\x55\xf0\xb5\x6c\x89\xfa\xe5\x41\xdd\xe1\xf3\x9f\x36\x25\xa4\xfb\x48\xf3\x4f\xe6\xc5\x21\xc4\xd8\x8b\x39\x8e\x63\x3f\xe4\x51\x48\x59\x80\x18\x0d\x59\x88\x7d\x1e\x61\x4e\x7c\x10\x42\x0e\x28\x0c\x42\x18\xc4\x22\x92\xa2\xd0\xe7\xcc\x8f\xe2\x20\xf4\x09\xf7\xdf\x32\x12\xd7\x7d\x05\x21\x89\xb7\x66\xc4\xe3\x53\x2c\x18\x25\x1c\x50\xf6\x66\x7d\x33\xf8\xd1\xba\x35\x68\x26\x69\xbb\x19\xb6\xd2\xab\x26\xaf\xfb\x6a\x2b\xf4\xed\x45\xaa\x04\xe6\xa5\xec\xda\x09\x40\x90\x2a\x8f\x16\x0b\xb4\x5a\xed\xfc\x2a\x37\xa0\x57\x76\x52\xfa\x62\xb7\x82\xee\x76\x5c\x6e\xa4\x4a\x4e\x73\x3c\xef\x69\x6b\x56\x6d\x65\x3b\xeb\x45\x19\x5a\xc5\x91\x5c\x95\x17\xcb\xe3\x8c\xa8\x9f\xe6\x5e\x37\x2b\x85\xc6\xb2\x8d\x8c\x16\xca\x91\xea\x68\xed\xcc\x54\x7b\x65\xac\xcb\xcc\x2e\x4e\x96\x08\xa6\x6a\xc8\x69\x76\xa6\x85\x7c\xc3\xd6\x73\xf2\xba\x49\xb7\x20\x5b\x77\xb4\x5e\x26\xa4\x6e\xa6\xeb\xf3\x75\x27\xed\x97\x6a\x9b\x16\x03\xcc\x2d\x82\x0c\xb5\xa4\x55\xb7\x5d\x3b\xcc\x88\xd7\x72\x25\x6a\x97\x05\xc4\x0f\x9f\xff\xb4\x19\x21\xee\x23\xcd\x3f\x41\xe0\x7b\x34\x64\x44\x30\x1f\x08\x10\x20\x20\x11\x12\x8a\x08\x01\x2e\x42\x0f\x50\x41\x49\xe4\x93\x90\x09\x1f\x04\x84\x78\xdc\xe3\x20\x06\x2c\x8c\x7d\x1f\x89\x00\x88\xc3\x35\x5c\xe4\xf0\xef\x15\xe1\xbe\x7a\x72\x2d\x49\x12\xbd\x7e\xf7\xca\xf3\x53\x4c\x30\x95\x38\x16\xf8\xcd\xea\x66\xf0\xa3\x1b\xb0\xeb\x2d\x6b\x36\x6a\xb9\xb9\x91\x51\x55\xc7\x76\x49\x3b\x2a\x8d\xb3\x1d\x87\x01\x38\x9e\x17\xab\xf9\x68\x94\x59\xfb\xf1\x72\xdb\x93\xdb\x66\x2b\xdd\xae\xeb\x1d\xa2\xe5\xc6\xd5\x66\x6f\xa3\x0c\xcc\x66\x3b\xf4\xd9\x98\xd2\x88\x16\x2c\x45\xa4\x67\xc6\xa2\x99\xea\x2a\xc5\x61\xfb\x78\xcd\x44\xfd\xc4\x93\xa0\x71\x07\x64\xaa\xad\x54\x39\x8e\x64\xd2\xd5\x71\xce\x2e\xfa\x39\x16\x4c\xcd\x9c\xb6\x01\x53\x95\x72\x04\x99\xee\xdb\xeb\x8a\xe5\x80\xce\xae\x5c\x01\x0b\x6d\x3d\x0e\x41\x23\x9f\xcb\xd0\x7e\x91\x15\xd6\x75\xbd\x90\xf7\x8d\xf2\x4e\x19\xfa\x69\xa9\x66\xac\xb5\x31\x51\x0e\x72\xff\x5a\xa6\x44\xf5\xb2\x80\xf8\xe1\xf3\x37\x9f\x11\xe4\xb3\x33\x82\xdf\x47\x9a\x7f\x46\x94\xf9\x12\x96\x50\x0c\x24\x22\xa1\x98\x00\x41\xb8\x90\x3c\x16\xf3\x28\xf2\x30\xe2\x24\x64\x92\x04\x03\x09\x8a\x50\xa2\x40\x62\x00\x48\x91\x24\x68\xec\x47\x2c\x00\x21\x78\xd3\x91\xb8\x62\x05\xc8\x3f\x01\x84\x44\x5c\xf1\xbc\x4f\x9e\x62\x00\x18\xe1\x1c\x82\x37\x6b\x9b\x7d\x34\x9d\x2e\x55\x9f\xf5\x69\x61\x3d\x30\x0b\x40\xd5\x22\x73\xb2\x8a\x97\xe3\x6d\x58\xf2\x5a\xba\x99\x2b\x0d\x2a\x83\xb6\x1a\x0d\xb3\xa9\x94\x2f\x03\x73\xe6\x20\x65\x44\x3c\xbb\xe7\x16\x0b\x93\x4c\x1c\xc7\x46\x3a\x62\x7a\x06\xe7\x6a\x55\x55\x33\xc7\x44\x9e\xb9\x8b\xae\x44\xca\x8d\xe9\x31\x94\xa3\x7e\x9a\x76\x4d\xf5\x72\x65\x82\x6d\xd5\xd8\x96\x9d\x9e\xa8\x0f\x4b\xb9\x59\x67\x8e\xd4\x94\xd1\xec\x49\x04\x4d\x46\x78\x6a\xd5\x0d\xb9\xd9\xdc\x30\x17\x73\x31\xb3\xba\xf3\x4a\xda\x6a\x54\x0b\xde\x6e\x53\x54\x07\x85\xb5\x28\x20\xa7\x6f\x84\xd2\x98\x91\xc8\x98\x0c\xbc\x7a\x5f\x3c\x5c\xb7\xfd\x5a\x9e\x44\xfe\x32\xc5\xf4\xf0\xf9\x9b\x4f\x88\x4f\x9b\x08\x76\x1f\x61\xfe\x19\xd3\x58\x0a\x60\x1c\x70\x00\x28\x87\xa1\x47\xc3\x18\x84\x2c\x02\x51\x10\x85\x9e\xcf\x45\x1c\x09\x18\xb1\x98\x31\x40\x49\x44\x30\x45\xb1\xc4\x3d\x1c\x83\x20\xc6\x21\x8d\xdf\xcc\x30\xc5\x57\x4e\xe1\xc8\x3f\x01\x82\xd7\xa7\xc3\xc3\x33\x44\x39\x93\x04\xc0\xfc\xcd\xa2\x66\x1f\xae\x1b\xde\xa4\xeb\x78\xb3\x56\x9a\xba\xd7\x8c\x33\x0d\x52\xde\x2d\xa6\xb8\x97\x6a\x47\x3e\x72\xb3\x76\xbf\x54\x4b\x35\xc7\xe9\x8c\x65\xd5\x05\x2e\x6d\x25\xde\x4f\x83\x2c\x92\x1b\x3a\xb2\x2c\xd6\x53\x36\xe3\xd0\x68\x16\xdb\xbd\x61\xb5\x60\xae\x3b\x99\x45\x59\x2c\x2a\xad\x76\x2c\x8e\x5b\xaf\xf5\x93\xc1\x2c\x89\x0a\x92\x17\xaa\x3a\x8f\x06\x44\x37\xe6\x79\xb2\x0c\xa7\xcd\x6d\xa1\x32\x0d\x66\x5e\xae\x17\xc8\x7a\xbd\xe6\x94\x04\xa4\xed\x59\x76\xdd\x0c\x46\x4b\xdd\x81\x4b\x67\x92\x9b\xda\xce\xc2\x37\xd2\xdb\x96\x05\xb7\xee\xaa\xa2\x8d\xba\xf2\xb2\x18\xa3\x4e\x77\xdd\xf5\x16\x87\x7a\xb0\xf2\x6b\x19\x12\xe6\x65\x3d\xd8\xc3\xe7\x3f\x6d\x32\xd0\xfb\x08\xf2\xcf\x00\x31\x00\x25\x08\x51\xc4\x43\xe8\x61\xc0\x7d\xee\x33\x4f\x10\xec\x85\x94\xc5\x21\xc7\x3e\x85\xb1\x1f\x06\x28\x62\x98\xc6\x11\xf7\x41\x1c\x04\xc2\xf7\x22\xc2\x22\x89\x40\xfe\x46\x0c\x07\xbe\x72\x60\x4d\xfe\x09\x30\x7d\xc3\x38\xec\x1f\x1e\x4e\xfd\x20\xe1\x44\x60\x46\xde\x2c\x68\xf6\xd1\x4d\x26\x61\xb6\x73\x55\x6d\x19\x57\xc7\xeb\x08\x2f\xa6\x9d\xcc\xac\xee\x4b\x01\x77\xe2\x55\x50\x18\x96\x62\xca\x33\x62\x5b\x98\xf5\xfd\x49\xa5\xb9\xdd\x49\x5d\x17\xcd\xf4\xce\x7a\xe9\xac\xca\xd9\x65\x41\x63\x43\x65\x65\x97\x09\xeb\x18\xa9\xe6\x26\x8f\x4c\x1a\xc0\xc5\xb2\x30\x3f\xb9\x0c\xde\x39\x59\xc5\xf7\xd9\xaa\x9c\xce\x57\x37\xeb\x16\xd8\x8e\xcc\x62\x71\x96\x77\x26\xe5\x5a\x4c\x1b\x1d\x3f\xec\x97\xfa\xa0\x60\x94\xd3\xbb\xd6\x46\x49\x4d\xa3\x26\xf7\xdc\x1c\xd8\xe1\xe6\x30\xbb\xde\x0c\x67\x98\x58\xb3\x4d\xa7\xbe\x15\xb5\xea\x6e\xe0\x14\x73\xbd\x8e\x5d\x68\x44\xb8\x9b\x1a\x3c\x48\xf5\x6b\xe9\x11\xfa\xbf\xe3\x71\xf5\xa7\x23\x38\xc8\x7d\x64\xf9\x27\x26\x30\x8e\xa5\x80\x48\xc2\x97\x00\x67\xb1\x88\x11\xf4\x22\x8f\x0b\x0f\x63\x3f\x00\x01\xc3\x92\xe7\xd3\x20\x96\x04\xf3\x42\x3f\x40\xa1\x08\x01\x09\x25\xe4\x53\x4f\x0a\x59\xf8\x56\x99\x1a\x7c\xe5\xb4\x9a\xfc\x13\x50\xc4\xaf\x9d\xcd\x9d\x3c\x3d\xb9\xa7\xee\xed\xd3\xea\x0f\x4d\x88\x5d\x25\x4e\x05\x35\x77\x59\x09\x57\xbd\x6d\x6e\x39\x21\xe3\xdd\x4a\xde\xf4\x86\xb3\xa6\x35\xcc\xcd\xfc\xf5\xa2\x57\xb1\x5b\x79\x38\x0d\xfd\xb8\x96\x6a\x46\x31\xc9\x36\x9b\x86\x8d\xfa\x01\x6c\x06\xf1\x6e\x54\x86\xb2\x6b\x49\x66\x69\x99\x51\x0d\x68\x66\x9b\xfa\x64\xe4\x48\xc6\xd1\x40\x38\x27\xee\x83\x21\xb2\x91\xae\xed\x4c\x90\x26\xd9\xb2\x48\x97\x72\x69\x82\xd7\xb6\x36\xda\x42\xb5\x91\x5e\x05\x3a\xea\x05\xb3\x4a\x7f\xe7\xfb\x41\x2f\x95\x8d\x59\x26\x6e\x8f\x48\xb6\x62\xe7\xcc\xe6\x00\xcf\x53\x1b\x65\xba\x55\x46\xa9\xe5\x4a\xb3\x34\x77\x3d\x9d\x59\xf6\xcc\xd2\xd2\x0f\x06\xe8\xb5\xe4\x88\xcc\xbf\xe3\xd9\xdc\xe7\x8b\x5e\xde\x47\x98\x7f\xc6\xa1\x84\x98\x08\x21\x0b\x39\x05\xd0\x67\x91\xcf\x25\xca\x7c\xc6\x29\xf3\x91\x88\x23\x82\x83\x88\x7a\x0c\x40\xe0\x73\x16\x71\xce\x42\x09\xc6\x0c\x44\x34\x8a\x42\xee\xbf\x71\xfd\x10\xfd\x03\x5d\x39\x7c\x23\xff\x04\x8c\x42\x7e\xc5\xdd\x7e\x7c\x4a\xcf\x6b\x5e\xbe\xe5\x50\x7f\x74\xc5\x84\x6a\x5e\x29\xbb\x08\x2b\x39\xc4\xf0\xa0\xb1\x18\xd5\x67\x79\x8b\x66\x76\x83\x49\x5b\x2b\x84\xcb\x10\xa1\xaa\xd4\xa6\x11\x6f\xce\xa7\x99\x56\xae\xa2\x68\xd0\x9d\x8f\x17\xc6\xac\xda\xec\xaf\xf9\x86\xa5\x83\xbc\x15\xa2\x5d\x59\x55\x96\x3b\xae\xa3\xea\xa0\x3a\xae\xe5\xdc\x63\x40\x93\x73\x22\xa3\xd4\x1a\xad\xb4\x55\xb1\xac\x89\xfe\x36\x33\xc7\x39\x7f\x09\x3b\xe3\xa5\x08\x86\xe3\xf5\x1a\x1a\x7c\x33\x75\x73\x65\x7f\x01\x5a\x63\x30\x6e\xc9\xf9\x0c\x75\x60\x75\x53\xda\x8a\xf1\xaa\x97\x22\xe5\x5e\x91\xcc\x0c\x05\x58\x69\x15\x07\x95\x54\x47\x2d\xc8\xb3\x22\x91\xda\x87\xaa\x4d\xf2\x6b\xc9\x11\x2f\xef\x32\x95\xff\x03\x27\x04\xba\x8f\x30\xff\x64\x38\x94\x44\x4c\x31\x8b\xa2\x3d\x94\x8f\xb8\x4f\x7d\x21\xc5\x08\x7b\x31\xc5\x10\xfa\x9c\x32\xc9\x43\x24\xf6\x62\x48\x00\xf6\x42\xe0\x53\xe4\x33\x8c\x7d\xc0\xfd\x48\xda\xcb\x3c\x38\xfc\x7b\x65\x42\x5c\x5f\x14\x71\x86\xae\xdd\xc7\x75\xf2\xf4\x98\x3f\xf7\xc6\x7c\xf8\xe0\x7e\xab\xd5\xea\xc1\xd2\x92\x8e\x81\x6f\xf2\x06\x19\x6d\xcb\x2b\x67\x93\xc3\xf5\xc9\xb8\x9f\x5a\x65\xe5\xf2\x42\x85\x79\x54\xe4\x0a\x67\xad\x65\xab\xaa\xcf\x24\x27\x6c\xe6\x7d\x3b\xdf\x0d\x06\x71\xb9\xb7\xe5\xc8\x6d\x65\x4d\xa7\x6f\x5a\xf5\x20\x6f\xd3\xce\x62\x35\x9e\x0d\xe1\xf1\x50\xee\x61\xe5\x64\x3c\xff\x27\x3f\x1c\xa2\x1d\xdb\x6b\xd9\xaa\x3c\xca\x2d\xde\x49\x9d\xa1\x5c\x9b\x14\xa4\x85\x5c\xdf\xf4\x17\x9b\x0c\x6e\xd6\xca\x13\xdc\x5d\x6c\x6a\x2b\x6d\x58\x64\xb2\xd3\x5f\x2b\x35\xa2\x55\x47\xab\x54\x61\xb1\x48\x6f\x83\x5d\x7a\x23\xd2\xa9\x41\x56\x11\x60\x36\xaa\x6f\x78\x0f\x15\x67\x43\x24\x69\x93\xe5\xdc\xa9\xa6\xda\x2b\xe9\xe1\xb4\xfa\xb5\xbc\x89\xd7\x3f\x7f\xf3\xd9\x02\x3e\x7d\x68\x77\x1f\x49\xdf\xbf\xf1\x59\xde\xa1\xc4\xc1\x3f\x00\xfc\x07\x80\x3f\x00\xf8\xe3\xf0\xef\xaa\x44\x0b\xc4\xd8\xf5\xd9\xf0\xf4\xf4\x78\xea\xf6\x69\x79\x7f\x20\xe9\xaf\x1e\x9a\xeb\x1f\xa5\x99\xef\x92\x6d\x7a\x5b\xcb\x2b\x3c\x33\xca\x48\x3a\x02\x9b\x9e\x92\x9a\x83\xf6\x62\xbe\x36\xd6\x3b\xd8\x0c\x6b\x0d\xd7\x53\x4c\x2f\x7b\x58\x69\xbd\x96\xef\xf0\xfa\xe7\x49\x94\xaf\x19\x86\x5f\xf9\x73\x29\xca\xff\xf5\x5f\xff\xf8\xc7\x7f\xfd\xe3\x1f\x3f\x32\xde\xc2\xfb\x11\x8f\x67\x3f\x4a\xde\x30\xfa\xe3\x59\xaa\xc7\x93\x68\xe6\x2d\xba\xe3\xd1\x9f\x13\x6f\xb6\xe8\x06\xdd\x89\x37\x5a\xcc\xff\xef\x0f\x7b\x3b\x89\xfe\xf8\x61\xcb\x4a\x41\xfb\x91\x91\x6d\xf9\xff\xfe\xa8\x05\x9d\x68\xe8\xfd\xf1\x63\xb2\xf4\x07\xdd\xe0\xff\xfe\x28\xaf\x47\xd1\xec\x8f\x1f\x7b\xf0\xff\x7a\x75\xc2\xbc\x0e\x7d\x3a\x7f\x10\x83\x92\x84\x01\x90\x20\xc5\xbf\xff\x80\x57\x26\xde\x3b\x38\xe8\x79\x5f\x88\x40\x41\x79\x62\x1c\xbc\xc7\xc1\x04\x60\xc0\x09\x65\x30\x31\x0e\xf9\xfd\x07\x22\x12\x04\x02\x02\x8e\x18\x4d\x8c\x43\xf7\x38\x44\x40\x0c\xb1\x24\x31\x29\x31\x0e\xbb\xc4\x41\xc9\x70\xf8\x21\x19\x84\x42\x01\x39\x62\x1c\xff\xfe\x03\x27\xc3\x11\xbf\xff\x40\x98\x21\x84\x11\xa0\x98\xf3\xc4\xf4\x48\x97\x38\x09\xe9\x81\x7b\x8f\x10\x43\x09\x09\x84\x05\x10\x30\x31\x41\xfb\x95\xc1\x39\x10\x49\x08\x84\xce\x80\x50\x72\x20\x7c\x09\x94\xb4\x6b\x7b\xa1\x46\x9c\x61\x8c\x38\xe0\x82\x26\x07\xa2\x97\x40\x49\xbb\xb6\x17\x6b\x84\x31\x16\x18\x60\x22\xa4\xdf\x7f\xd0\x84\x40\x7b\x09\x84\x12\x20\x18\x63\x06\x25\x9c\x1c\x48\x1c\x37\xe4\x84\x90\x78\x72\x20\xe9\x90\x63\x42\xf6\xca\x08\x32\x00\x13\x03\x21\x70\x04\xa2\xec\x06\x8a\x10\x3c\x02\x49\xfc\x06\x1e\xa1\xbd\x08\x02\x06\xa9\x20\x98\x60\x90\x5c\x8e\x10\xbe\x04\x4a\x4a\xd1\x5e\xb2\x01\x14\x0c\x13\xc6\x01\x48\xae\x1e\xd1\x5e\xd3\x4b\x9c\x32\x41\x24\x89\xef\x67\x1e\x4b\x08\xc4\x9e\x80\x28\xc0\xe2\x16\x8a\xf6\xb6\x50\xc2\x88\x63\x8a\x11\xd9\xcb\x79\x52\x8a\xc4\x25\x50\x52\x8a\xf6\x56\x6c\x3f\x37\x04\x65\x14\xa2\xe4\xaa\x16\x83\x4b\x20\x9e\x10\x68\x6f\xe7\x05\x61\x02\x53\x89\x8b\xfd\x18\x26\x05\x42\x97\x40\x49\xbb\x86\x0f\xd9\x03\x58\x08\x86\x01\xdd\x73\x4c\x24\x04\x22\x97\x40\x52\x42\xa0\xbd\x64\x73\x06\x24\xcc\x18\x46\x7b\xfa\x92\x52\xc4\x2e\x81\x92\x52\xc4\x8f\x40\x1c\xdf\xc2\x23\x71\x09\x94\x94\x22\xe9\xb8\xf9\x4c\xa5\x3d\x7d\x09\x81\x0e\x99\x87\x07\x20\x0e\x00\xb8\x81\x47\x64\x2f\xd9\x8c\x53\x80\x39\x12\x6c\xdf\x4a\xc8\x23\x82\x9e\x6f\xf6\x67\x10\x93\xe4\x92\x4d\xf0\x25\x50\xd2\xae\x91\x23\x10\x25\x24\xb9\x1a\xd9\xd3\x70\x0e\x94\x94\x47\xec\xf9\xa6\x77\x89\x00\xb2\x17\x06\x90\x10\x89\x1f\x2f\xc8\x66\xfc\xe0\x16\x25\x45\x12\xc7\x6b\x85\x25\x72\x70\x8c\x92\x22\x49\xcf\x97\xb1\x4a\x08\x1e\x5c\xa3\x84\x48\x14\x1c\xaf\xb0\x24\x82\x25\x97\x25\x0a\x2f\x81\x12\x93\x84\x8e\x37\x08\x72\x7a\xf0\xb3\x92\x3a\x6c\xf8\x19\x89\x41\x76\xa0\x29\x29\x12\x79\xbe\xc1\x4d\x02\x68\xef\x6b\x25\x46\xa2\xcf\x67\x00\x08\x49\x7b\x2f\x29\x31\x12\x3b\xde\x16\x44\xd9\xde\xbb\x49\x8c\xc4\x8f\x77\xac\x08\x2c\x6e\xe1\x93\x78\x46\xda\x8b\xc1\x2d\x34\x49\x47\x24\x46\x6f\xe1\x13\x03\x4f\x48\x10\x00\x76\xcb\xd8\x1d\x26\xda\x23\x12\xe1\xb7\x48\x26\x43\x47\x24\x21\x6e\x91\x4c\x86\x9f\x91\x20\x92\xd8\x0d\x1c\x3f\xc4\x3c\x3f\xdc\x2a\x82\x20\x10\xc9\x97\xb9\x0f\xdd\x39\x05\x4a\x4c\x12\x7b\xbe\xd4\x81\xe2\x83\x9b\x03\x93\xd2\xc4\x8f\x48\x5c\x1c\x68\x4a\x8a\x24\x8e\x45\xf5\x19\x91\x92\xaf\xbd\x0f\xf2\x73\x06\x94\x94\x24\x0e\x8e\x35\xcd\x25\x04\x0e\x9a\x38\x21\x12\x7c\xaa\x04\x4d\xa1\xb4\x77\xe2\x60\xc2\x3d\x1c\x8e\x9e\xeb\xe7\x12\xb6\x77\x99\x12\x03\xe1\xe7\xaa\xa3\x1c\x1f\xb6\x4f\x12\xe2\x90\x0b\x9c\xc4\x04\xd1\x27\x20\x04\xc9\x0d\xce\x20\x67\x17\x38\x89\xc7\x8c\x3f\x1d\xa2\x51\x00\xf6\xbe\x20\x4c\xe8\x55\x72\x71\x09\x94\xd0\xf5\xe2\xd2\x53\x15\x40\x81\x38\x82\xc9\x29\x12\xe0\x12\x28\x21\x45\x7b\x4b\xf4\x58\x84\x8d\x92\xc3\xc6\x40\xc2\xdd\x09\x81\x2e\x81\x92\x76\x0d\x3f\x03\x49\xf4\xd0\xb5\xa4\x14\x91\x27\x20\x84\xd9\x61\xd4\x92\x02\xd1\xe7\xaa\x5c\x02\x1e\x36\x06\x92\x76\x8d\x3d\x01\x51\x84\x0e\x3c\x4a\x3a\x6a\xfc\xa9\x28\x92\x00\x02\x27\x9f\xfb\x42\x5c\xe0\x24\xee\x99\xf4\x0c\x44\x24\x94\x7c\xee\x4b\xe0\x02\x27\x29\x87\x24\xf8\x0c\x24\x81\x1b\xf6\x38\x24\x74\x81\x93\x54\x88\xf6\x36\xfa\xa1\x68\x0f\xc4\xf4\xb0\x2b\x90\xd0\xa5\x94\xc8\x25\x50\x42\x4f\x50\xa2\xcf\x35\x53\x18\x3a\xf8\xe0\x49\x29\x62\x97\x40\x49\x29\xe2\x4f\x40\x14\xe0\x9b\xba\x26\x9e\xab\x5f\x08\xe9\x86\x7d\x00\x49\xba\xc0\x49\xca\xa2\xc3\x19\xf5\x03\x92\xc0\xe0\x86\x7d\x00\x78\xd8\x64\x3f\x05\x4a\xca\x23\x08\xd0\x53\x3d\x04\x08\x19\x39\xec\xe4\x27\x45\xc2\x97\x48\x09\x3d\xdc\xc3\xb5\x33\x8f\x09\xe9\x04\xd3\xe4\x8a\x0d\xee\x97\x68\xe7\x40\x89\x3b\xc7\x9e\x43\x13\x38\xd8\x3b\x84\x28\x31\x4d\xfc\x12\x29\x29\x90\x38\x05\x12\xb7\x90\x24\x5d\x22\x25\x3d\x50\x04\xcf\x49\xa2\x12\x67\xb7\x9c\x4c\xc2\x4b\xa0\xc4\x48\xe8\x29\x4b\x8f\x20\x72\xd8\xc0\x49\x7a\xec\xba\x5f\x15\x9f\x23\x25\x05\x22\xcf\x40\xec\x70\x70\x9f\x9c\x24\x7a\x89\x94\x14\x88\x3d\x01\x51\xc0\x0e\x42\x99\x98\x24\x7e\x89\x94\x14\x48\x3c\x03\x91\xc3\xbe\x62\x72\x92\xa4\x4b\xa4\xa4\xc7\xdc\xe0\x39\xbf\x8d\xc2\x1b\x22\x13\x0e\x07\x40\xe7\x40\x49\xfb\x86\x8e\xd1\x24\x5c\xec\x9d\x41\x94\xf8\x0c\x1f\x3f\x1d\x07\x13\x70\xd8\x50\x4a\x8e\x44\x9e\x91\x08\xbb\x8d\x26\xfa\x8c\x24\x0e\x1b\x4a\xc9\x91\xd8\xf3\x31\x05\x46\x87\x98\x89\xc4\x48\xfc\x12\x29\x29\x90\x78\xde\xea\xa4\xd2\x2d\x21\x0a\x87\x15\xf2\x19\x10\x3d\x89\xa3\xfa\x48\xf8\xd4\x9f\xdd\xf0\xcf\x79\x34\x7d\x8a\xa2\xaa\x69\x15\x47\x2b\xa9\xda\x8f\x9a\x66\xbf\x13\x47\x55\xd3\x0a\x9a\x6a\xff\x98\xb4\xff\x0c\xbc\x85\x37\x18\xb7\xff\x39\x8f\x16\x2b\x6f\xf0\x7f\x7e\x7e\xe8\x8d\x87\x88\x6f\xe9\xf7\x1f\x8b\xd9\x32\xfa\x44\xec\xd7\x9d\xe3\xbd\x4e\xcf\xb2\x4f\x03\xbc\x4e\x5a\xe8\x21\xe6\x1d\xfe\xfe\xe3\xe7\xbf\x7e\xf3\x97\xc3\xc9\x9f\x8b\xf1\x6f\x7f\xfc\xf8\x0d\x1f\xc3\x12\xf1\x6f\xff\xdf\xcf\xdf\x7f\xfc\xcc\xa9\x95\x96\x85\x0d\x87\x37\x1d\xa6\x99\x0c\x9b\xad\x66\x5e\xad\x94\x5d\x1b\x55\x4b\xcd\x12\xd6\x15\xaa\x96\x74\xad\x54\x72\x34\x47\xaf\x15\x65\x52\x77\x4c\xd3\xac\x69\xa5\x9f\xef\x8d\xfe\xe9\xd1\xfd\x69\xf8\xd8\x49\x8b\xbd\x4f\x25\xfc\x46\x2a\x4f\x83\xd3\x4e\x5a\xe0\x0a\x95\x10\x80\xef\x23\xee\x2c\xe2\xed\xa4\x45\xde\x67\xe1\x77\x52\x79\x16\x07\x77\x6c\x89\xa7\x68\xf9\x9f\xff\xfa\x2d\x5e\x8e\xc2\x68\xb6\xa7\x31\xa7\x54\x2d\x57\x37\x0a\x48\x35\x70\xb6\x54\x21\x4a\xb3\x90\x2d\x96\x32\x85\xac\xe9\x94\x2c\x07\xe9\x2e\x6e\x15\xb3\x35\xbd\x5c\x72\x54\xad\x2c\xd7\x1a\xbc\xa2\xf2\x72\x13\xe9\xbf\xfd\xfe\xe3\x37\x2f\x08\xc6\xcb\xd1\xe2\x00\x93\xb0\x63\x7b\x98\xf9\x62\x3f\xc9\x47\xed\x3f\x7d\x6f\xe0\x8d\x82\xe8\x71\x5c\xc1\x3f\xcf\x59\x97\x90\xd0\x4f\xb1\xee\x34\xf4\xef\xa4\x85\x9e\xb3\x57\xfe\xf5\xdb\xc3\xd0\xe6\xe4\x52\xb6\x95\xa9\x2a\x6a\xc9\x76\x9a\x46\x39\xa3\x9a\x9a\x5b\x94\x55\xab\xa8\xd6\x5a\x5a\x5d\x23\x8d\x56\xae\x85\xd5\x56\xa6\x85\x2d\x54\x6b\xe6\x49\x5e\xe7\xd4\xc8\x33\x77\xdf\xdf\x78\x36\x1e\xde\x8a\xe1\x0d\x9f\x38\x0f\x8f\x7c\xda\xff\x7e\x3e\x8f\x16\x7f\x2e\xb6\x93\x03\x17\x47\xde\xa2\xbb\x8a\x1e\xf9\x97\xf0\x6d\x9f\xe1\xdf\x79\xc8\xe3\xb1\xc5\xbe\x54\xf4\x6e\x60\xe3\xaf\x23\x7a\xe7\xc1\x99\xc7\x16\x78\x45\xf4\x54\xd3\xd2\x88\xeb\x54\x11\xaa\x5b\x44\x2d\x22\x25\x93\xcd\xc8\xba\x8b\x33\x05\x2d\x8b\x75\x5e\xd2\x4a\x79\xa7\x42\x71\xc6\xa6\xb6\x66\xa0\x9c\xac\xdb\xb4\x44\x9a\x67\xa2\x77\x0b\xeb\x3f\x2f\x7a\xdf\xca\x3f\x74\xc9\x3f\x74\xc1\xbf\x1b\xfa\x7e\x9c\xba\xc9\xc7\x20\xc9\xd4\x4d\xf6\xb6\xcf\xf0\xef\x3c\xf0\xf5\xd8\x22\x5f\x3b\x75\x93\xb3\xf1\xd7\x99\xba\x67\x11\xba\x27\xad\x07\x83\x0b\x1f\x78\x37\xf2\x86\x8f\xe3\x3a\x8c\xe0\x9e\xfe\x95\x37\x58\x1e\x7e\x53\xcc\xc8\xeb\xa2\xfc\xdf\xff\xfd\x34\xd6\x6e\x4d\x2d\xe6\x2b\x2e\xd3\xdc\x42\xb3\x6c\xd9\x36\x33\x2d\xab\xdc\xcc\x14\xeb\x25\xa5\x61\xd8\x96\x5d\x6b\x19\xf5\x46\x83\x14\x1a\x72\xb5\xae\x94\x6d\x9d\x56\xed\x82\x9c\xf9\x0c\xc1\x67\x91\xc0\x27\x2d\xf4\x41\x82\x6d\x63\x57\xfa\x5e\x82\x4f\x23\x8e\x4f\x5a\xec\x1a\xc1\xe8\x94\xe0\xd1\x72\x30\xf8\x3e\x52\x4f\x63\x9a\x4f\x5a\xe0\x97\xe5\xed\x69\xec\xf4\x49\xeb\x63\xbc\xfd\xad\x64\xbb\xb8\xfc\x57\x10\xfc\x10\xa3\x7d\xd2\xba\x2a\xbd\x3f\xce\x08\xf6\x9a\xd5\x9d\x91\x0b\x57\xa1\xaa\xec\x82\x5c\xb6\xd7\x6a\x16\x3b\xdf\x47\xfc\x79\x5c\xf8\xb1\xf5\xc5\x6a\x36\x59\xc7\x7e\x2d\x35\x7b\x1e\xc0\x7e\x6c\x3d\xa8\x59\x69\xcf\xba\xef\xa2\xe5\x3c\x06\xfe\xa4\xf5\x20\x83\xf4\x30\x8c\xdd\x51\x3c\x78\xd8\xc4\x08\xa3\xf9\xc3\x38\x64\xaa\x14\x37\x64\xcd\xc8\x97\x1d\xdc\xca\x97\x30\x51\x6b\xba\xdc\xd0\xb9\x5e\x67\x79\x86\x55\xc5\xac\x3a\x76\xc3\xc9\x28\xd9\x5a\xd1\xe5\xd5\x6a\x25\x8f\x6b\x56\xbe\x5c\x7b\xe4\x71\xc2\x6f\x7f\xba\x5f\x4f\x21\xf9\x27\x2d\xf1\x76\xbf\x92\x8a\xe9\xf7\x8d\xd7\x69\x60\xff\x49\xeb\x6b\x1d\x93\xa4\xc3\x7d\x65\xda\xa1\xe3\x6e\xc2\xb7\xcf\xbe\xf3\x44\x84\x93\xd6\x83\x5d\x13\x8f\x92\x71\xfb\x0a\xfb\x6c\x4f\x41\xb7\x9a\xb9\x7a\x26\x6f\x65\x69\xde\x26\x6a\x49\xb6\x79\x93\xf3\x72\xd3\x6d\x71\xb7\xae\x11\x53\xcf\x67\x33\x8e\xae\xe6\xd4\x7a\x43\x2d\x90\x3c\xb1\x2a\x8c\xe7\xf3\xad\xa7\xad\x96\x64\xdf\xfe\x14\x53\x4e\x73\x21\x4e\x5a\x5f\xab\xcd\x93\xb2\xe5\x57\xd2\xe6\xe7\x49\x1b\x27\xad\x07\x4d\xc3\x1f\xfc\xb5\xd9\x72\xbe\x88\xa2\x87\xb9\x44\x6a\xc5\xb2\x86\xeb\x56\x2d\xcb\x5b\x55\xac\xda\x5a\x05\x5b\xd4\x29\xd9\x4a\x51\x33\x33\x32\xca\x15\x9a\xb6\x5e\xe5\xc5\xa2\x5c\x95\x4b\xf9\xbc\x99\x69\xf1\xaa\x95\xcb\xee\x3b\x7d\x80\x19\x3f\x0c\x81\x5a\x6f\xd0\x82\x5a\x6d\x65\x2d\x6e\x69\xa5\xa6\x2d\xe7\xca\x75\xa3\xd2\x94\x33\x99\x92\xd3\x6c\xb6\x4c\xb5\x94\xcf\x92\x7a\x45\x41\x46\x9e\x37\x50\xc1\x32\x1b\x59\x8e\x9d\xdc\x61\x08\x96\x8b\xce\x78\xd6\xdd\xed\xe9\x89\xbd\xc1\x3c\x7a\xf6\xd9\x82\x71\x78\x20\x52\x73\xaa\x2f\x1d\xb9\x60\x16\x85\xdd\xc5\x9f\xde\x60\xd2\xf1\x46\xcb\x21\x39\xfe\x45\x77\x3e\x5f\x3e\x4a\x46\xd2\xde\x3d\x1a\x86\x64\xdf\xfe\xcc\x70\x9d\x65\xb4\x9c\xb4\xd0\xdf\x62\xb8\x16\xb3\xe5\xcb\xd1\x72\x6a\x99\x7f\xf3\xd1\x7a\xc8\xf6\x39\x69\xfd\x3d\x26\xd7\xab\xa3\xf5\xef\x3c\xb7\x4e\x53\xaa\x4e\x5a\x0f\x8b\x13\x76\x18\xad\x41\x77\xd8\x3d\x68\x7f\x09\x21\x8c\x39\x02\x98\x09\xfa\x4f\xc2\x39\x15\x80\x3f\x8f\xc3\xaf\x33\x9c\xbf\xc4\x4c\x4b\xd8\x81\x4f\x8f\xdd\x53\x16\xdb\x49\x0b\xfd\xbb\x8c\xdd\x5f\x35\xef\xbe\x61\xec\xce\x12\x07\x4f\x5a\xe0\xc4\xd9\xd9\xf7\x29\x1e\x78\xed\xf9\x6f\x7f\xfc\xf8\x7f\xf0\xf7\x1f\xe8\x7f\xf6\xab\xa8\xa7\x5f\xfe\x79\xf8\xf5\x41\x79\xfd\x39\x8b\xa6\xcb\xee\x2c\x0a\x9f\xb4\xd9\x9f\xb3\x68\x35\x0e\x3c\x7f\x10\xfd\xf6\x3f\xdf\xa6\x4a\xce\x32\x0f\x4f\x5a\x5f\xbc\x20\x4d\x2e\x6c\xbf\xce\x82\xf4\x2c\x45\xf2\xa4\x05\xbe\xd6\x45\x4c\x3e\xdd\x7f\x1d\xd6\x9d\x27\x85\x1e\x5b\xe2\x35\x25\x78\x76\xe6\x71\xaa\xf9\x6e\xe0\xe8\x99\xe6\x33\xf3\x66\xd3\xca\x2b\x59\x43\x2f\x97\x31\xa1\xb4\xd1\x6c\xe4\xa8\x9a\x51\x5a\xcd\x4a\xc9\xcd\x56\xab\x39\x43\x75\x8b\x96\x53\xc1\x54\xb5\x2a\xa4\x51\xaf\xe1\x7c\xab\x70\x57\xab\x75\xdb\x76\x48\xc2\x0e\x7c\x6a\xc0\xce\x72\x6f\x8f\xad\x57\xad\x16\x04\xff\x3b\x64\xbf\xc0\x90\x9d\x25\x39\x1f\x5b\xaf\x2e\x12\xff\x77\xc8\x7e\x85\x21\x3b\xcf\x26\x3f\xb6\x40\xd2\xb5\xe1\xff\x8e\xdd\xf7\x8d\xdd\x59\xda\xfd\xb1\xf5\xc5\x0b\xa9\xe4\x23\xf3\xeb\xac\x06\xce\xeb\x0c\x1c\x5b\xa7\x67\x08\xc1\x20\xf2\x66\x2f\x17\xd6\x27\xbf\xfe\xdc\xd2\x5a\x35\xb2\xd9\x6a\x25\xaf\x17\x75\x66\x66\xb8\x9a\xa7\x65\x83\x34\xeb\xaa\xab\x16\x4b\xd5\x52\x96\x59\xae\xcc\x4d\x5b\xad\xe2\xac\xa5\x5b\x66\xab\x62\xbb\x6e\x56\xa1\xda\xa7\x8e\x46\xce\x8b\x1e\x1c\x5b\xe4\xd4\x5b\xe8\xb6\x47\xd1\xec\xcf\x7e\xb4\x7d\x90\x0a\x66\xe2\x46\xb9\x90\x77\x2b\x1a\xcb\xd7\x33\x2d\x4d\x26\x66\xa6\x98\xb5\xed\x72\xc9\x71\x2d\x6c\x39\x7a\x29\x53\x6a\x55\x1b\x46\x5e\x66\x66\xa5\x61\x14\xcd\x96\x6c\x67\xb5\xc3\x70\x3e\x20\xad\xa3\x6e\xbb\xb3\x97\x0d\xf0\x7d\xfd\x3c\x2b\xc9\x70\x6c\xa1\x6f\xe9\x27\xfd\xb6\x7e\x9e\x17\x8c\x38\xb6\xd8\xb7\xf4\x13\x7e\x5f\x3f\xcf\xca\x59\x1c\x5b\xa7\x5e\xee\xd0\x9b\x2f\x1e\xfa\x79\xa4\x10\x7d\x1f\x85\x67\x65\x32\x8e\x2d\xf2\x95\x87\x8e\xdf\xd6\xaf\xa7\xa2\x1d\xc7\xd6\xf5\xfd\x85\xf7\x37\x17\xbe\x4f\xdf\x9d\x17\x0a\x39\xb6\xd8\x35\xea\xdf\xda\x1a\xf9\x7e\x75\x7d\x5e\x9d\xe4\xd8\x42\xbf\x96\xd8\x3f\x57\x3d\x39\xb6\x4e\xed\xe4\x60\xbc\xfe\x73\xd1\x99\x45\xf3\xce\x78\x10\xee\xcd\xc0\xef\x3f\x7e\x1b\x46\xe1\xd9\xef\xd0\xef\x3f\x7e\xeb\x74\xdb\x9d\xf3\x5f\x7e\x77\x37\x1e\x4b\xae\x1c\x5b\xa7\xb3\xb7\x33\x1e\x46\x7f\x86\xe3\xa1\xd7\x1d\xed\xa7\x6e\xb4\xf1\x86\x93\x41\xf4\xcf\x60\x3c\xfc\xe6\xd9\xf8\x5c\xd0\xe5\xd8\x02\xff\x66\xfa\xfe\xa2\x4a\xcc\x73\xeb\x8b\xc3\xff\x93\x75\xec\xd7\x5a\xb9\x9e\x97\xc5\x39\xb6\x1e\x74\x06\x39\xb0\x6e\x32\xeb\x3e\x92\x78\x16\xbb\xfb\x1c\xd3\x8b\xce\x5d\xef\xc3\x9f\xff\xb9\x67\xf5\xbf\x7e\xdb\xcf\x4b\xf8\xfb\x8f\xdf\x46\x07\x79\xf8\xfd\xc7\x6f\xfe\x72\xbb\xef\xf7\xab\x81\xbf\x07\x5d\x3a\x18\x1c\x9f\x5f\x38\x5d\xe7\x0f\xdf\x72\xbe\xce\xff\xf2\xd4\x09\x63\xb9\x12\x2e\x98\x4e\x83\x99\x6e\x95\x6b\x99\xb2\x49\x78\x5d\xd1\x79\x86\xd0\x22\x31\x1b\x7a\x33\x97\x67\x05\xdd\xac\xca\x9a\x41\x4d\xa5\x56\x42\x19\xa5\xe2\xf2\xca\xd3\x78\x24\xfb\x76\x82\xf1\x78\x2c\x2e\x74\x6c\x89\xef\x18\x8f\x0b\x7e\xbf\x3a\x56\xef\xb3\xfb\xe5\xa8\x9e\x01\xfd\x9d\x46\xe3\xbc\xae\xd2\xb1\xf5\xb5\x31\x54\x49\xd9\xf2\x4b\x29\x96\xf3\x42\x52\xc7\xd6\x83\xed\xc1\x1f\x12\x64\xfc\x71\x39\x1e\xc7\x71\x34\xfb\xb3\xfb\xb4\x60\xf8\xab\xd5\x0c\xaa\x18\xae\x8d\x0c\xd9\xc9\x16\xab\xcd\x7c\xa1\x56\x28\x58\x55\x4d\x55\x59\x59\x2d\xe7\xcc\xa2\x9c\xa9\x59\x76\x35\xcf\xed\x5c\xc9\x46\xb5\x6c\x15\xb9\xb9\x46\x46\xae\x66\x9e\x46\x27\xd9\xb7\x3f\x31\x3a\x67\xc5\xb9\x8e\x0d\xf2\x89\xb1\x41\xf7\x19\x9b\x6f\x57\x39\xb7\x8d\x4c\x39\xcf\x95\xb2\x53\x2b\x37\x2c\x5d\x91\x4b\x8a\x5b\x64\x45\xa3\xea\xb6\x4c\x23\x63\x58\x8e\x6b\x5a\x4d\xdd\xd6\xe5\x4c\x96\x53\x47\xab\x1b\x75\xb7\xa1\xeb\xe5\x52\x45\xfd\xcc\xc8\x9c\x56\x3b\x3b\x36\x5e\x3d\x56\xfa\xd0\xfe\x69\xc2\xfe\x5e\xec\x9f\x26\xec\xf8\x5d\xf7\x4f\x7f\xf5\x91\x3b\x2d\x0b\x77\x6c\xa0\xaf\x35\x15\xc9\xc7\xe5\x97\x31\x15\x67\xe5\xeb\x8e\x8d\xaf\x5d\xbc\xdf\x30\x2f\x7e\x19\xc6\x9d\x55\xd9\x3b\x36\x1e\x16\x27\xe8\x3c\x7d\x52\xae\x22\x59\x73\xb5\xbc\x61\x6b\xa8\x90\x37\x68\xb5\xd8\xcc\xd2\xa2\x51\x6f\xb1\x0a\x6f\x1a\x85\x6a\x39\x97\xb1\x11\x2a\x73\xb3\x49\x32\xb5\x46\xb6\xc6\xb3\x99\x8c\x75\x96\xfe\x97\xa9\x36\x30\xa7\x45\xd9\xad\x12\x56\xce\xe4\xb2\xa8\x91\x93\x4b\x15\x15\x55\xab\xad\x02\x2f\x23\xc2\x32\xae\xae\xab\xb9\x86\x5d\x47\x55\x8d\x1b\xba\x86\x2a\x4e\xa5\x70\xe0\xd8\xc4\x5b\x74\x7e\xfb\xe3\xc7\xff\xfb\x9f\x8b\x54\xc0\x57\x72\x01\x3f\x1d\x83\x33\x1f\x2f\x67\x41\xf4\xe7\xd0\xdb\x5c\xc5\x3c\x51\x22\x72\xb3\x98\x25\xd8\xce\xb5\xf4\x06\xae\x94\x70\x55\x2b\x3b\x32\x72\xa8\xd5\xa0\x8a\x2d\x57\x9b\xb9\x9c\x6b\x62\xd3\xc8\xea\x0d\xec\xda\xac\x52\xcd\x57\x0b\x58\xb5\x2c\xe7\xe4\x45\x57\xe9\x7f\x7a\x7e\x3d\xa5\x31\x21\x07\x3f\x23\x11\xa7\x55\x0e\x8f\x0d\xf0\xcb\x4a\xc4\xbf\xae\xa4\x80\xfe\xcf\x5b\x0e\xcd\xbf\x95\xa4\x5c\x2e\x3e\x5f\x93\xa2\x37\x7a\x73\x37\xba\xbf\x4b\x44\xcf\xca\x5e\x1e\x1b\xe4\x65\xce\xf7\x0d\xe2\x75\xcc\x59\x4e\x3e\x8a\x1f\x54\x54\xc9\x17\x34\xb7\x8d\x54\xc2\x6f\x7f\x7e\xa4\x1e\xea\x8a\x1e\x1b\xaf\x3a\x70\xe0\x9f\xf4\x35\x27\x81\xbc\xbd\x13\x81\x7e\x55\x2f\xe1\xef\x31\x34\x8f\x95\x5a\x8f\x0d\xf6\x29\xdf\xfa\x7b\x9d\xeb\x47\x35\x7d\x07\xe7\xfa\x97\x1f\x9c\xd3\xea\xb7\xc7\x46\x62\x17\xee\x06\x1d\x76\xea\xc2\xdd\xa0\x4e\x7f\x0d\x8d\xf7\x0d\xb6\xe9\xb4\xdc\xf0\xb1\x41\xfe\xe2\x91\xbb\x61\xad\x76\xaf\xc0\xf6\x1b\xe7\x5c\xb2\x0e\x7c\x62\xe4\xce\xea\x32\x1f\x1b\x5f\xeb\x7c\xdf\x30\xa3\x7e\x19\x1f\xf2\xac\x7e\xf4\xb1\xf1\xb5\xce\xf7\x0d\x02\xfd\xab\x31\xee\xa1\xce\xf5\xb1\xf1\xc5\x45\x0d\x6e\x70\x4a\x7e\x19\xc6\x9d\x96\xe3\x3e\x36\xd8\x6b\xf5\xc6\x5a\x39\x2b\xef\xd2\x46\x4d\x6f\xe4\xa8\x5b\x6e\x15\x4b\x39\x8a\x72\x6a\x9e\xd6\x54\x93\xb8\x39\xa7\x51\x34\xcd\x7a\xae\x55\xcb\xa3\xac\x45\x14\x03\x99\x86\x59\x42\xea\x99\x03\xa0\xea\x2a\xc9\x20\xb5\x46\xa8\x6a\x56\x4b\x25\x52\x91\x75\x1b\x15\xb2\x2d\xd9\x34\x1c\x6a\xc9\x5c\xa7\x38\x8f\xeb\x65\x8b\x35\x34\x93\x35\x1b\x7a\xa9\x56\x6a\xe5\x2b\xb9\x4b\x07\xe0\x2b\xd6\xff\x49\x49\x7b\x4a\xf5\x4e\xf4\xed\xcf\x0c\xd4\x69\x95\xf2\x63\xe3\xb5\xea\x5c\xbf\xf2\x40\xbd\xba\x15\xf3\x5d\xdc\x7b\x2c\xcd\x7e\x6c\x24\x4e\x70\xbc\x81\x3f\x67\x6b\x89\xe4\x43\xf5\x6b\xc8\x7d\xc2\x0e\x7c\x62\xe4\xce\x6a\xd8\x1f\x1b\x5f\x5d\xe0\x20\xf1\xf0\xfe\x32\x9a\xfd\xac\xd2\xfe\xb1\xf1\xb5\xd9\x64\x37\x08\xf4\xaf\xc3\xb8\xd3\xeb\x00\x8e\x8d\x2b\x8b\xb0\x8c\x5a\xb7\x95\x5c\x4d\xd3\x1c\x9e\x2f\x34\x9d\xa2\x5e\xac\x35\x15\xb9\xd0\x34\x91\x4d\x0c\x94\x2f\x5b\xcd\x06\xaa\x51\xbb\x5a\xc8\x67\xaa\x86\xdc\xcc\x50\x27\xa3\xcb\x6e\xf9\x85\xc4\x29\x3c\x6b\xb9\xb9\x42\x81\x55\x4d\xcc\xf5\x7c\x55\x76\x1b\xd4\x96\x1b\xc5\xac\x92\xcb\x65\x73\x45\x62\x14\x99\x56\x55\xd4\x56\xd3\x40\x4a\x8b\x94\xcb\xe5\x26\x72\xe4\xab\x25\x24\xe9\x25\xdb\x12\x92\xf9\x09\xb6\x9d\x5d\x59\x70\x6c\x7c\xf1\xa2\x3f\x39\xf7\x7f\x19\x79\x3b\xbb\x57\xe1\xd8\x78\x65\x09\x76\x97\xba\x91\x39\x8a\xec\x06\xab\xc8\x0a\xb3\x73\xa5\x62\xd9\x2e\x60\xe4\x92\x22\x76\x2a\x95\x42\xa9\x54\xd2\x2d\x4d\x77\x65\xc3\xad\x5a\xac\x96\xcd\xb2\x96\x5c\xaf\x66\x69\xab\x92\xb8\xe4\x6b\xb2\xb7\x25\xe2\x9e\xb8\xe0\xde\x97\x54\xdd\xfc\x37\xe3\xde\xd9\x75\x15\xc7\xc6\x17\x1b\x89\xe4\x4c\xfc\x65\x26\xed\xd9\x9d\x1a\xc7\xc6\x2b\x07\x27\x77\x11\x3b\xc2\xea\xd5\xbc\xa2\x16\x0c\xd4\x64\x99\x66\xa1\xc9\x65\x43\xab\x57\xb3\x05\x1d\x3b\x32\x6f\x2a\x1a\x2e\xe5\x4a\x16\x2b\x73\xa2\x57\x68\xa1\xa9\x17\x73\x76\x1d\x99\xca\x85\xd8\x7d\x54\xea\x92\xbd\xec\xf3\xcc\x7b\xb8\xfd\xe3\xd8\x78\xc5\x97\xf9\x5f\xe6\x5d\x61\xde\xe3\x3d\x25\xc7\xc6\x57\x99\x8b\x7f\x4b\xe6\x3d\xdc\xa8\x72\x6c\xbc\x52\x5e\xfd\x7f\x99\xf7\x92\x79\xa7\x97\xbf\x1c\x1b\x5f\xbc\x3b\x99\x9c\x87\xbf\x8c\xb1\x38\xbf\xeb\xe6\xb9\xf1\xc1\x4c\xa0\x4c\x33\x2b\xe7\x4c\xb5\xa6\x1a\x44\xcd\x23\x57\xcf\x33\xb7\x5a\x90\x99\x9d\xd7\x9a\xd9\x6a\x93\x2b\xc5\x5c\xbd\x58\x29\x2b\xc5\x82\xa1\x39\x66\xd5\xa4\x6e\xa5\x54\x28\x1a\x9f\x19\xd8\xf3\x1b\x74\x9e\x1b\xec\x1d\xfa\xe0\x37\xd3\xf7\x78\x2f\xcf\x73\xe3\x8d\x84\xd0\x0c\xd6\xb8\x9e\x2f\x56\x4b\x36\xd3\x73\x4a\x4e\x57\x6c\x66\x30\x53\x23\x25\x54\x23\x0d\x9a\x6f\x21\xc2\xec\x9c\x49\xf2\x95\x5a\xd3\x44\x16\x51\x9a\xaa\x63\x55\x8a\xd6\x1b\x89\x33\xdf\xd6\xcb\xc7\x3b\x83\x9e\x1b\x6f\x65\x63\xa1\x4f\x66\x63\x7d\x7d\x27\xce\x2e\x19\x3a\x36\xbe\xb8\x86\x4d\xb2\x6e\xfd\x52\x3a\xe2\xec\x2e\xa4\x63\xe3\xab\x4f\x30\x0c\x8c\x1d\xb5\x50\xb1\xd5\x7c\x11\x95\x8a\x55\xa5\xc6\x9b\xae\x52\xa5\x98\x16\x0a\x5a\x5d\xd6\x0b\xd4\x55\x4a\x24\x6b\xab\x0a\xd1\x5b\xba\xcd\x5b\x32\x55\xeb\xf9\xef\x61\xdc\x3b\xf7\x2a\x2d\x66\x5e\x18\xdd\xe7\x4e\xa5\x07\xa8\x2b\xd9\x12\x7b\xde\x23\x00\xa5\x7f\x00\xf6\x0f\x80\x7f\x40\xf6\x07\xa6\x7f\x50\xf0\xf3\x10\xda\x01\x1f\xc6\xe7\xb9\x30\xee\xef\x3f\x20\x3e\xd4\x37\x3c\xf9\xcd\x63\xa9\x4e\xf8\x94\x33\x74\xed\xd6\xb4\x0b\x2a\xce\xe2\x49\x5f\x25\x82\xb0\x9f\x0f\x5e\x2e\x3d\xe0\x42\x70\x42\x05\x3b\x50\x71\xfa\xab\x87\xa2\x86\xf0\x29\xf8\x90\x30\x08\x99\x60\x10\x10\x8c\x18\xc7\xfb\xfe\x7e\x90\xae\xd3\xa8\xc6\xd7\xe9\xa2\x3f\x1f\x5e\xf4\xe8\x84\x9f\xd2\x45\xcf\xb9\x73\x64\xcf\x63\x8a\xdb\x13\x55\x00\x60\xc8\x39\x60\x87\xba\xb6\x09\x08\x83\x57\x09\x3b\x32\x0c\xbd\x64\x18\xfa\x00\xc3\x8e\xa4\x7d\x48\x48\x47\x73\x2f\x78\x71\x93\xd8\xbd\xc4\xf6\x55\xf0\xa3\x20\xbf\xb8\x0d\xec\x3a\x27\xdf\x46\x42\x2f\x6e\xec\x4a\x8a\x84\x5f\xdc\xaa\x95\x14\x89\xbc\xb8\x02\x2b\x29\x12\xbd\xbc\xa6\xea\xda\xa5\x76\xef\x22\xb1\x17\x17\x5e\x25\x45\xe2\x97\xf7\x3f\xbd\xa1\x36\xde\x46\x12\x97\x37\x21\x25\xee\x9d\x74\x89\x94\x98\x26\x08\x5e\xdc\x91\x93\x18\xea\xc5\x75\x45\xd7\x2e\x49\x7c\x1f\x0a\x5d\xde\x3c\x93\x9c\x2a\x7c\x09\x95\x9c\x2a\x72\x79\xa9\xcb\xb5\x7b\xbc\xdf\x87\xa2\x97\xd7\xad\x24\x87\x62\x97\x17\xa1\x24\x87\xe2\x97\x17\x95\x24\x87\x12\x97\x57\x88\x24\x87\x92\x2e\x2f\xf7\x48\x0c\x85\xc0\xe5\x55\x1b\x89\xe5\x0a\xc1\x4b\xa8\xe4\x54\xa1\xcb\x5b\x2c\x92\x53\xf5\xe2\x12\x8a\x6b\x97\xf1\xbf\x0f\x45\x2e\xef\x7d\x48\x4e\x15\xbd\xbc\x6a\x21\x39\x14\xbb\x84\x4a\xde\x41\x7e\x79\x7d\x01\x4f\x0c\x25\x2e\xa1\x92\x77\x50\xba\xbc\x3f\x20\x31\x14\x06\x97\x50\x89\x3b\x88\xe1\x65\x69\xfe\x6b\x37\xc6\xbf\x0f\x85\x2e\xa1\xae\xdd\x87\xff\x3e\xd4\x8b\x0a\xf4\xc9\xa9\x22\x97\x50\xc9\xa9\xa2\x97\x95\xd6\x93\x43\xb1\x4b\xa8\xe4\x1d\x7c\x51\x51\x3c\x39\x55\xe2\xb2\xc0\x75\x72\x28\xe9\xb2\xde\x72\xe2\x0e\x1e\x02\x2a\xce\xea\x1c\x27\x9e\x38\xa7\x75\x7f\x1f\xa0\x12\x77\x90\xa0\xcb\x12\xc2\xc9\x3b\x88\x2f\xa1\x92\x77\x90\xbc\xa8\xce\x0b\x12\x63\xd1\x17\x85\x63\x93\x63\xb1\x17\x15\x4d\x93\x63\xf1\x17\xa5\x36\x93\x63\x89\xcb\xd2\x8f\xc9\x59\x2f\xbd\xa8\x22\x99\x98\x2c\x0a\x5e\x94\x55\x4c\xee\x7a\xc1\x17\xb5\x0c\x93\x63\xa1\x17\xf5\x02\x93\x63\xe1\x17\x35\xf9\x92\x63\x91\x17\x75\xef\x92\x63\xbd\xac\x50\x97\x1c\x8b\xbd\xa8\x0a\x97\x1c\xeb\x65\x8d\xb6\xe4\x58\xe2\x45\xc1\xb4\xe4\x58\x2f\x4b\x9b\x25\xc6\x3a\x4c\xe6\xf3\xfa\x62\xc9\xb1\x5e\xd6\x00\x4b\x8e\x85\x5e\xd4\xd9\x4a\x8e\x85\x2f\xb1\x92\xef\x85\x90\x17\x35\xac\x92\x63\xd1\x17\xf5\x97\x92\x63\xb1\xcb\xea\x41\xc9\xa1\x5e\x16\x22\x4a\x8e\x25\x5e\x54\xe6\x49\xbc\x65\xc0\xa4\xcb\x42\x32\x89\x77\x6a\x38\xb8\xac\x7c\x92\x1c\x0a\x5e\x94\xe2\x48\xcc\xab\xbd\x4e\x38\x2f\xea\x91\x9c\x28\x7c\x51\xe6\x22\x39\x51\xe4\xb2\x60\x46\xe2\xf1\xe3\xf4\xb2\x84\x44\x62\x77\x73\xaf\x8a\xcf\xa1\x12\x7b\x63\x9c\x5f\x96\x31\x48\x4e\x95\xb8\x84\x4a\x4e\x95\x74\x99\xb9\x9e\x78\x47\x64\x6f\x02\xcf\xa1\x12\x77\x50\xbc\xc8\xd2\x4e\x4e\x15\xba\xcc\x2a\x4e\x0e\x85\x2f\x73\x60\x93\x77\x90\x5c\x26\x65\x26\x1e\x41\x41\x2f\xb2\x04\x13\x4f\x41\xc1\x2e\xf3\x0d\x93\xf7\x8f\x5f\x66\xe0\x25\xef\x9f\xb8\x80\x4a\xde\x3f\xe9\x22\xbb\x2d\xf9\x56\x3e\xb8\xcc\x93\x4b\x2c\x54\x12\xbc\xcc\x1c\x4b\xec\xb6\xee\x17\x09\xe7\x50\x89\xdd\x56\x09\x5f\xa6\x49\x25\xa7\x8a\x5c\x42\x25\xa7\x8a\x5e\xa6\x1f\x25\x87\x62\x17\xf9\x30\xc9\x65\x81\x5f\x66\xd6\x24\x67\x95\xb8\xc8\x35\x49\x4e\x94\x74\x99\xb5\x92\x98\x53\xf0\x70\xa4\x70\x9a\xc8\xf1\xd6\x59\xf7\x7b\x58\xf0\x12\x2b\xb1\x1f\x0d\x01\xba\xc8\x94\x48\x7e\xdc\x04\x2e\x93\x2e\x6e\xe9\x22\xb9\x8c\xa4\xbf\x81\x2e\x7a\x89\x95\x1c\x8a\x5d\x84\xa8\xdf\x00\xc5\x2f\xa1\x6e\xc0\x12\x17\x01\xe0\xe8\x86\x53\x51\xe9\x12\x2b\xf9\xa9\x28\xb8\x08\xad\xbe\x81\x2c\x78\x19\xa6\x7d\x03\x59\xe8\x22\x68\xf9\x16\xb2\xf0\x25\x56\x72\x28\x72\x11\x0e\x7c\x0b\x59\xf4\x12\x2b\x39\x14\xbb\x08\xb4\xbd\x01\x8a\x5f\x42\xdd\xd0\x43\x71\x11\xc6\x8a\x92\x1f\x6e\x43\xe9\x22\xe4\xf4\x06\xac\xc3\x09\xd8\x69\x78\xe8\x2d\x58\xf0\x22\x08\xf3\x16\x2c\x74\x11\x0b\x99\x7c\x18\x11\xbe\x84\xba\x81\x2c\x72\x11\x69\x78\x03\x59\x97\x41\x8b\x67\xc1\x51\x1f\x8b\x89\xfa\xb3\x1b\xfe\x39\x8f\xa6\x4f\xa1\x51\x35\xad\xe2\x68\x25\x55\xfb\x51\xd3\xec\x77\x82\xa3\x6a\x5a\x41\x53\xed\x1f\x93\xf6\x9f\x81\xb7\xf0\x06\xe3\xf6\x3f\xe7\xd1\x62\xe5\x0d\xfe\xcf\xcf\x0f\xbe\xf3\xe7\x9e\x7a\xfa\x10\xf2\xf5\xa9\xa0\xae\xbb\x07\x72\x1d\x79\xfa\xd3\x0f\x20\xf4\x69\x40\x60\x18\x71\x09\x62\x26\xc5\xa1\xa0\xb1\x07\x83\x20\x06\x30\xc0\x34\x40\x20\x8c\x69\x2c\x89\x38\x46\x31\xa7\x21\x40\x91\x17\x32\xe8\xc7\x21\x45\x20\x42\xf0\xe7\xef\x3f\xd8\x63\x24\x5c\x4e\xad\xb4\x2c\x6c\x38\xbc\xe9\x30\xcd\x64\xd8\x6c\x35\xf3\x6a\xa5\xec\xda\xa8\x5a\x6a\x96\xb0\xae\x50\xb5\xa4\x6b\xa5\x92\xa3\x39\x7a\xad\x28\x93\xba\x63\x9a\x66\x4d\x2b\xfd\x3c\xe8\x8c\xa7\x0f\x3e\xc4\xf2\x5d\x89\xad\xc3\xf8\x9f\x18\x12\x04\xf6\xaf\x7d\xfb\xe9\x79\x48\xda\x4f\x79\xff\xc9\xe7\x9a\xbc\x6a\x4b\x2c\x32\x46\x08\xd0\xe5\xd8\xd1\xdd\xd1\xb4\xe0\x2f\x50\x60\x55\x4b\xe5\xea\xcc\xd3\xc6\x91\x2d\x07\xb3\x6a\xde\xd9\xff\x79\x6b\xff\x9f\xd6\x6c\xb5\x0a\xed\x8c\x7c\xfe\x51\x8e\x3f\xce\xf7\xcd\x2c\x6a\xd4\x88\xbc\x3e\x3e\xd7\xf3\xa0\x36\x38\x7c\x5f\x0d\x0c\x16\x6d\x40\x66\xca\x5c\xb9\xc3\xbc\x3c\x24\x3d\x7d\xb3\x94\x57\x9d\x55\x3e\x87\x52\xa5\xe5\xce\x1f\xcb\xf9\x59\xec\xaa\x9e\x0a\x5b\xb5\x0a\xe7\x8a\xab\xa7\x69\xb1\xdd\xb1\x9a\x12\x37\xcb\x52\xa3\x59\x87\x3c\xea\x94\xf2\x3c\x04\xcb\xe1\x46\x69\x7b\x66\x4f\xc8\x3f\x9f\xfa\xb4\xff\xe4\x2a\x47\x72\x8e\x3f\x16\x4e\xe8\xfd\xef\xe7\xbf\x3f\x3c\x37\xf6\xff\x1d\xfa\x64\x9d\x7c\x75\xdc\x8a\x17\x59\x0b\x4f\x48\x37\xf6\xed\x21\xeb\x54\xc2\x6e\x34\x5e\x2c\x71\x6b\x2d\x69\x80\xe6\x16\xe3\x5a\x87\x16\x95\xed\x42\x9b\x1c\xbe\xa4\xd6\xe5\x55\x37\x38\xf2\x48\x95\x5f\xfd\x68\xaf\xff\xfa\x91\x87\x77\x7c\xff\xe5\x18\x7d\xe8\xfd\xb2\xfc\xdf\x47\xde\xb4\xf7\xff\x15\xf7\xff\x89\xe3\x9f\xa9\x9d\x41\x0a\x38\xe9\x68\xd4\x35\xa5\x45\xd9\x9f\x66\x15\x64\xb2\x2e\xe2\xe1\x28\x03\x6c\xbb\xef\xa1\x4e\x5e\xef\xaf\x9f\xc7\x5b\x36\x1d\x35\x55\x38\xc8\x4f\x35\x1c\xf4\x97\x0f\xbc\x7e\xf9\xa9\x5c\x23\xeb\x40\xaf\x74\xdb\xfb\xcd\x75\xb2\xf7\x3f\xf0\xe2\x5f\x23\xb5\x3c\x9a\x87\x32\x5b\x0e\x65\x23\x1a\x76\x17\x91\xb1\x11\x7e\xbb\x40\xfc\x6d\x67\xb1\xea\xf9\x73\xc4\x64\x75\x8a\x91\x3c\x6c\x2f\x1a\x4e\xbf\x9c\x5a\x37\x94\x74\xca\x36\x0c\x1b\xa6\xa3\xad\xbd\xaa\x0f\x60\x18\xe1\xb1\x5d\x5b\xe2\xb0\x30\x99\x57\xdc\x5c\xd7\x4d\xef\xc1\x0f\xc1\xda\xa3\xf1\x28\xfa\xf9\xfb\x8f\x92\x53\x28\x3c\xfd\xff\x18\x03\x0b\x3e\xe0\xe3\x9c\x68\xae\x40\x40\x8c\x7c\x89\x06\x00\x30\x1c\x78\x71\x88\x80\x8f\x58\x88\x78\x0c\x58\x00\x51\xc4\x84\x60\x40\x0a\x51\x28\x85\x98\x23\xe2\x0b\x02\x04\x82\x91\x60\x50\x70\xe0\x8b\x3d\x11\x8f\xc9\x80\x77\xd2\x5c\xe8\x3d\xcd\x85\xf7\xae\xe6\x55\xcd\xb5\x7f\x4a\x7e\x5e\x86\xc0\xde\xaa\xb9\x2e\x67\xe5\xeb\x9a\xeb\x28\x0d\xa7\x9a\x8b\xe8\xdc\xce\x8c\x16\x65\xa7\x99\x29\xb6\x49\x31\x1e\xab\xd6\xc0\x2f\x54\x2b\x2d\x9d\xd7\xd7\xa5\x89\xa3\x17\x57\x8b\x51\xb5\x31\x6d\x18\x5d\x37\x3d\x1d\xb9\xee\x12\xf8\xab\xb6\xeb\xd4\x17\xe3\x6c\xb9\x1c\x4d\xb5\x41\x35\x5f\x70\xa7\x8b\x72\x03\x67\x77\x52\x37\x3f\x00\x8d\x8a\x79\x37\xcd\x75\xf2\x47\x49\x34\x07\x3c\xf2\x48\x79\x7d\x8a\xbc\xa3\xb9\xee\xf7\xfe\x44\x9a\xf3\x8a\xe6\xe2\xc7\x3f\x4b\xa2\x39\x8a\x44\x7e\xd6\x1c\x57\xde\xff\xb6\xe6\xba\xa3\xe6\xfc\xcc\xfb\x1f\x35\xd7\x52\x49\x81\x35\xe5\xf6\x20\xbb\xde\x19\xe5\x8c\xce\xe4\x1e\x6d\x6c\x81\x93\xab\xa6\x60\x90\xf1\xea\xca\xae\xc0\x5b\xa0\x3e\x1d\x74\x8d\xa1\xc5\x26\x28\x57\x58\xe4\x38\xc9\x65\xb3\xbe\xa7\xd8\xbd\xd1\xb4\x63\x3a\xb5\x2e\xca\xcf\xec\xc1\x62\x13\xa4\xdd\xee\x24\xcc\xf6\xd5\xca\xbd\x35\x17\x27\x3e\x43\x21\x45\x18\xc2\xc8\xc3\x31\xe1\x98\x4a\x31\x27\x7c\xbf\xac\xa5\x98\xe0\x58\xe2\xcc\x8b\x3d\x12\x87\x18\xb0\xc0\xf3\xa2\x38\x8a\x68\x14\x87\xbe\xef\x43\x40\xe2\xf8\xe7\xef\x3f\x0e\x27\xce\x77\xd3\x5c\xf0\x3d\xcd\x45\x18\xa2\xfc\xaa\xe6\x7a\x7a\x7a\x1e\x72\x7f\xab\xe6\xba\x9c\x95\x17\x9a\xeb\xe1\xd3\x3a\x79\x7e\xd4\x5c\x72\x79\xb6\x6a\xd5\xb2\x23\x1b\x9b\xab\xa1\x0d\x2d\x3a\x30\xd3\x83\x76\x7b\xd2\x8a\xc8\x68\xa3\xd3\xc6\xca\x94\xf2\xe9\x5a\xa1\x9c\x21\xd2\x3a\x9e\x4e\x05\x99\x2f\x47\xc1\xb8\x65\x8c\xb0\x21\xc7\xc0\xd2\x36\xc5\x35\x8e\x16\x4b\x9a\xed\x66\xea\x6b\x1c\xe0\x9e\xeb\x76\xe4\xc2\xbd\x34\x57\xf9\xb8\x4e\x4c\xa2\x39\x7a\xe5\x23\x8f\x5e\x9f\x21\xef\x68\x8e\x3b\xbe\x3f\x91\xe6\xbc\xa2\xb9\xd8\xf1\xcf\x92\x68\x8e\xf2\x61\x29\xf8\xa0\x39\xae\x7c\xde\xd6\x5c\x77\xd4\x9c\x9f\x79\xff\xa3\xe6\xca\x4c\x39\x72\x3a\x2d\x20\x6d\x7d\xda\x97\xec\x54\xab\x16\x53\xd7\xc8\x37\x9a\x4b\x53\x54\x53\xf5\xd9\x36\xae\xad\x40\x77\xd7\x4e\x59\x81\xce\xa6\xab\x72\xa1\x30\xc1\xf9\x5c\xcd\x94\xb6\xb2\x2e\x65\x36\x45\xbb\x58\xc2\x33\x7f\x59\x75\xdb\x30\x28\xe1\x12\x41\x39\xa3\xa2\xae\xef\xad\xb9\x04\x92\x42\x8a\x63\x14\x06\x51\xe4\x47\x10\x78\xb1\x00\x80\x53\x46\x7c\xe0\x45\x71\x18\x09\x28\xf9\x12\xe5\x98\x78\x21\xc1\x30\x8c\x05\x41\x1c\x30\x0a\x23\x1e\x85\xc2\x93\xc0\x5e\x73\x89\x9b\x35\xd7\x53\xf2\x0b\x3d\xa4\x3a\xbf\xad\xb9\x28\xc7\x92\x74\x55\x73\x3d\x3d\x3d\x4f\xf1\x49\xae\xb9\x32\x7d\xf9\x5c\x53\xc9\xf2\xd5\x35\xd7\xc9\xf3\xa3\xe6\xca\x4c\x81\x59\xef\xe4\x4b\xc6\x54\xf2\xda\x60\x5e\x4d\x55\xd3\xc1\x0a\x87\xd2\x42\x5b\x7a\xae\x36\x44\x8a\xb7\x33\x76\x46\xa1\x1a\xe6\x7a\x92\x37\xf0\xea\xc5\x96\xd2\xd9\x8c\x4d\xdc\x32\x26\x16\x9e\xcd\x3c\xd5\xdc\x6d\xc7\xf9\x56\x39\x35\xa1\xba\x52\xdf\x8f\x10\x4a\x39\xb9\xbb\x69\xae\x13\x85\x93\x44\x73\x8c\x8e\x3c\xba\xf2\x79\x47\x73\xdd\xef\xfd\xc9\x34\xd7\x9d\xb5\x55\xb9\xf2\xc6\x3b\xdf\xd6\x56\x7f\x91\xb6\x7c\x55\x73\xd3\xdb\x68\x79\x78\x51\xf9\x6a\x7f\xbf\x87\x17\x9f\x7f\xff\xa3\xe6\x66\x0b\xb5\xee\xd6\x7a\xb5\xfc\xaa\x31\x2e\x15\xb4\xb8\x1f\xe3\x82\x84\x63\xbf\x5a\x18\x0e\x15\x73\xd1\x6e\xcc\xb7\xc5\xad\x0a\x9a\xd5\x71\xba\x31\x69\x0c\xec\x5c\xc5\x0d\x3c\x35\x44\xb5\xbc\x2d\x31\x86\xda\xdd\x40\x4c\xd5\xa1\xbd\x9a\x46\xd5\x75\xbd\xb9\x08\x73\x8b\xd5\x40\x69\xdf\x5b\x73\x83\x88\xfa\x21\xc6\x08\x49\x30\xc2\x40\x12\x11\x91\x84\x60\x61\x8c\x82\xd0\x97\x7c\x8a\x99\xe4\xd1\x58\x8a\x80\x27\x49\x1c\xc7\x20\x94\x22\xe8\x49\x44\x48\x01\xa3\x02\xfa\x1e\xda\x6b\x6e\xfe\xa8\xb9\x93\xa6\x5b\xff\xfe\xe3\x90\xe1\xf2\xa6\xbe\x66\x82\x81\xeb\x3e\xf2\xd3\xd3\xf3\xf4\xc7\x07\x79\xcc\x15\x84\x5e\x59\x55\xfa\x7e\x1e\xe9\x32\x6e\xd4\x7b\xd5\x59\x7e\xd8\x6b\x02\x10\xe7\xc4\xbc\x60\xf0\x21\xd0\xaa\x6b\xb3\x91\x96\x9b\x58\x3e\x5f\x39\x7a\x17\x03\xfb\x42\x37\x24\xd0\x35\xa7\x4a\x4e\xa9\xaf\xd6\x59\x69\x7d\xd0\xef\xba\x23\x51\x4d\x5a\x6f\xda\x9a\x9d\x11\xf6\x74\xe3\xcc\xfa\x6d\x15\xa4\x79\x53\xdf\x96\x32\x8b\x39\xab\xd0\xce\xb2\xaa\xc7\x99\xea\xb6\x1a\x8c\xf5\x70\xc5\xbd\xe2\x24\x3d\xb7\x56\x2a\xae\x5a\xfd\x66\xaf\x5c\xec\xb5\xfd\xbc\xe9\x34\x79\xad\xad\x6d\x9c\xc8\x55\x68\x2c\xb2\x1f\xd0\xef\x67\x82\x7b\x55\xbf\x9f\xfc\xbd\xbb\x5a\x87\xaa\xa4\x56\xe7\x33\x37\xc8\x84\xad\x46\x29\x37\x9f\x7a\xa5\xd8\xae\x0a\x7f\xbb\x9e\xf7\x96\x7e\xa5\xaa\xcb\x03\x5f\x28\x71\x50\xc8\xcd\x5a\xae\x14\xb6\x36\xfe\xf1\xeb\x27\xec\xd5\x3e\x8b\x27\x5f\x7e\xf7\x95\x8f\x72\x67\x7a\xbd\xef\xa0\xf7\x61\x87\xf8\x52\x67\x2a\xdd\xb4\x02\x0a\xc0\xcc\x6d\x17\x9d\x75\x09\x0e\x5c\xe0\x6d\x27\x63\x28\x95\xf4\xcd\xaa\xa0\x6e\xcb\x74\xa1\x68\x81\xfa\x20\x43\x73\x6f\x31\xe8\x41\x38\xca\x1e\x5d\x20\x65\x7c\x84\xaa\x7c\x16\x4f\xbe\xf8\xee\x6b\x1f\xed\x46\x7a\xbd\xce\x76\x0c\xbf\x91\x5e\x59\xfe\xeb\x6c\xd2\xab\xf6\x11\x27\xe7\xdd\x7e\xac\xf5\x93\xdd\xb9\xfe\x17\xf3\xee\xd6\xb1\xbe\x94\xcd\xaf\xa4\xf7\xd1\xfe\x6e\xa0\x15\x55\xad\xa0\xe8\x2a\xda\x3a\xad\xb1\x79\x3d\x4f\x0d\x79\x61\xa5\xe0\x46\xf4\x2a\xdc\x2f\xf7\xcb\xae\xdf\xaf\xe2\x35\x08\xfa\xcd\xbc\x82\xfd\x14\xea\xe5\x63\x9e\xe1\xeb\x05\xb0\x69\x96\xec\x7a\x06\xc9\x6d\xbb\xf5\x6c\x0a\x8c\x95\x62\x5d\x1f\xca\x51\x33\xad\xdc\x7d\xcf\x07\x79\x02\x50\x0e\x51\xc0\x42\x08\x62\x29\xe2\xc4\xf7\x41\x10\xc4\x94\x78\x91\x84\x3c\xe4\x13\x1f\x46\x54\x30\x42\x61\x1c\x09\x88\xb1\x87\x08\xc6\x02\xb2\x98\xf9\x94\xf1\x60\x6f\x7f\xd9\xa3\xfd\x95\x4b\xd9\x56\xa6\xaa\xa8\x25\xdb\x69\x1a\xe5\x8c\x6a\x6a\x6e\x51\x56\xad\xa2\x5a\x6b\x69\x75\x8d\x34\x5a\xb9\x16\x56\x5b\x99\x16\xb6\x50\xad\x99\x27\x79\x9d\x53\x23\xcf\xdc\x9f\xc7\xc4\x7a\xf8\x50\x39\xe7\x4d\x4b\x2c\x00\x13\xe2\xaa\x25\x7e\x7a\x7a\x5e\x3e\xe0\x41\xf2\x95\x49\xd0\xeb\x6a\x76\x0b\x2c\x3b\xeb\x8d\x69\x76\xda\x8a\xe5\xe6\x1b\xb5\xba\xb9\x45\x76\x0b\x15\x0c\xc1\xe3\x69\x1d\x06\x4e\x9c\x3e\xf1\x9c\x0e\x5a\xf4\x0d\xcf\xe9\x41\xb3\xe6\x06\xdb\xb2\x51\x2d\x8d\x6a\x4c\xcf\x68\xfd\x61\x4e\xd6\xa4\xf6\xa4\x65\x3a\xa3\x42\xab\x34\x72\xe7\xbd\xdd\x22\x35\x69\xd6\x37\xd5\xb4\x74\x2a\x32\x4d\x48\x4e\x9b\xcf\xcf\x15\x39\xcf\x26\x41\xd3\x2d\xee\x64\x6d\xa8\x03\xa1\xb6\x60\xa1\x31\x5c\x2d\x4a\x99\xbc\xb7\xec\x6c\x52\x65\x63\xb8\xb0\xd2\x85\x3e\xe9\xd4\xed\xa2\x59\xad\x2b\xe5\xc8\xaf\xcf\x69\x43\xb3\x7a\x52\xb7\x36\x6b\xe7\x6c\xa0\xcd\xd7\xcb\x8c\xda\x42\x5d\x2a\x6b\xbb\x75\x3b\x37\x8e\x25\xb9\x7d\xa2\x05\xe4\xab\x16\xf9\xb4\xaf\xd7\x2d\xf2\xc9\x1f\x7d\xb2\xef\x27\x1e\x4f\xf0\xda\xf4\x39\xe3\xeb\x2b\x1f\xe5\xce\xef\xbf\xe7\x5e\xd1\x89\x46\x95\xbd\xa6\x41\x3a\x1a\x0a\x0b\xe3\xa0\x58\xab\xb9\xae\x6c\x23\x75\xd0\x1f\xd4\x82\x45\x1f\x85\xdd\xad\x55\xc6\x6c\x10\x36\xb3\x7a\xfa\xb0\xe3\x7e\xa2\xdd\x4b\xeb\x37\xd8\xf2\xb6\x86\x24\xb7\xbd\xff\xc1\xe3\xf8\xfc\xfb\x1f\x35\xde\x57\x09\xed\x7d\x35\x1e\xf5\x7d\x3f\x0a\x63\x9f\xa2\x28\x0e\x61\x48\x43\x89\xe3\x08\x21\x4a\x00\x20\xc4\x43\xdc\x17\x10\x52\xce\x11\x86\x04\x49\x38\xc2\xbe\x27\x7c\x18\xfb\x10\x45\x0c\x07\x1e\xda\x13\x71\xc8\x43\xbb\xd1\xe3\xa0\xef\xe9\x39\x09\xf1\x37\x3c\x8e\xa7\xa7\xe7\x25\x49\x6e\xf5\x38\x5a\x17\x03\xfb\x62\x6e\x24\x98\x6b\x57\x3c\x0e\x45\x2d\x16\x7b\x4d\x69\x53\xc6\xcd\xfc\xa4\xc2\x96\xb5\xb4\x03\x95\x69\xb8\xab\x76\x6a\x8a\x5b\xc1\xb4\xbb\x1a\xb6\x36\x96\xd2\x8e\xa7\x95\xb9\x9d\x19\x7a\x50\xd9\x95\xe7\xd3\xb4\x3f\xd4\x4d\x62\xa5\xe2\xbe\x6b\x56\x4d\x27\x6c\xb5\xbc\x5d\xd3\x2c\xa2\x2e\x19\x66\xf9\xc8\xd1\xef\xe5\x71\x9c\xce\x81\x4f\xae\xe0\xfd\x5a\x64\xd6\xc1\xc9\xd7\x8f\x3f\x7e\xdd\x0a\xfe\x8e\xf4\x7e\x8b\x87\x74\xe2\x71\xdc\xb0\x0a\x5d\x98\x64\xd0\xfc\xee\x55\xe8\xdf\x68\xd5\x2c\xcb\x7f\x9d\x4d\x7a\xd5\x3e\xa2\xe4\xbc\xdb\x8f\xb5\x7b\x14\x53\xa5\xfd\xc5\xbc\xbb\x75\xac\x2f\x65\xf3\x2b\xe9\x7d\xb4\xbf\x95\x5e\xc6\x80\xe9\xc0\x5e\xc0\xed\xd4\x29\xcf\xfa\x2b\x58\xaa\x78\xa3\x00\xb8\x4e\xbb\xa1\x95\x52\xee\x8c\x0e\x03\x7b\xed\xea\xac\x5f\xd0\xd6\x74\xb8\xa8\x04\xbb\x59\x7e\x85\x68\x67\x1b\x65\xd2\x23\x9a\x53\x9d\x5a\x5d\x6f\x34\x1a\x73\xb8\xb5\x4b\xe3\xa5\xd9\x89\x28\x54\xee\x7f\x56\x43\x7d\x3f\x44\x3e\xa5\x82\x32\x4c\xa1\xf0\xb0\x88\x24\x9f\x13\xc9\x0f\x89\x2f\x82\x28\x64\xc0\x97\x62\xdf\xf7\xb9\xc7\x7c\x24\x70\x04\xa9\x17\x49\x82\x12\x81\x01\xf2\x02\xb2\xb7\xbf\xe4\x76\xfb\xfb\x50\x02\xef\xe1\x2a\xe2\xd7\x2c\x2c\x01\x0c\xa0\xab\x7e\xc6\xf3\xd3\xf3\xe2\x5b\x89\xec\xef\xf6\x38\x90\xee\xc5\xc0\xaa\x17\xf2\x28\x2b\x66\x64\x0f\xf3\x55\x38\x9d\xa5\xd4\xd6\xd8\xd8\xf6\xe4\x38\xb7\x99\x19\xcd\x56\x7a\x61\xc0\xba\x11\xa2\x72\xdc\xea\x57\xc7\xeb\xcc\xee\x74\x29\xf8\xec\x67\x3c\xda\xf3\x5a\xb3\x4f\xbb\xfd\xd0\x9b\xa6\xdb\x43\x4f\x2d\x8e\xd7\xfa\x66\xee\x6d\xb3\x28\xe6\xb5\x52\xbd\xa6\x87\xbd\x11\x6a\x69\x5e\x51\x16\xa9\x5b\xe5\x55\x89\x9b\x9d\xd3\xfe\x9c\xec\x38\x56\xab\x8d\x75\x71\x16\x16\x66\x9d\xd1\x20\x95\x35\xac\x14\x87\x0b\x5b\x57\xe8\x6c\xb0\x53\xe7\x56\x7d\x9b\x1b\x55\xf1\x3c\x58\x19\x19\xa9\x34\x34\x0a\xb8\xd0\xd2\xc6\x92\x84\x96\xf6\x2a\x63\x48\x95\xc2\x76\x4e\x7d\x15\x6d\xab\x01\x6e\xb8\x55\xb0\xca\x76\x5b\xd5\x39\x01\x46\xae\x27\x5b\x56\xfb\x80\xdf\xf4\x9b\x8d\x7a\xb8\x1b\x96\x58\xa9\xa1\xf4\x5c\x87\x96\x57\x0a\xc6\x0d\xdb\xf1\x3c\xb4\xce\xb4\x9a\xb8\x3a\xcc\xda\xad\x4a\x25\x9d\xe2\xe6\xca\x0a\xfd\x41\x71\x51\x52\x37\x63\x61\x94\xdd\xc8\xaa\xb4\x25\x50\xf5\x7a\x75\x69\xa6\xa4\xfa\xc2\x4a\xd5\xb4\x89\xa5\xab\x17\xeb\x8b\xe2\xc9\x9c\x3e\xfe\xf8\x86\xaf\xf8\xc6\x7a\xe3\x04\x2a\x81\xfd\x6e\x94\x4e\x06\xfb\x52\x66\xbe\x64\xbd\x71\x3f\x7a\xbf\x7a\x7d\xa4\x1e\x07\xe1\x60\x83\xe0\xe9\x97\x06\xb4\xec\x4e\xf4\xc6\x74\x45\xcc\x61\xbb\x97\x2f\x2a\xc2\xcf\xcd\x3b\xe1\x28\x05\x7a\x75\xa7\x83\x5d\x2a\x0d\xab\xcf\x32\x75\x6a\x0f\x93\x9f\x0a\xa1\x1b\xde\xef\xc9\x81\x73\xc3\xfb\xff\x96\x36\xf8\x16\x7a\x33\x5c\x77\xbe\x91\xde\xc3\x83\x9b\xe7\x73\x25\xb5\x81\xdf\x38\x3f\xfe\x6e\xf3\xf9\x05\x7f\x3f\x69\x13\xd5\x46\x5b\xcf\x3e\x20\x39\xd7\xde\xf1\x29\x7e\x7d\xf6\xfd\xcf\x3e\xf1\xe7\xdf\xff\xda\x9a\xfa\x44\x9f\x25\x99\xcf\xfe\x31\x32\x52\x39\xe1\xff\xaf\x39\x9f\x2f\xf4\xcf\x57\xd2\xfb\xb8\xa6\x06\x4e\x7d\x9e\xc9\xe3\x1a\x23\x2d\x1a\x77\x6a\x99\xf4\x52\xf2\x9d\xcd\x3a\xf2\x68\xb0\x9e\x65\x60\xd0\x99\x80\x90\xeb\x85\xad\x9c\xb6\x5b\x5d\x55\xda\xa2\x6a\xde\x8a\xc3\x59\x9f\xaf\xb7\x96\xa3\x8a\x59\xb9\xb1\x5e\xcc\xfb\xcd\x12\x1c\x6a\x61\x61\xe3\x0e\x1d\xbf\x5c\x52\xe5\xff\xfe\xef\xdf\x21\x82\x70\xd0\x0c\x68\x2f\xea\xd5\xdb\x2e\xca\x96\xed\xd9\x3a\x94\x60\x1f\xe6\x86\x8b\xb9\x8c\xea\x12\x68\x75\x1c\xe4\x68\x56\x7a\xb9\xf5\x77\xb8\x41\xed\x82\x5d\x99\x7b\x96\x9a\x19\xea\x3d\x60\x58\xa1\xd6\x18\xc3\xd8\x5b\xc7\x13\x2b\x93\xee\x77\xf2\xf6\x66\x3d\x78\x7f\xb1\x8e\x3e\xb9\x58\x0f\x63\x1a\x83\x48\xf8\xd8\xa7\x18\x87\xa1\x14\x84\x1e\x88\x63\x4e\x09\xf0\xa3\x18\x47\x52\x04\x25\xcc\x24\xc0\x40\x2c\x3c\xe2\x03\x02\x89\x0f\x22\x1c\x40\x9f\x60\x48\x7d\x78\x38\x1e\xc0\xb7\x2f\xd6\xdf\x0b\xa7\x22\x08\x10\x8a\xae\x2e\xd6\x9f\x9e\x9e\xd7\xa4\xbd\x75\xb3\xac\x79\x21\x31\x2f\x36\xcb\x12\x2b\x86\xc7\xaf\x9f\x2c\x96\xb7\xfa\xba\xd3\x90\x72\xcd\x4a\xbd\x99\x83\xd3\xae\xef\x47\xd3\x5a\x6f\xe3\xee\x3a\x2b\x6a\xa8\x40\xe4\xd1\xaa\xd6\xdf\xec\x5c\x7b\x6d\x6e\xfb\xab\x8a\x18\x80\x54\x44\x8a\xa4\x83\xda\xcb\x71\x5e\x48\x73\xa1\x3b\xb1\x31\x35\xca\xbb\xcc\x70\x9c\x9b\x97\x6c\xaf\x10\xb8\x1f\x0a\xbf\x3a\x9b\x11\x57\x17\xaf\xc9\x8f\xbb\xc3\x51\x44\x58\xfa\xf8\xf5\xc6\xf1\xc7\x2f\x34\x76\xf7\xa3\xf7\x5b\x16\xdb\x27\x9b\x65\x37\x28\x7b\x14\xf2\xde\xec\xbb\x95\xfd\xdf\xc8\x38\xc9\xf2\x5f\xe7\x1c\xbc\xba\x59\xb6\x4e\xce\xbb\xfd\x58\x2f\x4e\x5c\x52\xf7\x8b\x79\x77\xeb\x58\x5f\xca\xe6\x57\xd2\xfb\x68\xd8\x45\x47\x18\xf5\x55\x75\x00\xb2\xf5\xcd\xc2\x1b\x0f\x11\x9e\xf6\xc7\xa2\x51\x24\x7e\xaa\x26\x2f\x2c\x75\x31\x03\x93\x62\x80\x34\xa1\x06\x93\x02\xb0\xcc\xd0\x1a\x2d\x33\x65\x23\x1c\x17\xa6\xea\xca\xf2\x2d\x05\xea\xdb\x7c\x37\x33\x5f\xd3\xa9\x32\xcb\x38\xa8\x8b\x73\xd9\xfb\x87\xc7\x05\xc2\x43\x22\xf6\x11\x0d\x09\x17\x24\xc6\xdc\xe3\x1e\xe0\x22\x82\x71\x14\xc5\x20\xf2\x31\x08\x3c\x46\x22\x49\x22\xfc\x90\xee\xe0\x05\x24\xf2\x00\xe3\x41\xc0\x10\x24\xec\xb0\x59\x86\x9e\x8e\xe7\xdd\x9a\x5a\xcc\x57\x5c\xa6\xb9\x85\x66\xd9\xb2\x6d\x66\x5a\x56\xb9\x99\x29\xd6\x4b\x4a\xc3\xb0\x2d\xbb\xd6\x32\xea\x8d\x06\x29\x34\xe4\x6a\x5d\x29\xdb\x3a\xad\xda\x05\x39\xf3\xf3\x58\x73\x1b\x20\x48\xde\xb3\xc4\x18\x08\x7a\xf5\xd8\xea\xf0\xf4\x90\x4c\x76\x56\xd2\xfd\x41\xf2\x33\x5a\xa7\x58\xcf\xe8\x5d\xb7\x19\xee\xe8\x4e\x0c\x38\x6e\xe6\xb6\xb3\x0a\xaa\x96\x04\x6d\x55\x1b\x70\x59\x98\xab\xa5\xca\x72\x18\xcf\x0f\x46\xf8\xe1\x78\xfe\xf0\xcd\xdc\xc5\x10\x9f\x58\xe2\x43\x50\x4f\xd6\x1f\x66\x17\x2d\x5b\x3b\x7b\xae\x64\xe4\x75\xf1\x34\x39\xb3\xc6\x5a\xa9\x4d\xff\xf0\x18\x6b\x1b\xb3\xa4\x73\x69\x9d\xab\x55\xdd\x56\x34\xb3\x2c\xb8\x2b\xba\x83\x68\x52\x9c\x2f\x3b\x63\x33\x4b\x57\xfa\x08\xb5\xd5\xb9\x3e\xcc\x4c\x1a\x71\xbb\x2c\xea\x79\x15\x2b\x55\x63\x58\x4e\x8d\x22\x69\x3e\x71\x9a\x83\xba\x5e\xec\x69\xcb\x4e\x59\x1f\x5b\x9d\x01\xec\xcc\x8a\xea\xc7\x8e\xdf\xf3\xa7\xa2\x7a\xd5\xe2\x9e\xfc\x51\xb1\xa6\x6d\x9c\x62\x64\x76\x42\x6c\x8d\xac\x6d\x73\x15\x06\x7e\x7e\x91\x69\x69\x78\x37\x18\x64\xfd\x06\x59\xae\x0d\xa8\x3e\xf5\xed\xb0\xca\xe8\x4c\x8f\xbc\x7b\x70\x85\x5e\x64\x6c\xbc\x63\x41\xef\xf7\xfe\x5c\x92\xf7\x9f\x68\xc9\xdd\xa1\xfd\x30\xeb\x37\x86\x9d\xad\x6c\xc8\x30\x8b\x83\x54\x90\x36\x23\x09\x6e\xe6\x53\x50\xea\xdb\x71\xb9\xe1\xd4\x17\x7e\x97\xcb\x3d\xa7\x30\x19\xf1\x07\xd6\xd7\x97\x6e\x03\x0e\x8a\xcf\xbc\xaf\x6c\x8a\xbd\x22\xb8\xde\xdf\x62\x92\xfe\x5e\xca\x9e\x56\xdc\xcb\xdd\xc9\x0b\x5e\xd1\xfc\xbb\x93\xc7\x9f\xec\xd3\xde\x0a\x19\xc5\x23\xb5\x07\x17\xf3\x65\x22\xdf\xdb\x9a\x1c\xdc\xf6\xfe\xdc\x38\xd9\xfb\x1f\x35\xf3\x57\x4d\xbe\xfb\x6a\x66\x18\x72\x81\x71\x40\x62\xcf\xf3\x81\x88\x18\x62\x40\xf2\x82\x18\x73\x48\x42\xe8\x7b\x7e\x84\x38\x43\xd0\x43\x3e\x46\x22\x0a\x63\xcc\x09\xa3\x91\x24\x79\x5e\x8c\x85\x14\x78\xfe\x5e\x33\xc3\x7b\x6a\xe6\x77\x7d\x24\x82\x39\xba\xae\x99\xf7\x4f\x0f\x9a\xf9\xec\x86\x8c\x5b\x35\x73\xf6\x62\x88\x3f\xa8\x99\xb5\x6d\x71\x77\x22\x22\x27\x9a\xd9\x68\x90\xed\x2c\x1b\xf6\x19\x8b\xdb\x99\x4c\x77\xc6\xdd\xac\x6c\x6b\x21\x1a\x0c\xca\x4b\x7f\xb7\x49\x77\x3d\x33\x28\xa2\x75\x3f\x8b\xc7\xcb\xa9\x59\x29\xa5\xe4\x5d\x77\x8b\x66\xf5\x45\x9e\xca\xe3\xed\xa4\x33\xee\x77\xd7\x73\xb7\xb9\xd2\x6b\xcc\xc9\x4a\xc5\x4e\x38\x72\xe4\x4c\xe5\x7e\x9a\xb9\x78\xb2\xfe\x48\xa0\x19\xbb\x99\x23\xef\x1e\x98\xf2\x49\xcd\x78\xc7\xf7\x27\xb2\x0c\x27\x5a\x6c\x73\x68\x7f\xb1\x66\x2e\x1e\x7d\xa3\xdb\x35\xb3\x6d\xec\x4e\x2d\xdb\x2b\x9a\xf9\xe4\xac\x2e\x89\x66\x34\x4f\xa8\x7d\x08\x90\x79\xc1\xc5\xb7\x35\xf3\x1d\x2d\xc3\x67\xde\xff\xa8\x99\xbf\x6a\xf2\xdd\x57\x33\x33\xc8\x02\x06\x24\x40\x78\x14\x8b\x58\x0a\x3c\x09\x08\x8f\xf0\xfd\x3f\x8f\xf8\x3e\x80\x82\x10\x29\xa0\x4c\xa2\x44\xf2\x42\x14\x78\x0c\x50\x09\x78\x9e\xcf\x09\x62\x3c\x12\x7b\xcd\x0c\xee\xa9\x99\xdf\x2b\xc0\x40\x28\xc7\x80\x5e\xd5\xcc\x4f\x4f\xcf\x2f\x1c\xba\x55\x33\x5f\x4e\xe3\x2b\x9a\xf9\xb5\x32\x1d\xda\x33\x5e\x45\x76\xab\xad\x92\xd5\x31\x55\x7b\xdd\x33\xdb\xb2\x29\xf9\x91\x86\x5b\xe5\xb4\x8e\xfb\xae\xd9\x71\x87\x75\x38\x51\x87\x5b\x1e\x88\xd6\x0c\xcd\xf3\x61\xbe\x3c\xf4\x0a\x23\x12\x0f\x65\x3a\xf5\x0a\xa9\x41\xa5\x98\x5f\x97\x6b\x9d\x45\x6f\xdd\x6f\x09\x53\xdf\x58\x4e\x28\x72\x72\xff\x7e\xda\xf8\x44\x7b\x25\xd1\x86\xc1\x91\x5f\x0f\xff\xbf\x08\x83\x79\x47\x1b\xdf\xef\xfd\x5a\x92\xf7\x9f\x1c\x7b\xde\xae\x8d\x9f\xfb\x52\x81\xa5\x5e\x40\x2e\xde\xa7\xde\x0f\xff\x4b\x34\xed\xcb\x32\x3c\x6f\x6b\xda\xbf\x48\xd3\xbf\xba\x13\xb4\xb9\x8d\x96\x87\xe2\x15\xc5\x23\x6f\xff\x42\x5e\x7c\xe6\xfd\x8f\x56\x47\xe9\x64\xfb\x20\xa5\xf5\x4d\x4b\x2d\x0e\x65\x79\x04\x17\xc4\x0e\xfb\x5c\xc4\x51\xb5\x3d\xcc\x76\x5b\xcd\x46\x3f\xef\x17\x16\xbb\xcd\x70\xe5\xad\x27\x60\xcc\x5a\xe3\x65\xdc\x49\xb9\x99\xe1\x64\xbc\x62\x75\x79\x3d\x93\x69\x3e\x87\x2c\xb5\x3a\x5a\xf7\x63\x4d\xaa\xe2\xb5\x7b\xff\xe2\x19\x52\x1c\xc7\x0c\x4a\x90\x71\xc8\x62\x1f\x51\x0a\x00\xc1\xb1\x17\x48\x4c\x78\x01\x0b\x20\x16\x00\x79\x31\x85\x9c\x79\x10\xc4\x01\x92\x20\x10\x71\x10\x07\x84\xd0\x28\xa6\x70\xbf\x30\x27\xd2\x1d\xad\x0e\x90\xde\xb3\x3a\x1c\xc1\xeb\x65\x7f\x9e\x9f\x9e\xdf\x4d\x77\xab\xd5\x79\x23\x38\x26\x99\x3f\xb0\xc9\x77\x75\xd7\x2d\x15\xcc\x6e\x03\xcf\x68\xaa\xaf\x9a\x43\xb1\x0c\xbc\x71\x9d\x2b\xc1\x4c\x1b\x55\x9a\x59\x1f\xcf\x61\x75\x5b\xdd\x3a\xbe\xdc\xcf\x0c\x3c\x75\xa5\xa5\xaa\xf9\x75\xb1\x35\x2e\x39\xb1\xdf\xaf\x38\xb9\xd9\x78\xb9\xad\xe7\xb7\xb0\x35\x71\xa2\x20\x50\xb6\xd3\xcc\x1d\x77\x6a\x8a\x27\x5f\x4d\x62\x01\xe0\xeb\xf3\xe5\xe4\xf3\x8e\x05\xba\xdf\xfb\x93\x25\x4a\x1c\xe7\xfe\x1d\xb5\x58\xa2\xd4\xf4\x7b\xbf\xff\x25\x3f\xde\x3e\x5b\xf8\x4a\x7f\xe8\x9d\xf3\x83\x24\xfd\x7d\x78\x59\xf1\xad\x1e\x7d\x29\xbf\x1f\x92\x51\x3e\xff\xfe\xa7\xf4\xbb\x2f\x52\x0c\xf7\xb5\x1a\x11\x61\x40\x82\x02\x70\x0a\x23\xce\x01\x22\x8c\x79\x42\x10\x2a\x28\x0f\x63\x82\x23\x12\x42\x4a\xa2\x40\x10\x9f\xf9\x5e\xc8\x50\x10\x51\xc0\xe3\x08\xa2\x18\x86\x5e\x7c\xa8\x11\xb2\xb7\x1a\xe8\x6e\xbe\x0a\x78\xdf\x6a\xe0\x37\x76\x91\xf6\x4f\xc9\xcf\xcb\x6b\x48\x6f\xb5\x1a\x6f\x14\x8b\x7b\xd5\x57\x79\xb4\x1a\x0e\x2a\xed\x4e\x16\xe0\x27\x56\xa3\xb7\x69\x8f\xec\xaa\xa2\x7a\x60\x04\xa3\xb8\x35\x0e\x36\x13\xad\xd7\x8c\x0c\xbb\x42\xe7\x9a\x6b\xd7\x43\x29\x1e\xaf\x97\x8b\x31\xea\x5b\x6b\x1a\x65\xd7\xed\xfa\x68\xc7\xca\xb3\xbc\xb9\x56\xab\x0b\x5a\x10\xdb\xc1\xb0\xd1\x95\xed\x66\xdd\xc0\xad\x6d\xdc\xc5\x5b\x3b\x3f\x55\xe4\x5f\xd2\x6a\x28\xaf\xcf\x94\x6f\xb3\x1a\x6a\x92\xf7\x7f\x8d\xd5\x30\xe4\xcf\x69\xed\x7b\x5b\x0d\x43\xfe\xdc\x8e\x8f\x2c\x7f\xb1\xdf\xf6\x05\xbe\x46\x52\xad\x2d\xdf\x89\xdf\x0f\xe5\xae\x12\x5b\x8d\xaf\x52\x0c\xf7\xb5\x1a\x44\x10\x48\x83\x10\xc4\xa1\x27\xf9\x81\xe4\x45\x3e\x8c\x81\x4f\xa0\xe4\xc7\x3e\x92\x24\x1e\x73\x0f\x79\x1e\xf4\x61\x14\xa3\x88\x42\x0f\x30\x80\x02\x06\x21\x20\x71\x80\x70\x10\x3c\x5a\x0d\x7c\x37\xab\xf1\x5e\xd2\x36\xe1\x88\x60\xf6\x86\xd5\x78\x78\x7a\x7e\xe3\xf4\xad\x56\xe3\x8d\xe2\xc8\x27\x56\xa3\x76\xfe\x3c\x83\x06\x20\xd8\x2a\x23\x1f\x57\xda\x01\x56\x3a\x2e\xaa\xef\x8c\x53\x89\x39\xb1\x22\xa5\xa1\xdb\xee\x8e\xdc\x4e\x33\xc5\xea\xf2\x7c\x00\xcd\xe5\x30\xde\xf4\x15\xca\xb7\xa8\xa0\xcf\xbc\x46\xc6\xe9\x57\x53\xf9\xcc\xa6\xd1\x10\x03\x3a\x89\xed\x7a\xb7\xb0\xd9\x70\x53\xd0\xfc\xac\x5c\x07\xd3\x92\xea\x92\x6a\xec\xcd\xdb\xd3\x4d\x16\x64\x55\xac\xcd\xdc\x20\x52\xef\x79\x16\x71\x6f\x2d\xfe\xd9\xb3\x88\xfb\xbd\x3f\x93\xe4\xfd\x5f\x63\x45\x8a\x72\x82\x7d\xfb\xbf\x70\x07\x47\x96\xef\x61\x45\x8e\xfb\xc0\xd2\x24\xd4\x8b\xed\x16\x92\x80\xa1\x97\xd6\x6e\xa3\x34\x08\xb6\x67\xe3\xf0\x05\x56\x25\xa9\x56\x97\xbf\x80\xff\x9f\x79\xff\xa3\x55\xf9\x2a\x45\x71\x67\x5f\xc4\x17\x54\xb0\x40\x82\x9c\x05\x24\x88\x51\x24\x18\xf1\x11\x45\x50\x22\xc2\x93\x38\x0a\x7d\x8a\x38\x09\x23\x44\x18\xc7\x8c\x49\x84\xe1\x08\x04\x5c\x20\x12\x44\x11\xa0\x7b\x05\x4e\xc4\xed\xb1\xbe\xef\x9e\x96\x08\x44\xc5\xd5\xa2\xaf\xcf\x4f\x9f\xac\x13\xc1\xe0\x0e\xb1\xbe\x8d\x8b\x81\x7d\xb1\x8a\x4c\xa0\xdf\xae\xc4\xfa\xaa\x72\xb1\x3c\x62\x39\xd2\x5b\xce\xdb\x93\xb8\x36\xd6\xd7\xa3\x85\x5e\xe9\xbb\x46\x66\x63\xa4\xeb\xa3\xad\x9e\x9e\x1a\xdd\x94\x1f\x16\x1b\xbb\x2e\xb4\x59\x63\xb0\x1e\x95\x53\x5b\xc3\x6e\x0f\x51\x6a\x58\xf6\x1a\x01\xdb\xd5\x97\x9b\x6e\xa1\xa7\x0f\x06\x3b\x25\xaa\xa4\x37\xf9\x55\xa5\x74\xaf\x58\xdf\xd3\x39\xf0\xc9\xd8\xd9\x58\xc4\xe3\xf8\x24\xb2\xaf\x7e\xfc\xf1\xeb\x62\x67\xef\x48\xef\xb7\xc4\x26\x9f\xd8\xac\x1b\xe2\x3f\xd3\x9b\x54\x47\xfa\xee\xf8\xcf\xbf\x51\xbc\xaa\x2c\xff\x75\xfb\x63\xaf\x9e\xf0\xac\x92\xf3\x6e\x3f\xd6\xe9\xa3\x50\x29\xce\x17\xf3\xee\xd6\xb1\xbe\x94\xcd\xaf\xa4\xf7\xd1\xfe\xb6\x33\x99\x49\xaa\xb3\x34\xf8\xcc\xc8\x37\xc1\x54\x11\x26\xaf\x02\x33\xa7\xca\xa2\x66\xc1\x96\xe8\xa4\x59\xd7\x58\x0d\xb1\x9d\x9d\x93\x85\x93\x1a\x4c\x02\x73\xb7\x9a\x77\x35\x62\x2e\x56\x93\xde\x70\x30\x2a\xcf\xa1\x3f\x77\xbb\x64\x43\x5b\xc1\xba\xd9\xb7\x44\x6d\x06\xee\x1f\xb7\x10\x79\x12\x8e\xe2\x50\x04\x28\x26\x11\xa1\x01\xc0\x50\x04\x4c\x8a\x02\x89\x0a\x86\xb0\x07\x22\x82\x39\x89\x09\x08\x29\x93\xa2\x28\x80\x88\x84\x04\x07\xc2\xa3\x24\x64\xe8\xc1\xfe\xde\xa1\x14\xe6\xbb\xbe\x9c\x44\x09\xbc\x9e\x6b\xb3\x7f\x7a\x38\x37\x02\x50\x30\x4c\x18\x07\xe0\x0e\xa5\x30\xeb\x17\x03\x7b\x62\x7f\x4f\xcc\x68\xfd\x49\xd7\x2a\xb2\xe2\xe8\xcb\xa6\x9b\x2a\xda\xed\x46\x7a\x9d\x59\xd1\x54\x29\x53\xef\x48\xf1\x9a\x0c\xa3\xf9\x6e\x13\x35\xcb\x92\xd0\xb5\x4a\xdc\x6e\xd6\x23\xb5\xc5\xa3\xb2\xaf\x1a\x68\x3c\xab\xe5\x9c\x92\x9c\xae\xe5\x99\x5e\x97\xd2\x4b\xbb\x5e\xdb\x18\x95\x4a\xc3\x98\x8f\x61\x65\xbc\xd1\x95\x8f\xf9\x66\xe6\xf1\x97\x0f\xab\xe6\x4f\xd9\x09\x63\xa6\xf5\x54\x77\xfd\x90\x58\x92\xe9\xe1\xb0\xad\x55\x26\xb0\x44\x1d\x1c\x2b\xb5\xb2\xba\x49\x8f\x66\xb4\xb9\xe8\xaa\xc3\x92\x89\xc6\x45\xb3\x55\xdc\xa4\x8a\x6e\x1e\x9b\xeb\x87\xaf\xc6\x41\x54\x38\x95\xfd\x23\x6d\x47\x1b\x5e\x48\x5a\x2c\xa6\xbb\xf4\x5b\xa1\xb5\x3a\xa9\x49\x79\x32\x79\xbf\xce\x26\xde\x91\xde\x6f\x59\x73\x9c\x44\x5d\x24\xd6\xeb\x79\xba\x18\x80\x94\x74\xac\x49\xf9\x3d\x7a\xfd\x6f\x64\x87\x0e\xfc\x3d\xa9\x12\xfd\x99\xb9\x52\xc8\x75\x57\x2a\xd7\xd2\xa9\xc3\xa0\x16\x2a\xf2\xf9\x98\x56\x3e\x8b\x97\x84\xbf\x9f\xa3\x77\xe6\xe9\x51\x3f\x08\x46\xdf\x43\xef\xab\x6b\x94\x13\x5e\x27\x91\xe5\xf4\x71\xa9\xa4\x5c\xea\xcd\x5f\x4b\x96\x5f\xce\xbd\xaf\xa4\xf7\x29\xca\xe5\x8b\x0c\xd6\x9d\xaf\x88\x41\x80\x87\x11\xf5\x39\x45\x04\x47\xc0\x07\x0c\x05\x58\x60\x1c\x53\xc1\x01\x66\x3e\x8f\xa4\x98\x11\x42\xb1\x1f\x11\x29\x8e\x29\x88\x71\x8c\xe3\x30\xe0\x14\xb2\x28\x60\xfe\x7e\x8d\xf2\x54\x2e\x34\x53\xa5\xb8\x21\x6b\x46\xbe\xec\xe0\x56\xbe\x84\x89\x5a\xd3\xe5\x86\xce\xf5\x3a\xcb\x33\xac\x2a\x66\xd5\xb1\x1b\x4e\x46\xc9\xd6\x8a\x2e\xaf\x56\x2b\x79\x5c\xb3\xf2\xe5\xda\xcf\xdf\x7f\x40\x09\x23\x8e\x29\x12\xf8\xdd\xd5\x0a\x05\x8c\x49\x57\xcf\x2b\x9f\x9f\x42\x89\x53\x26\x88\x24\x71\xf8\xbc\xf3\x5c\xb6\x42\x24\x57\xd5\x91\x83\x07\x76\x28\xb2\x06\x29\xe8\xa9\x68\x35\x88\x90\x91\x77\xc1\xc8\x6b\xaf\x07\xfd\x9d\x4e\x36\xed\xd9\xc3\xac\x3c\xac\x56\xd4\xc3\xa1\xfc\x1b\x51\x2e\xce\xb1\xfd\x49\xfc\x2b\x25\x3a\x3f\xf2\x51\x9e\x67\xbd\x26\x97\xfb\xb9\xb2\x65\x97\x95\x4c\xad\xc2\x47\x0d\xd4\x1a\xa5\xfc\xc1\x1c\x59\x19\x27\xf2\xfb\x28\xdd\xc7\xe9\xf6\x54\xcf\x57\x44\xe4\x96\xb3\xf3\x0c\x1b\x29\x91\xb6\xda\x16\x33\x82\x8a\xd5\x98\x2a\x9e\xdf\xab\xac\x15\xa9\x3b\xea\xc9\x8a\x51\x14\xd1\x3c\xd3\xe1\xbe\xd6\x57\x3f\xb0\x2a\x3a\xcd\x04\xb8\xbe\x32\x39\xd9\xe1\x25\x12\x76\x15\x2d\x1f\xda\x51\xbd\x84\xd7\x4e\xaf\x3d\x8f\x29\x4b\xd5\xb9\xdb\x9e\xf4\x6a\xe1\x34\xa3\x36\xec\x62\xdc\xcb\xa9\x8b\x6d\xa0\x6e\xc6\xb3\xf5\x72\x63\xa5\x47\xc7\x31\xb8\xf2\x79\x67\xa5\x71\xbf\xf7\xdf\x7a\x91\xc3\xd7\x58\xb6\xd3\xcf\xdb\xda\xf3\x6f\x62\x59\x5f\xb5\x54\x8b\x5b\x68\x7f\x12\xd4\xc2\x5b\xbb\x07\xdf\xc6\xbb\xcf\xbc\xff\xe9\xca\x9e\x89\xd2\xeb\x81\x5d\xbb\x02\xfa\x65\x0a\x17\xc3\x56\x7a\x48\xfd\x52\x6f\x0d\xf5\x21\x2d\xad\x68\x29\x4d\xf2\x9d\x6d\xdf\xd2\x87\x99\x8e\x2f\xa7\x26\xeb\x66\xa7\x20\x7a\x72\xba\x1c\x17\x58\xb9\xd2\x18\x12\x50\x94\x63\x77\x42\xd6\x72\x2d\x63\xe9\x33\x99\x44\x68\x63\xde\xbf\x0c\x6b\x88\x48\x4c\x04\xf3\x43\x8e\x50\x1c\x42\xc1\xa9\x2f\x08\x16\x58\x8a\x84\x00\x7e\x18\x45\x1e\x46\x24\x42\x34\xf4\x39\x60\x1e\x62\x5e\x4c\x23\x12\x7a\x9e\x08\x28\xe0\x30\x7a\xb2\x24\xe8\x46\x6f\xf7\xbd\x78\x17\x0a\x98\xa0\x57\x4f\x2e\x9f\x9f\x3e\xd8\x0f\x0a\xb0\xb8\x87\xb7\x7b\x59\x17\xe6\x75\xfb\xf1\x49\xfc\x5b\xec\xc7\x49\xd9\x56\xd7\x00\x76\xb1\x52\x6f\x58\xab\x91\x8a\xf2\x96\x9f\x99\x74\xa4\xe2\x76\x47\x9d\xe2\x52\xa9\x1a\xee\x02\xb9\x95\x70\x31\xb0\x5c\x95\x38\xba\x37\x74\x47\xfa\xbc\xd8\xee\x4c\x8c\x62\xec\xd5\x78\xb1\x11\xea\xcb\x9c\x2b\x60\x2a\xab\x8c\x77\xe5\x79\x2d\x95\xd6\x73\xe3\x4e\x25\xf3\x15\xf6\x23\x89\xa7\x78\x92\x5e\x63\xbf\xce\x8a\x8f\xdb\x8f\x1b\xdf\x7f\xa5\x36\x50\x12\xfb\x71\xc7\xd5\xfa\xe9\xe7\xc3\x3a\xf0\x57\xf6\x16\xde\xb3\x1f\x09\x68\x4f\x9f\x5e\xb8\x7c\x65\x7f\xf8\xdb\x78\xf7\x99\xf7\x3f\xda\x8f\x86\x5a\xd2\x76\x5a\xb6\xde\xe3\x74\xbd\xe8\xf6\xd0\x9a\xb9\xb1\x5d\x9c\xa7\xea\x99\x42\xdb\xa9\xe5\x0a\xe1\x50\xd3\xfd\x96\x8d\xe4\x65\x56\x41\x93\xa1\xb9\xe1\x19\xc3\xf0\x6a\x19\x1d\xf5\x97\xbb\xec\xa8\xca\x3b\x43\xab\x14\x77\x2a\x5e\x71\x37\xd3\x56\xab\xcd\x66\x6a\x38\xf2\xdd\xcb\x88\x52\x9f\xa0\x80\x73\x40\x50\x0c\x88\x1f\x73\xc8\x18\x95\x3c\x40\x23\x1e\x1c\xee\xae\x04\xd8\x8b\x01\x16\x1e\x0f\x3d\x4e\x7d\x08\x7c\x41\xb1\xe0\x80\x07\x52\x1c\x43\x8e\xe2\xbd\xfd\xb8\xbd\x8c\x37\x7c\x2f\xca\x9e\x42\xc1\xf9\xd5\x8b\xde\xf6\x4f\xc5\xd1\xa1\xc1\x88\xc0\x3b\x54\xf1\xbe\x54\x5d\x2f\xd4\xfd\xe7\x97\xb6\x67\xf2\x72\x7a\x58\x99\x53\x07\xd5\xc8\x0a\x64\x6d\x53\x49\x37\xf2\xb3\xf1\x18\xa7\x71\x18\x07\x1d\x2b\xbd\x35\x84\x5d\xcd\xcc\x66\xbd\x45\x3a\xe8\xb4\x04\x76\x0a\x5d\x3b\xa0\x64\x40\xd7\xc1\x0e\xca\x7d\xbf\xe0\x31\x55\xf6\x26\x61\x2d\x37\x71\x1a\xcd\x3e\xed\xcf\xed\x69\xa6\x59\x18\x11\xf9\x23\xb7\x88\x9f\xc9\xed\x55\x73\x70\xf2\xf7\x9f\x50\xc7\x25\x52\xf0\x8a\x46\x39\x3e\x4d\xd3\xaf\xbd\xfa\xe6\xf7\xcc\xc1\xfd\xde\x9f\xc8\x1c\x9d\x1c\x26\x26\x54\x69\xb8\xbd\x18\xaf\xdb\xf4\x76\x95\xf6\x17\xaa\x54\x59\xfe\xeb\x5c\x82\x57\xcd\xcb\x3c\x19\x2f\x9e\xc6\x42\x3d\x2e\x0d\x94\x44\xb7\xb8\xdf\x51\x16\x12\xdc\xe2\xde\x69\x4f\x9c\x66\x0f\xcb\x4a\xd1\xb1\x60\x77\xca\xf2\xa5\xb4\x84\x9b\xd8\xb0\xd3\xa2\x6b\x69\xa0\xc2\x18\xe1\x31\x36\x1a\x71\x09\xaa\xa4\x8f\xcb\x91\x19\x05\x7a\x51\xaa\x98\xb9\x2d\x5a\xb6\xdb\xb9\x69\xd3\xe9\x4c\xeb\xd9\x01\x2d\xb7\x0a\x1a\x6b\xc3\x2d\x4d\xc9\xf7\xbf\xc5\x3d\x02\x9c\xe3\x10\x70\xcf\xf7\x10\x0e\x21\x8c\x98\x07\x98\x0f\x10\x64\x02\x21\x89\xf8\x11\x8c\xa5\x18\x01\xe4\x21\x09\x31\x81\x38\x40\x88\x62\x89\x31\x14\x44\x28\xe0\xf1\x21\xc4\xf2\xa9\x4a\xb5\xaa\x5b\xcd\x5c\x3d\x93\xb7\xb2\x34\x6f\x13\xb5\x24\xdb\xbc\xc9\x79\xb9\xe9\xb6\xb8\x5b\xd7\x88\xa9\xe7\xb3\x19\x47\x57\x73\x6a\xbd\xa1\x16\x48\x9e\x58\x15\xc6\xf3\xf9\xd6\xde\x2e\x08\xc2\x04\xa6\x12\xe6\xe8\x5d\x43\x83\x24\x40\xaf\x26\x11\x3f\x3f\x85\x42\x48\x5c\x50\x46\x21\x7a\x4e\xe7\x32\x38\x1f\x4e\x4b\xf6\x56\xaa\x5b\xed\x61\x7b\x94\x4a\xa7\x97\xab\x9e\x25\xea\xe6\xc6\x84\x59\xbd\x42\x7a\xea\xcc\xad\xa5\xf2\x24\xa5\x1f\xb6\x54\x1f\x36\xba\x0e\x42\xfc\xc6\x46\xd7\xc3\x4a\x38\xd1\xf1\x8a\x3b\xeb\x91\x48\x3c\x14\xe2\xe9\x99\x7c\xad\xcc\xaa\x93\xf9\x2c\x18\x4d\x95\x4a\xa3\xb7\xdd\xad\x57\xf5\x1d\x5a\x51\xc7\xa4\x2c\xc7\x80\xd1\x69\xcf\xbd\x46\x25\x5b\x8b\x53\x7c\x3c\x24\x0c\xe5\xed\x71\x90\xd2\x4d\xc4\xbd\x42\xbd\x5c\x11\x38\xcc\x75\x60\x77\x35\x49\xd5\x8d\x65\x55\x33\xa7\xe9\x9a\xb2\xfe\xd0\x31\xde\x89\x68\x1f\x03\x9b\xdf\x3c\x56\x3b\x61\x44\x6f\xb5\xf4\xc6\xd0\x2a\x40\x27\xa5\x7a\x6a\xcc\xd3\x29\x96\x2a\xa6\x37\xce\x48\x1b\x39\x4e\x98\xe9\x16\xf3\x8b\x4e\x81\x3c\xf5\xf3\xe4\x4e\x1a\x75\xfe\xfa\x8c\x3a\x7c\xde\xb1\x36\xf7\x7b\x7f\xa2\xcd\xab\x93\x63\xaf\xd9\xc9\xa3\x4f\x6a\x98\x51\x11\xcb\x27\xc5\xcb\x93\x69\xb8\xbf\x50\xc3\x5e\x6a\x78\xb5\x9c\xa2\xd3\x9e\x23\x56\x75\x9b\x98\x63\x33\xbd\x4a\xf3\x19\xd9\xa5\xb3\xb5\xa0\x16\x56\xab\xa0\x6c\xac\xa7\x48\x5b\x75\x97\x56\x87\x1f\xf4\xea\x51\xd6\xf2\x6b\x39\xc1\xe6\xdd\x09\xbd\x9f\x98\xd7\xaf\x58\xa9\xd9\x6d\x7d\x78\x20\x30\x9f\xfc\x2e\xa3\x3b\xf2\xf0\x33\xef\x7f\x2a\x42\xf4\x45\x8a\xe7\xce\x49\xc7\x84\xfa\x0c\x72\x18\x46\x9c\x70\xcf\xc7\x08\xfb\x38\x08\x3d\x8a\x90\x04\x24\x8c\xc3\x18\x4b\x51\x18\x72\xc0\x60\xcc\x22\xc4\x00\x67\x88\x31\x1c\xc5\x01\x85\x7e\x10\xf8\x60\x6f\xa5\x6e\x2f\xcf\x0a\xc5\x7b\xb6\x89\x40\xcc\xaf\x86\x6c\x3e\x3f\x7d\xb2\x76\x5c\xa0\x3b\x84\x6c\x5e\xae\xd8\x5f\xe8\xb4\x04\x3a\xf2\xda\x5d\x46\x59\xbf\x86\x02\x3a\x9b\xb9\xa5\xdc\x7c\x50\xaa\xcf\x07\xb6\xae\x8b\x9e\xd8\x80\x76\x3b\x5a\xc3\x48\xd7\xcb\x8e\x5d\xf2\x7a\x45\x6b\x2b\x72\xee\x88\xa2\x6a\x6d\x5d\x1d\x05\xeb\xf5\x6a\x05\xa3\x9e\x16\xcb\xa9\x76\x7a\x68\x37\x8b\x93\xe6\x4c\x29\x0b\xc2\x55\xc2\xf2\xe3\xbb\x79\x41\xf9\x64\xe1\x13\xcf\x5e\x48\xea\xf8\xf5\xea\xab\x6f\x7e\xc7\x2e\xdc\xf1\xfd\x89\xbc\xb0\x13\x2f\xe8\x06\xbb\xb4\xb7\x0b\x99\x5b\xed\xd2\x5f\x68\x17\x65\xf9\xaf\xd3\xe9\xaf\x7a\x41\xc3\xe4\xbc\xd8\x8f\x45\xf6\xb8\x60\x54\x12\x1d\x70\xdd\x51\x16\x3e\xf3\xfe\x47\xfb\x52\x6d\x80\xc5\xa8\xec\x31\x94\xa9\xce\x4c\xbb\xee\x9b\xce\x66\x93\x36\xd2\xc5\xd0\x30\xf4\x79\xa9\xd9\xd9\xec\x06\xda\xae\x31\xde\x65\xc4\x4a\x19\x9a\xa9\xb0\xef\xcc\xb5\x16\x2e\x16\x0b\x5c\x6a\x8e\x37\xfa\xda\x1a\x5b\xb4\x0f\x77\xf9\x3a\x5b\xdb\xab\x72\x79\xbd\x2c\x77\xa7\xf7\xf7\x82\x42\xc6\x83\xd8\x47\x1c\x7a\x42\x48\x11\x17\x94\xc4\x71\xc8\xa0\x0f\x44\xe4\x05\x61\xc4\x59\x48\x59\xc4\xa9\x20\x8c\xc5\x01\xe6\x9e\x88\xa2\xff\x9f\xbc\xf7\xe8\x4e\x5c\xd9\xfe\x86\xbf\xca\x7f\x76\x07\xdc\xb5\xa8\x1c\x06\xef\x40\x28\x91\x85\x88\x12\x33\xa9\x24\x91\x73\xe6\xfd\xf2\xcf\x6a\x70\x1b\x8e\xdb\x36\x06\xe4\xee\xbe\xeb\xd4\xe0\xac\xe3\x2e\x60\x97\xaa\x4a\xfb\xb7\xf3\x56\x28\xc2\x01\x01\x71\x22\x42\x48\x7e\xe0\xcb\xcf\xf2\xa3\x06\x69\x54\x1c\x13\xb7\x6b\x0d\x8b\x77\xeb\x58\x6f\x9a\x2e\xae\xd1\x56\xb5\x99\xab\x98\x45\x43\x43\x76\xd9\x6b\xe6\xeb\xbc\x52\xd1\xea\x5a\xb5\x54\x2a\x1a\x5d\x5e\xaf\xd9\xd6\x0f\x5c\x60\x18\x01\xc1\x29\x47\xf4\x56\x72\x00\xa5\x48\xb2\x8f\xb5\xa0\x9f\xb3\x50\x00\x2c\x04\xc3\x80\xa2\x57\x77\x4d\x6d\x34\x71\x8a\x9b\x25\xb5\xb2\x13\x67\xdf\x2c\x1a\x61\x06\x84\x95\xb2\x5e\xb4\x8d\xfa\x18\x4f\xe2\x1a\xaa\xe4\x4c\xa3\x5d\x6a\xd4\x6a\xa7\x93\x3f\x6b\x41\xbe\xf6\x79\x29\xa5\xf3\x25\x5d\x20\xb6\x6a\xa9\x71\x22\xa9\x8d\x27\xda\x71\x31\xeb\x2b\x6d\xbf\x9e\xc7\x99\xd6\x20\x98\x6d\x4b\x3b\x63\xae\x6f\x11\x58\xb3\xd0\x3a\x21\x4d\xae\xde\x6e\xff\xca\xe9\x5a\xf3\x82\xc8\xf6\x4e\x3f\x6f\xd6\x4a\xca\x9d\x68\x4d\x7b\x1e\x6f\x97\xeb\xb1\xa6\xba\xd3\x6a\x21\x6b\x0f\x93\x72\xd9\x35\xe7\x32\x70\x0c\xdb\xae\x5b\xed\x0c\xd2\x49\xcb\x11\x51\x2b\xd3\xd2\x2a\xcd\x91\xde\xf0\xdc\xb2\x91\xd9\xd7\x82\xba\xbb\x3f\xee\x24\x6e\x28\x73\x36\x62\xf6\xd1\xd7\xd7\x6b\x9e\xfb\x5a\xd1\x8b\xfc\xf5\x55\xfe\x10\x71\xae\xdc\x20\x99\x86\x4f\x26\x6c\x3b\xf2\x32\x3e\xb7\x2a\xa3\xea\x96\xd7\x57\xbb\x55\x61\xe4\x57\x6d\x2f\xee\x92\xac\xbf\x33\xdd\xea\xeb\xb3\x5d\x95\x3d\x3a\xef\xed\xdb\x44\xa7\x97\xbf\x6f\x20\x4e\x7a\xf4\xdf\x12\xfa\x12\xfd\x2b\x2e\x37\xbf\xec\x8f\xbe\x0c\x17\xfb\xfa\xa1\x9d\xc5\xa3\x30\xf6\x0d\x67\x31\xb0\x76\x86\x8d\xc6\x9c\x36\x8a\x8b\x81\x58\x6a\xce\xa8\x94\x0d\x1b\x78\xbe\xf2\x4e\x1c\xd6\xb2\xda\xed\x17\x2e\x7f\xe7\xdd\x7c\x59\x4a\xf6\x75\xbc\xab\x49\x9c\xfe\x5e\xfc\x3d\xeb\xbb\x1e\xef\x22\xc6\xfc\xea\x18\x68\x71\x38\x08\x17\x99\x7a\x42\x87\xab\xd6\xc1\x45\xd9\xb5\x7d\xd4\x77\x83\x7a\x0f\x74\x23\x3a\x1d\xca\xa1\x56\xd7\x60\x63\x34\x3c\x9e\xa5\x87\x4b\x12\x57\xf1\xf2\x7b\x57\xe3\xe5\xef\xcf\x11\x63\xf1\x1c\xfd\x73\x30\xc3\xfd\xf4\x5f\x10\xe3\xbb\x5e\xfa\x94\x8b\xef\x45\x28\xc6\x20\x89\x28\x27\x12\x85\x09\x8a\x51\x08\x31\x8a\x61\xa8\x24\x0c\x28\x11\x01\x66\x12\x0a\x19\xc6\x61\xc2\x79\x1c\xa2\x10\x47\x02\x49\x88\x60\x20\x23\xa4\xe8\x49\x23\x81\x69\x22\xc6\x4d\x07\x3f\xa3\xf0\x54\x27\xfb\xf3\x59\xc8\x19\x90\x98\x31\x8c\x30\x7a\x1e\x31\x3e\x29\x68\xf1\x18\x62\xb4\xdb\x55\xf3\xea\xa6\x9e\xc7\x15\x62\x30\x07\x25\x31\xec\xb9\xb9\xdd\xcc\x01\x49\xa5\x5a\x35\x5b\xa5\x3c\x70\xa3\xb6\xd7\x1e\x9a\x9d\xb0\x4a\xdb\x65\x0a\x8d\x49\xbd\x15\x47\x7e\xa5\xe2\xad\x43\x8f\x16\x4b\xed\xc6\x71\x1c\xa0\x51\xc1\xde\x76\x7a\xe3\x15\x8c\xbc\x8d\x97\xef\xfa\xd9\x82\x33\x0e\x4a\x00\x2e\xbf\x18\x0e\xff\x35\xc4\xb8\xfa\xea\x23\x1c\x1b\x5e\xf6\xf6\xad\x9e\xf7\x35\xc4\x48\x8f\xfe\xdb\xb3\xbd\x17\x31\x66\x97\xfd\xb9\x9b\x23\xb7\x5b\xe0\xe5\x41\x52\xe7\xc8\xaf\xcf\xf0\x0c\xa2\xa5\xbc\xbe\xeb\x3d\x7d\x17\x31\xa6\x57\xc7\xf0\x00\xc7\x3e\xdb\x90\xce\x1c\xfb\xed\xf9\x7d\x09\x31\x9e\x44\xac\x73\xda\xf3\xfd\xf4\x5f\x10\xe3\xbb\x5e\xfa\x74\x11\x23\x10\x18\x25\x09\xe3\x40\x50\x15\xca\x38\x64\x09\x54\x24\xe4\x04\x24\x2c\x06\x18\x87\x81\x0c\x29\x10\x41\xc2\x11\x4d\xc2\x04\x01\x4c\x98\xe4\x48\x06\x8c\x04\x50\xca\x24\x79\x41\x0c\x94\x1a\x62\xdc\x0c\x29\x66\x94\x7c\xdc\x19\xf4\x34\x2b\xaf\x10\x83\xe3\x34\x74\x8c\x4f\x8a\x59\x3c\xab\x63\xbc\x8f\x18\xd0\x8d\xc5\xb4\xb7\xd3\xaa\x47\x92\x94\x17\xbe\xde\xdf\xd5\x87\x75\xba\x9f\xf6\x98\x2a\x2c\x5a\xb4\x93\x5b\x0f\x47\xdd\x9e\x45\x36\xbd\x76\x7f\x20\x8a\x6c\xd4\x9c\x6b\xfa\x76\xba\xf5\x56\x33\x5c\x68\x1f\x26\xac\x9e\x44\xac\x18\xb9\x1d\xe1\xaa\xf2\xc8\x6a\x7a\xb0\x62\x7f\xb1\x05\xc2\xef\x46\x8c\x87\x38\x76\x8a\xf4\x1f\xd2\x71\x52\x42\x8c\x6f\x94\xe1\xb5\x34\x10\xe3\x1b\x75\xa0\xef\xd0\x31\x1e\xe5\xd8\x5a\x4a\x88\x71\xad\xe3\x3c\x80\x18\xdf\xf5\xd2\xa7\xac\x63\x24\x01\x61\x3c\xa4\x38\xa1\x58\xb0\x88\xf3\x20\xc2\x54\x21\x0a\x50\x1c\x21\x15\xe1\x28\x12\x21\x61\x20\xa0\x61\x8c\x50\xc8\x42\x24\xa0\x08\x05\x0c\x55\x84\xe3\x08\x45\xc1\x0f\xc4\xf8\x59\xe0\x5b\x6f\x77\x68\x59\xaf\x77\xad\x1a\xaf\x99\x55\xaf\xa9\xd9\x4e\xbb\xe0\x7a\x9a\x61\x54\x5b\x9e\xd7\x2d\xea\xd5\x92\x45\xda\x6e\x0e\x15\x4a\xbc\x83\xca\xb5\x62\xc7\xe2\xf8\xd4\x3a\xed\x82\x18\xe4\xa6\x6f\x5e\x00\x22\x3e\xb6\x4a\xfd\x9c\x85\x1c\x72\x29\x98\xa4\x12\xbf\x46\x81\x95\xd6\x9b\xa5\x95\x2f\x7a\xd9\xb8\xbe\xa6\xbd\x0a\x5b\x14\x3c\xad\x12\x06\xde\x76\x5c\x98\x2c\xca\x87\x95\xc6\xdc\xa5\x5c\x97\xe3\xc9\x3e\xd1\xfe\x89\x18\x9f\xf8\xe6\xcf\xf3\x17\x9d\xe1\x8e\x9b\x96\xbf\xbc\x50\x97\xdf\xb3\x5e\xe9\xbb\xa5\xaa\x28\x27\x6b\x2d\x48\xe2\x99\x66\x4f\xb6\xf3\x95\x39\x1b\x2d\x26\x84\x0f\xb5\xcd\x62\x47\x7a\xb0\xd5\x19\x4e\xca\x60\xc8\xdc\xda\x04\x0e\xf7\xb3\x60\x7c\x34\x76\x46\x03\x77\x32\x55\x94\x77\xf2\xd1\xb0\x51\x1c\x9b\x6e\xd0\xdc\xdb\xb9\xc4\x2d\xe5\xfb\x4b\x36\xad\xae\xae\x51\x40\xfb\x10\x35\xae\x9b\x00\x7d\x8c\x1a\x57\x1f\xba\x13\x31\x4f\x3e\x72\xe7\xb2\xbf\x1f\x8c\x1b\xa8\x91\x1e\xfd\x67\xcb\xb1\x5e\xd2\xdb\xee\xe6\xca\xb7\x38\xdd\xcb\xf8\x9c\xd3\xa5\x4d\xff\xde\x72\xac\x7f\xa9\x9e\x75\xcb\x57\xf2\xc8\x5e\x9d\xd7\x5a\xfc\xa5\x7c\xd6\x57\xf6\x2a\x8d\xb3\xba\xd6\xa3\xee\xa1\xff\x82\x4a\x33\xbc\x5b\x67\x40\x6e\x2e\x59\x4f\x0b\x82\xcc\x64\xd7\x18\x34\x16\xe1\x70\x53\xd1\xd9\xd2\x18\x18\xed\x7a\xe0\xf8\xdb\x46\x6d\xae\x65\xc2\x4e\xcd\xee\x2f\xbc\x4a\x4d\xab\x96\xa3\x90\x60\x5f\x91\x08\x55\x0b\x93\x56\x3d\x37\xaf\x99\xbe\x25\xb5\x59\x6c\x6f\x17\x0a\xed\xd2\xf7\x95\x80\x50\x85\x8c\x07\x01\x66\x94\x10\x96\x44\x88\x90\x24\x56\x49\x82\x03\xa0\xb0\xe4\x89\x80\x09\x0e\x64\x08\x31\x41\xe2\xd4\xc3\x81\xc6\x9c\xb3\x88\x10\xae\x40\x08\xe3\x9f\xa8\x84\xd2\x42\xa5\xdb\x96\x2f\x01\x3e\x31\x7c\xbd\x4c\x9e\x31\x89\x03\x00\x2e\x76\xaf\xc7\x31\xe9\x13\xbb\xd7\x99\xa7\x5d\xb4\x92\x14\x31\xa9\x52\x6b\xf7\xfc\x24\xb3\x03\x32\x8a\xe7\x46\x63\x5f\x51\xc5\xe9\xb0\xdd\xcd\x6b\xc8\x1a\x8f\x72\x93\x7e\x6d\x32\x00\x55\xc6\xac\x4d\x5f\x3b\x36\xe3\x51\x47\xe9\x4e\x25\xd2\x0b\x40\xb5\x54\x66\x5f\xec\x1f\x76\x65\xaf\x51\x19\x94\x34\xb6\xab\xb1\x92\x24\xd5\xfa\xd8\x1a\xbb\xe6\xdf\x88\x49\x0f\x15\x7b\x4d\x91\xfe\xb3\xc5\x5e\x53\xc4\x84\x87\x8a\xbd\xa6\x4d\xff\xde\x62\xaf\x7f\xa9\x26\xf7\x2e\x26\xfd\x21\x4c\xd0\xbe\xe1\xac\xee\xa1\xff\x82\x49\x3b\xd9\xc9\xf5\xb3\xdc\x68\x42\xc8\x46\xd5\xb2\xb9\xdf\x4d\xe2\x6a\x7b\xa4\x0c\xbf\xd3\x71\xed\xc0\xcc\x04\x65\x17\x2f\x67\x1d\x66\x1a\xd5\x2a\xab\x77\x77\x05\xb2\x07\x85\x61\x7d\x5f\x3f\x72\x73\x92\x2f\x6b\xeb\xa8\x70\x28\xcc\x8c\xa5\x96\x9d\x2d\x71\x0f\xda\xad\x4e\x5b\x4b\xdd\xb6\x06\x21\x07\x34\x91\x44\x45\x8c\x46\x3c\x64\x1c\x07\x10\x91\x40\x50\x15\x63\x26\x94\x00\x89\x20\x54\x24\x49\x10\x47\x49\xc2\xa1\xc4\x80\x44\x22\x11\x44\x52\x4c\x43\x12\x83\xff\xfc\xf7\xff\xb0\x4c\xd1\x1b\x73\x5b\x53\x92\xe8\xe3\x64\x99\xf3\x1c\x64\x9c\x02\xcc\x91\x60\x04\x3c\x6f\x57\xbb\x95\xaa\xff\xf6\x26\x5c\x71\xac\x2f\x8d\xdc\xab\x7e\x6e\xea\x87\xa1\x11\xc0\x38\x33\x5c\x7b\x9b\x51\x73\x99\x1f\x6f\x1c\xbe\x07\x95\x3d\xef\x0c\xc9\xa4\x3e\xab\x90\x06\x6d\x69\xd6\xa4\xde\xce\xa0\x65\x7b\xb6\x1f\x56\x76\x0b\xab\xd8\x5f\xfb\x53\x53\x6b\xb5\xa1\xcc\xe8\xf4\xa0\xe6\x74\xe8\x94\xcb\xf3\xce\x7e\xa9\xc7\xf5\x52\xd1\xfd\x52\x13\xef\x2f\xa5\x4e\x5e\xa7\x5a\x3f\x60\xcf\x7a\x89\x1e\x7e\x5c\x33\x4a\x91\xfe\xb3\xa9\xf7\xdf\xe8\x35\x78\x19\x9f\x73\xb6\x3f\xe4\xb5\xb8\xa5\x79\x3c\xb2\x96\xa7\x35\x8f\x14\xf7\xe2\x1e\xfa\x2f\x5c\x7e\x35\xdb\xa1\xb5\xb7\x9d\xf1\x36\x9f\x9b\x6c\x4f\xc3\xe1\x46\x44\x46\x25\x86\xb3\x4c\x71\x14\x18\x8e\xb9\x69\x6b\xb9\xee\xa8\x9d\xac\x17\x30\xa8\xf8\xc7\x4a\xa9\xdf\xf0\xc3\x4e\x71\xaf\x59\x56\x94\x24\xbd\x8d\x9a\x96\x62\xff\x38\x38\xb0\xf6\x2a\xd8\x4d\x47\x8d\x41\xeb\x1b\x9a\x44\x07\x49\x1c\x0a\x20\x00\x45\x28\x0e\x03\x0e\x55\x80\x91\x40\x88\x86\xa1\x4a\x38\x86\x00\xc9\x38\x52\x49\x80\x28\x51\x02\x71\x45\x68\x18\x53\x01\xc2\x20\x96\x54\x71\x84\xe1\x0f\x2e\xff\x7c\xe1\x56\xc8\x6e\xf0\x76\x06\x30\x17\xf0\x23\xee\xfe\x3a\xfb\x82\x16\x0c\x62\x92\x42\x14\xf0\xdb\xd3\xfd\x85\x37\x3c\x20\xf1\x7e\x10\x05\x6c\x4c\x8f\xdb\x6a\xcf\xf4\x73\x70\x83\x73\x76\x33\x6f\x19\xe3\x42\x67\x3a\x02\xb6\xb3\xe0\xb9\xca\x3c\x51\x87\x78\x57\xac\xaf\x8a\x25\x39\x6e\x92\x7c\xb3\x62\xee\x2a\x2e\x1a\x36\x8a\x87\x65\x67\x92\xe3\xfb\x28\xb7\xcf\x97\x82\x6a\xc5\x73\x03\xad\xb0\x67\x7a\xa3\x5f\xf6\xe6\x6e\x3e\xad\x28\xe0\xe2\x63\xa9\xe9\x55\x52\x0e\xdc\x43\x2d\x43\xbd\xcb\xd7\x6b\xef\x52\xbe\xc5\xdf\xd3\xa3\xff\x01\xc7\xf8\xb2\x96\xf1\x78\xe4\xe9\xdc\x28\x64\xf9\x58\xbd\xf9\xe5\x5f\xc7\xe7\x3c\xed\x89\xc8\x57\x0a\x84\x6c\x3f\x41\x5f\xd3\xfe\x9c\x35\xe9\x5d\x7c\xe9\x3f\xbc\x17\xa7\xb3\x98\x5d\xbd\x8b\xe2\xce\xbd\x78\xf2\x2c\x4e\xf4\xaf\xe0\xe9\x2e\xfa\x2f\xf8\x42\x05\x3f\xfa\x39\x5b\x8b\xc2\xf5\xae\x3e\xda\xef\x5d\xda\xb0\xe6\xb4\x9a\x1b\x2e\x36\xbb\x66\xc9\xc3\x95\xe9\x4a\x6f\x85\x7a\x63\xdb\x6d\x65\x72\xe0\x98\xab\x18\x66\x75\x06\x06\x6a\x01\xe7\xbd\x58\x78\xae\xaa\x1f\x26\xc3\xa6\x05\xec\x9e\x5e\x89\x7b\xa3\x59\x03\xb2\x56\xfa\x59\x26\x08\x53\x12\x25\x02\x20\x08\x21\x81\x22\x90\x52\xc6\x18\x2a\x24\x19\x89\x20\x0b\x45\x9c\xc4\x22\x26\x12\x85\x3c\xe2\x24\x8a\x29\x91\x58\x0a\x44\xa1\x04\x31\x04\x04\x26\x2f\xf8\xf2\x64\xa9\x16\xc8\x6f\xe3\x8b\x94\x1f\x7a\x59\x5e\x67\x7f\xe2\x0b\x25\x17\xfd\xe1\x71\x7c\x79\x9b\x11\xf1\xcb\x1b\xf9\x80\x2c\xfb\x11\xbe\x18\xac\xb3\xd5\xfc\x32\xdc\x0d\xc6\xab\x88\x1f\x7d\xa3\xb8\x06\x03\xcb\xc9\x8e\xe7\x73\x97\xd9\xc5\xe2\x34\xab\x89\x56\x71\x2c\x87\xcd\x61\xa5\xea\x0c\x37\x6e\x2d\xb7\xd6\x78\xd2\xd8\xd7\x69\xa9\x09\x72\xdd\x72\xb8\x76\x0f\x62\x61\x8d\x0f\x2b\x50\x60\x49\x33\xce\xaa\x9d\xf3\x17\xe0\x8b\x13\xd5\x6a\xed\x67\xf9\x7b\x8a\xf4\x1f\xca\x72\x49\x05\x5f\x7e\xe1\xef\x0f\xe9\x0f\x7f\x30\xb3\x42\xd3\xfe\x9c\xce\x90\x72\x96\xc9\x53\xfc\x5d\x4b\x09\x5f\xae\x64\x8d\x47\xf0\x65\x97\x19\x2f\x77\xb6\x2e\x55\x61\x1e\xe6\x63\x81\xb4\x43\x18\x15\xfa\xcd\x2d\x0d\x82\x96\xd3\x1f\x34\xba\xd9\x5d\xcd\xd2\xbb\x89\x0f\xc8\xd1\x68\xce\xf8\xc8\xd8\x85\xae\x83\xc1\xaa\x15\x37\x46\x52\xeb\x34\x10\x6f\x55\xb6\xa5\x7e\x57\x2d\xab\xba\x33\x05\x78\x8b\x2b\xe9\x37\xc1\xa3\x08\x0b\x11\x48\x11\x93\x18\x33\x05\x39\x27\x32\x90\x04\x73\x82\x38\x50\x8a\xd1\x30\x0a\x39\xe2\x50\x85\x14\x22\xce\x13\x20\x69\x10\x04\x22\x81\x2a\x90\x11\x46\x48\xfd\xc0\x97\x9f\x85\xaf\xf5\x62\xa9\xe8\xd5\x4a\x39\xab\x90\x77\x1c\x4c\x28\xed\x78\x1d\x9b\xea\x46\xae\xeb\xb9\x55\xdf\xaa\xd7\xed\x82\xee\x57\x6a\x2d\x17\x53\xbd\xe6\x92\x4e\xbb\x81\x4b\xdd\xf2\xc9\x73\x42\x20\xc7\x58\x22\xc0\xf9\xad\x2c\x13\x06\xa9\x80\x1f\x6b\x32\x3f\x67\x21\x15\x12\x62\x2e\x09\x20\xaf\x11\x60\xc5\xd2\x08\xc7\xb3\x62\x2b\xaf\x78\xe2\xc8\x75\xbc\xdf\x0c\xec\x7c\x95\x54\x77\x9d\x4a\xb3\x60\xf5\x87\xcc\xc5\xa0\x49\xd4\xba\xd3\x39\x05\x08\x9d\x2d\x55\xa6\xf6\x79\x96\xc9\x5b\x7f\xfe\x83\x05\x92\x2e\x37\xf7\x95\xbe\x5b\xa1\x0d\x7d\xd6\x81\xc0\x2c\xce\x4a\xb9\xdc\x6e\x57\xd9\x80\xf6\x2e\x93\x64\x42\x17\xd8\x43\x57\x5a\x0e\xdb\xe1\xb1\x74\xb3\x56\x41\xad\x27\x82\x23\x22\xd6\x72\xe8\x35\xc3\x31\xa8\x47\xa4\xda\xb3\xd5\x6c\x02\x0e\x33\x7b\xdf\x53\xc5\x81\x59\xdf\x75\xed\x5c\xc5\x73\x55\x6a\xbe\x93\xe2\xd5\x57\x47\x8b\x66\xc4\x7a\x63\x37\x3a\xae\x05\x47\x90\xdb\xac\xe0\x2b\xdc\xc3\x39\x7f\x5f\xe9\x75\xec\xda\xdc\x48\xea\xb5\xfe\x01\x76\xc3\x93\x65\xef\x2a\xd3\xc3\x7c\xfd\xbd\x7b\x7d\x17\x29\xd2\x37\x1f\xa1\x7f\x95\x73\x3f\xba\x7c\x5f\x6f\xcc\xab\x78\xa1\xb7\x73\xd8\xc1\xc7\x6d\xe8\xad\xc2\x59\xbf\x7f\x8c\x0d\x65\x0d\xcd\x43\xce\xf7\x33\xa3\xaa\x34\x33\xf9\x72\x7b\xbc\x3e\x7d\xfe\xca\x9f\x7d\x6f\x51\xb9\xab\xe1\xd0\x65\xe9\xfd\x35\x5f\xf9\x62\xee\xbc\xff\x5a\xbb\xdd\xfc\x09\xc7\x77\xd6\x92\x48\xfb\x7e\x3c\x74\x3e\xa9\xd3\xff\x65\xbc\xfb\xcf\xef\x21\xe1\x95\x54\x79\xef\xfd\xb8\x44\x96\x9d\x5b\xa1\x55\xb4\x07\x7c\x6b\xe3\xe7\xe8\x9f\xed\xc3\xf7\xd3\x7f\x41\xc2\xe3\xb8\x50\xea\x87\x9e\xeb\x4e\x7a\x33\x33\x6f\x68\x07\x5e\xf7\x0c\x9a\xa5\x6b\xc3\x0d\xaa\x06\x68\xf1\xa5\x11\x7b\xd0\x10\xad\xfe\x01\x85\xc7\x6d\x38\x3c\x60\x54\x8d\xaa\x1b\xaf\x6e\xe1\x1e\xd2\xba\x87\x41\xd8\x2c\xf5\x42\x3b\xb7\x9b\x14\xea\xf9\xdc\xc8\x37\xf7\x51\xfa\x9a\x16\x21\x2a\x64\x4a\xc4\x11\x89\xc2\x58\x51\x82\x82\x04\x06\x41\x84\x30\x00\x30\x8a\x64\xc4\xb8\x50\x09\x94\x4a\x28\xc2\x60\xc0\x28\x8e\x39\x43\x01\x47\x14\xc7\x51\x1c\x09\xf4\x03\x09\x59\x9a\x48\x78\x2b\x16\x9a\x61\xca\xe9\x87\xe5\x95\x5f\x67\x21\x25\x0c\x0a\x81\x18\xa7\xe8\x79\x24\xfc\x24\x16\xfa\x69\x24\xe4\x93\xd5\xec\xfa\xe6\x5e\x90\xd0\xc9\xc4\xcd\x42\xcd\x6b\x75\x47\x19\x5b\x5b\x70\x87\xe5\x45\x04\xb3\x9d\x26\x0d\x37\x33\x10\xcc\x87\xe5\xbe\xdd\x5b\xe7\xe2\xc6\x61\x8c\x79\xab\xcd\xcb\xfa\xbc\x9b\xe8\x53\x66\xf8\x6d\xc5\xc7\xae\xd3\xae\x76\xfa\x39\xc5\x4b\x86\xc6\xab\xb1\xc0\x5a\x9d\xc0\x91\xaf\x8d\xd2\x43\xc2\xab\x0f\x3d\xc2\x69\xe0\x65\x7f\x1f\xf2\xe2\xa7\x48\xff\x21\x24\xbe\xe2\x74\xc3\xcb\xf7\xff\x36\x24\x3c\xfd\xfd\x97\x22\xf5\xbb\xfa\xd3\xf0\x32\xff\x08\xd7\x3e\x7b\xd9\x0b\x97\xbb\x7a\x2f\x6a\xa4\x88\x5a\xf7\xd0\x7f\x41\x0d\x4e\x69\xa5\x27\xa3\xfa\xa4\x49\x7c\x7d\xb9\xe2\xb3\x64\x8f\x3d\xd9\xad\x8d\x37\x6c\x58\x5f\x4c\x2a\x1b\x33\xd0\x81\x45\xcb\x25\x2f\x59\xd7\xbd\xd5\xaa\x34\x1e\x8b\x52\x32\xab\xf6\xdb\xc7\x4d\x5b\xa3\x2d\x18\x98\xd6\x71\x35\xab\x18\x2b\xc8\x8f\x2a\x97\x1f\x76\xea\xbd\xf4\x1b\xf7\x91\x18\x11\x82\x92\x18\xc5\x22\x8a\x84\x62\x82\x51\x0e\x94\x4c\x28\xe6\x81\x0a\x51\x42\x01\xa4\x38\x90\x42\xe0\x44\x44\x50\xca\x90\x25\x84\x03\x18\x87\x48\xc8\x10\x07\x27\x2f\x3f\x4d\x13\x35\x6e\x45\x9e\x31\x42\x11\xfb\x18\x35\x7e\xce\x42\x0a\x30\xc2\x82\x4a\x42\xd9\xf3\xa8\x71\x33\xf6\xec\x5b\x50\xa3\xba\xe9\x2d\x32\x39\x0c\xe6\x51\x78\xdc\xb6\xdb\xf6\x51\xd6\x1d\x9c\x31\x2a\x71\x3d\xea\x2c\x54\xd6\x5b\x45\xa8\xea\x47\x3d\x56\xcd\x6d\x78\xbc\xda\x3a\x51\xb3\xe3\xe2\xe9\x76\x96\x33\x8b\x87\xd8\x3e\x0a\xd3\x94\xc7\xba\x3b\x68\x0c\x16\xb3\xe5\x2e\x3f\x9e\x64\x34\x3b\xd9\x15\x52\x43\x8d\xc2\x95\xfe\xf7\x00\xd7\x7e\x89\xfd\xba\x8a\xbf\xbd\x93\x6b\xa7\x48\xff\xb1\xd8\xb3\x0b\xa7\x1b\x5c\xbe\xff\xbb\xb9\xf2\x97\x32\xf5\xff\x52\x54\x7b\x17\x35\x06\x97\xf9\x47\xb8\xf6\xd9\x6b\x7f\xe6\xda\xf7\xc6\x76\x5f\xed\xd5\xc3\xf4\xaf\x51\xeb\x1e\xfa\x2f\xa8\x81\x98\xbe\x24\xf9\xa4\x31\x86\x5b\x47\xb6\x5b\x61\x0d\x9a\x3c\x21\x95\x3d\xb5\x60\x30\x3f\xca\x78\x8f\x7d\xd8\x47\xc6\x0c\xd8\x7c\xcd\x0e\x82\xc2\x6a\xd7\x88\xe3\x4c\xcf\x74\xa7\x45\x12\xd6\x76\x6e\x13\x57\x2d\xbd\x58\x2a\x2d\x06\x5b\x2d\xee\x84\x44\xeb\x66\xd3\x2f\xc0\x1f\x00\x1a\x05\x41\x8c\x30\x08\x61\xc2\x09\x26\x9c\xc4\x02\x07\x21\x8b\x88\x80\x3c\x4a\x60\x82\x13\xce\x19\x83\x01\x8f\x04\xa4\x09\x67\x08\xa8\x38\x46\x81\x14\x40\x12\x71\x42\x0d\x92\x22\x6a\xb0\x5b\xb1\x61\x8c\x32\xf9\x71\x16\xcd\xeb\x2c\x24\x0c\x20\x21\x24\x82\x0c\x3c\x8f\x1a\x77\x64\xd1\xdc\x81\x1a\xf8\xbd\x88\xe5\x2b\xd4\xc8\xf9\xad\x69\x1b\x17\xa0\x83\xa9\xa9\x1d\x82\x03\x98\xac\x86\x3d\x5c\x39\x76\x93\x60\xaa\xaf\xb7\xc1\xb8\x64\xdb\x19\x49\xe6\x31\xab\xef\x7b\x66\x76\xa4\x8f\xd0\xa8\xd9\x94\x79\xaf\xe7\x0d\xc3\x65\xb0\xc8\x66\xdd\x2c\xd8\x16\x81\x36\xd3\x35\xaf\x11\x37\xa1\x68\x0d\x7b\xe9\xe9\x1a\x85\x2b\xdb\xfc\x23\x5c\x7b\x7a\xd9\xdf\x0f\xc6\x0d\xd4\x48\x8f\xfe\xb3\x59\x34\x69\x73\xba\x5f\xc7\xe7\x9c\xee\x0f\x72\x5a\x4d\xfb\x7b\x51\xf3\x56\xac\xc1\x23\x7b\x75\x5e\x6b\xe1\xb3\xfd\xf8\x6d\x67\x75\x0f\xfd\x17\x54\xb2\xfa\x8d\xc8\x53\xc3\x16\x4f\x46\xae\x51\x5c\x96\x1b\xc1\xc1\x31\xd4\xb1\x3a\x96\x0b\x55\x42\x72\xd1\x9a\xf9\x21\xc7\x83\x31\x9f\xe7\x6d\xad\x99\x71\x4b\xcd\xa0\x5e\xad\x81\x28\xce\xc5\xd5\xcd\x7a\xb1\xcc\x4a\x23\xdb\x10\x53\x57\xef\x15\x72\x51\x91\xd6\xbc\x7d\xc3\x49\x5f\x97\x61\x11\x17\x09\xe4\x49\x90\x04\x08\x43\x1e\xb1\x20\x61\x5c\xc6\x30\xa6\x04\x81\x04\x53\x88\x00\x4f\x12\x06\x55\x94\x24\x08\x2a\x06\x40\x1c\x88\x44\x50\x48\x69\x88\xe3\xe0\x14\xcb\x96\x42\x45\x4b\x7a\x0b\x8b\x18\xe5\x1f\x37\x41\x7d\x9d\xfd\x89\x6e\x44\xb0\x14\x62\xd9\xde\xc6\x5d\xfd\xf2\xae\x3e\xc0\x0b\x3f\x6a\x42\x9e\x99\xf4\x4a\x85\x63\x77\x91\x8c\xdd\x42\xa9\xb0\xe8\x4c\x65\x79\xa9\x06\x9b\x83\xb9\xe7\x5e\x2d\xf1\xec\x56\x7f\x7b\x70\xf1\xaa\xe0\xe6\xa6\x76\xe4\x74\xfa\x23\x67\x4d\x79\xab\x95\xe5\xb4\xbc\x6e\x1d\xc8\x32\x56\xcd\xcc\x70\xe9\x23\x95\x2f\x75\x87\x18\xcf\x37\x9b\x58\x58\x69\xc5\x1a\x5c\xbf\x03\x77\xfa\xfa\x9b\x79\x77\x13\x5f\xd9\xaa\x9c\x77\x29\xdf\xc2\x9f\xf4\xe8\x3f\x14\x4b\x77\x85\x3f\x4f\xc4\x4f\x55\x22\x9d\x92\x67\xe3\xa7\xfe\x60\xfc\x96\xa6\xfd\x39\x9e\xfe\x2e\xbe\x84\x8f\xef\xc5\x8f\xb3\x60\x57\x25\x3d\xc9\x9d\x7b\xf1\xec\x59\xbc\xbd\x0b\xf7\xd0\x7f\xc1\x97\xed\x7c\xa6\x0f\x2a\x28\x98\xd2\x96\xae\x0f\x4a\xe3\x79\xb6\xc1\x70\x61\xb9\xea\x57\x62\x78\xc4\x70\x3f\x2e\x84\x62\x54\xe5\xba\xa9\x75\xf7\xd3\xe6\x78\xd6\x35\x96\x71\x0c\xad\x5a\x26\xd3\xe0\xed\xca\xa6\x84\xa7\x66\x76\xc6\x50\x75\x9a\x3b\x4c\x7c\x29\x59\xb8\x9c\x6e\xd3\xaf\x36\x13\x86\x32\x62\x8c\x12\x08\x61\x12\xc4\x14\x40\x2a\x09\x01\x20\x52\x12\x40\xc5\x41\x44\x38\x11\x32\x60\x1c\x32\x1c\xa1\x00\x93\x44\x86\x38\xc6\x28\x90\x08\x06\x14\x44\xa7\x58\x83\x9f\x15\x2d\xf5\x82\x65\xd5\xdd\x52\xbe\x92\x67\x45\x83\xeb\x25\xea\x14\x88\xd7\xd6\x7d\xbd\x52\xad\x57\x2d\x56\xf3\x35\x5e\x6c\xea\x75\x6c\xd5\xf2\xb5\x62\xd7\x6d\xfa\xbe\x95\xa3\xe6\xa9\x81\x25\xa4\x92\x11\x08\x39\x00\xf8\x16\xd2\x70\x4e\xf0\x87\x0d\xc8\x5e\x67\x21\xe6\x04\x0b\x49\x39\x65\x97\x58\x83\x5c\x63\xdf\x9b\x71\x23\xd3\xa8\x91\x71\xa4\x86\x63\x36\xd8\x15\x87\xfe\xba\x4c\x33\x5a\xd2\xac\xb4\xa2\x71\x1c\x31\xb5\x9b\x0e\xcf\x1d\x96\x4e\x48\x93\x3b\x95\xdd\x2e\xbf\x39\xe2\x4f\xb2\x62\x3e\xf0\xc5\x7d\x3e\x72\x95\x22\xd9\x9d\x7e\xc9\xd4\xac\xc3\xba\xb5\x1f\xee\xab\x24\x9c\x16\x2b\x4b\xb3\x38\x6a\xcc\x97\x53\xb3\x21\x07\xf6\xdc\xd9\x6b\xab\xaa\x63\xf9\xcb\x66\x2d\xbb\x5f\xdb\xed\x51\xb6\xd6\x45\xb3\x66\xbf\xd5\xc9\x64\xfb\xe5\x7a\x61\x94\xe9\xfb\xbe\xd9\xb3\x10\xb4\x13\x2a\xaa\xd9\x20\x2c\x96\xac\xf9\x62\xbc\x2a\xa4\x95\x15\x73\x5d\x65\x77\x64\x95\x6d\x7d\xb8\xaa\xd1\x42\x76\xd0\x86\x07\xc7\x5b\x94\xb5\x49\x75\x00\xb6\x53\x92\x93\x95\x7d\x1d\xb5\x29\x9e\x1f\xf5\xb8\x72\xfe\xe5\x1f\xe8\x9a\xb4\x2e\x7b\x5a\xba\xfc\xfe\x99\xbb\x3f\xe2\xcf\xd6\x51\x9b\xf8\x1d\xb8\x0b\xed\xd6\xc6\x47\x72\x7d\x5a\x61\xef\xca\xb2\x9d\x3f\x44\x48\xad\x3b\x05\x53\x2c\x66\x62\x94\xdb\x17\x90\x35\xad\x1e\x03\x3f\x59\x4b\x63\x6d\xe3\x4a\x58\x68\x19\x07\xbf\xe3\xee\x9d\xd3\x4a\x7e\xe9\xed\xe5\xbe\xb1\x94\xde\x79\x87\xb4\xb1\x5b\xc6\x67\xcf\xfd\x89\x1b\xea\x17\xc9\xfc\xb1\xa6\x75\xa7\xef\xaf\xc7\xb1\x6d\xad\x95\xbd\x1f\x97\x27\xd5\x6d\xe8\xfe\x58\x61\xe1\xca\xde\x97\x13\xd3\x68\x5a\x6e\x0f\x72\xb5\xd2\xa2\x56\xd4\x54\xa3\xda\xef\x1e\x15\x9a\xe4\x79\xe2\xf2\xfa\xfa\x68\x1f\x2c\x4d\x4c\xac\x51\xa5\x79\x66\x71\x6f\x7b\xab\x5d\xd9\x0f\x77\xff\xda\xe7\xbf\xd2\xa9\x75\xb7\xb5\xf2\x4b\xce\x2e\x3b\x1a\x66\x8a\x9e\x57\xa0\xf1\x6c\xa5\xfb\xa8\xdc\xc8\x24\xbd\x3c\x38\x5a\xf9\xae\x37\x8d\xa7\xaf\xef\xf0\x0f\x24\x95\xf2\xb4\x12\xfb\xb4\xde\xab\x1e\x12\xe7\xf5\x3d\x12\x8f\x54\xee\x7a\xfd\x7e\xe8\xe5\x56\xdd\x06\x1d\x86\x08\xfc\x58\xa1\xae\x5d\x65\x35\x25\x45\xdc\x3d\x40\xbf\xd7\x3c\x2c\x86\x07\x37\x6f\x0e\xfd\x8e\xc2\xd5\x79\x3f\x83\x81\x03\x42\xb5\x5f\xf5\xdd\x5a\xb1\xdf\x35\x4c\x7a\xfa\xf8\xfb\xef\xfb\x05\xbd\x93\xa7\x9e\x3f\x73\x36\x07\x9d\x9f\x7f\xf6\xe4\xf3\x57\xbe\xfb\xf9\x5f\xd7\xf7\x2c\x7f\x3b\xb5\x12\xfa\x1f\xe1\x6f\xe7\x36\xdb\x6a\xd9\xae\xf8\xa2\x19\xdb\xf4\xd0\x2c\xed\xf5\xae\xb9\x08\xe8\xde\xdc\xfa\xfd\x45\x73\xe5\x96\x8d\x66\xbf\x53\x02\xc7\xac\x08\xeb\xe3\x6e\xed\x88\xa2\x85\x49\xda\xd6\x76\x4b\x1a\xa0\x51\xac\xcd\x3a\x76\xae\x90\x8b\xd6\xf5\x69\x26\x31\x12\x34\x39\x34\xfa\x41\x30\x0f\xf5\xd4\x6b\x49\xb0\x10\x0b\x15\x45\x54\x41\x1e\x25\x08\x40\x1c\xd1\x80\xc6\x08\x42\x45\x42\x8c\x10\x14\x21\x0b\x63\x09\x01\xa2\x18\xb2\x10\x06\x41\x88\x44\xa8\x20\xc2\x90\x31\x48\x23\xfa\x22\xa5\xa0\xd4\xa4\x14\x72\x5b\x4a\x61\x1f\x77\x1f\x3a\xcd\x5e\x49\x29\x0c\xb2\x8b\x3e\xfc\xb8\x94\xf2\xb6\x88\xee\xd7\x72\x77\x6f\x8d\x87\x38\xea\xd5\x68\xfe\x7c\x43\x72\x9a\x13\x82\x85\xdd\x99\x8e\x60\x67\xd9\x68\x79\x0d\x36\x70\xad\x99\x0a\x0a\x8e\x9f\xcd\x19\x93\x9e\x0d\x8f\xcd\xc9\xb8\x76\xe8\x81\x70\xd6\x18\x44\x78\xd8\xcc\x95\xf0\x51\xb6\x44\xa6\x50\xb3\x35\xc7\x2c\x57\xcb\xbd\x91\x9b\x5f\xf7\x6c\xdf\xea\x59\x76\x65\x30\x83\x7b\x3f\xf3\xc5\xaa\xab\xbf\x5b\xba\x29\x5f\x7e\xff\xa1\xb7\xff\xfc\xa3\xff\x63\xd2\xcd\x39\x50\xe5\x09\x74\x3f\x8d\xff\x5d\xe9\xe6\x7f\xe8\xf9\x53\x94\x6e\x76\xff\xbc\x4f\xa9\x4b\x37\xd7\xe3\x5d\x3b\xc3\x93\xcf\x92\x01\xda\xbf\x50\x52\xf9\x5f\xd2\xc4\x4e\x92\xca\x77\x81\x47\xca\xb9\x81\x52\x46\x8a\x31\x0c\x23\x2a\x68\x40\x69\x10\x63\x06\x50\xc2\x18\x88\x15\x0d\x69\x00\x80\x10\x11\x22\x01\x24\x21\x26\x44\x71\x14\x2b\xa5\x50\xc0\x50\x24\x03\x21\xb1\xf8\x21\xa9\xc0\x34\xed\x29\x37\x73\x37\x24\xc1\xf4\xc3\x1a\x23\xaf\xb3\x10\x63\x48\xb0\x94\x00\x71\xf4\xbc\xa4\x52\x7a\xef\x46\x9f\xc7\xef\x96\x54\xae\xe8\x5d\x49\x2a\x60\xb7\x1c\xc4\xcb\x69\x63\x99\xa1\x35\xe4\xea\xf1\x6c\x0a\x37\x43\x3a\x59\x3a\xe5\x6a\xd3\x59\xd6\xfc\x5a\x6d\x40\x97\x03\x55\xde\xf4\xb2\xd3\x65\x6c\xb6\xfa\xab\x5e\x23\x3b\xc2\x63\x4d\x16\xed\x79\x3b\x8c\x32\xeb\x40\x55\xcc\xd2\xc4\x2b\x4d\xac\x7d\x5e\x37\x2b\xc3\x4e\xed\x8b\x1d\x45\xbe\x24\xa9\xe4\xaf\xe3\x84\xee\x7f\xfb\x7b\xf6\xe5\x2c\x8a\x97\xdf\xff\x7b\xde\xfe\x5f\x2c\xab\xee\xe9\x68\x2f\x7f\x3f\x80\xd4\x24\x77\x62\xc1\x67\x3b\xc4\xdb\x3a\x89\x7f\x85\x1d\xe2\xdd\x38\xa7\x8b\xa4\xf2\xef\x7c\xfe\x7f\x93\x1d\xe2\x3d\xe9\x26\x7e\xee\xf9\xcf\x97\xe6\xfc\xfc\xa3\xbf\xf1\xf9\xdf\x8d\x28\xfa\x37\xf1\xb7\x93\x74\xf3\x5d\x80\x93\xae\x74\xa3\xb0\x8a\x08\x0f\x30\x84\x31\x40\xa7\xb2\x9e\x1c\x29\x0a\x08\x62\x21\x0d\x29\x21\x24\xa6\x88\x41\x82\x61\xa2\x28\x67\x20\x16\x31\xe5\x84\x71\x25\xb8\x8a\x88\x3c\x75\x81\xc6\x20\x4d\xe9\xe6\x56\x3e\x0e\x07\x82\x7f\xec\x2d\x3a\xcd\x9e\x3a\x6d\x22\x21\x88\x04\x08\x49\xce\x9e\x97\x6e\x8a\xef\xdd\xe8\xf3\xf8\xdd\xd2\xcd\x15\x47\xbd\x92\x6e\x78\xb7\x52\x5a\x08\xb0\x51\x6e\x63\x9d\xa1\x74\x91\x61\x6d\x77\x69\xe3\xfc\x72\xcb\x8e\xf9\xb5\x53\xde\x8d\x12\x6d\xbf\x5f\x75\x23\xbf\x56\xd8\x8c\xf8\xbe\xbb\xea\x85\x87\xbe\xa3\xb7\xbd\x61\x3f\x76\x5c\x79\xe8\x69\x1d\xb8\x5d\x1f\xc2\xc8\xb3\x09\xd4\xf6\x0d\xab\xbe\xd6\xd2\x94\x6e\xae\xe3\xd9\x1e\x78\xfb\x93\xcb\x59\x14\x2e\xbf\xff\x77\xbe\xfd\xaf\x7f\xe7\xae\x7c\xcc\x8f\xa0\xfb\x99\x65\x9e\xd1\xfd\x6d\xfc\xda\xdf\x8b\xee\x57\xd2\xcd\xbf\xf2\xf9\xff\x4d\xe8\xfe\x9e\x74\x13\x3d\xf7\xfc\x46\xef\xf2\xfc\xbd\xbf\xfd\xf9\x5f\xff\xfe\x37\xf1\xb7\x73\xde\xd8\x37\x01\x4e\xca\x5e\x26\x99\x30\x12\xc4\x20\x11\x40\x86\x40\x48\xc9\x14\x4c\xb0\x24\x71\xcc\x25\x05\x00\x06\x04\xc4\x71\xcc\x64\x10\x85\x8c\xd3\x20\x64\x38\x4c\x22\x28\x31\x8a\x70\x10\x24\x21\xfa\xcf\x7f\xff\x0f\xc9\x34\xa5\x9b\x5b\x79\x63\x1c\x0a\xf6\x71\xdd\x8d\xd3\xec\x29\xea\x12\x11\x4a\x09\xa0\x94\x09\xf0\xbc\x74\xf3\xb6\xd1\xf2\x1d\xd2\xcd\xbb\x79\x67\xef\x8f\x2b\x69\x65\xc0\xe4\xc2\xc8\xab\x71\xbb\x21\x35\x61\x6b\xc1\xe2\x30\x62\xb3\xc2\x7e\x50\xd1\x51\xc9\xf3\xcc\x69\x6c\x0d\x86\xc9\x3e\x4f\xdb\x87\xb2\x5d\x70\xbb\x55\x6d\xef\x38\x4a\xaf\xcd\x0b\xc1\xb8\xc5\x6a\x70\xee\xd7\x3d\x5c\x22\xce\xb8\x94\xef\x92\x7e\x21\xda\x17\x8f\x06\x4b\xd3\x6b\x94\xbf\xfa\xea\x23\x6f\x33\xb9\xec\x6d\xfe\xf2\xfb\x7f\xe7\xdb\xfc\xfa\x77\x0e\x5c\xfe\x7e\x04\xad\xcf\x71\xa6\xe1\xe5\x42\xfc\x4f\xa0\xf5\x95\xb4\xf2\xaf\x7c\xfe\x7f\x13\x5a\xbf\x27\xad\xa8\xe7\x9e\xdf\x32\x2f\xcf\xaf\xfe\xf6\xe7\x7f\xfd\xfb\xdf\xc4\xdf\x4e\xd2\xca\x77\x01\x4e\xba\xd2\x4a\x12\x63\x0e\x78\x12\x46\x54\x09\x42\xb0\xa4\x8a\x4a\x91\x60\x18\x29\x0e\xa5\x62\x10\x41\x11\x11\x15\x07\x24\x16\x51\x14\x9d\x64\x16\x8c\x13\x22\x18\x03\x42\x42\x00\x7e\x48\x2b\x22\x35\x69\x85\x49\x79\x2b\x72\x97\x23\xc9\xd8\x87\x9e\xa6\xd7\x59\x88\x00\xa2\x12\x08\x81\x45\x0a\x31\x31\xb7\xea\xd9\x3f\xc6\x71\xef\xb5\xdd\x5c\xd1\xbf\x8a\xf4\xcd\xda\x85\x9e\x29\x57\x7e\xcd\xde\x85\xfa\xa0\x10\x95\xa3\xfe\xcc\xdc\x20\xaa\x1f\x72\xa0\xab\xa9\xc9\xd0\x9d\x4d\xdd\xc2\x7a\xc3\x1a\x26\xe8\x05\x8d\x5c\xbb\x99\x1d\xc7\x98\x52\x2d\x1b\xed\x60\xb5\x16\xcc\x3c\x5f\xd6\xb2\x1b\x30\xdb\x48\x83\xf7\x69\x3b\x84\x89\x2a\xa5\x26\xd5\x5c\x7d\xe8\x81\xb7\xbe\x5f\xbf\x9c\xc1\x07\xe3\xf3\x9c\x8e\x14\xe9\x3f\x5b\xff\x3e\x45\xae\xff\x50\x4e\xe3\xf7\xd0\x7f\x3c\x56\xe3\xc1\x1c\x90\x47\xd6\x7e\x26\x64\x7f\xd6\x5f\xe2\x5b\xf7\xee\x9c\x63\x78\x3f\xfd\x97\x1c\x90\xda\x7e\x50\xc8\xd5\x42\xdb\xd8\xaf\xec\xdd\x6c\x90\x6f\x60\x3f\xc8\x95\xd7\x1b\x77\xd5\x8b\x6c\x37\x5f\x9c\x81\x52\x11\xe8\xe5\x70\x33\xea\x57\x0b\xf6\xa8\xd7\x6e\x65\xa9\xb7\xce\xc4\x6e\x0d\xab\x6a\xb3\x89\x16\x16\xaa\x35\xb3\x7c\x5d\x2a\x6f\xdd\x0c\x89\xdb\x1d\xe9\xe1\xf4\xfb\x47\x62\x42\xe3\x84\x27\x82\x2a\x16\x07\x48\xf2\x18\x27\x52\x92\x24\x8e\x13\xc4\x65\xc8\xb0\x80\x88\x21\xc1\x04\x0c\x23\xc8\x71\x00\x13\x06\x29\x14\x34\x20\x98\x89\x98\x9c\xaa\x6c\x21\x91\x5a\x74\x25\x93\xf2\x56\x74\x25\x47\x52\x88\x0f\x5b\x75\xbd\xce\xbe\x20\x89\x44\x24\x0d\xbd\xf7\x93\x7a\x29\x9f\xe8\xbd\x9f\x67\x6b\xfd\xe3\xf7\x2e\xc8\x60\xf8\xfb\x05\x3e\xce\x03\xab\xa0\xa3\xa2\xda\x14\x5b\xe1\xd2\xc5\x15\xcb\x3b\x2e\xb6\x9b\x0c\xb5\xb9\xd7\x1a\x90\xea\x34\x3f\x4e\xc2\xf2\x66\x3d\xe5\xec\x30\x76\xd5\x70\xb3\x2b\xf7\xc2\x96\x8d\xc6\x0b\xe5\x26\x63\x4e\xa3\x59\xad\xd5\x3d\x6c\x96\xa5\xb5\x55\x83\xcb\x51\xe5\x2b\x95\x8d\x7f\x37\x32\xbc\xb5\x0d\x3c\x14\x25\xf9\x1b\x91\x44\xff\x1d\xeb\xfd\x1e\xe4\xb9\x32\xdb\xa4\xce\xf9\xb5\x6f\x40\xaa\x67\xd7\x6b\x7e\xb2\xde\x77\x91\xea\x0f\x21\x45\x5a\x7b\x77\xae\xd1\xf2\x30\x52\xa1\x4a\xb0\x16\xac\xd3\x6f\x68\xeb\x81\x57\x1e\xb4\x6d\x06\xaa\xc7\x5c\x5b\xb0\x25\xdf\x6e\xea\x1b\x08\x0b\x1b\xa3\xbb\xa7\x1e\x3a\xf0\x65\x37\x93\x59\xcd\x5b\xf9\x02\x5f\xe9\xc4\x86\xb9\xf5\x3c\x98\x9a\x79\x1a\x67\xbc\xc0\x80\xb6\x5a\x2e\x0e\xcb\x7a\x53\x06\xd4\x48\xbf\x32\x32\x0a\x20\xe1\x98\x46\x3c\x04\x14\x02\x89\xa9\x24\x84\x04\x2a\x8a\x04\x8f\x79\x12\x4b\xa4\xa4\x88\x25\x92\x34\x42\x61\xc0\x60\x08\x68\x8c\x68\x04\x13\x1e\xc7\x10\x24\x11\x7e\x41\x2a\x9c\x1a\x52\xdd\xca\x8b\xe7\x18\x80\x4f\x74\x1e\x0c\x00\xbf\x02\x2a\x46\xd3\x70\x3f\x7f\x52\x0e\xf2\x13\xa0\xfa\xac\xbc\xf8\x9b\xdf\xbb\x52\x61\x4a\x1b\x17\xc6\xfb\xca\x46\xf4\xa3\x44\x44\x4e\x2d\x6e\x95\x3d\x64\xd8\xfc\xc7\x5d\xe9\x74\x0a\x2d\x2b\xef\x15\x2b\x1d\xdb\x96\xa5\x49\x7b\xe9\xce\xba\xc6\x1a\x35\x58\x90\x85\x1b\xdf\x6c\x17\xa7\xdb\xad\x9f\x35\x67\xc5\x0a\xad\xcf\xdb\xc3\x3e\xea\xea\x2b\x0c\xda\xbe\xf6\x17\x02\xd5\xb3\x8c\x3f\x77\xfd\xdd\xf7\xf6\x34\xe5\xf5\x1a\xbf\x63\xbd\xdf\x03\x54\x57\x59\x2c\xa9\x33\x7e\xed\x1b\x80\xea\xd9\xf5\xde\xdd\x82\xec\x0f\x01\x45\x5a\x7b\x77\x2e\x41\xf9\x30\x50\xe9\xcb\x51\xd5\x5b\x35\xcb\xdb\x82\xe7\x65\xf3\xcd\x21\x1e\xeb\x50\xf6\xf6\x9b\x1d\x52\x71\x7b\x3c\xb0\x72\x75\x78\x68\x5a\xfd\xfe\xb6\x31\x1f\x07\xa0\x64\xbb\x3c\x1a\x6d\x26\x5b\x19\x4e\x72\x56\xa3\xcb\x39\xaa\xed\x4b\x7a\xd3\x69\x05\x6d\x9f\x44\x13\x77\x59\x95\x56\x27\xfd\xe6\xc7\x24\x91\x54\x0a\x04\x58\x10\x42\xae\x12\xc4\x43\xaa\x70\x1c\xca\x58\x02\x16\x31\x1c\x87\x71\x8c\x18\x3a\x27\xde\xa3\x38\x08\xa3\x08\x85\x2a\xe6\x61\x02\x91\x52\x2a\xf9\xa9\x52\x91\xd4\x80\xea\x56\x33\x32\x8e\x01\xa2\x1f\x07\x4a\xfd\x9c\x3d\x23\x15\x04\x80\xa5\x11\x06\xfe\x49\x09\xff\xef\x71\x25\x6a\x11\xab\x1c\xf3\xc6\xb0\x15\xd5\xd7\xf9\xd9\xf1\x68\x4c\x0d\x3c\x2c\x6a\x99\x4d\xdd\xd0\x83\x25\xae\xb9\xeb\x4d\x3e\x4b\xf0\x7c\x5a\x77\x8e\x23\x98\x1f\xcd\xb6\xc5\x9a\x0b\xfd\xc3\x51\xcd\x9d\x30\x5b\x8d\x37\xad\x6c\xb9\x54\x3d\xae\xe2\x32\xa8\x15\xab\xc1\xaa\xed\xc1\xb1\x96\xa6\x2b\xf1\xea\x43\x7f\x18\x01\x8c\xeb\xef\xbe\x33\xd2\x46\x2c\xf3\x77\xac\xf7\x7b\x10\xeb\xed\x79\xa7\x89\x00\xda\x37\x20\x56\x4a\xeb\x7d\x57\x62\xfc\x0e\xc4\x7a\x14\x31\xd2\xda\xbb\x73\xa9\xfd\x87\x11\xeb\xbb\x98\x4e\xba\x88\x25\x28\x0a\x03\x44\x63\x10\x93\x20\x80\x44\x06\x08\x45\x0a\x4a\x1c\xaa\x90\x11\x1a\xc4\x32\x0e\x03\x84\x63\x9e\x70\x82\x11\x07\x3c\xc1\xa1\x84\x80\x70\x12\xcb\x90\x05\x34\x7c\x41\x2c\x9a\x1a\x62\xdd\x6a\x6f\xc6\xf1\x0f\xea\x9f\x20\xd6\x79\xf6\x27\x62\x11\x9e\x46\x21\x98\x77\x53\xf1\xce\xe3\x4b\xa1\xbd\xef\x23\xd8\x05\x05\xde\x8e\x6b\x5d\x6b\x6a\x1d\x15\x1b\x2d\x76\xf1\xa1\x50\x26\xcd\x63\xc1\x08\x97\x19\x61\xb7\x1c\xdb\x5e\xc1\x0e\x1d\x2a\x8f\x0e\x1a\xd5\x1d\x31\xe2\xd9\xf4\xe8\x6a\xf5\x71\x3c\xf4\x8b\xb2\xea\x4c\xb3\xde\x68\xa9\x66\xba\xcc\x6f\x23\xd1\x57\x74\x5c\xdd\x67\x60\x5f\x4a\x68\xef\x8b\xad\xe2\x5f\x88\x5c\x29\x21\xc1\xbb\xfb\xa9\x7d\x03\x72\x59\xbf\x63\xbd\xdf\x83\x5c\x6f\xef\x6c\x9a\x48\xa0\x7d\x03\x72\xa5\xb6\xde\xaf\xa6\x16\xff\x21\xe4\x48\x6b\xef\x0a\x95\xc7\xe8\xbf\x20\x57\x71\xaf\xb0\x33\x2f\xad\xf2\xab\x81\x9e\x31\xc5\x41\x43\x2c\xbb\xcd\x8d\x8d\x7e\x7f\x59\x6d\x6f\x7c\x6c\x65\xfc\xd1\x50\x39\x1a\x5e\x14\x05\xd0\xcc\xae\x37\x43\x7a\xd2\x6c\xce\xb3\x90\x96\x70\x49\xdb\xd6\x39\x4e\x0a\x9e\xd3\x6d\xaa\x64\xed\x27\x49\x54\x5f\x35\xda\xe9\x97\xc8\x14\x4a\x29\xa0\x90\x50\x38\x96\x32\x60\x58\x29\x2a\xc3\x20\xe2\x51\xac\x70\x42\x15\x65\x71\x88\x25\x41\x8a\x12\x11\xab\x88\x80\x50\x61\xa9\x28\x90\x11\x0b\x81\x80\x11\x79\x41\x2e\x96\x1a\x72\x89\xdb\xc8\xc5\x3e\x2e\xf7\x7f\x9a\xbd\x46\x2e\x21\xd2\x28\x0e\x62\xbf\x39\xe2\x67\x93\x52\x4e\xf3\xbf\x86\xe2\xbc\x19\x57\xba\xd7\xa8\x60\x30\x7d\x94\xcb\xd7\x64\x3c\xdb\x96\x5d\x6f\x54\x71\x8b\xdc\x1d\x99\xac\xda\x19\x4f\xa2\x92\x3d\x29\xef\x83\x41\x01\xfa\x41\xbb\xd4\x0d\x4a\xc5\xfd\x91\xd6\x04\xdd\x67\xd8\xee\x38\xf7\xf7\xfb\x70\xc5\x72\x11\x1a\x93\xc5\xbe\x3d\x6c\x70\x17\x33\x63\x57\x1f\x2c\x72\xda\x5f\xa9\x7b\xa5\x87\x08\xbd\xf7\xa5\x82\x94\xd7\x6b\xff\x8e\xf5\x7e\x0f\x82\xf9\x6f\xce\x3b\x4d\x44\xd0\xbe\x01\xc1\x52\x59\xef\x33\xc5\x32\xfe\x10\xa2\xa4\xb5\x97\xf6\xec\x31\xfa\x2f\x88\xf6\x5d\x4c\x28\x65\x44\xc3\x08\x40\x00\x89\x10\x00\x70\x9c\x88\x38\x49\x58\x82\x60\x10\x73\x16\x53\xa8\x90\x22\x49\x90\x50\x8c\x63\x4a\x41\xac\x22\xac\x10\x02\x34\x24\x22\x00\x12\x49\x06\x82\x17\x44\xe3\xa9\x21\xda\xad\x56\x04\x1c\x03\x49\x3e\x73\x73\x9d\x3b\x4d\x9f\x01\x0d\xfe\x58\xe3\xf3\x80\x96\x7f\x73\xc2\x7f\x5d\x96\xe5\xda\x5f\x8f\x57\x8b\x4a\x3d\x76\x67\xb0\x35\x6b\x21\xdb\x1f\x86\xb8\x4f\xd1\xce\x2c\x6d\xa7\xb3\x8d\xde\x70\x58\xd9\x75\xe0\x7e\x92\xd5\x96\xfd\xb5\xeb\x64\x57\x1e\x5d\x60\xda\x58\x8b\xdc\x30\xf0\x3b\xe6\xc0\x9a\xce\x33\x0d\x77\x88\xac\xae\x2e\xa4\xb3\xda\xe9\xe3\x48\xdb\xfd\x95\x80\x97\x0a\x80\x7c\x12\xd7\xfb\x76\xa4\x0d\x80\xf9\x3f\xb1\xfe\x6f\x8c\x2b\xbf\xba\x0f\xdf\x09\x30\xda\x37\x00\xe4\x5f\x1f\x17\xff\x0d\xa0\xfa\x28\xa8\x7d\xc7\xfe\xdf\x43\xff\x05\x54\xbf\x8b\xd1\xa5\x0b\xaa\x1c\x80\x24\x20\x24\x0c\x09\x88\x59\x10\x21\x45\x85\x10\x8c\x32\x15\xa1\x98\x87\x22\x12\x2c\x8a\x71\x84\x29\xe5\x21\xa3\x38\x88\x99\xe0\x84\x30\x06\x39\x8d\x18\x91\x88\xff\x00\x55\xfe\x7c\x27\x85\x9b\xb1\x8d\x94\x51\xf2\x61\x27\x85\xd3\x2c\xbe\x80\x33\xfa\xa1\x1e\x3e\xdf\x49\xe1\x6d\xd5\xff\x5f\x3b\x29\xdc\xcf\x5f\x3f\xe8\xa4\x90\x5b\x60\xbb\x66\xb4\xe3\x7a\x2d\xd9\x2d\xd6\x1d\x42\xed\x6e\x75\xd0\x8a\x5c\x39\x64\xa6\xac\xae\x8e\xd9\x71\xc5\xef\xa8\x8e\xd1\xb1\xf5\xae\x66\x34\x56\xe6\xc0\x9c\x79\xc1\x12\xe6\x3b\x56\x89\x45\xcb\xf9\x7a\x65\x9b\x63\x59\x63\x05\x99\x70\x1d\xd9\xb9\x52\x48\x7c\xb7\x92\x56\x27\x85\xeb\x77\xe0\xce\x4e\x06\x6d\x55\x8f\xf5\xab\x96\x26\xd5\x77\x29\xdf\x70\x50\xa5\x48\xff\xa1\x4e\x0e\x57\x9d\x14\x9e\xa8\xde\xdf\xde\x5b\xa4\xf4\x6c\xf5\xfe\x3f\xd8\x3d\x40\xd3\xfe\x5c\xe4\xfa\xbb\x4a\x5b\xf7\xf1\xbd\xf8\x71\x16\xe5\xab\x34\x0c\x70\xe7\x5e\x3c\x7b\x16\x6f\xef\xc2\x3d\xf4\x5f\xf0\x25\x58\xef\x87\x3b\xe8\x8d\x9a\x58\x94\x96\xed\x8d\x53\x9f\x34\xfd\x71\xbe\x55\xf3\x33\xfd\x5a\x33\xac\x64\x69\xd3\xb6\xa6\x56\x0f\xf6\x7b\x13\x57\x03\xcb\x5c\xa1\x5f\xb2\xd0\x42\xd6\x61\xbf\xb1\x99\x06\x2c\x0c\x73\xfd\x62\xd2\xcc\x0c\x6a\x5e\x66\xb7\xee\xf7\x1a\x93\x8c\x6d\x1a\xa9\x2b\x6d\x01\x67\x31\x40\x0c\x24\x2c\x14\x58\xb1\x38\x90\x38\xa1\x84\x46\x90\x47\x31\x47\x50\x01\x2e\x23\x85\x61\x2c\x60\x1c\xd3\x38\x52\x04\x26\x90\xca\x58\xd1\x24\x24\x82\x9c\x98\x3a\xfa\xd9\xab\x3a\xc7\xec\x2a\x2e\x17\x5b\x1d\x56\xf4\xeb\xdc\x34\x9c\x22\xe1\xed\x5c\x9e\x1b\x84\x56\x48\xb1\x93\xf7\xec\x12\x2b\xe7\x8b\x75\xcd\x2c\xd0\x62\xae\x51\x45\x46\xce\xf5\xb9\xfb\x03\x17\x00\xc7\x9c\x40\x81\xc8\xed\xda\x38\x4c\x7c\xd2\x49\xe1\x34\x7b\x0a\x4e\x84\x90\x31\x09\x29\xe6\xf2\x35\xe4\x23\xbf\x9f\xf0\xce\x64\xbc\x2d\xee\xf3\x34\xb7\x69\x1e\xa5\x3b\xcd\xd4\xa6\x1d\xd5\xf4\xe5\xb1\x24\x56\xcc\xef\x15\x86\x0b\xf7\x10\xce\x7c\xff\xf5\xfa\xe6\xae\xea\x53\x5c\x5d\xa7\x37\x57\xe0\xba\x7f\x9c\xe8\x6e\xe0\x7c\x1e\x1e\x54\x3d\xe3\x86\x23\x91\x6d\x15\xb3\x43\x0a\xa7\x26\xaa\xa9\xc3\xb6\xec\x4c\x0a\x7a\x81\x8d\x2a\x13\x66\x5f\xdb\x36\xa3\x63\xa7\x75\x75\x73\xaf\x1d\x6e\xaf\xeb\x71\x73\x8b\xa3\xee\x1b\x9b\xb2\x3f\xcd\x0e\xbd\x7e\x62\xb6\xf7\xa6\x3d\xe8\x55\xf4\xa2\x3d\x73\x72\x7a\x49\xa2\x71\x2b\xc4\xad\x09\xa4\xb5\xde\xae\x51\x64\x78\x5d\x1d\x67\xac\x79\x5e\x64\x0e\x54\x65\x26\xfa\x2a\xbb\x3c\xaa\x6d\x74\x98\xc9\x8d\x17\xcd\xa2\x88\x94\xbd\xce\xc0\xed\x7d\x45\x33\x7b\x1b\x9c\xa9\x3d\xb2\x9f\xe7\xd1\xfa\xbe\xfd\x7a\x93\x11\x79\xf9\xb7\x2b\xa4\xbc\xd2\x06\x12\x3b\x5c\x07\x41\x47\x4c\xcd\x64\x64\xd3\x5a\x0d\xea\x09\xc9\x44\xdd\x7d\x75\x88\x2b\xcb\xc3\x71\x3e\xd0\x06\xce\xdc\x28\x6e\xfa\xfd\xd3\x97\x2e\x9d\x4a\x73\xbf\x54\x8b\xbe\x1a\x37\x90\x32\x3d\xfa\xcf\xf6\xbc\x0b\xae\xa6\xee\x3c\x83\xab\x80\x3c\xf7\x13\x9a\x9f\x73\xe7\xb4\xe9\xdf\xea\x79\xf7\x92\x65\xab\xe0\xf8\xa3\x65\xbd\x7e\xf2\xa4\xd8\x9c\x9d\xdc\xff\x0b\x77\xfc\x7d\xc4\x7d\x60\x4f\x5f\xd0\xff\x33\x09\xe3\x5b\xcf\xf4\x25\x1b\xe1\x6e\xfa\x2f\x88\x6b\x2f\x2b\xc5\x9e\x43\xd6\x83\x24\x53\x8d\x2d\x51\xf7\x4c\x37\x28\x69\xbb\xc2\x28\xe8\x11\xb3\xb0\xc4\x41\xbb\xbe\x8d\x1a\xa1\x37\xca\x18\xb9\xc2\x74\x19\x03\xe4\x91\xce\x28\x39\xf2\xf2\xf8\xc8\xfc\xd2\x31\xb3\xad\x1e\x24\x2e\x0d\x11\x8d\x50\x1f\xe2\xde\x3a\x0a\x8a\xe9\x77\x05\x90\x28\x60\x94\x28\xce\x24\x63\x81\x62\x30\x50\x4a\x46\x09\x08\x39\x4d\x24\x54\x61\x14\xe3\x90\x52\xa8\x64\x2c\x39\x63\x1c\x03\x81\x78\x90\x10\x14\xc1\x18\x11\xae\xd4\x4f\xc4\x45\xa9\x21\xee\xad\x5a\xbb\x9c\x49\xf0\x09\xe0\x9e\x27\x7f\xe2\x2d\x17\x17\xcd\xee\x71\xbc\xfd\x24\x6b\xed\xea\x02\xb4\xdb\xcd\xfa\xcb\xff\xde\xc9\x4b\xbf\x88\xb7\xa1\x29\x9b\x7c\x96\x2b\xcd\xaa\x20\xdb\xc0\x5a\x9b\xdb\xb3\x46\x3d\xce\xec\x9b\x5c\x36\xc6\x9d\xaa\xee\x9b\xeb\x32\xac\xd7\xcc\x7d\x59\x58\xe5\xfe\x8e\x9a\xc6\xca\x2b\xcf\xb4\x6d\x21\x17\xe6\xb6\xf9\xc2\x52\x56\x4b\xaa\xb6\xee\x18\x87\xbe\xca\x8f\x0b\x9b\xa0\x5b\x2a\xf4\xc4\x6f\xc6\x5b\xff\xfb\xf6\xeb\xf7\xe2\xed\xd7\x3a\x93\x9f\xc5\x31\x5c\xed\x7e\xc6\x44\xd2\xc6\x9f\xab\x2a\x0e\xbf\xac\xe5\x42\xe4\xf4\xdf\x5b\xf8\x73\xfa\x4e\xe5\x3b\xf6\xef\x6b\x9d\xd5\xff\xdc\xfe\xfd\x1a\x16\x7d\x63\xff\x2e\x77\xf2\xcd\x78\x1a\xbf\x7f\xf3\x3b\x73\xc1\xef\x3f\x84\x9f\xda\x37\x9c\xe9\x3d\xf4\x7f\xf6\xb6\x5d\x35\x61\x6d\xd3\x33\x17\x3d\xdc\x94\x65\x95\xf3\x56\x41\xbf\x68\x71\x6e\xd5\xb6\xb0\xd4\xf6\x41\xb1\xd7\x00\xdb\xb6\x29\x9a\xe6\x76\xd7\xda\xe4\x8d\x91\xeb\xec\xd5\xa6\xa7\x8b\x9e\xb5\xb2\x85\x1a\x6c\x01\x98\xef\x32\xd0\xaf\x95\xac\x5d\xdc\x1a\xd0\xf9\x68\x36\x30\x52\xb7\xc8\x52\xc0\xa8\x8a\xb8\x92\x5c\x25\x21\x4b\xc2\x84\x47\x81\x20\x12\x87\x71\x1c\x11\x1e\x47\x48\xf1\x38\x09\x71\x08\x40\xc8\x79\x40\x94\x44\x4c\xa2\x38\x22\x82\x27\xa1\x60\xc1\x29\x70\x87\x3e\x6f\x91\xbd\x59\xb7\x84\x4b\xf1\x89\x73\xf3\xe7\xec\x4f\x39\x80\x11\xc9\x9e\xb7\xc8\xbe\xb5\x1e\xfe\xc2\x13\x1f\xe0\x61\x1f\x59\x64\xd7\xfd\x5d\x13\x17\xf5\x1e\x2d\x74\x47\xa5\x7a\xb5\x84\xe7\xf9\x5c\x90\x8d\x6d\x71\x5c\x08\x2d\x91\x3d\xab\xd6\x19\xfb\x5b\x33\xaa\xcf\xd8\xf0\xa8\x51\x43\x26\xbe\xa3\x8c\x79\xc9\xc0\x91\xa9\x6d\x6a\xe5\x6a\x55\xcb\x0f\xe5\xba\x1a\x76\x5b\x45\x0d\x2f\x77\xfb\xaa\x24\xb9\xd4\x2c\xb2\x57\x9f\xbf\xd3\x22\xea\xed\x1b\xd5\x09\xbf\x7c\xfd\x6d\x7f\xa4\x97\x71\x43\xcf\x4c\x8f\xfe\x43\x16\xe1\x2b\x3d\xf3\x09\x2b\x60\x62\x15\x50\xf8\xac\x15\xf0\x0f\x5a\x21\xb5\xb7\xf4\x7f\xa3\x4e\xf6\xae\x45\xb6\xfd\xf8\x5e\xfc\x38\x8b\xe8\x8a\xd2\x07\x26\xe2\x6f\x3b\x8b\xb7\x77\xe1\x1e\xfa\x2f\xf8\x12\xfa\xca\x94\x07\x77\xe6\x34\xec\xae\x3e\x6a\x36\xd6\xac\xbe\xeb\x6c\x71\x7f\x5b\x61\x5b\x2d\x9f\xf5\x73\x4d\x38\xef\x94\xf7\xf9\x56\xe0\xcc\xc4\xce\x71\xb3\x1e\x32\xa6\x1a\x6b\xf4\x24\xae\x6b\xe5\xe1\xe1\xd8\x74\x73\x24\x1b\x36\x3b\xa8\xad\xbb\x55\x26\x2a\xcd\x24\x4e\x3f\xa5\x01\x40\x4c\x58\x14\x43\x15\x60\xa0\x62\x80\x21\x91\x91\x4c\x28\x91\x84\x4a\xca\x02\x84\x12\xa9\xc2\x38\xc2\x91\x80\x89\x80\x8a\xa1\x30\xa4\x52\x25\x42\x45\x91\x08\x85\x3c\xe9\x87\xe4\x27\xbe\x20\xb7\xe0\x37\x51\x41\x6b\x59\x95\xba\x57\x2a\x37\xca\xe5\x5a\xdd\xd4\x75\xe6\xe8\x8e\x5d\xac\x68\x46\xa3\xd6\xac\x97\x78\xd3\xae\x36\x51\xc3\xaa\x23\xdf\xee\x18\x5a\xdd\xf8\xcf\x7f\xff\x4f\x02\x28\x09\x86\x18\xc1\x9b\x19\x0d\x12\x7e\x82\x33\x2f\x93\x10\x60\xc0\x25\x82\x12\x81\xd7\x20\x9a\x7c\xcb\xf4\xa7\x73\xad\x64\x75\x6d\x36\x3e\x74\xd6\xa2\xa1\x5b\x74\x37\xb5\x1b\x3b\x8d\xd6\xa6\x96\x47\x27\x61\xad\x35\xd8\xc3\x1e\xec\xbf\xde\x9d\xdc\x55\xf9\xab\xab\xbb\x74\xf9\xdf\x73\x23\xdb\x2b\xd3\x0b\xcc\xd9\x45\xe6\xea\xfd\x4e\x7d\x33\x57\xe3\x65\x62\xf6\xfa\xb1\x2a\xee\x47\x2b\xcd\x69\xd2\x7d\x3b\xd3\x9d\x1c\x61\x61\x15\xf9\x55\xff\xea\xea\x98\xb1\x3d\xbc\xba\xb6\xef\x9b\xda\xc2\x7c\xc7\xe8\x98\xa7\x69\x50\xce\x30\x69\xc0\xfe\x7e\x7e\x58\x6b\x23\x8f\xa9\x6d\x6d\x90\xdb\x38\x02\x2c\xc6\xa2\xe1\x96\xba\x90\xd6\x9c\xf6\x7e\x2f\x77\xfe\x98\x4d\xba\xcb\x72\x86\xb5\x3a\x76\x10\x66\x33\x6c\xda\x43\x95\x4c\x80\xa4\xc9\x9d\x6a\xc6\x5b\x11\xe6\xcb\x4a\x75\xd1\xec\x4b\xf8\xc5\x0c\xbd\x5f\x32\xe6\xbc\x52\xc6\x82\x45\x67\x25\x88\x5b\x35\xfa\xd3\x49\x61\x38\x2c\xb5\x0c\x37\x33\x31\xb7\x9b\xb8\xbb\x33\xca\xd9\xb5\xde\xae\x7b\xd6\x70\xaa\xde\x7d\x9b\xf4\xcc\xf6\x45\x14\xb7\xda\x2d\xf0\x42\xe8\xce\xb3\xd2\xb4\xed\x72\x77\x1d\x78\x71\xf7\xf7\xb5\xf7\x4c\xeb\x0f\x9d\x65\x2e\xf1\xfa\x9f\x9d\xe5\x87\x10\x7e\xf5\x99\xc8\xad\x0f\xe2\x91\x36\x6b\x8f\xc2\x85\x57\x0c\xf0\xbe\x50\xf0\xa6\xba\xea\x96\x35\x63\x94\x51\xed\x64\xd2\x5d\xc9\x46\xf9\xe7\x7d\x38\xab\x5e\x53\xed\xf5\xbe\x7e\x30\x6e\x40\x78\x7a\xf4\x1f\x32\x15\xeb\x17\x55\xd4\x3b\xfd\xeb\xb9\xf6\xa5\x5a\x12\xaf\x35\x62\xc7\x63\x5f\x03\x8e\x1d\xfb\x03\xa7\x32\x77\xab\x06\xf3\x1b\x19\x4a\xa7\x5a\x65\x9b\x01\xc5\xb6\xa5\x3a\x4e\x74\xb9\x53\x57\x77\x34\x95\x3b\xf5\x49\x91\xa2\x2b\x55\xd2\x3a\x6c\xfb\x51\xa3\xb9\xac\x39\xa6\xe1\x92\x2e\x1d\x14\xc8\x61\xac\x81\xda\xbc\x5f\xe6\xd3\x89\xd2\x0e\x59\xee\x8e\x5b\xed\xbd\x4f\xaf\xda\xd8\x5d\x54\x6f\xeb\x2a\x2f\xff\xce\x77\xea\xe9\x3b\x9b\x64\x7f\x0e\xf1\xf6\x79\xcb\x4c\x7c\x98\x73\xf3\x73\xbd\xfe\xe5\xf3\xf7\x9e\xd7\xb3\xe7\x93\x7b\x5d\x79\xf6\x6d\xd3\xe4\x5b\xe3\x54\xa0\xf6\x8a\x27\xdd\x7b\x7e\x63\xb7\x4c\x8e\xa7\x0b\x72\x16\x73\x7a\xda\x7b\xf9\x49\xb9\x77\xf6\xeb\x7a\xbc\xb7\xbf\xbf\xbc\x8f\x77\xde\x07\xbd\xa1\x6b\xfd\xb3\x29\xe6\xf4\x3e\xde\x61\x8a\xf9\xd2\x38\x9f\xf7\xf9\xfd\x7c\xe4\xbe\x9d\x09\x5f\x99\x3a\xee\xe4\x37\x3f\x77\x05\x12\xf7\xb2\x5f\xef\xaf\xbf\xa2\xfd\xd3\xbe\x72\xef\x7a\x2f\x66\x0e\xeb\x71\xd7\xd3\x33\xf4\x13\xc9\x3a\x6f\xe9\x7f\xcd\xf4\x77\xd9\x9f\x5f\xc6\x0d\x51\xfd\x81\x3d\x3a\x13\xb2\x1e\x37\x05\xa5\x78\x46\xf7\xd0\x7f\x11\xd5\xbf\x4b\xa0\x4a\x57\x54\x8f\x44\x88\x28\x10\x10\x61\x46\x59\x08\xa3\x04\xc6\x31\xe4\x0a\x71\xc6\x05\x92\xa1\x42\x28\x08\x09\x94\x54\x06\x11\xa2\x31\x53\x4a\x51\x04\x62\x41\x24\x85\x2c\x09\x03\xf8\x43\x54\xc7\x3f\x45\x75\xa7\xc4\x73\x4e\xab\xe1\x74\x6a\xf9\x9c\x56\xcd\xf9\x15\x56\x29\xd4\xfd\x6e\xb1\x60\x14\x6a\x2d\xbf\x58\xf3\xf2\xcd\xbc\x66\x58\x9c\xb6\xcc\x76\xa1\xed\x77\xf2\x79\xa7\xea\xea\xff\x10\xd5\x6f\xa5\x70\x09\x48\xa9\xf8\xd0\x95\xf3\x3a\x2b\x05\x17\x04\x51\x28\xc1\x6b\x06\xd7\x9d\xbc\xf8\x4a\x56\xff\xc4\x95\x73\x65\xd9\x78\x82\xf7\x5c\xe4\xd5\x4f\xb0\xe6\x95\x17\xe7\xb4\x66\x9d\x88\xbd\x3f\x28\x85\x1b\xa1\x39\x33\xcf\xda\x6d\xd5\xb6\x50\xee\x82\xec\xdc\x1d\x25\xf6\x66\xb7\xd3\x66\x85\x6e\x35\x4e\x96\xfc\x10\x15\x76\x63\xb5\x29\x13\xe2\xd5\x2a\x7c\x5e\xcc\xb2\xa1\xd1\x08\x17\xb9\x4d\xd4\xac\x76\x22\x13\x15\xeb\xc3\xcd\x82\xe7\x0b\xbc\xa0\x7d\x2d\xa3\xeb\x7d\xb7\xce\xe3\x72\xca\xb7\xef\xdd\x47\xb2\xb1\x75\xa5\x2f\xdc\x8b\x85\x17\xb7\xc4\x95\x6c\x7a\x0b\x0b\x2f\x23\x97\x32\xfd\xaf\x61\xf1\x1b\xfa\xb9\xb7\xb2\xf1\x79\xea\x4e\x59\xeb\x62\x32\xb7\xbe\xee\x46\x7a\xbb\xc6\xb4\xe9\x7f\xcd\x0d\x73\x35\x2e\x77\xe8\xed\x4e\x29\x2d\x05\x59\xfc\x3c\xbe\x9b\x3f\x9c\x64\x4f\xff\x32\x7f\xef\x7a\x9f\x95\x9d\xf2\x17\xb1\xf9\x9d\x3d\x7f\x69\x5e\xa1\xfe\xb2\xf5\xbd\xdd\xdf\x5f\xc6\x7b\x26\xc8\xce\xf5\x05\xb9\xff\xbe\xfe\x22\xfb\xfd\xc1\xf7\xe5\x1e\xfa\x2f\x72\xcd\x77\x81\x4f\xba\x72\x4d\x18\x03\x1a\x93\x30\x92\x8c\x45\x54\x30\x21\x63\x18\xb2\x24\x88\x01\xc4\x31\x0d\x02\xce\xc3\x28\xa6\x2c\x66\x81\x8a\x50\x14\xca\x50\x32\xc1\x41\x4c\x63\x4e\x58\x40\x82\xf0\x94\x74\x80\x52\x94\x6b\x6e\x99\x20\x05\xe2\x94\x7f\x98\x7d\xf0\x3a\x2b\x09\x11\x12\x09\xc2\x80\x78\x5e\xae\xf9\xc4\x06\x79\xe6\x23\x0f\xd9\x00\xbc\x37\xef\xd9\xf9\xde\xbe\xd2\x77\x8d\x8a\xde\x49\x74\x10\xdb\xd5\xe2\xc6\x2f\x78\x78\x45\xb5\x56\xb5\x1c\x2f\xa7\x73\x95\x6f\x4e\x85\xc3\x0e\xbd\x45\xb6\xba\xc3\x0d\xba\x9d\x1e\xb2\x1d\x82\x1c\x6a\x13\x9b\xb5\x56\x83\x7e\xbb\x05\xf7\x11\x0d\xeb\x64\x30\x41\x99\xf6\xd1\x1d\xbb\xbe\xdb\x8f\xc1\xb0\xbf\xfb\x52\x08\xe8\xb5\xfa\xfb\xa1\xdb\xcb\xba\xb2\xf9\x3d\x82\xcb\xcf\xda\xcc\x52\xa4\xff\x6c\x78\x65\xda\x7c\xee\xd7\xf1\x39\x9f\xfb\x83\x7c\x56\xbb\xd0\xff\xed\x36\xa8\x13\xbd\xf7\x6c\x50\x2f\xe3\xa6\x5b\xec\x81\xbd\x7a\x5a\xd7\x4e\xf1\xac\xee\xa1\xff\x82\x49\x95\x5d\xb1\x2b\xca\x75\xe2\x83\x09\xed\xf5\x93\xf8\x38\xca\xb9\x60\xcd\x36\xf1\x78\x17\x39\xc9\x8e\x2f\x4b\xfa\x52\x60\x23\x2a\x4f\x32\x49\x59\x86\x43\x9f\x8f\xc2\x5e\x38\x6f\x1c\x4a\x56\xbb\xe9\x59\x78\xbc\xce\x0f\x4a\x61\x48\xbd\xaa\xde\xce\xf5\x75\x8b\x37\x9c\x7c\xfa\x61\x93\x28\x60\x52\xf0\x80\x49\x0c\xe2\x20\xe4\x31\x0e\x63\x15\xa8\x44\x86\x9c\xc5\x11\x0f\x00\x13\x00\x31\x26\x14\x4c\x60\x1c\x82\x44\xa0\x84\x32\x0e\x01\x24\x21\x09\x19\x66\xa7\xec\x72\xf8\x7c\xd8\xc5\xad\xf4\x04\x81\x05\x06\x1f\x56\x49\x79\x9d\x7d\xc1\x36\x8e\x21\x7a\x3e\xea\xa2\xfc\xe6\x5c\x7f\x79\x55\x1f\x60\x85\x1f\x44\x5d\x18\xc9\xbc\x15\xaf\x42\x32\x72\xb3\xf5\x24\xb7\x87\xad\xfd\xa2\xea\xac\xbb\x28\x43\xea\xa4\x01\xbc\xfd\xb1\xd7\xab\xd5\xa1\x8e\xfd\x43\xbf\xab\x2d\xb3\x25\x51\x3a\x74\xf5\x1e\x89\x87\x46\xd3\x9a\xf6\x37\x72\xa1\xf5\x89\x5d\xee\x96\x47\x61\x6e\x19\xd8\x53\xd5\x94\x86\xf2\xad\xb4\xa2\x2e\xac\xc7\xa3\x1e\x54\xd8\x5c\x6d\xaf\x80\xa7\xf4\x2e\xe5\x5b\xf0\x93\x1e\xfd\xb7\x67\xfa\x25\xfa\x57\xf0\xf3\x84\xa7\x7f\xbf\x76\x0e\xf2\xea\x49\x3e\xe8\x86\xf3\x39\x4b\x7b\x82\xfe\xac\x5b\x06\xeb\x27\xe8\x6b\x6f\xe9\xff\x46\x96\xfe\x2e\xbc\xb8\x8f\xef\xc5\x7e\xed\x1c\xaf\x4d\xb1\xb3\x3b\xf7\xe2\xd9\xb3\xf8\x71\x17\x32\xe0\x31\xfa\x2f\xf0\x82\x59\x3b\xbf\xb4\x33\x45\xb3\x06\xbc\x9d\x8a\xda\x95\x60\xd8\x5c\x76\xa2\xed\xc6\x8c\xcd\xb5\x25\x14\x29\x18\x20\x72\xd7\xa8\x32\xeb\xb8\xa5\xec\x61\xab\xaf\x26\xee\xcc\xc9\xcf\x76\x60\xdf\x25\xe1\x36\xe8\x15\xe2\xdc\x00\x35\xa8\xbd\x0b\x50\x7f\x8e\xcd\xac\x8b\xed\xf4\xfb\x92\x49\x46\x20\x0d\x14\x8c\x50\xc2\x25\x43\x30\x44\x2c\x84\x94\x89\x44\x32\x9c\x44\x22\x8a\x98\xa2\x40\x21\x10\x20\xa4\x38\x41\x42\xc5\x49\x98\xc4\x32\x8a\x63\xc1\x38\x15\xe2\x05\x5e\xd0\x93\xf0\x72\x2b\x16\x5f\x60\x41\xd8\x87\xbd\x53\x5f\x67\xcf\xf0\x82\x20\x01\x29\xa4\x59\xbf\x0d\x40\xfb\x05\x5e\x1e\xf0\x4e\x7f\x04\x2f\x51\xd1\x8e\xb6\x51\x17\x35\x88\x3b\xf3\x22\x27\xe3\x44\x6b\xd1\xad\x47\x71\x7b\xc3\x27\xb9\xed\x82\x5b\xeb\x9a\x9c\x8d\x16\x4b\x29\xe6\xb6\x91\x1d\x36\xb4\x65\x30\x1a\xbb\xdb\xa0\x3e\xd1\x0f\x15\xad\x5c\xa8\x18\x68\x64\x8b\x3a\x2a\x0d\xfb\xa5\xed\x81\xcf\x0a\x65\x56\x48\x2d\xa8\xef\x09\xf6\x1e\xd8\x0d\x59\x7e\x96\xbd\xa7\x48\xff\xa1\xa0\xc2\x74\xe0\xe5\x2d\x7b\x7f\x28\x90\xec\x0f\x06\xb2\x69\x6f\xe9\xff\x46\xef\x5c\xda\x41\x7d\xcf\xb0\x77\x2d\x25\x78\xb9\x16\x35\x1e\x81\x97\x46\x7d\x1a\xe2\x4e\x34\xda\x98\x25\x0b\x37\xb7\xc3\x69\x98\xd8\x2d\xcf\x1b\x87\x1b\xda\x0b\xd9\x66\x1f\x36\xb3\x41\xb1\xb4\xc8\x26\xa5\x7a\x2f\x4b\x40\xaf\x84\xe6\xc5\x56\x19\x8d\xba\xbd\xd5\x50\xd3\x0f\x86\x26\xe7\xb9\xad\x19\x0d\x66\xa4\xb1\x14\x1b\xa6\xeb\x99\x41\xfa\x9e\xc2\x04\x88\x48\xc1\x24\x56\x90\x82\x04\x71\x46\x19\x12\x8c\xa9\x98\x24\x14\x71\x94\x30\x2a\x54\x02\xc2\x48\x26\x91\x50\x30\x92\xec\x07\xcc\x40\xc9\xc2\x18\xc5\x30\x44\xf4\xa4\xbd\xbc\xc0\x82\x6d\xd4\x3b\x98\xd3\x8a\xe6\xd7\x09\x73\x0c\xdb\x42\x1d\x5b\xab\xba\x3a\xaa\xd7\xbb\x65\xee\x20\xc2\x0c\x3f\x9f\xd7\xed\x4e\xb3\x8d\xea\x26\x2f\xe4\x4d\xe4\xb6\xdc\xb2\xf1\x9f\xff\xfe\x1f\x13\x1c\x4a\xc2\x19\xc7\xb7\x4a\x63\x09\x22\x20\xfe\xd8\xa2\xf6\x73\x56\x50\x21\x25\xa6\x00\xc0\xd7\xe0\x71\xa7\xba\xce\xb2\x9d\x5d\x10\x82\x74\x07\x6c\xe5\x1b\xbe\x0e\x6d\xa7\x9d\x8d\x96\xd3\x3e\x71\x54\x7d\xd9\x5c\x2e\x8a\xb5\x99\xd3\x6c\x9d\x44\xec\xb3\x45\xed\xf4\xcd\x4f\x3a\xc0\x5c\x45\x64\x18\x9b\xe0\xd0\xfb\xf9\x81\xe1\x2c\x57\x31\x5b\x83\x6e\xb5\xdc\x1a\xae\x3a\x5e\x19\x0e\x4a\x54\x1a\x12\x94\x07\x64\x47\x19\xe0\x2c\x14\xf9\xd2\xbe\x9b\x9c\x3d\x2b\xf5\x76\xbb\xf1\xf2\x2b\x9b\xdd\xb6\x7a\xac\x8e\xe4\x7a\x17\x6e\x8a\xf9\x56\x6e\x31\xf5\x10\xb3\xfd\x02\xae\x84\x7a\x34\x77\x5b\x72\x4d\xa6\xcc\x6c\xd7\xbd\xd5\xf9\xee\xf1\xc9\xea\x97\xbb\x99\x63\xc6\x08\xea\xbd\x53\x30\x7a\x86\x0f\xf7\xf1\x2a\x57\x2a\x2d\x2d\x4c\xf0\x6c\x7a\x38\xa8\xe1\x1c\xad\x07\x6e\xb9\x3b\xb0\xf3\xc8\x6c\x8e\x33\x32\xd9\x38\x8b\xd9\x7a\x1b\xfb\x68\x59\xe8\x6d\xd7\x72\xda\xcb\xb8\x45\x14\x18\x35\x9c\xa9\x4d\x8d\x95\x6f\x06\xb2\xdb\x0a\xb4\x4c\x77\x1a\xa3\x69\xc1\xee\x99\x5f\xc0\xad\x5f\x3a\xbc\x94\x57\xe5\xa3\x3a\x76\x6b\xa1\xb2\xf9\xa0\x0e\xb5\x60\x0e\xe5\xa6\x3f\xd1\xab\x47\x7b\x37\x0d\x5a\x56\x2d\x8c\x8b\x99\xbe\xd5\x6a\xf3\x2b\x5e\x7f\xda\x4f\xcb\x6a\xb7\x5f\xf6\x59\xe7\xba\xc0\x15\xd4\x44\x38\xb7\x21\xa3\xc8\xb5\x17\x51\x12\xce\xba\xbd\xa1\xda\xaf\x8a\x68\x9c\x6b\x22\x3c\x48\x66\xf5\xb6\x15\xef\xdf\x9e\xc9\xdf\x71\x46\xff\xdf\xc7\x18\x7e\xb5\x4c\x82\x70\x76\xa9\xf9\xc3\xe3\xb1\x3f\x29\x2f\xf6\xbd\x6a\xaf\xdc\xf2\xa9\x27\xd1\x26\xce\xf7\xe8\xde\x5e\x3b\x9b\xd9\x28\xd3\xa3\x55\xf7\x9c\x50\xd4\xd6\xb6\x03\x78\xb9\x99\x0f\x79\x0e\x53\xa4\x6f\x3c\x42\xff\xbc\xe8\x13\x6e\x34\xaf\xbe\x6f\xea\x4e\xcf\xdc\xd5\x1b\xc5\x11\x58\x37\x9c\x7d\x57\x6d\x3b\x85\xe5\x14\xd4\xb0\xbb\x29\x0f\x8d\xe9\xb2\xb9\x9d\x6f\x77\x6a\x69\x8d\xc5\xb3\x77\xe5\x94\xc0\xf5\x99\x85\xee\xf5\xef\xd6\x1f\x59\x5f\xb9\xec\x7a\xef\x47\xb1\x5d\x8d\xab\xfd\x3b\xdf\xf3\x7b\xef\xea\xe5\x28\x5a\xed\x76\xeb\xe5\x5d\x79\xe8\xdd\xbd\xbc\x6b\x5f\x8b\x8a\xbc\x77\x3f\x2e\xdf\x4f\xfb\xfd\x79\xe8\xfe\x3e\x43\xdf\xce\x9b\xfe\x13\xf4\x4f\x9f\x37\xaf\xc4\xc5\x3b\xcf\xeb\xfd\xe7\xff\xa5\x3c\xdd\xbb\x51\x80\x17\xde\xf6\x6e\x02\xe9\xd5\xfb\x72\x1e\x77\xde\xc7\x52\x6d\xbe\x38\xb6\x2e\xd4\x2b\xda\xd7\xa3\xda\x2e\xe3\x6d\x42\xe6\x3b\xb2\x6a\xf3\x6a\x3b\x87\x61\x92\x59\xe5\x06\xb5\x9a\x63\xfb\x9b\xa5\xad\x21\x6d\x5d\x1f\x8e\x13\x1c\x50\x12\x1b\x53\x33\x00\x8c\x0d\x9a\xaf\x18\x7b\xe5\x7d\x3d\xaf\xf1\xa1\x68\x89\xd6\x73\xf4\xcb\xad\xc7\xe8\xbf\xc8\xaa\xc9\x86\x08\x6f\xa9\x35\x06\x8b\x7d\x94\xa9\xb2\xa2\x58\x4d\x0b\x2c\x5a\xfa\x23\x1d\xf9\xfd\xbe\xec\x9b\x34\xd9\x7a\x7c\xb8\x58\x94\x43\x3c\xa9\x2e\x0e\x85\x32\x4f\xba\xa4\x36\xd2\xa3\x49\xef\x28\xb3\x43\xba\xe3\x76\xce\xde\x76\xda\x76\xaf\x36\xe9\xe2\xf5\xfc\x90\x9b\xa5\x5f\xc7\x15\x4a\x21\x08\x51\x22\x24\x1c\x45\x41\xa0\x14\x0d\x39\xe4\x4c\xd2\x80\xa8\x00\xb2\x40\x71\x29\x03\x88\x93\x10\xa9\x84\x40\x8a\x22\x28\x63\x04\x21\x0f\x62\xa8\x28\x3b\x15\x28\x80\x32\x45\x59\xf5\x66\x54\x1b\xa3\x92\xf1\x0f\x65\xd5\x9f\xb3\x02\x32\x40\xb0\x40\x1c\x81\xe7\x65\xd5\x4f\xa2\xda\xce\xf7\xe2\xe2\xfd\x7d\x46\x8e\x71\x0b\x4c\x6b\xe6\xac\xc2\xa4\xd9\x80\x05\x6e\x8d\x0f\xd2\x1f\x6c\x12\x37\x1b\xe9\x64\x53\x71\xe2\xb5\x93\x99\x64\x73\x87\x55\xc7\x3b\x9c\x3e\xfe\x04\x96\xbc\x49\x56\xbe\x1a\xf9\xd7\xe7\x77\x2b\x2b\xb9\xad\x76\x29\x14\x33\xbf\x55\x99\x63\xd1\x0c\x46\xb3\x6d\x27\x9b\x35\x8c\x66\xb8\xca\xca\x59\x6d\x08\xeb\xda\x60\x4f\xcd\xb1\x9e\x8d\x78\x2f\xec\x04\x41\xb5\x5a\xdc\x97\xdc\x3a\x8f\x2b\x55\x87\x2d\x73\x99\xe9\xda\x5e\xc4\x31\xe9\x6c\x96\xcd\x62\x4f\x23\x23\xb4\x5b\x7d\xc5\xfb\xac\xbf\xd9\xdf\xc7\xb0\xf2\xea\xa7\x2f\xcf\x7b\xe5\x6d\x7c\x42\xee\xfd\x23\x72\xf7\x5b\x2c\xb8\xfa\xfb\xf7\xc9\xdd\xd7\xc5\x02\x3e\x96\xbb\xaf\x71\xf3\x01\xb9\xe1\x25\x62\x4f\xd3\x1e\x8d\x18\x4c\x91\xfe\x43\x72\xbf\x7e\xc1\xc0\xfa\xd5\xf7\x7f\x9f\x5c\x7b\x5e\xca\x57\xe4\xee\xbf\x58\x2f\x38\xed\x5f\xe3\xb2\xbe\x7b\x31\xfc\xd9\x77\xfd\xde\xfd\xfb\x8d\xeb\xfb\xd2\xf9\x5e\xed\xdf\x9f\xd6\x5b\x4e\x7a\xd6\x79\xd1\x57\xf7\xed\xe3\xfd\xfc\xd3\xeb\xfd\x92\x9e\x75\xb5\xbf\xda\x23\xeb\x7d\x2b\x63\x56\xb4\x2f\x47\xe4\x5e\xf6\xf3\x5d\x63\xd5\x39\x82\xf4\xca\xec\x7f\xef\xfd\x1a\xbb\x65\x72\x36\xdb\x9f\xa9\xbf\x6d\x77\x7e\xbd\x96\xd7\x71\x7e\x0a\x87\x2e\x5f\xdc\xe9\xef\x16\x96\x39\xe3\xc3\x55\xb6\xd6\x93\xd8\xfe\x84\xec\x75\x05\xe8\xee\xbb\xcf\xa7\xfd\x13\x4f\xfe\xf4\x7a\xaf\xf6\xf3\xfd\xf5\xbe\xe7\x2f\xa8\x5f\x6d\xfd\x03\x3a\xd0\x39\xda\xc8\xbc\x9c\xef\xbd\x3a\x58\x8a\x3a\xe0\x03\x11\xb8\x87\x23\x12\x70\x3a\xf5\x0e\xfd\xbe\x7b\x98\x26\xfb\xea\xa2\x31\x90\x61\x56\x54\xaa\xd5\xcd\x31\x8b\x7a\x99\x5a\xdb\xd4\xcb\xf9\x51\xa3\x55\x96\x78\x93\x5b\x77\xe7\x33\x00\xa6\xe6\x3c\x97\x5f\x93\x1d\xe0\x8b\x55\x9e\xc5\x20\x98\x53\xde\x0f\xd8\xba\x32\xd1\x8c\x41\x33\xd4\x53\x2f\x32\x23\x01\x0a\x25\x50\x08\x23\x14\xca\x98\x85\x18\xd3\x98\x53\x82\xb1\x90\x01\x27\x84\x85\x82\xc5\x18\x60\x19\x87\x09\x95\xb1\x62\x2c\x4a\x92\x90\x82\x38\x88\x15\x88\x94\x38\xf5\xad\x10\x2f\x3a\x98\xe6\x55\x2c\x82\x9b\x76\x37\xdf\xc1\x6e\x15\xd7\x4d\xa7\xa5\xa1\x16\xad\x75\x68\xae\xa9\xd5\x3d\xdb\xf6\x8b\xb8\x58\xb0\xf2\x1d\xec\x37\x99\x5b\x2f\xd5\xcb\x58\xaf\xd5\x5a\xff\xd0\xc1\x6e\x46\xe0\x0a\x02\xe4\xc7\x3a\xd8\xcf\x59\x7e\x6a\xb9\x01\x29\x41\xaf\x99\x45\x77\xf2\xa1\x2b\x1d\xec\x56\x97\xc2\x7b\xe5\xbc\x94\x74\xb6\x13\xfd\xd7\xf5\xba\xba\xf4\x50\x01\x77\x8f\x70\x8f\x35\xb7\xb2\x28\x13\x4f\x3f\xc6\xb5\xe6\x78\x37\x9d\x8d\xb6\x28\xe7\x4e\x3b\xf6\xa4\x09\x00\x9f\xe5\xa9\xec\x05\x03\x1c\x57\x37\x3c\xdb\x69\xcf\xf2\xeb\x8e\xe8\xaf\x7a\xf9\xe1\x0a\x4e\xba\x25\x0e\xa4\x75\x3c\xd6\x2d\xa4\x42\x03\xad\x5d\xf3\x2b\x3a\xd3\xfb\xe5\xff\xdf\xca\xe5\x57\xf6\xa7\x27\xed\x59\x1f\x8c\x1b\x72\x79\x7a\xf4\x1f\x8b\xd8\x7d\x57\x2e\xff\xdb\xe4\xb6\xd3\xdf\x7f\xa9\xdc\x7b\x2b\xe4\xe9\x11\x19\xc8\xfd\xfc\xe4\xde\x52\xf8\x68\xaf\x1e\xa6\x7f\x8d\x71\xf7\xd0\x7f\xc1\x98\x32\x4c\xfc\x61\x34\xad\x79\x79\x95\xd3\x0e\xb3\x6d\x5f\x95\xab\x44\x3a\x9e\x1e\x0f\x1a\x59\xdf\xd2\x23\x3f\xe8\xd6\x9a\xcd\x4d\x2f\x99\xa2\xdc\xa2\x1c\x11\xc4\xb7\xb2\xdb\xe9\xc5\x30\x3c\xd8\x07\x2d\x76\x8e\x9d\xee\x68\xb9\x6d\x02\xaf\x56\x35\xbd\xee\x7e\x55\x0b\xbe\x21\x7b\x55\x05\x9c\xb2\x08\x52\x28\x55\x1c\x05\x5c\x26\x82\x23\x04\x08\x0a\x21\x52\x71\xc0\xc3\x00\x00\xa2\x70\x18\x49\x06\x83\x28\x64\x28\xa4\x32\x11\x22\x10\x8c\x27\x82\xc5\x21\x7e\xc1\x18\x94\x16\xc6\xdc\xb4\xf3\x09\x82\x39\xfd\x04\x63\x30\x67\x17\x8c\x91\xf4\x62\xe7\x7b\x1c\x63\xee\xce\x5e\xbd\x57\x16\xbc\x00\x87\xf9\x1e\xbd\xf3\xa8\xff\xfc\x7c\x4e\x2b\x6f\x82\x01\x75\xf7\x2a\xb6\xc2\xb5\x36\xd0\xe9\x74\x34\x5d\x57\xdb\xd3\x6d\xa3\x16\x77\xea\x19\x3d\x63\xf5\xe6\xe3\x9a\x16\xd5\x7b\xf5\x46\xa6\x56\x33\x1b\xf3\xd6\xa0\xa1\x1f\x36\x83\xdd\xa6\x3f\xd9\x6e\x8c\x1d\x1f\xed\xf6\xd3\x8c\xc6\x4c\x50\x21\x2a\x80\x2b\xb4\x38\x56\xb4\xde\x13\xd9\xab\x0f\xf1\x3b\xf3\xb7\xec\xdd\x6f\xc0\xbc\x87\x30\x27\x45\xfa\x1f\x64\xde\x7d\x39\x8e\x2b\x45\x5d\xf5\x83\xaa\x24\xdf\xca\xa7\xef\xf6\xc7\xfc\x32\xff\xae\xae\x7c\xfa\xe4\xb3\x3e\xd3\xdf\x7c\xc7\x2f\xd8\xfb\x87\xb0\x4f\x4b\xe9\x4c\xaf\xf5\xbb\x7b\xe8\xff\xc4\xde\x6f\x62\x90\xe9\x62\x2f\xe6\x61\xc8\x65\xc2\x24\x95\x0a\xc4\x22\x96\x21\x8e\x30\x4c\x98\x92\x18\x88\x48\x44\x40\x90\x48\x2a\xc6\x09\x52\x49\x40\x99\x0a\x80\x24\x2a\x09\x58\x1c\xc4\x52\x12\xf4\x13\x7b\x71\x5a\xd8\x7b\x33\x1e\x4c\x10\xfe\x49\x86\xe5\xcf\xd9\x33\xf6\x22\xcc\x2e\xf1\x60\x8f\x63\xef\x27\xf1\x60\x67\xff\xf4\x13\xb1\x42\xa7\xb1\x5a\xe7\xe2\xab\x7b\xfb\x41\xe5\x88\x0b\xf6\x2e\x8f\x73\x69\xed\xf7\x8b\x71\xe6\x30\x3b\xac\x7a\x63\x63\xe8\x4d\x64\x66\xb9\x2a\xc6\x55\x0f\xd9\xab\x46\xc0\x9b\xce\x01\x6b\xc7\xbc\xb3\x21\x3e\xed\x8a\x82\xbe\xa7\xc8\x15\x82\xf6\x5c\xdb\xed\x54\xd6\x66\x0d\xec\xd8\xa1\x2f\x70\xc4\x32\x33\x36\x1a\xea\xd9\xce\xe6\xf7\x63\xef\xd3\x71\x56\x5f\xda\xbb\xdf\x80\xbd\x8f\x55\x51\xba\x18\x23\xdf\x7e\x27\x6d\xbb\x6d\x3a\x58\xe4\x6a\xff\xa8\x4a\x96\xe2\xfe\x7d\x2d\xfe\xe5\xcf\xed\x5f\x3a\x76\x6f\x2d\x0d\x2c\xff\xcd\xef\x4c\x6a\x58\xfe\x28\x96\x6a\xdf\x70\xa6\xf7\xd0\x7f\xc1\xf2\xef\x62\xb8\x29\xeb\xd1\x51\x9c\x10\x1a\xfd\xd0\x93\x23\x2a\x31\xa7\x98\xc2\x38\xe0\x51\xc4\xe3\x84\x11\x48\x92\x84\x48\xcc\x61\x80\x31\xe5\x08\xc7\x82\x44\x41\x12\xa8\x38\x80\x31\xc4\x8c\x9d\x62\xbb\x21\x4f\x31\x5e\xe6\xa6\xad\x56\x0a\xc0\x3f\xb6\xd5\xfe\x9c\xe5\x18\x40\x42\x88\x80\x48\x3c\x1f\x2f\x73\x47\xb5\x84\x3b\xee\xd9\xbb\xd5\x12\xae\xe2\x55\x0a\xc3\xf2\x42\xf9\x9e\x29\x4c\x6d\x95\x67\xc6\x1e\xf5\x77\xb5\xe1\xc0\x4c\xf2\x76\x97\x0c\x57\x95\x6a\xb7\xab\x78\xed\x30\xad\x0e\x8a\x03\x39\xb2\xbc\x61\xb2\xdd\x96\x8d\x71\x67\x70\xb4\xb5\x25\xca\xc9\x8a\x65\x2c\x13\xa3\x6e\x6c\x87\xd3\xdc\xbe\x54\xea\x17\x07\x89\xa9\xdc\x4a\x6a\xd5\x12\xcc\xab\xaf\x3e\x12\x93\x30\x7d\x6f\x67\xff\x31\x6e\xe8\xa1\xe9\xd1\x7f\xb6\x5a\x42\xda\x3e\xa9\x5f\xc7\xe7\x7c\xee\x0f\xfa\xc4\x34\xed\xef\xb5\x3d\xdf\xb2\xed\x3e\xb2\x57\x4f\xdb\x76\x53\x3c\xab\x7b\xe8\xbf\x60\xd2\xa0\xb2\x99\xef\xfb\xaa\xb9\x73\xf5\x5d\x32\xab\xe5\x83\xbc\x96\x71\x0a\x75\xa1\xba\xd3\x81\xb3\xdb\xc1\xf1\xf8\xb8\xca\x96\x14\x2a\x4c\xca\xc8\x6d\xc7\xd5\x4c\x46\xac\x9c\x76\x50\xae\xf8\xfa\xd6\xcf\x83\x5d\xcb\x59\x8b\xaa\xe9\x64\x1c\x95\x37\x67\x0b\x73\x52\x14\xf5\x7d\xfa\x6d\x83\x23\x98\x50\x89\xe3\x90\xc6\x90\x24\x92\x03\xc4\x43\xc5\xa5\x40\x30\x09\x08\x63\x48\x28\x08\x38\xc0\x24\x09\x03\x19\xd0\x40\xc5\x09\x0b\x64\x14\x70\x19\x03\x0a\xe3\x98\xe3\x17\x4c\x3a\xdb\x76\x75\xad\x8e\x34\xd3\x37\x4b\x85\xa6\x89\xca\xa5\x02\xad\x57\x3c\x8b\x56\x0a\xed\x2e\x73\xb9\x57\x28\xd7\x1d\xdb\x68\x22\xe4\xf0\xa2\x47\x8c\x46\xc7\x6a\x70\xcb\x30\x6a\xf7\x62\x12\xfa\x44\xbf\xfc\x31\x8b\x5f\x31\x89\x22\x74\xf1\x1f\xde\x19\x23\x79\x0f\x26\x3d\x24\xef\xbd\x8b\x49\xd6\x2b\x7d\xb7\xc0\xfb\xe1\xae\xab\x60\xa6\xd4\x49\xfa\x71\x7b\xea\x6b\x0b\xda\xf4\x2c\x4f\x06\x53\x95\x2f\x4e\x8a\x0b\xb0\x6b\x03\x25\x9d\x6a\x21\xb1\x59\x4b\xac\x97\xfd\x42\x3b\x6e\xcf\x06\xa6\x81\xe2\x96\x65\x4d\xfa\xfb\x4c\x98\x5b\x5b\xb2\x59\x6b\x6c\x07\x89\x95\x9d\x24\xc6\xd8\x1d\x7d\x0b\x26\xdd\x19\x43\x98\x3a\x26\x3d\x49\x3f\x45\x4c\xba\x37\x0e\x2e\x6d\x4c\x4a\x85\xfe\x13\x98\xf4\x37\xc5\x29\xde\xf4\x37\x3e\xb0\x57\x69\x62\xd2\xb3\x67\x75\x0f\xfd\x17\x4c\x1a\x6e\xac\x6d\x6e\x7c\xf4\xc8\xbc\x9b\xb1\x68\x27\xea\xe9\xcb\x71\x55\xb5\x13\xb8\x88\x76\x6a\xe2\x4f\x96\xcd\x9c\x57\x3f\x02\x02\xfa\x22\x9c\x37\x0f\x68\x63\xf6\xdb\xb4\x33\x28\xb8\xb5\x2e\x75\x5b\x9d\x20\x9f\xa7\x2b\x1b\x78\xb0\x22\x4b\x99\xa2\xf0\x32\x5d\xe1\xb4\xf5\xd4\xfd\x8d\x01\x0d\x64\x8c\x55\xc0\x70\x2c\x95\x82\x94\x62\x2a\x95\xe4\x18\xf3\x50\x85\x90\x10\x46\x94\x0a\x28\x0b\x11\x06\x01\x89\x80\xe2\x09\xe2\x54\x20\x46\x48\x04\x99\x00\xa7\x36\x12\xec\xe9\x0a\x3e\xb7\xbc\x8c\x12\x02\x76\x2a\xe7\xf0\xf9\xec\x19\xda\x04\x10\x38\x85\x02\x3e\x6f\x5d\x27\xbf\xbc\xa9\x0f\x48\xe7\x1f\xb5\x4d\xea\x5b\x46\x36\xf4\x83\x66\xb7\x5b\xc4\xed\xa2\xdc\x17\x17\xde\xac\x43\xe3\xb8\x5c\x02\x5a\x6c\x05\x5a\x33\x97\x97\x48\xd5\x93\x3d\xe8\xb4\x9a\xd6\x62\xce\x96\xde\x9e\xf0\xa4\x92\x6b\xed\x47\x1d\x7f\x21\x42\x2d\x5f\x49\x7c\xbd\x41\x3d\xaf\x56\xef\x09\xb6\xd2\xec\x56\x29\xad\x0a\x0b\xd7\x6f\xc0\x9d\x15\x0e\x86\x41\x9b\xab\x2b\x88\xcb\xbf\x4b\xf9\x16\xfa\xa4\x47\xff\x03\x77\xd8\x97\xd1\xe7\x1a\x07\xef\xcb\xaa\x5f\x54\xe7\xde\x7a\x77\x55\x34\xe6\x97\x14\xb3\xf3\xf8\x9c\xa3\x3d\x41\xdf\x6c\xb7\xb6\xbd\x27\xe8\xbf\x9d\xfd\x9d\x5a\xc6\xbb\xe8\x52\x7d\x7c\x2f\x7e\x9c\x05\xbc\x5a\x86\xba\x73\x2f\x9e\x3d\x8b\x1f\xf4\x8f\xbd\xc7\xe8\xbf\xa0\x8b\x5f\x77\xb3\x08\xd9\x23\xd4\x69\x44\xb0\x91\xa8\x46\x30\x66\xd6\xc6\x9b\x0e\x0e\x6b\x2d\xdf\xef\xfc\xc0\xba\x6c\x34\x35\x3d\x11\x59\x63\x73\x1f\x2c\xe2\x05\x14\xb1\x83\x8f\x5a\xbb\xd2\xb5\x26\xa5\xad\xbd\xcb\x1d\xf3\x48\x1b\x6d\xda\xf0\x08\xfc\x9a\xb3\xd4\x72\x63\x3d\x75\x2b\x1c\x0b\x00\x65\x50\xc8\x90\x50\xce\x80\x62\x80\xc7\x18\x43\x25\x81\xa2\x81\x08\x89\x8a\x38\x02\x92\xc1\x28\x11\xa1\x12\x2a\x56\x49\x44\x82\x00\x0b\x11\x52\xce\x03\xa6\xc2\x17\x74\x79\xb2\x80\xcf\x2d\x3f\x9a\x84\x40\x90\x0f\x63\x58\x5e\x67\x5f\xd0\x85\x48\x94\x42\xfd\x9e\xe2\x9b\x63\xfd\x05\x5d\x1e\x90\xb3\x3f\x40\x17\x6d\xaf\x53\x35\xe6\xeb\xd1\xd0\x2d\x00\x95\x58\xdd\xe6\xa0\x60\x19\x9b\x19\x68\xec\x0e\xfe\xb4\xba\x68\xb6\xf2\xa8\xbf\x37\x72\xeb\x09\xef\x67\xb7\xad\x51\xce\xc6\xaa\xb7\xb3\xbd\x86\xe0\xd3\xc1\xb4\x3d\xea\x4f\xb6\x51\x61\xde\xec\x24\x71\x21\xb6\x07\x3b\x3e\xea\xc5\x49\x4b\xfb\x0b\xd0\xa5\x6f\xb5\xcb\xe4\x59\xee\x9e\x22\xfd\xb7\x67\xfa\x25\xfa\xe9\xa0\xcb\x5b\xee\xfe\x41\x33\xfc\xef\xe2\x68\x73\x9e\xab\xef\xdd\x27\xe8\xff\x32\xfb\x1b\xf5\x85\x94\xcb\xc3\x3d\xc5\xdd\xb5\x94\xd0\x65\x2f\x1e\xa3\xff\xb3\xfa\xa8\xbb\xf1\x8a\x31\xef\x16\x80\x5e\xcd\xe7\xf7\x9d\x16\x19\xe4\x5c\xbe\xa8\x9a\xab\xca\xa4\x78\x0c\x46\x30\x27\x67\xca\xdd\x85\xdd\x0d\x49\x38\x2c\x6a\xf5\x35\x2e\x54\x72\x63\xb0\x75\x28\x99\xc3\x6e\xa1\xbb\xc4\x8d\x52\x0b\x4e\xf1\x20\xdf\x9f\xad\x1c\x5a\xc8\x4f\x61\xfa\x15\xb1\xa1\x08\x13\xa6\x54\x8c\x80\x4a\xc2\x10\x24\x12\x70\xa9\x48\x28\xb8\xc0\x1c\x0a\x49\x64\x04\x71\x18\x41\x14\x41\x8e\x03\x06\x30\xc3\x11\x0a\x45\x8c\x03\xc0\xe3\x24\x0e\xa2\x17\x74\xc1\x4f\x96\x87\x03\xb7\xe1\x45\xb2\xcf\x94\x97\xf3\xec\x0b\xbc\x48\x70\x31\xa3\x3d\x0e\x2f\x6f\xbd\xc1\xbf\xc0\xcb\x03\x6e\xea\x0f\xe0\x45\xcf\xd6\xdb\xeb\x19\x3b\xac\xb5\x45\x7e\x1e\xb1\xae\xd5\x19\xee\x3c\xf7\xe0\xcd\xe6\x25\xa7\x7e\x14\x6e\x63\x7b\x04\x91\xa8\xcf\x6a\x4b\xc7\xcc\xf5\xaa\xe6\x46\x1b\x8a\xcc\x28\x3c\xf4\x1b\xdc\x1d\xc4\xce\x62\x17\x0e\x8a\xcb\x06\xd0\x5a\xc2\xef\x04\x39\xd7\x25\x47\x95\xd9\x95\xff\x02\x78\x89\x77\x2d\xd5\x7a\x96\xbd\xa7\x48\xff\xa1\xea\xa7\xa9\xc0\xcb\x2f\xec\xfd\xa1\x92\x64\x4f\xd0\x7f\xb6\xe2\xe6\x2f\xb3\xbf\x31\xfc\xfd\x3b\xe0\xe5\x51\xf6\xae\xa5\x04\x2f\xd7\x8a\xec\x03\xf0\xb2\x05\xed\x30\x70\x56\x4b\xb7\xd4\x67\x5e\x3c\xa9\xb7\x67\xc2\x02\x95\x31\x2b\x35\x86\x23\x95\x35\xcd\xa5\x90\xf9\xc4\x0c\x0c\x76\xec\x6b\xbe\x51\x2f\xf7\x0a\xd9\xda\xdc\x16\xb3\xd6\x06\x14\xa6\xc3\xc5\xca\x26\x83\x00\xac\x35\xab\x66\x5b\x93\x5e\xcb\x74\x2a\xb8\xb6\x4a\x3f\xdd\x0b\x12\xa4\xa4\x10\x21\x4c\x18\x97\x82\x24\x9c\x04\x90\x0a\x18\xc5\x52\x05\xb1\x4a\x88\x94\x31\x03\x09\x8c\x41\x1c\x47\x44\x32\xc6\x60\x10\x20\x45\xa9\x44\x58\x70\x46\xd4\x0f\x6c\xf8\xd9\x53\x5c\xcf\xeb\xc4\x40\x7a\x83\x50\xbd\x58\xaf\x56\x89\xab\xe5\x9b\xa8\x6c\x75\xb5\x62\xa1\x45\x6b\x1a\xcf\x53\x5c\xc2\x6d\xa7\xc6\x3a\x66\x91\x79\x9d\x7c\xb5\x51\xed\x96\x5c\xfb\x3f\xff\xfd\x3f\x4a\x05\x26\x94\x13\x41\x6f\xe2\x0c\x02\x02\x90\x0f\x71\xe6\xe7\x2c\x23\x04\x11\x0a\x31\xc5\xaf\xe1\x80\x05\xb2\x31\x40\xc9\x73\x06\x4d\x6b\x19\xbb\x5a\x1c\x8f\xc7\x87\x5c\xa9\x14\xc5\x06\xcd\xf0\xf6\x66\x39\xcd\xac\xea\xb5\x25\x72\x50\xf3\x74\xd8\x67\x9c\x39\x55\x28\xfc\x24\x14\xff\xfc\xa6\xd8\xb4\x22\x3b\x0e\x1a\xc5\xfb\x0d\x89\xc6\xc3\x66\x04\xfc\xc6\xe6\x60\x4e\x27\x46\x6b\xb5\x2f\x05\x93\x63\xb1\x33\xd8\x12\xcb\x1e\xcd\xce\xb9\x93\x97\x90\x03\xdd\x29\xf7\xa4\x3e\x3e\xce\x46\xfb\x00\x8f\xb4\xfc\x74\xde\x55\xbd\xc6\x60\xea\xf5\x32\xc9\x06\x86\x0b\x9a\x5d\x9a\x4d\x26\x87\xeb\xd1\x4b\x77\x1a\x4b\xc6\xd7\x6f\x67\xfe\x75\xbd\x6e\x31\xd7\xda\xd3\x75\x27\x19\x6a\x3b\x6f\x1f\x84\xb2\x45\xf3\xce\xb0\xbb\xcd\xd5\xb7\x78\x23\xe9\xd0\x0b\x0f\xc7\xcd\x22\xee\x66\x47\xc3\xd5\xa1\xb2\x6a\x81\xa1\x93\xed\x01\x5c\x4f\xe0\xb1\x17\xab\x35\xec\x0f\x49\xdf\xf0\xed\xaa\x98\x74\xc8\xcc\x9c\xad\xc1\xaa\xd1\xec\xf6\x76\xa9\xa5\x7b\x19\x57\x65\x10\x86\x03\x52\x73\xe7\x8a\x15\x2b\x9d\x35\xd5\x72\x94\x75\xbc\x82\x39\x9b\x43\x52\x9b\xf2\x75\x87\x6d\x12\xb6\x37\x33\x5b\x9f\x77\xab\xa7\x2f\xe9\xcd\xbe\xaf\x3b\x97\xf3\x78\xc8\xbd\x92\x22\xfd\xc7\x42\xdf\x2f\x7c\xd1\xb9\xda\xbf\x70\x74\x84\x3e\x0f\xea\xdc\xe6\x7d\xd4\xa9\x56\x71\xbd\x5f\xe2\x85\x46\xec\x57\x1b\x47\x73\xbe\x08\x2b\xe3\xa0\x94\xed\xb5\x82\xc6\xb9\xcb\xc0\x95\xcb\xfd\xce\xfb\xfc\xb2\x94\xaf\xa4\x7b\xd5\xfe\xcc\xfa\x3c\x48\xdc\xbb\xdd\x2f\xce\x65\xfe\xde\x77\xa9\xe8\x58\xbd\xd2\x89\xb6\xe1\x7e\x72\x7e\x9f\x63\x4c\xed\x39\xfa\x05\xf2\x18\xfd\x17\x8c\x19\x59\xcd\xfc\x04\x76\x33\x15\x23\x97\x58\xf3\x2d\x6c\x8e\x14\xab\x4e\x84\x65\x67\x63\x8e\x27\xd5\x68\x5b\x76\xd8\x9c\x4e\x33\x0d\xe7\x58\x38\xec\x9b\x8d\x0a\xcf\x18\xcd\xc8\xca\x7a\x4e\x8e\x1e\x70\xc7\xae\x0d\xcc\x6a\xcf\xc7\x87\x6e\x38\xe8\x35\x06\xb8\xb1\x2f\x56\x27\x46\xea\x2a\x0c\x06\x42\x80\x28\x22\x28\x12\x31\x01\x28\xc0\x20\x12\x01\xa6\x88\x87\x94\x29\x18\x63\x1c\x43\x11\x0b\xae\x08\x8b\x21\xc6\x28\x0e\xa8\x4a\x14\xe4\x08\x26\x91\xe0\x2a\x39\x19\xc8\x48\x7a\x18\x43\x6e\x9a\xca\x30\x66\xe8\x63\x8c\xf9\x39\xcb\x00\x44\x92\x12\x86\x08\x78\x1e\x63\x6e\xa6\x14\xdf\x89\x31\x2f\xe3\x4d\xe3\xcf\xe4\x27\x4f\xcb\x69\x83\xb8\xdb\x68\x6c\x9c\xee\x62\xbc\x5b\x1f\x86\xd3\x21\x8d\xb2\x0d\x60\xb7\x1a\xf6\xc0\xdd\x1e\xc0\x60\x5e\x2b\x1f\xa6\xf3\x31\x69\x6d\x1d\xb1\x50\x5c\x37\x8e\x78\xbb\x2a\xd7\x9d\x71\x15\xf5\x28\x58\x78\x83\xe5\x21\x6a\x38\x51\x30\xa3\xac\xbf\xad\xf7\x97\x66\x52\x5f\xd9\xfa\xd7\x9a\x11\x7e\x0d\x2f\xae\x8c\x0b\xf7\xf2\xeb\x57\x77\xbc\x06\xde\x7f\xa7\xae\xf6\xf5\x9d\x91\x4b\x99\xfe\x43\x78\x75\xfe\xd2\x5b\x1e\x77\x2f\x3f\xbe\xb8\x78\x8d\xcf\xf4\x86\xcf\x79\xdc\x33\xf4\x03\x4d\x35\x9e\xa0\xff\x34\x8f\x7f\xf3\xfc\x0f\xf1\xf8\x3f\x84\x31\xb7\x1c\x42\x8f\xec\xc5\x99\x50\x3a\x77\xe1\xd9\xb3\xb8\x87\xfe\xcf\x10\xb8\x6f\x62\x5a\x29\x87\xc0\x85\x91\x64\x24\x51\x49\x14\x62\xcc\x02\x0c\x12\x04\x15\x22\x20\x49\x92\x28\x48\x38\x8e\xb8\xe2\x54\x08\x10\x47\x30\x94\x12\x73\xaa\x18\x4a\x04\x89\x71\x4c\x25\xa2\x1c\xbc\xe0\xdd\x39\x04\xae\xda\xb5\x6b\x25\x9f\x76\x1a\xf9\x8e\x4d\x7d\xa7\x5b\xa9\xda\x14\xd9\x7a\x89\x36\xf4\x22\xf1\xed\x56\xa7\x52\x2c\xb6\xed\x6e\xa3\x84\xac\x1a\xc9\x15\x50\xb1\x50\xac\x22\xfd\x4e\xbc\x23\x00\x7f\xd8\x39\xe8\x75\xf6\x8c\x77\x14\xe0\x8b\x4e\x95\xdb\x34\x6b\xed\xe1\x7a\x9e\x5f\x85\x9b\x7c\xd7\x07\x38\xb2\xcd\xe5\xaa\x5f\xa4\x3d\x58\xae\x34\x26\xf3\xd5\xa1\x3d\x5b\x66\x72\xf5\x79\xe9\x74\x79\xbe\x86\x77\x6f\xc3\xb2\xef\xb8\x67\x6f\x9b\x45\x9e\x86\xfd\x4a\xdf\xb5\x0d\xad\x9d\xa5\xce\x1c\x19\x13\xab\x55\x13\x24\x9a\x1c\x9a\xd4\xce\xf6\xf6\x53\xd8\x39\xf6\xa2\xca\x72\xd4\x68\xb4\xf8\x2e\x99\x6f\xb0\x3c\xa8\x05\x66\x8d\x5e\xa6\xb7\x42\x87\x79\x7d\xb8\xa3\xfd\xfd\x3e\xae\xb4\x86\x59\xbb\x6d\x96\x06\x73\x65\xd8\xd3\x28\x1e\x60\xa1\x7d\x49\x47\xfa\x52\x08\xdc\x35\xe6\xdc\x89\xf7\x7a\xa7\x97\x37\xd3\xc4\xbc\x27\xe9\x3f\x1b\x02\x97\x22\xe6\x3c\xcb\xf3\x53\xa1\x7f\x6f\x08\xdc\x5f\xaa\x23\xde\xc2\xa4\x47\xe4\x93\x34\x31\xe9\x77\xca\x47\x3f\x83\x14\x2a\x39\x2f\x3b\x62\x53\xdf\xf1\xdb\x6e\xf6\xd8\x47\x61\xb1\x36\x0a\x33\x86\x9d\xb4\x43\x27\x07\x0e\x9b\x7a\xb1\xd8\xdc\xe6\x32\x13\x9e\xe0\xe2\x61\x99\xcc\x4b\x06\xd3\x8f\x61\x69\x6c\xd7\x8c\x49\x3e\x6f\x91\x7d\xa3\x26\xba\x2d\x77\x51\x1a\xef\x2a\x41\x04\x59\x39\xd9\xa5\xaf\x83\xa9\x48\x04\x22\x96\x71\x48\x71\x12\x21\x26\x22\x88\x24\x89\x11\x12\x52\x52\x85\x78\x42\x10\x8a\x24\xe0\x02\x2b\x02\x28\x89\x09\x09\x42\x00\x90\x48\x14\x8c\x02\x04\xc1\x29\x55\x08\x3f\x1d\x02\xc7\x6e\x21\x11\x91\x10\x7f\xd8\x26\xfe\x34\xcb\x2f\xd0\x26\x24\x49\xc1\x8b\x64\xbf\x39\xd6\x5f\xde\xd4\x07\xa4\xff\x8f\x82\x14\x5a\xeb\xc8\xef\x1c\x96\x8c\x1c\xb6\xd9\x65\xa9\xb6\x04\xd9\x6d\x9b\x6c\xfd\xc3\x6c\x9a\xac\x3a\xfb\xf9\x3e\xbf\x1a\xf8\xe5\x7c\xa9\x88\xc3\x09\x1b\x65\x0e\xf3\x81\x96\x3b\x28\xb1\x06\xa5\x0c\x0f\x8f\xfb\x46\xb9\x36\x9c\x0c\x4b\xa5\x2a\xad\x2d\x77\x5c\x8b\xe2\xe9\x58\xe7\x95\xd4\x9a\x0c\x5d\xbf\x01\x77\x7a\x71\x66\xa6\x17\x8c\xaf\x22\x51\xad\x77\x29\xdf\x42\x9f\xf4\xe8\xbf\x3d\xd3\x2f\xd1\xbf\x42\x9f\x27\xc2\xae\x7a\xf5\x68\xd1\xbe\x22\xe4\xbf\x4f\xf1\x73\x8e\xf6\x04\xfd\x8e\x0c\x56\xd6\x13\xf4\x35\xed\xcf\x69\x19\xef\xa2\x4b\xf9\xf1\xbd\xf8\x71\x16\xfe\x55\xb5\x9c\x0f\xda\xfb\x7e\xdb\x59\xfc\xa0\xdf\x99\x3d\x46\xff\x05\x5d\xac\xb2\xd7\xb1\x56\x8b\xcc\xa6\xb2\xcc\xb2\xc3\x90\xc9\x1a\x87\x71\x19\x55\x16\x45\xcc\xad\x55\xa0\xea\xbc\x30\xd1\xf7\x87\x41\x84\xe8\x66\x5e\x5b\x2d\xfc\x9e\xa6\xa6\xb5\x72\xa4\x6f\x37\x48\x88\xd6\xe0\x48\xe8\xec\x30\x18\xc6\x4d\x26\x9c\x5d\xde\x9b\x53\x77\x73\x4c\xbf\xa0\x53\x98\x84\x11\x8d\x25\xa1\x3c\xe2\x90\x87\x2a\x11\x84\x23\x09\x03\xa6\x10\x09\xb9\x8a\x44\x14\x92\x24\xe1\x82\xc4\x2a\x22\x54\xa2\x30\xc6\x20\x02\x02\x12\xa6\x80\x42\x8c\xbc\xa0\xcb\x93\x21\x70\xb7\x52\x7d\x24\x91\x98\x7c\xd8\xc2\xee\x75\xf6\x8c\x2e\x02\x83\x8b\x5d\xef\x71\x74\x79\x1b\x0c\xfc\x0b\xba\xdc\x2b\x67\x7f\xd2\xc2\xce\x87\xcd\x41\x65\x98\x59\x0c\x45\xe6\xe8\x87\xa8\x1d\x32\xd0\xcf\x2c\x3a\xfb\xee\xda\x4a\x1a\xf6\x2e\x04\xa3\x6d\x69\xbd\x6e\x58\x5a\xde\xed\xdb\xce\xb0\x10\x45\x83\xb6\x3b\x9b\xef\x65\xd9\xa8\x3b\xac\xd5\xab\x4d\xca\xe5\xbd\xb5\x75\xe7\x85\x63\x6c\x4f\x83\x5e\x1f\x6f\x5d\xe3\x2f\x40\x97\xf1\xb6\xb3\xcc\x3d\xcb\xdd\x53\xa4\xff\x50\x80\x77\x3a\xe8\xf2\x96\xbb\x3f\xe4\x17\xff\x83\x41\xc5\x9a\xf6\xe7\xf4\x85\xb4\x03\xac\x9f\xe1\xee\x5a\x4a\xe8\x72\x2d\x69\x3c\x80\x2e\xa8\xda\x22\xc3\x42\x76\x31\xcb\xd6\x56\xc8\x96\xe3\x4e\x66\x5d\x48\x16\xe3\x55\x27\xac\x7b\xa0\xbf\xb2\x65\xb1\x7c\x58\x86\xad\xbe\x9b\x03\x85\xfa\x70\x76\xc8\x7b\xfe\xb8\x55\x2a\xa9\xa4\xb1\x03\xcd\xcd\xb8\x60\xd0\xc1\x41\xd4\x43\x50\x6a\x54\x70\x7f\x8e\x66\x85\x88\x83\xf4\x53\x4a\x41\x0c\x91\x60\x84\x87\x28\x94\x98\x0b\x16\xb2\x90\xb3\x18\x0a\x14\xa9\x28\x00\x90\x63\x4e\x39\x60\x2c\x11\x2a\x48\x00\x45\x38\x82\x61\x80\x43\xc2\x93\x88\x25\x1c\x81\xe8\x67\x7b\xd3\x53\x99\x03\xbd\xdd\xcc\xd9\x0d\xd3\x6c\xf1\x52\xd9\x6b\x55\xf2\x95\x86\x97\xd3\xca\x5e\x11\x35\x49\x01\x95\x9c\x9a\xd7\x41\x0d\xda\xac\x97\x4b\x46\xbd\xa0\x79\x06\x6d\x19\x79\xcd\x77\xfe\xf3\xdf\xff\x23\x1c\x11\xc2\x08\x40\xf4\x26\xce\x30\x80\x99\xfc\x10\x67\x7e\xce\x52\x48\xb1\x64\x10\x32\xf2\x1a\x6a\x5d\x69\x77\xfb\xd5\x42\xbf\x94\xb4\x36\xd2\xce\x77\x4b\xc4\x2d\x6f\xa6\xad\x4c\x01\xcc\x8f\x1c\xc1\xf2\x8a\x2c\x5b\x4e\x49\xf3\xf2\xa8\x77\xd4\x5e\x71\xe6\xd4\xa5\xf8\x13\x7b\xda\x79\xf4\xb2\xa5\x6c\x6e\xbc\x94\x96\x93\x9d\xb6\x4d\xbb\x1c\x4d\xf4\xa3\xde\xaf\xf8\xf3\x89\x72\x8f\xfb\x42\xdf\x9a\xb0\x6a\xee\xb8\x3f\x4e\xbd\xb3\xfd\xe8\x4d\x87\x87\x9c\xb5\x97\xb3\xca\x39\x91\x67\xe7\xcb\xbc\xab\xd5\x51\xa3\x52\x8b\x71\xb1\xb6\x9d\xe4\x72\xeb\xdc\x08\x0d\x93\x59\x0f\xd8\x96\x69\xf9\xa3\x72\xd5\x3a\xba\xd5\xc5\xd6\x1f\xf3\x41\x77\xb0\x9e\x38\xd4\x72\x27\xa3\xd2\x78\x9b\xad\x3a\xb4\xab\x82\x4e\x6e\xe1\xa9\x7c\xdf\x71\xe7\x23\xb0\x42\x5e\x23\xe7\xa6\xd6\x89\xfb\xba\x5e\xd1\xbe\x3d\x31\xc1\xc0\x9c\xcb\x06\x07\x7e\x34\x5a\xf6\xb5\x0d\x8b\x9a\x64\xd8\x98\xd6\xb6\x61\x6b\x73\x1c\xac\x5d\x32\xcb\xa9\x24\x30\xce\x65\x5f\x2e\x7e\x9b\x0f\x3a\x3f\x9f\xc6\x0d\x9c\x49\x8f\xfe\xb3\x36\xb4\x2b\xc9\xd7\xb0\x3a\x7e\xb3\x51\x68\x4c\x61\x79\x5b\xef\xa3\xc6\xc6\xd4\xf9\x1c\xd6\x06\xd5\x92\xca\xc8\x75\x83\x3b\x25\x68\x0c\x7a\xaf\x67\x7c\x65\x17\xd1\xdf\x8d\x13\x78\x19\x9f\xf3\xb6\x27\xe8\x17\x50\x6d\xca\x9e\xa0\xaf\xbd\xa1\xaf\x1b\x62\x29\xec\xce\x16\xb4\x78\x26\x6a\xb9\xfe\x1a\xf9\xe5\x4a\xc9\xdc\x0f\x26\xdd\xbd\x51\x33\x07\x66\x27\x9c\x81\x7c\x2d\xef\x44\xc9\xf9\x37\x5f\xbb\xb4\xbc\x5f\xff\xea\x33\xfa\xb7\xb4\x98\x47\xce\xe2\x4c\x48\xff\xa0\x63\xec\xe7\x7b\xf1\xec\x59\xbc\xbd\x0b\xf7\xef\xc5\xff\xaf\xec\x5a\x1d\x68\x66\x34\x1a\x1a\x78\x7d\x68\x72\xda\x73\x43\xb7\x5b\x9d\x61\x56\xa8\xe6\xfa\xf5\x5c\xa7\xa8\x1f\xeb\x0a\x18\xc1\x12\x15\x63\x32\xf1\x97\xdd\xe1\xa6\xde\x2a\xce\xf5\x79\x98\x3d\x36\x37\x1d\xcf\x1e\xf7\x82\x31\xce\x91\xe6\xa8\xd4\xad\x96\xab\x63\xd0\x6b\xa5\xdf\x89\x9b\x71\x06\x60\x80\x54\x80\x20\x0a\x05\x01\x12\x05\x3c\xc2\x8a\x22\x08\x39\x0a\x19\x4f\x48\x28\x71\xc4\x51\xc8\x11\x0b\x00\x53\x94\x00\x09\x79\x84\x82\x50\x60\x05\x83\x1f\xba\x03\x84\x4f\xdb\xc8\xe8\x2d\x74\xe1\xf0\xe3\x1a\x3a\x3f\x27\x5f\xc0\x8a\x60\x9a\x42\x92\xe8\x5b\x6b\xce\x2f\x7c\xe9\x01\x3e\xf7\x51\x92\x68\xbe\x3c\x9a\xb1\x6c\x33\xdc\x82\x6d\x96\xea\x9d\xfc\x68\xb0\xf7\xa6\xe1\x61\xd6\x62\x0b\x97\x1d\xe2\x5d\xd7\x5e\xd4\xf2\x56\xe3\x58\xdd\x57\x92\x4d\x24\x58\xec\xdb\xa3\x2a\x18\x92\xc9\xaa\xa2\x7b\x49\x59\x9b\x6d\xf8\xa0\xe4\xb4\xa7\xa0\xd2\x39\x1c\xc7\xf3\xad\x5f\xd7\x40\x6a\x16\xb2\xeb\xfb\x7f\xa7\x0e\xb1\xe8\xfa\xa5\xd2\x15\x2f\xf9\x80\xa1\x7d\xce\xdb\x53\xa4\xff\x90\x85\xee\x0a\x5b\x9e\xb0\xca\xcc\xc7\xbd\xd9\xec\x59\xab\xcc\x1f\xb4\x0a\x69\xda\x9f\xe3\xe7\xef\x62\x4b\xe9\xf1\xbd\xf8\x71\x16\xf3\xdd\xcd\x87\xfe\xb6\xb3\x78\x7b\x17\xee\xa1\xff\x82\x2d\xf5\x03\x2d\x39\x5b\xf0\xff\xa8\xfb\xb2\x26\x67\x6d\xe5\xef\xfb\x7c\x0a\xd7\xff\x26\x49\xf9\xc9\x31\x08\x10\x90\xd4\x39\x55\x6c\xde\x0d\xb6\xc1\x1e\xe3\xf7\x62\x0a\x84\xb0\xf1\x06\x06\xbc\xcd\xf9\xf2\x6f\x79\x99\x31\xe3\xf1\x8a\x99\x3c\x27\x54\xa5\xe2\x79\x24\xba\x5b\x8d\xd4\x3f\x75\xab\x25\x01\x96\xaf\x17\xf2\xad\xc9\x90\xa9\x44\x5d\x06\x70\xf3\xa2\x36\x1f\x6b\xd1\x2c\x2a\xb5\xe7\xa3\xf5\xba\x13\xbd\x21\xa3\xcc\xce\x5c\x6d\x36\x15\x03\xd9\xa9\xe4\xab\xa1\x2c\x4c\xa8\xcd\xaa\x56\x5f\xd0\xde\x68\xd2\xe7\xe5\x62\x14\x31\x96\x0d\x94\x96\xfa\x0d\xd7\x70\x3b\x36\xe4\xa1\xc5\xf2\xac\xcd\x42\x9e\x64\x21\xb2\x2d\xec\x50\x16\x43\x60\xda\x82\x16\x07\x59\x92\x24\x79\x08\x48\x17\x32\x16\xe5\xf2\x0c\x6d\x51\x36\x72\x49\x82\x40\x2c\x76\x09\xf4\xbe\x07\x67\x97\x13\x50\x62\x80\xf1\x02\x5b\x82\x08\x8d\x92\xda\xd0\x8c\x3a\x05\x4c\xba\x41\x75\x5a\xad\xba\xaa\xaa\xe5\xa6\x52\x36\x85\x8a\xd9\x6e\x42\xbd\x58\x84\x7d\xa1\xdb\x2e\x32\xfd\x96\xf9\xeb\x8f\x1c\xc5\x41\x86\x66\x09\x06\x42\xe6\x47\x0e\x6c\x51\x06\x5c\x02\x12\x8e\xe0\x98\xcb\x3e\xcc\x7b\x29\x0d\x78\x9a\x87\xec\x96\xe4\x87\x8d\xa5\x1c\x23\x86\x82\x90\x9f\xf6\xc3\xb2\xd1\x5b\xbe\x68\x0d\x4a\x57\x8a\xb1\x45\xb0\x9b\xf2\x4a\x2c\x55\x96\x7c\x25\x70\xfb\xe2\x4b\x75\x77\x24\xe1\xfe\xfe\xc0\x1d\x1c\x9c\xe2\xca\x97\x2b\xa6\x1f\xb0\x79\x09\x32\x27\x39\x70\xad\x47\xfb\x69\xa2\x77\xbb\xbd\x61\x82\x92\x08\x5a\x5d\x6f\x77\x04\xa4\x22\xac\x37\x13\x66\xb0\x94\x24\x59\x62\x27\x44\x30\xe7\xed\x82\x18\x3b\x14\xd2\x3a\x1d\x64\xf2\xed\x25\x21\xd4\xd7\xdd\xd1\x62\x42\x2b\x5d\xbd\x4e\x76\x37\x83\x90\x24\xd8\xd2\x48\xf6\x49\x32\x6f\x46\x2b\x67\x3a\x91\x16\x2f\x2e\x5b\xab\xc4\x1d\x02\x0d\x27\xfe\x20\x98\x45\xf4\xe7\xfd\x41\x8d\xc4\xe2\xfc\xf1\xe7\x35\xbf\xef\x32\x8e\x25\x48\xc9\x0e\xa9\x51\xbe\x20\xc3\xfe\x34\x72\x54\xcc\x9b\xf4\x9b\x53\x69\xbd\x90\xa1\xb1\xac\xb8\x82\x62\x7a\x05\xc2\x9b\xf0\xe3\xa2\x39\xd9\xa5\xaa\x1e\xaf\xa4\xbb\xb4\xfd\x31\xf1\xbd\xce\x3c\x62\xc6\xfc\x1f\xf5\x91\x24\xe1\x73\x6e\x5d\x62\xbf\xd3\xc3\xb6\xab\x3f\x89\x86\xcf\xda\xce\x67\x6c\xb7\x3b\xaa\x4d\x9e\xe0\x7f\x8a\x1d\x82\x4a\x75\x58\x3c\x10\x9a\xc1\xd4\x5a\x13\x24\x4b\x8e\x46\x2a\x31\x14\xed\x97\x58\xe3\x86\x9c\xd0\xf6\xea\x05\xbd\xd6\xfb\xe8\xf3\x89\x63\x3e\xa5\xf4\x79\x16\xcf\xf0\xff\xc8\x9f\x4e\xc7\x7f\x57\xf0\x65\x3c\x3c\x3a\xaf\xea\xd1\x9b\x00\x9d\x34\xea\x42\x5b\xcf\x3d\x5f\xc6\x43\x9a\x79\xdd\x13\xfc\x9f\xb6\x07\xc7\xbd\x11\xa9\xc6\xe3\xd3\xf6\x40\x97\x84\x61\x4a\xfe\xe7\xe6\x52\xc9\xfd\x8f\x29\xc6\xc3\x61\x5e\x97\x3e\x97\x25\xc3\xf1\xf8\x08\xff\xf7\x2d\xd1\x28\xc0\x66\x7d\x35\x18\xac\x16\x8c\x53\xb3\x96\x2f\x85\x95\xdd\x73\x28\x79\x52\x2c\x97\x9a\x1d\x9b\x17\x24\xae\x6b\xb2\x01\x16\x8b\x1d\x8f\xef\x22\xbf\xc6\x3b\xda\xda\x5f\x41\xd5\x71\xa7\xf5\x46\xb9\x1f\xb4\xc2\xc9\x2c\xbf\xf1\xea\x5d\xb5\x5c\xe9\x5b\x95\x5a\x9f\xd5\x6e\xef\x59\x03\x8f\xfa\xe9\x10\x01\x0e\x11\x08\x39\x8c\x05\x30\xcd\x12\x00\x5a\x16\xb2\x5c\x0b\x60\xb4\xf5\xd7\x09\xd2\xc5\x8c\x83\x29\x9a\xc7\x2e\xc5\x42\x44\xb8\x9c\xe5\xda\x1c\x4f\x21\xd6\xb6\x19\xc6\x39\x9c\x96\xf1\x9c\x9b\x4e\xdf\x72\xd3\x39\x9e\xbf\x7c\x2f\xd9\x47\xe9\x61\x46\xc6\xb3\x30\x83\xc5\xc6\xd3\x5e\xfe\x65\x30\xa4\x00\xdb\x4b\xa9\x2c\x6d\x19\x36\xba\x2f\x03\x45\xd0\x17\x91\x3b\x0c\x61\xd5\x29\xf2\x35\xaa\xed\x61\xd0\x93\xda\xd5\xda\xa4\xa0\xfa\xb5\x4d\x15\x85\x0e\x39\x2e\x45\xd4\x66\x10\x04\x0c\xb3\x5e\x70\x84\x39\x29\xae\x06\x6a\x57\x09\xfb\x05\xa4\x08\x65\x53\x9b\x13\x50\x5a\xa9\xee\x4c\x01\x91\x94\x99\xa3\x9e\x7e\xb1\x2f\x0a\xad\x5a\x94\x30\xa8\x17\xe2\x7f\x37\x0c\x5a\x76\xfc\x53\x01\x4a\xc2\x51\x7f\x62\x82\xb3\x89\xfd\xf9\xfa\xd9\x09\xce\x4f\x9c\x60\x09\xc2\xcf\x33\xe8\x67\x1d\xf5\x4a\x7a\x5d\x6c\xbf\xc5\x5b\x22\x52\xd1\x78\x50\x17\xcf\x7e\x8b\xd3\xbe\xf0\x08\xff\x03\xb8\x28\xad\xfc\xa8\xd8\xf5\x45\x41\x09\xc3\x32\x6d\xe5\xbd\x5e\xdb\xd5\x63\xc2\x9c\xc5\x93\xd5\x58\xd7\x03\xf7\xcd\x92\x22\xaf\x57\xa3\x9c\xbe\x18\xaa\x9c\x5f\xb3\x30\x46\xf6\x52\x2d\x55\xdb\xa8\x22\x77\xdb\x35\xe0\x52\xa2\x20\x02\x79\x1e\x6b\x83\x48\xee\x31\x6b\x35\xcc\xfe\x4c\x75\xc7\x61\x69\x8c\x31\x60\x2d\x86\xe7\x68\xca\x06\x9c\x45\x30\x96\x43\x70\x96\xed\x42\x06\x5b\x16\xa0\x48\x9b\x75\xb0\x8d\x69\x87\x60\x18\x86\x40\x84\xc5\x5a\x34\xd8\x1d\x21\xc8\x03\xfe\x70\xd0\xdf\xce\x4f\xa7\x61\xb7\x5d\x13\xa5\x7a\x05\xf4\xa0\xdc\xab\xf7\x58\xa1\xa2\x74\xdb\xc5\x7a\x99\xea\x08\x6c\x4f\x54\x28\xb5\xa4\x36\xa1\xc6\xd2\xe5\x16\x53\xef\x95\x1b\x25\xa3\x0b\xaa\xe2\x16\x15\x08\x02\xd2\x2c\x4b\x12\x2c\x75\x0b\x66\x78\x9e\xbd\xb2\x57\x6d\x5b\xca\x6c\x09\xd2\x14\xc3\xb3\x34\xa0\xe1\x47\xc6\xa4\x3c\x9b\xaf\x3b\x8a\x4e\x58\x4b\xda\x21\xa9\xbc\x28\xd6\xd6\xb5\x28\x0f\x85\x02\xaa\xaa\x71\x83\x2c\xcc\x5c\x1a\x97\xbb\x94\xb6\x22\xa0\xf0\x01\x33\x3b\xc3\x94\x80\x95\x63\x8f\xc6\xa7\xeb\x34\x4f\xf8\xd9\x42\xd5\x7b\x49\x4c\x09\x45\xe7\x2d\x52\xb5\x9d\x9f\x2d\x8e\xc6\x8c\x52\x9c\x77\xb9\x92\x57\xe7\xd7\x1d\x08\xb4\x8e\x54\xc3\x3a\xea\xad\x4b\x0d\xa3\x31\xaf\xfa\x32\x1b\x6e\xbc\x92\xcb\x8c\xea\xcd\x7e\xb5\xad\x07\x43\xfb\x45\xa2\xfa\x1b\x54\x56\xf2\x81\xbc\x58\x14\xa0\x52\xd3\xe7\x48\xed\x84\x1e\x23\xf4\xde\x5a\xd3\x46\xbe\x64\xde\x13\x1f\xbe\xcf\xaf\x4e\x54\xd2\x70\x58\x6c\xb5\xeb\xed\x79\x61\x48\xf5\x5c\x5a\x51\x42\x65\xfe\xc6\xfa\x32\xbf\x1a\x03\xe2\xad\x97\x77\x0a\x43\xda\xe9\x21\x56\x36\x3e\x0e\x4e\xf4\xd0\x51\xc7\x17\x9e\x1b\xb0\x93\x1d\xff\x67\xf7\xac\x25\x72\x64\x1e\x36\x35\x61\xab\x58\x7f\xd6\xd4\x3d\x63\x6a\x43\xa0\x4d\x9e\xe0\x7f\x6a\xea\x05\x06\x46\x5d\x51\x89\x4b\x61\xbe\xec\x38\x85\x41\x4b\x8f\xf4\xb0\xb9\x18\x34\x29\xc9\xb0\x0d\xd5\x65\xa8\x7c\x79\x48\x7e\xf4\xf1\x1d\xec\x54\x77\xa3\x41\x4c\xbf\xf6\xfa\x0c\x7f\x03\x11\xcb\x94\xfc\xcf\xc2\x5e\xf9\x39\x5d\xec\x19\x89\xe9\xd7\x3e\x9f\xfc\x16\xfb\xb5\xcf\xc7\xf9\xbf\xef\x0f\x60\xb4\xb6\x68\x4d\x5c\xd1\xf7\x0a\xa8\xab\xc5\xa3\x89\xe0\xcd\xc6\xb3\x22\xd7\x1e\x29\x6f\x35\xcf\x12\xf2\x90\xf3\x87\xb3\xbc\xb9\x79\x03\x7a\xa7\x33\x37\x5f\xc8\x41\x0c\xd0\x4c\x5c\x37\xe7\x2d\x36\x5c\xe6\x87\xd2\x78\x3e\x93\xbb\x35\x7a\xd1\x2a\x72\x44\x75\xd4\x1c\x4e\x3f\xe2\xd3\xde\xd6\x99\xf9\x95\xdc\x5d\xcb\xf5\x0c\xea\x01\x86\x21\x31\x0b\x2d\x0a\x61\x9a\xe3\x48\x9b\xb5\x11\x4b\xb9\x8e\xeb\x70\xbc\x03\x59\xc2\x61\xc8\xdd\xc5\x22\x34\x66\x20\xc9\x40\xc0\x00\x9b\x21\x59\x96\x25\x00\x05\x08\xe0\x60\x76\x8f\x7a\x20\x2b\xd4\xbb\xee\x5c\xd1\xff\x22\xb6\xcf\x85\x1d\x6b\x87\x52\xfa\x88\x7a\x90\x39\x3a\x57\xe9\x51\xef\x34\x1a\x5d\xb4\x4a\xdd\xc8\x2e\x7d\x1c\x52\xf3\x65\xc7\x76\xba\x68\xb5\x64\x4e\x92\x07\xff\x7c\x58\x68\x51\xd0\x41\xbe\x61\x35\x05\x96\x17\x46\x32\x21\xb2\xf3\xd1\x84\x98\x2b\x6f\x84\x0a\xa5\xb1\x3c\xf5\x75\x7a\x3c\x98\xf5\x46\x7d\xd7\x5e\x3a\x88\xaf\x8c\xe7\xea\x94\xd0\xf3\xcb\x9a\xa8\x0e\xba\x1c\x11\xe8\xae\xb7\x36\x49\x9a\xad\xe7\x47\x4b\xbd\x30\xb0\x66\xfe\x72\x6e\xd7\xbd\x6d\x47\xfa\x5f\x40\xbf\x0e\xa5\xd6\xb9\xa3\xae\xd3\x45\x91\xb2\xe3\x9f\xea\x84\x8f\x04\xfa\xfd\x44\xf4\x79\x1a\xfd\x22\xd4\x2b\xfc\x4c\xf4\x3b\x41\x9f\x54\x97\x7b\x3e\xc3\x5f\x07\x61\x37\x25\xff\x5b\x4e\xdf\xdf\x89\x3e\x99\xe8\xe2\x23\xa2\x98\x1a\xfd\xbe\xcb\x68\xed\xd0\x2f\xc6\xeb\x78\xfb\xff\x21\x9e\x4c\xfc\x27\x11\x90\xb2\x29\x88\x91\x6b\x23\x04\x2c\xc7\x26\x90\xeb\xba\x04\x67\x61\x0e\x92\x3c\xef\x42\x1a\x93\x80\xe7\x68\x97\xe0\x68\xdb\x26\x28\x1b\xf3\xb6\x0d\x68\x1e\x92\xa4\xe3\x72\x80\x02\xc0\xde\x23\x20\x95\x15\x02\x5e\xcf\x02\xda\x61\x1c\x20\x2f\xec\x94\x4b\x94\xee\x11\x90\x21\xe0\x71\x7d\x36\x3d\x02\x26\x42\x61\x0d\x51\x68\x29\x77\xfe\x27\xfc\x0d\x7e\xa1\x2c\xf1\xc3\x46\xdc\x30\xfb\x70\x68\xaf\x49\x4f\x70\x7a\xb3\x41\x1b\x49\x66\x6b\xea\x72\x78\x41\xbf\x21\x91\xd7\xeb\x65\xc0\xf3\x5c\xdc\x35\x91\x05\x5b\xa6\x37\x60\xe4\x68\xb0\x01\xbe\xd4\x90\xc9\x2a\x3b\x1e\x56\xea\xfc\xe8\xad\xd0\x7d\x19\xa1\xe6\x70\x69\x74\x97\x12\x77\xcf\xf9\x8c\xdf\x8f\x8c\xf1\x9c\x4c\xf8\x65\xa9\x90\x29\x43\xfe\xa9\xc2\xa1\x19\x21\xe3\x93\xc8\xf4\x34\x32\xc6\xd2\xb0\xff\x33\x91\xf1\x04\x99\x9e\x6d\xff\xe3\xfc\x5b\x43\x36\x25\xff\xef\x40\xc6\xb4\xc8\x94\x89\x2e\x3e\xae\x98\x4c\x8d\x8c\xab\xa5\x69\xd4\x8d\x52\x09\xfb\x2f\x9c\x63\x0e\xca\x5d\x86\x56\x7a\xc2\x54\xa9\xce\x0a\xe5\x70\xd1\xa0\x04\xb7\xe3\xad\xf9\xa5\xeb\xd6\xbb\x2f\xe5\xd2\x62\x5c\xaa\xf8\x5a\x8b\xad\x34\xe2\xb9\x30\x12\x78\x1d\x33\x15\x5d\x2a\x98\x5c\x81\xec\xfa\x94\x4c\xdb\x04\x69\xaf\x96\x1f\x6b\x6d\x43\x2b\x1a\xee\x34\x7e\xb7\x95\x56\xfe\xfd\x24\x80\x62\x92\xe6\x38\x06\xd9\x10\x5a\x2e\xe3\xb2\x2e\x83\x79\x9e\xb4\x09\x92\xc6\x18\xd1\x2c\x83\x20\x89\x10\x47\x91\x80\x07\xc8\x65\x18\x00\x91\xe3\x10\xc8\xb1\x48\x9a\xa1\x08\x82\xa3\x0e\x2e\x24\x9d\x15\x80\x5e\xdf\x6a\xbe\x83\x48\x9a\xbc\xb0\x19\x30\x51\x7a\x00\x50\x9a\x3d\x26\xd2\xa6\x07\xd0\x24\x0a\x4a\xc2\xa0\x72\xe7\x7f\xa7\xaf\x0a\xdf\x11\x58\xd5\xdc\x39\xdf\x6c\x71\x4a\x09\x05\xa3\xf6\x8b\x62\xcd\x4b\xeb\xe5\x50\x1c\xe9\xdd\xc5\x18\xd6\x18\x01\x84\xf1\xb0\x6e\x96\x67\x53\xa1\x37\x6d\x91\xd5\x51\x55\xa6\x14\xc7\x19\x79\x8a\x4e\xd9\xcd\x7e\xa7\xc8\x60\xb7\xd4\x5a\xb6\x47\xbe\x52\x1b\x78\x22\x70\x3a\x94\x0b\x56\xf7\x6c\xea\xf8\x7e\x00\x1d\x57\x70\xc2\xb5\x4b\xb7\x9e\x97\x1d\xff\x54\xeb\x79\x19\x01\xe8\x93\x00\xf6\x3c\x80\x3e\xb7\x86\xf5\x3c\x80\x7e\x06\xb0\x54\xeb\x99\xcf\xf0\x6f\xcf\xcd\x61\x4a\xfe\xdf\x01\xa0\x69\x01\x2c\x13\x5d\x9c\x04\xb9\x1f\xe1\x7f\x00\x50\x63\x06\x97\x06\xd1\x14\xc5\x59\xcd\x24\xba\xc3\xd2\x7c\x18\xd9\x74\xcb\x24\x26\x76\xa0\x79\x8b\x96\x3a\x67\x4d\x1d\x88\x0c\x33\x28\x32\x63\x55\x37\x37\x2d\x7e\x5d\xee\x99\xf4\x50\x89\xc1\x1b\xe8\x8a\xb8\x37\x5b\x8f\xeb\x84\x09\x45\xc9\xaf\x0c\x9c\x59\x57\xa5\xf8\xe8\x63\x53\x49\x88\xe3\x45\x38\xdb\xe9\xfc\x6e\x3b\x5d\x79\x16\x42\x09\xd7\xe6\x11\xc0\x80\xe0\x69\x08\x00\xb0\x01\x85\x49\x87\x74\x20\x24\x1c\xcc\x3b\x2c\xcd\xb0\x10\xd1\x24\x72\x1d\xde\xde\x7a\xa5\xbc\xc3\x40\xc6\x22\x48\x0a\x91\xd8\xe5\x78\x64\x1d\xf6\xc0\x3f\x97\xd8\x72\x7d\xc5\x91\xfe\x17\x41\x92\x90\xbb\x70\x61\x66\xa2\xf4\x80\xc4\x0c\x09\x33\xb8\x48\xe6\xd4\x68\x7f\x89\x0f\xa6\x58\xed\xba\xb4\x8b\x9e\x8b\x2b\xc5\x8d\x3f\xe0\x35\x2c\xcd\x3d\x4b\x54\xdd\x75\xd1\x11\x26\x33\xac\x9a\x86\x3b\xf2\xd5\x4e\xa3\xe6\xc1\x62\x55\x32\x19\x71\x8e\xa7\x33\x59\x5c\x97\xfc\x35\x35\xaa\xe9\x85\xf5\x9a\x7e\x0b\xd6\x82\xe1\x2b\xc5\x80\x32\x41\x23\xaf\xb6\xab\x95\x0e\x3d\x28\x94\x89\x6a\x56\x89\x2d\x62\xfa\x1d\x20\x8b\x02\xb1\x02\xe4\xf1\xf5\x74\x31\xce\xec\xf8\xa7\x02\xe2\x44\x62\xcb\x13\x2b\x8c\x6c\xc1\x90\xed\x67\x81\xf0\x27\xae\x70\x0a\xc2\xcf\x5b\x55\x3b\x0b\x44\x4a\x7a\x5d\x6c\xbf\x05\xa2\x8f\xef\xa7\x8a\xf7\x66\xd8\x17\x1e\x8f\xf7\xfe\xb7\x50\xd7\x45\x34\xaf\x34\x8d\xd9\x60\xee\x4f\x07\x46\x8f\x6b\xf7\x5a\xd5\x3e\x35\x7a\x51\x28\x1a\xca\x5d\x59\xf2\x17\x43\xbd\x35\xd5\x5a\xd6\x2c\x08\x56\x2b\xd4\x9e\x37\x1c\x7a\x33\x5e\x72\x08\x37\x20\x6a\x29\x50\x14\x2d\x07\xa8\xa3\xe6\xa8\xa3\xeb\x45\xad\xd2\x5c\xf3\xdf\x70\x09\x26\x4f\x70\x0c\x26\x29\xd7\xc6\xbc\xcb\xd1\x98\x60\x31\x05\x08\x8b\x70\x68\x9a\x61\x28\xe8\x60\xd2\x72\x11\x40\xae\xc3\x21\x16\xd3\x24\x07\x21\xc7\x72\x04\x8b\x1d\x07\xd8\x34\xb7\x4b\x56\x7c\xbf\x03\x53\xee\x15\x85\x52\x55\xd2\xa5\x0a\x2d\xd5\x80\x59\xae\x41\xb3\x5d\x17\xa0\x51\x53\x7a\xc5\x76\x8f\x15\x1b\xa5\x6e\xa3\xa5\x89\x8d\x7a\x45\xe9\x54\xdb\x55\xc6\x6c\xa9\xf5\x46\x45\xdc\x5d\xed\x4c\xb2\x3c\x07\x79\x92\xbb\x7e\x1b\x26\xfd\x2f\x02\x90\x3c\xbc\x0c\x33\xef\xa5\x80\x61\x21\xcf\x11\x2c\xc7\x7e\xf8\x67\x1a\xd3\x2a\xe9\xb5\xd6\x18\x29\xe1\x8b\x3c\xe7\xbd\xda\x0a\x4f\xfd\xc9\x66\xbd\xe4\xea\x72\xb7\x2f\xae\x5e\xea\x2d\xdd\x33\x03\xd6\x93\xbb\xc2\x07\xcc\x9c\xcd\x20\x4f\xc0\x4c\xe7\x5c\x57\x38\x5d\xf2\xbb\x60\x52\x4f\x1e\x6f\xb6\xa8\xa8\x9d\xdd\xeb\x74\xb3\x2d\x60\x02\xcf\x0a\x04\xd3\x2f\x83\x09\x96\xb0\xa1\x45\x6b\xdb\x20\x50\x67\x41\xad\x06\x1d\xef\xa5\x83\x16\xf2\x98\xde\x58\x5c\xa9\x30\xa8\xf0\xc4\x70\xd2\x85\xc1\x9b\x66\x6e\x04\x11\xf6\x63\xc6\x55\xd9\xa0\x1d\x36\xdb\xf5\x42\x6c\x4c\x66\xa3\x41\x47\x18\x59\xe2\x72\xa5\xae\x3b\x68\x47\xbf\x38\x75\x4a\x6d\x58\xed\x2f\xc6\xb5\x6a\x47\xa2\xba\x21\x30\x95\x6a\x01\xd0\x25\x2a\xc6\xd1\xdc\x58\xd2\xa8\xcb\x74\x90\xe0\xbf\xb5\x87\x3a\xc8\xaf\x88\xa6\xd9\xed\xce\x31\xdb\x32\xa6\x5a\x43\xd5\x4b\xbd\x82\x44\xd5\xd7\x4d\x32\xd6\x97\x41\xcf\xe9\x14\xb4\xa1\x19\x69\xf2\xea\xae\x25\xc3\xe4\x06\xc3\xcb\x70\x96\x70\x46\xd9\x89\xd0\xaf\x04\x52\x7b\xa5\xc7\xa6\x16\x82\x4a\x28\x42\xcb\xeb\xd5\x4b\x85\x55\xa4\x76\xc7\x65\xd1\x8c\xc5\x5a\xf5\x43\x77\xc9\x84\x95\x63\x22\xff\xd7\x61\xaa\x6c\xe7\x65\xc7\x6f\xd5\xec\x37\x67\x9d\x4d\xbd\x9f\xd7\xcc\xea\x68\x38\x63\xca\xe3\x31\x4d\x75\x16\x2f\x30\xd4\x16\x78\xda\x6f\x16\x5b\x13\x47\x9b\x71\x32\xea\x96\xcf\xd2\xdb\xfd\x9d\x38\x52\xeb\xc1\xbe\x26\x4c\x5a\x75\x7a\x76\xec\x30\xe2\xf1\x67\xf2\x11\x77\xf3\xc9\x63\xd3\x80\xc1\x90\x0d\x0f\xb8\xa3\xa9\x64\xd2\xfd\x7c\x9b\xa9\x6a\x2a\x59\x9f\x2c\xe6\x6f\xe1\x2c\x98\x1a\xeb\x4e\xb5\x67\x04\x05\x81\x2a\xb6\x2f\x1f\xea\xbf\xa7\xb7\xfa\xc7\xca\x9f\x38\xf4\x47\x5e\x74\xc4\xb1\x37\xae\x96\xc5\x1a\x39\x80\x4b\xd3\x8b\xca\xc1\xbc\x8a\x22\xbb\x20\xad\xc8\x97\x16\x2a\x7a\x84\xe2\x4f\x6b\x98\x1e\x90\x3b\xfe\x09\x5f\xe3\x28\xd4\xd7\x25\xe6\x93\x58\x0b\x3f\xce\x3b\x46\x25\x9e\xd1\xcc\x60\xaa\x95\xdc\x31\xd6\x8d\x91\xa3\x33\xf6\x3c\x82\x0c\xec\x8f\xb9\xae\xd4\x25\xa0\xfb\x3e\xd6\x2e\xc4\x31\x8e\x10\x59\x7c\x4e\xfe\x83\xaf\x26\x7c\xd0\x3b\x73\xa0\x68\x66\xf2\x7f\xfc\xfd\x4f\x1a\x9f\x3b\x28\xfe\x16\x83\x3a\xf8\xf7\xbf\x7f\x7c\x97\x25\xcd\x16\xe3\x31\xef\x90\x16\x45\x10\x84\x85\x2d\x0a\xb2\x34\x45\xd2\xc0\x05\xd8\xc1\x24\x01\x1d\x0a\xd9\x14\x8b\x28\x87\xc5\x1c\xc7\x10\x1c\xa6\x5c\x40\xda\x34\x0f\x29\x96\xb0\x19\x0e\x52\x1c\xc3\x1d\x8e\x1f\xc8\x0a\xe3\x6f\x2e\x62\x5e\xbe\x67\xe1\x58\x08\x48\x9a\xa5\x39\x9a\x60\x58\xf8\x3c\xc2\x5f\xd9\x2e\x79\x17\xc2\x5f\x48\x4c\x39\x79\xf4\x23\xc2\xeb\x6f\x84\x10\xf7\xb1\xfa\xd6\xd3\x7b\xe3\x51\x73\x5c\xab\xba\x9a\xc2\x59\x1d\x43\x58\x34\xdb\x30\x58\x37\x1a\x76\x91\xa2\xd8\xd5\x5a\xa1\x56\x6f\x9a\x21\x5b\x5d\x24\xb7\x80\xca\x34\x29\x85\x6f\xd4\x50\xde\xb5\xed\xe2\xb0\xcf\xd7\xf2\x04\x9b\xaf\x12\xab\x46\x69\x12\xb7\xc5\xfb\xae\x59\xb8\x0f\x81\x13\xaf\xa6\x19\xe1\xe4\x09\xd3\xaf\xcf\x0d\x87\x32\x3b\xfe\xe9\x8e\xcb\xf9\x16\x0b\x9d\x2a\x65\xf3\x27\xf1\xbf\xe5\xd0\xa5\x91\xa5\x95\x50\xf0\x85\xe7\x5b\x75\xa1\x5d\xcb\x22\xbb\xa9\x8b\xff\x7e\xd7\xa0\xcd\xd6\xd8\xf3\x3c\x63\xf3\x00\xf2\x2e\xef\xf2\x88\x46\x24\xb6\x10\x66\x19\x86\x20\x49\x8e\x63\x21\x74\x20\xe6\x2c\x4c\x13\x88\xa1\x49\x8a\x04\x04\x47\x92\x16\x43\xd0\x14\x0b\x39\x0a\xd9\xec\xee\xea\x36\xe6\x90\xb3\x99\x85\xb1\xbf\xb9\xe0\x46\x41\x86\xbf\x9c\xb3\xf9\x5e\x7a\x30\xf7\x34\xcc\xc2\xa1\xbb\x72\x73\xdb\x2d\x73\x7f\xab\xeb\x3c\x31\xa9\x4d\xc0\x83\x1c\x8c\x1b\x0d\xc4\x8e\xc7\x63\x73\x24\xfb\xcd\x95\xdb\x99\x68\x0a\x1f\xd7\xcd\xe5\x4b\xb9\x52\x98\xe6\x45\x11\x17\x06\x52\x4d\x25\x51\x77\xa9\x14\xc9\x8e\xd8\xc5\x92\xb4\x28\x89\xc6\x68\x11\x6e\x68\x63\xee\xaf\x83\x49\x6d\x42\xab\xfd\x72\x55\x37\x98\x82\x16\x86\x74\xef\xce\x5b\x78\xfe\x6e\x78\x48\xb7\xa3\x20\x3b\xfe\xcf\xde\xda\x96\xa1\x79\x4e\x15\xe3\xca\x9a\xff\x95\x1b\x09\xfe\x17\x1d\xa0\xb4\x26\x3d\x2b\xfd\x1d\xb2\x4d\x1e\xe6\x7f\x80\x94\xef\x1a\xe8\x19\x9f\x52\xc3\x72\x0e\xb2\x78\x00\x69\x86\x61\x58\xde\xa6\x2d\x9a\x22\x08\xde\x75\x31\xc5\x58\x04\x00\xbc\x05\x1d\x8b\xb6\xb1\x43\x01\x87\x42\x3c\xcf\x3b\xac\x45\x40\xcb\x01\x10\x12\x8c\xb5\xdb\x69\xc6\x1c\x92\x20\xb3\x80\x94\xeb\x07\x6d\xee\x40\x83\x87\x97\x93\x20\xdf\x4b\x0f\x90\xc2\xb1\xc7\xa5\xa8\xf4\x90\x72\x65\x29\xea\x2e\x48\x49\x98\x95\x44\x5c\xe6\x68\x76\x4f\x1f\xf1\xa3\x1b\x2a\xf2\x60\xd2\x6e\x6f\xa6\x71\x7d\xb4\xca\x57\xa6\xd3\xd2\xca\xf0\x44\xa3\xa6\xb0\x3d\x36\x0f\xa4\xcd\x6a\x52\x5e\x71\x73\xec\xe4\x63\x06\x10\xba\x2d\x0c\x06\x68\x6e\xfb\x1b\xa6\xd6\xab\x5a\x4a\x93\x21\x0b\xab\xb6\xde\x58\xc7\xfd\xce\x40\xd6\x8a\xae\x25\xcf\x78\xd9\x25\x68\x45\xf8\x1f\x84\x0a\xe9\x84\xff\xe1\x51\x3e\xeb\x30\x93\x58\x5e\xe2\x9b\xa5\x89\x85\xc5\x89\xb8\xf1\xf9\xcd\x52\xe2\x67\x7e\x59\xc7\xf2\xfe\x91\xf2\xff\x93\x62\x61\xdf\x00\x65\x69\xa1\xe4\x3b\xf4\xf7\x08\xff\x03\x94\xd1\xd5\x4e\x07\x05\xa1\x4e\x73\x4d\xaf\x1a\x0c\x23\x85\x1e\x74\x36\x43\x8d\xcc\x17\xe2\x41\x14\x55\xdb\x5c\xb3\x36\x9b\xb9\x21\x76\x62\x65\xba\xaa\x54\xca\xb5\x29\x6c\x2c\xf4\xc9\xe6\x65\x28\xe7\x1d\x97\x53\x3a\xa3\x86\xfd\xd2\xad\x08\x6f\xc3\x1e\x18\x30\x85\x16\xc5\x6b\xa2\x90\x39\x94\x41\x88\x01\xeb\xda\x80\xe3\x58\x02\xd9\x0c\x60\x20\xb6\x78\xc0\x42\xda\x46\x36\x00\xc0\x72\x6c\xdb\xb2\x18\x17\x23\xe0\x70\xbc\x05\x81\xc5\x5b\x16\x87\x78\xc4\x61\x80\x31\x8f\xf9\xc3\x11\x1f\xcf\xe5\x52\x80\x5b\x00\xc6\x00\xfe\x8a\x4f\xb4\x2d\xa5\x3f\x10\x91\xa5\x00\x97\xc1\x21\x21\x57\x7c\xa2\xfd\x93\xc2\x78\x5f\xc8\xa5\x90\x84\x4e\xa0\xe5\x87\x6b\x6f\x60\x15\xcc\x41\x3b\xea\x52\x61\x31\x10\xab\x1b\x67\xa0\x6d\x66\x84\xd1\xac\x4c\xab\x92\xd5\x92\x1a\xde\x78\xec\x95\xf2\x91\xda\x0b\x5b\x62\x64\xf6\x46\xd5\x70\xa2\x79\xa5\x51\x29\xea\x50\xe1\x98\x5e\x2c\x4b\x13\x8e\x11\x42\xcf\x94\xf9\xa6\x6a\x96\x33\xcb\xa5\x48\x54\x7a\x30\x97\x61\xdd\x21\x07\xb6\x76\x45\x87\xfb\xe7\x9e\xa4\xbe\x4c\xf8\xa7\xf3\x6d\x8e\xb9\x14\xe9\xd7\xef\xc3\xa2\xf1\x22\x46\xcf\xae\xdf\xff\xc4\xfc\x01\x41\xf8\x79\xe1\xae\xb3\xa1\x37\x39\xb5\x2e\x76\xdf\x62\x71\xfb\xec\x98\xef\xfa\x16\x5f\xfa\xc2\xe3\x61\xc8\xff\x0e\x8a\x35\x63\xe9\x23\xd3\x2f\x2d\x41\x45\xb1\x8b\x0e\x5c\x5b\x2d\x1d\xcd\x4c\x39\x0a\x78\xe5\x6d\x53\xf5\x5a\xd3\xb1\x30\xaa\x04\xd5\xca\x70\x19\xca\x5d\x48\x08\x76\xa9\x48\x6f\x2c\xc6\xf0\x87\xfe\x3a\x2c\xaa\x90\xd1\xea\xe1\x3a\x70\xb5\x56\x8d\x9e\x0a\x05\xe3\xed\x45\xcc\x7c\x9d\x85\x86\x0c\xeb\xb2\x96\x0d\x5c\x87\x03\x16\x06\x04\xe5\x12\xb4\x03\x08\x1e\x43\xcb\xc1\x88\xc0\xd0\x46\xb4\x4b\xf0\x1c\x65\xd3\x2e\xa2\x5c\x0b\xb2\x3c\x07\x08\xec\xd0\x2c\x06\xbc\xc3\x1e\xd2\xec\x9e\x03\x17\xf2\x16\xb8\x40\x86\xe2\x2e\x2f\xaf\xbc\x97\x92\x80\xe3\x68\x9e\x60\x78\x2e\x83\xcb\xd4\xc4\xcf\x1f\x58\xdc\x03\x43\x91\xae\x13\xcb\x2b\x1d\x40\x82\x2a\xeb\x57\x51\xd5\xeb\xbc\x19\x2f\x6d\xb9\xce\x73\xe2\x88\x72\xbb\x61\xb5\x23\x92\xfc\xaa\xb8\x94\xde\x94\xf2\x90\x9b\xcd\x0a\x95\xbd\xcd\x9b\xb4\xea\x4c\xf2\xfd\xee\xfb\x26\x6a\x51\xe0\xa4\xcd\xe8\x4d\xe9\xf5\xba\x46\x63\x35\xeb\x1b\x82\x5d\x76\xab\x78\x0e\xca\x52\xf1\x4d\x78\x19\x77\x78\xce\x89\x40\xbf\x57\x9c\x8f\x7a\x6d\x5a\xf1\x54\xc2\x94\x75\xc1\x2e\x04\xd5\x55\x0f\x11\xc6\xa8\x61\x15\x0a\xba\xd7\xe3\xa8\xce\xb2\x53\xd4\xe7\x75\x8b\x1b\x6a\xbd\x8a\x74\xdf\x26\xe9\x4f\xbd\xf9\x12\xe8\x08\xe9\x13\xe8\xde\x02\xd0\x2c\xcc\xce\xb2\x4b\x3e\xf7\x18\xfd\x4c\xf8\x3f\x7b\x3d\xc1\x13\x86\x4e\x9b\x99\x85\xfc\xb3\x86\xee\x27\x1a\x5a\xe1\x84\xbf\xb0\x18\x61\x28\xf5\x24\x73\xd2\x20\xc8\x71\x6b\x53\x70\x05\x93\xa7\x48\x6b\xd3\x15\x1c\x17\x89\xf6\x2a\x5a\x8b\xb4\x5b\x65\x0a\x1b\xf9\x24\x81\x4f\xc8\x26\x81\x4f\x4c\xaf\x0b\x6d\xd6\xbf\xda\xcc\x5b\xba\x78\xf6\x5b\x9c\xf6\x85\xc7\x75\xf1\xdf\xef\x32\x1a\x5f\x41\xe7\xd7\xff\xb7\x35\xd9\x24\xc3\xb2\x1c\x45\x01\x82\xf8\xfd\xd7\xcf\x10\xf4\xcb\x2f\x7f\xfc\xf1\xcb\x1f\x7f\xe4\x54\x6b\x8a\xff\xcc\x59\x51\x84\xe3\xd7\x28\xb6\xe2\x28\xf9\xfb\x35\x18\xe3\xcd\x5f\x39\x63\x13\xe0\x3f\x73\x92\xa6\xea\x46\x5b\xa8\xa8\xc6\x5f\x39\x1d\x0d\xf1\xd4\xfa\x33\x17\x2c\xec\x89\x87\xfe\xca\x69\xab\x19\x0e\xff\xcc\x6d\x29\xfe\xf2\x8b\x50\x37\x94\x76\xce\x10\xc4\xba\x92\xd3\xd4\xba\x99\xa4\xf8\x4b\x2e\x97\xcb\x09\xb2\x9c\xa0\xf6\x85\x61\xae\xd9\xae\x34\x84\xb6\x99\xab\x29\x66\xee\x37\xcf\xf9\x22\xed\xc0\x0f\x83\xd7\xa9\x37\x08\xad\x3d\x5a\x9e\xfc\x9d\x91\xd4\x27\x54\xcf\x49\x7e\x8e\xf1\x4d\xe9\xdf\x01\x7f\xd7\xec\xe8\xe4\xcf\xfd\xff\x5e\x91\xef\xe0\xc3\xcf\x78\x13\xbc\xff\xf4\xa2\x68\x81\xc3\xd7\x4c\x5a\xf7\x99\xed\xb9\xc6\xa5\x12\x2c\xd7\x51\x2b\xad\x8e\x92\xfb\xed\x58\xfd\x47\xee\x58\xff\xfd\xf7\xfe\x85\x07\x55\x93\xcd\x67\x7d\xb8\xe1\x0f\x7d\x54\x3f\xc0\xfb\xce\xf0\x1a\x58\x61\xec\x21\x2f\xb0\x66\x89\x96\x9c\x2f\xce\xb8\x65\xe7\x99\x5c\x6b\xe9\x15\xb1\xee\x6e\x79\x62\xfe\x7a\xbe\xed\x97\x2a\x64\xdc\xfa\x4b\x6c\xae\xb5\xff\xaa\x68\x37\x35\xb0\xef\xd2\xf6\x66\xd7\xdb\xdf\x1b\x52\x51\x65\xa5\x77\xa3\x0d\x52\x5b\x11\x0c\x65\x5f\xf5\x33\x95\x9c\xa6\x9e\x0e\x86\x8e\x5e\x51\x4b\x39\x3b\x0e\x31\x4e\x8e\xae\xcb\xd2\xec\xc7\xd8\xf3\xf2\xec\xe9\xdc\x27\xd1\x85\x71\x6d\x6f\x5e\x2d\x84\xfc\xc5\x2c\x4e\x2d\xce\x91\x44\x52\x92\x4f\x4e\xd3\x67\x79\xf6\x95\x7f\xe4\x0e\x3f\x5e\x23\x3c\x5f\xe0\x19\xfa\xaa\x30\x7b\xf3\xea\x62\xfc\x98\x80\x81\x1f\xc5\x83\x10\x47\x67\xe5\x4c\x50\xbb\x4f\xd6\xc4\x0b\xbf\xe7\x5e\xca\x4a\x5b\xc9\x25\x69\x54\xf4\x9c\xaa\x19\x3b\x5c\xff\xeb\x8b\xe8\x43\x2b\x1a\x66\x20\xf3\x96\xcc\x7d\xc2\x26\xc7\xca\xf6\xad\x73\xfa\xf4\x66\x33\x1c\x66\x25\xda\x91\xd8\x7d\x02\xee\xeb\x7f\x11\xf3\xa0\xd8\xf3\xa5\xd7\x75\x3c\xc1\xce\xe0\x89\x91\xf4\x41\xe1\x3e\xf9\xf7\x75\x3f\xfa\xeb\x8f\x9c\x15\x04\x13\x0f\xed\xed\xb3\x1f\x3a\x17\x70\xf3\x15\x6f\x07\xeb\xae\x3c\x85\xa4\x07\xd8\xde\x0b\x7c\x42\x2e\x29\x36\x76\x5d\x8c\x4e\xc7\xfe\x57\x18\xf1\x9c\x1f\xb9\xff\xdb\xbd\xfc\x7f\x97\x84\xf5\x9c\x8c\xc4\xf4\x9c\xbb\x05\x7c\xb7\x05\x5b\xf1\x52\x08\xed\x07\xaf\x41\x56\x72\x1f\x68\x25\x45\xbf\x30\x77\x48\xd5\x92\xf3\x0d\x88\xd7\xd9\x35\xe0\x40\xeb\x42\x9f\x4e\xd9\x84\x24\x85\x73\x8d\xf0\x83\x6d\xaf\x1c\xfa\xa9\xda\x70\x10\xfe\x48\x23\xad\xf2\xaf\x2b\x3a\x3a\x8c\xf6\x1d\x76\x3e\xaf\xeb\xcf\xe4\x92\x22\xef\xff\xfd\xd4\xfa\x9d\x95\x28\xa9\xd7\xac\xc4\xfa\x42\xf3\x4e\xf3\x7c\x46\xc0\x78\xff\x49\xe2\x67\x3e\xeb\x91\x46\xfa\x2e\x79\xab\xfb\xc5\xa1\xb3\x65\x62\x5b\xd1\x83\xf3\x85\xb3\x02\x7f\x25\x76\x22\xb9\x83\x4f\xe4\x4c\xd6\xbd\x29\xa0\xef\xba\x4f\x80\xd6\x57\x52\x77\x09\xb7\xab\x79\x4d\xb4\x9d\xec\x38\xcc\x4c\x7d\x27\xf4\x6e\x09\x79\x52\xfd\x1e\x49\xb3\xd1\xe3\x27\x6a\xf7\x4a\x79\x53\x9b\xd9\xc8\x76\x97\x4c\xd7\x65\x79\x97\x78\xe2\xfb\xe3\x45\xf0\x9c\x44\x9f\x69\xdd\xfd\x45\xf7\x0e\xc8\x05\xf9\x02\xcb\x0b\x5f\x63\x6f\x8a\x33\x91\xf0\x94\xda\x7d\xe3\xf6\x20\xe0\x8f\xdc\xa9\xc8\x3f\x72\x07\x13\x8f\x26\x7e\x84\x9d\x57\x2b\xbe\xd0\x88\x0c\xec\xf6\x81\xce\x2d\x89\x1f\x9c\x1d\x6d\xa9\x66\xa6\xdd\x07\x14\x7b\x53\x6f\xde\xcc\xc1\xeb\xd7\x93\x29\x47\xf4\xea\xcf\x5e\x2d\xc7\x09\x71\x14\x3d\xab\xd0\x9b\x0c\x3e\x39\xce\x87\xe2\x13\x57\x75\x5f\xf1\x01\xd9\x9f\xef\x07\xd7\x68\xdf\x96\xf8\xcc\x28\xfb\x4c\xf0\x30\x0b\xdf\xd2\x8b\x37\x41\xfa\xa0\xc8\x55\xaa\x37\xa7\xfd\xdb\x4a\x37\x04\x3d\xcc\xa1\xb6\x24\x3f\x3a\x51\x46\xd2\x9e\x23\x7d\x73\xfa\x76\x6f\x4f\x4e\x10\xcf\xba\x33\x7c\x22\x9d\x66\xbe\x79\x99\xdc\x34\xf0\xc3\xad\xe1\x5b\xe2\x30\xf2\xfc\x59\xf6\x8a\x3e\xe5\x70\x5b\xfc\x93\x17\xee\x6f\xcc\xc1\xf4\xdc\x1f\xe4\x48\xa1\xff\x04\x8f\x9b\x2d\x49\xd4\xbd\xbf\x11\x41\x88\x97\x9e\xbf\x88\xfe\x96\xd6\x9c\x63\x76\xb3\x59\xe7\x5e\xba\xbf\x7d\xef\x41\x94\x6f\x6b\xd3\x3b\x83\x9b\xed\xb8\x18\x7e\xfc\x4c\xfa\x03\x6f\xbf\x65\x68\x9f\x52\x3f\xeb\x00\x3f\x3a\xc0\x3f\x13\xfd\xec\x42\x65\x34\xc2\xaf\xb1\xb8\xa7\x0d\x37\xfc\xba\xab\xcc\xb2\x83\xaf\xaf\x84\xef\x92\xfd\x36\x88\x25\x9d\xed\xef\xe8\x36\x5f\xe9\xa7\x76\xf5\x77\x93\xb8\x0f\x20\x7f\x8f\x30\xbe\xda\xbe\x3f\x4e\xad\xe5\x2b\x34\x6f\x4e\x11\x7e\xfb\xcd\xc1\xb1\xe5\x4d\xa2\xdc\x1f\xff\xf9\x4f\xee\xd7\xc8\x9f\x38\x89\xe5\xcd\x5f\xff\xfc\x33\xc6\xeb\xf8\xf7\xdf\x7f\xe4\x2e\x57\x44\xbe\x73\x5f\xc5\xfd\xe2\xc8\xe5\xaa\xb6\xbf\x18\x0c\xe3\xbb\xd8\x7f\xaa\x7a\x5d\x80\x4f\x55\x4f\x44\x78\x0f\x8a\xef\x3a\x59\xee\xdf\x39\x8a\xba\x3b\x33\xc0\x73\x5e\xdd\xc4\xba\x5d\xb1\xf6\xf7\xe4\x07\x1c\xd8\xe6\x8a\x5a\x5b\xa9\x94\xd4\x8f\x35\xb9\x5c\x5b\x29\x2a\x6d\x45\x95\x14\xfd\x64\x99\x6a\x57\xaa\xa9\xb9\x4e\x53\xde\x76\x99\xb6\xa2\x1b\xed\x8a\x64\x6c\xff\x49\x56\xea\x8a\xa1\xe4\x24\x41\x97\x04\x59\xb9\xb2\xb0\xb9\xf5\x3b\x3e\xff\xf9\x7a\x12\x8a\xc9\x4e\x19\x9f\xf9\xdc\x58\xb5\xbc\x24\xc9\x67\xfd\x9c\x86\x8d\xce\x2a\xeb\x30\xd1\xbf\xb1\xc4\x7b\x51\x13\x07\x57\xf6\xa7\xeb\x21\x29\xc7\x39\x2d\xbc\x47\x09\xae\x77\x98\xc7\x34\xf0\x35\xa8\xf4\x13\xd5\x70\x41\x98\xcf\xba\x38\x13\x06\xcb\xb6\x53\x9c\x86\x38\xfe\x17\x14\x72\xb9\x6b\x7c\x89\x21\xdd\xec\x1d\x7f\xfc\x91\x13\x1c\x07\x3b\xb9\xa9\x35\x5b\x58\x93\xc9\xe6\x93\xa0\x67\xa1\x71\x2b\xe5\xbb\xbe\xa7\x8b\x35\x76\x72\x4b\x2b\x44\x43\x2b\xfc\x0d\xf2\xbf\x1f\xb2\xb6\xb6\x75\x12\x4b\xbf\x17\xea\xfd\x75\x96\x59\x62\x02\xb1\x25\x13\xf9\x8b\x10\xa5\xa3\xf4\x8e\x94\x3b\x89\xf7\xc1\x89\x8b\xef\x1f\xfa\x44\x73\xbf\x82\xab\xb7\xea\x39\xc7\x8a\xad\xed\x58\xcb\x39\x8b\x69\x90\x43\xfe\x34\x98\xe0\x18\xef\x3e\xe6\xff\x0f\x00\x00\xff\xff\x8e\x42\x8c\x8f\xc1\x9a\x04\x00") func kahunaHorizonSqlBytes() ([]byte, error) { return bindataRead( @@ -846,47 +288,7 @@ func kahunaHorizonSql() (*asset, error) { } info := bindataFileInfo{name: "kahuna-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd8, 0x3d, 0xc9, 0x7, 0x22, 0x2e, 0x8a, 0xb5, 0x33, 0x2a, 0xc0, 0xe0, 0xd7, 0x85, 0x91, 0x41, 0xca, 0xbe, 0x8b, 0xa0, 0xe1, 0xa2, 0x66, 0x8c, 0x4a, 0x7a, 0xd9, 0x57, 0x5d, 0xeb, 0xa6, 0xc}} - return a, nil -} - -var _non_native_paymentCoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xd9\x92\xe2\xc8\xd2\xe6\x7d\x3d\x85\xac\x6f\xb2\xda\xa8\x3e\x68\x0f\xa9\x6b\xea\x98\x89\x5d\x2c\x62\x5f\xc7\xc6\xca\x22\x14\x11\x42\xa0\x05\x24\xb1\x8e\x9d\x77\x1f\x43\x90\x6c\x09\x24\x09\x59\xdd\x67\xec\x6f\x5d\x54\x67\x23\xc7\xfd\x8b\x2f\xdc\x5d\xb1\x09\xff\xe3\x8f\x2f\x7f\xfc\xc1\xd4\xfc\x30\xb2\x02\xd2\xac\x97\x19\x0c\x23\x88\x60\x48\x18\x3c\x73\x27\x5f\xfe\xf8\xe3\xcb\xe6\x7e\x66\xe6\x4e\x08\x66\x68\xe0\xbb\x07\x81\x39\x09\x42\xdb\xf7\x18\xf5\x5f\xf2\xbf\xb8\x23\x29\xb4\x62\x26\xd6\xcf\xcd\xd7\xcf\x44\xbe\x34\xb3\x2d\x26\x8c\x60\x44\x5c\xe2\x45\x3f\x23\xdb\x25\xfe\x2c\x62\x7e\x30\xec\xf7\xf8\x96\xe3\x9b\xe3\xb7\x9f\xda\xd8\x21\x3f\x6d\xef\x67\x14\x40\x2f\x84\x66\x64\xfb\xde\xcf\x90\x84\x1b\xbd\x6f\x85\x4d\xc7\xde\xa8\x26\x9e\xe9\x63\xdb\xb3\x98\x1f\xcc\x4b\xbb\x95\x53\x5e\xbe\xbf\xda\xf6\x30\x0c\xf0\x4f\xd3\xf7\xa8\x1f\xb8\xb6\x67\xfd\x0c\xa3\xc0\xf6\xac\x90\xf9\xc1\xf8\xde\x4e\xc7\x90\x98\xe3\x9f\x74\xe6\x6d\x6d\x21\x1f\xdb\x64\x73\x9f\x42\x27\x24\x27\x66\x5c\xdb\xfb\xe9\x92\x30\x84\x56\x2c\xb0\x80\x81\x67\x7b\xd6\x56\x24\xf0\x17\x3f\x43\x62\xce\x02\x3b\x5a\x6d\x94\x53\xfa\x7d\x47\x00\x81\x81\x39\xfc\x39\x81\xd1\x90\xf9\xc1\x4c\x66\xc8\xb1\xcd\x6f\x1b\xc6\x4c\x18\x41\xc7\xb7\xbe\x7f\xf9\x92\x69\x54\x6b\x8c\x6e\x64\xb2\x3d\x46\xcf\x31\xd9\x9e\xde\x6c\x35\x77\x92\xff\x9a\x4d\xac\x00\x62\x32\xb4\xc3\x08\xad\x42\x32\xfd\x7e\x53\x3a\x34\x27\xd3\x99\x1f\xcc\xdc\xf0\x3e\x61\xe2\xcd\xef\x91\x74\x08\xb6\x48\x70\x8f\xe4\x06\x27\x25\xe4\x4e\xc9\x3b\xc4\x10\x09\x23\x9f\x52\x12\xd8\x1e\x26\xcb\xdb\xb2\xd0\x34\xfd\x99\x17\x21\xe8\x40\xcf\x24\xe1\xf7\x2f\x5a\xb9\x95\x6d\x30\x2d\x2d\x55\xce\x1e\x49\x57\x8d\x72\xff\x02\xbd\x7e\xb0\x62\x62\xed\xe9\xaa\xd1\x6c\x35\x34\xdd\x68\x1d\x7d\xe9\x54\xf0\xe7\x64\x4c\x56\xf7\xe8\x8f\x96\xef\xab\xde\xcb\x7c\x40\x2b\x25\x77\x60\x3e\x16\xbb\x5f\x77\x30\x0b\x23\xc7\xf6\x48\x78\x4b\xf3\x5e\xe8\x6e\xbd\x1b\x14\x24\xce\x06\x37\xf4\x1e\x84\xee\xd7\xbb\x77\xf9\x5b\x7a\xf7\x42\x77\xeb\xdd\xca\xdb\x1e\xf5\x6f\xe8\x3d\x08\xdd\xad\x77\x32\x43\xe1\x0c\xdd\xd0\xb9\x15\xf8\x88\x3e\xc7\x0e\x87\xd3\x19\x99\xdd\x62\xf6\x58\xec\x7e\xdd\x84\x04\xb7\x68\x8d\xef\xdf\xad\x2d\x0e\xe3\x5b\xea\xb6\x02\x77\xeb\xdb\x66\xa5\x21\x81\xf8\xb6\xda\x13\xb9\x5f\xac\x7d\x97\x29\xc9\xf4\xe7\x9d\x66\x10\xf4\x6e\x28\x47\xd0\xbb\x1b\xf0\x2e\xfb\xdd\xc2\xfa\x2a\xf2\x51\x9d\x9b\x31\xc0\xfb\x6a\x37\x52\x3b\xcd\xb1\xec\xb9\xe2\x8b\x29\xf7\xb6\xec\x3e\x35\xbe\x27\x76\x48\x74\xef\x48\xee\x13\xd7\x6d\xb9\x43\x22\x7a\x47\x6e\x9f\x58\xde\x95\xbb\x0b\xdf\x21\xa1\xdc\x96\xdb\x26\x89\x77\x65\xf6\x21\xff\x8e\xe4\x26\x8e\x6f\x8b\x6c\x63\xf3\xb6\xcc\x49\x28\xdc\x16\x45\xd0\xbb\x2d\xf0\xea\xaa\x77\x49\x6d\x3c\x6f\x27\x98\xed\xb5\xb2\x46\x53\xaf\x1a\xc7\xc2\xce\xc4\x0a\xa7\xce\x4e\xa2\x99\x2e\x64\x2b\xda\x1b\x5d\xdf\xbf\x6c\xc7\xc6\x06\x74\xc9\x9f\xaf\x9f\x31\xad\xd5\x84\xfc\xb9\xfb\xca\x77\xa6\x69\x0e\x89\x0b\xff\x64\xfe\xf8\xce\x54\x17\x1e\x09\xfe\x64\xfe\x88\x87\xcc\xe9\x46\x56\x6b\x65\x5f\x35\xbf\xea\xfb\x72\xa2\xf1\xf4\xe6\x4e\x71\xba\x5a\xa9\x64\x8d\xd6\x0d\xcd\x5b\x01\xa6\x6a\x9c\x2a\x60\xf4\x26\xf3\xf2\x3a\xbe\x7d\xfd\x2c\x8c\x95\xbc\x9c\x5b\x7e\x6d\xfe\xce\xe6\x9e\xa1\x77\xdb\x73\xc2\xa5\x51\x6d\x9d\xf1\xc9\x74\xf5\x56\x61\x0f\xeb\x78\x40\x7b\x62\xfe\xa0\xe5\x0c\xc8\x47\x1a\xff\x46\x49\x4c\x40\xad\x9c\x9c\x58\x9b\x59\xcc\x24\xf0\x4d\x82\x67\x01\x74\x18\x07\x7a\xd6\x0c\x5a\x24\xa6\xe1\xce\x01\xf8\x46\x0c\x13\x0a\x67\x4e\xf4\x33\x82\xc8\x21\xe1\x04\x9a\x64\x33\x9b\x78\x39\xbb\xbb\xb0\xa3\xe1\x4f\xdf\xc6\x47\x13\x84\x93\xc6\x1e\x3b\xe4\xae\x99\xb1\xeb\x1e\x1a\xf9\xea\x00\x97\x08\xdf\x7a\xf9\x71\xd2\xfd\xfa\x85\x61\x98\xd7\x4f\x6c\xcc\x98\x43\x18\x40\x33\x22\x01\x33\x87\xc1\xca\xf6\xac\xaf\x92\xfc\x7b\xdc\x37\x46\xbb\x5c\xfe\x16\x4b\x6f\xbe\xe8\x41\x97\x5c\x10\x56\x94\x4b\xc2\x73\xe8\xcc\x2e\x49\x73\x1c\x7f\x2e\xee\xc0\x30\x72\x7d\x6c\x53\x9b\x60\xc6\xf6\x22\x62\x91\x60\x2f\xf2\xe5\xf7\xf3\xbe\xdf\x47\xf1\x93\x5c\x84\x0f\x11\xb1\x9b\x08\x30\xc8\xb6\x6c\x2f\x3a\xbb\x19\x92\xa9\x37\x73\x2f\xdf\xf3\x66\x6e\x38\x43\xc4\x8b\x82\xcd\x54\xf0\xbc\x99\x5b\x19\xdb\xa3\x0e\xdc\xcc\x18\x31\x09\xa3\xcb\x70\xb6\x82\x43\xdf\x25\xd8\x77\xa1\xed\x5d\x90\x12\xc5\x73\xd0\xd1\x30\x20\xe1\xd0\x77\x70\xc8\x44\x64\x79\x8e\x8c\x3a\xd0\xba\x86\xe8\x66\xdf\xec\x18\x99\x6d\xac\x3a\x36\x44\xb6\x63\x47\x9b\xc6\x6d\xdb\xff\x4a\x89\xe3\xdc\xba\x6d\x5b\xde\x66\x2c\xb4\x81\xb5\xfd\xe4\x68\x34\xb0\x1f\x5a\xec\x48\xff\x19\x4f\xab\x99\x74\x21\x9b\x2e\x31\x5f\xbf\xbe\x76\xc5\xbf\x7f\x30\xec\xef\xbf\xdf\xf8\xf6\x39\xc0\x73\x3d\x6f\x1a\xf0\x9e\xc6\x93\xbe\x3c\xd3\x76\xda\xcf\xef\x69\x7a\x4b\xcf\x99\xba\x0b\xfc\x6d\x75\xbe\x0d\x8c\xcd\xf3\xef\xd1\x98\xd8\x0c\x19\xb7\xe1\xe0\xf9\x98\x1c\xc7\xc2\x49\x0c\xbc\x35\x7a\xfa\x7c\x7e\xd4\xfc\xe9\xc0\x78\x0b\x64\xf7\x19\x0c\x87\x47\x60\xe4\x37\xbe\x3d\x09\xc8\xfc\x5d\x21\x34\x33\xc7\x24\x72\xec\x30\x7a\x57\x74\x3f\xda\x7e\x75\xf7\xed\xc7\xa6\xe3\x87\x24\xb2\xdd\x2b\x91\x1f\x27\xd6\x0b\xb1\x75\xd4\xe7\xa7\x83\xfa\xbd\xbe\xb3\xfe\x3e\xd8\xb9\xe2\x3a\xd7\xe6\x06\xa7\x6a\x0e\xad\xb8\xe6\x2d\xbb\xc1\xd7\xa3\x3d\xb6\x9b\x78\x7d\xdd\x07\x39\x09\xee\xcc\xa0\xdb\x95\x17\x7c\x2d\x83\xc6\xee\x0e\xc3\x90\x44\x97\xf8\xdc\xc6\xea\xd5\xdb\xd0\xdd\x84\xd5\x65\xd5\x93\xc0\x36\x89\x77\x25\x89\xc5\x37\xaf\x65\xb8\xf8\x26\x83\xfd\x19\x72\xc8\xc6\xdf\x4c\x3b\x5e\x91\xfc\xd4\x2c\x7a\xd4\xc3\xbb\x29\xeb\xb6\x2d\x67\xfd\xba\x6b\xe0\x15\xdf\xd8\x7d\x73\xc7\xf0\xd9\x57\x5f\x79\xbf\xe6\x10\xdb\x01\xfb\xa3\xfe\xb0\x9d\xd6\x6f\xdd\xc1\x9e\x5c\x7a\xf0\x4b\x6f\x22\xd7\x0f\xa2\x3d\x1b\x99\x6c\x4e\x6b\x97\x5b\x0c\x7b\xfe\xd8\x24\xcb\x08\x46\x11\x71\x27\x11\xb3\x09\x8b\x30\x82\xee\x84\xd9\x0c\x99\xfc\xd9\xf6\x13\x66\xed\x7b\xe4\xed\xc3\x96\x42\xdb\x99\x05\x47\x8f\xda\x6b\x16\xa2\xd5\x84\xbc\xdf\x29\xdb\x65\x89\x23\xbd\x6f\xd3\xfe\xde\xe2\x95\xde\xd9\xad\x6c\xf8\xc1\x79\xa7\x7e\x8d\x99\xf8\x37\xc3\xfe\xce\x68\x46\x86\xd9\xfe\xef\xff\xfa\xc1\xc8\x92\x24\x48\xbf\x5f\xec\xab\xe3\x69\xd8\xc3\x5d\x76\xbc\xca\x73\x9c\x73\xaf\xb0\xb1\x5d\x68\xdb\x44\xdd\x45\x40\x9b\xb9\xe3\x13\x50\xc2\x19\xda\x81\x08\x48\x78\xf2\x00\x12\x2e\x8e\x18\x03\x02\xf7\xb1\xf4\x16\xcf\xd1\x9c\xf7\x51\x4c\x47\x8b\x75\x77\x3c\x19\xb7\xc0\xa6\x21\xb9\xf5\x84\x79\x8b\xf3\x68\x0e\xff\x28\xce\x83\x8a\xfb\x71\xbe\x79\xc8\x9d\xdd\x27\xde\x9c\x38\xfe\x84\xbc\xf3\x48\x3b\x98\x7e\xe2\x41\x74\xb4\xdc\xf1\x04\x05\xaf\xeb\xb5\x5f\xef\xe9\x87\x83\x17\xbd\x47\xc4\xf4\xca\x83\xe6\x94\x84\xd7\x75\xe0\x13\x8d\xe7\x44\x9c\x58\xbb\x4a\xc6\x61\x8d\xe8\x61\x32\x0e\x8b\xe2\x5f\x0f\x71\x7b\x3a\x79\xbb\x10\x53\xb7\xa2\xfb\x68\x85\xeb\x51\x54\x47\x5b\x00\x8f\x4c\xbb\xe2\x27\xfe\x8d\x4c\x6d\x87\xe1\x8c\x04\xf7\xab\x32\x7d\x7c\x71\x76\xfa\x86\x96\xc8\xb1\x5d\xfb\xca\x88\xe2\xe6\x5c\xf0\xef\x9c\x55\x1d\x79\xe7\xd1\xae\xca\x43\xb3\xa8\xe3\xef\x7f\xd6\x3c\xea\x48\xe7\xe3\xf3\x9f\x5b\x5a\xb7\x9d\x76\xa6\x69\xd7\x93\xff\xbe\x1c\x78\x27\xcb\xbd\x0f\x3b\xf9\xf1\x1e\xda\xd6\xcd\xa3\xe5\x49\x2a\xbe\x63\xbe\x71\xee\x80\xcb\x78\x97\xf2\xea\x5d\x73\x08\x3d\x8b\x5c\x9c\xd8\x1f\x93\x73\xbc\x6d\xf7\x78\xae\x3e\xac\x9d\x3f\x4e\xd1\x5f\xcc\x0f\xf2\xf1\xea\x12\x39\xd1\x32\x20\xe1\xcc\xb9\x98\xdd\xa3\xa5\x4b\xde\x9d\xcf\x1d\xb6\x58\x1f\xe7\xf3\x6c\xdf\xe2\x51\x52\xcf\x76\x9c\xbf\xde\x45\xdc\xee\x4b\xb7\xd8\xdb\x89\x5c\x22\xe2\x3e\xb7\x3b\xdb\xe1\x7e\x84\xa8\xcc\x66\x66\x4d\xfd\xe0\x9d\xc5\x50\x26\xa3\xb5\xb4\x77\x38\xbb\xad\x32\xfc\xb0\x3e\xdd\x68\x66\x1b\x2d\x46\x37\x5a\xd5\xc3\xa2\x62\x47\x2b\xb7\xb3\x4d\xe6\xeb\x4b\x3e\xd5\xa8\xf5\x0b\x7a\x99\x4f\xeb\x42\xce\xa8\x8b\xa9\x5e\x39\x57\x31\x32\xe5\x5c\xb1\x6d\xd4\xda\x7c\xa1\x2f\x0c\x2a\xb9\x66\xa1\x6a\xb4\xd3\xd9\xaa\xd6\xec\x82\x7a\x1a\x54\x7b\x7c\xe1\xe5\x1b\xa3\xee\x2e\x79\xfb\x1f\xc0\xb2\xdf\x18\xe1\x1b\xc3\x7e\xdb\xb2\xcc\xbc\xbc\x7c\x63\x5e\xb4\xba\xa6\x69\xda\x8f\x1f\x2f\xf1\x0d\xfe\xf5\xde\xe1\xdf\xdf\xbf\xbf\x8b\xb0\x97\xaf\x17\xbb\x9d\x72\xb7\xda\x2f\xe4\xca\x9d\x56\xa9\xdb\x91\x72\xf9\x82\x26\x94\x8d\x7e\x9f\x2f\xd6\x4b\x15\x50\xd5\x8a\x5a\x3b\x5b\xcf\xb5\xe5\x72\x2d\xdd\xcc\xe6\x3a\xbd\xaa\x71\x40\xb8\x01\xa6\x48\x8a\xaa\x0a\xa2\xa4\x0a\xdf\x18\xee\x06\x42\xe1\x11\x84\x69\x5e\xa8\xe7\xf8\x42\x3b\x2b\xf1\x5a\xa5\xd7\xce\xb5\x0b\x82\xd6\x2f\x6a\xbd\x5e\xbe\xd7\xeb\xf0\x9d\x42\xaf\xdf\x6f\xc8\xd9\x7e\x2f\xdb\xaa\x95\x32\xbd\x41\x53\xeb\xca\xa0\x57\x15\xaf\x23\xbc\xc5\xa1\xf8\x10\xc2\x5e\x29\x2f\x37\x0c\xb1\x6a\xe8\xd9\x5a\xba\x62\xe4\x52\x40\xe0\x35\x51\x90\x07\x52\xcd\xc8\x34\x1b\xe5\x7c\xb7\x04\xf2\xa9\x72\xba\x52\x2f\xeb\xb9\xaa\xd8\x04\xd9\x7e\xb7\xd3\xde\x23\x54\x4e\x10\x8a\xb7\x39\x94\x2e\x22\xbc\xe2\xd7\xe7\xeb\x81\x4f\x84\xc8\xf5\x55\xbe\x8f\xc6\xc9\xe9\x4a\xdf\x9e\x46\x59\xc0\xaa\x42\x25\x41\x26\x44\x56\x30\x87\x78\x80\x24\xa4\xa8\x94\x17\x20\x95\x04\x8e\x43\x40\x92\x55\xc8\x8b\x14\x52\x4e\x64\x05\x88\x59\x24\xf1\x48\x16\x04\xc4\x02\x44\x54\x75\x43\x15\xfb\xe4\xb5\xd1\x21\x01\x1e\xf2\x44\xe0\x29\xe5\x45\x05\xb2\x00\xb1\x04\xb0\x14\x73\x54\xc6\x02\xa7\x98\x1c\x85\x26\xe6\x59\x24\x9b\x26\xab\x98\x82\x80\x25\x00\x24\x5e\x52\x15\x59\xe1\x78\x09\x72\xf2\x4b\xdc\x7f\xec\xa6\xe3\xfe\x6b\xaf\x54\xaf\x64\x8b\xab\xe4\xaa\x59\x4a\x81\x8c\x97\x51\x0b\x3c\xbb\x1c\xa5\x12\x21\x6b\x45\xe1\x42\x5f\xac\xb9\x1e\x6e\x76\xfb\x30\x55\x84\x39\x6b\x23\x9f\x35\xc4\x32\x5c\x4f\xf8\xfa\xbb\x9a\x07\x5a\x8f\x13\x63\xb1\xd4\xf8\x2f\x68\xc8\xa7\x5e\x2f\x67\xa1\x7e\xc5\x51\x15\xa0\x00\x13\x00\x45\x34\x25\x55\xa5\x22\x07\x15\xcc\x03\xb4\xf1\x48\x41\x94\x01\x52\xa8\xcc\x0a\x82\x2a\x21\xd5\x54\x00\x06\x2a\x66\x05\x59\x51\x44\x5e\xa4\x1c\x56\x11\xdd\x3a\xd9\x67\x38\x3b\xe1\x58\xc8\xf1\x90\x08\x0a\x36\x15\x42\x78\xa4\x20\x5e\x90\x45\x02\x45\x85\x53\x14\x15\x22\x81\x02\x82\x09\xe4\x28\x02\x44\xe5\x04\x8c\xa0\x08\x39\x51\xe4\x88\x8c\x08\x2b\xa3\x97\xf8\x91\xc1\x49\x92\x2a\x01\x55\x51\xc1\xce\x63\xd3\x7c\x6d\x30\xe2\x8c\x99\xe4\xb3\xa8\x08\xba\xa2\xb7\xaa\xce\xdb\xcb\xbc\xd0\x99\xf8\xe3\xc4\x3c\xa7\x55\xa3\x34\x57\xe2\x2b\x20\x05\xe4\x41\x4d\x40\xd9\x16\x97\xaa\x77\xab\x60\xce\x4b\x4e\xc9\x6a\x24\x67\x72\x64\x8c\x07\xad\xe4\xb2\x2d\x4d\xeb\x86\xc0\xfa\xc3\x5a\x46\x4e\xfb\x5b\x86\x7b\xb5\x4e\x25\x11\x7b\x87\xbe\xff\x67\x9b\xde\xc2\xc3\xff\x2f\xb4\x5a\x7d\xe7\x3b\x2d\xb7\xc9\x95\x5d\xd2\x32\xa1\x25\x4f\x6c\x85\xd3\x87\xb0\x9a\x4f\x54\xfa\x4b\x28\x88\x16\x5c\x8c\xbc\xb0\x91\x12\x82\x79\xd3\xca\xae\x87\xe9\x61\x69\x56\x35\x56\x55\x31\xb0\x57\xc6\x58\x1e\x5b\x7d\x1b\x86\x49\x1a\xc9\xc3\x84\x20\x37\x6a\x68\x52\xca\x65\x0b\xee\xdc\x82\x8b\xd8\xd4\x05\x8f\xce\x86\x97\xbc\xe2\xd5\xa3\x33\x6c\xf1\xd7\xb9\xde\x2f\xba\xee\xf4\x68\xa2\x00\x4c\x30\x06\x22\xe2\x10\x87\x54\xca\x51\x9e\x00\x93\x83\xb2\x04\x54\x93\x53\x45\x96\x05\x44\x16\x01\xcf\xb3\x90\xa7\xc0\x04\x90\xe7\x81\xa2\xb0\x94\x72\x00\x70\xa6\x18\x7b\xe3\x67\x44\x05\x64\x37\x89\x54\x90\x4d\x09\x40\x8e\x25\x2a\x27\xb3\x58\x56\x38\x19\xb1\x26\xa0\x22\x67\x12\x55\x54\x11\xe5\x11\xd9\x00\xc1\x32\x80\xa2\x68\x2a\xb2\xc9\x23\x49\x24\x88\x25\xd2\x4b\x3c\xc4\xd8\x7b\xb4\xf2\xea\xd1\x22\x29\x2c\x85\x61\xa5\x3b\x50\x53\x53\xa3\x08\x34\x99\x65\x07\x60\xc4\x6b\x6b\x07\x79\x3a\xed\x79\x75\xc3\x1f\xa6\x5b\x4b\x1e\x29\xda\x52\xea\x96\xe4\x79\xde\x92\x17\x02\xa1\xfa\x84\x37\x53\x33\x98\x29\xeb\x66\x4d\x67\xd7\xd3\x9c\xb9\x16\xe8\xba\x28\xe8\x55\xbc\x2e\x6c\x5d\x3a\xf6\x68\xeb\xc0\xb8\xc1\x09\x30\x21\xe4\x43\x73\xee\x26\xd3\xdc\x68\x50\x68\xd5\x0a\x86\x58\xa8\x2d\xa4\x02\xdf\xc5\xd9\x35\x3f\xce\x8f\xdb\xf6\x12\x24\x72\x2b\xab\x38\xb0\xf8\x65\xcf\xaf\xcb\x8d\xbe\x01\x53\x70\xb1\x4c\xd6\x4d\xb9\xed\x26\x4b\x09\xbd\x54\xee\x92\x71\x4b\x47\xe9\xa8\x2d\x2f\xa4\xd8\x49\x2b\x17\x3c\xb6\xc0\x5e\xea\xf5\xff\x01\x1e\x8b\x89\x04\x64\x19\x11\x49\x94\xb0\x4a\x4d\x55\x31\x15\x84\x59\xd9\x94\x59\x01\x11\x45\x95\x21\x15\x29\x25\xac\x24\xf3\x44\xa6\x22\x36\x15\x88\x08\xcb\x21\xac\xaa\x18\x48\x9c\xc2\xc7\xf9\xf3\x13\xbc\xde\x84\x18\xb2\x80\x62\x28\x42\x20\x2b\x10\xcb\x80\x50\xa0\x62\x11\xab\x14\x23\x24\xca\x0a\x0f\x20\x02\xd4\x94\xa0\x8c\x64\x0a\x38\xaa\xb2\x9c\xca\xab\x04\x49\x94\x10\x89\x27\x2f\xf1\x90\x73\xef\xb1\xea\xab\xc7\x26\x86\x2a\xc0\xb8\x9c\x5f\xce\x68\x61\x25\x29\x79\xb7\x23\x2d\x06\x75\x8d\xba\x8d\x95\x5e\x2a\x0b\x4b\x59\xf7\x6c\x2d\xb9\xc4\xcb\x65\xd1\xee\xb2\x59\x6b\x54\xaf\xb5\xd3\x5a\xc2\x4c\x67\xd6\xb5\xb2\xc8\xd1\x52\xb1\x68\x67\xc7\x3d\x3f\xd3\x2c\x0c\xbc\x42\xb3\x30\xeb\xb1\x8e\x23\xc6\x0c\xc7\x1e\xbb\x38\x30\xae\xa8\xb0\x36\xb0\x2d\xcd\x4a\xe8\x95\xa5\x64\x56\x70\xbe\xb4\x5c\xf4\x7c\x94\x1d\xe6\x3a\x03\xcd\x2e\x54\x51\x83\xf6\x45\xba\xb2\xd7\x85\x12\x6f\x51\x75\x52\xc2\x7e\xd0\xa5\x73\x82\x5b\x83\x24\x8a\xf2\x96\x37\x15\x92\xb9\x49\x80\x84\x82\xa4\x0d\x4a\x24\xa2\xc0\x29\xc7\x11\x51\xbf\xe0\xb1\xc5\xfe\xa5\x5e\xff\x9f\xe0\xb1\x50\x41\x08\x29\x80\xc7\x80\xa5\xbc\x6c\x12\x4e\xc6\x12\xc7\x8a\x0a\x8f\x79\x2a\x73\x1c\x10\x81\x24\xf1\x0a\x2f\x40\x29\x76\x58\x0e\x42\x55\xa4\x50\x61\x55\x4c\x45\xa8\x28\x1b\x6f\xfb\x0c\xaf\x17\x04\x59\xe6\x58\x2c\x73\x2a\x12\x59\xa0\xf2\x98\x97\x80\xcc\x2a\x40\x12\x65\x4e\x81\x02\xa0\x32\x15\x15\x56\x92\x55\xac\xa8\x2a\x45\x84\x10\x11\x4b\x26\x94\x30\xcb\x49\xa6\xc2\x6d\xf2\xb4\xb4\xf7\xd8\x78\x6e\xb5\xf5\x58\x55\xea\x0d\x02\xa9\xdd\x1b\x24\x8b\x23\x7d\x5e\x47\x79\x0d\xc8\x45\x38\x6f\x25\xc5\x5c\x7f\x86\x58\x41\x9f\x26\x34\xc4\x0f\x38\x2e\x9f\x56\xca\x19\xdd\xb7\x7a\x9d\x5c\x37\xdd\xe6\x52\xed\x1c\xe2\xd6\x73\x15\x19\x45\x5e\xe1\x2d\x1a\xea\xb9\x95\x9f\x13\xd8\xf9\x70\x25\xd4\xb7\x03\x82\x8d\xc7\x26\x8f\x18\xf7\x26\x05\x43\x0e\xd8\x6e\x4a\x29\xf5\x10\xcc\x67\x50\x53\x80\x35\x9c\xcb\x55\x8a\x83\xc4\x2a\x58\xa1\x6c\x6e\x32\x18\x99\x99\xba\x96\x64\xd7\x83\x61\xa6\x9b\x47\xf5\xc2\x38\x2a\xf6\xfa\x3a\x6e\xf7\xfb\xbe\xa0\xce\x9b\x5a\x67\xc2\x17\x3d\x00\x66\xad\xce\xca\x61\x53\x3d\x3d\x1b\x6b\x6e\x5f\xf0\xd8\x92\x72\xa9\xd7\xff\x7f\xf7\xd8\x2b\xb3\xbc\x0b\x47\x02\x9e\x98\x33\xbe\xdd\x4f\x7e\x46\xd9\xb5\x0d\xcf\xe7\x74\x9e\xef\x59\x3e\xa1\xed\xca\x8e\xe3\x13\x1a\xaf\xec\x0d\x7e\x74\xc6\x7d\xb4\x3f\x78\x58\xb5\xc8\x34\x5b\xfd\x4a\x49\xaf\xa6\x35\xc9\x68\xd6\xab\x3d\xa9\x37\x68\xb5\x73\x69\xad\xd9\x68\x89\x7a\x43\x2a\xf5\x6b\x8d\x56\xa5\xcd\x57\xf9\x6a\xa3\x5e\x95\xf4\x56\xb7\x5b\x2c\x0d\xfa\xfc\x76\xd6\xb0\x9d\xdb\x56\xdb\x4a\xa5\x3d\x5c\x58\x18\x95\x32\x81\x3a\x77\x71\xda\x4e\x95\x2a\x09\x7d\xc4\x75\x0b\x4b\x77\xe5\x7a\x10\xe7\x33\x33\xdf\x83\xab\xce\xc1\xfb\xe2\x98\x4e\xc7\x7f\x6e\xc2\x2c\x6b\x25\x71\xd8\xa8\xb5\x73\xa9\x3e\x98\x25\x91\xdb\x9e\xa6\x0a\x09\x30\x65\xf9\x86\x53\x4b\xe6\x5a\xee\x44\x13\x68\xd3\xce\x2a\x35\xbf\xb4\x1d\x66\xa5\x4c\xb5\xbd\x96\xe2\x3f\xad\xfd\x3f\xa9\x58\xe9\x62\xff\xff\x19\x4d\x53\xd3\x47\x51\x9c\x6a\xcd\xb5\x9a\x1c\x4c\x27\x6e\x2a\x98\xe5\x87\xfd\x1e\x28\xb5\xca\xa1\xc4\xa3\x28\x4a\xc9\x64\x0e\x32\xd9\xf2\x60\x28\xd7\x1d\x79\x5c\xd9\xaa\xeb\xa2\xbc\xdf\xed\x8b\xb3\x69\xb1\xdb\x4b\x18\xb4\x8b\xd4\xa4\xaf\xf7\x44\x37\x50\x8a\xbd\xce\x92\x5f\x0c\x57\x52\x50\x86\x2b\x7d\xdc\x84\x8b\x75\x22\x52\x74\x9a\x4c\xe4\x7a\x72\x71\xea\x58\xa3\x54\x79\xd4\x6e\xb2\x79\xb7\xb0\x9e\xe9\x74\x51\x75\xd0\x8a\xeb\x88\xde\xb0\x97\x59\xfc\xf8\x71\xfe\xb4\xf8\xe4\xae\x11\x9e\xea\x9a\xca\x69\xd7\x64\x32\x05\xa7\x1f\x4c\x15\x98\x09\x32\x58\x52\x6c\x6f\xb0\xc8\x4b\x7e\x25\x1c\x2e\x94\x51\xab\xea\x77\xd6\x35\x9c\xac\x78\xa6\x25\x09\x15\x62\xed\xbb\x46\x3e\xcb\x36\x1f\xa6\x5e\xc8\xf7\xa7\xe2\xa8\xdb\x1f\xf6\xd2\x9d\x7e\xd6\x50\x6a\x83\x26\xa6\xa3\x51\x2b\x6d\x64\x93\x9d\xd0\x6f\x8b\x2d\x2a\x00\x7f\x45\x7c\x75\xe2\x35\x1a\x4d\x7e\x3a\x98\xe3\x52\xa1\xdb\x6a\xb1\xc4\xcf\xb5\x35\xe4\xe6\x39\x17\xba\x1e\x97\x26\x23\xa1\x42\x7a\x4b\x6d\xcc\x15\x33\xf5\x5f\x4e\xbd\xf8\x14\xf5\xf5\x33\xea\xd3\x45\x54\x6f\xa6\x0d\x4d\xad\xeb\x19\x69\xa1\xd7\x2a\xca\x7c\xd4\x51\xfc\xb1\xab\x37\x1b\xc4\x32\x74\xec\x9a\x58\x27\x12\x6d\x76\x7b\x07\xea\xc1\xb3\xd4\x17\x85\xa2\x86\xfa\x79\xaf\x58\x48\x35\x14\xbb\xbd\x04\xeb\x69\x3a\x9b\xc3\xb9\x96\xe2\xf2\x7a\xdb\x67\x7b\x0d\xb5\x5a\x4b\xd7\x12\xb6\x6d\x3a\xc3\x99\x96\x4e\x94\x14\xbd\x26\xf6\x3a\x7c\x5b\xf1\x86\xcd\xe5\xb4\x2d\xa2\x6e\x2f\x09\x6b\x7d\x6e\x96\x5b\xce\x5a\xe5\x6a\x54\x6c\xa6\xb5\x5f\x4e\xbd\xf4\x14\xf5\xed\x73\xaf\x5f\x84\x15\xdb\x4e\xe1\x76\xa7\x5f\x6c\xb5\x73\xf5\xce\xbc\x57\x4d\x72\x21\xeb\xa1\x35\x4c\x25\x16\x56\xaf\x64\xf5\x68\x33\x51\x28\x63\xed\x40\xfd\xf9\x20\xe1\xc3\xd4\x9b\x2a\xd5\x8b\x53\x6d\x68\x68\x2c\x1a\x09\xbc\x8d\x74\xe0\xe3\xc9\xa0\xd5\x99\x56\xf4\x29\xee\xf0\x7c\x86\x5d\x20\x25\x3d\x9f\x56\x0a\x54\xed\xae\x47\x0d\xd4\x1a\x34\x8d\x25\xc0\x05\xdd\xe7\xf2\x6d\x94\x9f\xfb\xbe\x95\xae\x3a\xad\x71\x36\x27\x4a\x5d\xb6\x99\x63\x83\x8c\xb5\xa5\xfe\xfa\xd3\xe5\xd2\xb1\x8b\x07\x9e\x2e\xaf\x47\x2f\xf6\x9d\x29\x12\xca\xb2\x94\x40\x04\xa1\xaa\x2a\x1c\x24\x84\x83\x9c\xcc\x01\x62\x42\xd1\x44\x48\x50\xb1\x8a\x90\x8c\x59\x00\x01\xa4\xc4\x14\x38\x16\xc9\x32\x47\x54\x56\x05\x50\x65\x4d\xf6\xb8\x53\xe3\xd0\xd8\x8e\xcf\xa4\xd6\x62\xd9\x2c\xa4\x53\x5c\xe8\x57\xe7\x7c\x62\xc0\x96\xf4\xac\xbf\x16\xed\x5a\xa7\x4f\xf3\xa8\x04\xf1\x84\xed\x57\x65\x1b\x07\xc5\xf6\x7b\x23\x9d\x2b\xc7\x2c\x3e\xdc\xf8\xc3\x51\x8b\x7d\xe3\x1d\x18\x46\xf1\x21\x4e\xbc\x3b\x4c\x75\x76\xc5\x43\xf9\x67\xa7\x03\xe7\x11\x75\x01\xc7\xeb\x3b\xd6\xdb\x17\x38\xce\x51\x6c\x71\x70\xec\x3d\x9a\x3c\x12\x2d\xfc\x60\x3c\x81\x61\x38\x19\x06\x30\x24\x17\x34\xb5\x48\x18\x31\xcd\x4c\x8e\x31\xb6\xc2\xcc\x77\xa6\x49\x26\x11\x71\x11\x09\x18\x9e\xe5\xa4\x7b\x0c\x51\x3f\x30\x49\x68\x4e\x7c\xcf\x23\xcb\xc8\x81\x33\xcf\x1c\x9e\x1b\x8a\x5f\x90\xb8\x47\xd9\x96\xfd\xdd\x06\x64\x78\xb9\xfd\xff\x37\xde\xaf\xfc\x2d\xb2\x5d\xf2\xdb\x9f\x0c\xbb\xdd\xbe\xfc\x6d\xf7\xc6\xf9\x6f\x7f\x32\xdb\xfb\xf1\x87\x43\x18\xfe\xf6\xe7\xf6\xf5\x8c\xf8\xc3\xff\xec\x84\x29\x21\xf7\x09\xba\x70\x19\x2d\x43\x7b\x7d\xa7\x78\x40\x42\x12\xcc\xdf\x13\xfe\xf2\x9f\x7b\xa8\xd8\x65\x5b\x18\x98\x43\x7b\xbe\xbb\x79\x85\x8a\x43\xdb\xb9\x1d\x90\x18\x46\xf0\xdb\x9f\xcc\x6f\x73\x8e\xfb\x17\xf7\x2f\xf6\xb7\xdd\x0d\x73\x16\x04\xc4\x8b\xca\x31\xcf\xbf\xfd\xc9\x48\xa7\x9f\xa7\xe2\x23\xd7\x1b\xbc\xff\x7b\xdf\x80\x43\x53\xf6\x92\x1b\xc5\x98\x88\x1c\x54\x59\x11\x0b\xa2\xa9\xca\x44\xc4\x9c\x28\x4b\x58\x90\x4c\x45\xe5\x90\x89\x30\xe5\x11\xe5\x08\x54\x65\xd5\x54\x44\x51\x91\x15\x28\x98\x04\x8a\xbc\x8c\x28\x16\x39\x16\xef\x10\xed\xf5\x6e\xbc\xe7\x84\xb8\xfd\x9d\xb8\xed\x9b\xae\x3e\xb9\xf5\x9f\xb3\xef\x87\x1e\x9c\x6c\x70\x99\x94\x88\x9c\x22\x00\xc8\xc9\x00\x49\x02\x8b\x25\x99\x28\x3c\x06\xb2\x0a\x4c\x22\x6d\xe6\xc7\x82\x24\x0a\x2a\x32\x79\x41\x64\xa9\x04\x81\xa2\x10\x5e\x94\x78\x22\x20\xc2\x29\x0a\xf7\xdb\x97\x0b\x16\xae\x70\x40\xa8\xc0\x41\x9e\x85\x82\xaa\x10\x02\x04\x93\xf0\x3c\x0f\x24\x02\x15\x0e\x00\xa0\xc8\x08\x9a\x92\x28\x4b\x32\x15\x04\x6c\x9a\x22\x15\x28\x31\x65\x16\x4b\x12\xc6\x94\x93\x05\xac\x7e\x9c\x03\xee\xdb\xdb\x7b\xfe\x2c\x9a\xcc\xa2\xcf\x6d\xfb\x2d\x86\x9f\xdd\xb2\xfb\x08\xc3\x4f\xdb\xfa\x45\x5e\xf6\x0f\x07\xff\x70\xf0\x0f\x07\xff\x70\xf0\x0f\x07\xff\x70\xf0\x0f\x07\xff\x70\xf0\x0b\x39\x88\xff\xfa\x3f\xf7\x4d\x1a\x36\xf3\xd8\xd0\x9c\xc4\x2f\x36\x5e\xba\x5e\x5e\x67\xe8\xdb\x25\x57\xa7\x96\xc9\xe9\xa6\x5e\xe8\xae\x2c\x39\x89\x24\xaf\xee\x5b\xcd\x51\xcd\xd6\xd5\xce\x50\x19\x84\x93\x09\xef\x35\x2c\x30\x2d\xf2\xa1\x73\x58\x98\xcd\xc5\xff\xb2\x60\x91\x49\x4c\xe5\xe9\xc0\x82\x60\xe8\x77\x73\x89\xd5\x78\x05\xaa\xd8\x05\xa8\x4e\xbc\x20\xb1\x58\xa6\xf9\x3e\x19\x17\xc9\x24\x73\x58\x2c\x2b\x8e\x9e\x5c\xa6\x79\x64\x45\x21\xa5\x69\xea\x38\x94\xf3\x15\x56\x8a\xd6\xbd\x34\xd1\xeb\x15\xa9\xcf\x16\xc5\x46\xb5\x13\xc8\x1d\x47\xcc\x06\xa4\x37\x49\x4f\xa4\x5a\x77\x22\xba\x91\x26\x2d\xf3\xc0\x5f\x11\x5d\x6c\xb0\x4b\xbf\x6f\x45\x2b\x2e\x0b\xc7\xa8\x64\x67\x1a\xb0\xbf\x48\xb7\x26\xfd\x4a\xa6\xab\x2c\x7b\x19\xeb\x15\x4f\xba\xff\xe4\xde\x58\xea\x91\x65\xb0\xba\x56\x1b\x94\xab\xc3\x91\x51\x45\x26\xb7\xf0\xec\x6c\xa6\xda\x35\xd2\x24\xdb\x72\x60\xc2\x19\x90\x54\x49\x70\xe4\xfa\x94\xb4\xb8\x29\x29\x06\xf5\xaa\xd9\x98\xc9\x15\xcf\xae\x66\x71\x05\xe6\xf5\xb2\x19\x35\xf2\x93\xfc\xca\xb7\xd8\xae\x5b\xd1\xc6\x72\x37\xa3\x71\xf3\x4a\x67\x21\xc6\x70\xa4\x45\xa1\x3b\x72\xa7\x6e\x98\x6a\xa5\xa2\xa6\x0d\x48\x99\xeb\x36\x71\x98\x2c\x75\xc6\x62\x26\x61\x2a\x4e\xb3\x68\x35\xed\x4e\xad\x6c\x3b\x73\x41\x6a\x26\x45\xa3\x5c\x5f\x15\x82\xfa\xa4\x1c\x94\x1b\x65\x38\xa5\x1a\xbb\x84\xa4\xdc\x18\xe6\x40\x3d\xed\xa1\x00\xea\x98\x4b\xd5\x9f\xf4\xb7\x3d\xdf\xda\xe2\xd9\xbd\xc8\xed\x0a\xe2\xc7\xfc\xb7\x5e\xa8\xf5\x56\x69\x68\xe9\xad\xba\x91\x17\x55\xd5\x77\x57\x55\xb9\x00\xbb\x6d\x0e\x8e\xd2\x25\xaf\x83\x23\x4b\xad\xe4\x93\x5a\x20\x8f\x52\x42\xb2\x13\x8a\x6c\x97\xe5\xdb\x23\x93\x08\x8d\x55\xc9\x68\x38\xf9\x65\x20\x97\x74\x6d\x34\x69\x4b\xa9\x14\xa9\x76\xa2\xec\x10\x97\x62\xbe\xb5\x94\xe0\x60\x77\xee\x34\xb0\xa7\xb8\x15\x5b\x4d\x85\xfd\xcc\xdc\x77\xa6\x6a\x2d\x69\x75\x6c\x69\xde\x32\xed\x40\x4c\xcd\x07\x5e\xaf\xdd\xd7\x0f\xfe\x52\x92\x47\xc4\x16\x46\xae\xaf\x2b\xad\xbc\x93\x49\x12\xcb\x14\x40\xad\x17\x15\x4a\xa5\x75\xb7\xa3\x2c\x3a\xf6\x20\x05\xd3\x33\xa9\x2c\xc5\x8b\x95\x83\xf8\x4b\x47\xfb\x38\xe7\xfe\x77\x14\x5f\xc8\xb5\x5c\xae\xc3\x63\x4b\xea\x70\xee\x94\x23\x4e\xc5\xcc\x73\xd1\x72\xd4\xec\x97\x06\xea\x22\x6b\xf9\xcd\x14\x24\x5d\xa5\x6d\xe7\xe2\xf3\x34\xa9\x4e\xc7\xd8\x7e\x51\x4b\x73\xb3\x14\x2e\xf8\xad\x99\x55\x99\xd7\xa3\x0c\x48\x0d\xf5\xb2\x60\x10\x15\x77\x6a\x34\xaf\x27\x8a\xb6\x54\x9c\xb7\xab\x89\x81\x16\x81\xed\x69\x06\xbc\xee\xb6\x8f\xa0\xe4\xf7\x78\xeb\x39\x54\x65\xa3\x08\x27\xe7\xf9\x7c\x18\x48\xca\xb8\x30\x29\x85\xa9\x71\x95\x6b\xc0\xf2\x44\x5b\x66\xab\xa3\x64\x4f\xca\xa8\x42\xb6\x44\x7b\xd2\x72\x59\x98\xcc\xf2\x76\x5b\xad\x39\xc5\xea\x8a\x4b\x42\xa7\x60\xa8\x63\xb3\xba\x8c\x4a\x06\x9e\xcf\xc1\x3a\x3d\xcc\x37\x6a\x8d\x64\x5d\x39\xb4\xf7\xd7\xac\x50\x5e\x79\xe5\xea\xa3\x2b\x94\x47\xaf\x5d\x7d\xc6\xb1\x6f\xee\x1b\xf3\xcc\x99\xec\x97\x76\x33\xf3\xf2\x8d\x51\x79\x5e\x10\x00\xcf\x0a\xb2\x22\x89\x00\x48\x0a\x0b\xbe\x31\xd2\xeb\xf3\x2a\xb6\x22\xdd\x38\x84\x7d\xb1\x4d\x8f\x1f\xc3\xfe\xdb\xda\x74\xad\xe7\xaf\xbd\x89\xf4\xe1\xbe\x3f\x7e\x1b\x69\xcf\x14\x2f\x00\x91\xa8\xaa\x20\xaa\x48\x25\x14\x60\x04\x55\x28\x61\x24\x08\x82\x8a\x80\x42\x31\x54\xa8\x20\x02\x00\x10\x07\xa9\x20\x20\x28\xca\x0a\xc4\x92\xc9\x62\xaa\x8a\x32\x16\xf1\xee\xe0\xe8\xc9\xd3\xbf\x72\x16\xfd\x29\x3b\x99\x62\xcb\x6c\x31\xbf\x8a\x86\x0b\x83\x73\xfa\x2c\x5c\x4d\x7c\x4e\x35\x0a\xcb\x79\x39\xbd\xaa\x4a\x51\x2a\x6b\xa6\x3b\xf3\x45\x4e\x5d\x08\x56\x14\x54\xbd\xc1\x79\x56\xbd\x74\x5d\x3d\x80\x9c\x3d\xcb\x46\x1f\xb7\xdf\x4f\x26\xcc\xf3\xec\x75\x9f\xfd\xb7\xfb\x5b\x97\x79\xa7\x12\xab\x50\x5e\x94\x79\xde\x44\xbc\x2c\x29\x48\x41\xa2\x6c\x2a\x22\xc5\x9c\x89\x59\xca\x09\x48\x56\x58\x95\x45\x10\x12\x45\x42\x22\x47\x14\x24\x03\x93\x72\x32\xc1\x54\x02\x8a\xb9\xe5\x9d\x7f\xcb\xfb\xdf\xd4\xee\xcf\xe2\x5d\x11\x0f\xdf\xd7\x7f\x01\xef\x3c\xe2\x89\xc2\x63\x04\x11\x62\x79\x11\xf1\x00\xb2\xa6\xc0\x89\xac\x09\x01\x87\x15\x68\xaa\xc8\x04\x9c\x22\x70\x54\xa5\x12\x14\x10\x96\x55\x62\x42\x01\x2b\x0a\x45\x2c\x31\xa5\x1d\xef\xc2\xa7\xf3\xfe\x68\xbb\x3f\x8b\x77\x70\xf4\xb8\xac\xfc\x02\xde\x15\x8e\xe3\x54\xde\x14\x14\x59\x14\x30\x05\x82\xc9\x72\x12\x94\x20\x87\x01\x40\x0a\xcb\x63\x4a\x59\x09\x8b\x54\x62\xa9\x29\x63\x8e\x55\x38\x19\x42\x20\x99\x2c\x94\x39\x56\xa5\x2a\xdc\x1d\xe7\xbd\xcd\xfb\x0c\xa6\x51\xa7\x37\xe0\x33\x4e\xaf\x0b\x83\x8e\xdc\x5e\x2e\x50\x57\xc8\x1b\x45\x6b\xe2\x09\x5a\x33\x3d\xd4\x73\x13\x09\x2d\x9b\x7a\x77\x7b\x7c\x04\xb8\xe1\xee\x30\xba\x75\x8d\xdb\x77\x79\xcf\x3c\x67\xdf\x35\x1f\xb3\x7f\x2f\xef\x08\x8b\x8a\x8c\x11\xc6\x2c\x8f\x45\x99\x55\x38\x20\x03\xce\x14\xa1\x04\x01\x51\xb1\x4c\x14\x59\x32\x21\xaf\x9a\x9b\x14\x23\xf3\x18\x40\x48\x01\x0b\x79\x4a\x88\x84\x04\x19\x93\x2d\xef\xb7\xf3\x4c\x7a\xe6\x0b\x7e\x24\x4a\xd3\x74\x2d\xbb\x9c\xd4\x93\x82\x5f\x30\x12\x6b\x0e\x34\x56\x76\xc8\x39\xb4\x92\xeb\xbb\xf5\xae\x15\xcc\x9a\x89\x96\xf6\x2b\x78\x7f\xc4\xfe\xaf\xe6\x1d\x00\x41\xa6\x2c\x52\x64\x15\x13\x96\x02\x11\x4a\x04\x03\xaa\x60\x59\xe2\x55\x55\x54\x79\x41\x21\x88\xa5\xac\xc8\x73\x54\xa0\x26\x8f\x90\x29\x0a\x0a\xab\x88\x94\xe7\x4c\x85\x95\xa4\xdd\x61\xe0\xdb\xbc\x7f\x74\x54\xfc\x19\xbc\x67\x9f\xb3\xff\xab\x79\x17\x90\x8c\x4d\x89\x8a\x32\xc1\x0a\x27\xb2\x92\x2a\x99\x94\x8a\x48\x40\x8a\x89\xa0\x8c\x00\x35\x59\x64\xb2\x0a\xcb\x51\xcc\xf3\x3c\x11\x4d\xc0\x01\xa4\x8a\x2a\x20\x44\x32\x09\x7e\x3d\xd2\xfa\x96\xf7\x4f\xf4\xb7\x98\xc2\xd4\x07\x79\xcf\x3d\x67\x7f\x2c\x3e\x66\xff\xe6\xa1\x91\xcb\xef\x7f\x7f\x7c\x60\xfa\xab\x47\xa5\xf9\xb2\x52\xa8\xcf\xeb\x63\x54\xe2\x0b\x9a\xd0\xed\x8c\x1a\x41\xc9\x1d\xf5\x58\x96\xe6\x95\xb0\xac\x03\x97\xcd\x36\x16\xc5\x6e\x52\xeb\x09\xda\x7e\x4e\xab\x5d\x62\xe9\x0d\x6b\xc1\xd4\x90\xcb\xa4\x0a\xad\xd1\xb2\x02\xdb\x35\x55\x4e\xad\x69\xa8\x12\xd6\xf4\x03\x63\xd0\x5b\xa7\xba\xc5\x71\xce\x2f\x81\xf1\x7c\xbc\x0d\x81\xaa\x14\x94\x8e\xf5\x6d\x9f\xc2\x9b\x4e\x49\x67\xd6\xd3\xf9\xb8\x9e\xaa\xfb\x86\x56\xb4\x69\xad\xd1\xcb\xf8\xe5\xe1\x3c\x5a\x99\x2d\xc1\xc9\xd5\xd2\x75\x89\xb3\xc6\x38\xcc\x15\x60\xca\xe8\x2e\x58\xa9\x99\xec\x0c\xbb\x6c\xcf\x1a\x07\x6c\x3a\x55\xcb\x8a\x06\xcc\x75\xf8\x92\x6b\x86\xc2\x60\x51\x76\x6d\x24\xb6\x1a\x41\xa5\xbc\x99\x92\xe8\x42\x6b\x32\x66\x5d\x09\x08\xbc\xec\x3a\xfc\xba\x22\x45\x62\x12\x8e\xd6\x0d\x81\x2c\x83\x75\x55\x6e\xf8\x41\x67\x61\x24\xda\xa8\x7d\x78\x85\xe4\x06\x07\x07\xcf\x38\x39\x95\x73\x24\x1b\x37\xf5\x33\x46\x45\x8f\x8e\x4a\xb4\x4f\x18\x15\x19\xc1\xaa\xd5\x7a\xc2\xbe\xa6\xfd\x7d\x4f\xc9\x4b\xd9\xf2\x57\x4f\x41\x1e\x0f\xb2\x1b\x0b\x47\xdb\x2b\x42\x56\xaf\x21\x67\x81\x9f\x29\xb3\xe5\x7a\x62\xd1\x6f\xa6\xd5\x75\x6f\xde\xeb\xb4\x84\xa5\x5d\xb3\xfb\xb3\x26\xe2\x32\x73\xb7\x5e\x26\xdb\x35\xdd\xeb\x41\xa6\x05\x53\xc0\xc3\xc5\x48\xd1\x59\x54\xe6\x87\xe9\xa2\x9a\xa9\xfa\x1c\x6d\x2f\x96\x93\x45\xdb\x2b\xa9\x0d\xc9\x98\x37\x92\x64\xd1\x33\x7d\x3a\xaf\x26\xb8\x49\xc3\x28\x16\x49\xcb\x28\x54\xf2\x0e\xc2\x4e\xae\x44\xa6\xe3\x85\x2b\xd0\x71\xad\xa6\x72\x73\xab\xdc\xed\x89\xc0\xdf\x4c\xf8\x5f\xd4\xfa\x68\xd5\xb0\xcb\xe5\xa2\x63\x8b\x51\x7e\x95\x4d\x36\xd6\x75\xa5\x15\xf9\xe9\xfa\x6c\x2a\xe7\xa2\x94\x5c\x1e\x28\x4a\x17\xd0\x8e\x78\x78\xdf\xe6\xef\x0f\xb2\x67\x9d\xfc\xd9\x20\xab\x2c\xca\x6e\xf0\x99\x41\xf6\x17\x0e\x89\xee\x0a\xb2\x4f\x9e\x6f\x3e\x1e\x64\x99\x33\xf4\x6f\x1c\xee\x83\xab\xb3\x37\x82\x2c\x53\x9c\x39\x5c\x54\xce\x97\x73\x62\x67\xb9\x88\x58\x9c\x49\x77\xb2\x54\x8e\x90\xe4\x88\x68\x55\x09\xf2\x56\x7a\x92\x70\x3a\x83\x8a\xbb\x34\x23\x49\xb4\x0d\xca\xbb\xcb\x68\xb4\x94\x2b\x58\x1a\x14\xc5\xac\x98\x71\xcc\x90\x8a\x72\x56\x1b\xa6\xf2\xcd\x76\x2d\xf4\x14\xda\x8f\x83\xac\xb4\x92\xd3\xbc\x3c\x5b\x14\xcb\x45\x39\x93\xc9\x69\x2b\xaf\xd0\x0f\x8a\xf3\x42\x3e\x53\x90\x54\x58\x55\x21\x59\x8d\x78\x3d\xb1\x00\xb9\xff\xa6\x20\x7b\xd6\xc9\x9f\x0d\xb2\x32\x3b\x96\x33\x9f\x18\x64\x7f\xe5\x3c\xfb\xae\x20\xfb\xe4\xc5\x85\xbc\xe4\x17\xa3\x0e\xf6\xfa\xd5\x0e\x1e\x4c\xa3\xde\xa4\x55\x48\x45\xc8\xec\xb3\x6e\xda\xa5\x66\x4a\x2f\x65\xad\xae\xe7\xcc\x73\xfa\x10\x6a\xa7\x5b\x20\x37\x86\x8b\xf1\xbb\x8e\x8f\x6d\x69\x08\xc9\xfd\x75\xd0\x97\xdb\xdb\xaf\xd7\x1c\x0b\xe4\xcb\xc3\xa2\xc5\x2e\xc1\x68\xa2\x2d\xb8\xec\x42\x2e\xf0\xbd\x9c\xbc\x6a\xe8\x2e\x2d\xea\x8b\x1c\x5d\xb2\xaa\x31\xb3\x25\x14\x55\x8b\x5a\x8e\x2c\x72\x9a\x41\xab\x50\x4b\x29\xb9\xfa\xc0\x91\x26\x82\x26\x59\xc2\x58\xce\x14\x32\xb6\x45\xdb\x46\x3b\xc3\xc9\x96\x19\x07\x85\xd5\xc8\x37\x17\xe2\x20\x23\x08\x35\x2d\x07\xbb\x43\x4e\x98\x69\x65\xaa\xe4\xb8\x5a\xbb\xb6\x8c\xb2\x7a\x6e\x3a\xe1\x16\xa5\x7e\xdd\x93\xfc\x3d\xb2\xcb\x01\xd7\x3f\xed\xd4\x93\x80\x8b\xb9\xdb\x26\xa8\xa3\x97\x51\x1f\x48\x48\x45\xef\xd0\x17\x57\xae\x2b\x8b\x9a\x27\x01\xff\x29\xf6\xaf\x24\x9b\x7b\xec\x9f\x4f\x38\x9f\x5d\x58\x7a\x68\x21\xf7\xb3\xed\x7f\x60\xc2\xab\x1d\xec\xd7\x1f\xb1\x9f\xeb\xb4\xd9\x9d\xf2\x72\x57\xcc\xb1\x64\x58\x95\xb5\x95\x9a\x66\x6b\x61\x3e\x6b\xcd\x4d\x0e\x70\x5c\x5b\x55\xfa\x23\xd1\x2d\x8f\x5d\xb5\x0e\xa4\x71\x5a\x98\x1f\xb5\xf7\x10\x70\x8b\x73\xfe\xee\x4a\x48\x9f\xbc\xea\xf6\xf8\x9e\xec\x5f\x98\x90\x8e\xf6\x58\x53\xea\xd8\x2d\x75\xf9\xa9\x30\x07\x75\xba\x52\x6a\x15\x32\xce\x22\xae\xd5\xd2\x25\x7b\x39\x1d\xeb\x6c\xca\xb7\x7a\x41\x35\x02\x56\x95\x93\xf9\x3a\x1a\x0f\x79\xdc\x6c\xb5\x29\xc9\xf8\x73\x93\xad\x69\x90\x0e\x33\xbd\x65\x34\xec\x68\x4e\x58\x9e\x8d\x9c\x94\xbb\x1a\xa5\xb4\x7e\x9c\x34\xe6\xed\x61\x34\xc7\x5a\xd4\xb0\xac\xde\x60\xb9\x2c\x75\x3d\x19\x23\x7f\x60\xfa\x93\x15\x5b\x70\xcb\xbd\xe9\xdc\x2c\x95\x13\x12\x32\xa2\xc3\x82\xfa\x67\x25\xa4\x07\xe6\xfa\x9f\x9a\x90\x9e\xb4\xff\x89\x09\xe9\x53\x56\xc0\xde\x5e\x7f\xd9\x8a\xef\xb3\x09\xe9\xa3\xf6\xff\xf6\x84\xf4\xc9\xcb\xd1\x1f\x6c\xc4\x7d\x09\x69\xdb\xa8\x0f\x3a\xf9\x33\x87\x44\x0e\xc3\xd2\xf8\x2a\xec\xf1\xd6\x33\xa3\x54\x53\x9b\x39\x25\x53\x8d\x1a\xd3\xbc\x95\xa8\x8e\x3b\xa8\x54\x5b\x8b\xbe\xd3\xa8\xf7\xdb\x64\xbe\x4a\xd3\x39\x5b\xd6\x9c\x29\xea\xe5\xe5\x55\x0d\x4d\x1a\x6c\xaa\x21\xfb\xc0\x0d\x6c\xb7\xe1\x2a\x55\xb1\xe3\x37\x52\x79\x5d\x6b\xd5\x53\x22\x6f\x54\xbb\x66\x6e\x8d\xeb\x8b\x38\xc9\xe0\x35\x5a\xcc\xf2\x1e\xc9\x08\x4d\x07\xf4\x12\xc6\xa0\xe9\xb6\xc7\xa3\x51\x90\x59\xd4\x87\x4a\x72\x11\xcc\xb3\x55\x6d\x58\xd3\x4d\x2b\x77\x18\xb1\x5f\x4e\x60\x67\x4e\x70\x25\x81\x1d\x13\xfe\xc0\x3a\xca\xd3\x09\xec\x13\xed\x3f\x96\xc0\xce\x97\xf0\xff\xeb\x02\x58\x3b\xdd\x5a\xf9\xab\xf1\x65\x66\x70\x65\x3d\x9d\x60\x3e\x79\xdf\xe5\x9f\x53\x68\x8f\x9c\x42\x8b\x93\x40\x95\x17\x72\x6a\x1e\xf4\x73\x5a\xb7\xb3\x4e\x36\xd7\xb3\xca\xcc\x8d\x92\x8b\xf2\x42\xd7\x28\x6b\x97\xc7\xcb\x25\x91\x9a\x3d\xe0\xac\xa3\x03\xb2\xa7\x12\xcc\xd1\x53\xf3\x91\x11\x4a\xf5\xd0\x77\x47\x27\xe8\xde\x04\xc7\xa5\x2b\xf5\xc9\xf6\xd3\x0f\xd9\x8f\xff\x3c\x4f\x30\xff\x4d\x53\x16\xed\x74\x0f\xf1\xaf\xc6\x97\x12\x8c\x41\xfd\x3d\x7c\x15\xed\xbf\x37\x01\x5e\xe2\xef\x2f\xc4\xf7\x2e\x7f\x37\xf7\x68\x6f\xfc\xa6\xf4\x47\x37\x6a\xcf\x7e\x57\xfa\x35\xf7\x1f\xef\xb4\x6e\x7f\xbf\xf1\x90\x2b\x2e\x3c\x3c\xae\x6b\xd9\xcf\x77\xb7\xbf\xfa\xf8\x46\xcb\xd5\x3a\x78\x6f\xcb\x83\xee\xeb\xff\xbd\xfe\xf6\xf4\x3b\xcd\x3c\xae\x53\x1a\x57\x27\x3d\xd2\x18\xbf\x26\xa1\x65\x32\x17\x2a\x76\xed\x0d\x32\xb5\x86\x5e\xd1\x1a\x7d\xa6\x94\xed\x33\x5f\xf7\xc5\x0c\xbe\xed\x2b\xe5\x5d\xad\x5b\x77\x56\x31\xf5\xb3\x80\x87\x37\x50\x87\xb7\x20\x5f\xaa\x23\x76\x28\x12\xfb\x34\x3c\x04\xbd\x4b\xc8\x5e\x0d\x9c\x82\xda\x96\x2e\xb9\x5d\x64\xec\x66\x75\xdc\xa7\xe1\x9e\x28\xbf\x04\xfc\x86\x75\xa6\x6d\xe8\xf5\x76\x96\x39\xfc\x9e\xf9\x87\x5a\xf2\x39\x7c\x7f\xb0\x01\x6f\xfb\xe0\x50\x77\xed\x4a\xcd\xb0\x93\x9a\xca\x4f\xe3\xdd\x2a\xbb\x04\xf4\xc8\xcc\x29\xc2\x5d\x25\xab\xcb\x15\xac\x8e\x0b\x48\x3f\x0d\x2e\xd6\x75\x09\xdb\xc1\xc8\x29\x34\x7b\xf2\x2d\xae\x6b\x75\xb3\x62\xd3\x85\xc2\xd9\xcf\x23\x3d\x52\x79\x11\xf0\xb9\xc9\x4b\x9d\x7e\xa5\xac\xd3\x49\xf9\xf0\xcf\x40\x1a\xce\xd0\x15\x8c\xaf\x66\x4e\xd1\xc5\x15\xa1\x6e\xd4\x78\x7a\x53\x33\xfd\x69\x90\x07\x85\x97\x80\x9e\x99\xbb\x2b\x87\x1d\xfd\x50\xce\x79\xe5\xf8\xa7\xd1\x1e\x14\x5e\x42\x7b\x66\xee\x14\xed\x6b\xa5\xa4\x1b\x95\x88\xde\x54\xd0\x7f\x1e\xef\x5e\xe1\x45\xbc\xa7\xe6\x4e\xf1\xee\x8b\x19\xdd\x28\x52\x74\x5c\x0a\xe6\x73\x00\x1f\x14\x5e\x02\x7c\x66\xee\xea\xd0\x60\x5b\xa4\xe8\xdb\xa1\x02\xd1\xcd\x2a\x34\xa7\x35\x5b\x3e\xa9\x1d\x47\x2a\x2f\xb6\xe4\xdc\xe4\xa5\x2c\x11\x92\xe9\xb7\xd7\xb2\x2b\xd7\x2b\xc4\x1c\xd5\x47\xf9\x2c\xec\x37\x81\x3f\x85\xfa\x6c\x88\x7a\x56\xb6\xe4\x73\xf0\x9f\x2a\xbd\xd4\x88\x0b\x66\xaf\xb6\xe4\xb8\x7a\xcb\xb5\xa1\xe6\xae\xb4\xd3\xfe\x0d\x32\xdd\xc8\x64\x7b\xf7\xd5\x95\x89\x45\xcf\xf5\x30\x55\xe3\x30\x8a\x6d\x37\x75\x23\xcf\xa0\x28\x20\x84\x79\x2d\x22\xf5\x3b\xd3\x2d\x64\x1b\x59\xe6\xb8\xa8\x14\xb7\x7f\x11\xf9\xed\x40\x93\x84\xd1\xf6\x59\xbe\x69\xc5\xc3\x28\x4f\xd5\x6c\x40\xee\xc6\x29\x27\x10\x8f\x2b\x8b\x7e\x3b\xae\x23\xfa\x6d\x5b\xdf\xf3\x0d\xba\x4d\x37\xa0\x55\x48\xa6\x0f\x03\xdb\x6b\xd8\x60\x3a\x04\xc6\x09\xac\xeb\x43\xc5\x8d\x38\x25\xe4\x79\x08\xaf\x4a\xb6\x28\x8e\x12\xcc\x9d\x40\x76\x77\x9e\x03\x72\xac\x64\x03\xe4\x74\x20\x7c\x27\x92\xd0\x9c\x10\x6f\xfe\x24\x92\x63\x25\x1b\x24\x47\x3f\x47\x78\x3f\x8c\xdd\x03\xf5\x69\x24\xc7\x7a\x76\x60\x5e\x47\x09\xa7\x60\x8e\xab\x07\xde\x4a\x5f\xcf\x21\x3a\x57\xb4\x81\x74\x96\x1b\xdf\xe5\xa8\xe6\x87\x91\x15\x90\x66\xbd\xcc\xbc\xfe\x06\x1d\x83\x67\xee\x84\x31\x7d\x77\xe2\x90\x88\xc4\x66\xff\x5f\x00\x00\x00\xff\xff\xc9\x39\xb9\xbc\x35\x8c\x00\x00") - -func non_native_paymentCoreSqlBytes() ([]byte, error) { - return bindataRead( - _non_native_paymentCoreSql, - "non_native_payment-core.sql", - ) -} - -func non_native_paymentCoreSql() (*asset, error) { - bytes, err := non_native_paymentCoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "non_native_payment-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x51, 0x1a, 0xcf, 0x20, 0xe9, 0xa1, 0x9d, 0x8d, 0x64, 0xc3, 0x55, 0xad, 0x2d, 0xe8, 0x9f, 0xc3, 0x5e, 0x2d, 0xf1, 0x5a, 0x7e, 0xbe, 0xb1, 0x28, 0xd6, 0xe3, 0x62, 0x88, 0x78, 0x14, 0x39, 0xf4}} - return a, nil -} - -var _non_native_paymentHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x7d\x67\x8f\xa3\x48\xb7\xf0\xf7\xfd\x15\x68\xb4\x52\xcf\xa8\x7b\xb6\xc9\x61\xf6\xce\x23\x61\x1b\x67\xe3\x1c\x57\x2b\xab\x80\x02\xd3\xc6\xc6\x0d\x38\xf5\xa3\xfb\xdf\x5f\x01\x8e\x98\xe4\x30\xb3\xb3\xf7\xb5\x46\xa3\x36\x9c\x3a\xa9\x4e\xa8\x73\xaa\x30\x5f\xbf\xfe\xf6\xf5\x2b\xd2\x30\x6d\x47\xb3\x60\xbb\x59\x45\x14\xe0\x00\x09\xd8\x10\x51\x96\xb3\xc5\x6f\x5f\xbf\xfe\xe6\xde\xcf\x2d\x67\x0b\xa8\x20\xaa\x65\xce\x8e\x00\x2b\x68\xd9\xba\x39\x47\xb8\x3f\xe8\x3f\xb0\x13\x28\x69\x8b\x2c\xb4\xb1\x3b\x3c\x00\xf2\x5b\x5b\xe8\x20\xb6\x03\x1c\x38\x83\x73\x67\xec\xe8\x33\x68\x2e\x1d\xe4\x3b\x82\xfe\xe9\xdd\x32\x4c\x79\x7a\x79\x55\x36\x74\x17\x1a\xce\x65\x53\xd1\xe7\x1a\xf2\x1d\x79\xea\x76\xf2\xec\xd3\x9f\x7b\x74\x73\x05\x58\xca\x58\x36\xe7\xaa\x69\xcd\xf4\xb9\x36\xb6\x1d\x4b\x9f\x6b\x36\xf2\x1d\x31\xe7\x3b\x1c\x13\x28\x4f\xc7\xea\x72\x2e\x3b\xba\x39\x1f\x4b\xa6\xa2\x43\xf7\xbe\x0a\x0c\x1b\x9e\x91\x99\xe9\xf3\xf1\x0c\xda\x36\xd0\x3c\x80\x35\xb0\xe6\xfa\x5c\xfb\x73\xc7\x3b\x04\x96\x3c\x19\x2f\x80\x33\x41\xbe\x23\x8b\xa5\x64\xe8\xf2\x8b\x2b\xac\x0c\x1c\x60\x98\x2e\x18\x5f\xed\x08\x2d\xa4\xc3\x67\xaa\x02\x52\xca\x23\xc2\xa0\xd4\xee\xb4\x91\xba\x58\x1d\xee\xe0\xff\x98\xe8\xb6\x63\x5a\xdb\xb1\x63\x01\x05\xda\x48\xae\x55\x6f\x20\xd9\xba\xd8\xee\xb4\xf8\x92\xd8\x39\x19\x74\x0e\x38\x96\xcd\xe5\xdc\x81\xd6\x18\xd8\x36\x74\xc6\xba\x32\x56\xa7\x70\xfb\xe7\xcf\x20\x28\x7b\x7f\xfd\x0c\x92\xae\x5d\xfd\x3c\x01\x7d\x6a\xd7\x4b\xe7\x33\xe8\x1a\x72\x1c\xb1\x13\xa8\x23\x72\x0f\xbc\x24\xe6\x84\xc1\x09\xe4\x0e\xad\xc7\xd5\x18\xaa\x2a\x94\x1d\x7b\x2c\x6d\xc7\xa6\xa5\x40\x6b\x2c\x99\xe6\x34\x7e\xa0\x3e\x57\xe0\x66\x7c\x22\xdc\xdc\x06\x9e\xa1\xdb\x63\x73\x3e\xd6\x95\x6b\x46\x9b\x0b\x68\x81\xc3\x58\x67\xbb\x80\x77\x8c\x3e\x72\x72\x17\x17\xd7\x8d\x35\xa0\xa2\x41\xcb\x1b\x68\xc3\xf7\x25\x9c\xcb\x57\x89\x70\x32\x7c\x61\xc1\x95\x6e\x2e\xed\xdd\xb5\xf1\x04\xd8\x93\x1b\x51\xdd\x8f\x41\x9f\x2d\x4c\xcb\x75\xc7\x5d\x4c\xbd\x15\xcd\xad\xba\x94\x0d\xd3\x86\xca\x18\x38\xd7\x8c\xdf\x1b\xf3\x0d\xa6\xb4\xf3\xcb\x1b\x98\x3e\x1d\x09\x14\xc5\x82\xb6\x1d\x3f\x7c\xe2\x58\x8a\x97\x77\xc6\x86\x69\x4e\x97\x8b\x14\xd0\x8b\x24\x96\x7c\x28\xa0\x5b\x57\x22\xde\x07\xdd\xd4\x03\xdc\x38\xa1\xaa\xd0\x4a\x07\xba\x47\x7f\xc3\x90\x9d\x5a\xd3\x0d\xf2\x42\xeb\x15\x44\x4e\x43\x71\xd2\x88\x85\x3b\x60\xe2\x24\xce\x80\x7d\x16\x80\xa4\x6d\xa2\x19\x4d\x0e\x9e\x9e\x06\xd8\xf4\xf9\x30\x13\x01\x75\xdb\x19\x3b\x9b\xf1\x22\x19\xa5\x0b\x69\x2e\xd2\x42\xc2\xb4\x60\xfb\x54\x12\x0f\x2c\xed\xdd\x3d\x11\x2c\x39\x8a\x49\xdb\x74\x93\xe9\xe7\x48\x57\xdb\xb6\xbd\x4c\xa2\x7c\x00\x96\x4d\x05\x5e\xb9\x2e\x38\x98\xc1\x02\x58\x8e\x2e\xeb\x0b\x30\x8f\x4d\xde\x49\x43\xc7\x8b\x2b\xd7\x26\x87\x8c\x76\x2d\x07\xe1\x03\xaf\xa6\xef\x29\x2f\x0d\x3d\x1f\xf0\x87\xe3\xf7\x27\xd3\x9d\xc9\xdd\x9f\x6e\x7e\xd8\x2f\xfd\x3c\x63\x18\xa7\xe4\x40\x33\xad\xc5\x78\xa6\x6b\xbb\x05\x43\x0c\x0b\x01\xc8\xd4\x32\x5e\xbf\xde\x8b\xc3\x9c\xd6\x38\xfd\xd1\xd9\x7a\xb5\x5b\x13\x11\x5d\xf1\x29\xe7\x84\x3c\xdf\xad\x76\x52\xe2\x8e\x30\xba\x07\x60\xde\x4d\x77\x3c\x26\xef\x5b\x7a\xf1\xf7\x59\xba\x2d\x34\xbb\x82\x98\xbd\x41\x67\xee\x3a\xdb\x86\xef\x57\x53\x3e\x43\x92\x7a\xb4\x02\x53\xc2\x1e\x57\xb3\xa9\x25\x8c\xf0\xfa\x6b\xe4\x0b\x47\x91\x6e\xec\x6e\xdd\x97\x0e\x78\xb7\xc8\x4b\x2d\xdb\x2e\x02\x5c\x23\x8b\x3f\x24\x25\xec\x6e\xf9\x97\x9e\x9f\xfd\x7a\x31\x0d\x47\x81\x18\x12\x0f\x7c\x12\x12\x76\x80\x7c\xa1\xd0\x12\x0a\x7c\x27\x04\x78\xa6\xbb\x15\x87\x2e\xc3\xcf\xf3\xe5\x0c\x5a\xba\xfc\xd7\xdf\x5f\x52\x8c\x02\x9b\x1b\x46\x19\xc0\x76\x3e\x83\xf9\x16\x1a\x5e\x2b\x26\xc5\x08\x55\xb7\x42\x87\xe4\xbb\x62\xb6\x53\xaa\x8b\x31\xf2\x8c\x81\xa6\x1d\xb9\x7b\x41\x2e\x18\x8d\xc1\xb1\x97\xee\x0e\x1c\xae\xac\xde\xf0\x23\xf3\x2f\xc8\x35\x82\x78\xa2\xa7\xc0\x20\x0c\x3a\x82\xd8\x0e\xa0\x30\x16\x9a\xfd\x6e\xec\x6d\x31\x5b\x14\x6a\xfc\x05\x85\x3f\x7f\xf3\xbb\x70\x22\x98\xc1\x6f\xfb\x6b\x48\x67\xbb\x80\xdf\x76\x43\xfe\x44\xda\xf2\x04\xce\xc0\x37\xe4\xeb\x9f\x48\x7d\x3d\x87\xd6\x37\xe4\xab\xd7\x9c\xcb\xb6\x04\x77\xbe\x76\x98\xf7\xf8\x7e\x3b\xc3\x78\x7e\x73\x87\x38\x5b\xaf\xd5\x04\xb1\x13\x83\xd9\x07\x40\xea\xe2\x39\x02\xa4\xd4\x46\x9e\xf6\x6d\xb7\xfd\x35\xdb\x43\xf2\x14\xa4\xbc\x17\x7f\x47\xf3\xa0\xa1\x44\x79\xce\x74\x29\xd6\x3b\x01\x7d\x22\xfd\x52\xa7\x78\x60\xeb\xb4\xff\x76\x46\xfe\x88\x25\xc0\xc8\x35\xc2\x5f\x20\xf1\x14\xd0\xa8\xbe\x2e\xb4\x76\xb3\x8a\x2c\x2c\x53\x86\xca\xd2\x02\x06\x62\x80\xb9\xb6\x04\x1a\xf4\xd4\x90\xb2\x5f\x78\xca\x6e\xb2\xa1\xed\xd8\xdf\xdb\xea\x91\xff\xfd\xdc\x86\xe9\xf2\x60\xd9\x89\xf8\x91\x96\xd0\xe9\xb6\xc4\xf6\xc9\xb5\xdf\x10\x04\x41\xaa\xbc\x58\xe8\xf2\x05\x01\xf1\xa4\xaf\xd5\xba\x7e\xbc\x6b\x77\x5a\xa5\x6c\xc7\x83\xe0\xdb\xc8\xef\xe3\xdf\x91\xb6\x50\x15\xb2\x1d\xe4\x77\xcc\xfd\x16\x9c\x8d\x44\x47\xbc\x4f\xba\x24\xf4\x0f\x13\x0e\x0f\x13\x2e\x4d\xa4\xba\x4f\xbe\x14\x14\x0e\x22\x1e\x2e\xdd\x24\xe1\xe7\xdf\x10\x24\xcb\xb7\x05\xa4\x5f\x14\x44\xe4\x77\xec\x2f\xec\xef\xd7\xdf\xb1\xbf\xf0\xbf\xff\xf3\x3b\xee\xfd\x8d\xff\x85\xff\x8d\x74\xfc\x9b\x88\x50\x6d\x0b\xae\x52\x04\x31\xf7\x25\x54\x33\x29\xf2\xc0\x9d\x9a\x49\xa6\xf0\xa3\x35\xf3\x3f\xb7\x68\xe6\x32\xa7\xee\xf4\x70\xc8\xc3\xe9\x14\x71\x4c\xdb\x17\x18\x3d\x8e\x11\xa4\xed\xea\x0a\xf9\x7e\x8c\x00\x2f\xfe\xe5\xce\xb0\x21\x20\xdf\x4f\x3d\xe2\x4b\x98\xd7\x3e\x94\xc7\x20\xc2\x00\x8b\x7b\x37\x4e\xcf\x61\xe8\x12\xe8\x5e\x2e\xc3\x90\x06\x38\x3d\x73\xc8\x73\x76\x8f\x56\x76\xc9\x6d\xd8\x32\xef\x6e\x6e\x43\x90\x06\xb9\x3d\x75\x92\x58\x6e\xdd\xcc\xa5\x40\x15\x2c\x0d\x67\xec\x00\xc9\x80\xf6\x02\xc8\x10\xf9\x8e\x3c\x3d\xfd\x79\x7e\x77\xad\x3b\x93\xb1\xa9\x2b\x27\x5b\x69\x67\xb2\x9e\xae\x7f\x77\x22\x7a\x0e\x96\x4e\x3c\xdf\x17\x4f\x8b\x6f\x5f\x22\x5d\x41\x24\x5d\xd3\xe7\x8e\xb7\x30\x10\xbb\xd5\xaa\x2f\x0e\x98\xb9\xcb\x78\x44\x9e\x00\x0b\xc8\x0e\xb4\x90\x15\xb0\xb6\xfa\x5c\x0b\x80\xcd\x97\xb3\xc3\x92\x1f\xd1\xe7\x0e\xd4\xa0\x15\x00\x51\x0d\xa0\xd9\x88\x3d\x03\x86\x71\x49\xc6\x31\x67\xc6\x25\x91\xcf\x38\x45\x7d\x39\x40\x5e\x4e\x7b\xb0\x6e\xb8\x55\x1d\xc1\x6e\xc7\x41\x25\x0e\xdc\x5c\x28\x64\xb1\x30\x74\xaf\x67\x8f\x38\xfa\x0c\xda\x0e\x98\x2d\x10\x77\xce\xbc\xaf\xc8\x87\x39\x87\x97\x8c\x46\x55\x45\xfb\xf5\xe8\xae\x9c\x4a\xc7\xf3\xa1\xf8\x8a\xc0\xba\x33\x43\xbe\xd5\xf1\x57\x74\x98\x77\xa1\x24\x66\x5b\x82\xb7\xfc\xca\x0c\x77\x97\xc4\x3a\x52\x2b\x89\x3d\xbe\xda\x15\x0e\xdf\xf9\xc1\xf1\x7b\x96\xcf\x16\x05\x04\x4b\x12\xe6\x66\xb5\x07\x11\x5d\x98\xe2\xae\xe9\x81\xcc\xe1\xc6\x59\x01\xe3\xf3\x53\x84\xc4\x4f\xdf\xbe\x59\x50\x93\x0d\x60\xdb\x5f\x82\xd3\xe5\xef\x55\x84\xd8\x16\x4d\x7e\x89\x99\x28\xbf\x36\xbe\x5b\x32\xbf\xa3\x73\x90\x2b\xdc\x33\x8e\xbd\xba\x70\x36\x43\xc1\x65\x53\x09\x03\xc7\xf0\x70\x70\xbf\xfd\x17\x32\x80\xa2\xe3\x3c\x2c\xbc\xbd\xf0\x20\xb3\x3d\xc5\xf9\xd3\x8c\x36\x4e\x10\xa4\xde\x17\x85\x1c\x92\x19\x26\x48\xe4\x77\xe8\xe2\x05\x3a\xe0\x0a\xdc\xfe\x43\x57\xa2\x78\xdb\xf7\x7c\xee\xb5\xba\x1d\x9e\x9d\xd9\x05\x7c\x66\x1c\x15\xe9\x2f\x5b\x5c\x51\x90\x9f\xbc\x8d\x8f\x4f\x11\xd6\xec\xd9\x71\xf8\x2d\x05\x3a\x40\x37\x6c\xe4\xcd\x36\xe7\x52\xb4\xb1\xed\x1b\x65\xf7\xea\x61\x87\x67\xa7\x87\xfd\xbe\x75\x04\x6f\x27\x9b\xc9\xa9\xbc\x30\x6c\x1f\x3b\x7c\xe0\x4e\x2d\x27\x9d\x51\x6f\x22\x0e\x7c\xec\xa3\x1c\x1a\xa0\x70\x9c\x88\x74\xf0\x87\xcd\xe4\x40\x62\x32\x97\xce\x31\x37\x05\xc7\x58\x10\x38\x89\x83\x7c\xd8\xe5\x42\x49\x0d\x7b\x30\x9d\xdd\xd7\xc0\x3e\xfb\x85\x2c\xd8\xc5\x7a\xc0\x01\xc6\x58\x36\xf5\xb9\x1d\x6e\x83\x2a\x84\xe3\x85\x69\x1a\xe1\x77\xbd\x9d\x4f\x15\x46\xcd\xb5\x77\xdb\x82\x36\xb4\x56\x51\x20\xee\x3a\xd4\xd9\x8c\xbd\x65\x92\xfe\x11\x05\xb5\xb0\x4c\xc7\x94\x4d\x23\x52\xae\xe0\x1c\xed\x8d\x05\x02\x05\x5a\xde\xf2\xc2\xbf\x6e\x2f\x65\x19\xda\xb6\xba\x34\xc6\x91\x86\xb2\x13\x1c\xe8\x06\x54\xa2\xa1\xa2\xdd\x2a\xa2\x77\x7d\xaf\x97\x45\xec\x87\x24\xe4\xbc\xf4\xd1\x26\x39\x7e\x5d\x2b\xf2\x63\xd3\x58\x2c\x8d\x9f\x95\xd6\xae\x12\xf4\xce\x34\x17\x4b\xeb\x32\xed\x85\x83\xc7\xa4\xc1\x93\x9d\x9d\x87\xd9\x66\x52\x99\x73\x7e\xaa\x2a\xa2\x14\x72\x57\xfe\xb2\x2f\x8a\x97\x01\xef\x4c\x80\x3b\xcf\x37\x97\x96\x7c\x38\xa6\x11\x91\x7a\xf6\xe1\xe4\xe9\xe9\xdb\xb7\xe8\x52\x2c\xda\x0f\x76\x1b\x6b\xf7\xaa\x73\x77\x16\xf0\xf3\x43\xd7\x0b\xbb\x90\x78\x4b\xf6\xf2\xce\xc2\x44\x92\x0d\x9c\x44\x8c\x03\xda\x1d\x8e\x8c\x03\xf1\xeb\xe0\x50\x80\xcb\x33\x9d\x09\x70\xb1\xe4\x0e\x50\x31\x14\x3d\x96\x74\x7b\x6c\x43\xc3\x80\x16\x22\x99\xa6\x01\xc1\x7c\x9f\x93\x74\x19\x8e\xe7\x67\xf9\xd7\xbf\x76\x9e\x93\x8f\xa7\x89\xc6\x81\x6c\x7d\x76\x9e\x29\x78\xf3\x64\x9b\x3e\xf4\xe4\xa7\xc7\xf5\xd8\x3b\x1b\x8c\x64\x8b\x42\xb6\x82\x7c\xfe\x7c\xaa\xc1\xff\x20\xe8\x97\x2f\x49\xa8\xc2\x86\xef\x95\xf6\x3f\x17\x7a\x4c\x81\xef\x4c\xa7\x01\xf4\x01\x85\x7b\x0c\xc6\xba\x52\xf8\x0e\xf7\x03\x9c\x2b\xfc\xcc\x42\xca\x4c\x9a\x26\x84\xdd\x93\x4b\x93\xce\x07\x3c\x26\x9b\x26\x50\xf9\x59\xf9\xf4\x4a\x61\xef\xcc\xa8\x09\xd4\x2e\x73\x6a\xd4\x80\x98\xac\x7a\x76\x26\xe4\x81\xb6\xba\xb7\xcf\x53\x96\x52\x17\x51\xbb\xd8\x9f\x50\x9a\xa5\x4d\xbc\xf1\x39\x34\x14\xf6\x48\x3a\xd4\x5f\xdc\x2a\x20\xba\x8c\x88\x2a\xd0\xfe\x91\x12\xcb\xd9\x8c\xe1\x7c\x05\x0d\x73\x01\xc3\xda\x96\xce\xc6\x2d\x78\x96\x86\x13\x71\x73\x06\x1d\x10\x71\xcb\x2d\xb5\xa2\x6e\xdb\xba\x36\x07\xce\xd2\x82\x61\x1d\x36\x8e\xfe\xf2\xd7\xdf\xc7\xb5\xcb\x7f\xff\x37\x6c\xf5\xf2\xd7\xdf\x41\x9d\xc3\x99\x19\xd1\x0c\x3b\xe2\x9a\x9b\x73\x18\xbb\x16\x3a\xe2\xba\x44\xb3\x93\x4c\x9f\xc1\xb1\x64\x2e\xe7\x8a\xd7\xb1\x66\x2d\x30\xd7\x60\xb0\x1a\x3b\x4f\xad\xae\x26\x5c\x6c\x1a\x54\x92\xcb\xad\x5d\xef\x4f\x57\xf6\xde\xb6\x3f\xc2\x95\x26\x44\xf8\xee\xe6\x9d\x97\x4b\x38\x1d\xd6\x16\x3a\x31\x7d\xd2\xd3\x8e\xd4\x69\x97\xf4\xba\x3a\xe2\x71\x42\xa4\x3c\x3c\x17\x2b\x54\x6c\xfd\x91\x46\xc8\xc8\x4c\xfb\x30\x31\x53\x9f\x3f\x8c\x15\x34\x21\x2d\x84\x8b\x9a\x03\x0e\x40\x54\xd3\x4a\xd8\x2d\x42\x72\x7c\x87\x4f\x10\xaf\x24\xb6\x85\x56\x07\x29\x89\x9d\xfa\xd9\x8e\x91\x97\x45\xdb\xc8\x67\xec\x05\x79\xc2\xd0\xfd\xe7\xe9\x05\xc1\x5f\x10\xf4\x05\x79\x7a\x8a\x66\x27\x6e\xc7\xe6\x5a\x96\x82\xbb\x36\x7b\xb6\x9e\xb0\xb1\x3e\xd7\x1d\x1d\x18\x63\xff\x04\xcd\x1f\xf6\xbb\xf1\xf4\x82\x3c\xe1\x28\xc6\x7d\x45\xe9\xaf\x28\x81\x60\xec\x37\x9c\xfd\x46\x32\x7f\xa0\x04\x4e\x72\xf4\x33\x8a\xbb\x4c\xa7\xc2\x8e\x8f\xfd\x27\x23\xce\x66\x44\xda\x8e\x1d\x53\x57\xe2\x29\x71\x34\xc5\x5c\x43\x89\x18\x2f\x6d\x78\xc8\x50\x63\x7d\x7e\xf1\x34\x46\x2c\x3d\x92\x44\x49\xf6\x1a\x7a\xe4\x18\x28\xca\x38\xd8\xd3\x8a\xa5\x41\x91\x14\x81\x5f\x43\x83\x1a\xfb\xf9\x70\xbf\x32\xf7\xf6\x42\x63\x49\xd0\x04\x8a\x5f\x25\x06\xbd\x27\xb1\x8b\x7e\x29\x48\xb0\x24\x46\x5d\x43\x82\x19\xcf\x4c\x45\x57\xb7\xe9\xa5\x60\x31\x1a\xbf\x8a\x04\x7b\x26\xc5\xee\x08\x74\x0a\x3a\x0c\x49\x13\xd7\xd1\x71\x27\x1d\x68\x9a\x05\x35\xe0\x98\x56\xbc\x4d\x71\x28\x86\x72\xd7\xa0\xe7\x3c\xf4\x7e\xbf\x73\xbc\x51\xac\x78\xec\x38\x83\x5d\x35\xd5\x18\xea\xa1\xdf\xcd\x82\x57\xe5\xc6\x13\xa0\x38\xe6\x2a\xed\x60\xd8\x29\x81\x43\xd9\xe4\x06\x80\x78\x42\x1c\xcd\x5d\x27\x09\x7e\x36\xd1\xbb\x42\xd5\x7f\xe8\x36\x8e\x12\x86\x32\x14\x79\xd5\x8c\x60\x84\x2f\xce\xa1\xbc\x8f\x9d\x71\x0c\xc3\x19\xfa\x3a\x49\xc8\xb1\xaa\x6f\xf6\x0f\x20\x98\x33\x63\xac\xea\xd0\x88\x0d\x8d\x18\x46\x61\xd8\x55\x41\x18\xa3\xf6\xfb\x2e\xfb\x7e\xf8\x26\x41\x0c\x9a\xb9\x2e\xcc\x63\xf4\x58\x9f\x6b\xd0\x76\xc6\x97\x1d\xf7\x04\x52\x0c\xc7\x5e\x37\x23\xcc\x59\xaa\xf7\xb6\x36\x40\x7c\x32\xc1\x70\x14\x25\xc8\x1d\x91\x88\x5c\x1b\xbb\x4f\x7f\x6d\xb2\xbd\xd8\xab\x3f\x5d\x04\x14\x32\x83\x42\xb3\xdc\xef\x55\xfb\xf5\x61\x31\x5f\xed\x75\x2a\xfd\x1e\x95\x2f\x14\x79\xa2\x2a\x0e\x87\x78\xb9\x59\xa9\x31\x75\xbe\xcc\x77\x85\x66\xbe\x4b\x57\x1b\xd9\xb6\x90\xef\x0d\xea\x62\x50\x43\x91\x44\x70\x97\x48\x76\x50\x29\xd0\x2d\x91\xac\x8b\x25\xa1\x91\xad\x89\xf9\x0c\x43\xe0\x3c\x49\xd0\x23\xaa\x21\xe6\xda\xad\x6a\xa1\x5f\x61\x0a\x99\x6a\xb6\xd6\xac\x96\xf2\x75\xb2\xcd\x08\xc3\x7e\xaf\x9b\x9a\x08\xe1\x11\xc1\x89\x66\x1e\x2f\x76\x05\x0a\xe7\x6b\x83\x6e\xbe\x5b\x24\xf8\x61\x99\x1f\x0c\x0a\x83\x41\x0f\xef\x15\x07\xc3\x61\x8b\x16\x86\x03\xa1\xd3\xa8\xe4\x06\xa3\x36\xdf\xa7\x99\x41\x9d\x4c\x4d\x84\xf4\xd4\xd5\x6a\x0c\x8b\xa5\x2a\x9e\x2d\x11\x79\xb1\x49\x66\x06\xd5\x7c\x4d\xcc\x55\xf3\xe5\xae\xd8\xe8\xe2\xc5\x21\x31\xaa\xe5\xdb\xc5\xba\xd8\xcd\x0a\x75\xbe\xdd\x67\x9a\x59\xa6\x3e\xc0\x8b\x4f\xb7\x9e\x2b\x71\x97\x99\x09\x73\xbd\x3b\x8b\x77\x3c\x46\xfb\x87\x0d\xe3\xcf\x5c\xbc\x20\xe4\x0b\xe2\x58\x4b\x98\xc2\x02\x2f\x4f\x53\xdc\x6c\x7f\x7e\x15\x74\x6a\x7d\xb2\x05\x15\xdd\x19\x03\x63\x31\x01\xf3\xe5\x8c\x74\x7d\xa6\xdb\xce\x3d\xdd\x39\x9d\xb7\x9c\x1f\x78\x88\x9e\xcf\x6a\xb6\x17\x04\x4b\xab\xe5\xb0\xe3\x03\xb7\xaa\x79\x7f\x84\xe0\x44\xcf\x38\x46\x32\x24\x4b\xa2\x14\xc3\x78\x4c\xb9\x3e\xf9\xdf\x4f\x7e\xa2\xfa\xf4\x0d\xf9\x44\xa1\x7f\xec\x2a\x81\x4f\x2f\xc8\xa7\xe3\x21\x15\xf7\x5e\xb7\x9d\x3b\x5e\x74\x6b\x7b\xf7\x62\x70\xde\x8e\x10\xfe\x61\x15\x17\xe6\xd6\x09\xfc\xf4\xbf\x51\x1e\x19\x94\x0c\x0f\x48\x86\xbf\x20\xc4\xff\x19\xc9\x30\xc6\x4d\x46\x0c\x81\xb3\x58\xe8\x9c\x61\xe8\xbf\x53\x34\x22\x20\x5a\xc8\xa4\xfd\x5b\x45\x73\x27\x0a\x67\x59\x92\x43\x29\x8e\xa5\xfc\x59\x43\x3d\xd9\x0c\x7d\xa6\x7b\xa2\x71\x38\x4e\x10\x0c\x8e\x12\x34\x4b\xfd\x41\x32\x0c\xc5\xa2\xcc\xbf\x4a\x46\x7c\x2f\x23\x86\xa2\x7b\xcb\xfc\x3f\x28\x23\x4b\xb1\x1c\x47\xb0\x34\xcb\x79\x22\xfa\x12\xda\x0e\xb0\x1c\x7d\xae\x8d\x25\x60\x80\xb9\x0c\x83\xb6\x9a\x9a\x00\x79\x4e\x20\xad\x0b\xec\xb5\x34\x07\x8e\xbe\x82\x37\xcb\xe3\x7a\xa0\x2f\xd0\x1a\xea\xda\xc4\xa5\x87\xbd\x20\x9f\xfc\x04\x33\x9e\xc2\xad\xaf\xe5\xdb\x96\x6c\x57\x05\x02\x8f\x2b\x12\x67\x76\xce\xf2\x83\xb4\xbc\x23\xf0\xa3\xb5\x1c\x90\x27\xa5\x96\x7f\x42\x4c\xf2\xb9\xa2\xd9\x9d\xbb\xfe\x28\x2d\xfb\x04\x7e\xb4\x96\x03\xf2\xa4\xd3\xf2\x8d\x35\x8e\xcf\x55\xc2\xd2\x2d\xec\xc4\xe3\xad\x4b\xb7\xfd\xa9\xc7\xbd\xb0\xd4\x0b\xf2\xa4\x00\x56\x92\x24\x96\xc1\x15\x06\x55\x71\x5a\x86\x18\xad\x50\x18\x4a\xb2\xb8\x82\xab\x34\x86\x31\x24\x43\x51\x38\x8b\x13\x80\x52\x49\x45\x66\x31\x00\x38\x52\x05\x2c\xca\x29\x2a\x09\x58\xd6\x5d\x4b\x2b\x90\x62\x68\x5a\x82\x14\x49\x29\x9c\x2a\x73\xac\xcc\x4a\x0a\x4a\xcb\x34\x4a\x48\x90\xe5\x68\xa0\x92\xaa\x0a\x51\x8a\xc6\x21\xed\x21\x01\x12\x44\x31\x49\xe1\x38\x85\xa1\x30\x16\xf7\x97\xb2\x58\xa0\xa0\xa5\xbf\x11\xec\x37\x1c\x0d\xd6\xb9\xbb\xcb\x7f\xd0\x04\x45\x33\x58\xe2\x5d\x7f\x05\x47\xd0\x24\x8b\xbe\x20\x18\xed\xce\xe7\xc5\xe7\x05\x61\xdc\xff\xb0\xdd\x7f\xfb\x8b\xd8\xe1\x0f\x97\x35\x9e\xe7\xf9\x2c\x47\x0d\x46\x16\xd5\x1d\x8c\x5e\xcb\x6f\xa5\x55\x53\x2a\xf0\x0c\x5d\x06\xab\xce\x2b\x99\x1f\x2e\x25\x94\x28\xbd\x3f\xf3\x12\x3e\xc2\xb0\x42\x96\xad\xe6\x4a\xa6\x36\xe8\xe5\xfb\xd9\x2e\x96\xe9\xe6\x25\xec\x63\xc5\x49\x62\x19\x67\x71\x4d\xb5\x4b\xf9\xad\x99\x27\xd0\xd5\x64\x4b\x34\x4b\x2e\x6a\x7e\xd0\xe8\xd5\x5e\xf9\xe3\x67\xbe\x28\x8a\xb4\x85\xf6\x33\x6c\x65\x20\x81\x42\x4e\x6a\x13\xa0\xa1\xe4\xf3\xb5\xf2\xe8\x79\x6b\x6d\x25\x21\xbf\x18\xbd\xc9\xb9\x26\xff\x8a\x7e\x8c\x26\xb9\x7e\x41\x6a\x16\xa7\x4e\x79\x30\x2c\x29\xdd\xe1\xd0\x24\xb8\x55\x9b\xef\x2d\xf0\xf2\x9c\x61\x96\x9d\xde\xd6\x40\x33\x83\x92\xe0\x61\xee\x8a\x64\x15\x7c\x2c\xf0\xe6\x09\xb5\x0a\xcb\x87\x7c\x46\xfc\x00\x23\x9b\x3c\x9f\x43\xcb\x61\xb7\x7f\xe9\x8f\x6f\x54\x68\x84\xdf\x07\x5d\x81\x7c\x8c\x19\x3f\x41\x96\x51\xa0\xa2\x30\xa4\x84\x49\x98\xc4\xa9\x98\x8a\x43\x46\xc6\x00\x4d\x31\x9c\x8c\x71\x24\x8a\x32\x90\x26\x19\x1c\x47\x01\xae\x32\x32\x03\x70\x9c\x61\x59\x54\x55\x31\x86\xc1\x64\x92\x8b\x71\x05\x8c\x8b\x34\x76\x9a\xe0\xa8\x68\x57\xd8\xdf\xf5\xd7\xc5\x34\x87\xb1\x64\x8c\x2b\xd0\x29\x5d\xe1\x79\xc2\x31\x8a\x52\x2d\x6c\x96\x6a\x71\x4b\xb1\x85\x59\x8f\x5a\x8f\x9a\xbc\x3a\x6b\x6d\x4b\x95\x2a\xb1\xa1\x4b\x73\x9d\x7f\xdd\x28\x9b\x4d\x59\xef\xa3\x82\xf6\xd6\x6c\x74\xb3\xfc\xb3\x9c\xcd\x7d\x34\xaa\x24\xa6\x56\xca\x65\x5d\x98\x0e\xcc\x5c\xbb\x38\x9a\x17\xdb\xc5\xe5\x00\x35\x0c\xd2\x9b\x3a\xd7\x15\x9e\xd7\xc7\xa9\x64\x39\xd0\x18\xe9\x1a\xaf\x3d\x97\x6a\x1b\x4a\xae\x29\x85\xca\x66\x3d\x30\x25\x61\x92\xef\x8d\x78\xbd\x58\x97\x5a\xea\x90\x54\xb7\xfa\x47\xb1\x82\x6b\x2a\xb7\xa8\x28\xa6\xd5\x57\x57\x50\xe9\x8c\x5e\x25\xa7\xa0\xcd\xdf\x89\xd7\xfc\xc2\x92\x88\x22\xc5\x8f\x2a\xd0\x51\x19\xa3\xaa\xb9\x98\x9b\x21\xae\x50\x1e\x86\x99\xd3\xff\x3f\xae\x40\x3c\xc6\x8c\x9f\x58\x86\x65\x64\x86\x61\x49\x99\xe2\x38\x95\xc4\x00\xab\xe0\x8c\x84\x12\x40\x21\x48\x9a\x91\x58\x95\x46\x09\x82\xa3\x24\x4e\x66\x19\x85\xe1\x14\x77\x41\xcf\x92\x38\xa9\x62\x0a\x27\xa9\xfb\x5d\x43\x3c\xd4\x15\xd8\x48\x63\x67\x18\x9c\x21\x63\xef\x52\x4f\x87\x3a\x0a\x63\x59\x36\xc6\x15\xa8\x94\xae\x40\xc2\xe2\x86\x98\xd4\xfa\x23\x2e\xf3\x2e\x96\x19\x9e\x46\xd1\x11\xf3\x86\xf3\x1f\x86\x34\x2f\xa9\x83\x79\x53\x34\x27\xd9\xce\x06\x97\x58\x7e\x43\xf5\x2b\xf4\xaa\xa0\xd1\x6b\x02\xaa\xa5\x05\x2e\x67\x96\x20\x57\x2d\xc9\x8d\x12\xfa\xf1\x9e\x97\x3f\x08\xf5\xa3\x4c\x94\xea\xca\x47\xd1\xf4\xa6\xce\x73\x05\xed\x38\x95\x22\x46\x80\x67\xa2\x60\xcb\xab\xd9\x6b\x16\x7b\x1b\x15\x3b\x8d\xa2\x48\x16\x1b\x6b\xaa\x88\xf7\x15\xe1\x03\x9f\x16\xa6\x5d\x7d\xc3\x3c\xe7\xb7\x5a\x79\xa4\xe1\x9b\x81\xd9\xa4\x5b\x43\x11\x64\xc0\x7a\xf3\xda\x94\xe9\xee\xec\xb5\xf2\x5c\xaa\x54\xfb\x70\xda\x29\x49\x59\xa7\x4b\xaf\x29\xcf\xfa\x6b\x21\xae\x50\x44\xc3\xcc\xe9\x5f\xee\x0a\x78\x7a\x57\xc0\x1f\x63\xc6\x4f\x34\xa1\x70\xac\x4a\x11\x34\x84\x34\xab\x60\x12\xce\x48\x94\xc4\x72\x2a\x4e\x00\x95\x22\x30\x4c\x62\x28\x9a\x03\x38\xa9\x02\x15\x23\x5d\xd4\xa8\x44\xe1\x12\x4d\x10\x12\xca\x48\x90\x73\xdd\x89\xf0\x17\xbe\x97\xae\xc0\x44\x1a\x3b\xcb\xb1\x6c\xf2\x5d\xbf\x74\x23\x29\x0e\x8f\xf1\x04\x22\xa5\x27\xe0\x8d\xd1\x1b\x26\x2e\x29\x13\x95\xca\x4c\x9f\x9c\x6f\xeb\xab\xee\xa6\x40\xf4\x16\xe6\xf4\x79\x95\xe7\xeb\x4e\x16\xab\xe0\x35\x26\xc3\xd0\xa3\x06\x21\x09\x1d\x2c\xd3\xec\xd7\x99\x15\x4e\x19\x15\xad\xf5\xba\xa4\x1d\x71\x3a\xea\xbc\x6e\xba\xd4\x7b\x53\x24\x50\x73\xd2\xc8\xd1\x59\xdf\x11\x7c\x4f\xf0\x8c\xb3\x74\xf8\x8f\xf7\xbe\xdb\xc7\xef\x6b\xbe\xd1\x9c\xfa\xf0\x9d\x59\x1b\xab\xce\x60\x47\x06\x1a\xbd\xd0\x59\xac\x34\x01\xf5\xc2\x73\x6d\xb8\x01\x04\xa9\x81\xf5\xdb\xdc\x6e\x65\x08\x6b\xd5\xd6\x84\x8f\x49\x76\x52\x59\xd6\xc5\x6d\x9d\xb4\xf4\xad\x38\xa5\xa7\xda\x50\x07\xf6\xab\xea\xd0\x93\x67\x82\x6e\x35\xa4\x45\x25\x2f\x14\x67\x2b\x0d\x78\x49\xa9\x14\xe2\x29\x82\x1d\x66\x6d\xff\x72\x4f\x21\xd2\x7b\x0a\xf6\x18\x2b\xf7\xce\x67\xb9\x25\xa4\x5b\x74\x61\x1c\x83\x7e\x45\xb1\xaf\x28\x86\xa0\xe8\x37\xef\x5f\x94\x35\x33\x28\x41\x45\xaf\x80\x0e\x77\x49\x9c\x23\x39\x9a\xc1\x39\x3a\xc6\xd6\xc3\x2d\xdd\x67\xe9\x9f\x9e\x94\xe8\x4f\x66\x50\xd1\xc9\xed\xeb\xb6\x5d\xc9\x30\xb9\x79\x8e\x2b\xe2\xe8\xe6\x2d\xf3\x6c\xa3\x9a\x63\xaf\x4b\xeb\x0f\x6c\xa0\xb4\xfb\x43\x90\x29\x83\xbc\x97\x4e\x84\x10\x23\x0e\xff\xec\x8d\x98\xe7\x33\xd3\x9f\x20\xc8\x43\x3f\x4f\xbe\x31\x25\x97\xd9\x29\x9e\x80\xba\xb5\xea\x8e\x38\xd8\x16\xb5\x7f\x82\x47\x78\x5c\x02\x9a\xe0\x66\x05\x76\x1b\x9a\x8b\xf6\xf9\x6d\x68\xc8\x00\x1a\xe2\x36\x34\x54\xb0\xe3\x7d\x1b\x1a\x3a\xd0\x54\xbe\x51\x28\xe6\xbc\xcf\x49\xde\x86\x85\x0d\x34\x67\x6f\xc3\xc2\x05\xba\x81\xb7\x61\xc1\xd0\x73\x34\x37\x8a\x84\x05\xba\x66\xb7\xa2\xc1\x03\xcd\xc4\xc7\x3c\xbc\xf7\x90\xad\xd7\xf8\x93\xa5\xae\x7d\xa5\xdd\x8b\x8d\x78\x86\xed\xee\xe8\x72\x12\x0a\xce\xc2\xc9\xe1\x0b\x7d\x68\x2d\xfc\xf7\x93\x63\xde\xd5\xb8\x7c\x41\x3e\xa9\x96\x39\xbb\xab\x91\xff\x82\xfc\xc2\xfb\xa8\x3f\xe0\x50\x49\xc8\x44\x9d\xef\xc1\x1e\xbe\xa0\x97\x13\x75\x87\x92\x8f\x13\x75\xa3\x36\xce\x26\xea\x97\xdb\x3b\xfd\x01\x27\x73\xc2\x66\xea\x2c\x0b\x1d\xbe\x90\xde\x34\xd1\xe9\xf6\x27\x1d\x6b\x69\x3b\x10\xde\x3b\x17\x1e\x1a\xd3\xba\xd7\x7f\x7f\x8d\x99\x7b\xf0\xe9\xb0\xc8\x99\xdb\xef\x26\x1f\xbe\xa0\xff\xf0\xcc\xdd\x13\x35\x7f\x89\x99\xfb\xf1\xd1\xf1\x74\x95\x74\xf8\x9b\x3d\xd9\x63\x54\x97\x73\x65\x27\xcb\x8d\xc7\xe6\x3c\xbd\xf8\x87\xd7\xee\x9d\x95\xe4\x0d\xcf\x3b\x8f\xf7\x5d\xa3\xb5\xdd\x72\xee\xf0\x37\xf9\x63\xb5\x76\xbb\x4b\xfc\x5a\x5a\xf3\x97\x9d\x87\xbf\xd1\x1f\xaa\xb5\x3b\x62\xf7\x0f\xd7\x5a\xc2\x12\x36\xe4\x37\x03\xd2\x2c\x5f\x93\xb1\x26\x3f\x3e\x7d\xeb\x32\x39\xf2\xb1\xab\xd0\x32\x9c\x8e\xae\xcb\x12\x11\xe1\xc1\x35\xf7\xad\x88\x88\xc0\x9a\x30\xaa\xc6\x4b\x44\x44\x06\x10\xdd\x2c\xda\xc5\xda\xe7\x56\x44\x74\x20\x15\xdf\xcc\x11\x73\x9e\x1a\xa2\x0a\xcf\x44\x3c\xec\x39\x9e\x9b\xf9\xe1\xce\x83\xee\xcd\xfc\x9c\x15\xe6\xe4\x1d\x73\x8f\x05\x02\xda\xed\x1c\xe1\x81\xc8\xf8\xa8\x5f\x03\x78\x48\x79\x9e\xf4\x3c\xe4\x35\x05\x7a\xe4\xe3\xf0\x0f\x88\x3d\xa7\x8f\xf0\x49\xb4\x22\x53\x2a\x49\x43\x85\xc5\x48\x94\xe2\x28\x59\x55\x49\x89\x90\x58\x59\x02\xb4\xc4\xa8\x32\x2a\xc9\x28\x8b\x62\xaa\x82\xe3\x38\x24\x65\x06\x63\x24\x8e\xe4\x18\x08\x29\x19\x2a\xe8\xd3\x0b\xe2\x1f\x6b\xbb\x7d\x2d\x76\xb2\xf9\x43\xee\x9b\xde\xd1\xe7\x69\x58\x32\x7a\xd7\x75\x7f\xf7\x2c\xf2\xf9\xdd\xf2\x0a\xfd\x06\x75\xe2\x6d\x66\x96\xd8\x4e\xc1\xc8\xbd\x42\x4d\x26\x98\xc6\xc0\x29\x56\x2a\x1f\xfd\x1e\xbb\xee\xe9\xa3\x0c\xc8\x2e\xa9\x2a\x55\xe3\xbd\x6e\x33\xbf\xdf\xcd\xc9\x06\x9a\xb9\x99\xe3\x9f\xfe\x41\x16\x69\xa6\xcd\xb0\x1e\xae\x68\x54\x0f\x9b\xbd\x63\xd0\xa8\xc9\x05\xcc\xd9\xbc\xb5\x87\x95\x11\xb7\x16\x34\xb3\x9d\x01\xb0\xcf\x76\xf5\xbc\xb7\x87\x94\xe9\xf5\x44\x7f\x20\x9f\xc5\x96\x19\xa5\x68\x76\x96\x5a\x6d\xd5\x74\x72\x4c\x66\x52\xaa\x12\x22\xe4\x94\x5e\x43\x2d\x94\x9e\xcb\x3a\x55\x5e\x75\xeb\xcf\x23\xde\x61\xfc\x73\x08\xca\x47\xbf\x7b\xc2\x4a\xe1\xc0\x6f\x33\x2f\xd5\x51\xc7\x51\x5e\x57\x85\x82\x6d\x51\xec\xb4\xb8\xa8\xd8\x99\x69\x1d\x6b\x81\xea\x82\xdf\x08\xf5\xb7\xd7\x01\x95\xe3\x08\xa1\xa2\x0e\xa8\xcd\xa6\xb8\x58\x16\xf4\x2e\xd7\x30\xca\xf5\x2d\xf6\x0a\x8c\xa2\xc8\x4d\xe5\xfa\xc6\xa9\x88\xca\x6a\xc5\x7c\x64\x27\x85\x56\xa3\xf5\xda\x64\xbf\x3f\x9d\xee\x36\x14\x4e\xba\xf4\xcd\x30\x7d\xf0\x47\xf8\xe3\x16\x59\xce\x03\x3a\x19\x6a\xbd\x8b\x74\x15\xd6\x81\xf6\xb6\xa9\x81\x6e\x83\xa3\x33\x1f\xaa\xcd\x41\x54\x36\x2d\x71\x34\xf8\xc8\xf4\xcb\xd3\xbc\x59\x61\xa6\xab\xa9\x2f\x74\x9d\xb2\xca\xf5\xe3\x7c\x64\x02\xf4\xcf\xe6\x22\xe4\x93\x79\x30\xfd\xec\x4d\xf4\xbd\x3f\x6b\x07\x7d\xf8\xe3\x33\x4b\x90\x95\x7a\x83\x11\x9e\x33\x06\x7d\x60\xf5\xe8\xee\x66\x2d\xf5\x89\x82\x58\xd6\x16\x73\x82\x6f\x67\x27\xa5\xfc\x82\x92\x36\xed\x52\xdf\xdb\x2d\xc9\xf7\xba\xe8\x8e\x70\xb5\x4f\xe6\x51\x38\xa9\xd3\xfc\x96\xcb\xa2\x0d\xbb\x20\x68\x2b\x19\x63\x30\xac\xcb\xb1\xc3\x37\x72\x56\x9d\xce\xb8\x26\x43\x4d\xb3\xc4\xea\x84\x95\xd7\xc3\x67\x1d\xc6\xb3\xf7\x3d\xff\x8f\xf0\x97\x21\xc4\x51\x33\x89\xbf\xda\xf1\xa2\x47\x26\xbb\x34\x09\xd3\x21\xa9\xf7\x6c\x43\xd8\x2c\x9a\xaf\x84\x59\x14\x9f\x3f\x30\xa6\xb5\xd5\x6d\xcc\x50\x6b\xf9\xe1\xac\xd9\xd7\xac\x65\xfb\xb9\xc3\xdf\xc9\x5f\x6e\x09\xb6\xda\xb5\xfa\xfb\x89\xfc\x25\xea\xef\xfb\xd1\x37\xb5\x80\x2d\xf2\xb7\xf0\xca\x33\x33\x7b\x26\x1f\xf1\x09\x7c\x20\x16\xf0\x47\x3d\x84\x7d\x4e\x74\x75\x33\xfd\x29\x79\x1b\x7d\x5f\x17\xff\xed\xd9\x4c\x1b\xc7\x88\x67\x76\x08\xb6\xab\xf9\xb6\x09\xa7\xef\xeb\x42\x93\xe9\xe5\xcd\xe5\x34\x27\x34\xe9\x06\xa7\x4e\x1b\x84\xdc\x5c\x70\xea\xbc\x28\xc0\x19\x09\xca\x1d\xf4\xb9\x3b\x65\xaa\x03\xee\xbd\x2b\x13\x78\x6b\xcd\x14\x50\x13\xc3\x9f\x5f\x57\xb5\x8a\x30\x12\xb8\x22\x97\x5b\x7f\xff\xee\x15\x3e\xde\x0f\x80\xec\xb7\x92\xfd\xff\xdd\xc4\xef\x25\xb8\xe4\xd5\xcf\xe9\xa3\xdc\x0c\x41\xab\xa8\xc4\xd2\x9c\x02\x51\x95\x21\x01\x05\x15\x46\x65\x15\x9a\xc2\x39\x8e\xe4\x70\x82\x85\x12\xaa\xa2\x24\x8e\xa9\x84\x2a\xe3\x92\x24\x93\x04\x8b\xb2\xa4\x8a\x63\x32\x8b\x52\x94\xff\x1c\x1c\x76\x4f\x87\xf2\x24\x43\x13\x49\x19\x9a\x26\xb1\xb8\x43\x80\x24\x46\xe1\x4f\x81\x4a\xe0\xe9\x16\x8b\x3f\xc9\xd0\xc1\x59\xbf\xc8\xd0\x57\x46\xfc\x7b\x32\x34\x33\xb3\xcd\x13\x56\x8a\x07\x7e\x9b\xb9\xb7\x4c\x9b\x5f\x1a\x15\x99\x73\x5a\xef\x05\xed\xb9\x3e\xed\x49\x95\xc6\x07\x69\x1a\xad\xe6\xb0\x0b\x57\xdb\xac\xba\x42\xab\xbc\xf1\x2e\x0d\x0a\xf4\xb6\x21\x2d\x5a\x68\xa6\x45\x9b\xcc\xcc\xd2\x67\xad\x19\x5b\x27\x7b\x66\x2b\x53\x28\xf1\x9d\x66\x86\xc4\xc5\x7a\x5f\xce\x7f\x28\xcd\xf5\xe3\x32\xf4\x09\x90\x23\x69\x83\x16\x2d\x30\x66\xae\x8a\x56\x9b\xcf\xeb\x61\x3b\xcb\x7d\x0c\x56\x83\x5e\x87\xd8\xe8\x0d\x7d\xb8\x6c\x4b\x58\x6e\x35\x6b\x56\xa1\x7f\x5e\xd7\xcd\x90\xf3\xe3\x7c\x44\x7c\xd2\x64\xc8\x87\xd0\xbf\x8c\x02\x29\xe8\x5f\x44\xc5\x9f\x1d\xc1\x7d\x56\xd2\x64\x98\x5f\x34\x03\x86\x66\x98\x93\xd5\xf3\x1d\xbe\xa4\x45\x4d\x5d\x62\x86\x11\xee\xa3\x7f\x9a\xe1\xae\xa1\xbf\xcb\x30\xf5\x5a\xbe\x94\xa5\xbb\x8b\x0f\x1c\x2b\x98\x20\x47\xd2\xad\x9e\x6d\xbe\x36\x74\xbd\x97\xcf\x4c\x5a\xf4\x6b\xa9\xfc\xfc\xda\xb4\xb3\xfd\x85\x23\x4b\x56\x89\x5b\x1a\xc5\x66\xbe\xf8\xfe\xb6\x04\xcb\xca\xa8\x20\xad\x99\x49\x7f\x22\x08\x43\x2d\x23\xf2\xc5\xb7\x21\x4a\x8d\xd6\x03\x11\xcb\xf1\x8f\xce\x30\x2c\x86\x61\x1c\x2e\x13\x2c\x4d\x12\x8a\xca\x10\x32\x8a\x51\x80\x02\x98\xc2\x30\x12\x8b\xe2\x8a\xaa\xa2\x94\x42\xaa\x14\xaa\xca\xb4\x82\xa1\x2c\x46\x03\xc0\x50\x32\x0a\x68\x0c\xe5\x54\x0e\xf8\x67\xb4\xee\x7a\xce\xfe\x9a\x0c\xc3\x30\x24\x1b\x9d\x61\xdc\xbb\xf8\x53\xa0\x45\xe4\x5b\x65\x81\x32\xcb\x4e\x4f\x99\x0f\xeb\x3d\x65\xf4\xee\x0c\x16\x9d\x62\xc6\x91\xe4\x21\x3a\xcb\xce\x54\x39\x53\xaa\x08\x5a\x7f\x6e\xac\xf2\xa5\x09\xe0\x53\x67\x18\xef\x98\xf6\x6d\x19\x83\x38\x3a\xd3\x11\x5f\xfe\x40\xbf\xd9\x30\x34\xa6\x50\x9d\x94\x35\x74\xc3\xbc\x2d\xf8\x35\x26\xac\xe9\x22\x3e\xc8\xd3\xdb\x56\x69\xa6\x96\x4b\xeb\xbc\xba\x41\x39\x71\xa9\x53\x92\x53\x2f\xf3\x79\xb8\xce\xf3\xa2\x5a\x07\x7c\x86\xcd\x37\x47\x06\xb5\x20\x78\x4a\x23\xa6\x74\xae\x98\xd3\x35\xb5\x2b\x76\x73\x18\xad\xc9\x69\x32\x46\xe1\xd4\x94\xa3\x32\x06\x7f\x72\x36\xfe\xca\x1a\xf8\x21\x19\xe3\x81\xf4\x6f\xcb\x18\x1e\xfd\xe0\x3a\xfa\xda\x9a\x29\x74\x1d\x7d\xf9\x89\x8f\x72\x8f\xa6\x7f\xc5\x3a\x9e\xe7\x7f\xdd\x9a\x36\x29\x23\xdd\xa2\xab\xbb\x33\xd2\x03\xe7\xea\x1a\xfa\xbb\x8c\xf4\xdc\xcf\xd9\xc3\xa5\x30\xcb\x75\x8a\xcb\xfa\x34\x97\xeb\x76\x72\xa6\x3a\x92\x07\x56\x59\xd0\x47\xec\xf4\x8d\xef\xbd\x16\x3b\x28\x4e\x57\x8d\x25\x4a\x4e\xf9\x1e\xc3\x77\x79\x8c\xa5\x4c\xbe\xb8\xee\x65\x66\x83\xd9\x5c\xce\xcd\x72\xb0\x63\xd6\xe4\x7a\x25\xc3\x35\xb1\x66\x63\xf0\x9e\x79\x78\xcd\x23\x29\x24\x4b\x2b\x92\xa2\xa0\xb8\x42\xd2\x28\x8b\x31\x34\x83\xc9\x24\xa0\x00\x03\x39\x85\x86\x2c\x4d\xc9\x00\xe7\x64\x89\xc4\x20\x8d\x2b\x0c\x00\x2a\x83\x02\x5c\x85\x90\x92\x08\x5a\x81\x7e\x46\xba\xeb\x47\x59\xae\xcb\x48\x0c\x15\xf7\xb4\x87\x7f\xf7\x6c\xaf\xe1\xde\xae\xe4\x4f\xcc\x48\x27\x5d\xc6\x0c\x37\x9d\x55\xfa\xf8\x3b\xb1\x62\x9a\xea\x96\x6d\xd4\xe0\x54\x90\xb0\x4e\xa7\x44\xe9\x9b\xf7\x69\x09\xcd\x98\xda\xc0\xaa\x3b\x8c\x56\xc7\x68\xbc\x29\x4d\x27\xb8\xd2\xee\x74\x55\x98\x33\x57\x32\xda\xe0\x81\x3a\xc9\x0d\x36\xce\xa4\xc7\x1b\x76\x75\xf9\x66\x64\x66\xdb\xb7\x0c\x3f\xfc\x21\x19\xe9\x96\x2e\xdf\x23\x33\xd2\x9d\xf4\x1f\x98\x91\x1e\xd2\xd9\xb9\xfc\xa4\x8e\x72\x3f\xbb\xb3\xc4\xf3\xbf\x6e\x0d\x97\x58\x23\xdd\xa0\xab\x47\x66\xa4\x7b\xe7\xea\x1a\xfa\xbb\x8c\x54\xc4\xdb\xc3\x85\x04\x2c\xf8\xea\x64\x5e\xab\x6b\x76\x43\x37\x5b\xab\x9e\x58\x7b\x9b\x55\x0b\xef\xcd\xb7\x66\x41\xcf\x40\x9b\x26\x96\x3c\x33\xb0\x46\x99\x65\xbb\x38\xc2\xca\x62\x8b\x23\xeb\x3a\xf7\xd1\x64\x33\x8b\x67\x41\x54\x0b\x78\xbe\x9b\xed\xaf\x97\x74\xbd\x5b\x90\x2a\x35\x21\xa3\x3d\x3a\x23\xe1\x04\x43\x42\x37\x1d\x70\x12\x07\x55\x46\x91\x00\x07\x28\x45\x22\x08\x82\x93\x18\x56\x55\x00\xab\x12\x24\xc3\x30\x12\x06\x54\x82\x90\x00\x49\xb3\x40\xa1\x64\x54\x51\x39\x92\x56\x48\xc5\x7f\xe2\x0b\xbb\xe7\x44\x84\x7f\x1e\x33\x36\x11\x71\x28\x4a\x44\x97\x46\xfb\xbb\xa7\x7b\xcc\xbb\xca\xa8\xca\x16\x9b\xab\xe6\x54\xaa\xe0\x45\x9e\xe8\xf7\xde\x5a\x56\x65\xf6\x36\x40\x51\xb5\xc0\xda\xd5\x12\x33\x43\x85\xd6\xba\xdc\x7f\xe5\x07\x04\x7f\xc8\x43\xde\x27\x26\x0f\xf9\x9f\x1b\xe2\x60\xe5\x14\x5f\x6f\xb5\xce\x73\xee\x2d\x21\x9b\xfb\x78\x5f\x4d\x9b\x99\xa6\x29\xf2\x65\x5d\x6d\xb4\x06\x39\xb3\x3a\x59\x39\x5b\xb9\x43\x18\xf9\x46\xb6\x49\x61\xda\x54\xb1\xf3\x45\x90\x11\xfb\x6b\x94\x6a\xbf\xf6\x26\x7d\x74\xa0\x4d\x2d\x34\x9b\x69\x08\xa4\x08\xf2\x3d\xbc\x32\x93\x6d\x62\xb4\xae\xce\x74\x89\xec\xb4\xac\x5a\x35\x45\xee\x39\x33\xda\xf3\xdc\x73\x22\xf3\x31\xf6\x9e\xae\x30\xf5\xd7\x0c\x5a\x45\xcb\x85\xad\x33\x59\x8b\x98\x31\x44\xc1\x76\x61\x62\x9c\x58\xdc\xac\xaa\xd9\x6d\x9d\x72\x32\x82\x9c\xf5\x65\x24\x34\xc7\xaa\xcf\x87\xaf\xcc\xc9\x16\x5f\x2d\x94\x89\x04\x7f\xbe\x83\xbe\x68\x6d\x3b\x9d\x3b\xe8\xf3\xfc\x3f\x17\xcf\x42\x63\x6b\xe6\x76\x5d\xd4\xe7\xa3\x58\x31\x93\x74\x71\xef\x5c\xb8\xb6\xf0\x2c\x07\xf0\x5d\xa5\x8b\xff\x6a\x2c\x6d\x51\x02\xdf\xad\xe4\x9a\xd9\xe1\xfc\x03\xed\xad\xe9\x2c\x29\x31\xf2\x5c\xe0\xa8\x56\x67\x3d\xad\x2b\xc3\x72\x51\xca\xb4\x70\xad\xd3\xb3\xc5\x7a\x77\x85\x0d\x7b\x4e\x9e\x2c\x57\x38\x5e\xeb\x6c\xea\xb9\xfe\xa4\xa7\xe8\x8b\x79\x55\xc4\xe5\x2c\x65\xce\x9e\x05\x14\x7c\x64\x1f\xbe\xda\x57\x29\x94\x55\x71\x92\xc6\x71\x59\xc2\x69\x8a\x95\x58\x89\xa4\x65\x96\x54\x15\x4c\x56\x50\x15\x23\x24\x9a\x45\x39\x54\x02\x00\xb2\x94\xbb\xe4\x67\x25\x9a\x91\x55\x8c\x86\x8a\x4a\x31\xac\x7c\x7c\x44\xfb\x8e\xd8\x8a\x27\xc7\x56\x1c\x8d\x7e\x8e\x75\x7f\xf7\xf4\xb8\xcc\xbd\xb1\x35\xe6\xe4\x81\xff\xb9\xa1\x4f\x1e\x11\x5b\x79\xeb\x9d\xc1\xc1\xfa\x8d\x2d\xa1\x52\x15\x9f\x64\xcb\x5c\xae\x6e\x62\x6a\x77\xbd\x59\xac\xbb\xf3\x0a\xd7\xa2\xc4\x55\xeb\x15\xae\x07\xb2\xa9\xae\xea\xcf\xd8\xa2\x25\x96\xcb\xb0\x23\x16\x6b\x05\x43\x52\x8c\x7c\x05\xbe\x4f\xd7\x33\x42\x9d\x36\x1a\x1c\xb6\xd2\xaa\xfd\x01\xc9\x98\xb9\x5f\x2b\xb6\xde\x1b\xdb\xee\xf5\xe7\xda\xba\x3a\xb3\x1e\x19\x5b\x7f\x62\x3f\x3d\xb1\x93\xf2\x13\x63\x1b\xff\xa0\xd8\xca\x92\xc7\xf1\x11\x35\x5f\x5c\x6c\xad\xd0\x4b\x6e\x66\x97\x5e\xb3\x62\x61\xcb\x99\x4d\x5d\x6d\x7e\xbc\x8b\x03\xac\x56\x03\x72\xbe\xbc\x5d\x75\x61\x47\x42\x55\xc2\xce\x13\x95\x22\xf3\xb1\x72\x40\xb7\xd3\x6e\x0f\xa6\x1f\xad\x8f\xcc\xa2\x4f\x8c\x5a\xed\xf9\xfb\xa2\x56\x76\x08\x2a\xf7\xf1\xaa\x48\x64\x16\x33\x9e\xeb\x34\xff\xf0\xd8\x8a\x4b\x38\x64\x71\x45\x02\x92\x84\xe2\xa4\x84\x33\x00\x95\x09\x8c\x44\x65\xc0\x60\x0a\x0b\x64\x4e\x92\x19\x8c\x25\x30\x95\x53\x29\x40\x48\x0a\xcd\x41\x19\x10\x0a\xcb\xaa\x12\x0a\x65\x6a\x17\x5b\x89\xfb\x62\x6b\x62\x03\x85\x43\x09\x3c\x2e\xb6\x12\x38\xfb\x74\x7e\xf0\xef\xde\xd8\x9a\x0b\x4c\xea\x45\x6c\xbd\xa1\xa3\x1c\x11\x5b\x73\xe5\xa5\x81\x39\xd5\x42\x35\x4f\xf6\x36\x6b\x07\x55\x72\xd9\x9e\xa0\xd2\x8e\x44\x19\xa4\xb4\xad\x59\x05\x2d\xbb\x78\x36\x7a\xa3\xda\x6c\x23\x3b\x14\xa9\x8b\x2a\x3e\xdb\x38\x6f\x1b\xba\xa6\x50\xa3\x32\x29\x90\x39\x43\xb6\x55\x92\x16\xf8\x49\xa6\xd0\xee\x36\xec\x39\xab\x0e\x7f\xb1\xd8\x7a\x6f\x6c\xbb\xd7\x9f\xab\xe8\x94\xce\x3d\x30\xb6\xfe\xcc\xce\xf0\x8f\x88\xad\xb7\xc6\x36\xfe\x41\xb1\xf5\xd6\x1a\x66\x17\x5b\xb7\xd2\x42\x91\xda\x1b\x7d\x03\xf3\xb2\x5c\x55\x8a\xcd\xb5\xd1\x2a\x3e\x5b\xfd\xe7\x11\x2c\xb0\x6f\x95\x8d\xc9\xbf\xab\x8b\x5e\xbf\x53\xb6\x07\x55\x08\x4b\x6f\x03\x6e\x61\x4b\x43\x16\xbe\x15\x61\xbf\x0d\x33\x75\x9e\x1a\x54\x8b\xcf\xf5\x09\x5f\x6a\xb6\xa6\x46\x8e\x29\xbf\x16\xf1\xb4\xb1\x35\xf2\x65\xf6\xa7\x7f\x8f\x17\x53\xb8\xdd\x1f\xcb\x3d\xbe\xd6\xed\xda\xd7\xb1\x9c\x60\xf4\xde\xdf\xc3\xe7\x72\xa7\x2f\x89\x0b\x12\x44\x1a\xad\x52\x8d\x6f\x0d\x91\x8a\x30\x44\x3e\xeb\x4a\xd2\xfb\xe6\x83\xdf\x1f\xc4\x75\x00\x6b\x18\xe7\x61\x84\x13\xb9\x0f\xfc\x84\x76\xe0\xf7\xa6\x8f\x0f\x9c\x8d\x8f\x8f\x99\x8d\x4f\x9f\x27\x1b\x3f\x44\xba\x73\xb2\x61\xc2\xdd\xc4\x18\xd2\x15\x4b\xcd\xae\x80\x7c\x3e\x82\xbf\x9c\xbc\x58\xfd\xe5\xec\x35\xe8\x57\xaa\xe6\x31\xd3\x7a\xb5\xe0\x57\x4d\x6a\xc4\x53\xf7\x09\x4f\xb6\x3f\x56\xb2\x70\x22\x71\x92\xc6\xb0\x95\x5a\xf2\xc8\x87\x1a\x12\x1f\x1b\x78\xac\xf4\x51\x64\xe2\xe4\x8f\x65\x2d\x51\x03\xbe\x49\x4b\x5b\xcf\xda\xf7\x82\x94\xc4\x9c\x30\x48\xf7\x4e\x3f\x0f\xf4\x1c\x0b\x52\x17\x83\xce\xd0\x6d\x97\xc4\x02\x22\x39\x16\x84\xa7\xde\x15\xcd\x8d\xef\x63\xf7\xf3\xe3\xe3\x49\xc7\x51\x84\x5f\x4b\x87\xd7\x16\xdc\xcc\xce\x11\xc5\x29\x27\x67\xd5\xc0\x39\x3f\x3e\xf0\xcb\xc5\x1b\x06\xc3\x98\x9b\x00\x7b\x72\x0f\x67\xde\x8b\x16\x53\xb1\x15\x7c\x3d\x63\x18\x37\xfe\xcf\x3d\xdd\xc3\x8f\x8f\x21\x1d\x47\x81\x77\x3f\xbe\x5c\xbe\xe6\x31\xd4\xe5\xc7\xd0\xb5\x0d\xef\xfe\x0d\x9c\xee\xb2\x84\xcf\x70\x00\xdd\x29\xdb\xfb\x5f\x0c\x3e\xe3\xf8\x32\x6a\xe9\xca\xcb\xfe\xed\xc6\x51\xcc\x1e\xdf\x29\x77\x27\x9b\xba\x92\x9a\xc1\xe3\xeb\x5d\x5f\x42\x5f\xd3\x9c\xc0\xb4\xb9\x18\x2f\x1e\xc5\xf7\x0e\xd7\x29\xeb\x11\xa9\xea\x26\x49\xc2\x05\x70\x36\x8f\x13\x60\x87\x2b\xc2\xa6\x6f\x14\xe1\xfc\x5d\xbd\x97\x42\x98\x0b\xd7\x2a\x27\xe6\x4d\x32\xec\x98\x3f\xe2\xb8\x55\xf9\xf1\x8a\xb6\xf7\x6f\x60\x72\x43\xf5\xfd\xba\x3e\x47\x77\xca\xf2\xfe\x57\xe8\xce\x78\x0c\xe7\xe8\x54\xaf\x8f\x62\xeb\x02\x67\xba\xf0\x16\xc6\xa0\xe3\x4f\x89\x73\xcf\xb4\x1e\x71\xdc\x6e\x92\x49\xe6\xe7\x58\x8a\x4b\xe4\xf4\x05\xea\x77\x30\x7c\x89\x2c\xc0\xb9\x02\x03\x7c\x06\xde\xdc\x1e\xcf\xa0\xf7\x1a\xb3\xc7\xb0\xe7\xa1\x4a\xc5\xdc\xfe\xdd\x69\x91\xac\x05\xde\x09\x7f\x37\x7f\x01\x7c\x49\x4c\x5e\xbe\x92\x3e\x91\xd3\xc7\xe8\xf1\x0c\x5b\x5a\x2e\x13\xb5\xf9\x18\xde\x52\xf1\x14\xcf\xcb\x9e\x63\xc3\x34\xa7\xcb\xc5\x7d\x1c\x9d\xe3\x4a\x3d\xa3\xfb\x97\xde\x87\xf2\xb7\x00\xba\x35\xf6\xde\x6c\xfc\x08\x0e\x83\xd8\xd2\xf9\xed\x8e\xc1\x97\x8b\xf7\xf4\xbf\xec\xdf\xf7\x2d\x1b\xa6\xed\xbd\xe5\x3a\x42\x88\x07\xc4\xed\x1d\x9e\x24\x8e\xaf\x5c\x1d\xb9\x58\x1f\xa6\xdd\x2b\x14\x9b\xa8\x37\xff\x95\xb4\x93\xe0\xab\xda\xcc\xf9\x18\x28\x8a\x05\x6d\xfb\x5e\x85\x26\x12\x38\xab\xd3\xf6\x6f\xbd\x3b\xaf\x8c\x7c\xc0\x2b\x78\xbf\xdf\x0e\xe2\x70\x27\x73\x1c\xe2\x65\xe7\x08\x77\xab\x70\x17\x9f\xb3\x5d\xdc\x5e\x83\xc7\x62\x4d\x5c\xf6\xbb\x40\x09\x8c\xee\xd6\x50\x2e\xca\x83\x11\x3d\x88\xdb\x30\xd4\x89\xcb\xb7\xb4\x96\x7c\x82\xfc\xd1\xc6\x70\x86\xfa\x96\xf5\x66\x34\xba\xd9\xc2\xb4\xdc\xc0\xb7\x7b\x83\xf2\xe3\x15\x1d\xa4\x90\xcc\x7e\x60\x40\x7a\x61\x76\xa1\xe7\xc6\x4e\x45\x3a\xfd\x9f\xd0\x48\x94\xe4\x04\x36\xbd\x10\x0b\x0b\xae\x74\x73\x69\xff\x14\x69\xc2\x88\x25\x8a\x15\x36\x28\xbd\x7c\xfb\x26\xca\x0f\x93\x69\x4f\x20\x51\x8e\xc8\x6e\xd7\x39\xea\xe3\xaf\x73\xfd\x08\xd7\x0e\x62\x0f\x2d\x80\xaf\x75\xf0\x73\xa4\xe7\x25\xd4\x83\x3c\x3c\x8e\x44\x1a\x19\x12\xea\xba\x58\x62\x8f\x4b\x5f\x97\x88\x53\xf1\x9e\x9c\xc4\x4e\x8b\xed\x1f\x61\x36\x97\xf8\x6f\x2e\xf5\xfd\x37\x6c\xef\x13\xf9\xbe\xc3\x38\x96\x4c\x73\x7a\xb3\x96\x63\x70\x26\x2e\x11\x3e\x7f\x56\xa0\x03\x74\xc3\x46\xbe\xfe\xe7\x3f\xc8\x93\x6d\x1a\xca\xc9\x6e\xda\xd3\xb7\x6f\x0e\xdc\x38\x5f\xbe\xbc\x20\xd1\x80\xb2\xa9\xa4\x03\xf4\x7b\xf1\xd1\xa0\x92\xb9\xd4\x26\x4e\x2a\xf2\x67\xa0\xf1\x0c\x9c\x81\x06\x58\xf8\x82\xf4\x8b\x42\x4b\xf0\x8d\x0c\xf9\x8e\x10\x44\xea\x8d\x68\x5d\x19\xab\x27\xdb\x44\xf9\xca\xcf\xd9\x8e\xde\x91\x45\xf2\xf5\x96\x50\x2a\x88\x87\x2d\x20\xa4\x25\xe4\x85\x96\x20\x66\x85\x76\x60\x57\xc4\xbb\x5b\x17\x91\x6e\x23\xe7\x9a\x4c\x4b\x68\x77\x5a\xa5\x6c\xc7\xbd\x94\x13\xaa\x42\x47\x40\xb2\x7c\x3b\xcb\xe7\x84\x98\x7d\x34\xb7\xee\x38\xff\x3a\x0e\xb4\x62\x1e\xa7\x8c\x73\x3a\x09\x9b\x64\x51\x9c\x9c\xeb\x27\xd8\x36\x0a\x55\xd6\x6e\xa1\x9f\xb0\xa3\x18\xa9\x89\x5d\x29\xfb\x8f\xeb\xe1\x94\x8f\x30\x2d\xec\xbb\x04\xf1\x06\x73\x9d\x06\x2e\x9b\x4a\xff\xa0\x1a\x22\x98\x39\xd7\x45\x48\x1b\xec\xb1\x46\x11\x6c\x71\xfc\x0a\x0a\x89\x36\x8d\x8b\x1e\x52\x5a\xeb\x68\x98\xb6\xa3\x59\xb0\xdd\xac\x22\x0a\x70\x80\x6b\x62\x88\xb2\x9c\x2d\x10\xd9\x9c\x2d\x0c\xe8\x40\x4f\x86\xff\x17\x00\x00\xff\xff\xa7\xbe\xf9\xa3\xf7\xbe\x00\x00") - -func non_native_paymentHorizonSqlBytes() ([]byte, error) { - return bindataRead( - _non_native_paymentHorizonSql, - "non_native_payment-horizon.sql", - ) -} - -func non_native_paymentHorizonSql() (*asset, error) { - bytes, err := non_native_paymentHorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "non_native_payment-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8, 0x16, 0x54, 0x57, 0x6c, 0x93, 0xcd, 0x35, 0xf6, 0x64, 0xf4, 0xf4, 0x2, 0xe5, 0xf0, 0x9b, 0x2, 0x63, 0xd1, 0xde, 0x6b, 0xf9, 0xb0, 0x57, 0x28, 0xd, 0xea, 0x95, 0x74, 0x8a, 0x1e, 0x79}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa8, 0xe1, 0x6b, 0x91, 0x39, 0x1e, 0x7c, 0x99, 0xa5, 0xdc, 0xed, 0x7, 0x9b, 0x94, 0x22, 0x4, 0x4d, 0xb7, 0x73, 0xeb, 0xf1, 0xc3, 0xad, 0xd8, 0x30, 0x8, 0x32, 0x6b, 0xd9, 0x1e, 0x66, 0x7f}} return a, nil } @@ -1050,86 +452,6 @@ func operation_fee_stats_3HorizonSql() (*asset, error) { return a, nil } -var _order_booksCoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x67\x73\xea\xc8\xf6\x37\xfa\x7e\x7f\x0a\x6a\xde\xec\x39\xc5\x9e\x83\x5a\xad\x56\x98\xb9\x73\xaa\x24\x10\x51\xe4\xcc\xad\x5b\xbb\x5a\x1d\x88\x92\x40\x81\xf4\xd4\xf3\xdd\x6f\x11\x6c\x30\xc6\x36\x06\xec\xed\xf3\xff\x4f\x4f\x8d\x37\xa0\x66\xf5\xea\xdf\x0a\xbd\x56\x27\xfe\xf8\xe3\xdb\x1f\x7f\xc4\x2a\x5e\x10\xf6\x7d\x56\xaf\x5a\x31\x8a\x43\x6c\xe3\x80\xc5\x68\xe4\x4c\xbf\xfd\xf1\xc7\xb7\xcd\xf3\x54\xe4\x4c\x19\x8d\x71\xdf\x73\x0e\x15\xe6\xcc\x0f\x86\x9e\x1b\xd3\xfe\x2d\xff\x1b\x1c\xd5\xb2\x57\xb1\x69\xff\xe7\xe6\xeb\x27\x55\xbe\xd5\xcd\x46\x2c\x08\x71\xc8\x1c\xe6\x86\x3f\xc3\xa1\xc3\xbc\x28\x8c\xfd\x1d\x13\xfe\xda\x3e\x9a\x78\x64\xfc\xfc\xd3\x21\x9d\xb0\x9f\x43\xf7\x67\xe8\x63\x37\xc0\x24\x1c\x7a\xee\xcf\x80\x05\x1b\xba\xcf\x2b\x93\xc9\x70\x43\x9a\xb9\xc4\xa3\x43\xb7\x1f\xfb\x3b\xf6\xbd\xd9\x48\xab\xdf\xff\x7a\x68\xdb\xa5\xd8\xa7\x3f\x89\xe7\x72\xcf\x77\x86\x6e\xff\x67\x10\xfa\x43\xb7\x1f\xc4\xfe\x8e\x79\xee\x9e\xc6\x80\x91\xf1\x4f\x1e\xb9\xbb\xb6\x6c\x8f\x0e\xd9\xe6\x39\xc7\x93\x80\x3d\x69\xc6\x19\xba\x3f\x1d\x16\x04\xb8\xbf\xad\xb0\xc0\xbe\x3b\x74\xfb\xbb\x2a\xbe\xb7\xf8\x19\x30\x12\xf9\xc3\x70\xb5\x21\xce\xf9\x5f\x7b\x00\x18\xf6\xc9\xe0\xe7\x14\x87\x83\xd8\xdf\xb1\x69\x64\x4f\x86\xe4\xc7\x06\x31\x82\x43\x3c\xf1\xfa\x7f\x7d\xfb\x96\xaa\x95\x2b\xb1\x5c\x29\x65\x76\x62\xb9\x74\xcc\xec\xe4\xea\x8d\xfa\xbe\xe6\xbf\xa3\x69\xdf\xc7\x94\x0d\x86\x41\x68\xaf\x02\x36\xfb\xeb\xd5\xda\x01\x99\xce\x22\xcf\x8f\x9c\xe0\xb2\xca\xcc\x9d\x5f\x52\x73\xc2\x68\x9f\xf9\x97\xd4\xdc\xf0\xc9\x19\xbb\xb0\xe6\x05\xd5\x6c\x16\x84\x1e\xe7\xcc\x1f\xba\x94\x2d\x5f\xaf\x8b\x09\xf1\x22\x37\xb4\xf1\x04\xbb\x84\x05\x7f\x7d\xd3\xad\x86\x59\x8b\x35\x74\xc3\x32\x8f\x6a\x97\x4b\x56\xf7\x0c\xbc\x9e\xbf\x8a\x6d\xa9\x27\xcb\xa5\x7a\xa3\xa6\xe7\x4a\x8d\xa3\x2f\x3d\xad\xf8\x73\x3a\x66\xab\x4b\xe8\x87\xcb\xb7\x49\x3f\xd6\x79\x07\x55\xce\x2e\xe0\xf9\xb8\xda\xe5\xb4\xfd\x28\x08\x27\x43\x97\x05\xaf\x51\x7e\xac\x74\x31\xdd\x0d\x17\x6c\xeb\x0d\x5e\xa1\x7b\xa8\x74\x39\xdd\x47\x95\x7f\x8d\xee\x63\xa5\x8b\xe9\xee\xea\x0f\x5d\xee\xbd\x42\xf7\x50\xe9\x62\xba\xd3\xc8\x0e\x22\xfb\x15\x9a\xbb\x0a\xef\xa1\x37\x19\x06\x83\x59\xc4\xa2\xd7\x90\x3d\xae\x76\x39\x6d\xc6\xfc\xd7\x60\xdd\x3e\xbf\x98\xda\xd6\x8c\x5f\x23\xb7\xab\x70\x31\xbd\x9d\x57\x1a\x30\x4c\x5f\x27\xfb\xa4\xde\x07\x53\xdf\x7b\x4a\x36\xfb\x79\x61\x33\x36\x76\x5f\x21\x6e\x63\xf7\x62\x86\xf7\xde\xef\x35\x5e\x1f\xaa\xbc\x97\xe6\x26\x06\x78\x9b\xec\xa6\xd6\x9e\xf2\xb6\xee\x29\xe1\xb3\x2e\xf7\xf5\xba\x8f\xae\xf1\xad\x6a\x07\x47\xf7\x46\xcd\x47\xc7\xf5\x7a\xbd\x83\x23\x7a\xa3\xde\xa3\x63\x79\xb3\xde\x45\xfc\x1d\x1c\xca\xeb\xf5\x76\x4e\xe2\xcd\x3a\x8f\x26\xff\x46\xcd\x8d\x1d\xbf\x5e\x65\x67\x9b\xaf\xd7\x79\x62\x0a\xaf\x57\xb5\xb1\xfb\x7a\x85\x07\x55\xbd\xa8\xd6\x46\xf3\xf6\x15\xcd\x4e\xc3\x2c\xd5\x73\xe5\xd2\x71\xe5\xc9\xb4\x1f\xcc\x26\xfb\x1a\xf5\x64\xd6\x2c\xea\xcf\x68\xfd\xf5\x6d\x17\x1b\x97\xb0\xc3\xfe\x7c\xf8\x2c\xd6\x58\x4d\xd9\x9f\xfb\xaf\xfc\x15\xab\x93\x01\x73\xf0\x9f\xb1\x3f\xfe\x8a\x95\x17\x2e\xf3\xff\x8c\xfd\xb1\x0d\x99\x93\x35\x53\x6f\x98\x0f\x94\x1f\xe8\x7d\x7b\x42\xf1\xe9\xc3\x3d\xe1\x64\xb9\x58\x34\x4b\x8d\x57\x28\xef\x2a\xc4\xca\xa5\xa7\x04\x62\xb9\x7a\xec\xfb\x43\x7c\xfb\xf0\x59\xb0\x25\xf2\xfd\xb4\xe5\x87\xee\xef\xdb\x7c\x44\xe8\xcd\xfe\x3c\xc1\xb2\x54\x6e\x9c\xe0\x19\x6b\xe7\x1a\xd9\x47\xb6\x8e\x03\xda\x27\xcd\x1f\xa8\x9c\x30\xf2\x9e\xce\x3f\x23\xb2\x05\xa0\x62\x25\xa6\xfd\x4d\x16\x33\xf5\x3d\xc2\x68\xe4\xe3\x49\x6c\x82\xdd\x7e\x84\xfb\x6c\x0b\xc3\x85\x01\xf8\xa6\x1a\x65\x1c\x47\x93\xf0\x67\x88\xed\x09\x0b\xa6\x98\xb0\x4d\x36\xf1\xfd\xe4\xe9\x62\x18\x0e\x7e\x7a\x43\x7a\x94\x20\x3c\xe9\xec\xb1\x42\xee\xbb\xb9\x55\xdd\x43\x27\x1f\x14\xe0\x1c\xe0\x3b\x2d\x3f\x76\xba\xbf\x7f\x8b\xc5\x62\x0f\x9f\x0c\x69\x8c\x0c\xb0\x8f\x49\xc8\xfc\xd8\x1c\xfb\xab\xa1\xdb\xff\x1d\xc9\xff\xda\xca\xa6\xd4\xb4\xac\x1f\xdb\xda\x9b\x2f\xba\xd8\x61\x67\x2a\xab\xea\xb9\xca\x73\x3c\x89\xce\xd5\x06\x40\x3c\xad\x3e\xc1\x41\xe8\x78\x74\xc8\x87\x8c\xc6\x86\x6e\xc8\xfa\xcc\x7f\xac\xf2\xed\x5f\xa7\xb2\x7f\xb4\xe2\x1b\xb1\x08\xae\x02\x62\x9f\x08\xc4\xec\x61\x7f\xe8\x86\x27\x0f\x03\x36\x73\x23\xe7\xfc\x33\x37\x72\x82\xc8\x66\x6e\xe8\x6f\x52\xc1\xd3\x6e\xee\xea\x0c\x5d\x3e\xc1\x9b\x8c\x91\xb2\x20\x3c\xcf\xce\xae\xe2\xc0\x73\x18\xf5\x1c\x3c\x74\xcf\xd4\x92\xa4\x53\xa6\xc3\x81\xcf\x82\x81\x37\xa1\x41\x2c\x64\xcb\x53\xce\xf8\x04\xf7\x5f\xe2\xe8\x55\xd9\xec\x11\x89\x36\xad\x4e\x86\xd8\x1e\x4e\x86\xe1\xa6\x73\xbb\xfe\x3f\x40\x32\x99\xbc\xf6\x78\xd8\x77\x37\xb1\xd0\x86\xad\xdd\x27\x47\xd1\xc0\x63\x68\xb1\x07\xfd\xe7\x36\xad\x8e\x25\xb3\x66\xb2\x10\xfb\xfd\xf7\x07\x51\xfc\xe7\xef\x98\xf0\xaf\x7f\xbd\xf2\xed\x53\x06\x4f\xe9\x3c\xeb\xc0\x5b\x14\x9f\xc8\xf2\x84\xda\x53\x39\xbf\x45\xe9\x39\x3c\x27\xe4\xce\xe0\xb7\xa3\xf9\xdc\x30\x36\xe3\xdf\xb5\x36\xb1\x09\x19\x77\xe6\xe0\x7a\x94\x1d\xdb\xc2\x13\x1b\x78\xde\xe8\xd3\xf1\xf9\xda\xe6\x9f\x06\xc6\x3b\x46\xf6\x9f\xe1\x60\x70\xc4\x8c\xfc\x4c\xb7\xa7\x3e\x9b\xbf\x59\xc9\x8e\xc8\x98\x85\x93\x61\x10\xbe\x59\xf5\x31\xda\x7e\x50\xf7\xdd\xc7\x64\xe2\x05\x2c\x1c\x3a\x2f\x58\xfe\xd6\xb1\x9e\xb1\xad\x23\x99\x3f\x0d\xea\x1f\xe9\x9d\xc8\xfb\xd0\xce\x0b\xaa\xf3\x52\x6e\xf0\x94\xcc\xa1\x17\x2f\x69\xcb\x3e\xf8\xba\x56\x62\xfb\xc4\xeb\xf7\x47\x23\x67\xfe\x85\x1e\x74\x37\xf3\x42\x5f\xf2\xa0\x5b\x75\xc7\x41\xc0\xc2\x73\x78\xee\x6c\xf5\xc5\xc7\xd8\xd9\x98\xd5\x79\xd2\x53\x7f\x48\x98\xfb\x82\x13\xdb\x3e\x7c\xc9\xc3\x6d\x1f\xc6\xa8\x17\xd9\x13\xb6\xd1\x37\x32\xdc\xce\x48\xde\xd5\x8b\x1e\x49\x78\x9f\xb2\xee\xfa\x72\x22\xd7\x7d\x07\x5f\xd0\x8d\xfd\x37\xf7\x08\x9f\x7c\xf5\x01\xf7\x97\x14\x62\x17\xb0\x5f\xab\x0f\xbb\xb4\x7e\xa7\x0e\xc3\xe9\xb9\x81\x1f\x3d\xb3\x5c\xcf\x0f\x1f\xd1\x48\x99\x69\xbd\x69\x35\x62\xc2\xe9\xb0\xc9\x96\x21\x0e\x43\xe6\x4c\xc3\xd8\xc6\x2c\x82\x10\x3b\xd3\xd8\x26\x64\xf2\xa2\xdd\x27\xb1\xb5\xe7\xb2\xe7\x83\x2d\xc7\xc3\x49\xe4\x1f\x0d\xb5\x2f\xb5\x10\xae\xa6\xec\x6d\xa1\xec\xa6\x25\x8e\xe8\x3e\x77\xfb\x8f\x2d\xbe\x20\x9d\xfd\xcc\x86\xe7\x9f\x0a\xf5\xf7\x2d\x12\xff\x89\x09\xff\x8a\xe9\xa5\x54\x6c\xf7\xf6\xff\xf9\x3b\x26\x23\x04\xd1\xbf\xce\xca\xea\x38\x0d\xbb\x5a\x64\xc7\xb3\x3c\xc7\x3e\xf7\x05\x34\x76\x13\x6d\x1b\xab\x3b\xcb\xd0\x26\x77\xbc\x81\x95\x20\xb2\xf7\x4c\xf8\x2c\x78\x32\x00\xc1\xb3\x11\xa3\xcf\xf0\xa3\x2d\x3d\xe7\xe7\x28\xe7\xbd\x96\xa7\xa3\xc9\xba\x0b\x46\xc6\x1d\x63\xb3\x80\xbd\x36\xc2\x3c\xe7\xf3\x28\x87\xbf\x96\xcf\x03\x89\xcb\xf9\x7c\x36\xc8\x9d\x3c\x67\xee\x9c\x4d\xbc\x29\x7b\x63\x48\x3b\x34\x7d\xc3\x40\x74\x34\xdd\x71\x03\x04\x0f\xf3\xb5\xbf\x5f\x22\x87\x83\x16\xbd\x05\xc4\xec\x85\x81\xe6\x29\x08\x0f\xf3\xc0\x4f\x28\x9e\x02\xf1\xa4\xb5\x17\xc1\x38\xcc\x11\x5d\x0d\xc6\x61\x52\xfc\xf7\x83\xdd\x3e\x4d\xde\xce\xd8\xd4\x6b\xd6\x7d\x34\xc3\x75\x2d\x57\x47\x4b\x00\xd7\xa4\x5d\xdb\x11\xff\x15\x4f\x3d\x0c\x82\x88\xf9\x97\x93\x22\x1e\x3d\x9b\x9d\x3e\x83\x25\x9c\x0c\x9d\xe1\x0b\x11\xc5\xab\xb9\xe0\xaf\xcc\xaa\x8e\xb4\xf3\x68\x55\xe5\xaa\x2c\xea\xf8\xfb\xf7\xca\xa3\x8e\x68\x5e\x9f\xff\xbc\x46\x75\x27\xb4\x13\x4a\x7b\x49\xfe\xe7\xbc\xe1\x3d\x99\xee\xbd\x5a\xc9\x8f\xd7\xd0\x76\x6a\x1e\x2e\x9f\xb8\xe2\x0b\xf2\x8d\x53\x05\x5c\x6e\x57\x29\x5f\x7c\x4a\x06\xd8\xed\xb3\xb3\x89\xfd\x31\x38\xc7\xcb\x76\xd7\xfb\xea\xc3\xdc\xf9\xf5\x10\x7d\x32\x3e\xb6\x47\x57\xe7\xc0\x09\x97\x3e\x0b\xa2\xc9\x59\xef\x1e\x2e\x1d\xf6\x66\x3e\x77\x58\x62\xbd\x1e\xcf\x93\x75\x8b\x6b\x41\x3d\x59\x71\xfe\xfd\x22\xe0\xf6\x5f\x7a\x0d\xbd\x7d\x95\x73\x40\x5c\xa6\x76\x27\x2b\xdc\xd7\x00\x95\xda\x64\xd6\xdc\xf3\xdf\x98\x0c\x8d\xa5\xf4\x86\xfe\x06\x66\xaf\x93\x0c\xde\x4d\x2f\x57\xaa\x9b\xb5\x46\x2c\x57\x6a\x94\x0f\x93\x8a\x2d\xdd\x6a\x9a\xf5\xd8\xef\xdf\x33\x46\xad\xd2\xcd\xe6\x2c\x31\x99\x83\xe9\x52\x55\x32\x3a\x56\xba\x58\x4a\x59\xe9\x7c\xb3\x54\x69\x8a\xd9\x2e\xec\x15\xd3\xf5\x6c\xb9\xd4\x4c\x9a\x65\xbd\xde\x56\xaa\x49\xa5\xdc\x11\xb3\xdf\x7f\xc4\xb4\x6d\x51\x54\x6d\xff\x42\x10\x7e\xc4\xe0\x8f\x98\xf0\x63\x87\x72\xec\xfb\xf7\x1f\xb1\xef\x7a\x55\xd7\x75\xfd\xef\xbf\xbf\x6f\x1f\x88\x0f\xcf\x0e\x7f\xff\xf5\xd7\x5b\x1c\x26\x45\x58\x4d\x8b\xd9\xa6\x89\x44\xbd\xd8\x69\xa6\x9b\x59\xa8\x77\xf3\x7a\xa7\x93\xe9\x74\x5a\x62\x2b\xdb\xe9\x76\x6b\xb2\xd9\xed\x98\x8d\x4a\x21\xd5\xe9\xd5\xf5\xb6\xac\x74\xca\xd2\x23\x87\x9a\xbc\xe1\x4c\x45\xaa\xa6\x41\x09\x69\xf2\xeb\x2c\x4a\xd7\xb0\x68\x74\x32\xd5\x7c\xbb\x65\xb5\xcb\xdd\x6c\xda\x6a\x35\x0a\xed\x16\x4a\x67\xb2\x3a\xb4\x4a\xdd\xae\x98\xaf\x16\x8a\x4a\x59\xcf\xeb\x4d\xb3\x9a\x6e\xca\x56\x25\x59\x37\xd3\xad\x4e\xb9\x74\x60\x51\x13\x8f\x78\xdc\xf1\xfb\x0a\x8f\xf2\x8f\x18\x12\x01\x12\xf6\xe5\xb1\x43\x17\x60\xd9\x29\x64\xe4\x5a\x49\x2a\x97\x72\x66\x25\x59\x2c\xa5\x0d\x05\x8a\xba\x04\xe5\x1e\xaa\x94\x52\xf5\x9a\x95\x69\x17\x94\x8c\x61\x25\x8b\x55\x2b\x97\x2e\x4b\x75\xc5\xec\xb6\x5b\xcd\x1b\x18\xdd\xfc\x15\x84\x03\xab\x7b\x3e\x5f\xd0\xf2\xd3\xd9\xc1\x1b\x0c\xe6\xe5\x39\xbf\xf7\x5a\xcd\xd3\x79\xbf\x47\x30\x65\x48\x35\x95\x23\x28\x33\x26\xab\x14\xd8\xa2\x62\x23\x5b\xd5\xb8\x08\x31\x47\x10\x00\x5b\x41\xb2\x86\x45\x89\x63\x0e\x24\x01\x62\x2a\xd8\x48\xb4\x65\x08\x6d\x41\xb1\x99\xa6\x6d\xe0\x12\x6e\x2c\x1b\x1a\x48\x11\xb1\xc8\xa0\xc8\xb9\x28\xa9\x58\x50\x6c\x81\x29\x02\xa7\x80\xcb\x14\x02\x95\x00\x8e\x09\x15\x05\x5b\x26\x44\x50\x09\x84\x14\x29\x0a\x12\x91\xa6\xca\x2a\x10\x11\x06\xf2\xf7\x1f\x31\xb0\x95\xd3\x77\xfd\xcb\x16\xa3\x53\x18\x4a\xab\xc4\xaa\x5e\x30\x94\x94\x9b\xd2\xb2\xa2\xb0\x1c\x19\xf1\x40\xe8\x87\xc1\x22\xb7\x58\x83\x0e\xad\xb7\xbb\xd8\xc8\xe3\x74\x7f\x53\xdf\x2c\x49\x16\x5e\x4f\xc5\xea\x9b\x94\x7b\x7a\x07\x48\xdb\x6a\xc6\xf8\x13\x3a\x72\xd7\xf2\xfd\xc4\xe0\x5f\x50\x54\x0a\x39\x04\x5c\x22\x1a\x21\x1a\x43\x18\x32\x88\x01\x46\x08\x31\x26\x01\xa0\x10\x45\x85\xa2\x0d\xa0\x4a\x01\x55\x38\x96\x31\x92\x81\x20\x60\x19\x53\x4d\xd6\x00\x55\x31\xdf\x28\xd9\x3d\x94\x9d\x2b\x08\x71\x09\x8a\x08\x40\x19\x60\x89\x08\x80\x02\x2e\xd9\x5c\x13\x6d\xce\x04\x99\x0a\x94\x8b\x0a\xc2\x02\x91\x35\x8c\xa8\x00\x65\xa8\x22\x4d\x00\x00\xa9\x98\x50\x49\x80\xdf\xb7\x03\x08\x40\x48\x43\x8a\x26\x6b\x70\xaf\xb1\x49\xb1\xd2\x1b\x81\x52\x84\x3c\xc1\xce\x2b\x6d\xc9\x5d\x95\xe7\xcd\x65\x06\xb6\xa6\xde\x38\x3e\x4f\xeb\xe5\x30\x09\x0a\x62\x51\x31\x14\xb9\x97\xac\xab\xcd\x1a\x59\x99\x52\xbf\xd6\x0d\x7a\x3a\xb5\x15\x26\x45\xd9\x85\x8d\x75\xc4\x07\xe9\x9c\x49\x74\x90\xac\xd7\x44\xd8\x43\xde\x16\xe1\x4e\xa5\x55\xb4\xb6\xda\x91\x7b\xfc\xb3\x73\x71\xc1\xe1\xfd\x42\xaf\x54\xf7\xba\xb3\x1e\x82\x65\xdf\x35\x61\x45\xe7\xb6\x98\xb4\x9b\x32\x5d\x0c\xb3\x16\x9c\x26\x5c\xbb\xb8\x50\xda\xd3\x4e\x7e\xda\x2e\x44\x92\x5e\x8f\x46\xb0\xc5\xab\xab\x66\xa3\x8b\x1b\x7a\xb6\xa6\x59\xf1\xfa\x3c\x6e\x84\x29\x9e\x07\x5e\x11\xe3\x4e\xb5\x34\x1a\xf4\xf4\x5a\xbb\xb0\x6e\xea\x8b\x6d\x53\x67\x34\xda\x0c\xce\x69\xc5\x83\x46\xa7\x84\xfc\x07\xea\xde\xc7\x94\x0b\x35\x9a\x31\xc4\x6c\x89\x60\xa8\x21\xc8\x01\x14\x65\x85\x02\x24\x88\x50\xdc\x28\x2f\x14\xa8\x8a\x38\x10\x24\x19\x0b\x1a\x92\x14\x44\x44\xc2\xa8\xb6\xf3\x8a\x82\xad\x10\xb8\xd5\xe8\x7b\x58\x05\x95\x15\x85\x01\x99\xaa\x32\x15\xa9\x2d\x88\x88\xaa\x48\x96\x89\xa0\x30\x19\x2a\x36\xa2\x32\x53\x20\x67\xb6\x22\x09\x58\xe5\x70\xc3\x04\x84\x2a\xc6\x8a\x0d\x38\xb7\xb9\x28\x7e\xdf\x46\x4c\x8f\x1a\x2d\x3d\x68\xb4\x56\x59\x67\x85\x15\x59\xb1\xf6\x48\x92\x33\x93\x16\x43\x46\x5a\x65\xa9\xc2\xb2\x5c\xca\x76\xe2\xce\xb4\x6d\xea\xd3\x99\xd8\x1e\xd3\xe1\xbc\xb4\xaa\x52\xdf\x9e\x04\x58\xd0\xea\x53\x41\x09\xe7\x3d\x46\xab\x0b\xbd\x2f\x4f\x5b\x6d\x1e\x85\x9a\xa0\x58\xed\x66\xb2\x97\x4c\x2b\xc5\x2d\xc2\x5b\x8d\xee\x1f\x10\xef\xaf\x71\x7e\x2d\x75\x66\x00\x67\xd4\x60\xba\x02\x9e\xe9\x28\x33\x7d\x12\x71\x95\x57\x59\xe8\x40\x28\x14\xb9\xda\x73\x86\x34\x9e\x6a\xd3\x78\x3a\x1c\x84\x96\xad\x4f\xc4\x74\x2f\x30\xe2\x5d\x18\x52\xdb\xad\xc4\x43\x21\xe9\xa9\x71\xb1\x5a\x94\x66\x6e\xc0\xe3\x89\xdc\x96\x7e\xf1\x8c\xc6\x16\xd4\x73\x52\xff\x5f\xa0\xb1\x92\xaa\x71\x02\x25\x49\x05\x32\x55\x20\x20\x22\x95\x34\xa2\x8a\x02\xe7\x04\x23\x81\x40\x5b\xe4\xaa\x4d\x08\x97\x64\x01\x50\x24\xd9\x2a\x62\xb2\x22\x30\xa0\xca\xb2\x80\x54\x68\x6f\xb4\xed\x1e\x5a\x0f\x24\x81\xda\xb2\x48\x55\x0d\x69\xaa\x46\xa9\x6a\x63\x81\x6b\x4c\xc1\x1c\x70\xce\x14\x45\x63\x9a\x44\x05\x41\xc2\x14\xdb\x80\xa9\x80\x61\x8e\x34\x5b\x52\x30\xdf\xa8\x2e\xda\x44\xd5\xd2\x91\xc6\xa2\x07\x8d\x8d\x23\x16\x16\x3d\xd4\x4c\x98\xab\x9e\x96\xae\xe6\x56\xd3\xb6\xb9\x10\xd3\x6a\xb5\x36\x4b\xb6\x6a\x60\x11\x28\xbd\xcd\xb8\x9d\x84\x8b\x44\xc7\xcf\x4f\xe7\x43\x5f\x2e\xa2\x19\xe1\x84\xd4\x16\x1c\x8b\x28\xa5\x8a\xce\x58\x2b\xcc\x5a\x51\x7c\xc4\xa7\xa2\xb7\x6a\xa9\x9e\x21\x6d\x11\xde\x6a\xec\xe2\x80\xb8\x39\x2f\xa2\xb0\xa1\x4e\x04\xda\x30\x7b\x55\x2b\xa8\x64\x3c\xc7\xc8\x90\x46\x7e\x9c\xe9\xb5\x48\x63\x51\xb3\x52\x40\x18\x4a\x66\xc7\x56\x9b\x29\xbb\x1b\x0e\x5b\x4e\x1e\x76\xa3\x7e\x9c\xb1\x79\x36\x81\xa0\x3b\x6d\x54\x8d\x82\xe8\x67\xbd\xec\x4c\xeb\x85\x59\x7f\x51\x94\x5a\x5b\xca\xd5\x33\x1a\x5b\x2b\x9e\x93\xfa\xff\x02\x8d\xdd\x38\x43\x6c\x73\x11\x73\x89\x40\xa6\x28\x9c\xc8\x48\x96\x99\x28\x32\x59\x92\x15\x88\x21\xe6\x1a\x64\xb6\xc2\xa1\x2a\xab\xc4\x56\x00\x15\x25\x04\x14\x5b\xd6\x28\xe5\x50\x04\x1b\x6d\xbb\x87\xd6\x73\xdb\x66\x10\x6f\x6a\x0a\x58\x66\x0a\x11\x6c\x5b\x43\x04\xd8\xa2\x24\x12\x20\x69\x0c\x72\xa2\x60\x49\xc1\xb6\x28\x8b\x9a\x6d\xcb\x02\xe1\x40\x94\x20\x52\x01\x54\x35\x91\x6f\x68\xa0\x23\x8d\x95\x1f\x34\x56\x18\xf2\x85\x50\x37\xec\x4e\x91\x58\x4d\x37\x97\xab\x24\x0a\xcd\x62\x79\x15\xb7\xd6\x95\x5a\x3f\xdb\xaa\x4b\x1d\x87\x94\x33\x99\x6e\xba\xaf\x48\x53\xa3\x34\xaa\x46\xb4\x57\x65\xcd\xb0\x1c\x67\x5c\x48\x4e\xec\x5e\x5b\x72\xb2\x8d\xa0\x93\x0a\x07\x23\x1d\x38\x62\xa2\x5b\x2c\xb4\xba\x5b\x84\x37\x1a\x7b\xac\x36\xb9\x62\x4b\xa8\xae\xab\x35\xda\x74\x5c\x20\x2c\xda\x06\x98\xf5\xc2\xf8\x64\x22\x1b\x59\xa1\x31\x4a\x74\x4a\x7e\xd3\x92\x16\xd3\x99\x9f\x99\x2b\xf3\xd1\x6c\x15\xd7\xa7\x11\xd7\x23\xd4\x31\x82\xb1\x65\xd4\x59\x45\x65\x63\xe6\xe7\x87\x8e\xd2\x2d\xaa\xf5\x2a\xe8\x37\x86\xf5\xf8\xd6\x22\x9a\x67\x34\x16\x9f\xc6\xb1\x19\xfd\x7f\x87\xc6\x12\x09\xcb\x58\x91\x14\x28\x2a\x50\xc5\x90\x08\x58\xe3\x48\x83\x8c\x31\xaa\x61\xa8\x41\x89\x32\xaa\x49\x88\x23\x28\x69\xb2\x20\x42\x05\x73\x4d\xa1\x40\xc2\x40\x23\x22\x55\xf0\xd6\x3f\xde\x41\xeb\x19\xb1\x55\xc2\x90\xad\x4a\x9a\x8a\xa8\x46\x55\x51\x01\x00\x69\xb2\x28\x2a\x8c\x30\xc6\x45\xa8\x48\x9a\xcc\x55\x01\x50\x0a\x91\xbd\xf1\xac\x36\xa1\x2a\x85\x94\x48\x44\xc5\x9b\xa8\x40\x3e\xd2\x58\xe5\x41\x63\x97\xd3\xd6\x2c\x51\x98\x37\x52\x08\x26\x32\x2d\x47\x1a\xa2\x71\x6f\xed\xc9\xf1\x86\x0c\x55\x09\x17\xc3\xa5\x30\x6e\x76\xc2\x29\xe4\xc5\x41\x8f\x2f\x42\xbe\xea\xc1\x92\xa7\x22\xd4\xc8\xa4\xb2\x51\xca\x94\xa5\x5a\x36\xd7\x5a\x89\xa9\x96\xdb\x03\x56\x3b\x2a\x14\x9a\xa3\xb2\x42\xb6\x08\x6f\x35\xf6\x48\x89\xca\x02\xf4\xc7\xf5\x7a\x26\x97\x8b\x37\x1c\xaa\x0b\xbe\xda\x50\x68\xbd\x94\x6c\x63\xa7\x3b\x5e\x95\x27\xa9\x9e\x02\xfb\xd3\xc8\x5f\x35\x13\x41\x54\x44\xf6\x20\x3f\xa0\x6e\x37\xbf\x4c\xf7\xba\x43\x1e\x28\xf3\x1c\xac\xb7\xe3\x7a\x96\x96\x6c\x35\x55\x56\xc5\x52\x85\x34\x72\xde\x36\x2a\xe8\x9e\xd1\xd8\xd1\x69\x54\xb0\x35\x9e\xff\x76\x8d\x7d\x61\x5e\xe2\xcc\x96\x96\xf7\x4e\x48\xec\xb7\xb5\xdc\x63\x5a\x07\x3c\xa6\xfd\xdb\x39\x9b\xdd\xeb\x56\xab\x51\xdb\x77\x24\xb4\xfb\x9d\x9a\x6c\x2a\x5e\xca\x12\xac\x6a\x7c\xd1\xad\x27\xb5\x75\x67\xde\x69\x35\xe0\x72\x58\x19\x76\xa3\xba\x0d\x52\x73\xa7\x6a\x31\x75\xf3\x7d\x70\x34\xd3\x03\x36\x6f\x7f\xc4\x84\x7f\x83\xd3\x59\x8b\xdd\xb4\x10\x3a\xb1\xea\x67\xbd\xba\x7e\x56\x4d\xbe\xbd\x27\xc7\xa8\x80\xe3\x09\x2c\xb4\xeb\x1a\x12\x2e\xeb\xc4\xf5\xa2\x41\xf7\x15\x0d\x12\x9e\xca\x06\x6d\x44\x23\x9e\x48\x06\x80\x8f\x16\x8d\xf8\x41\xa2\xd9\x38\xcc\x9d\xce\xa1\x8f\x16\x0c\xbc\xaf\x60\xb4\xa7\x72\xd1\xb6\x26\x73\x52\x84\x0b\x3b\x75\xbd\x5c\xa4\x8f\x32\x99\x1f\x31\x71\xd7\x31\xf1\xc3\x2d\x06\x3c\x4e\x62\x36\xf3\xcd\xea\xe2\x86\x4e\x7c\x8a\x34\xe5\x8f\x43\x42\xfd\xf5\x40\xbc\x67\x28\x78\x13\x89\x1b\x16\x58\xee\xa5\xd7\xd7\x23\xf9\xb2\x2d\x7c\x60\xbf\xc1\xdd\x1c\xed\x3d\x3a\xfe\x6c\xdc\xfc\xc0\x9e\x2b\x5f\xa8\xe3\xa7\xa3\xd2\x07\x9a\x3c\x00\xbf\xde\xe6\xdf\x13\x63\xc8\x2f\x87\xc8\xcf\x37\xf9\xde\xb0\x0e\xf8\xe2\x2e\xd4\xdb\x68\x9e\x6e\x24\xbd\x81\xda\x0b\xdb\x40\x6f\xa0\xf8\xc2\x86\xcd\xf7\xe6\x19\x47\x9b\x36\x8f\x34\xb4\xdb\xb6\x4a\xd9\x52\xc6\xca\x48\x65\x98\x4c\xb5\x2a\x8d\xbc\x99\xd6\x33\xa5\xac\x51\xef\xb5\x1b\x35\x98\x91\x3a\xad\xbc\x9c\x6e\x75\x0b\x85\x56\xd5\x4a\x89\x69\x2b\xd9\xab\xa7\xdb\xc7\xa1\x9f\x95\x9e\x84\x65\x61\xb5\x26\x34\xa8\xca\x73\x67\x3c\xa8\x66\x30\x29\x06\xa2\x9b\xed\x45\x9d\x99\xbb\xc4\x52\x73\x16\xa4\x47\x42\xab\x7b\xb4\xc0\xb1\x5d\x6b\x49\x6e\x5f\x6e\x72\x47\xb3\x9f\xb7\x96\xb5\xf4\x3a\xd7\x18\x1a\xe9\xe1\x72\x6c\x80\x79\xa8\x0c\x25\x6e\x84\x5e\x6a\x12\x37\x9b\xfd\xda\x22\xd5\xcc\xe7\xb3\x36\x75\x9d\x6d\xe2\x69\x10\xad\xb9\x08\xb7\xdf\xef\x3f\xfe\x31\xb6\x44\x17\x8f\xef\x53\xba\xae\x25\x8f\x52\x53\x43\x77\x8b\xc2\x12\x0e\x5b\x64\x49\xea\x6b\xb9\x8e\x23\xb9\xe6\x89\x7a\x7a\xe9\xe1\x45\x76\x36\x9a\x9b\xb6\x4e\x98\x33\xf7\x26\x46\xbb\xbf\xad\x5e\x36\x66\xb6\x30\x59\x56\x3a\xeb\xba\xde\xc6\xb3\x4a\x3e\xbd\x14\x6b\x8e\x1b\xf4\x41\x46\x95\x8a\xea\x32\x45\xf1\x30\x3f\x87\x85\xb8\x92\x43\x54\xcf\xad\xe4\x34\x74\x56\x09\x3f\x6c\xa5\xed\x2a\x2e\x47\x8b\x19\xea\x56\x3b\xcd\x6a\x33\x18\x8f\x13\x6c\x68\xf8\xa6\xef\xf9\x46\xf5\xef\xbf\x4f\xa7\x40\xee\x2c\x1a\x78\x93\x68\x8a\x4f\x45\x93\xd2\x61\xde\x10\xc3\xa8\xbd\xf4\x1b\xa0\xe0\x36\x22\x51\x9b\x20\x90\xd2\x93\xa9\xd9\xa4\xd5\x8b\xcb\x10\x36\x82\xb0\x57\xcd\x8f\x73\x9d\x60\xf1\x28\x9a\x48\x7f\x5a\xde\x0d\xbd\xd3\xed\x96\xa8\xe9\x0d\x32\x93\x92\x3f\x73\xbd\x49\x25\x5f\xe6\xcd\xb0\x04\x78\x90\x5a\xca\x79\xd1\xad\xc0\x64\x93\x46\xed\x46\xb6\xa1\x77\xd5\x1c\x8a\x07\x62\xbc\xed\x11\xbd\x92\x1a\x44\x34\xc4\x96\x17\xcf\x27\x7b\xb4\x16\xad\x06\x91\x53\x4f\x50\x38\x1e\xcc\x33\xbd\x64\xff\xc3\xa1\x97\x6e\x82\xbe\x7a\x02\xbd\xc1\x02\xc7\x89\x17\xe6\xde\xda\x99\x2e\xb5\xe5\x32\x6b\x68\xbe\x3d\xae\xac\x31\x6e\x08\xb3\x69\x5b\x91\x4b\x71\x17\x8f\xf2\x9d\x55\x3f\x7b\xb0\x8a\xf9\xad\xd0\x0f\xb3\x41\xd8\x34\xd3\xab\x76\xc2\x11\x05\xd2\x4b\x0f\x07\x41\xa1\x33\x93\xc7\x5e\xb7\x97\x62\xd6\xa0\x37\x43\xeb\xb6\xd7\xc9\x0f\x9d\x16\x33\x8c\xfc\x20\x31\x85\xdd\x4c\x75\x95\xac\x74\x60\x30\x5f\xba\x48\x9b\xf7\xf3\xcd\xa9\xe5\x54\xcd\x50\xe9\x94\x2d\x89\x7a\xcd\x62\x3b\xa5\x7f\x38\xf4\xe8\x26\xe8\x9b\x27\xd0\xa7\x86\x63\x53\x2c\x25\x11\x98\x18\xa8\x2e\x28\x08\x25\xaa\x85\x56\x38\xb1\x87\x5d\x5a\x5e\x92\xb2\x98\x29\xa6\xda\xb6\xad\xf5\x17\xd3\xd6\x01\xfa\xc5\xad\xd0\x43\x77\x3e\xf7\x67\x5a\x22\x57\xf7\xca\x0b\x39\x1c\x5a\x5c\x64\xd5\x78\x90\x76\x2c\x2c\x94\x5a\x51\x65\xce\xa4\x84\xd5\x86\x02\xcb\x67\x79\x96\x4c\x51\xa7\x25\xd7\xe7\x9d\x38\x4e\x0c\x14\xb3\xef\x55\x74\x47\x4f\xba\xa6\x4a\xcd\xac\xb9\x2a\xf8\x60\xaa\xb9\x25\x9d\xea\x1f\x0f\xbd\x7c\x13\xf4\xdd\x53\xad\x9f\x24\x92\x20\x91\x77\x89\x38\x5a\xbb\x93\x62\xb7\xc8\xa4\x62\xc3\x1f\x98\x64\xd0\xb1\xba\xa5\x36\x75\x9b\x21\x96\xbc\x69\xbd\xa8\x84\x07\x87\xb3\xbc\x15\xfa\xbe\xa5\x35\x47\xeb\x8a\x37\x59\xb4\xba\x75\xbf\xe0\xb7\xd6\x4a\x62\x9a\x50\xfb\x66\x6d\xdd\x59\x0c\xf2\x23\x2d\x59\x04\x62\x9e\x55\x93\xb3\x7a\x96\x24\x84\x56\x65\xb4\xcc\x2c\x87\x8a\xdc\xa0\xb5\xbe\x57\xf0\x9a\x46\xb4\x2e\x99\xb2\xba\x8a\x26\xf1\xec\x2a\x6f\x85\x25\x82\x53\xc6\xde\xe1\xbc\x3c\xb0\x9f\x3b\x86\x70\xc5\xc0\xfe\x70\x14\xe1\x51\x98\x82\xa8\x40\x28\x11\x45\x51\x35\xa4\x40\xa0\x00\x91\x70\x2c\x69\xd8\xb6\xb1\x24\xab\x54\x15\x80\x02\x30\xc0\x44\x50\x30\x86\x36\x91\x64\x22\x28\x80\x69\x98\x63\x11\x09\x48\x56\x8f\x85\xba\xf5\x4a\xe6\xf6\x65\xd0\x6e\x0b\x4a\xc3\x2a\x2d\xc5\x65\x6a\x16\xc7\xf5\xb4\xde\x9b\x2e\x56\x6b\x4c\xa8\x83\xd8\x8c\xa7\xfd\x41\x7d\xb6\x68\x57\x6a\xad\xe1\xce\x14\x5e\xeb\xfc\xf9\x63\x07\xef\xee\xfc\xe1\xe8\xc1\x63\xe7\x27\x38\x08\xb7\x87\x1a\xe9\xfe\x70\xd1\x49\xd9\xc4\xc6\x37\x2f\x2f\x9c\x5a\xd4\x19\x3e\xf6\x26\x86\x7d\x32\x18\xce\xf7\x0f\x4f\xf9\xf8\x3f\xdb\xfd\xab\xbf\xed\xaf\x1c\xfb\xed\xcf\x18\xd8\xed\x68\xfd\x2d\x60\xfe\x9c\xf9\xbf\xfd\x19\xfb\x6d\x0e\xc0\xbf\xc1\xbf\x85\xdf\xf6\x0f\x48\xe4\xfb\xcc\x0d\xad\x6d\xd7\x7e\xfb\x33\x26\x3f\xfd\xdc\xd8\x9e\x3b\x0d\x7e\xfb\x33\xf6\xff\x7e\x7b\x68\xe8\xff\x7c\x3b\x6e\x76\x5b\x73\x43\x98\x01\x8c\x54\x0a\x05\x48\x24\x45\x12\xa9\xc0\xa8\x24\x4a\x22\xc2\x00\x09\x10\x4a\x22\x66\x22\x91\x05\x8a\x37\xff\x09\x40\x63\x8c\xda\x44\xe6\x2a\x10\x34\xa6\xaa\x22\x82\xf6\x9e\xa3\x47\xba\x2e\x5b\x86\xbf\xfd\x79\xd2\xda\xae\x33\x9b\xbe\xff\xf6\x67\x4c\x78\xf2\xe8\xff\x9e\x7c\x3f\x70\xf1\x74\xc3\x17\x55\x55\xa2\x22\x51\xa5\x48\x86\x44\xc4\x00\x33\xdb\xe6\xdc\x16\x6d\x4a\xa1\xa6\x71\x6a\xdb\x0a\x95\x20\x94\xb1\xc0\x24\xac\xda\x4c\x14\x91\x62\x8b\x02\xe7\x98\x21\x2e\x10\xfc\xdb\xb7\x33\x2d\xbc\x80\x81\x4a\x64\x85\x41\x9b\x69\x40\x83\xb2\x60\xab\x00\x6b\x14\x10\x0d\x6a\x10\x49\x8c\x42\x8c\x11\x20\x50\xc6\xaa\x62\xab\x4c\x96\xa9\x2c\x00\x26\x21\x49\x80\x32\x94\x30\xe7\x80\xbc\x1f\x03\xf0\xe3\xf9\x33\x2f\x0a\xa7\x51\x78\xdf\xbe\xbf\x86\xf0\xe9\xc4\xcd\x7b\xcb\x7b\x10\xbe\xb9\xad\x0f\xd2\xb2\x7f\x30\xf8\x07\x83\x7f\x30\xf8\x07\x83\x7f\x30\xf8\x07\x83\x7f\x30\xf8\x07\x83\x0f\xc4\x60\xfb\xea\xff\xfb\xf6\x7f\x2f\x49\x1a\x1e\x2e\x2a\xde\xdd\x82\x76\xda\x87\x5d\xd2\x00\x84\x4b\x28\xb9\x2c\x5c\x78\xfe\x78\x8a\x83\x60\x3a\xf0\x71\xc0\xce\x50\x6a\xb0\x20\x8c\xd5\x53\xe9\x58\x69\x57\x39\xf6\x57\xac\xce\xa6\x21\x73\x6c\xe6\xc7\x44\x01\xa0\x4b\x1a\xe2\x9e\x4f\x58\x40\xa6\x9e\xbb\xc1\x7e\x82\x23\x97\x0c\x4e\x1b\xda\xde\x32\x76\x09\xb1\x5d\xca\xb6\x3f\xc5\x17\x9c\xef\xff\x3e\x69\x0a\x87\xce\x56\x9c\x3f\x4e\x73\xa8\x83\xec\x7f\x1b\xe0\x4d\x2a\xb4\x6d\xfd\xdb\x91\xb4\x7f\xe3\x8c\x5d\x56\xd1\xc1\xcb\x70\x19\x0c\xd7\x17\x56\xf7\xd9\x36\x71\x7b\xa3\xf2\x65\xaa\xb0\xc9\x63\x03\x32\xdd\x5e\xf4\x73\xae\x3c\xae\xf1\x6c\x67\xa0\x92\xcb\x9e\xdd\x08\x8b\x01\xcc\xda\x66\xd9\x47\xd3\x5c\xd3\x70\xdc\x94\x55\x9a\x2e\x45\x7b\x22\x4f\xd5\x76\x94\x2e\xf8\x46\x57\x4b\xb7\xad\xc3\x34\xc9\x76\x37\xa1\xbe\xc8\xaf\x4b\x45\x2a\x4d\x3a\xc5\x8e\x19\xc4\xc7\x8e\x1f\x8d\x71\xa9\x6f\x10\x9c\x09\x0c\xd9\x53\x96\x99\x45\x36\x3b\xf5\xe5\x7c\xb5\xe5\x3d\xce\x08\xe4\x07\x37\x4e\xd3\x5c\x33\xa3\x60\xe8\xab\xec\x50\xcd\x75\xca\xd3\x42\x2f\xd4\x1c\x38\x76\xa8\x66\x95\x5a\x44\x9b\xb4\x82\x45\xa9\x93\x12\xf4\x62\x5c\x2e\x76\x9d\xa4\xe3\x45\x24\x63\xb1\xa0\xef\x4c\x7b\x6a\x09\xd6\xba\x11\x28\xd6\x96\xf3\x7e\x3f\x9f\x08\xb3\x26\x1b\xba\x45\x77\x54\xee\xa9\xa9\xb4\x3f\x1f\x16\x93\x8f\x33\x1c\xc9\xee\x8d\x7b\xed\x8c\x6b\xa6\xc1\xaa\xc5\x81\x34\x4f\xa6\xd7\xb3\xba\x63\xf3\x5e\x88\xf2\x2e\xaf\xaf\x5b\x9d\x4a\xaf\x65\x17\x53\xad\x85\xa6\xa7\x2a\xd1\x28\x93\xef\x4f\x67\x96\x6b\x0c\xa1\x9f\xcb\xcf\xda\x3c\x45\x85\xb6\x15\x36\x4c\x62\x4b\xb9\x24\x57\x6a\xcb\xac\x37\x5d\xe7\xa5\xb5\xc3\xf5\x25\x56\xa4\x91\x3e\xde\xb2\x33\x5a\x39\x4e\xb3\x9c\xf2\x13\x25\xec\x75\x73\xcd\x70\xe8\x87\xe3\x72\xbd\xeb\xad\xc4\x9c\x52\x5e\xad\x67\x2d\xab\x9e\xb1\xc5\xd4\x6c\x51\x6f\x16\x1b\xcd\x5c\x2f\x35\x6d\xf6\xd1\xa8\x1c\x39\x7d\x5f\x6f\xa2\x60\x5e\xf3\x82\x9a\xc0\x1c\x98\x2f\x18\xf9\xb9\xab\x8f\x83\x51\x71\x9c\xbc\x55\xdf\xfa\x8f\xf2\x5f\xdc\xba\xb7\x71\xa7\x8f\xef\xd3\xdf\x6a\x2e\x99\x68\xe5\xd4\xb5\x9c\x27\xe9\xb6\x39\x5b\xcd\x00\x89\x27\x64\x9e\xc8\x19\x26\x01\x6a\xae\xde\x4d\x54\x47\x25\x3a\xec\x8c\xf5\xd9\x78\x00\x2b\x5a\xba\x21\xa9\xb5\xa0\x1b\xc5\xc7\xb0\xd9\x2d\x24\x67\x69\xdd\x0e\xd6\xb5\xf2\xbc\xe8\x4f\xf9\x40\x1d\xd6\x95\x46\x27\xd3\x5f\x6c\xa7\x31\x8d\xcc\xa4\xed\xab\x33\xad\x58\x71\xb9\xda\x6b\xdb\x43\xcb\xa9\xb9\xe5\x91\x8f\x2a\x3e\x5f\x0f\xbc\x15\xcc\xd6\x6b\x35\x26\xba\x54\x5d\x99\x07\x3c\x32\xc8\xcb\x87\x2d\xea\x76\xcb\x2d\xda\x9b\x85\x9d\x69\x23\x6b\x84\x36\xe9\x0a\x4e\xd2\xe1\xc4\xc8\x15\xcc\x7e\xdb\x9d\xcc\xd3\xb9\x01\xd6\xb7\x7b\x29\xf5\xa7\x67\x98\xf4\x13\xfd\xdb\x96\xed\x3a\x8e\xd1\x6a\x95\x76\x86\xa6\x27\x41\x64\xd0\xac\xd7\x88\xfa\xc5\x79\x35\x4c\x29\xc6\x20\x67\xc1\x12\xd3\x68\xab\xc2\x33\xb9\x78\x7e\x88\xf2\xf3\x66\x39\xde\xd3\x43\x65\x6b\xaf\xe9\x64\xcb\xdc\xef\x7b\xb6\xda\x52\x5a\x60\x83\xb2\xac\xaf\xb4\xa4\x50\x09\x32\x66\x7f\x4e\x80\x02\x40\x53\x53\xbb\x23\xc9\xb1\xc6\x8e\x56\x55\xd0\x38\x09\x77\x8b\x0f\x93\xaa\x85\x76\xdf\x5c\x1d\x66\x10\x4f\x4b\xfa\xb1\x3f\xd5\xb2\x59\x19\x97\x13\xe1\xac\x21\x8d\xab\xc6\xba\x34\x69\x94\xd9\xba\x17\x0e\x57\x76\x64\x8e\x35\xa7\xe8\x2c\x33\x23\x6b\xe2\x64\x23\xd6\x56\xab\x61\xb3\x2e\xe5\x41\x19\xb6\x07\x2b\xa9\x54\x18\xa8\xf3\x85\xe3\xb9\x85\x2a\x88\x8a\xd3\x64\x31\xb1\xee\xd6\xd6\x91\x33\xaa\x9b\x91\xbe\xdb\x38\xed\xcf\x4a\xb2\xc5\xca\xb8\x3f\x5a\x16\x71\xb3\xa2\xc9\xc6\x9a\x07\x1a\x13\x88\xe7\x97\x7a\x9d\xb5\xd1\xce\x8f\xd3\x5e\x41\x19\xcf\xc7\x8b\xc3\xa9\xc1\xc3\x92\xa2\x7e\xea\xaf\xb6\xe5\x56\x7c\xae\x5b\x93\xdf\xb6\x34\x4d\x85\xc2\x11\x3f\xe9\x73\xc8\xea\xf8\xb1\x3f\xba\xeb\xe1\x55\xd7\x4f\xcb\x65\x73\x50\xe8\xce\xa4\x60\x20\x74\xa6\xa2\x65\x56\xf4\x64\x6e\xe3\x10\x6c\xd3\x75\x69\x57\xee\x37\x53\x19\x54\x13\xc7\xc9\xf8\x9c\xa7\x3b\xe3\x61\x26\x11\x67\x95\xa5\x98\x9a\x64\x84\x6c\x69\xbe\x98\xf6\x0b\x7d\x34\x28\xe7\x83\x96\x59\x5c\x05\x59\x63\xb7\x4e\x15\x79\xd0\x0b\x25\x34\x4b\x56\xcc\xe5\xb4\x9a\x80\x5e\xb6\x14\x5f\x03\xa5\xb6\x1a\x06\x60\xc2\x8b\xe9\xae\x53\x6d\xf7\xfd\xa8\x1e\x6f\x6c\x75\xfc\xb0\xb8\x65\x9c\x42\x7b\xd0\x8f\xd4\xf6\xef\x75\x7b\x1e\x6e\xd4\x77\x5d\x71\x02\xef\x88\x1f\xef\x1c\xb2\xc6\x63\x7f\xcc\x94\x67\x14\x11\x86\xab\x62\x20\x96\xd6\x13\x7b\xe2\x36\x1b\x93\x5c\x5c\x53\x87\x8b\xba\xb5\x31\xe3\x76\xaf\x35\x1a\x39\x8d\x5c\x99\xcd\xd3\x5d\x39\x64\x8e\x9f\x0d\xc6\x92\x05\xd2\xba\x0d\xa6\xfd\x66\xca\x83\xf5\xd5\x42\xc9\x94\x15\x50\x12\xc6\xdc\xac\xe6\x72\xfd\x91\xbe\xdb\x1c\x5d\x90\x47\x6c\x08\x47\x8e\x97\x53\x1b\x99\x49\x2a\xc1\xfa\x04\x2a\x95\x4e\x98\x2d\x14\xd6\xed\x96\xba\x68\x0d\x7b\x06\x4e\x46\xc8\x42\xfb\xbd\xd5\xfa\x83\x2b\xc8\x9e\xf2\x7b\x78\xb9\xf3\x07\xd5\x49\x2d\x75\x1d\x3e\xe9\x56\x53\xa8\x5e\xa7\xef\x83\xc1\x32\xd3\x3f\xf0\x93\x3c\xeb\x0f\x32\x8f\xfd\xa9\xa6\x82\xac\xb5\x4e\x25\x94\x59\x22\x34\x70\x3a\x8c\xcf\x2d\x35\x98\xbb\xd2\x0a\xce\x80\x9e\x5e\x16\x73\xdd\xa8\xa1\x96\x8a\x6b\x3b\x58\xb4\x82\x64\x93\x58\x39\x50\x9d\x8c\x97\x46\xb5\x1d\x1a\x4a\x7d\xe4\xa5\xaa\xc5\x90\xca\x34\x6f\xe2\xb2\x18\x4d\x9d\x4a\x47\xab\xc0\xca\x5e\xc9\x6c\xa7\xef\x80\x96\x48\xfb\xa8\x05\x9c\x19\x60\x93\x22\xc9\x80\x70\x39\xaa\x77\x0b\x3d\x6d\x61\xf6\xbd\xba\x81\x59\x5b\x6d\x0e\xd3\xde\x89\x3f\xe8\x9e\xf0\xfb\xcc\x1f\x5c\x8f\xcf\xf5\xfa\xae\x1b\xbc\x33\xd8\x7d\x53\x3d\x91\xf7\x51\x39\xf4\x47\x9f\xa4\x27\x96\x2c\x00\xa3\x39\x4f\x4e\x16\x61\x32\x2d\x16\x27\x82\x1a\x65\x8b\x2b\xc1\xaf\x26\x96\xfd\x08\x97\x2a\xfd\x8c\x8a\xcb\x7d\x3b\x4c\xb8\xda\x5a\x84\xf2\x32\x1d\xf7\xc7\x2e\x25\xf6\x28\x68\x24\x39\xb2\x8a\x32\x5d\x83\x56\x67\x90\x4a\xaa\x41\x28\xca\x2b\x6b\xaf\x4f\x46\x84\x93\x76\xab\xd3\x13\x53\x93\x4e\x1b\xfb\x2d\xb9\xb9\x5c\xd8\x6d\x98\x29\xe5\xfb\x53\x17\xea\xf5\xe4\x20\x97\x9e\x22\x7b\x59\xcf\x6d\x57\xdc\x8e\xfd\xc1\xe9\xba\xe9\xa9\x3f\xb8\xde\x5f\xde\xa0\xef\x07\x7f\x90\x3e\x95\xf7\xa1\x18\x8f\xfd\x31\x53\x0d\x31\x27\xa8\xe3\x78\x02\x39\x19\x27\x1c\xe7\x33\x4b\xb2\x40\x61\x6e\x25\xd7\x17\x52\xdd\x6e\x57\x2b\xb3\x55\xa3\xde\x64\xc2\x18\x2a\xfd\x4e\x3a\xd9\x82\xe5\xd6\x7c\x52\x4c\xfb\x15\x35\x59\xd2\xbc\xc0\x8a\x72\xee\xa4\x84\xda\xd1\xac\x5e\xcf\x17\x93\x15\x2d\x8b\x23\xb7\x59\x3c\xe0\x61\xea\xd7\xc6\x97\x0f\x2b\xc0\x2f\xac\xc4\xbd\x70\xd5\xd6\x7b\x57\xe2\x8e\xae\xdb\xba\xcb\x96\xc7\x1f\xb1\x5b\x6e\x0b\xf9\xde\xac\xa7\xbe\xff\x88\x69\xa2\x08\xa1\x22\x0a\x50\x56\x91\xa4\x28\x48\x15\x94\xe7\x1b\xdb\x76\xdb\x56\x45\xf1\x71\x6f\xdb\x49\x6e\x76\xb6\x67\xb7\x9d\xd2\xf8\xbc\x9e\x1d\x75\xeb\x47\xec\x8b\xf7\xcc\x68\x24\x5f\xea\x99\x7c\x56\x66\x47\x9f\x5e\xd2\xb3\x5f\xa7\x8d\xef\xeb\xd9\xc9\x7d\x30\xaf\x98\xee\x4b\x57\x88\xbd\xdb\x78\x8f\xaf\x11\x3b\xcc\x45\xd9\x50\x53\x99\x2d\x61\xa6\x6a\x0a\x92\xa1\x88\x64\x09\x12\x4c\x45\x40\x34\x89\x01\x68\x73\x22\x28\x92\x0d\x45\xc8\x98\x0a\x19\x90\x80\xcd\x15\x01\x60\x44\x35\x41\xe2\xc0\xde\xdf\xf1\xf0\x64\x9a\xa2\x78\x32\x4c\x19\xc3\x84\x21\x58\x42\x3e\xb3\x0a\x07\x8b\x12\x98\x74\x05\xbc\x9a\x7a\x40\x2b\x65\x97\x73\x2b\xb9\x2a\xa3\xd0\x30\x49\xb2\x35\x5f\xa4\xb5\x05\xec\x87\x7e\xd9\xed\x9d\x1d\xe3\x5e\x1c\x42\x4e\x8a\xf9\x38\xec\x5c\xdb\x7e\x37\x11\x27\x27\xf4\x2e\x6c\xff\xf9\x46\x9c\xf3\xb8\x8b\x18\x53\x6e\x0b\x1a\xe4\xa2\x0a\x14\x9b\x4a\x48\xc2\x9a\x02\xb1\x2d\x49\x80\x48\x18\x52\x85\x68\x92\x4a\x08\xc4\xa2\xa2\x70\x62\x0b\x82\x6c\x33\xae\x20\x51\xb5\xb9\x26\x69\x7b\xdc\xc5\xe7\xb8\xff\xa2\x7e\xdf\x0b\x77\x55\x3a\x7c\xff\x34\xf3\xbd\x07\xee\x50\x01\x48\xb6\x19\xb4\x35\x02\x14\x01\x0b\x00\x51\xdb\x96\x21\x67\x8a\x2d\xaa\xa2\x0d\xa0\xa0\x51\x49\x51\x64\x51\xe6\xaa\x44\x88\x4c\x34\x9b\x60\x0a\x6c\x2e\xda\x36\xd4\x44\x65\x87\x3b\xbc\x3b\xee\xd7\xf6\xfb\x5e\xb8\x2b\xcd\xc3\xf7\xcf\x9e\xa0\xbf\x11\x77\x9b\x4a\xaa\x4c\x6d\x4a\x05\x91\x4a\xb2\xa0\x02\x45\x56\x36\x8a\x8e\xb0\xc2\x34\x2a\x33\x55\x46\x04\x8b\x1a\xb1\x25\xc0\x64\x91\x2a\x18\x73\x45\xc0\x22\x67\x0c\xd9\x50\xa6\x6c\x7f\xf3\xc6\xab\xb8\xbf\x33\x5d\x35\x68\x8e\x46\xfb\x3c\xf5\x34\x5d\xbd\x1c\xf7\xd4\x6d\xed\x33\x72\x5d\xfb\x97\xe2\xae\x02\x00\x34\x91\x40\x55\x96\x20\xe5\x0a\x24\x02\x40\x18\x61\x40\x15\xc5\x56\x05\x91\x72\x2e\x20\x2a\x71\x24\x70\x22\x53\x20\xa8\x40\xc6\x58\x41\x44\xc0\x32\x10\x34\xae\xe1\x1d\xee\x6f\xf8\x99\xf7\xa5\x05\x77\xc7\xfd\x9a\xf6\x3f\x1a\x77\x28\x29\xb2\x4d\x64\x49\x43\x32\x94\x54\x95\xf0\xed\x65\x33\xa2\xa2\x09\x18\x6b\x44\x92\x64\x49\x03\xaa\x2a\x42\xd1\x06\x48\xa0\xa2\x2a\x4b\x14\x40\xce\x34\x8e\x09\x43\x92\x20\xef\x70\x3f\xe3\x67\x7e\x91\xbe\x9d\xc3\xfd\x9a\xf6\x89\xf4\xb1\xb8\x2b\x94\xab\x48\x21\x22\x24\x0a\xe5\xcc\xd6\x14\x89\x2a\x04\x6a\x48\x56\x14\x24\xab\x08\xab\x8c\x72\xac\x4a\x9a\x6c\xdb\x8a\x0a\x38\x85\x92\x4c\x54\x26\x0a\x22\xe2\x98\x6a\x36\xdf\xe1\x2e\xbd\x8a\xfb\x67\xea\xdb\x39\xdc\xaf\x69\xff\xa3\x71\x67\x58\x93\x90\x04\x65\x0c\x6d\x19\x09\x8c\x63\x55\x15\x64\xc8\x14\xa8\x20\xa0\x12\x0e\x34\x51\xa5\x1a\x96\x20\x05\xd8\xc6\x90\x11\x59\x95\x94\x4d\x00\x29\x0b\x36\x54\x20\x64\xfb\x7b\x6a\x5e\xf7\xef\xef\x4c\xef\xf3\xcd\x64\x7c\xdf\xa9\xeb\x71\x37\x6f\x6b\xbf\xfc\xc1\x7e\x46\x02\x32\x96\x21\x81\x1c\x48\x1a\x40\x50\x91\x35\x95\x50\x5b\xe6\x9a\x0a\x04\x4d\x61\x54\x65\x92\x44\xb0\xa8\x50\x91\x6a\x9b\x18\x92\x0a\x36\x96\x55\x15\x8a\xcc\xe6\x1a\x45\x68\x87\xfb\x19\xff\xfe\x8b\xfa\x7d\x2f\xdc\x8b\x1f\xed\x67\x20\x55\x91\x26\x4b\x0a\xd7\xb8\x28\x71\x19\x2b\x92\xcd\x89\x06\x65\xca\x81\xa6\x89\x48\xe6\xb2\x42\x55\x24\x12\x49\x11\x89\x28\x13\x6c\x33\xac\x42\x9b\x11\x51\xb4\x55\x28\xd2\x1d\xee\x67\xfc\xfb\x2f\xea\xf7\xbd\x70\xb7\x9a\x1f\x8b\x3b\x22\x4c\x83\x22\x40\x80\x41\xaa\x29\x22\x93\x18\x47\x22\xb0\x05\x2c\x13\x19\x72\xa0\x40\x8c\xa8\x02\x09\x14\x25\xa0\xa8\x50\xd1\x08\x20\x2a\x45\xa2\x0d\x34\x05\x40\x46\xd4\x1d\xee\x67\xfc\xfb\x2f\xea\xf7\xbd\x70\xcf\x2f\x3e\x16\x77\x2e\x89\x04\x73\xc1\x66\x12\xc6\xaa\xac\x70\x8e\x55\x28\x72\x95\x6b\x22\xb2\x15\x44\xb8\xaa\xd9\x48\x06\x08\x89\xaa\x00\x64\x66\x2b\x0c\x4b\x0a\x16\x55\x44\x45\x0d\x68\x58\x26\xfb\x5b\x9d\xee\x1e\xcf\x1c\x8f\x6b\x47\x27\x0e\x2f\xc7\x3d\x7d\x5b\xfb\x76\xf3\xba\xf6\x2f\xc5\x5d\xe6\xc4\x26\xdc\x26\x94\x09\x98\xca\x4c\xa4\x58\x52\x80\x28\x43\x28\x49\x00\x6a\xaa\x44\x15\x08\x15\xca\x39\xd6\x08\x82\x0a\xb7\x05\x24\x6b\x5c\x95\x54\x1b\x52\x91\xcb\x5c\xdc\xe1\x7e\xc6\xbf\xdf\x31\x9e\xb8\x15\xf7\x6b\xda\xff\x68\xdc\x29\xa1\x00\x01\x4e\x31\x14\x25\x51\x03\x22\x15\x39\x53\x00\x13\x80\x0a\xb8\x2a\xa8\x82\xcc\x05\x15\x60\x19\x10\x2e\x29\x92\xac\x2a\xd0\x16\x19\x01\xc8\xb6\x81\x8d\x19\xd4\xd0\x0e\xf7\x33\xfe\xfd\x17\xe9\xdb\x39\xdc\xaf\x69\xbf\xb7\xf8\x58\xdc\x99\x06\x54\x44\x00\xa1\x00\xaa\x04\x11\x80\x64\x11\x21\x08\x08\xb7\x91\xa8\x10\x24\xd8\x9a\xad\x4a\x1c\x53\x8c\x01\x96\x10\x51\x24\x8d\x2b\x98\x6f\x06\x62\xca\x88\x84\x84\x1d\xee\x67\xfc\xfb\x2f\xd2\xb7\x73\xb8\x5f\xd3\xfe\x47\xe3\xce\x35\xa8\x4a\xc0\x56\x65\xc9\x26\x12\x61\x90\x52\x42\x44\x26\x62\x5b\x82\x8a\x6a\x73\x2a\x49\x90\x11\x2a\x33\xc6\x54\x64\x6b\x88\xca\x50\xa2\x18\x11\x41\xb0\x05\x42\x65\x59\xd9\xe1\x8e\xee\xae\xef\xd7\xf6\xfb\x1c\xee\xd7\xb4\xdf\x2d\x7e\x2c\xee\x84\x02\x91\xa9\x1a\xb5\x35\x26\x48\x48\x02\x0c\x2a\x44\xd1\x64\x66\x63\xcc\x00\x50\x29\x94\x39\xdc\x44\xea\x84\x42\x4a\x99\x84\x99\xb0\xd1\x76\x5b\x91\x55\xbe\x71\x48\x7c\x87\xbb\x7c\x77\x7d\xbf\x27\xee\xd7\xb4\xff\xd1\xb8\xab\x22\xb3\x6d\x9b\x22\x41\xb4\x99\xa8\x21\x55\x10\x55\x55\xe1\x5c\x40\x1c\x11\xa2\xaa\x2a\x91\x20\x52\x30\x24\x32\x51\x01\x97\x6d\x40\x6d\x4a\x19\x60\x90\xdb\x50\x53\x35\x1b\xec\xef\xfc\xbb\x3b\xee\xc7\xfd\x6e\xea\x67\xb7\xff\x3c\xed\xf7\x76\x9d\x85\xb5\xe7\x75\x7e\xba\xc4\xfe\xec\x3b\x47\xdb\x1b\xde\xb9\x1d\x2d\x2d\x0c\x44\x84\xfb\x8f\x72\xd8\x6d\x0f\x6a\x9e\xb6\x72\xb2\x35\x61\xa3\x07\x06\xc2\x5a\x3e\xf1\x02\x57\x97\xe6\x5a\x02\x60\x1c\x0b\xb6\x20\x8a\x32\xd3\x64\x40\x21\xa0\x5c\x91\xb8\x24\xaa\xa2\xa6\x8a\xb6\x24\x48\xaa\x2d\xda\x9a\x2a\x69\x0c\x43\xae\x30\x41\xc4\x12\x50\x11\x00\x54\xd9\xc4\x45\x3b\x59\x9d\x89\x81\xee\xe8\x1b\x2e\x97\xd5\x51\x29\xc5\x4d\x7a\xba\xe7\xe4\xb9\xac\xde\xb9\x55\xe8\x7a\x59\x1d\x17\x28\xd5\x40\xff\x0a\x59\x61\x09\x20\x1b\x68\x22\x87\x0a\x14\x30\x64\x1c\x40\x4d\x80\x88\xc3\xdd\x21\x4c\x20\x60\x89\x61\x59\xe3\x1c\x01\x09\x71\x88\x15\x59\x06\x88\x00\xac\x8a\x92\x20\x50\xa2\xed\x64\x75\x26\x6e\xca\x1c\xb1\x7e\x85\x5d\xb5\xbd\x6b\x64\xf5\x29\x76\xd5\xac\x5e\x21\xab\x7b\xd8\x15\xa2\x36\xe5\x14\x62\x5b\x03\x5c\xc2\x48\xc4\x00\xd8\x58\x13\x89\x2c\x40\x28\xd9\x04\x0b\x54\xc2\x98\x6a\x08\x70\x06\x29\x40\x9a\x0d\x15\x88\x39\xb6\x31\x90\xa1\xc8\xf0\xde\x07\x9e\x89\xb5\x8e\x64\x75\x8d\x5d\x5d\x27\xab\xa3\xf2\x71\x76\x75\x95\xac\x8e\xcb\xb5\x76\x45\x39\xe1\x02\xd0\x98\x4a\x14\x20\x6a\x82\x20\xa9\x94\x50\x81\x49\x1c\x0b\x00\xcb\x54\x11\x15\x15\xaa\xb2\x0d\x99\x8c\x15\x0d\xda\x12\x41\x90\x52\x45\x41\x80\x50\x51\xd5\xd8\xde\xae\xce\xc4\x67\x37\xca\xaa\x65\x7e\x59\x59\x95\xf5\x5f\x24\x2b\x49\x85\xa2\xa6\x72\x49\xc0\x8a\xc6\x25\x99\xcb\xaa\x44\x24\x40\x45\x91\x4a\x54\x13\x44\x0e\x28\xe4\xcc\x46\x10\xdb\x0c\x21\x04\x28\xc4\x54\xd6\x28\x51\xa1\x28\x09\xaa\x80\xf6\xe3\xd5\x99\x98\xee\x46\x1f\x78\x9d\xac\x3e\xc5\x07\x5e\x25\xab\xb7\x7d\xe0\x8b\x7b\x6a\xee\xb3\xa1\xe6\xa3\x77\xd3\x64\x2c\x35\x5b\x9d\x57\xc7\x76\x41\xcc\xea\xb0\xdd\x1a\xd5\xfc\x82\x33\xea\x08\x02\xcf\xa8\x81\x95\x53\x1c\xc1\xac\x2d\xf2\xed\x84\xde\x81\xfa\xe3\x26\xe1\x73\x68\x3d\xdf\x34\xfa\xce\x4d\x96\xc9\x96\x3e\x3f\xbe\xa6\xdc\xd8\xed\x1e\xd8\x0a\xa2\x3b\xaa\x92\x4a\x43\xcc\xa0\xc1\xcc\x35\x9c\x7e\x26\xc3\xfa\x5a\x5e\x9d\x48\x04\x98\x6e\x73\xb2\x1c\x4f\xcc\x49\x56\x0b\x66\x3d\x5f\xd0\x14\x90\x96\xcb\x56\x9b\xb3\x84\x23\x8d\xa7\xe9\x30\x17\x0f\x72\xc2\x10\xcc\xac\x61\x88\x74\x21\xbf\x6a\xbb\xf6\xa0\x6b\xb5\x91\x97\xfa\xfe\x23\xf6\x5d\x5c\x3b\xe5\xb0\x20\xe7\x69\xbb\x38\xe9\xa5\x56\x61\x8e\x4c\xca\xa6\x92\xd0\xa9\x55\x1c\x29\x5e\x65\x50\xb5\xb5\x45\x66\x22\x56\x1b\xcb\xc3\x55\x33\xaf\x60\xf0\xa0\x18\x87\x8b\xf3\x4e\x0f\xf5\x6c\xb5\xfc\x1e\xbb\x39\xae\xdd\x4d\xa1\xdf\x61\x37\x47\xba\xd1\x36\xfc\x1b\xda\xd7\xf5\x5f\xb7\xea\x76\x2e\x7b\xfb\xe8\xad\x53\xd7\x1b\xd9\x69\x4a\xfa\x4c\xe1\xde\x77\x32\x45\xef\xd4\xb3\xf6\xf1\x91\x84\x23\x23\x4b\x66\xb1\x36\xa8\x2c\xbb\x71\xb4\x90\x12\xc9\x3e\xe8\xb7\x45\x83\xe6\x73\x4d\x21\xe9\x24\xfb\xee\x68\xd4\xa9\xae\x97\x20\x35\x62\xf9\x75\x43\x9a\x0e\x3a\x29\xab\x3c\x64\x51\x2f\xef\x35\x3a\xf2\x68\x3e\xa0\xeb\x22\x1e\x70\x36\xad\x4c\xa6\x55\x33\xb7\x54\xc5\x36\xea\xa8\xd3\x5c\x66\x63\x08\x85\x19\x54\x92\x0d\xd5\x4b\x2b\x20\x5d\x9f\x12\x39\x34\xb3\xa6\xa7\xf1\x7c\xbd\xb8\x90\xf3\x30\x61\xe9\x99\xf9\x9c\xd6\x87\x89\x49\xfe\x2b\x19\xd9\xad\x4a\x7e\xa3\x91\x4d\xbd\x82\xd4\xb0\xee\x69\x64\x9f\xb8\x75\xe9\x22\x23\xbb\xf3\x3e\xb9\xeb\x8d\x2c\x75\xc2\xfd\x33\x85\x7b\xdf\x71\x8f\xd7\x8c\x2c\x95\x9f\x73\x29\xb7\xc8\x21\xbf\xda\x80\xfa\x54\x48\xf4\xea\xe9\x59\xbc\xb6\x68\x81\xbc\xcc\xf4\x5e\x0b\x41\x1a\xa7\x52\xdc\xc0\x93\xf8\x1c\xae\xe9\x20\x17\xa9\x62\x2e\xc1\x72\x7e\x79\x90\xca\x56\xbb\x7e\x18\x55\x7a\xe9\x45\x8e\x98\x12\x8f\x52\x23\xa3\xdf\xca\xf5\x23\xb3\xbc\x31\x84\xd2\xb2\xe5\x4b\x8a\x6b\x90\x82\xde\x12\x95\x6e\x02\x29\x85\x64\xd0\x48\xd2\x1a\xec\x3a\x71\x73\x9d\x59\xd9\xab\x30\x93\x28\x28\xe5\xfa\x61\xfb\xe5\x2f\x37\xb2\x9b\x95\xfc\x46\x23\xf3\xac\x24\x1e\xdf\x73\x24\xfb\xcc\x7d\x6a\x17\x19\xd9\x9d\x37\x45\x5e\x7f\xa6\xec\x95\x70\x71\x77\xe6\xf5\xaa\x33\x77\x30\xf1\x58\x0e\xf4\x8e\xce\x80\x19\xda\xd8\x29\xb4\xc5\x19\x9c\x2b\x55\xbe\x52\x2b\x45\x36\x36\x6d\xd0\x68\xe4\xd0\x70\x39\x1b\xe7\x04\xc3\xeb\x77\xfc\x72\xa8\xf4\xcb\x40\x16\xab\xf6\x78\x20\xd2\x7a\xa3\xc9\x59\xca\x9b\x13\xa1\xa2\x63\x3e\x48\x75\x96\xe1\xa0\xa5\x4f\x02\x2b\x1a\x4d\x0c\x67\x35\x32\xf4\xee\xd6\x28\xe6\xcd\x41\x38\xa7\x7a\x58\xeb\xf7\x3b\xbd\xe5\xb2\xd0\x76\x65\x6a\x7b\x3d\xe2\x4d\x57\x42\xd6\xb1\x3a\xb3\x39\x29\x58\x71\x64\x97\xc2\xc3\xbe\xdb\xf3\x06\xd7\x7d\x2a\xd4\x27\x06\xb7\xc5\x6e\xe7\xa0\x8e\x12\xa4\x2b\x46\x7d\xb7\x7c\x90\xc5\x0b\xe5\x85\xcd\xd8\x4f\x0c\xfe\x2e\xed\xbf\xe0\x6c\x2e\x69\xff\xde\x0b\xfa\x57\x6d\x40\xbf\x77\xfb\xcf\xf1\x78\xdd\xe1\xa4\x0e\x75\xde\xd9\xfe\x2d\xe7\x0b\x77\xa2\x38\x18\xdc\xe2\x14\xbf\x8b\x1c\xd2\x9d\x77\x0b\x5f\x7f\xe8\xfd\x13\x1d\xd2\xd1\x21\xf5\xca\xa4\xaf\x64\xac\x41\xbe\x2f\x2c\x95\xd1\x54\x5f\x00\x73\x21\x67\xc5\x4e\x5a\x5e\xd5\x72\x0e\xcf\xe7\x16\x69\xbe\x14\xb4\x52\x34\x44\x76\x58\xce\xeb\x69\xb6\x48\xeb\x25\x5e\xc6\xba\xa1\xa6\xab\xbd\x09\x9a\x42\x1d\xf5\xe1\x58\x4e\x65\x53\xc3\x3e\x6f\x96\x9a\x29\x20\xf7\xc9\xd6\x69\xf4\x6b\x99\xfa\x42\xea\xa5\x20\xac\xe8\x69\xdc\x1e\x00\x18\xe9\x16\x57\xd3\xa0\xd2\xac\x2c\x43\x33\x97\x9e\x4d\xc1\xa2\xd0\xad\xba\xe8\x10\x9c\xdc\xcb\x21\x5d\x11\x21\xdd\xd5\x21\xdd\xd8\xfe\x1d\x1d\xd2\xad\x3b\x5d\x6e\x75\x48\x77\x69\xff\x06\x87\xf4\xce\xf6\x7f\xbd\x43\xba\xf3\x36\xfa\xeb\x23\xa4\x57\x72\xfd\x9d\x43\xba\xea\x14\xf2\x5b\x11\x92\x59\x30\xe6\x71\x75\x6d\x01\x36\x5d\x2c\x93\xf1\x20\x3f\x30\xbb\x15\xc7\x1e\x59\x5a\xa7\x4e\x3a\x21\x09\xbd\x62\x8e\xb2\x10\xd1\x41\x7f\xac\x74\xf3\xad\xfc\x5a\x77\x6b\xf5\x7e\xb7\x31\xe7\x2b\x2f\x97\x2f\xe4\x69\xd5\xe9\xc8\x72\x34\x10\xbd\xb8\x9f\xd1\x0a\x72\x3e\xe7\xf4\x77\x11\x52\x29\x8b\xd5\x5e\xbe\x35\xaa\xe7\xd6\x8b\x3c\xed\xbb\xe3\xc2\x8c\xd4\x32\xf5\xda\x30\x59\xf4\xd3\x55\xc1\xeb\x95\xcc\x84\xcc\xfd\x72\xeb\xc8\xe1\x7c\x91\x08\xc9\x38\xd0\x3f\x2e\x9f\x16\x21\x25\xaf\x6f\xff\x43\xb6\x3c\xbe\xc3\x21\xdc\x3b\x42\x7a\xef\xd6\x10\x5d\xbf\x31\x42\xba\xfe\x46\x96\x9d\x28\x6e\x75\x48\x77\x3e\x5f\x72\x7d\x84\xf4\x89\x0e\xe9\x28\x42\x32\xb2\x89\xa2\x25\xc7\x6b\xeb\xf6\x2c\x4a\x57\x06\x6a\xdf\x4a\x8b\xb5\xa8\xb7\xee\x86\xa3\xd1\xb4\xc2\xb2\xf3\x84\x47\xb5\xa2\x22\x2d\x27\x4d\x41\xeb\x60\x09\x23\x06\x4a\x83\x62\x58\xac\xd7\x72\x9e\x95\x0b\xfb\xc0\xc4\xa9\xb6\xa9\xad\xe7\x61\x96\x4f\x5a\xed\x9c\x8e\xeb\x8b\xea\xd6\x69\x70\x3e\xe8\x2c\x46\x4b\x2d\xe1\x4f\x04\xa0\x96\x5b\x3d\xd8\xf2\xda\x9e\xc2\x67\xe6\xc4\x0f\xa5\xac\x56\xca\xac\xca\xb9\x64\x47\x16\xed\xc3\xaf\x4f\x7e\x91\x08\xe9\x66\x87\x74\x63\xfb\x77\x74\x48\x77\xd9\x0b\x7c\x83\x43\xfa\xec\xbd\xc8\xba\x7e\x63\x84\xf4\xab\x1d\xd2\x9d\x0f\x5e\xbd\xb3\x13\x97\xa5\x6c\xbb\x4e\xbd\x73\xd4\xbd\xe1\x9e\xa7\x68\x5c\x86\xc7\x12\xcf\x3e\xf2\x5b\xcd\x26\x7a\xe3\x75\x2d\xc1\x92\x42\x5a\x59\x56\xb4\xb5\x3e\x65\xd9\x79\x31\xab\xb8\x33\x16\xae\x71\x9d\x76\x07\x6a\x3b\xbb\xf2\x17\x8b\xb9\x6d\xba\x4b\x29\x65\xcb\xfd\xb5\xd0\xf7\xdd\x5a\xde\xc8\xd7\x65\xb9\xdc\xb3\x33\x4e\x72\xac\xac\xd6\x59\x47\x4d\x8d\xf3\x8a\x9d\x97\xaa\x7a\x73\xeb\x64\xe4\x69\xad\x59\x9a\x95\xc5\x66\x39\xee\xf5\x33\x15\xb7\x04\x32\x45\xb5\x57\x28\x39\xe3\x4a\x6d\x26\x57\x02\x6c\x12\x53\x6d\x27\xd7\x64\xfd\xd6\x9c\xd3\x89\x12\xbc\xe0\xc0\x8e\x01\xbf\x62\x39\x77\x48\x0e\xb2\x7b\xa1\xbc\xee\x40\xee\xd8\xfe\x75\x29\xde\xe9\x61\x86\x2f\x37\xe7\xa2\x3f\x3d\xdc\xf3\xc9\xfc\x25\xe5\xaa\x42\x6f\x77\x30\x77\x3e\x61\x78\xbd\x83\x79\x25\xe2\xd9\x75\xea\x9d\xa3\xe8\xc7\x38\x98\x74\x3a\x63\x65\xd2\xe9\x8e\x6d\xa6\x6a\x74\x2c\xb2\xf4\xaa\xaa\x37\x4a\xd3\x6c\x34\x2b\x27\x82\xb4\x3f\x9d\x05\x4b\xa7\x54\x5a\x64\x70\xbc\x68\x0d\xed\x52\x35\x6f\xa5\x3a\x6d\xcc\x93\x52\x5b\x2d\x14\x0b\xd5\xc4\xc0\x14\x8a\x42\xc3\x5a\xf6\x58\x94\x28\xab\x61\xd7\x35\xa2\xc5\x42\xdf\x3a\x81\x6a\x7b\x3a\x5a\x24\xd2\xf9\x74\x83\x4e\x47\xa5\x70\xee\x18\xc9\x8e\xd2\x45\xe6\x6a\xc8\xeb\x62\xd5\xf0\x05\x6b\xea\xf5\x57\x72\xc2\x6d\x1d\x16\x4d\xbe\x88\x83\xb9\xca\xc0\xef\xd8\xfe\xf3\x88\xe0\x82\xf6\xcf\x3b\x98\xaf\x34\x87\xa2\x9f\x71\x30\x9f\xc7\xdf\x9d\x1c\xcc\x9d\x8f\xd2\x5e\xef\x60\x5e\x59\x6a\xbe\x2e\x82\xb9\xfe\x66\xba\xd3\xad\x87\x47\x0e\x26\x55\x1b\x0e\x8a\x3d\x73\xd8\xb3\xa7\x0d\x09\x25\x82\x6c\x30\x99\xe1\x82\xa7\xd9\xb5\xb5\xd5\x58\xce\x0b\xdd\x38\x55\x06\xcb\x65\x76\x35\x9f\x4c\x7b\xf5\x64\x51\xb5\xca\x3d\x99\xfb\x1d\x5b\x5f\xb0\x64\xe0\x39\xa5\x29\x93\x24\xad\x97\xca\x9a\xc3\x45\x43\xf4\xaa\x8d\xf6\xa8\xd3\xdf\xfd\x9a\x28\xd1\x06\xbd\x5e\x36\xce\xf3\x15\xec\xd6\x13\xab\x86\xcd\x33\xbd\x7c\x5b\x73\xc5\xb4\x65\x92\x20\x1f\xcc\xe2\xb3\xd4\x3c\xc8\xf9\xfd\x95\xf0\xc8\xd9\x17\x71\x30\x57\x19\xf8\x1d\xdb\x3f\xd5\x9d\x8b\xda\xbf\x53\x04\xf3\x81\x29\x88\x7e\x8f\x08\xe6\x6a\xfe\x52\x7c\x90\x6d\xdf\xee\x60\xee\x7c\x66\xfc\x7a\x07\x73\x8a\xec\xcd\x11\xcc\x87\x38\x98\xdc\x38\x1e\x06\xde\xd8\x58\x47\xa0\x1f\x4d\xb8\xdd\x1d\x99\x80\xa9\x3e\x18\x83\xe9\x70\x65\xf4\x24\x6a\xb8\x42\xa4\xcc\x5b\xfd\x9e\x9c\x88\xcf\x86\xe6\x64\xa9\x0c\x0a\xcc\x37\xac\x11\x28\x8c\xec\x5e\xa6\xda\xa1\x98\x6b\x42\x17\x77\xcd\x61\x5e\xb5\xed\x95\x60\x76\xfb\xde\xd6\x09\x74\xca\xe3\x55\xba\x26\x69\x93\x15\x2a\x6b\xf5\xcc\x62\x1a\x74\x13\xe9\xf5\x94\x12\xb5\x38\x4e\x4b\x25\xb4\x20\xa3\x56\x61\x39\x59\x56\x82\x03\x6f\x5f\xc4\xc1\x5c\x65\xe0\x77\x6c\xff\x85\x86\x3e\x25\x82\xf9\x64\x07\xf3\x79\xfc\xdd\xc9\xc1\xdc\xf9\x72\x84\xeb\x57\xa9\x5e\x89\x60\x8e\x36\x4f\x5d\x7f\xd7\xae\x5e\x46\x7e\xe1\x48\x68\x85\xb3\xaa\x77\x74\x37\x39\x5b\x95\xed\xcc\x60\xbc\x58\x7a\x6e\x27\xd1\xca\x25\x46\x84\x8f\xfc\x6c\x99\x0e\x8a\xa9\x9c\xd6\x54\x22\xa9\xb0\x6c\x8d\x74\xd8\xc9\xce\xc6\x6d\xc9\x2c\x2d\x3c\xbf\x8a\x9c\x5e\xaa\x36\x1a\x89\xaa\x88\x89\x9e\x51\x49\x91\xb7\x33\xf3\x2e\x4f\x93\x6a\xab\x45\x3b\xb2\xe8\x26\x17\x3b\x83\xd7\x92\xab\x79\x32\x5e\x9f\x0d\xdc\x84\xdc\x5f\xc5\x2b\xe3\x49\x08\xd6\x92\x03\xba\xad\xa6\xa7\xb7\x65\x28\x8f\xd9\x70\x40\x0b\x35\xc7\x39\xcc\xb4\x9e\x77\x26\xe7\x37\x96\xbd\x33\xda\xd3\x0f\x0a\xbc\xa3\xff\x81\xf7\x94\xbf\xec\xf0\xaa\x57\xf3\xdf\xa9\x67\x6d\x67\xa7\x40\x47\x11\xd5\xb3\x8d\x6f\x6f\x38\xbc\xfb\xb5\x9f\xba\xbe\xfd\x7b\x1f\xee\x3c\xdd\x48\xb9\x2f\x9f\x76\xf0\xfc\x74\x92\xfe\x6c\xfb\xcf\x52\xec\x83\xad\x9e\x96\xa3\x5f\x42\x7e\xa7\xaf\x39\xea\xdf\xae\x7c\xb4\x2f\x59\x3c\x76\xd4\xb8\x8a\xdf\x5b\x7f\x87\x21\x7b\xb2\x20\x76\x2a\xf3\xc3\x61\xa5\x2f\xc4\xdf\x4e\x3e\x87\x7b\xe3\x9f\x95\x4b\x06\xb5\x3b\xdf\x3c\x73\xfd\x4a\xe7\x5b\x83\xda\x2d\x8e\xf6\x04\xa8\xcb\x2e\xd8\x5f\x06\xfd\xc1\xda\x1c\xcc\xab\x4e\x2e\xd9\x22\x64\x54\xf7\x56\x5a\x55\xb4\x9a\xa3\x8e\x37\x91\xc5\xfc\xc4\xa0\x6a\x30\x70\x6a\x8b\x59\x59\xeb\xac\xd8\x64\x5a\xef\x22\x24\xd9\xd4\xc9\xce\xe4\xe5\x8c\xc8\xa3\x6e\xcf\x5b\x68\x08\x99\x92\x52\x69\xcf\x92\x26\x67\xad\xc1\xe0\x61\x50\xb3\xd5\x79\x65\x5e\x92\x0a\x20\xb2\x70\x6d\x99\x1f\x95\x4c\x13\x0d\x4a\x64\xcd\x79\x7c\xba\x6c\x70\xc5\x68\xbb\x52\xdd\xaa\xd4\xb5\xf9\x61\xe2\xfe\x3d\x83\xda\x3b\x33\x8c\x5d\xb9\xcb\x3c\x96\x9e\xd6\xd8\x4e\x4c\xa9\xb3\x51\xe0\x65\x83\xda\x15\x2b\xa5\x77\x1d\xd4\x6e\x6c\xff\x8e\x83\xda\xad\xb7\x4b\xdc\x3a\xa8\xdd\xa5\xfd\xcb\x06\xb5\xf4\xc4\xb3\x5e\x3b\x81\x7a\x3a\x48\xbc\xd3\xd7\x7c\xfa\x20\xf1\x25\xf8\x7b\xa6\x73\x8f\xf6\x79\x5a\x8c\x83\x3d\x7e\x6d\xff\xf1\xf6\xa0\x76\xe7\x6b\xbd\xae\xcf\xd4\x5e\x99\x0a\xba\x4b\xa6\x96\xcc\x64\xcd\x9d\xf2\xec\x9a\xca\x9f\x95\xec\x51\xa6\x36\xab\x2c\x65\x6d\x56\x4f\x01\xb5\x04\xbb\x05\xb4\xa6\xa5\xb5\xdb\xa3\xd3\x8e\x31\xb6\xbd\x41\xbe\x11\x25\x0b\x6e\x77\x22\xd0\x6a\x45\x37\x13\xd9\xf6\x52\x57\x79\x89\xb7\xfa\xfd\x56\x2f\xcc\xe0\xcc\x58\xed\x16\x49\x36\x21\xd1\xb9\xa1\xac\x59\x26\xad\xd5\xcd\xaa\x57\xaf\x1a\xfd\xdd\xa0\x06\x4b\xe9\x5a\x02\x17\xc7\x85\x9a\x55\x4f\xb8\xd9\x7e\xc6\x88\xeb\xfd\x8c\x9a\xcb\x38\xd9\x4a\x4d\xc0\xd9\xf2\x4a\x31\xda\x4a\x46\x96\xd0\x5b\x0b\x57\x77\xcc\xd4\x0e\x2f\x6f\x08\x20\x72\x5d\x52\x3b\xce\xd4\xc6\xa7\xac\x7d\x46\xa6\xf6\x6c\x3b\xd3\x91\xdc\x0f\xe5\xd4\x29\xa5\x22\xbc\x3a\x3f\x10\xdd\x31\x73\xa9\xea\x77\xcb\x5c\x4e\xae\x05\x38\x76\x4a\x5f\x58\xfe\xfa\x07\xc8\xdb\x3c\xe1\x7f\x5f\xbe\x8c\xbc\x9f\x8f\x22\xaf\xcb\xfb\xf4\x72\x01\xfd\xd0\xbf\xff\xba\xcc\x4a\x7f\x1a\xb4\xfd\x9a\x9d\x4f\xfc\x91\xf3\xa3\x84\x66\x17\x1f\x19\xe3\x42\xf0\x02\xdb\x97\x6d\x37\xbb\xef\xfd\x8c\xd7\x67\x85\x6f\x0d\xa0\x37\x67\x85\x8f\x4e\xc8\xa8\xea\x97\x64\x85\xfd\x9c\xb8\x1e\x36\x87\xf3\x4c\x58\xa6\xae\xb4\x1a\x80\x54\x21\x0c\xe4\xf1\x3a\x2b\x8d\x7b\xbe\x67\x9a\x59\xbd\x59\x08\xa6\x23\x23\x54\xf3\x3e\x5b\x04\x33\xbf\x0b\xe6\xe5\xb9\x9b\x40\x9e\x1d\x5f\x22\x33\xe3\x4c\xcd\x72\x1a\xa7\x8c\x84\x93\x2b\x15\x21\x2c\xeb\x75\x67\xf5\xb0\xb6\x21\xd7\x06\x24\x5b\x32\xa5\x25\x49\xb7\xf3\xad\x22\x89\x83\xbc\xda\xb4\x1c\xa9\x21\x8b\xb3\xcc\xb8\x93\xad\x73\x36\x9f\x8c\x39\x5b\x1e\x99\xf2\x47\x67\x85\xfb\xd0\xfc\xd6\xa8\xee\xad\x9f\x60\xfb\x8c\xac\xf0\x1d\x03\xa8\xd1\xc3\x49\xf5\x2c\x86\x47\xdf\xb9\x63\x96\xf4\x8e\x01\xf4\xad\x2c\xe9\x30\x80\xde\x1b\xbf\x77\x0c\x48\xbf\x04\xbf\x8b\x06\x24\xa3\x9a\x4e\x68\x6f\x66\x99\xff\x95\x59\xdc\xb3\x01\xe9\xb3\x77\xca\xbd\x3c\x20\x1d\x8b\x3e\x53\x9d\x9d\xc7\x7f\xa7\x0f\x5b\x79\xbe\x77\x6d\x50\x3f\x74\xfa\x86\xa9\xea\x6d\x39\x04\x50\xcd\xb3\xfc\x5f\xb8\x56\x78\xdf\x8b\x76\xaf\xcf\x40\x4f\x2f\xff\xba\x77\x06\xfa\xee\xdf\x31\x2e\xcb\x15\x35\x52\x06\x21\x43\x8e\x35\x28\xe6\x19\x34\x53\x76\x26\xed\x18\xd9\x42\x3f\x31\x2e\x09\x30\xc3\xe7\x0b\xec\x09\xe3\x2e\xce\xcc\x95\x45\xb6\xeb\x45\x85\xc4\x7a\xd0\x36\xac\x08\xea\xf1\xd0\x90\x06\x38\x89\xe7\x22\x4e\xd0\x32\xc8\x0f\x4b\x29\x79\xd9\x01\xe0\x61\x00\x8d\x37\x06\x46\x94\xa9\xab\x8d\x72\x85\xae\x93\xd2\x2c\x4c\x31\x2b\xd1\xac\xc6\xd7\x6d\x25\x1a\xd8\x13\xda\x15\xc4\xc9\x42\x0f\x8a\xc0\x79\xeb\x02\x8e\xfb\x65\xa0\xc6\x5d\xd6\x0a\x8f\xb6\xa2\x9e\xbf\x38\xed\x33\x32\xd0\x17\xce\xa5\xbe\x91\x91\x1c\x7e\x43\xfc\xf4\x3b\xf7\xbe\x98\xf5\x3e\x19\xc9\x9d\x33\xd0\x4f\x92\xbf\xfe\x01\xf2\x4e\x9f\x03\xed\x0b\xc9\xfb\x3e\x97\x50\x7e\xe1\x0c\xb4\xda\x4b\xfa\xcf\xf8\x3d\xe9\xdf\xd7\xcc\x40\x0b\x2d\x37\xf7\x52\x00\x78\xd1\x00\x7a\xe7\x1b\xd3\xaf\xcf\x40\xdf\x1a\x40\x6f\xcd\x40\x0f\x4e\x28\xf5\xca\x1e\xfa\xa3\x0c\x14\x75\x3c\x39\xd9\x92\x7c\x65\x98\xce\xf2\x15\xcb\x8a\x53\x50\x0b\x46\xcb\xf2\xca\xeb\x64\x66\x03\xcf\x81\xb6\x69\x0f\x92\x45\xd6\xa8\x96\x0a\x62\xbc\xd9\x4d\xae\xda\xae\x33\xe8\xd5\xe4\x55\x6d\xd8\xee\x33\xad\x58\xe7\x24\x3d\x18\xce\x81\x85\x39\x0e\xd3\xf1\x7a\x3b\x6e\xea\xfb\x29\xdc\x75\xcd\xf2\x5c\xdb\xed\xd7\x9a\xd9\x11\xcf\x4e\xa2\x68\x26\xd5\x46\x0d\x7b\x3d\x47\xb0\x54\xa1\xa8\x20\x15\xe2\xed\x50\x1c\x25\xd0\xf2\xad\xd3\x99\x77\xcc\x40\xef\xb2\xae\x70\xb8\xaf\xb0\x78\xfe\x8e\x87\xcf\xc8\x40\xdf\x31\x80\x36\x0d\x9e\x20\x67\x31\x3c\xfa\xce\xbd\x6f\xa1\xbf\x4f\x06\xf5\x71\x19\xe8\x3b\x06\xa4\x5f\x82\xdf\x7d\x6e\xda\xfd\xaf\xc8\x40\xcf\x4e\x31\xfe\x77\x64\xa0\xd3\x36\x19\x7d\x4c\x06\x9a\xb9\x11\xff\x5d\x39\x04\x50\xab\xb3\xfc\x5f\x78\xc9\xd3\x7d\x7f\xfa\xe2\xfa\x01\x34\x73\x4e\x49\x76\xe5\xd6\x01\xf4\x96\x2d\xcb\x1d\x20\xed\x80\xad\x9c\x07\x59\x7f\x7a\x25\x42\xbe\xd6\xab\xc7\xc3\x52\xb5\x65\x2d\xa6\xc4\xaa\x0e\xe8\x28\x4f\x2b\xd6\x60\x5d\x0c\x0b\x42\x45\xed\x5a\xce\xa8\x21\x19\xf3\xcc\xc8\xcb\x28\x1c\x25\x88\x16\xc6\x83\x1a\x9f\xa1\x3c\xec\x64\x24\xc5\x5c\xb8\xf1\xfa\xba\xec\x12\xad\xd5\x92\xaa\x8b\xb9\x65\xd1\x28\x18\x3e\x1c\xf8\xeb\x47\x91\x02\xaa\x85\x78\xa1\xd5\x4f\x0e\xb3\x89\x45\x07\xac\x73\xc3\x62\x15\xb0\xd1\x32\xe8\x73\xbc\x14\x35\x38\x90\x12\x01\x1a\xda\x07\x23\xfc\xf0\x41\x77\x87\xef\xf5\x83\x6e\x33\xdf\xac\xee\x8d\xec\xbd\x46\xf0\xd6\x46\xad\x17\x07\xea\xfe\xd5\x7d\xde\x0c\x34\xe3\xdd\x79\xed\xa3\x81\xe6\xad\xab\x16\x36\xcf\xb3\x13\x5f\x70\xdf\x9c\xea\xbc\xf1\x4a\xf7\xc6\xae\x67\xdb\xbf\x5d\xfd\xbe\x57\xba\x13\xfd\xe9\x40\xfd\xdf\xe6\xb8\x8f\xf0\xfd\x3a\x07\x23\x9f\xcd\x34\x38\x28\xff\x82\x24\xb6\xf2\xdc\x6d\xd0\x7a\xef\x40\xaf\x3f\xca\xef\x0b\xfb\xd0\x7b\xfc\xa4\xc1\x47\xea\xff\x1d\x7f\xd2\xa0\x7f\x42\xef\x88\x97\x43\xd9\x88\xe9\xd5\x9f\x34\xd0\x9f\x1e\x6b\xfa\x35\x47\xc6\xce\xda\xe3\x49\x9f\x8c\xfe\x17\xe3\xef\xcd\xa5\xa7\xcb\x0e\x2a\xdf\xf7\x77\xa8\xae\x9f\xba\x7f\x33\x70\xba\x1e\xc4\x1b\x06\xf6\xc3\xfa\xc8\x96\x9f\xe4\xd9\x3b\x93\x8f\x2e\xb7\x2b\xf7\xcd\xf5\xc4\xe7\xb9\xd5\xba\x0b\xcb\xad\xa8\x4d\x6b\xe5\xe6\x48\x81\x2b\xcb\xc8\x85\x2d\xe0\x4c\x7b\x93\x76\xb9\xdc\x2b\xf6\x91\xac\xb6\x46\x33\x20\xe3\x80\xad\x1a\xfd\x79\xb3\x69\xcc\xdb\x8e\x51\x2d\x8f\xa8\x65\xa5\x82\xae\x32\x6f\xc2\x7a\x4d\xad\xe9\xfd\x61\xb2\xa8\x8f\x77\x07\x99\x0d\x45\x4e\x2e\x72\x8e\xdc\xce\x36\xb2\x9c\x56\xaa\x5e\xa1\x5b\x10\x8c\x5c\xe0\x3b\xa6\x3b\xab\x40\x29\x39\x35\x06\xb5\x6c\x67\x46\x3e\x6f\xc3\xd9\xce\x93\xdf\xe0\x54\x3f\xf0\xa8\xc5\x25\x81\xd3\x15\x53\xc6\xd7\x05\x4e\x47\x65\x77\x3e\xef\xec\x77\x6e\xfc\xdd\xa2\xeb\x06\x8e\xa3\xf2\xca\xef\x16\x91\x8f\xc0\x2f\xf3\xc5\xf1\x3b\xf5\x49\x37\x4c\xb9\xdf\x70\xdc\xe7\xfa\xe4\x62\xc7\xcf\x45\x3b\xb9\xbb\x5f\x8c\xbf\x67\x93\x73\x87\xe3\x83\x27\xc5\x38\xdc\x91\xf6\x3f\xce\x87\x1d\xf4\xe7\x4b\x2e\xd9\x24\x27\xbd\x55\xe5\x2c\xcf\x7b\xd1\xe8\x27\x81\xd3\x17\x5a\xb2\xb1\xc7\xee\x4b\x6c\x5f\x14\x38\xdd\xf9\x47\x21\xaf\x9f\x71\xca\x9e\x03\x7d\x57\x7e\xe1\x8c\xd3\x9b\x1b\x4b\xf4\xa7\x33\x4e\xa5\x4a\x77\xd4\x58\x35\x94\x84\xd3\xc5\x58\xac\x8e\xed\xf4\x3a\xe5\x08\x23\x6b\x6a\xa5\x06\xf9\xb0\xa7\xc7\xfd\x7c\x29\x5f\x53\xea\x0d\x1e\x19\xa4\x99\xef\x10\xd4\x8e\x37\x17\xed\x20\xb1\xc8\x41\x71\xb8\x88\xa4\x21\x6b\xc2\x09\x96\xa7\xf9\xdc\x78\x91\x4b\x08\x74\x26\xd3\xea\x62\x1b\x38\x4d\x8d\xf6\x72\x3c\x2f\xad\x93\x23\x65\x59\xae\x96\x78\x25\xc3\x47\x41\x75\x5a\x9e\x4e\x13\x20\x9d\x56\x65\xea\xa4\x49\xc6\xcb\xeb\x29\x72\x58\x1e\xff\xe8\x19\xa7\xe4\x16\x8f\x5f\x33\xe3\xf4\xd6\x26\xd0\x4f\x98\x71\xca\x9c\xd2\xdb\x95\xaf\x30\xe3\x44\xf4\x4b\x07\xfe\x77\xcf\x38\xdd\x90\x41\x7e\xce\x8c\x53\x54\x7f\xbe\x88\xf4\xdf\x31\xe3\x04\x56\x82\xfc\x8c\xf5\x6d\xfd\x3b\xce\x78\x9c\xd2\x3b\xd2\x85\xa7\x78\xbd\x39\xe3\x71\x34\x30\xee\xca\x8d\xf6\x94\x3d\xf0\xf7\x4c\x76\x87\x72\x91\x3d\xed\x90\xda\xfe\xbd\x7e\x69\x68\x77\x32\xeb\xfa\xc0\xe3\x86\x64\xff\xcd\xcd\xd7\xfa\x3d\xec\xf1\xd7\xcc\xe8\xe8\xf7\xb0\xc7\x8f\xb8\x58\xe6\xcd\xa5\xf2\x4b\x6e\xb4\xba\xef\x2f\x37\x5f\x3f\x13\xf5\x66\x40\xf5\x4b\x66\xa2\x06\x83\x65\xe6\x78\x26\xea\x6c\x40\x75\x34\x13\x95\x0a\xb2\xd6\x3a\x95\x50\x66\x89\xd0\xc0\xe9\x30\x3e\xb7\xd4\x60\xee\x4a\x2b\x38\x03\x7a\x7a\x59\xcc\x75\xa3\x86\x5a\x2a\xae\xed\x60\xd1\x0a\x92\x4d\x62\xe5\x40\x75\x32\x5e\x1a\xd5\x76\x68\x28\xf5\x91\x97\xaa\x16\x43\x2a\xd3\xbc\x89\xcb\x62\x34\x75\x2a\x1d\xad\x02\x2b\xfa\xee\x56\xf3\x8e\x0d\xb5\xb2\x3f\xe6\xf5\x49\x61\x90\x91\xc7\x41\x37\x55\xb2\x56\x7d\x50\xf0\x7b\x4d\x2e\x69\xe9\x5e\x00\xcb\xf3\x99\x9c\x1e\x59\xb3\xeb\x96\xf0\xae\xca\xe2\x6e\xbd\xd5\xe9\x03\x8f\xa5\x7e\xc2\x4c\xd4\xe5\x01\xd5\x51\xf9\x9c\x99\x94\xcb\x03\xaa\xa3\xf2\xd6\x4c\x94\xae\xdf\x23\xf3\xff\xc2\x3a\xb3\x2d\x87\x80\xe3\xcb\x65\xfe\x2f\x2f\xf1\x1d\xe4\xf9\x35\x33\x7f\xab\x63\x35\xce\xcf\x24\xed\xca\x3d\x7e\x41\xfe\x23\xf5\xff\x8e\xbf\x20\xbf\xd0\x9f\xd8\xd3\x79\x5e\x4e\x03\xa8\x67\xbf\x20\xaf\x9f\x0b\xa8\x3e\xfb\x5a\xd9\x8b\x12\x9c\x97\x8f\x0b\x1f\x05\x54\x5f\xe2\x2a\xd0\x37\x37\xef\x5f\x72\x2f\x04\x27\x5c\x00\x1a\x53\x89\x02\x44\x4d\x10\x24\x95\x12\x2a\x30\x89\x63\x01\x60\x99\x2a\xa2\xa2\x42\x55\xb6\x21\x93\xb1\xa2\x41\x5b\x22\x08\x52\xaa\x28\x08\x10\x2a\xaa\x1a\xdb\xcf\x50\xdd\xe1\x54\xce\xe9\x75\xfc\x5f\x22\xa0\xda\x65\x97\x07\x7e\x9e\x2f\x43\xe8\x4f\x03\xaa\xbc\x9c\x09\x9c\xc2\x92\x8d\x06\xb9\xba\x53\x88\xac\x1c\x4d\xcb\x74\xb8\x4c\x2d\xf4\x61\x66\x96\x49\x66\x96\x79\x04\xdb\x65\x2f\xad\x2f\xa3\x26\x9d\xea\x73\x1f\x2e\x5b\x28\x37\x98\x27\xdc\x91\x4a\xfb\xa8\x16\x1a\x6b\x5b\x2d\x74\x93\x5e\xb9\xdb\x18\xda\xe9\x5a\xaa\xe8\x1b\x8b\xdd\xaf\x2c\x40\x55\x35\x5c\x6f\xb9\x2c\x54\x8d\x1c\x2c\xa5\xc6\xf1\x7e\xc6\x01\x2b\x96\x1a\xf8\x15\x67\x8a\xca\xc2\xb2\x01\x3b\xb4\xb6\xae\x0f\xd9\x75\x33\x54\x57\x0d\x8e\xb7\xce\x00\x7e\xe0\x29\xab\x4f\x08\xa8\x2e\xcf\xa8\x8f\xca\xe7\x04\x54\x7d\xfd\x4c\x92\xf2\x35\x02\xaa\x2f\xac\x33\xdb\xf2\x85\x03\xaa\xb3\x33\x58\x27\xf2\xfc\x9a\x01\x55\xd3\x2f\xd7\xa4\x57\x58\xbf\x77\x40\x75\x6f\xfd\xbf\x5f\x40\xf5\xc2\x4d\x6c\xff\x73\x03\xaa\x97\x4f\xbf\x7d\xf5\x80\xea\x99\x3e\x5c\xf2\xab\x31\x2a\x14\x35\x95\x4b\x02\x56\x34\x2e\xc9\x5c\x56\x25\x22\x01\x2a\x8a\x54\xa2\x9a\x20\x72\x40\x21\x67\x36\x82\xd8\x66\x08\x21\x40\x21\xa6\xb2\x46\x89\x0a\x45\x49\x50\x05\xb4\xdf\x2b\x75\x87\x53\x5a\x6f\x06\x54\xbf\x64\xc9\xef\xcd\x9d\xfc\xfa\xd3\x25\xbf\xb2\x59\x19\x97\x13\xe1\xac\x21\x8d\xab\xc6\xba\x34\x69\x94\xd9\xba\x17\x0e\x57\x76\x64\x8e\x35\xa7\xe8\x2c\x33\x23\x6b\xe2\x64\x23\xd6\x56\xab\x61\xb3\x2e\xe5\x41\x19\xb6\x07\x2b\xa9\x54\x18\xa8\xf3\x85\xe3\xb9\x85\x2a\x88\x8a\xd3\x64\x31\xb1\xee\xd6\xd6\x91\x33\xaa\x9b\xd1\x7e\xaf\x54\x3d\x55\xe8\x6a\xfa\x14\x69\x19\xcd\x6b\x98\xd9\xba\xd5\x14\xab\xd6\x52\x48\xc8\xa0\xec\xa3\x56\x93\x96\x43\x4c\x57\xa9\xbc\xde\x4f\x5f\xb7\x57\xea\x9a\x25\xbf\x9d\x35\xfe\x92\x25\xbf\x37\x4f\xdd\x7d\xc2\x92\xdf\x1d\x97\x28\xee\xbd\xe4\x77\xf9\x80\xf2\x8e\x25\x3f\x5d\x3f\x09\xa8\xfe\xa7\xe9\xcc\xb6\x9c\x06\x54\x5f\xf2\xf4\xd6\xd9\x19\x9f\x9b\x37\xf5\x7e\xc6\x92\xac\x51\x0f\x50\xf6\x59\x6c\x70\xef\x4d\xe6\xf7\xd6\xff\xfb\x2d\xb9\x5e\x1e\x50\x5d\xb8\xc9\xfc\x4b\x2e\xf9\x5d\x74\x7a\xf3\x4b\x2e\xf9\xbd\xa6\x0f\x9b\x80\xea\xdb\xb7\x3f\xfe\xf8\xf6\xc7\x1f\xb1\x14\x0e\x71\x8c\x7b\x7e\xac\x84\x1d\xf6\x67\x2c\x9a\xf6\x7d\x4c\xd9\x3e\xc0\xfa\x2b\xd6\x58\x4d\xd9\x9f\xb1\x86\x6e\x58\x66\x2c\xa5\x37\xf4\xbf\x62\x75\x32\x60\x0e\xfe\x33\x36\x8d\xec\xc9\x90\xfc\x15\x2b\x2f\x5c\xe6\xff\x19\xdb\x10\xfb\xf6\x24\x4c\x7b\x4a\xea\x31\x56\x13\x8f\x0e\xf3\x6d\x31\x0b\x0e\x27\x9e\xcf\xec\xef\x7a\x99\xca\xe3\xce\xf6\x85\x5e\xa9\x8e\xf5\x67\x54\x1e\x7a\xb8\xeb\x18\x26\xc4\x8b\xdc\x90\x6e\xba\x7b\xf4\xfa\xe7\x74\xcc\x1e\xbb\x99\x2c\x97\xea\x8d\x9a\x9e\x2b\x35\xde\xe8\xa6\x6e\x35\xcc\xda\x1e\x95\x72\xc9\xea\x1e\x53\xfc\x16\x8b\xc5\x62\x7a\x2a\x75\x44\xed\x59\x83\xb1\x4a\x2d\x57\xd4\x6b\xdd\x58\xc1\xec\xc6\x7e\xdf\x3f\x1d\xd2\x1f\xb1\x4d\x0d\x17\x3b\xec\x25\xf6\x83\xc7\x17\xf7\x65\x3c\x78\x85\xeb\xe0\x35\x96\x9f\x31\x6a\x63\x77\xf3\xff\x9d\xd8\xb3\xb1\x7b\x8e\xb3\x87\x06\x9e\x32\xe5\x7a\x94\x9d\xe1\x68\xc2\x68\x9f\xf9\x03\x86\x29\xf3\x83\xa7\xef\x7e\xee\xde\x05\x6c\xf6\xf3\x2e\xec\x3e\x21\x7e\x8e\xf1\x57\x5a\x8f\x35\x4b\xb9\x6a\xd3\x8c\xfd\xfe\xf8\xe9\xbb\x7a\x72\x1f\xbc\xdf\xd9\x81\xe7\x32\xd8\x3f\xc7\xc1\xe0\x19\xf7\x1e\xe7\x1b\xb6\x77\xff\xdc\x89\xdf\x1d\xb1\x73\x8c\x1e\x35\xf3\x94\xc3\xed\x83\x33\x6a\x32\x65\x1b\xee\xb6\x7f\xef\xc4\xdc\x96\xd6\x39\xde\x0e\x8d\x3c\x65\x6d\x38\xfd\x11\x9b\x7a\x7e\xf8\x9c\xb7\x4d\x7b\xc1\x60\x16\xb1\x88\x3d\x79\x73\x2f\x4e\x8f\x48\x9e\x65\xf8\xb4\xc9\x73\x42\x3f\xc7\x75\x10\xd9\xfb\x7f\xee\xc7\x69\x10\xd9\x2f\xf0\xf8\xd0\xcc\x53\xee\x7c\x16\x9c\x11\xf7\x2c\xf2\xfc\xc8\x19\xba\xdc\x3b\x7a\x79\x27\x26\x0f\x04\xcf\x31\x7a\xd2\xdc\x45\x3e\x2c\x20\xd3\xdd\xd7\x82\xa3\x97\x77\xe2\xf6\x40\xf0\x1c\xb7\x27\xcd\x3d\xe5\x76\x16\xb0\xf0\xac\xad\x6f\x06\x6b\x16\x84\x38\x64\x47\x2f\xef\xc5\xef\x23\xc1\xb3\xfc\x3e\x6d\xee\x29\xbf\xdb\xcf\xcf\x8e\xaf\xa1\x1f\x05\xe1\x64\xe8\xb2\xe0\xe8\xe5\x9d\x18\x3e\x10\x3c\xc7\xf0\x49\x73\x2f\x86\x06\xc3\x20\x88\x98\xff\x23\x86\x83\x80\x85\xc4\xa3\x67\xfa\xb0\xe4\xec\x31\x50\x3a\x7e\x73\xaf\x7e\x1c\x91\x3c\xdb\x93\xd3\x26\xcf\x79\x89\x80\xcd\x7e\xc4\xc2\xe5\xd0\xa5\x6c\x79\xa6\x07\x07\xf6\xef\xcd\xfb\xab\x8c\xdf\xc4\xf5\x49\x88\xfa\xf4\xed\x9d\xf8\x7f\x4a\xf4\x5c\x27\xce\x34\xfb\x62\x4f\xf6\x75\xcf\x77\x67\xaf\x73\x36\x9e\x60\x97\xb0\xe0\x81\xf7\x5c\x29\x65\x76\xde\x60\x3b\x59\x33\xf5\x86\xb9\xab\x7a\x4a\x27\x56\x2e\x1d\xa2\xd8\x66\x3d\x57\xca\xc4\xec\xd0\x67\x2c\xf6\xfb\xbe\xc6\xbf\x62\xed\xac\x59\x33\x1f\xdf\xc7\xfe\xf3\x77\x0c\x08\x0f\xe5\x79\xa0\xc9\x82\x70\x37\x96\x6f\x7a\x71\x35\x97\x4f\xc9\x6c\x98\xdc\xc7\x29\x4f\x58\x0c\xd8\x64\x32\x74\xfb\x5b\xdb\xfb\x11\xb3\xa3\xd5\xe1\xcd\xd4\x1f\x92\xe7\xb6\xb8\x11\x83\xbd\x0a\xd8\xec\x6a\xc6\x1e\x29\x6c\x78\x3a\x18\xc6\x13\xb6\x5e\x0e\x15\x37\xd5\x39\x63\xb7\xb3\xf0\x40\x64\xc7\xc5\x91\x83\xb9\x90\x91\xfd\x93\xdb\x18\x39\x26\xb2\x61\xe4\x69\x20\x7c\x21\x27\x01\x99\x32\x77\x7e\x23\x27\xc7\x44\x36\x9c\x04\x64\xfa\x4e\x40\x0e\x03\xea\xcd\x9c\x1c\xd3\xd9\x33\xf3\x10\x25\x3c\x65\x06\x07\xe1\xcb\x0c\x1d\x39\x8e\xdb\x38\x3a\x25\xb4\x61\xe9\xc4\x37\xbe\x89\x51\xc5\x0b\xc2\xbe\xcf\xea\x55\x6b\x9b\x0b\xdb\x38\x60\x31\x1a\x39\xd3\x18\xf1\x9c\xe9\x84\x85\x6c\xdb\xec\xff\x1f\x00\x00\xff\xff\x4c\x82\x1e\x54\xae\x2f\x01\x00") - -func order_booksCoreSqlBytes() ([]byte, error) { - return bindataRead( - _order_booksCoreSql, - "order_books-core.sql", - ) -} - -func order_booksCoreSql() (*asset, error) { - bytes, err := order_booksCoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "order_books-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x17, 0x90, 0xc0, 0x10, 0x33, 0xd8, 0x44, 0xd2, 0x10, 0x21, 0x24, 0xc, 0xed, 0xb6, 0xd6, 0x31, 0x5d, 0xec, 0xa8, 0x80, 0x3e, 0xd2, 0xb4, 0x5, 0x4a, 0x4e, 0x30, 0x71, 0x35, 0xc6, 0xf9, 0xeb}} - return a, nil -} - -var _order_booksHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xe9\x8e\xeb\x36\xb2\xf0\xff\x3c\x85\x10\x0c\xd0\x09\x7c\x12\x8b\x22\xb5\x9d\x7c\xb9\x80\x6c\xcb\xfb\xbe\xdb\x83\x81\x41\x49\x94\x2d\x6f\x72\x4b\xf2\x3a\xb8\xef\xfe\xc1\x96\x57\x79\x97\xd5\x7d\x3a\xb9\x21\x66\x4e\x5a\x16\x59\x1b\x8b\xac\x62\xb1\x48\xfd\xf6\xdb\x4f\xbf\xfd\x46\x15\x4d\xdb\xe9\x5a\xa4\x52\xca\x52\x1a\x76\xb0\x82\x6d\x42\x69\xd3\xd1\xe4\xa7\xdf\x7e\xfb\x69\xfd\x3e\x36\x1d\x4d\x88\x46\xe9\x96\x39\x3a\x54\x98\x11\xcb\x36\xcc\x31\x25\xfe\xce\xfd\x0e\x8e\x6a\x29\x4b\x6a\xd2\xed\xac\x9b\x7b\xaa\xfc\x54\x91\xab\x94\xed\x60\x87\x8c\xc8\xd8\xe9\x38\xc6\x88\x98\x53\x87\xfa\x93\xa2\xff\xd8\xbc\x1a\x9a\xea\xe0\xfc\x57\x75\x68\xac\x6b\x93\xb1\x6a\x6a\xc6\xb8\x4b\xfd\x49\xbd\xd5\xaa\x71\xe1\xed\x8f\x1d\xb8\xb1\x86\x2d\xad\xa3\x9a\x63\xdd\xb4\x46\xc6\xb8\xdb\xb1\x1d\xcb\x18\x77\x6d\xea\x4f\xca\x1c\x6f\x61\xf4\x88\x3a\xe8\xe8\xd3\xb1\xea\x18\xe6\xb8\xa3\x98\x9a\x41\xd6\xef\x75\x3c\xb4\xc9\x09\x9a\x91\x31\xee\x8c\x88\x6d\xe3\xee\xa6\xc2\x1c\x5b\x63\x63\xdc\xfd\x63\x4b\x3b\xc1\x96\xda\xeb\x4c\xb0\xd3\xa3\xfe\xa4\x26\x53\x65\x68\xa8\xdf\xd6\xcc\xaa\xd8\xc1\x43\x73\x5d\x4d\xca\x56\xe5\x32\x55\x95\x22\x59\x99\x4a\xc5\x29\xb9\x99\xaa\x54\x2b\x54\x21\x9f\x6d\x6d\xeb\xff\xde\x33\x6c\xc7\xb4\x96\x1d\xc7\xc2\x1a\xb1\xa9\x58\xb9\x50\xa4\xa2\x85\x7c\xa5\x5a\x96\x52\xf9\xea\x51\xa3\xd3\x8a\x1d\xd5\x9c\x8e\x1d\x62\x75\xb0\x6d\x13\xa7\x63\x68\x1d\x7d\x40\x96\x7f\x7c\x06\x42\x75\xf3\xd7\x67\xa0\x5c\xeb\xd5\xe7\x31\xe8\x62\x7b\x9e\x3b\x97\xc0\xb5\x22\xdf\x42\x76\x54\xeb\x00\x7c\x53\x3d\x95\x8f\xc9\xcd\xa3\x9a\x5b\xb0\x1b\xaa\x3a\x44\xd7\x89\xea\xd8\x1d\x65\xd9\x31\x2d\x8d\x58\x1d\xc5\x34\x07\xb7\x1b\x1a\x63\x8d\x2c\x3a\x47\xcc\x8d\x6d\xbc\x51\x74\xbb\x63\x8e\x3b\x86\xf6\x4c\x6b\x73\x42\x2c\xbc\x6f\xeb\x2c\x27\xe4\x85\xd6\x07\x4a\x5e\xa2\xe2\xb9\xb6\x43\xa2\x75\x89\xb5\x69\x68\x93\xf7\x29\x19\xab\x4f\xb1\x70\xd4\x7c\x62\x91\x99\x61\x4e\xed\xed\x6f\x9d\x1e\xb6\x7b\x3e\x41\xbd\x0e\xc1\x18\x4d\x4c\x6b\x3d\x1c\xb7\x73\xaa\x5f\x30\x7e\x65\xa9\x0e\x4d\x9b\x68\x1d\xec\x3c\xd3\x7e\xa7\xcc\x3e\x54\x69\x3b\x2e\x7d\x10\x7d\xdc\x12\x6b\x9a\x45\x6c\xfb\x76\xf3\x9e\x63\x69\x1b\xbb\xd3\x19\x9a\xe6\x60\x3a\x79\xa0\xf6\xe4\x1e\x49\x6e\x2d\x6c\x58\x4f\x02\xde\x4d\xba\x0f\x37\x58\xcf\x13\xba\x4e\xac\xc7\xaa\xee\xc0\xfb\x68\xb2\x15\xeb\x63\x8d\x36\x53\xeb\x13\x48\x8e\xa7\xe2\x7b\x2d\x26\xeb\x06\x3d\xe7\x6e\x0f\xd8\x27\x13\x90\xb2\xbc\xab\x46\xbd\xfd\x48\x7f\xa4\xb2\xe9\xd2\x61\xde\xad\x68\xd8\x4e\xc7\x59\x74\x26\xf7\x41\xae\x6b\x9a\x93\x47\x6b\x92\x47\xab\xed\x4c\xc9\xed\xca\xca\x6e\xb8\xdf\xad\x76\x7f\x16\x53\x96\x8f\x75\xa6\x6b\x23\xd7\xd2\xb6\xed\xe9\x3d\xcc\xfb\xca\xaa\xa9\x91\x27\xfd\x82\xbd\x1a\x4c\xb0\xe5\x18\xaa\x31\xc1\xe3\x9b\xc6\xfb\x5e\xd3\xce\xe4\x49\xdf\x64\x6f\xd1\x9e\xa5\xe0\x72\xc3\xa7\xf1\x6f\x84\xf7\x08\x3e\xb7\xe2\x87\xc3\x77\x3b\x73\xdd\x93\xdb\x3f\xd7\xf6\x61\xe7\xfa\x6d\x94\xa1\xf3\x20\x05\x5d\xd3\x9a\x74\x46\x46\x77\xeb\x30\xdc\x20\xc1\x53\xf3\x61\x1e\x9f\xf7\xf7\x6e\x41\x7e\x54\x39\xdd\xd6\xd1\x42\xb6\x96\xcb\x53\x86\xe6\x62\x8e\xc9\x71\xa9\x96\xad\x3e\x08\xfb\x8a\xd2\x05\x00\x79\xdb\xdd\xb7\x21\x6d\x9e\x1e\x67\x7f\x67\xa5\x2b\x72\xa9\x26\xe7\xa3\x3e\x64\xb6\xf6\xb3\x6d\xf2\xfe\x34\xe6\x13\x20\x0f\xb7\xd6\xc8\x83\x75\x0f\xde\xec\xc3\x1c\x5e\x19\xf5\xcf\xf0\x77\x19\xc4\x63\x6d\xb7\x7e\xdf\x63\x95\xb7\x4e\xde\xc3\xbc\x6d\x67\x80\x67\x78\x71\x9b\x3c\x58\x77\xeb\xfe\x3d\x4e\xcf\xce\x5f\x7c\x84\x22\xcf\x1c\x72\xbb\xf2\xd1\x94\xb0\xad\x28\x25\x12\x65\x39\x21\x55\x2f\x54\x1e\x19\xeb\x15\x87\xa1\x92\x5f\xc6\xd3\x11\xb1\x0c\xf5\xdf\xff\xf9\xf5\x81\x56\x78\xe1\xa3\xd5\x10\xdb\xce\x2f\x78\xbc\x24\xc3\x4d\x28\xe6\x81\x16\xba\x61\x5d\x6c\x12\xaf\xe5\xa3\xd5\x54\x21\x7f\x83\x9f\x0e\xee\x76\x0f\xd4\x7d\xa3\xce\x08\xbd\x01\x63\xc7\xdd\x0b\x30\xd6\xbc\x6e\x9a\x1f\x88\xff\x46\x3d\xc3\xc8\x86\xf5\x07\x20\xc8\xcd\xaa\x9c\xaf\x78\x40\x0c\x27\x5d\xfb\x7d\xb8\xd3\xc5\x68\x52\xce\x49\x67\x18\xfe\xf8\xc9\x8d\xc2\xe5\xf1\x88\x7c\xdf\xfd\x46\x55\x97\x13\xf2\x7d\xdb\xe4\x0f\xaa\xa2\xf6\xc8\x08\x7f\xa7\x7e\xfb\x83\x2a\xcc\xc7\xc4\xfa\x4e\xfd\xb6\x09\xce\x45\xcb\xf2\xba\xbf\xb6\x90\x77\xf0\x7e\x3a\x81\x78\xfa\x72\x0b\x38\x5a\xc8\xe5\xe4\x7c\xf5\x06\x64\xb7\x02\x55\xc8\x9f\x02\xa0\x52\x15\xea\x6d\x17\x76\xdb\xfd\x66\x6f\x80\xbc\x79\x31\xef\xd8\xdf\xe2\xdc\x4b\xe8\x2e\x3f\x27\xb2\xcc\x17\xaa\x1e\x79\x52\x8d\x54\x35\xb9\x27\xeb\x38\xfe\x76\x82\xfe\x00\xc5\x43\xc8\x33\xcc\x9f\x01\xd9\x08\xa0\x98\x0d\x4f\xba\x95\x52\x96\x9a\x58\xa6\x4a\xb4\xa9\x85\x87\xd4\x10\x8f\xbb\x53\xdc\x25\x1b\x31\x3c\x18\x2f\x3c\x26\xf7\xbe\xa2\x6d\xc9\xdf\xe9\xea\x81\xfe\x5d\xdf\x5e\x92\xe5\x5e\xb3\xef\xc2\xa7\xca\x72\xb5\x56\xce\x57\x8e\x7e\xfb\x89\xa2\x28\x2a\x2b\xe5\x13\x35\x29\x21\x53\x1b\xee\x73\xb9\x9a\x3b\xdf\x55\xaa\xe5\x54\xb4\xba\xa9\x21\x55\xa8\x7f\x75\xfe\x45\x55\xe4\xac\x1c\xad\x52\xff\x02\xeb\x27\x6f\x6f\xdc\x1d\x88\xaf\x71\x77\x0f\x7c\x60\xcc\x31\x97\x98\x7b\x64\xa6\x7a\x8d\xbf\x07\x30\xec\x59\xdc\xff\xe4\x8b\xc3\x5f\x7e\xa2\xa8\xa8\x54\x91\xa9\x46\x52\xce\x53\xff\x02\xff\x06\xff\x09\xff\x0b\xfc\x9b\xf9\xcf\xff\xfc\x8b\xd9\xfc\xcd\xfc\x9b\xf9\x0f\x55\x75\x5f\x52\x72\xb6\x22\xaf\x85\x22\xe7\x63\xbf\x5e\x94\xcc\x03\x76\xe0\x45\xc9\xdc\xc7\xf0\xd1\x92\xf9\x7f\x7e\x24\x73\x6e\x53\xb7\x72\xd8\xdb\xe1\xc7\x04\x71\x30\xdb\x67\x10\x37\x14\x53\x54\x65\x2d\x2b\xea\xcf\xc3\x0c\xf0\xcd\xfd\xb9\xda\x2a\xca\xd4\x9f\xc7\x23\xe2\xd7\x4b\xa3\x36\x50\x1a\xbd\x00\x3d\x24\xee\x86\xf1\xe3\x14\x5e\x74\x81\x5e\xa5\xf2\x12\x50\x0f\xa5\x27\x03\xf2\x94\xdc\x83\x96\x9d\x53\x7b\xc9\xcd\x7b\x99\xda\x0b\x40\xbd\xd4\x1e\x0f\x92\x9b\xd4\xae\x2d\x97\x46\x74\x3c\x1d\x3a\x1d\x07\x2b\x43\x62\x4f\xb0\x4a\xa8\x3f\xa9\xb7\xb7\x3f\x4e\xdf\xce\x0d\xa7\xd7\x31\x0d\xed\x68\x2b\xed\x84\xd7\x63\xff\x77\xcb\xe2\x66\x80\x3d\xc6\x9e\x3b\x16\x8f\x17\xdf\x2e\x47\x86\x46\x29\x46\xd7\x18\x3b\x1b\xc7\x20\x5f\xcb\x66\x5d\x76\xf0\x68\xed\xc6\x53\x6a\x0f\x5b\x58\x75\x88\x45\xcd\xb0\xb5\x34\xc6\x5d\x4f\xb5\xf1\x74\xb4\x77\xf9\x29\x63\xec\x90\x2e\xb1\x3c\x55\xf4\x21\xee\xda\x94\x3d\xc2\xc3\xe1\x39\x1a\xc7\x1c\x0d\xcf\x91\xfc\xc2\xb0\xec\xaf\xfb\x9a\xe7\xdd\xee\x5d\x37\xf8\x15\x87\x37\xda\xb1\x17\x89\x43\x16\x67\x02\x99\x4c\x86\xc6\x26\x66\x4f\x39\xc6\x88\xd8\x0e\x1e\x4d\xa8\x75\x9f\x6d\x1e\xa9\x95\x39\x26\xe7\x84\x5e\x5b\x15\xed\xfc\xd1\xed\x72\xea\x31\x9a\xf7\x8b\xaf\x2b\x50\xb7\x6a\x28\x95\xab\xae\x47\x07\x36\x3f\xa4\xf2\xd1\xb2\xbc\x71\xbf\x22\xad\xed\x4f\xf9\x02\x95\x4b\xe5\xeb\x52\xb6\x26\xef\x9f\xa5\xe6\xe1\x39\x2a\x45\x93\x32\x05\xee\x31\xe3\x5b\xec\x5e\x40\x67\xaa\xb8\x0d\x7a\x50\x63\xb2\x70\x66\x78\xf8\xcb\xdb\x15\x8e\xdf\xbe\x7f\xb7\x48\x57\x1d\x62\xdb\xfe\xd5\xdb\x5d\xee\x5e\xc5\x05\xdd\xe2\xd0\xaf\x37\x3a\xca\x5d\x1b\xbf\xcc\x99\x1b\xd1\xd9\xf3\x75\x79\x64\x1c\x62\x75\x97\xc9\xbc\x58\x5d\x35\xb5\x4b\xd5\x01\x73\xb9\xba\x1b\xfe\xbb\xd0\x80\xe5\x6e\x8d\xb0\xcb\xe1\x85\x80\xd4\xf6\x18\xe6\xa7\x29\xed\x2d\x46\xa8\x42\x23\x2f\xc7\xa8\x48\xeb\x0e\x47\x6e\x84\xee\x36\x43\x7b\x58\x9e\xd7\xbf\x1b\xda\x35\xda\x76\x31\x9f\x57\xb5\x6e\x0b\x67\xab\x76\x9e\x31\xd3\xb9\x36\xd3\x9f\x87\xb8\xae\xd5\xfc\x79\xb3\xf1\xf1\xf3\x15\x6d\xde\xe8\xf1\xe5\x57\x1a\x71\xb0\x31\xb4\xa9\xbe\x6d\x8e\x95\xeb\xca\xb6\x0b\x94\xbd\x2a\x87\x2d\x9c\xad\x1c\x76\xfb\xd6\x57\x68\x3b\xda\x4c\x7e\x68\x14\x5e\xda\xc7\xbe\xdc\x70\x2b\x96\xa3\xc8\xe8\xa6\x23\xf6\x74\xec\x66\x39\xda\x83\xe1\xd0\x11\x8f\xd5\xdf\x6f\x26\x7b\x0c\x93\x39\x75\x0e\xb6\xc9\xdb\xc6\x22\xd8\xb9\xdb\xc8\xad\x3b\x9d\x68\x0f\xd7\xdd\xab\xce\xf6\xd1\xb3\xcf\x7e\xc6\x0b\x38\xf3\x07\x1c\x3c\xec\xa8\xa6\x31\xb6\x2f\xeb\xa0\x4e\x48\x67\x62\x9a\xc3\xcb\x6f\x37\x3b\x9f\x3a\xb9\xd6\xd7\x9b\xd7\x16\xb1\x89\x35\xbb\x56\x65\xed\x87\x3a\x8b\xce\xc6\x4d\x32\x56\xd7\x6a\x4d\x2c\xd3\x31\x55\x73\x78\x95\x2f\x6f\x1f\xed\x94\x85\x60\x8d\x58\x1b\xf7\xc2\xfd\xdd\x9e\xaa\x2a\xb1\x6d\x7d\x3a\xec\x5c\x55\x94\x2d\xe3\xd8\x18\x12\xed\x7a\xad\xeb\xc3\xea\x4a\xec\xfa\xd5\x51\x76\x65\x3f\xe4\x8e\xcd\x7b\x7c\xb6\xb9\x3f\x7f\x3d\xcb\x72\xb0\x66\xec\x26\x8e\xcf\x32\x6b\x4f\x31\xfa\xa2\x99\xbb\x89\xeb\xdc\xec\x5d\xae\x7e\xc3\x0c\x1e\xed\xec\x04\xa6\x9b\xf7\x96\x39\xa7\x59\x55\x57\x96\x42\x6b\xcf\x5f\x75\x59\xd9\x58\xc0\x17\x0d\xe0\x76\xe4\x9b\x53\x4b\xdd\xa7\x69\x5c\x31\x3d\xbb\xe9\xe4\xed\xed\xfb\xf7\xeb\x4b\xb1\xeb\xe3\x60\xbb\xb1\xf6\xaa\x38\xb7\xb9\x80\xbf\x04\xea\x2f\x6c\xa7\x44\x3f\xd6\x6b\x93\x0b\x73\x15\xad\x27\x13\xf1\x56\xa5\x6d\x72\xe4\xad\x2a\xee\x3a\xf8\x62\x85\xf3\x9c\xce\x3b\xf5\x6e\xa2\xdb\xd7\xba\x81\x71\x43\x92\x61\x77\x6c\x32\x1c\x12\x8b\x52\x4c\x73\x48\xf0\x78\x67\x93\x0c\x95\x74\xc6\x27\xf6\xd7\xfd\xed\xd4\x26\x1f\xb2\x89\x3a\x1e\x6b\x7d\x92\xcf\xe4\x7d\x79\xb4\x4d\x7f\x31\xf3\x73\x43\x75\x67\x93\x1b\x4c\x45\x93\x72\x34\x43\xfd\xf2\xcb\xb1\x04\xff\x87\xa2\x7f\xfd\xf5\x1e\xa8\x4b\xcd\x77\x42\xfb\x7f\x67\x72\x7c\x00\xde\x89\x4c\x3d\xe0\x3d\x02\xdf\x10\x78\x73\x28\x5d\xde\xe1\x0e\x60\x70\x5d\xce\x59\x78\xd0\x92\x3e\x32\x85\xbd\x62\x4b\xef\xe5\x07\x04\x63\x4d\xef\x60\xf9\x2c\x7b\xfa\x24\xb3\x2f\x5a\xd4\x3b\xd8\xce\x6d\xea\xb5\x06\x37\xac\xea\x49\x4e\x48\x80\xba\xba\xd3\xcf\x63\x92\x1e\x5e\x44\x6d\xe7\xfe\x3b\x4b\xb3\x47\x0d\xef\x6d\x1b\x7a\xb1\xee\x01\xf5\xc5\xf1\xb2\x5e\x05\x5c\x5f\x46\x5c\x5b\xa0\xfd\x90\x25\x96\xb3\xe8\x90\xf1\x8c\x0c\xcd\x09\xb9\x14\xb6\x74\x16\xeb\x05\xcf\x74\xe8\x5c\x79\x39\x22\x0e\xbe\xf2\x6a\xbd\xd4\xba\xf6\xda\x36\xba\x63\xec\x4c\x2d\x72\x29\xc2\x26\x72\xbf\xfe\xfb\x3f\x07\xdf\xe5\xbf\xff\x7b\xc9\x7b\xf9\xf7\x7f\xbc\x32\x27\x23\xf3\x4a\x30\xec\x00\x6b\x6c\x8e\xc9\x4d\x5f\xe8\x00\xeb\x1c\xcc\x96\x33\x63\x44\x3a\x8a\x39\x1d\x6b\x9b\x88\xb5\x60\xe1\x71\x97\x78\x57\x63\xa7\xa6\x75\x2d\x89\x35\xb4\x2e\xd1\xee\x2f\xb7\xb6\xb1\x3f\x43\xdb\x8d\xb6\x5d\x0a\xd7\x23\x53\x84\x3b\xdc\x36\xf9\x72\x77\xb2\xc3\x2a\x72\xf5\x46\x9c\xf4\x38\x22\x75\x1c\x25\x7d\x6e\x1d\x11\x1c\x13\x0f\x26\xcf\xdd\x64\xea\xe6\xfa\xe3\x11\x26\xaf\x5a\xda\xc0\xd8\x7c\x38\xff\xf0\x26\xa3\x77\xcc\xc2\x65\x56\x63\xd8\xc1\x94\x6e\x5a\x77\x76\x8b\xa8\x98\x54\x95\xee\xb0\x97\xca\x57\xe4\x72\x95\x4a\xe5\xab\x85\x93\x1d\xa3\x8d\x15\xad\x50\xbf\x80\x6f\xd4\x1b\x60\xe8\x7d\x79\xfb\x46\x31\xdf\x28\xfa\x1b\xf5\xf6\xf6\xeb\x1f\x77\x5b\x33\xeb\xd6\xf4\xb5\xd6\x57\xd8\xb9\xb5\xe3\xf3\x2c\x4b\xde\x5d\x9f\x1d\x61\x6f\xa0\x63\x8c\x0d\xc7\xc0\xc3\x8e\x9b\x81\xf3\xbb\xfd\x3e\x7c\xfb\x46\xbd\x31\x34\x10\x7f\xa3\xb9\xdf\x68\x48\x01\xe1\x3b\x23\x7c\x47\xfc\xef\x34\x64\x90\xc8\x85\x68\xc6\xcb\xf2\x55\xe8\x4c\xc7\x3d\x59\x71\xd2\xa3\xca\xb2\xe3\x98\x86\x76\x1b\x93\xc8\xb1\xfc\x33\x98\x60\x67\x6a\x93\xbd\x85\xeb\x18\xe3\xb3\xd3\x1c\x37\xf1\x21\x44\x23\xe1\x19\x7c\xa8\x83\x35\xad\xe3\x8d\x89\xdd\xc4\xc1\x22\x16\x32\xcf\xe0\x60\x3b\xae\x3d\xdd\x79\xf6\x9b\xbd\xd4\x9b\x28\x38\x48\x33\x4f\xb1\xc1\xed\x50\x6c\x67\xcf\x07\x50\x08\x08\xb0\xcf\xa0\xe0\x3b\x23\x53\x33\xf4\xe5\xe3\x5c\x08\x80\x63\x9e\x42\x21\x9c\x70\xb1\x4d\xa1\x7e\x00\x0f\x8f\x38\xf8\x1c\x9e\x75\xa7\xe3\x6e\xd7\x22\x5d\xec\x98\xd6\x6d\x9d\x12\x69\x40\x8b\xcf\x80\x17\x37\xe0\xdd\x78\x69\x67\xa1\x59\xb7\xa1\x33\x3c\x78\xaa\xab\x01\xbd\x01\xbf\xed\x85\xcd\x2a\xf9\x36\x02\x56\xe4\x9f\x92\x0e\x00\xc7\x08\xf6\xcb\xae\xf5\x04\x70\x1b\x91\xc8\x89\xcf\x71\xc2\x9c\x74\xf4\x76\xa1\xeb\x1e\xda\xbd\x85\x09\xd0\x3c\x8b\x9e\xea\x11\x00\x5d\x76\xf6\xe1\x81\x9b\x3d\x0e\x00\xc3\x73\xcf\x71\x82\x3a\xba\xb1\xd8\x1d\x60\x30\x47\xc3\x8e\x6e\x90\xe1\xcd\xa9\x11\x00\x16\x80\xa7\x26\x61\xc0\xee\xf6\x6d\x76\xf1\xf4\xc5\x1d\x36\x38\xfe\xb9\x69\x1e\x70\x1d\x63\xdc\x25\xb6\xd3\x39\x8f\xd8\xdf\x41\xc5\x8b\xc2\x73\x3d\xc2\x9f\xb8\x0a\x9b\xad\x11\x7c\xdb\x98\xac\xcd\x36\x44\x5b\x24\x57\x6c\xed\xcd\x7d\xfe\x67\x8d\xed\xd9\x5e\xff\xb1\x13\x91\x88\x34\x13\xa5\x74\xa3\x9e\x6d\x14\x5a\xc9\x78\xb6\x5e\xcd\x34\xea\x6c\x3c\x91\x94\x60\x36\xdf\x6a\x31\xe9\x52\x26\xc7\x17\xa4\xb4\x54\x93\x4b\xf1\x1a\x97\x2d\x46\x2b\x72\xbc\xde\x2c\xe4\xbd\x12\xba\x8a\x64\xed\x6b\x24\xa2\xcd\x4c\x82\x2b\xe7\x51\x21\x9f\x92\x8b\xd1\x5c\x3e\x1e\xe1\x21\x23\x21\xc8\xb5\xd9\x62\x3e\x56\x29\x67\x13\x8d\x0c\x9f\x88\x64\xa3\xb9\x52\x36\x15\x2f\xa0\x0a\x2f\xb7\x1a\xf5\xda\xc3\x48\xe0\x06\x09\x03\x4b\x71\x26\x59\x93\x59\x46\xca\x35\x6b\xf1\x5a\x12\x4a\xad\xb4\xd4\x6c\x26\x9a\xcd\x3a\x53\x4f\x36\x5b\xad\x32\x27\xb7\x9a\x72\xb5\x98\x89\x35\xdb\x15\xa9\xc1\xf1\xcd\x02\x7a\x18\x09\xda\x88\xab\x5c\x6c\x25\x53\x59\x26\x9a\x82\xf1\x7c\x09\x45\x9a\xd9\x78\x2e\x1f\xcb\xc6\xd3\xb5\x7c\xb1\xc6\x24\x5b\xb0\x9d\x8b\x57\x92\x85\x7c\x2d\x2a\x17\xa4\x4a\x83\x2f\x45\xf9\x42\x93\x49\xbe\xf9\xcd\x4b\x59\xbb\xa9\x77\xfa\x7a\x9b\xcb\x77\x48\xc3\xfd\xdd\x26\xb7\x73\x36\xbe\x51\xe8\x1b\xe5\x58\x53\xf2\x80\x06\x9e\x67\x63\xf8\xd6\x3f\x77\x15\x75\xac\x7d\xaa\x45\x34\xc3\xe9\xe0\xe1\xa4\x87\xc7\xd3\x11\x5a\x8f\x99\x48\x35\xfa\xf6\x11\xdd\x79\x8a\x9d\xb9\x82\xbd\x56\x89\xbd\x8a\xdd\x4f\xf6\x43\x20\xbd\x7c\xb2\xe2\xdc\xb8\xf4\x8f\xf5\xf1\xa5\xe4\x07\xbf\x9d\xbc\x4b\x80\x38\x92\x33\xe0\xd7\xd3\x2a\x0f\x19\x01\x7c\xa3\xc0\x86\xae\xb7\xff\xfe\xec\x9a\xc9\x9f\xbf\x53\x3f\xb3\x34\x4d\xff\xbe\x5d\x89\xfc\xfc\x8d\xfa\xf9\x90\x64\xb3\x7e\x5b\xab\xc4\x0e\x3f\x3a\xcb\xc9\xe6\x47\x6f\xcf\x1d\x6a\xb8\xc9\x36\xeb\x3a\x7e\xbb\xf0\xe7\xff\xbd\xa6\x42\x5e\xde\xa0\x87\x37\xe6\x1b\x05\xff\x2e\xbc\x81\x3d\x6f\x3c\xe4\xf9\xbf\x6b\xbf\xb9\xbc\xfd\x9d\xfa\x6d\x3f\xde\x04\x80\x78\x78\xb1\xdf\xb8\x9b\xbc\x45\xaa\xd1\xaf\xca\x1b\xf4\xf0\x76\xa1\xdf\xfe\xb2\xbc\xed\xc7\x9b\xc0\xb2\x9c\xf8\x77\xed\x37\x97\xb7\xbf\x53\xbf\xad\xc7\x1b\x23\x08\x48\xa4\x59\x51\x60\xdd\x7e\xa3\x37\xcc\x0d\x8d\x91\xb1\xe1\x4d\x64\x18\x08\x79\x86\x86\x9c\xc0\xfe\x8e\x78\x9e\x15\x68\xfe\x2f\x35\xa7\x80\x1d\x8f\x80\xa6\x77\x36\xfc\xef\xc6\xe3\xbe\x1f\x01\x02\x3b\x7b\xe7\x8b\xc7\x2f\xac\xab\x87\x7e\x14\x98\x9d\x6d\xf8\xbb\xf1\x08\xbf\x51\x02\x2b\x88\x22\x14\x38\xc1\x9d\x46\x5d\x0e\x6d\x07\x5b\x8e\x31\xee\x76\x14\x3c\xc4\x63\x75\x43\x31\x38\x9e\x74\x1e\xc6\x80\x4e\x31\x5c\x98\xcc\xc0\xc5\xc9\x6c\x27\xa7\x31\x76\x8c\x19\xf1\xcd\xd1\xba\xdf\x5c\x96\xe6\xc4\xe8\xf6\xd6\x08\xc1\x37\xea\x67\xd7\x41\xef\x0c\xc8\xf2\xd3\xc6\xcb\x86\x2a\xc4\xf0\xdb\x69\xef\xb6\x9c\x5f\x10\xf4\x16\xc5\x15\x41\x07\x28\x69\x0f\x4f\x0f\x4a\xda\x5f\x68\xe3\xa9\x51\xeb\x52\xc5\x09\xdb\xc9\xf7\xe3\x24\xed\xa2\xf8\x78\x49\x7b\x78\x7a\x4c\xd2\x3e\x23\x55\x2e\x55\x77\x96\xc0\x97\xf2\xde\xfd\x2e\x81\x77\xb9\xef\x3b\x66\xb9\x6f\xd4\x9b\x8a\x30\x87\x79\xc4\x43\x86\x87\x02\x86\x2a\x8d\x45\x9d\x15\x21\x21\x44\x13\x31\x14\x21\xd2\x88\x26\x22\x56\x67\x21\x12\x39\x9a\x81\x3c\xd6\x45\x5e\x03\x08\x03\x51\x65\x34\x1e\xbf\x7d\xa3\xde\x00\x66\x59\xac\xe8\x0c\xd6\x91\x0a\x09\xcf\xeb\x2a\xc7\x72\x1c\x61\x18\xc2\x21\x8e\x87\x18\x62\x5d\x84\x44\xe1\xf5\xf5\x4c\xa1\x2a\x3c\xd0\x18\xc4\x02\x5e\xe1\x44\x4d\xd3\x21\x03\xde\xbe\x51\xdc\xe6\x7f\x27\x61\x49\xee\x3b\x44\xdf\x59\xde\x1b\xad\x74\x7f\xe6\x7e\x67\x39\x56\x10\xef\xbd\x64\x58\x9e\x13\x05\x1a\xf2\x3c\xf7\x8d\x02\xeb\xff\xd3\x67\xe5\x1b\xc5\xc0\xf5\xbf\x60\xfb\xcf\xee\x57\xb0\xff\x03\x7c\xa3\xde\x24\x49\x92\xa2\x8b\x49\xfd\x3d\x9c\x99\x55\x63\x2c\x0c\x27\xea\x23\x64\xb0\x83\xf6\xca\xe4\x42\x55\x0e\x0a\x08\xe7\x9c\x05\x3d\xa8\x35\x9d\x09\xd4\x73\xbd\xb6\x3e\x77\xf4\x65\x1b\xe6\x4d\x81\x65\xab\x89\x58\x72\x1a\x93\x39\x54\x4e\xa6\xea\x4b\x26\x56\x1f\xb7\x41\xb6\x31\xcd\x64\x6a\xfd\x02\xaf\xae\x41\x4b\xcd\x62\x3d\x97\x2b\x49\xfb\x52\xa0\xa1\x35\xa8\x54\x12\xa9\x54\xa8\x3a\xd2\x24\xda\x12\xaa\xbc\x56\xc9\x47\x1b\x78\xd4\x1a\x2c\x0b\xc3\x58\x9b\x87\xdd\xc9\xd4\x5a\xd6\xc2\xf6\x34\xc7\x2a\xbd\x74\x4f\x1b\xb7\xd2\x8b\x78\xbb\x65\xe8\x36\x3f\x4b\xc1\x4a\x23\x24\x25\xb5\xbc\x22\xc4\x0a\x02\x93\x2f\xaa\xd5\x94\xd9\x5d\x43\x6e\xe5\x51\x16\xaf\x26\xcc\x11\x32\xa9\x2f\x48\xa7\x25\xb7\xfe\xa7\x2d\x35\x01\x2a\x49\x52\x8c\x4e\x4b\x7f\xb5\xe2\xea\x14\x7d\x65\xd8\x7b\x47\x02\x1b\x8c\x16\xbf\x21\x41\xd4\x55\x88\x90\x00\x38\x8d\x87\x40\x65\x34\x24\xaa\x02\x43\xeb\xba\x8a\x59\x5a\x85\x0a\xa3\x0b\x8a\xaa\xea\x88\xa3\x81\xc6\x22\x45\x60\x09\xc7\xd3\x04\x08\x1c\x47\xb3\x02\x54\x6e\x8d\x04\xee\xaa\xb2\x0b\x2c\xa4\xe1\xdd\xb7\x0c\x40\x3c\x12\x20\x87\x04\xfa\xc6\x58\x00\xfc\x83\x63\x81\x36\xf4\x39\x5d\x89\x28\xcd\x9c\x9a\xad\x8d\x53\xa9\x62\x38\x53\xcb\x15\x96\xa1\xec\xaa\x58\xee\x26\xeb\x15\xd4\x1c\xa9\x85\x44\xa2\x15\xef\xf2\x68\x12\xc9\xf7\x4b\x53\xad\x5d\x22\x35\xa7\x10\x22\x3a\x1d\x1d\x2a\xed\x06\x1a\x25\xab\x76\x33\xe6\xf4\xfa\x12\x18\x31\xe1\x56\x2e\x53\x6f\x6d\xfa\x6e\x33\x16\x8e\xfa\x32\x95\xab\xd3\xa5\x55\xa9\xac\xd5\x46\x63\x40\xcf\x1b\x11\xf0\xde\x76\x42\xc3\x21\x17\x49\xd2\xd5\x7e\xb8\x99\xb7\x6a\x59\x34\x9f\xbc\x5b\x89\x19\x3f\xeb\xbf\x2f\x43\xd2\x64\xaa\x4b\x53\xb6\x19\xb1\x07\xd9\x48\x85\x14\x05\x32\x20\x56\xda\x18\xf1\xad\x9c\x50\x29\x81\x6e\xd5\xa8\x84\xe6\x6b\xc8\xb5\x0b\x63\x01\x0f\x3c\xaa\x94\x90\xfe\x4f\x8d\x05\x14\x8c\x1e\xbf\x11\xc2\x12\x05\xa9\x18\x8a\x2c\xd4\x01\x64\x38\x5e\x03\x2c\xcd\x40\x06\xb3\x1c\x80\xb4\x26\xb0\x3a\xa0\x11\x87\x69\x91\x45\x3c\xab\x32\x2a\xd1\x44\x9a\xf0\xb4\xae\xd1\x0a\xaf\x42\xdd\xdd\x0c\x40\x17\xd5\x9a\xbd\xa6\xed\x1c\x8d\x18\xee\xea\x48\xd9\xbf\x75\x57\xfd\x9c\x08\x04\x74\x6b\x2c\x80\x07\xc7\x42\x88\x25\x4e\xce\x64\x6b\x61\x79\xd9\x16\xe3\xa5\xd4\x72\xd2\x90\xe7\x4c\x5c\x28\x95\xdf\xa3\xf5\x32\x98\xdb\x7c\x3b\x36\x8e\x89\x51\x38\x0f\x37\xad\xf4\x64\x66\x58\x5c\x8e\x7d\x57\x75\x55\x2d\xcf\x75\xcc\xb0\x31\x81\x19\x0d\xc4\xcc\x7b\x7d\x1a\xea\xeb\x13\xc6\x5c\xd6\x05\x33\x82\x36\x7d\xb7\x1e\x0b\xd9\xf9\xa1\x2f\xe5\x59\x8e\x75\xaa\xc2\x90\xd6\xaa\x72\xbb\x94\xb5\x8b\x09\x73\x14\x49\xa8\xd5\xf4\x20\xd1\xae\xab\xd5\x79\x39\x1b\x03\xb4\x81\xe4\xa6\x22\xd4\x62\x4a\xcb\x31\xea\xa3\x34\x6c\x4d\xbb\x21\x42\x66\xc9\x30\x0b\xc7\x93\x6a\x29\x92\x61\xac\xa4\x99\x7c\x17\xdb\x4e\xd2\x9a\xe7\x50\x7d\x03\xb9\x74\x61\x2c\x94\x73\x97\xf4\xe9\x2f\x3e\x16\xd0\xe3\x63\x01\x06\xa3\xc7\x6f\x1a\xd4\x21\xd0\x91\x2a\xaa\xaa\x48\x58\x0c\x09\xc4\x6b\x73\xc3\x12\x82\x00\xe0\x55\x5e\x80\x8c\x02\xa0\xa0\x01\x8d\xd7\x31\xb7\x06\x4c\xd3\x98\xc3\x9a\xc8\x89\x40\x13\xf0\xcd\xb1\x80\xae\x6a\x3b\x23\x02\xd7\x2c\xdd\x7c\xbb\x8d\x12\x01\x41\x10\x6e\x8c\x85\x47\xcd\x82\x58\x5c\x25\xe9\xa5\xba\x24\x8d\x3e\xe2\x12\xc3\x3a\x61\x23\x71\x81\xc4\x32\x8b\x42\x3e\xd9\x0c\x8d\x26\x0d\x59\x9a\xbc\x33\x8d\x81\x66\xcc\xf2\xcb\x92\x66\x29\x43\x1b\xd3\x62\x65\x42\xf3\xce\xac\x4d\xb4\xd2\x5c\xea\x72\x93\x7a\x43\x9f\x3a\x22\xcd\x67\x1b\xb5\x68\x3b\x1a\xe7\x5d\x2d\xdc\x0c\x85\xee\xa1\x2b\xbb\x2b\x9c\x5e\xa1\xe6\x3b\xc0\x09\xc1\x9e\x2c\x81\x29\x8f\xf8\x77\x69\x38\xd5\x05\xbd\x44\x9c\x11\x84\x74\x4e\x17\xda\x23\x43\x0b\xc5\x1a\x5a\x28\xee\xf4\x9c\xac\x22\x0d\x99\x78\xdb\x8e\x84\x5a\xd0\xd1\x94\x71\x31\xe4\xd0\x51\x53\x08\x31\xa5\x1c\x7a\x1f\xdb\x7a\x28\x9c\xda\xc0\xcf\x5d\x18\x0a\x19\xaf\x8b\xb4\x29\xff\x77\x86\x02\x13\x8c\x1a\xbf\x71\x50\x13\x05\x9d\x85\x1c\x21\x9c\xa0\x01\x85\xe1\x15\x56\x11\x44\x9d\x81\x58\x67\x21\x00\x0a\xcf\x72\x22\x66\x90\x8e\x75\x80\x68\x88\x35\x5a\x61\x19\x85\x83\x50\xa1\x79\x85\x88\x6b\xaf\x1e\xba\xcb\xc0\x73\xad\xbe\xea\x04\x71\x2c\x4b\xb3\x57\x57\x0b\xfb\xb7\x6e\x38\x03\xb1\x22\x73\x63\x24\x3c\xba\x58\x60\x8a\xed\x3e\xc8\x4f\x59\x93\x56\xd2\x7c\x03\x8d\x97\x85\x59\x6d\x91\x80\xf5\x89\x39\x08\xcd\xe2\x52\xc1\x89\x82\x0c\x93\xe3\x23\x3c\xd7\x8e\x56\x84\x5a\x59\x5d\xca\xa8\x5b\x6e\xd9\x6d\x49\x53\x78\x82\xa6\xc9\xb9\x82\x25\x56\xef\xc5\x53\xb2\x2a\x81\x68\xa5\xcc\xc0\x36\x6b\x6e\x7a\x6e\x33\x12\x36\xca\x99\xda\xff\x23\x6d\x9e\xed\xc3\xf3\x5c\x2a\x96\xb6\xae\xcc\xca\x00\x8b\xee\x58\x86\x45\x49\x57\x98\xa8\x52\xe3\xb4\xb9\x91\xcc\xc2\x49\x78\xac\xe4\xe6\x7c\x63\xd2\x4c\x4f\x1a\x99\x29\x92\x2a\xd3\x3e\xac\xeb\xa5\x65\xad\xda\xc2\x55\x29\x59\x16\xb3\xa1\xca\x2c\x14\x71\x62\x7a\x1a\x98\x39\x8c\x9b\xa5\x7c\xbf\xd7\x96\xca\x8d\xcc\xaa\x26\x6d\x8c\x52\xea\xc2\x48\x91\xed\x4b\xda\xf6\x17\x1f\x29\xf0\xf1\x91\x02\x82\xd1\xf2\x4d\xc6\x3a\x45\xbb\x51\x15\x20\xf2\xf4\x6f\x34\xf8\x8d\x06\x14\x4d\x7f\xdf\xfc\xef\xaa\x36\x73\x1c\xcf\x5d\x77\x90\x76\x6f\x11\x23\x22\x91\xe3\x19\xf1\xd6\xca\xf8\xb2\xa6\xbb\x24\xfd\xe8\x4e\xb9\x5e\x22\xcd\x8c\x81\x96\xe1\x65\x25\x13\xe1\xd7\x7e\x57\x92\xa1\x17\xfd\x48\xc8\xa6\xbb\x8e\x3d\x4f\xcd\x57\xa0\xa9\x55\x1a\x2d\x1c\x49\xe3\xf8\x66\xba\x97\x2f\x28\xf1\xe5\xb2\x53\x62\x49\x8a\x78\x57\x09\x5f\xbe\xbc\xb9\xca\x74\x3f\xe4\xf4\xc0\x99\x70\xbf\x11\xa8\x2b\xa9\xfe\x47\x23\x67\x1b\xb1\xe1\x85\xcd\x3e\xc0\x95\x11\x77\x07\x0c\xb3\x03\x03\x80\xb8\xd9\xd6\xf3\x07\x06\xee\xc1\x70\x34\xc7\xfa\xa6\x06\xed\xc0\x30\x34\xe0\x80\x6f\x6a\xd8\x3d\x18\xc4\xb0\xbc\x6f\x30\xdc\x1e\x8c\x00\x59\xff\x22\xe6\x77\xf1\x04\x44\xb3\xbc\x7f\x6a\x84\x3d\x18\xc4\xbd\xd0\xe1\xe2\x1e\x8c\xc0\xbf\xd0\xe1\x80\xde\xc1\x61\x19\xe1\x85\x1e\x5f\xfb\x00\x5b\x38\x9c\xf8\x42\x97\x03\x66\x07\x87\x03\xf4\xba\xcf\xfd\xd2\xe3\xcd\x07\x82\x3e\xe1\x20\x6f\x5e\x91\x4f\x38\xac\x27\xcf\xc5\x2f\x3d\x9c\x37\x17\xc8\x27\x1c\xde\x93\xbf\xe1\x97\x1e\xc1\x9b\x07\xe2\x13\x8e\xe8\xc9\x4b\xf0\x49\x0f\x43\x7b\x73\x37\x7c\xc2\x01\x9e\x5c\x02\x9f\x7c\x31\x8c\x77\xbf\xde\x27\x1c\xe8\xd9\x13\xf7\x4b\x0f\xf2\xee\x3b\xfb\x84\xc3\x9e\xee\x84\x22\x9f\x60\x38\xcf\x86\xaa\x4f\x30\xfc\xe9\x6e\xa1\x5f\x6a\x04\xcf\x2e\xa7\x4f\x30\xe2\xe9\x8e\x9a\x4f\x6a\x20\xed\xd9\x6c\x0c\xe6\x7a\x97\x40\xd2\x5b\x6f\x9f\x3d\x5c\x2f\x18\x1f\xcd\x77\xbd\x72\xcb\xc9\xcb\xde\xd6\xb1\xaa\x1e\xb9\x57\x87\x07\x66\xb3\x7d\xeb\xee\xad\x6e\x4e\xbc\x6c\xb6\x56\xd9\x93\x7d\xd5\xa3\x2d\xd7\xe3\xdf\xdd\x6b\x24\xac\x9f\xbf\x53\xff\xfd\x59\xdb\xee\x8f\x8e\xd7\xff\x65\xff\xf7\x1b\xf5\xf3\xee\x3c\xc8\xcf\xdf\xd7\xce\xe7\xcf\xca\x74\x69\x8c\xbb\x9d\x8b\x49\x1b\x27\xef\x6e\xe5\x6e\xd8\x64\x38\x3c\x87\xb2\x4d\xe1\x39\x7d\x79\x0b\xcc\x09\xbe\x00\x32\x41\xce\x90\x07\x92\x5d\xf2\x01\x27\x21\xae\xaa\xc5\xce\x5d\xde\x3f\x08\x97\xd4\x82\xfe\x1d\x5c\xd6\x8a\xdb\x6a\x41\xef\xf4\xe2\x51\xb5\xd8\x76\xe8\x8b\x6a\xb1\x55\xae\xbf\xa3\x5a\x04\x7c\x76\xe5\xba\x5a\xb8\xcb\x9f\xc3\x03\xba\xa4\x16\x0c\x7d\x6d\xb6\x78\x68\xba\x60\xe8\x7f\xa6\x8b\xbf\xd8\x74\xb1\x5b\xcf\xee\x1f\xe8\x2b\xd3\x85\x5b\x4e\xd5\x42\xbc\xad\x16\xe2\x3f\xb3\xc5\x5f\x74\xb6\xd8\x85\x27\xf6\x0f\xdc\x65\xad\x60\x2e\x4d\x16\xde\xd3\x0d\x5e\xb5\x60\xff\x51\x8b\xbf\xaa\x5a\xb8\xe1\xa6\xc3\xc3\x45\x97\x93\xbd\x6e\x44\x1e\xb2\x22\xec\x3f\x56\xe4\x2f\x64\x45\x4e\x02\x88\xfb\x87\x2b\xf3\xc5\x5f\xc1\xe9\xf4\x64\x9d\x7e\x40\x7f\x7f\xda\xa0\x3d\x8e\xca\x1e\x1e\x7e\xc8\x3a\xf1\x5c\xaa\x01\x0d\xc6\xbf\xfa\xc8\xd9\x06\xbb\xf7\x0f\xd7\x96\x6b\x5f\xdf\xff\xfa\xbb\x0d\x9c\xed\xfe\xc1\xe1\xe1\xc7\x2c\x99\xfe\x19\x39\x57\xba\x67\xbb\x2d\xb3\x7f\xb8\xb2\x72\xf9\x2b\xf8\xa8\x7f\xb7\xa1\xb3\xdd\xea\x3a\x3c\x5c\xf4\x07\x3e\xde\x51\xfc\x67\xec\x78\xfb\xe7\xf4\xba\x84\xfd\x83\x3b\x76\xc0\xa6\x7f\x1c\xf3\xa5\xa3\x47\xdf\xa8\x9f\x75\xcb\x1c\xbd\xea\x11\x7f\xe5\xd3\xf2\x1f\x70\x81\xc8\xf5\xae\xda\xee\x8a\xee\x1f\xb8\xf3\xae\xf2\x7b\x76\xe9\x9f\xae\x0a\xb4\xab\x76\x97\x22\xec\x1f\x98\x2f\x3c\xaa\xbe\xde\x99\xf8\x4f\xed\xaa\xed\x5e\xfa\xfe\x41\xf8\xc2\xa3\xea\xff\x6c\x57\x9d\x5c\x7d\xb0\x7f\x70\xdd\x70\xee\xb1\xa3\xe5\x8e\x35\xb5\x1d\x42\x5e\xed\x8c\x0d\x18\xd3\x7a\x75\x08\x7f\x91\xf9\xf0\xc3\xbd\xc0\xd3\x04\x91\xfd\x03\xfd\x83\x7b\xee\x85\x11\xfd\x35\x7a\xee\x13\xfc\xc3\x93\x6b\x2a\xf6\x0f\xdc\xdf\x65\xcc\xfd\xb0\xd9\xf2\xb3\xc6\xdc\x36\x09\x6a\xff\xc0\xfc\x5d\xc6\xdc\x8f\xea\xb9\x8f\x1f\x73\xc7\xf9\x62\xfb\xbf\x85\xa3\xcb\x18\xf4\xe9\x58\xdb\xf2\xe2\xf3\x86\xc8\x8d\x5c\xdc\x7b\x1a\x5f\xde\xaa\xb8\x7f\xd7\xc9\x8b\x57\x59\x3e\x23\xb6\x6d\x62\xdb\xfe\x6f\xf4\xb1\x62\xf3\x3f\x0d\x3d\x72\xa1\xc6\x67\xca\xcd\x4d\xc1\xdb\xff\x4d\x7f\xa8\xdc\x5e\x98\x04\x3e\x41\x6e\x77\x12\xfa\x2e\x7c\x63\xeb\x91\x64\xbe\xfb\x50\xef\x7f\x6e\xc8\x6f\xd2\xe0\xd5\xcf\x14\x5c\x3c\xa4\xc1\x5c\x4f\x9a\xbd\x0b\x88\xf1\xa4\x9a\x5d\xcb\x30\xbd\x0b\x08\x7a\x93\x93\xfc\x02\x42\x9e\x6c\x16\xdf\x14\xb1\x9e\x04\x08\xdf\x80\x38\xef\x96\xb9\x5f\x40\xde\x2d\x56\xdf\x14\x09\xde\xfd\x40\xbf\x80\xbc\x5b\x57\xbe\x29\x3a\x3d\xb6\xf1\x4a\xff\x03\xef\xa6\x80\x7f\x9a\x18\x6f\x08\xdb\x37\x24\xe8\x09\xb6\x5e\x4b\x0b\xbf\x0f\x09\x79\x20\xf9\xe7\x8e\xf5\x44\x15\xfd\xd3\xc4\x79\xe3\x93\xbe\x21\xf1\x9e\xf0\x99\x7f\x9a\x04\x0f\x24\xff\x72\x3a\x8b\x13\xf9\x9e\x2b\x69\x0f\x24\xdf\xdc\x9d\x1e\xe6\x40\x2f\x70\x77\x7a\x9c\x83\x7e\x85\x3b\xe8\x59\x30\xfa\xa7\x09\x79\x17\x30\xbe\x21\xb1\xa7\x1e\xf5\xb5\x83\x0b\xf7\x01\x71\xa7\x80\xfc\xf7\x1c\x7f\xea\xac\xfa\xa7\x48\x38\x05\xe4\x5f\xda\xa2\xc7\x0d\xf4\x6d\xc1\xe9\x53\x40\x28\xa8\x2f\x0e\x06\x72\xc0\xe3\xde\x37\x97\x9e\x39\xe2\x71\xf5\x93\x7b\x01\xf8\x6b\xc7\x5f\x60\x61\x88\xa2\x28\x1a\x4b\x33\x0a\x61\x44\x56\xa0\x19\x41\xe0\x75\x9d\x66\x75\x56\x55\x05\x41\x50\x11\x64\x79\x0c\x55\x4e\x15\x80\xce\x29\x40\x53\x34\x8d\x00\x02\x75\x05\x8a\x82\xa8\x6c\xaf\x64\x7b\xe9\x3b\x0c\x47\xd7\x29\x08\xbb\x63\xe4\x57\xaf\x6b\xe3\x18\xfa\xea\x91\xf5\xfd\xdb\x13\xb7\xd3\x3d\x7f\x9e\x60\xcd\xb4\x53\xd7\xc6\xad\x42\x5d\x6b\xbf\x3b\xcd\x49\x35\x19\x71\x14\xb5\x45\x8f\xa2\x23\x5d\x8d\xa4\x32\x72\xb7\x31\x1e\xce\xe2\xa9\x1e\x96\x36\xe7\xb7\xa5\xdd\xfd\x08\x09\xcf\xf1\xe8\xc8\xe1\xcf\xcd\x75\x23\x91\x7a\x3d\x2f\xbb\xcf\x51\x30\x8d\x68\x49\xb3\x3a\xed\xe6\x66\x25\x27\xc6\x47\x7a\xa9\x2c\xcc\x13\x51\xab\x17\xf5\x44\x2a\x94\x36\xd8\xf4\xac\x56\x08\xb5\x25\x87\xdf\x5c\x8a\x10\x8f\xd6\xe5\xed\xc5\x39\xd9\x06\x8a\xd3\xa4\x57\xe0\xa4\xa5\x18\xa5\x8b\x76\x42\xee\xce\x54\xc0\x03\x50\x13\x85\x56\x1f\x8d\xb2\x83\x91\x58\xe2\xd9\x41\x14\xce\xdc\x06\xbb\xf3\xe5\x52\x71\xf3\xef\xc5\x23\xe9\xf1\x3d\x3f\xa5\x74\xb9\x5d\x09\x39\xf9\x52\x3d\x3b\x9f\xa8\xd9\x52\x4f\xeb\xa7\xb5\x62\xb6\xb7\xca\x39\x19\xba\x28\xb4\xb2\xa3\x7e\x15\x45\x66\x89\xbe\x99\xe0\x75\x36\xac\x8a\x4e\xc8\x2e\xeb\xef\x6c\x1a\x36\x13\x88\x97\xe7\xe3\x50\x65\x55\x18\xab\x62\xbd\x8e\x4a\xf3\x59\x36\xab\x4d\x6d\x63\x3e\x97\xfe\x7c\x3b\x3e\xdf\x9f\x38\x22\xe2\xf0\x67\xec\xe2\x21\xf3\x27\xfb\xc3\x2d\xea\x17\x96\xf7\x9f\x07\x59\x1c\x2e\xdc\xd8\xf0\x1e\x39\xba\x8a\x46\x19\x75\x47\xa0\xce\x68\x5d\xb6\x0e\x46\xef\x80\x0c\x73\x6a\x02\x38\x8b\x7e\xa5\x95\x69\x8b\x73\xb9\x6b\x56\x22\x98\x34\x84\x9a\x11\xdf\x5c\xe0\xd1\xac\x24\x95\x81\x7b\xbf\xd3\x06\x5e\x7c\x03\xef\x0c\xb7\x7c\xfa\xb8\x7e\x9f\x1c\x5a\xf4\xf8\xe2\x4d\x34\xc7\x6d\x8e\x74\x3b\x32\xc5\x51\xa5\xde\x6c\x33\xb1\x61\xb3\x81\xad\x3a\x57\x5b\xcc\x95\x06\x4c\xe4\xd3\xdd\xc9\x18\x4a\x95\x68\x2f\x15\x9f\xb0\xca\xa2\x92\x6a\xac\xf9\x89\x68\x29\x6d\x5a\x75\x39\x73\x6f\x0b\xdc\xd3\x77\x46\xcb\x11\x92\xf5\x3f\xa4\x31\xab\xe8\xf3\x1b\xa4\x6d\xda\xa8\x07\xf9\x95\x0e\x3c\x3e\x29\xbf\x17\x74\x65\x3a\x28\xc0\x92\xa4\x87\x77\x45\xd8\xd3\x7f\xd6\xf7\x93\x86\xda\x3f\xe3\xe7\x48\xbe\x25\x1f\xf2\x95\xe2\xf5\x1a\xbd\x45\xf4\xa4\xae\x46\xb9\x12\xaf\x49\x91\x3d\xe5\xe1\xf9\x9e\x9e\x88\x87\xc8\xe8\x88\x4d\x5f\xe9\x89\x4d\x7f\x46\x37\x7f\xfe\xed\xc6\xaa\xb4\x9b\xbb\xbf\xb0\xfe\xb7\x0e\xcf\x4f\xca\x3f\x4e\xf7\x18\xb6\x20\xed\xfb\x2f\xd2\xf5\xc0\x3b\xa2\xe5\x50\xd6\xdd\x14\x61\xb1\x98\x0e\xdf\xa0\x2c\x76\x68\xe8\x6f\x3c\x96\x86\xe5\xad\x3d\x78\x56\x1f\x20\x2a\x83\xee\xe5\xf1\xe8\xe1\xc9\xe5\xf7\x0b\xd1\xe7\x8e\xff\x36\x8e\x5e\x9b\x8f\x8f\x6c\x87\x7b\xad\x98\x74\xaa\x4b\x7e\x74\xb3\x95\x3b\xc0\xab\x49\x5f\x4a\x37\xf1\x86\x28\x57\x37\x4b\x7b\xfa\xce\x68\x39\x94\xbb\xba\xb9\x91\xdf\x7f\x87\xf1\x61\x96\xa3\x41\xa4\x36\x8b\x0e\xe7\x4e\x34\xce\xe4\x86\xb4\x30\x4d\xe6\x96\xb4\x55\x0a\x2f\xba\x53\x9c\x2f\x76\x13\x02\x2e\x74\x15\x27\x3c\x16\x57\x0c\xe4\x16\xf1\x90\x35\x18\x6b\xaa\xd2\xb7\xab\x51\x9d\xcd\xe6\x38\x6d\x05\xea\xcd\x5e\x2c\x2a\xd8\x0e\xc3\x2d\xb3\xb1\x75\xe7\x6c\x82\xbf\x9b\x8f\x06\xef\x2e\x5b\x72\xff\x5d\x3b\xf2\x1b\x87\xf5\xfe\x6a\xe6\xc8\xe3\xe6\x69\x40\x74\x4c\x2b\x34\xc3\x70\x44\xe4\x80\x06\x81\xa6\xf3\x48\x47\x8c\xc0\x88\x02\xa3\x20\x1a\x09\x0a\xa3\x88\x02\x12\x09\x86\x3a\x4f\x68\x06\x23\x20\xb0\x00\x68\x3c\x16\x55\xd6\xf5\xb8\x5f\xfa\x28\xd9\x73\x1e\x37\x2b\x5c\xbd\x39\x70\xff\xf6\x24\x3e\xeb\x6a\x72\x86\xeb\x13\x03\xf6\x47\x66\x4a\xa8\x26\x86\xb1\x30\xe9\xaa\x90\x2f\x36\x9d\x64\x26\xb3\x6a\xd4\x85\x79\xdd\x68\x47\x70\x74\xca\x66\xd9\xed\x1d\xc2\xd2\xc3\x1e\xb7\xff\x51\xea\xdf\xaa\x4a\xb1\x29\x5e\x76\x0f\xf4\x44\xbb\x97\x14\x31\xb1\xe7\xa7\x54\xe8\xca\xab\xa1\xa5\xa7\x96\xab\x16\x2c\xd4\xa7\x0d\xad\x5c\xa8\xf5\x79\xb8\xcc\x46\x52\x4e\x1d\x8c\x26\xed\x61\xa3\x50\x68\xe7\xba\x2c\x27\xd4\xfb\xef\x80\xc3\x36\x59\x56\xbb\xb3\x5a\x2d\x32\x6b\x8c\x22\xa5\x42\x5f\xcb\x66\x63\x76\x8b\x9f\xd5\x60\xa5\x2c\x94\xa5\xae\x11\xcd\x49\x03\xff\x1e\xf7\x93\xfd\xe1\x96\xee\x17\x96\xf7\x63\x1e\xb7\xf5\x9e\xe7\xb2\xa4\x80\xbb\xfd\x45\x0e\xd7\x8a\x22\x17\x59\xe9\xb6\x48\x68\xd5\xb4\xf2\xed\xe6\x2a\xd2\x48\x0f\xe2\x66\x86\x1f\xcc\x06\x1b\x82\xfd\x7b\xdc\x47\x25\xa6\xf7\x92\x8d\xb3\x0e\xf0\x7a\xdc\xd1\xa9\x09\x4d\x07\xb1\xef\xd1\xa2\xbc\x98\x94\xc2\xd0\x4c\xe6\x43\x2b\xc0\x97\x97\x86\x0d\x86\x7a\x2e\xde\x1a\x95\x1a\x5d\x6b\x5a\x09\x55\xa5\xd7\x3c\x8e\xa3\x92\x0f\xc9\xda\x99\x2b\x70\xe6\x71\x07\x27\xbf\xc4\x17\x97\x9f\x77\xae\xf1\x27\xbf\xf9\xbe\xa1\x5b\xff\xd9\xb1\x56\x4b\xd7\x4a\x5b\xab\xeb\x28\xdd\x66\x99\x93\x79\x33\x96\xa5\xb3\xa5\xd0\xbc\x55\x89\x8a\xab\xe6\xac\x59\xaf\xc2\x85\x51\x34\x5a\xd3\x8a\x02\x62\xb3\x51\x29\x4b\x84\x03\x3d\xc9\x83\xb3\x7f\x49\x9e\x47\x56\xfb\x0b\xd1\x27\x7b\xa5\xc8\x8f\x6c\xf3\x4c\xb4\xd2\x5e\x1f\xdd\xdb\x2a\x9f\xd4\xc7\x4d\x71\x97\x31\x2f\xac\x28\xea\xf5\x6a\x59\xf2\xc5\xbf\x54\x60\xad\x8c\xdb\x72\xc3\x6f\xe6\x22\x83\xee\x1d\xe3\xfe\xfb\xc7\x3f\x7d\xd9\x49\xcc\xa1\x6f\xf4\x4f\x74\xd8\x5e\x16\x2f\xd2\xbc\xed\x1a\xc9\xe3\x71\x3f\xd9\x3f\x1f\xb8\x42\xcf\x28\x83\xf1\x35\xb2\xef\x79\xdc\x7e\xe6\x16\x7f\x1e\xf7\x51\xb9\x31\x37\x1f\xfd\xfc\xa4\x6e\xf8\xf7\xb8\x8f\x8b\xbb\xba\x39\x16\xe0\xc6\xe3\xe6\xa4\x6a\xa1\xe1\x08\xfd\x6c\xbe\xaf\xb2\x0d\xb6\x0d\x64\xb6\x52\x9c\xe9\x29\x5b\x36\x40\xb3\x81\x87\xa3\x7a\x0b\xb1\x83\x65\x6c\x6c\x2d\x1a\x05\xab\x39\x79\x5f\xf0\xe9\x42\x54\x2c\x97\x12\x22\x6e\xc5\x25\x2e\x4f\xdb\x76\x61\xd1\x9f\x8a\x55\x2d\x9d\x5c\xc8\xd1\x68\x2a\x35\x8f\x96\x82\xf6\xb8\x31\x02\xac\x02\x44\x46\x87\x3c\xa4\x31\x24\x3a\x80\x22\x0d\x59\x1d\xaa\x1c\x4f\xa0\x02\x68\x8c\x08\xe6\x44\x5d\x67\x01\x62\x75\x88\x79\x8e\x03\xac\x0a\xb0\xc0\x20\x9a\xd6\x54\xd1\xf5\xb8\x61\x40\x31\x6e\xf1\xbe\xc7\x2d\x5c\xbd\x8c\x7b\xf7\xf2\x24\x8d\xe1\xd5\x08\x77\xf2\xba\x2e\xfc\xc0\x08\xf7\xc1\xff\xab\x1d\xc6\x81\xb7\x1c\x45\xb8\xf3\xc5\x56\xbf\xba\xac\xf2\xe1\x51\x0b\x63\xa6\x34\x50\xe2\xab\xd8\x88\xee\x67\x27\xd9\x58\x2f\xed\xb4\xa5\x90\x95\xce\xa7\xcb\x7c\xa5\xaa\x4f\x23\x6a\x2d\xdd\x54\xd9\x46\xa8\x36\x6f\xd8\xe1\x79\x0a\x32\xc6\x7c\x8a\x0c\x52\x83\x43\xcc\x4d\xd2\xa9\xc1\x3c\x15\xa6\xb5\x77\x4e\x2b\xcd\x3f\x39\xc2\x3d\xf8\xc2\xf2\xfe\x94\x08\x77\xc2\x0b\xcf\x2d\x5f\x21\xc2\xad\x4a\x8f\xfa\x8b\x4f\x47\xb8\x5f\x88\x58\x7d\x4e\x84\x7b\x5a\x51\x6f\xc9\xf7\x0b\x47\xb8\xc1\x92\xe6\xce\x48\xdf\xd4\x0f\x30\xc2\xea\x85\x77\xa4\x0b\xa7\xf2\xba\x1b\x61\x3d\xf2\xa7\xdc\xf2\xe2\x78\x4a\x1e\xe8\x3b\xeb\xbb\x43\x79\x68\x3c\xb9\x92\xda\xfc\xeb\x86\x05\x9e\xec\xef\x4d\x71\xef\x74\xf7\xef\xaf\xbe\x10\x8b\x38\xac\x2f\xe2\x97\x64\xe0\x96\x97\xc7\xe3\x8f\x89\x20\x4b\x41\x8c\x47\xdf\xb6\xc3\x5d\xaf\x5f\x1f\x8f\x91\x52\x3c\x2c\x5e\x99\x0f\x2f\xf8\xe1\x2f\xce\xd9\x0d\xf3\x00\xef\x8b\x45\xbe\x6b\x1b\x20\xc1\x47\xbe\x69\xd1\xc8\x17\xd3\xc5\x59\xa8\xdd\x9b\x58\xed\x68\xd9\x6e\xe6\x0a\x4a\x25\x37\x1d\xd8\x05\x79\x04\x06\x31\xce\x1e\xd0\xc3\xa4\x93\xce\x87\x50\x7c\x51\x1a\x6a\xab\xa1\xc2\x56\x23\x78\x15\x96\xfa\x3a\xce\x46\x79\x23\xcd\x56\x49\xdd\x7a\x1f\x0c\x8c\xaa\xd4\x0f\x97\x19\x6b\x02\x62\x81\x47\xbe\x59\x4d\xd1\x74\x0d\x62\x45\x04\x3a\xc2\x2c\x83\x01\x50\xb0\xc8\xa8\x1c\x0d\x21\x52\x54\x4c\x6b\x08\x63\x4d\x64\x81\x4e\xa0\x06\x58\x51\x81\x3c\xc4\x3a\x56\x30\xe0\x20\x43\xf0\x36\xd7\x04\x05\x14\xf9\xbe\xef\x87\xf3\x34\xc3\x5c\x77\xc4\xb7\x6f\x4f\xf2\x80\x5f\x8d\x7c\xdf\xf5\xc4\x7f\x48\x24\xb6\xd7\x5b\x24\x8e\x23\xb1\x17\x3d\xf1\xa3\xc8\x77\xcc\x4e\x66\x57\xb1\x30\xff\x1e\x76\x22\x38\xee\x84\x66\x59\xc1\x9e\x8d\xd1\x12\xbe\x03\x29\xbe\xc8\xa5\x5a\xd3\xaa\x90\xcf\xad\x14\x7b\x5e\xb7\xa3\x35\x35\x9b\x02\xa5\xe1\x60\x11\x29\x35\x9c\x08\x5f\xe9\x9b\xb1\x52\xce\xd1\x38\x2d\x2d\xe3\x02\x33\x9d\x8c\x8a\x4d\xb1\x08\x8b\x52\xe9\x93\x23\xdf\xaf\xce\xe6\x1f\x29\xef\x4f\x89\x7c\x3f\xee\x89\x1f\x95\xcf\x89\xdc\x3e\xee\x89\x1f\x95\x7b\x91\x6f\x49\x0a\x22\xd2\xf8\xa2\x25\x7d\xc1\x33\x8a\x26\x92\x32\x3e\x92\xf7\xe5\xaf\xe7\x1c\x3c\xd5\x2f\x17\x69\xbc\x9e\x8b\x72\xe8\xcf\xaf\x19\x69\xcc\x36\xb3\xd5\xcb\x91\x6b\xb7\x78\xbd\x9a\xaf\xa6\xff\x2f\x46\x17\xcf\x56\x42\x67\x6b\xc5\x67\xa3\x8b\xd2\x25\x4f\xfc\xd9\xfe\xfe\x38\x4f\xfc\x98\xca\x7d\xd4\xc4\xcb\xdf\x91\x27\xfe\x64\x7f\x7f\xa0\x27\x7e\x54\xa2\x75\x69\x76\xf2\x6d\xa2\xdb\x9e\xb8\x1f\x9d\xf5\xe7\x89\x1f\x95\x8f\xd3\x59\x5f\x9e\xf8\x71\xb9\x12\x11\x2f\xcc\xd5\x59\xae\x18\x9e\x5a\x21\x3a\x6e\x36\x20\x27\xcc\x96\xcb\x90\xde\xcf\x12\xab\x26\x35\xe5\x79\xcf\x60\x8b\x73\x7a\x95\x9f\xae\x22\x8d\x79\xba\x3c\xb7\xfb\xf5\x68\xa3\x2a\xc7\x23\x98\x4e\x3a\x99\x42\x37\x2f\x2d\x01\x9c\xd0\x83\xb2\xc9\x63\x6e\xd4\x12\x75\x3a\xac\x0a\x91\xc0\x3d\x71\x4d\x57\x75\x1a\x88\x44\x50\x79\xc0\x88\x34\x8d\x04\x4d\xd5\x68\x82\x74\x4c\x03\xcc\x69\x3c\xc3\x0b\x50\xe0\x14\x48\x38\xcc\x8b\x50\x41\x2a\x0b\x35\x8d\xe7\x59\xa0\x6a\x8c\x20\x92\x6d\x44\x9c\x0d\xc4\x13\xe7\x0e\x9f\xc9\xbb\xee\x6b\x33\xf0\x46\x0e\xca\xf6\xed\xc9\x41\xba\x57\x3d\xf1\xd4\x75\x6d\xf8\x71\x9e\xb8\x1b\xf7\x3a\xd0\x73\xbe\xaf\x2e\x9d\x7a\xe2\x69\x2e\x61\x8f\x32\x0b\xd2\xef\xa5\x2a\xa3\xcc\x34\x9b\xd2\xe2\x9c\x66\x2c\x62\x73\xc9\x48\xbc\x27\xa2\x89\x45\x9a\x85\x8d\x82\x19\x97\x16\xd3\x9a\x36\x91\x66\x16\x5c\xd4\xd9\x54\x6f\x16\x1e\xf7\x05\xad\xcb\x96\x9d\xc8\x4a\x11\x32\xad\xa8\x59\x68\x55\x0d\x25\x5e\x8e\xe5\xac\xc8\xbc\xf6\xc9\x9e\xb8\xfd\x85\xe5\xfd\x29\x9e\xf8\xe3\x31\xbc\xa3\xf2\x39\x9e\x78\x57\xba\xb0\x6a\xfd\x1a\x9e\xf8\xab\xfb\x21\xaf\x7a\xba\x07\x79\x9f\x5b\x3d\xe9\x6b\x7b\xe2\x17\x63\xe6\x9e\xfe\xfc\x9a\x9e\x78\xcd\x2a\x94\xd1\x0d\xd2\x83\xf6\xc4\x83\xd6\xff\xe0\x3c\xf1\xe8\x81\xc8\x1b\xb4\xfc\x8d\x3c\xf1\x61\x29\xcb\x9e\x09\xf5\x2f\xe1\x89\x9f\xe9\x43\xf0\x9e\x78\x5d\x3e\xc0\xfb\x62\x9e\xf8\xf1\xea\x31\x48\x4f\x7c\x6c\xe2\x65\xcb\x8a\x73\x05\xb9\x97\x69\xbd\x23\xbb\x47\x37\x27\x4c\x56\x2e\x4a\xd1\x14\x36\x5b\x29\x45\x1e\x8f\xb5\x16\xd7\xad\xc5\x12\x6c\x99\x19\x44\x43\x33\x3d\xde\x1c\x18\x89\x70\x88\x14\x17\x4c\x6c\x98\xa0\x93\xf9\xd9\x7c\xd2\xcd\x74\xd9\x5e\x21\x6d\xd7\xe5\xdc\xd2\x4e\x46\x02\xcf\x4d\x41\x02\x64\x44\x41\x47\x34\xe6\x45\x1d\x71\x3a\x27\x20\x15\x01\x8d\x61\x34\xa4\x89\x34\xa3\x03\x0d\xea\x44\x61\x21\x56\x08\xcb\xb2\x40\x83\x58\xe3\x44\x4d\x15\x20\x83\x68\x81\x66\xb7\xd9\xe0\x5c\x20\xb9\x29\x0f\x79\xe2\x08\x0a\x37\x3c\x71\xf7\xed\xc9\x4d\x14\xaf\x66\xa7\xdc\xf5\xc4\x7f\x48\xb6\xc4\x61\xb6\x59\x1e\x46\x82\xb7\x1c\x65\xa7\x14\xe4\xe2\xa0\x10\x76\xde\xab\x68\x50\x8a\xac\xf2\xc3\x6a\x81\xac\xda\x8e\xb1\x54\xa6\xf2\x40\x1c\xe5\x46\x8b\x44\x3f\x3b\x1c\x25\xa7\xa4\x21\x94\x9c\x5a\x05\xa5\x41\x01\x36\x7a\x4b\x94\xcf\xf4\x84\xd9\x7c\x64\x8e\x33\x25\x30\xcd\x4d\xa2\xb9\xf0\xaa\x55\x5e\x4d\x47\xfd\x8a\x3c\x7d\x25\x1b\xdc\x57\x76\xca\xab\xd6\xfb\x23\xe5\xfd\x29\xd9\x29\x01\xee\xa6\x07\x9d\x9d\xf2\xb8\x27\xf2\x44\x76\x8a\x24\x79\x3c\xf1\x27\xe5\xb7\x29\xae\x02\xbe\xb0\x1f\xe2\x3f\xfb\xf8\x10\xe3\x8a\xa5\xa4\x0b\x56\xcd\x2d\x5e\x4f\xfc\xd9\xb1\xf1\x71\x9e\xf8\x51\xb9\x18\x63\x7e\xf9\xbc\xdb\x67\x64\x0f\x45\x2a\x36\x9b\x3c\x73\x2a\x83\x3e\x7f\x19\xb4\xfe\x07\x97\x1d\xf4\xb8\x27\xfe\xe0\xf9\xcb\x2f\x99\x9d\x52\x8b\xe8\xe1\xf3\x1c\xb1\x53\xfe\xbe\x66\x76\xca\x2d\x7d\x08\x3e\x3b\xc5\x9f\x27\xfe\xe9\x67\x86\x83\xcc\x4e\x41\xa5\x50\x89\x0f\x31\x93\xa2\x51\x96\x92\x39\xa6\x9e\x63\xf9\xfc\x88\xc9\xa6\xa7\xa8\x52\x65\x5a\x4b\x45\xc6\xb9\x69\xa3\x45\x58\x56\x59\x44\x41\x39\xdb\x1d\xd7\x78\x0d\x27\xb3\x5d\xfa\x3d\xb9\x0c\x47\xb1\xa1\x4e\x62\x0d\xb4\x1c\xa4\x56\xe1\x7c\x2f\x59\xe0\x70\x3e\x55\x41\xc1\x67\x89\xeb\x88\x51\xb1\x4e\x2b\x04\x61\x2c\x70\xbc\xae\x63\x01\x32\xba\xa0\x8b\x0c\xab\xf0\xac\xaa\x0b\xa2\xc2\x72\x80\x65\x19\x81\x06\x1c\x51\x78\x82\x11\x8f\x19\x81\xd5\x18\x11\x88\x98\x53\xdf\x36\x01\x71\x10\x50\x76\x0a\x7b\xcf\x13\x17\x58\x96\x86\x57\x3d\xf1\xdd\xdb\x93\xab\xdc\x5e\x8d\x89\x7b\x3d\x49\xaf\x27\xee\x96\x8f\x3e\x2b\x83\x77\x71\x85\x88\x44\x96\x05\x25\xd1\x1b\xcc\x17\xe6\xb8\x19\xae\xa7\xc2\x7d\x55\xef\x5b\xc9\x82\xd6\xcb\xc5\x52\x62\x8d\x9f\xa2\xcc\xa2\xde\x97\x60\x33\xf9\x3e\x68\x20\x39\x3f\x37\xad\x12\x3b\x6a\xc7\xca\xfd\x3e\x23\x30\x58\x95\x12\x82\x9a\xd3\x1b\x89\x59\x4b\x8f\xab\xa5\x7a\x5d\x6b\x72\xcc\x38\x3a\xff\xf3\x93\xe3\xdb\xf2\xa7\xc8\xee\xaa\x77\x7c\xc4\x9e\x8f\x38\xf5\xc8\x15\xc4\x06\xde\x15\x43\x77\x31\xcf\x52\xba\x14\x53\x7f\x11\x7f\xcc\x3f\xfe\xa0\xcf\xff\xe4\x0e\xf2\x38\x2e\x17\x57\x89\xd2\x85\x38\x71\x20\xf8\xcf\x75\xf4\x76\x8c\xe7\x48\x87\xbc\xa5\x76\xe0\xe7\x0b\xeb\xf8\xa6\xbc\x7a\x16\xf3\x43\xbc\x79\x6f\x1f\x7c\xc9\xb3\x7e\x52\x44\x6f\xf6\x2e\xf7\xbf\x74\xe9\xbc\xdc\x91\x7e\xf9\xd1\x57\x15\x1d\xe0\x1d\xcd\x1f\x67\xb2\xba\x54\x82\x18\x2f\x4a\xcd\x1f\x7e\xd7\x3e\xfc\xf7\xa3\x8c\x4f\xb0\x5e\x0d\xa7\xab\x8a\xaa\x2b\xaa\x46\x68\xac\x71\x84\xd1\x30\xe2\x01\xc3\x41\x88\x10\x80\xa2\x80\x34\x1e\x42\x5e\xd3\x75\x2c\xaa\x2c\xe4\x75\x85\x66\x39\x51\x17\x90\xa0\x40\x8d\xd1\x39\x9d\x71\xbd\x1a\x26\xa0\xb3\x6f\x0f\x78\x35\x9c\x28\xde\xf0\x6a\xdc\xb7\x27\xf7\xca\xbe\x1a\x5f\xbc\xe7\xd5\xbc\xb0\x46\xde\x02\xdc\x8f\xaa\x8b\x77\xd6\xb8\x65\xbf\x46\x8b\x48\x0b\xbb\xdb\x5b\xc9\xbd\x59\x69\x94\x8a\xd6\x55\xb5\x5f\x31\x97\x62\x89\xc9\xd6\xfa\x4d\x73\xc8\x31\xe9\x61\x44\x13\xec\xde\xa8\x3c\x7f\x2f\x88\xcd\x25\x19\x4e\x2a\x2d\x96\x45\x8a\x36\x4a\xbe\x73\x8b\x77\x95\xeb\xb7\xda\xe6\x5c\x64\x59\x19\xf1\xc5\xc6\x7b\x54\xd6\x49\xbd\xd7\x7b\xc9\xab\xf1\x15\x2b\x4c\x7d\x8a\xec\x1e\xf1\x6a\x7c\xc4\xfc\x02\xf5\x6a\x5e\xc4\x1f\xa0\x57\xf3\xea\x3d\x42\xaf\x7a\x35\x81\xe0\x7f\xcc\xab\x89\x0f\xcd\xec\xad\xf5\xb2\xd7\x4b\xf8\x12\x31\x3f\x2f\x4f\xb5\x2f\x46\xdf\x99\xce\xc5\x45\x72\x59\x0f\x23\x87\xf1\xe8\x2b\x66\x2c\xbd\x78\x42\xd0\x4b\x5f\x6c\x7e\x91\xfe\x3b\x5e\x8d\x1f\x7d\x0d\xd2\xab\xf1\x83\xff\x45\xaf\xe6\xa3\x8c\x4f\xc0\xf9\x8b\xaa\x06\x58\xa0\x6b\x18\x32\x88\x11\x01\xa3\x31\x3a\xe1\x01\xa1\x81\x00\x74\x81\x16\x68\x4e\xa7\x05\x80\x39\xa0\xea\x88\x47\x9c\xc0\x43\x85\x21\x2a\x60\x15\x05\x28\x98\x40\x91\x75\xbd\x1a\x18\x50\xac\x86\xbb\xef\xd5\x08\xdc\xf5\x5d\xd3\xdd\xdb\x93\x4b\xee\x5f\x8d\xd5\x78\x55\x3d\xe8\x58\xcd\x63\xa7\x0d\x8e\x62\x35\xef\xc5\x05\x27\xbe\x57\x62\x40\xc8\xc3\x56\x86\x5d\x69\xf9\xd5\xb8\xad\x4d\x9a\x91\x81\x62\xf6\xd2\xd5\x69\x34\x33\x6e\x0d\x69\xad\x54\x94\xe4\x70\xb2\xb1\x90\x04\x3d\xaf\xd7\xbb\xdd\x7a\xdb\x49\xe0\xc4\x40\x68\xe5\xd4\x64\x18\x69\xb3\x08\xbf\x22\x89\xb8\x58\x91\x4b\x66\xa5\x14\xe9\x7e\x76\xac\xe6\x73\x64\xf7\x09\xb1\x1a\xf7\xcf\x27\x73\x0a\x6f\x64\xbb\x07\x18\xbb\x28\x49\x81\xc5\x2e\x3c\x51\xec\x63\xab\xe4\x27\xa7\xf0\x48\x5e\x2f\x78\xb6\xa9\x96\x5a\x36\x8f\xe8\x1b\x9c\x91\xfd\x01\xfd\x2d\x7b\xe8\xdf\x96\x2f\xd3\xdf\xe7\x6e\xc4\xed\xfe\x3e\x3b\xbd\x70\xe0\xef\x2f\x17\x5b\x91\x4e\xbd\xf6\xaf\x96\x53\x19\x89\x0c\x32\xf6\x15\xb2\x3f\xe2\x1e\x25\xbf\x1e\x8c\x14\x90\x6e\xb6\xe7\xfe\xf0\x6f\x3d\xa8\x8f\x32\x74\xc1\x7a\x50\x44\x04\x02\xab\x02\x55\x03\x50\x50\x59\x15\xb0\x1c\xc3\xb2\x10\xa8\xba\xc2\x32\xbc\xca\xd2\x8a\xa8\x08\x48\xc7\x1a\xc6\x00\x23\x56\xe5\x91\xa8\xf3\x58\x17\x39\xc4\x6b\x44\x45\x2c\xed\x7a\x50\x28\xa0\xb8\xd0\x7d\x0f\x8a\xa3\x21\x7f\xdd\x83\xda\xbe\x3d\xf9\xb8\xcf\xab\x71\xa1\x7b\x1e\xd4\xcb\xb1\x8d\xbd\xc5\x8a\x94\xa4\x47\xe2\x42\xdd\x14\xb3\x32\x6a\xc6\x2c\xe1\x14\xb4\x31\x5a\xf6\x40\x2c\xe3\xd8\xdc\x60\x95\x44\x83\xb6\x65\xca\x72\x52\xaa\x65\xec\x49\x3f\xe2\x08\x69\x8b\xcc\xed\x77\xab\x05\x66\x85\xd9\x38\xcc\x9a\x4a\x68\xc1\xca\x89\xd1\x44\x2e\xc4\x71\x2c\x12\x1e\xa5\xf2\x39\x08\x0b\x52\x65\xb4\x3c\x19\xc1\xd2\x67\xc4\x85\x4a\x9f\x22\xbb\x4f\x88\x0b\x3d\xe1\x41\x3d\x74\x73\x47\x80\x71\x92\x27\x3c\xa8\x7b\x71\x92\x83\x07\x15\xb4\xfc\x9e\xf0\x48\x7e\x88\xfc\x1e\xf2\x48\x6e\xdd\x6c\x72\xe0\xef\x2f\x19\xc7\x39\xf3\x48\xbe\x62\x6e\x99\x24\x27\x4a\xef\x97\xe5\xef\xea\x83\xff\x9b\x8a\xe4\x17\xe5\xef\x96\x67\x6e\x55\x0b\xec\xee\xf7\x20\x3d\x28\x3f\xf8\x5f\xf4\xa0\x3e\xca\xd0\x05\x9c\x2f\x24\x42\x01\x01\x45\xe0\x90\xa2\x22\x95\x40\x4d\x53\x55\x86\x30\x58\x41\x90\x17\x14\x5d\x43\x08\x12\x55\xe3\x08\x21\x02\xab\x88\xac\xc6\x41\xa4\x61\x56\xa5\x69\x85\x56\x35\x8e\xe3\x5d\x0f\x2a\x98\x33\xb4\xac\xc8\xdf\xf7\xa0\xc0\xad\x9d\xb5\xed\xdb\x93\x8f\x1a\xbe\x1a\x83\xf2\x66\xb6\x05\x1d\x83\x7a\xec\x9c\xdd\x51\x0c\xaa\xc0\x15\x85\x29\xdf\x73\x08\x3b\xca\xf6\x72\x69\x02\xe5\x98\x92\x88\x8f\x22\xc9\x4c\x37\x3c\xc8\xd3\x30\xa1\xcf\xe6\xd8\xa4\x07\x2d\x9c\x98\xf1\xf3\x64\xcb\x9c\x66\xc2\xab\x5e\x23\x92\x9d\x42\x29\xe4\x44\x50\x0f\x47\xf1\x8c\xc1\x61\xad\x00\xd2\x46\x3e\xc6\x2d\x9a\x00\xbc\xe4\x41\xf9\x8a\x41\xd5\x3e\x45\x76\x9f\x10\x83\xba\x78\x18\xea\x6e\x4c\xe2\xfa\x39\xaf\xa0\xef\xef\x0d\x26\x26\x11\x70\x0c\xea\x48\xfe\x2f\x5b\xd8\x4b\xf4\x1d\x95\xa0\xfb\x3b\x7e\x49\x68\x5f\xa8\xbf\x83\x39\x13\xf7\x85\x63\x50\xa5\x76\xd4\x3a\xa3\xd7\xc3\xdf\xd7\x8c\x41\x65\xea\xe3\x94\xdf\xaf\xe7\x7c\x66\x0c\x48\xfa\x00\xdd\xf4\xe1\x41\x7d\x94\xa1\x0b\xd6\x83\x52\x35\xc0\x10\x41\xd4\x14\x91\xd0\x88\x45\x80\x40\x5e\xe5\x45\x8e\x28\x18\x13\x00\x04\x0d\x72\x3a\x54\x74\x51\x53\x35\xa8\x69\x04\x61\x42\x63\x5d\xe4\x14\x9e\x13\x74\x9d\xf0\x40\x77\x3d\xa8\x60\xce\x3e\x3e\xe4\x41\x41\xfe\xfa\x2d\x24\xbb\xb7\x27\x1f\x73\x7e\x35\x06\x75\xcf\x83\x7a\x35\x8e\xf2\xd8\xf9\xa8\xa3\x18\x14\xdb\x34\xb9\x68\x1d\x59\xbc\x11\x4f\xea\x4b\x92\x64\x26\xa0\x6c\xf7\x17\x85\xa5\xd9\x4c\xbc\xf7\xcc\x11\x54\x64\xa5\x17\xcd\x91\x6a\x29\x9f\x61\x42\xb5\x56\x74\xd9\x18\x8f\x7a\xed\x32\xb7\x2c\x1b\x8d\x2e\x11\x73\x15\x5d\x8d\xf7\x8c\x19\xc8\x62\x1d\x3b\xf1\x50\xa5\x11\x92\xa5\x57\x76\xf1\x7c\xc5\xa0\x5a\x9f\x22\xbb\x4f\x88\x41\x3d\xe1\x41\x3d\x74\x3e\x27\xe8\x6f\x8e\x05\x13\x43\xf9\xb8\x18\xd4\x13\x1e\xc9\x0f\x91\x5f\x30\x67\x83\xfe\x12\x31\xa8\x8b\xbb\x4c\x7f\x8d\x18\xd4\xc5\xef\x7f\x6e\xca\xab\x31\xa8\xc4\x8b\xf2\x77\xcb\x33\x67\xa7\x03\x8b\x41\x05\xe9\x41\xbd\x3a\x96\x7c\x78\x50\x1f\x65\xe8\x02\xde\xc5\xc3\x22\x62\x11\xe4\x30\x54\x38\x96\x26\x3a\x16\x04\x9a\x83\x84\x87\x3c\x0b\x04\x55\x07\x22\x23\x68\x22\x46\x50\x03\x58\xc1\x90\xa8\x9c\x80\x78\x1a\xe9\x80\xa3\x15\xc8\x43\xb8\x26\x02\xed\xce\xac\x31\xb0\x14\x67\x92\x35\x99\x65\xa4\x5c\xb3\x16\xaf\x25\xa1\xd4\x4a\x4b\xcd\x66\xa2\xd9\xac\x33\xf5\x64\xb3\xd5\x2a\x73\x72\xab\x29\x57\x8b\x99\x58\xb3\x5d\x91\x1a\x1c\xdf\x2c\xa0\x63\x0f\x0a\xde\xf1\xa0\x38\x1a\x21\x74\xf5\xeb\xdd\xfb\xb7\x80\x07\xbc\x28\xf0\x90\x11\xf6\x31\xa8\x27\xb3\xff\x8e\x3c\xa8\x8b\x5f\x08\x3d\xd2\xb2\x4f\x5f\xe3\x1c\x4a\x72\x4f\x6f\x29\x19\x6e\x0f\x56\xe5\x30\x89\xd2\x71\x7e\x51\x14\x57\xd2\x84\x24\x67\xb9\x24\x3f\x7e\x27\xce\x0a\x57\xb4\x56\x4f\x68\x24\x97\xd6\x7c\x3e\x53\xe4\xf1\x02\xc5\x14\xae\xbb\xa2\xbb\xd6\xb8\x9c\x8e\xa4\x2b\x1c\x57\x68\x2b\x89\x51\x74\xc0\x2f\x57\xc9\x91\x10\x1b\xa4\x79\x25\x8d\x4a\xd2\x43\xf7\xb4\x1d\xcb\xe7\xfa\x0d\x0a\x47\x95\x7c\x9c\xc0\x37\xd4\x43\x7f\x5c\x29\x77\xb2\x99\x83\xc3\x7f\xd9\xc3\xbd\x83\xff\x2c\x3b\x74\x23\x9f\xa7\xef\x12\x7a\x31\x9b\xf5\xe2\x09\x66\x2f\x0f\xf2\x8f\xa0\xef\xc6\xf7\x38\xb6\xe5\xa2\x85\x39\x9a\x91\x9f\x1d\x4b\xe9\x5a\x34\xb4\xa5\xf5\x2c\x3f\xe9\xa8\xdc\xb6\x30\xf2\x6b\xf8\x0b\xaa\x3f\xfc\x5b\x0b\xa3\x8b\xa3\x6a\x3e\x29\xa2\x6c\xa9\x39\x93\xc3\x30\x17\x1d\x22\x22\xcc\xf5\x29\x99\x70\x30\x3f\x49\x03\x23\xb9\x68\xe9\x99\x59\x2c\x2a\xda\x15\x3d\xd9\xcd\xcf\xde\x63\xc5\x4a\x74\xaa\xc9\x03\x79\x98\xb5\x4c\x76\x68\xe3\x56\xa6\x3a\xcb\xe6\x88\x32\x2f\x94\xc6\x8e\x3d\xee\x49\x1f\x70\x3f\x11\xe0\x30\x07\x55\xa8\x03\x24\x02\x16\xf2\x9c\x28\xa8\x9a\xc2\xe9\xa2\x00\x68\x91\x27\x9a\x40\x10\x52\x31\xc3\x6b\x8c\x26\xd2\x34\xa7\x68\xb4\x82\x39\x41\x80\x0c\x59\xaf\xdc\x37\xf7\x13\xa1\xdd\xd7\x6a\x5f\xb7\x30\xe8\xbe\x85\xe1\xae\xdf\x4f\xb4\x79\x2b\x1e\x2c\x0c\x0f\x0f\xa7\xa2\xfd\x5b\x18\xaf\x5f\x71\x66\x61\x3e\xdb\x67\x3d\x94\x23\x0b\x13\x8f\x27\xb2\x89\x78\xbc\xa9\xc8\xb1\xb2\x36\x60\x48\x7c\x59\x92\xaa\xf9\x49\x72\xfa\x5e\x08\xdb\x71\x6b\xf2\x6e\x2f\x46\xf9\xfc\x3c\x81\x43\xb9\xac\xa1\xe4\x4b\xe9\x6c\xac\xd9\xc0\x7a\x14\x35\x84\x4c\x2e\x53\x0a\xf7\x64\x3a\x47\x57\xb3\x8b\x36\x99\x86\x0b\x82\xd3\x1a\x47\xa6\xf3\xb9\xf4\x15\x2d\x8c\xaf\x19\x3e\x40\xfc\xe7\x7e\xe6\x03\xf8\x2f\x5b\x98\xcf\xfb\xa2\xd2\x96\x94\x27\x2d\xcc\x97\xf8\xe2\xd3\xb6\x5c\xb4\x30\x3f\x68\x86\x97\x02\xb2\x30\x39\xe4\x0f\xff\xd6\xc2\xd4\x6a\x2d\xbb\x55\xab\x6b\x76\x29\x1f\x67\xaa\x6d\xd4\x4c\x4b\x91\x1c\x33\x20\x9c\xc9\x87\xe6\x8d\xe9\xe8\x7d\x95\x68\xd1\x50\x6a\x5b\x68\x3e\x4d\xdb\x40\x1a\xd8\x79\xad\x3d\x11\xb2\x3d\x65\x6e\xce\x27\xb1\x90\x5c\x2d\xad\xca\xb9\x59\x7c\xc8\xf1\x02\xbf\x04\x86\x9a\xe0\x3f\xe2\x7b\xe8\x50\x13\x58\x91\x43\xbc\x2e\xea\x0c\xd2\x39\xcc\x23\x45\x57\x45\xc8\x69\x3a\x10\x45\x86\xe5\x74\x8e\xd7\x04\x96\x51\x11\xcf\xa8\x0c\xa7\x62\x85\x60\x01\x2a\x44\x65\x18\x45\x80\x8c\xe6\x5a\x18\x18\x90\x85\xb9\x77\x42\x95\xa3\x11\x2f\x5c\xfd\x2a\xcc\xfe\xad\x6b\x61\x04\x80\x0e\x27\x54\xfd\x5b\x98\x1b\x27\x54\x7f\xcc\x7d\x9c\x87\x72\x64\x61\x62\x65\xa3\x97\x6b\xcb\x46\x5b\x99\x54\x11\x1b\xb6\x93\xf6\xf0\x1d\x67\x4c\x51\x29\xaf\xb2\xd5\xc5\x2c\xd3\x0a\x69\x7c\x6f\xb1\x48\x2e\x67\xc3\x49\xbb\x12\xcd\x09\xd9\x42\x9b\xd3\xad\xa6\x22\xcd\x49\xd4\x36\x47\xf9\x09\x41\x48\x6c\xc7\x92\xb2\x31\xaf\x32\x66\xa9\xda\xe8\x37\xbb\xc2\x57\xb4\x30\xbe\x66\xf8\x00\xf1\x5f\x8e\x84\x7f\xce\x1a\xc6\xff\x0d\x7e\x2e\x29\x1f\xbd\x86\xf9\x88\x5b\xa2\xb6\xe5\x23\x2c\x8c\xdf\x19\x5e\x0a\xc8\xc2\x64\x6b\xfe\xf0\x6f\x2d\x4c\x3e\x91\x91\x17\x83\x4a\x7a\x38\x1d\x16\xfb\xe3\xd0\x9c\x2c\x1b\x13\xf3\xbd\x0f\x9c\x64\xce\x29\x26\x84\x49\x9f\x85\xd3\x64\x52\xd6\x33\xa1\xc6\x70\x98\x4a\xad\xe6\x36\x3b\x9e\x84\x1c\xcd\x8e\x45\x50\x66\x69\xb4\x98\x21\xdf\xef\x83\x41\x4e\xad\x64\x23\x45\xdc\x8b\xe4\x71\x9e\xc4\x02\x3f\x2d\xc8\xaa\x44\x84\x0c\x60\x01\x81\x9a\xc8\x33\x04\x11\x9d\x65\x80\x42\x63\x4e\xe5\xa0\x0e\x78\x88\x59\x8d\x87\x2a\x64\x10\xe0\x05\xc8\x8b\x2a\x50\x05\x8d\x65\x14\x20\xf2\x00\x12\x55\x70\x2d\x0c\x0a\xc8\xc2\xdc\xcb\x75\xe7\xe8\xf5\x4a\xeb\x86\x85\x11\x19\xfe\x60\x61\x58\xf6\x70\x5a\xd0\xbf\x85\xb9\x91\xeb\xfe\x63\xee\x99\x3b\x94\x23\x0b\x93\x1a\x84\x1c\xdb\x1c\x44\x56\x53\xd0\x9d\x0e\x75\xa5\xd5\x97\x01\x11\x2c\x30\x00\x13\x63\x19\x69\x23\x2d\x32\xa6\xa7\xfc\xac\xde\x6d\x73\xe1\xd0\xbb\x21\x0f\x17\x7c\x2f\x43\xac\x48\xb6\x0f\x32\x7d\xa5\x9d\x28\x35\x35\xac\x8b\x74\x0b\xb7\x64\x23\x2d\x28\xca\x92\x96\x5b\x5d\xf3\x2b\x5a\x18\x5f\x33\x7c\x80\xf8\xaf\x20\xfa\x94\x35\xcc\x27\x5b\x98\x2f\x71\x0f\xe1\xb6\x7c\x84\x85\xf1\x3b\xc3\x4b\x01\x59\x98\xf4\xdc\x1f\xfe\xad\x85\x31\xaa\x1c\xb3\x34\x4a\xc9\x02\xdf\x88\x72\x75\xd1\x31\x72\xd5\x3a\xbf\x9c\x35\xaa\x8d\x51\x36\x15\x1f\xf7\xe8\x84\x5e\xe1\xa7\x62\x23\x32\xb6\xc2\xdc\x7b\xaa\xd2\x4c\x4e\xe5\x09\x67\xcb\xd3\x62\xed\x3d\xef\x0c\xda\x11\x0d\x4c\xc2\xb0\xdc\x9b\x74\x2b\xa9\xf1\xc2\x99\x65\x4b\x65\x23\x1a\xf8\x3e\x8c\xa2\x21\x81\xd3\x14\x4d\xa3\x19\x0d\x71\xb4\x00\x78\x8e\x07\x2a\xc2\x2c\xe6\x89\xa8\x71\x44\xe0\x58\x15\x33\xa2\xaa\x20\x40\x38\x46\xe3\x31\xd6\x79\x1a\x33\x3a\x21\xac\x02\x39\x6d\x4d\x04\x0c\xee\xee\xc0\xbb\xfb\x30\x8c\x08\x99\xeb\x51\xb2\xf5\xdb\x4d\x94\x8c\x11\x04\x24\xd2\xac\x28\xa0\xd7\x73\x81\x6f\xec\xc3\xbc\x90\x8d\x01\x3d\x3b\xcb\x9b\x72\xf4\xfd\x9b\x88\x38\x18\x65\x1a\xcc\x3b\x9c\xf1\x25\x7d\x29\x14\x73\x64\x20\x2b\xa0\x5a\x4d\xb1\xc6\xe2\x7d\x90\xa2\x23\x66\xb7\x69\x15\x1c\xbe\x5b\x00\x1c\x53\x52\x06\x3d\x46\xab\x54\x6b\x3a\x89\x99\x33\x95\x2e\x4a\x58\xef\xc5\x9a\x0b\xa7\x57\x97\x86\x76\x76\xda\x1f\x46\x46\xcb\x7e\x44\x6a\x3d\x62\x31\x8e\xbf\xce\x76\xd5\x62\x1c\x9f\x7e\xf1\x91\x5b\x39\x2e\x1c\xe4\x7b\xa5\xdc\x99\xb1\x83\xc3\xef\x6f\x5f\x65\x03\x2a\xe8\xbb\xc4\xae\xe0\xbc\x3d\xcb\x05\x8d\xff\x5c\x1e\x57\xf1\x4b\xd2\xd7\xdd\x57\xba\xbb\x6f\xe3\x43\x56\x5b\x53\xe0\xdf\x22\xbd\xd8\x57\xe4\xb5\x7d\x9b\x24\x53\x69\x4d\x14\x6c\x91\xb0\x13\x09\x67\xe7\xc2\x82\x2b\x95\x67\xf5\x7c\xae\x3f\xca\x26\xde\x4b\xfd\x52\xc2\x88\x10\x9b\x83\x53\x89\x6f\x5a\xed\xc8\xb4\x92\x6c\x83\x74\xbe\x2c\xa2\x82\x21\xae\x4a\x42\x64\x12\x92\xf3\x7a\x82\x89\xd7\xa2\x8d\xf9\x94\x2b\xd4\x12\x4a\x26\x27\x07\x7f\xbe\x57\x00\x00\x88\x8c\x0a\x05\x0e\x41\x4d\xe7\xa1\x4a\x03\x16\xb3\x18\x68\x3c\xaf\x08\x34\xa3\xe9\x3a\xcd\x6a\x48\x67\x69\x5d\xe5\x34\x40\x0b\x80\xc3\x98\x67\x55\x1a\x73\x80\x16\x75\x11\xbb\x16\x29\xa8\x7b\xdf\x1e\xb0\x48\x02\x77\x35\xb7\x72\xf3\x96\xdb\x5b\x24\x40\xd3\x87\xcc\x00\xff\xb9\x95\x9f\x68\x91\x8e\xbe\x03\x51\x1c\x76\xf9\x44\xb6\x97\xee\xd2\x0b\xbe\x3f\x91\xe6\x40\x9e\x73\x49\xa6\x19\xe7\x96\xe5\xd4\x48\x4f\xa7\xe6\x71\x7d\x41\x8b\xf9\xa9\xc1\x2a\x4e\x21\x2d\xc5\xc9\x3c\x2e\xe5\xf5\x02\x96\x22\x42\xbc\xd4\x1e\xb2\x13\x28\xb1\x5d\x38\xe0\x62\xc9\x98\xd1\xd5\x6b\xf9\x5a\x0c\x70\x5d\xf5\x43\x2c\x92\x8f\xdc\xba\x40\x2d\xd2\x8b\xf8\x03\xb4\x48\xaf\xde\x03\xf5\xaa\x45\x0a\x04\xff\x0b\x16\xe9\x2b\xed\x43\xdd\xb3\x48\x7e\x64\x15\xa4\x45\xf2\x83\xff\x45\x8b\x14\x6a\xc4\xec\xd6\x54\x1e\xc5\xaa\xc9\x69\x61\x10\x8b\xd5\xaa\x31\x53\x6f\xab\x4d\x2b\x2d\x1b\x6d\x61\xd0\x97\xea\xe1\x64\x95\x66\xb8\xec\x70\x4a\xa3\x81\x54\xe7\xa5\x9a\x04\x04\xd6\x94\x92\xf3\x7a\x64\xd4\x1c\x8d\xd5\xd8\x28\x46\xaa\x66\x4e\x2d\x64\x22\x62\x09\x94\x8a\xcd\xf7\x48\xe0\x51\x38\x88\x78\x4e\x51\x39\x24\xb2\x1c\x44\x82\xa0\xea\x34\xc3\x6a\x02\xc3\x8b\x34\xc6\xa2\x8a\x10\x87\x44\x20\x08\x0c\x64\x14\xc0\xd2\x1a\x23\x70\x48\x03\x50\x27\xa2\x8e\x55\xc2\x22\x9a\x73\x2d\x52\x50\x77\x76\xdd\xcd\x24\x80\xb4\x00\xae\xef\xf3\xac\xdf\xc2\x83\x45\x42\x20\x88\xfb\xd5\x6f\x64\x12\xb8\x16\xc9\x57\x54\xed\xde\x1a\x49\xce\x44\x66\x21\x61\x95\x05\x64\x32\x5f\x44\x43\x76\xba\x27\xb7\x8a\x23\xa5\x9f\x15\x9b\x15\xb5\xe9\xa8\x8e\x99\x4b\x69\xc4\x61\xb5\x5e\x77\xc0\xb7\xd2\xf5\xf4\x4a\x1a\x97\x2b\xdd\x56\x75\xa6\x2f\xcd\x54\x3a\x93\xd6\x4a\xa3\x26\xc7\x4d\x7b\x8c\x19\xb2\x12\x62\x86\x4b\xa7\x46\xdd\x2f\xb9\x46\xba\x9c\xbd\xfb\x79\x6b\xa4\xa8\x7f\xfc\x1f\x72\xdf\xf2\x13\x16\x21\xe8\x35\xd2\xb3\x19\xc1\x92\xf4\x75\xf7\xad\x2e\x5a\xa4\x1f\xb4\x46\x91\x3e\xa0\xaf\x9e\xc1\xbf\xb5\x48\x25\x33\x11\xe6\x57\xb9\x59\x9d\x1b\xc7\xe4\x2c\x37\x1f\xc9\xe5\x6e\xa8\x3d\xcd\xcd\x80\x96\x5e\x10\xb0\x64\xba\xf3\x1e\xe0\xe0\x90\x49\x44\xab\x4e\x77\x58\x1b\xe7\xa2\x5a\x3c\x13\xe9\x15\xc4\x70\xa6\xdb\x1d\x98\x43\x10\x6d\xeb\xd6\x3b\x97\xc4\x7d\xce\x56\x68\xcb\x1c\x18\x38\xf8\x35\x12\xaf\xe9\x02\xcb\xab\x0c\x54\x79\x4d\x27\x8a\xc8\x23\x8d\x57\xa1\xc8\x72\x3c\xcf\x72\x02\x8b\x05\xa2\xe9\x58\x40\x22\xa7\x28\xbc\x00\x74\x0d\x22\x4e\x15\x08\x43\x33\xac\x8e\x35\x51\xd1\x5d\x8b\x14\xd4\x1d\x48\xf7\x2d\x12\xa0\xd9\xab\x77\x20\xed\xdf\x6e\x2d\x92\xc0\x04\x71\x37\xf6\x27\x5a\xa4\xa3\x35\x52\x24\x19\xce\x65\xb9\x50\x79\xd5\x78\x9f\xc6\x8b\x3d\xa1\x9b\x8d\x33\xe5\x69\x7b\xd5\x72\xfa\xfd\x49\x91\x24\x67\x61\x53\x13\x73\x3c\x5a\x0c\x6b\xb4\xd8\xc4\x08\xb3\x04\xe4\x7b\x39\x27\x57\x29\xa7\xcc\x6c\xca\xe9\x02\x19\xc7\x1a\xb2\xb8\x9a\x39\x49\x7d\x58\x6f\xa4\x24\x5c\x99\x97\xbe\xe2\x1a\xe9\x65\x8b\xf4\x22\xfe\x00\x2d\x52\x20\x77\xe5\xbe\x60\x91\x3e\xfb\xae\x5e\x49\xfa\xba\xfb\x5c\xf7\x2c\xd2\x67\xae\x51\xa4\x0f\xe8\xab\x67\xf0\x6f\x2d\x92\xac\x0b\xf3\x99\xc5\x26\xf3\xf8\x1d\xd5\x42\xc9\xa5\x64\x37\xdb\x09\x76\x9c\x37\x98\x42\x61\x20\x22\x12\x0e\xf5\x20\xbd\x9a\xf5\x13\xf5\x6a\x15\x68\x56\xcf\x1a\xf2\x35\x46\x5e\xd2\x8b\xb4\x6c\x74\x6d\x83\x89\xd5\xca\x66\xbe\x55\x85\x85\x10\xad\x85\xea\xf5\x56\x37\x32\xc9\x46\x02\xcf\x85\xd3\x14\x28\x0a\x44\x41\x98\x08\x22\xcf\x72\x90\x61\x39\x04\x55\xac\x31\x40\x15\x11\x01\x50\xd1\x55\x9a\x47\x0a\x64\x20\x21\x02\x24\x00\x01\x45\xe7\x69\x80\x59\x4d\xa4\x91\x0e\x94\xb7\x4d\xc8\x6e\xb3\x8f\x14\x29\x17\x5b\xc9\x54\x96\x89\xa6\x60\x3c\x5f\x42\x91\x66\x36\x9e\xcb\xc7\xb2\xf1\x74\x2d\x5f\xac\x31\xc9\x16\x6c\xe7\xe2\x95\x64\x21\x5f\x8b\xca\x05\xa9\xd2\xe0\x4b\x51\xbe\xd0\x64\x92\x6f\x9b\xe6\xb7\x0d\x11\xcb\x32\x0c\xb8\x6a\x88\x76\x6f\x5d\xc3\x26\x70\xc2\x3e\x3f\x21\x91\x15\x92\xa5\x59\x69\xa0\x64\x98\xa4\x04\x1b\xf5\x7e\xd9\xca\x8c\xfa\x4d\x9a\xd6\x13\x82\x9d\x4d\xf1\x23\x5a\x2e\xcf\xd3\x8d\xb0\xd4\x84\xd2\xde\x0e\xb9\x0a\xe3\xe9\xd4\xb3\x79\xc2\xf7\x77\x21\xb7\xf0\xea\xb3\x79\x7c\x73\x06\x55\x96\x5a\xfd\x92\x5a\xac\x32\x09\xb6\xf7\x3e\x8e\x8c\xba\x89\x04\xe9\x8a\x69\x61\x88\x54\x20\x8f\x6b\xc3\xc5\x60\x28\x0f\x93\xa2\xfd\xde\xb6\x68\x91\x07\x71\xae\x90\x6d\xe8\x24\x3c\x42\x83\x49\xdc\x49\x85\xec\x14\x6d\x80\xf7\xac\xe1\xb0\x12\x9d\x5e\x36\xc6\x4a\xaf\x95\x6d\xb0\x66\xec\x01\xdb\x73\xa2\xb4\xa7\xb6\xe7\x88\xe7\xc3\xdc\x7b\x1c\xf3\x30\xc2\x11\x3a\x4b\xa7\x13\x4b\xa7\x37\xcf\x83\x61\x8b\xc6\xcb\x89\x09\xc4\x7c\x72\x31\xcb\x46\x97\x05\xd6\x89\xc8\x6a\xd4\xe5\x11\x76\x1d\xab\x30\x6e\x85\xf9\xa3\x2b\x3f\x72\x17\x89\xb8\x33\x9e\x5f\xc0\x1f\xaf\x36\x22\xd6\x0b\xf8\x25\xe9\xc7\x9d\x1e\xb9\x38\xb7\x46\xfc\xcb\xa2\x30\x6e\xdf\x64\xf3\x9e\x2c\x5e\xed\x8b\xb5\x2e\x84\x54\x0f\xbc\xa7\x64\xf1\xdf\x44\x8a\x4e\xc6\x68\xb1\x37\x6d\xe1\xc9\xbc\x6d\x46\x7a\x63\xb3\x58\xd1\xd3\x24\x99\x2f\xa7\x41\x5a\x6d\xa7\xcb\xe9\x72\x58\xc9\x8c\xb0\x58\x24\x62\x99\xf4\x0d\x30\x86\x33\x76\x9a\xce\x94\x95\x4a\xd1\x8a\xe6\x53\x0e\x36\x90\x45\x4a\xf9\xa8\x3a\x9c\x30\xa8\x11\x05\x53\x2c\x05\x1e\x7f\x62\x30\xd6\x74\x85\x16\xa1\xce\x08\x80\x57\x34\xc4\x22\x2c\xf2\x10\x2b\x08\x01\x15\x61\xa8\xf1\xaa\x88\x04\x55\x85\x98\xe1\x79\x5d\x55\x68\x9a\x53\x88\xce\xb3\x8c\xa0\xe8\x22\x12\xb7\x73\x2b\xf3\xda\xdc\xca\xdc\x9f\x5b\xe1\xd5\x5b\xba\x76\x2f\x37\x33\x2b\x62\xf8\xc3\xbe\xbc\xff\x99\xf5\x86\x87\xef\x16\x1f\x31\x8f\xe3\xcf\xd4\x1e\xcd\xac\xd1\x24\x16\x7b\xc5\x45\x2b\xc4\xce\x51\x38\xda\x05\xdd\x06\x13\xd1\xd2\xa9\x1a\x1d\x1d\x45\xbb\xe3\x7e\xbf\x59\x5a\x2d\x40\xac\x4f\xd2\xab\x2a\x9a\xf4\x9a\xb1\x6c\xc1\x20\xd3\x76\xda\xac\x36\xb9\xfe\xac\xa7\xad\x72\xb8\xa7\x93\x49\x71\x38\x29\xc9\xa9\x85\xc0\x34\xd8\xa6\x30\x49\x25\xbe\xd6\xcc\xfa\xea\xcc\xf6\xe2\x68\x9e\x98\x19\x54\xcd\x06\x39\xb3\x7e\xe2\xfe\xee\xdd\xc8\xfe\x27\xce\x6c\x52\x40\x33\xab\x80\x0e\xed\xaf\xec\x8a\xdd\x9a\x59\x7b\xcc\xac\x55\x15\x1a\xc5\xa9\x5a\x28\xce\xcd\x7c\x2b\xee\x74\x9b\x95\x4a\x3c\x2f\x4d\xba\x66\x1a\x21\x40\xe7\x04\xad\x84\xa0\xa1\xd2\xa1\x4c\xab\x3e\x5f\xae\xcc\xb1\x35\xaa\x60\x19\x84\x4c\x1e\x35\xd5\x55\xc2\x6c\xc2\xf7\x2a\x8b\x6b\x91\x68\x4e\xcf\x0f\xa7\xf5\x70\xa6\x12\x7c\x1c\x05\xf2\x80\xe5\x14\x02\x15\x51\x05\x3c\x8d\x69\xc0\x6a\x8a\xc2\x41\x9d\xf0\x0a\x23\x30\x0a\x80\xb4\xa8\x21\x9e\xe7\x18\x4e\x17\x90\xaa\x72\xaa\xa8\xa8\x58\x03\x8a\xce\x28\x0a\x74\xb3\x59\x99\x6d\x64\xdf\xff\xcc\x7a\x77\x8b\x99\x65\x59\xe6\xfa\x16\xf3\xee\xad\x3b\xb7\x72\xc2\xd1\x0e\xb3\xef\xb9\xf5\xc6\xb9\x0d\xb7\xf8\x58\xbd\x5f\x99\x5b\x63\xe9\x99\x8e\x52\xf3\x14\x6b\x95\xaa\x50\x9a\xd0\xe1\x76\x25\xfe\x1e\x2a\xcf\xeb\x20\xcd\x11\xa9\x5d\x67\xa1\x16\xd2\x50\x28\x82\x87\xa1\x19\x5c\x69\xbd\xd4\x54\x60\x52\x61\x92\xb2\x0a\xbd\x58\xb2\xd4\xb2\x9c\x69\xb1\x1d\x9f\xa7\x54\x19\xe9\xd3\x58\x3f\xd2\xad\xa7\xba\x53\xb9\xf0\xa5\xe6\xd6\x97\xe7\xb6\x17\xc7\xb3\x99\x8d\xe2\x41\x90\x5e\xeb\x67\xee\x54\x7e\xc4\xdc\xea\x77\x6e\x93\x02\x9a\x5b\xfd\xae\x60\xb6\x73\xeb\x52\x81\xa1\x68\x2e\x5a\xc0\xb4\x2c\xce\x33\x5a\x91\xa9\xf5\xf0\x6c\xa0\xc6\xb5\x0a\x19\x77\x13\x75\xa2\x41\x7d\x4c\x8a\xdd\xc6\x44\xb7\x44\x01\xb6\x2a\xd9\x59\xde\x28\x42\x23\xb3\x32\x4b\x0b\x3a\x91\xe1\x95\x3e\x53\x56\xa3\xc9\x48\x21\xc9\x77\xd1\xbc\x15\xaf\xa4\xb2\xbd\xd8\x83\x73\xeb\x4f\x3f\xfd\xf6\xdb\x4f\xbf\xfd\x46\xe5\xf1\x88\x7c\xa7\xb0\x6d\x13\xa7\x63\x3b\xd8\xb1\x8f\xff\xee\x4c\x06\x64\xf9\x07\x55\x5d\x4e\xc8\x77\x2a\x5a\xc8\x57\xaa\x65\x29\x95\xaf\xfe\x41\x55\xd4\x1e\x19\xe1\xef\xd4\x64\xaa\x0c\x0d\xf5\x0f\xaa\x30\x1f\x13\xeb\x3b\xb5\x86\xf8\xd3\x4f\x52\xb6\x2a\x97\xa9\xaa\x14\xc9\xca\x54\x21\x9f\x6d\x1d\x43\xfc\x89\xa2\x28\x4a\x8a\xc5\x8e\xa0\x9d\x21\xa4\x8a\xe5\x54\x4e\x2a\xb7\xa8\x8c\xdc\xa2\x7e\x31\xb4\x33\x6a\xbb\xa6\x35\xe9\x8c\x8c\xae\x85\x5d\x33\xe0\x79\x0e\x88\x6a\x0f\xd4\x4b\x94\x5f\x42\x7c\x97\xfa\x9d\x25\xdb\xb0\x6d\x7b\x1e\xdd\xff\x74\x54\x53\x23\xdb\x3f\x9d\xe5\x64\xf7\xa7\x61\xdb\x53\x62\x75\x02\xe1\xee\x14\xed\x25\xe6\x7c\x11\x46\xd5\xf2\xa9\x52\x4d\xa6\x7e\x39\x54\xff\x46\x1d\xea\xef\xfe\x76\x1b\x3c\x29\x9a\x60\xba\xf5\x69\xc6\x9f\xea\x54\x73\x42\x5c\x65\xe8\x4c\xb0\xe5\x18\xaa\x31\xc1\xe3\x23\x4e\x2e\xbf\x0e\x98\xb3\xcb\x48\x6e\x71\x7a\x83\xac\x87\x39\x3f\x72\xcc\x2e\xf3\x7e\xad\x42\xc0\xdc\x5f\x43\x73\x8b\xff\x9b\xa4\xdd\x95\x80\xab\xd2\xca\x72\xa3\xed\x3b\x46\x52\xf9\x98\xdc\xbc\xc3\x43\xb4\x2c\x4b\x55\xd9\xad\x7a\x0a\x85\x2a\xe4\xbd\x83\xa1\x56\x49\xe5\x13\x94\xe2\x58\x84\x1c\x8f\xae\xeb\xd4\xb8\x63\xec\x75\x7a\x5c\x38\x8f\x51\x74\x65\x5c\x2b\xcb\x0e\x56\x55\x73\x3a\x76\x7c\x93\x73\x00\x71\x4c\xc9\xc9\x6a\xe0\x94\x1e\xb7\xf2\x37\x6a\xfb\x47\xc7\x26\xef\x53\x32\x56\xcf\x05\xa6\x2c\x3b\x3d\x6c\xf7\x5e\xa1\x6c\xdd\xfe\x31\xb2\x8e\x35\x6d\xdd\xea\x12\x35\x43\xa2\x75\x5f\xe8\xb8\x3d\x84\xc7\x28\x72\xeb\xee\xc5\xf3\x8d\xc2\x93\xc9\xd0\x50\xdd\xe9\xc0\xb4\xb4\x2b\xd3\x74\x87\xac\x75\x63\xf3\xde\x07\xa5\x5b\x2b\xe1\x12\xec\x01\x77\x4c\x36\xd1\x75\xa2\x7a\x55\xed\x7c\xd6\x32\xb4\x6f\xd4\xcf\x9b\xc6\x3f\x5f\x23\xd6\xd0\x02\x22\xd3\xd0\x1e\x26\x70\xa7\x7a\x6b\xf2\x7c\x10\x6d\x4e\x3a\x93\xa0\xe8\xde\xc2\x3a\x26\xfd\x8a\xa9\xf2\xc5\xc9\x65\x06\x9c\x45\x70\x0c\x6c\x61\x5d\xd1\x69\x9f\x2c\x1c\x43\xb8\xc4\x84\x39\x59\x6b\x65\xcf\xf4\xc5\xc3\x96\xf8\x03\x0c\xbf\xc2\xbf\x2d\x68\x7b\x3b\xda\x37\x53\xf5\xeb\xb2\x3e\x05\x77\x4c\xb2\xfb\xbb\x87\xc6\xcb\x14\x1d\xcb\x35\x28\xb2\xce\x60\x3e\x36\xbd\x5d\x22\xd0\x71\xbb\xc4\x79\xa5\x5b\x0f\x30\xfc\xab\xe4\x3d\xf5\x73\x2c\x6d\x8d\x44\xc1\x36\x79\xd9\x7e\x5e\x02\xe6\xa1\x5c\x23\x1e\x3a\x8f\xeb\xde\x25\xd0\xd4\xf5\x17\x8c\xd6\x39\xa8\x87\x88\xdb\xd4\xbc\x45\xda\x86\x76\x62\x05\x26\x3e\x0f\xbc\x7b\x44\x7a\xaa\x3f\x42\x69\x30\x72\x3c\x81\xf6\x28\x95\x77\xa5\x19\x0c\x6d\x0f\xd1\x74\x9b\x96\x1d\xc5\x43\xd3\x1c\x4c\x27\xaf\x51\x74\x0a\xeb\xe1\x1e\x75\xfd\xdd\x2b\xf4\x4d\xb0\x61\x75\x1c\x63\x44\x02\xa1\xd0\x0b\xed\xb1\x71\xbb\x25\xf0\x1b\xe5\x25\xf9\x1b\xb5\x9d\xe2\xd5\xa1\x69\x13\xad\x83\x9d\x2b\x4c\x04\x30\x6f\x6f\xe1\xdc\xa3\xf8\x49\xef\x68\x0d\x35\x30\xe9\x3e\x21\xd8\xbb\x72\x33\xc6\x1a\x59\x74\x3c\x2e\x87\xdd\x31\xc7\x1d\xac\x69\x16\xb1\xed\x57\x05\x7a\x17\xc1\xc9\x3a\x6d\xfb\xda\xb3\x32\x72\x2b\x3e\x41\xfb\xeb\x7a\x70\x0b\xf6\x7d\x8a\x2f\x8c\xb2\x53\x80\x5b\x2f\x7c\x0d\xcf\x59\x4e\xfc\xaf\xc1\x6f\x42\xbd\xeb\xf6\xaf\x2b\xdd\x21\x74\xeb\x43\xad\x41\xee\x95\x28\x20\x6a\x2f\x81\xbe\xeb\xbe\x3d\xaa\xc9\x47\xc0\x83\x56\x86\x13\xd0\x7e\xfc\xcd\xeb\xe0\x46\x13\xd3\x5a\x4f\x7c\x33\x62\xd9\x86\x39\x0e\x5e\xd0\x5e\x0c\xf7\xc9\xf7\x34\x78\x9c\x99\xed\xd4\xe3\x33\x52\xf1\x98\xfc\x8f\x70\xdc\xe5\xe4\xa8\xee\xe3\x4c\x4c\x2c\x32\x33\xcc\xa9\xfd\x29\xdc\x5c\x42\x76\x97\xad\x4b\x8d\x1e\xe7\x6f\x17\x44\xf9\x30\x9e\x76\x08\xee\xf2\x71\x35\xda\x75\x0a\x7a\x6f\x6f\x3f\x64\x68\x7b\xa1\x5f\x5c\x00\x3f\x3b\xc0\x4f\x81\x9e\x2e\xa1\x02\x1a\xe1\xb7\x50\x3c\xc2\xc3\x9d\x75\xdd\x4d\x64\xc1\x99\xaf\x73\xc0\x0f\xd1\x7e\xdf\x88\x1d\x2f\xb6\x3f\x42\x6d\xce\xe1\xfb\x5e\xea\x6f\x9c\xb8\xbd\x21\xdf\x45\x18\x3b\x8a\x69\x0e\x7c\x4b\xf9\x06\xcc\xbb\x2e\xc2\x2f\xbf\x68\xc4\xc1\xc6\xd0\xa6\x7e\xfb\x9f\xff\xa1\xde\x6c\x73\xa8\x1d\xed\xa6\xbd\x7d\xff\xee\x90\x85\xf3\xeb\xaf\xdf\xa8\xeb\x15\x55\x53\x7b\xac\xa2\x1b\x8b\xbf\x5e\x55\x31\xa7\xdd\x9e\xf3\x10\xfa\x93\xaa\xb7\x09\x38\xa9\xea\x21\xe1\x57\xaa\x91\x94\xcb\xb2\xab\x64\xd4\x9f\x14\x84\x0f\x6f\x44\x1b\x5a\x47\x3f\xda\x26\x8a\x67\x3e\x67\x3b\x7a\x8b\x96\x8a\x17\xca\x72\x2a\x91\xdf\x6f\x01\x51\x65\x39\x2e\x97\xe5\x7c\x54\xae\x78\x76\x45\x36\x6f\x0b\x79\xaa\x56\x8c\xad\x55\xa6\x2c\x57\xaa\xe5\x54\xb4\xba\xfe\x29\x26\x67\xe5\xaa\x4c\x45\xa5\x4a\x54\x8a\xc9\x37\xf6\xd1\xd6\xeb\x8e\xd3\xc7\x8e\x27\x14\x13\x9c\x30\x4e\xf1\xdc\xd9\x24\xbb\x46\xc9\xa9\x7c\xbc\x61\xa3\x8b\xc2\xda\x3a\xfa\x77\x76\x14\xaf\x4a\x62\xbb\x94\xfd\xe1\x72\x38\xa6\xe3\x92\x14\x76\x51\x82\xdb\x0a\xf3\x9c\x04\xce\x83\x4a\x3f\x50\x0c\x57\x88\x39\x95\xc5\x85\x30\x58\xb0\x4a\xe1\x0d\x71\x7c\x05\x81\x5c\x57\x8d\xb3\x18\xd2\xa3\xda\x51\x34\x6d\xa7\x6b\x91\x4a\x29\x4b\x69\xd8\xc1\x6b\x15\xa3\xb4\xe9\x68\x42\xa9\xe6\x68\x32\x24\x0e\xd9\xf0\xf0\xff\x03\x00\x00\xff\xff\x73\xd2\x94\xcf\xbf\x83\x01\x00") - -func order_booksHorizonSqlBytes() ([]byte, error) { - return bindataRead( - _order_booksHorizonSql, - "order_books-horizon.sql", - ) -} - -func order_booksHorizonSql() (*asset, error) { - bytes, err := order_booksHorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "order_books-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9a, 0xcd, 0x52, 0x9, 0x66, 0xea, 0xff, 0x38, 0x1b, 0x9f, 0xca, 0x42, 0x9f, 0x65, 0x1a, 0x26, 0xdd, 0x54, 0xc7, 0xc6, 0x41, 0xbb, 0xf7, 0x22, 0xc8, 0x2c, 0xfc, 0x37, 0xc8, 0xb, 0x75, 0xdf}} - return a, nil -} - -var _order_books_310CoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x67\x73\x63\xb9\xd5\x36\x0a\x7f\x9f\x5f\xa1\xf2\x97\xb6\x4b\x63\x13\x39\x78\x5e\xdf\x55\x9b\x39\xe7\xfc\xd6\xa9\x29\x60\x03\x60\xce\x99\xa7\xee\xff\x7e\x4a\x24\x5b\x62\x53\x94\x5a\x4d\x6d\xf6\xf4\x39\x8f\x31\x65\x99\xcd\x0d\x02\x58\x17\xd6\x5a\x17\x16\xd2\xfe\xe7\x3f\x7f\xfb\xe7\x3f\x1f\x8a\x93\xc5\xb2\x33\xb7\x95\x52\xf6\xc1\xa8\xa5\xd2\x6a\x61\x1f\xcc\x6a\x34\xfd\xed\x9f\xff\xfc\xed\xe9\x79\x74\x35\x9a\x5a\xf3\xe0\xe6\x93\xd1\x4b\x86\xb5\x9d\x2f\x7a\x93\xf1\x83\xfc\x17\xfb\x17\x3c\xcb\xa5\x77\x0f\xd3\xce\x9f\x4f\x3f\xbf\xc8\xf2\x5b\x25\x56\x7d\x58\x2c\xd5\xd2\x8e\xec\x78\xf9\xe7\xb2\x37\xb2\x93\xd5\xf2\xe1\x3f\x0f\xe0\x8f\xc3\xa3\xe1\xc4\x1f\xbc\xfe\xb6\x67\x86\xf6\xcf\xde\xf8\xcf\xe5\x5c\x8d\x17\xca\x5f\xf6\x26\xe3\x3f\x17\x76\xf1\x54\xee\xeb\xcc\xfe\xb0\xf7\x54\xb4\x1d\xfb\x13\xd3\x1b\x77\x1e\xfe\xf3\xf0\xa5\x56\x8d\x8b\x2f\x7f\x7c\xad\x7b\x6c\xd4\xdc\xfc\xe9\x4f\xc6\x6e\x32\x1f\xf5\xc6\x9d\x3f\x17\xcb\x79\x6f\xdc\x59\x3c\xfc\xe7\x61\x32\x3e\x95\xd1\xb5\xfe\xe0\x4f\xb7\x1a\x1f\xeb\xd2\x13\xd3\xb3\x4f\xcf\x9d\x1a\x2e\xec\x37\xd5\x8c\x7a\xe3\x3f\x47\x76\xb1\x50\x9d\x43\x86\x8d\x9a\x8f\x7b\xe3\xce\x31\xcb\x7c\xb2\xf9\x73\x61\xfd\xd5\xbc\xb7\xdc\x3d\x15\xee\xdc\x1f\x27\x00\xac\x9a\xfb\xdd\x3f\xa7\x6a\xd9\x7d\xf8\xcf\xc3\x74\xa5\x87\x3d\xff\xf7\x27\xc4\x7c\xb5\x54\xc3\x49\xe7\x8f\xdf\x7e\x8b\x96\x0b\xc5\x87\x54\x3e\x1a\x6b\x3e\xa4\xe2\x0f\xb1\x66\xaa\x52\xad\x9c\x72\xfe\x6b\x35\xed\xcc\x95\xb1\xdd\xde\x62\xa9\x77\x0b\x3b\xfb\xe3\xdd\xdc\x0b\x7f\x3a\x5b\x4d\xe6\xab\xd1\xe2\x63\x99\xed\x78\xfd\x91\x9c\x43\x6b\x3a\x76\xfe\x91\x9c\x4f\xed\x74\xd6\x7e\x30\xe7\x07\xb2\x69\xbb\x58\x4e\x9c\xb3\xf3\xde\xd8\xd8\xed\xfb\x79\x95\xef\x4f\x56\xe3\xa5\x56\x43\x35\xf6\xed\xe2\x8f\xdf\xbc\x6c\x35\x56\x7e\xa8\x7a\xe1\x6c\xec\x2c\x77\x21\x9f\x6d\x5d\x81\x77\x32\xdf\x3d\x1c\x4a\x8f\x14\xf2\x95\x6a\xd9\x4b\xe5\xab\x67\x3f\xfa\x36\xe3\x9f\xd3\x81\xdd\x7d\xa4\xfc\xe5\xf6\xfb\x45\x3f\xe7\xf9\x81\x52\x9d\xfd\x40\x9b\xcf\xb3\x7d\xbc\xec\xf9\x6a\xb1\x1c\xf6\xc6\x76\xf1\x5e\xc9\xcf\x99\x3e\x5c\xee\x53\x2b\xec\xc1\x1b\xbc\x53\xee\x4b\xa6\x8f\x97\xfb\xac\xf2\xef\x95\xfb\x9c\xe9\xc3\xe5\x1e\xf3\xf7\xc6\x6e\xf2\x4e\xb9\x2f\x99\x3e\x5c\xee\x74\xa5\x17\x2b\xfd\x4e\x99\xc7\x0c\x3f\x52\xde\xb0\xb7\xe8\xce\x56\x76\xf5\x1e\xb2\xe7\xd9\x3e\x5e\xb6\xb5\xf3\xf7\x60\x3d\x3c\xff\x70\x69\x07\x33\x7e\xaf\xb8\x63\x86\x0f\x97\x77\xf4\x4a\x5d\xab\xcc\xfb\xc5\x7e\x93\xef\xce\xa5\x9f\x3c\xa5\x9d\xfd\xf9\xc1\x6a\xb4\x1a\xbf\x53\xb8\x56\xe3\x0f\x37\xf8\xe4\xfd\xde\x6b\xeb\xd7\x2c\x3f\x5a\xe6\xd3\x18\xe0\xfb\xc5\x3e\xe5\x3a\x95\x7c\xc8\x7b\x59\xf0\x55\x97\xfb\x7e\xde\x67\xd7\xf8\xbd\x6c\x2f\x8e\xee\x3b\x39\x9f\x1d\xd7\xfb\xf9\x5e\x1c\xd1\x77\xf2\x3d\x3b\x96\xef\xe6\xfb\x50\xfb\x5e\x1c\xca\xfb\xf9\x8e\x4e\xe2\xbb\x79\x9e\x4d\xfe\x3b\x39\x9f\xec\xf8\xfd\x2c\x47\xdb\x7c\x3f\xcf\x37\xa6\xf0\x7e\x56\xad\xc6\xef\x67\xf8\xaa\xaa\x1f\xca\xf5\xa4\x79\xa7\x8c\xb1\x66\x35\x96\xaf\xa4\x0a\xf9\xf3\xcc\xc3\x69\x67\x31\x1b\x9e\x72\x54\x22\xc9\x58\xce\x7b\x55\xd6\x1f\xbf\x1d\xc7\xc6\x79\x35\xb2\xff\xfe\xfa\xdd\x43\x75\x37\xb5\xff\x3e\xfd\xe4\x8f\x87\x8a\xdf\xb5\x23\xf5\xef\x87\x7f\xfe\xf1\x50\xd8\x8c\xed\xfc\xdf\x0f\xff\x3c\x0c\x99\x23\xe5\x98\x57\x8d\x7d\x2d\xf9\x6b\x79\xbf\x7d\x53\xe2\xb7\x0f\x4f\x05\x47\x0a\xb9\x5c\x2c\x5f\x7d\xa7\xe4\x63\x86\x87\x42\xfe\xdb\x02\x1e\x52\x95\x87\x2f\x5f\xc7\xb7\x5f\xbf\x5b\x1c\x0a\xf9\x72\x59\xf3\x57\xf1\x4f\x75\x3e\x23\xf4\x5d\x79\xbe\xc1\x32\x5f\xa8\x5e\xe0\xf9\xd0\x48\x55\x93\xcf\xcd\x3a\x1f\xd0\x7e\x53\xfd\x4b\x29\x17\x0d\xf9\x11\xe1\x5f\x15\x72\x00\xa0\x98\x0d\x4d\x3b\x4f\x51\xcc\x74\x3e\xf1\xad\x59\xcd\xd5\xf0\x61\xa8\xc6\x9d\x95\xea\xd8\x03\x0c\x1f\x1c\x80\x3f\x65\x33\xd6\xa9\xd5\x70\xf9\xe7\x52\xe9\xa1\x5d\x4c\x95\x6f\x9f\xa2\x89\x2f\x17\x4f\x37\xbd\x65\xf7\xcf\x49\xcf\x9c\x05\x08\xdf\x08\x7b\xae\x90\x27\x31\x0f\xaa\xfb\x22\xe4\x57\x05\xb8\x06\xf8\x51\xcb\xcf\x9d\xee\xdf\x7f\x7b\x78\x78\xf8\xfa\x4d\xcf\x3c\xf8\x5d\x35\x57\xfe\xd2\xce\x1f\xd6\x6a\xbe\xeb\x8d\x3b\x7f\xa7\xec\x1f\x87\xbe\xc9\xd7\xb2\xd9\xdf\x0f\xb9\x9f\x7e\x38\x56\x23\x7b\x25\xb3\x10\xd7\x32\xaf\xd5\x70\x75\x2d\x37\x84\xe8\x32\xfb\x50\x2d\x96\xa3\x89\xe9\xb9\x9e\x35\x0f\xbd\xf1\xd2\x76\xec\xfc\x39\xcb\x6f\xff\xb8\xec\xfb\x67\x2b\xfe\x24\x16\x8b\x9b\x80\x38\x05\x02\x0f\xba\xd7\xe9\x8d\x97\x17\x0f\x17\x76\x36\x5e\x8d\xae\x3f\x1b\xaf\x46\x8b\x95\xb6\xe3\xe5\xfc\x29\x14\xbc\x14\xf3\x98\xa7\x37\x76\x43\xf5\x14\x31\x1a\xbb\x58\x5e\x6f\xce\x31\x63\x77\x32\xb2\x66\x32\x52\xbd\xf1\x95\x5c\x84\x5c\x36\x7a\xd9\x9d\xdb\x45\x77\x32\x34\x8b\x87\xa5\xdd\x5e\xb6\xcc\x0d\x55\xe7\xad\x16\xbd\xdb\x37\x27\x44\x56\x4f\xb5\x0e\x7b\x4a\xf7\x86\xbd\xe5\x93\x70\x47\xf9\xbf\x42\x32\x1c\xbe\xf7\xb8\xd7\x19\x3f\x8d\x85\x9e\x9a\x75\xfc\xe6\x6c\x34\xf0\x3c\xb4\x38\x81\xfe\xe7\x21\xac\x7e\x88\x24\x63\x91\xcc\xc3\xdf\xff\xfe\xb5\x2b\xfe\xe7\x3f\x0f\xe0\x1f\xff\x78\xe7\xd7\x97\x0d\xbc\x2c\xe7\x95\x00\xdf\x2b\xf1\x9b\xbe\xbc\x28\xed\xdb\x7e\xfe\x5e\x49\xaf\xe1\xb9\x28\xee\x0a\x7e\xc7\x32\x5f\x1b\xc6\x13\xff\xdd\x6a\x13\x4f\x43\xc6\xa3\x39\x8c\x27\xc6\x9e\xdb\xc2\x37\x36\xf0\xba\xd2\x6f\xf9\xf9\xd6\xea\xbf\x1d\x18\x1f\x1b\x72\xfa\x4e\x2d\xba\x67\x8d\x61\xaf\x74\x7b\x3a\xb7\xeb\xef\x66\xd2\x2b\x7f\x60\x97\xc3\xde\x62\xf9\xdd\xac\xcf\xa3\xed\xaf\xea\x7e\xfc\xda\x1f\x4e\x16\x76\xd9\x1b\xbd\x61\xf9\x07\xc7\x7a\xc5\xb6\xce\xfa\xfc\xdb\x41\xfd\x73\x79\x17\xfd\xfd\x52\xcf\x1b\xaa\xf3\x56\x6c\xf0\x6d\x31\x2f\x52\xbc\xa5\x2d\xa7\xc1\xd7\xad\x3d\x76\x0a\xbc\xfe\xfe\x6c\xe4\x76\xfe\x41\x0f\x7a\x9c\x79\x31\x6f\x79\xd0\x83\xba\xab\xc5\xc2\x2e\xaf\xe1\x79\xb4\xd5\x37\x1f\xab\xd1\x93\x59\x5d\x2f\x7a\x3a\xef\xf9\x76\xfc\x86\x13\x3b\x3c\x7c\xcb\xc3\x1d\x1e\x3e\x98\xc9\x4a\x0f\xed\x93\xbe\xf9\xbd\xc3\x8c\x64\xa0\x5e\xf4\xac\x87\x4f\x21\xeb\x51\x96\x8b\x7e\x3d\x09\xf8\x86\x6e\x9c\x7e\x79\x42\xf8\xe2\xa7\x5f\x71\x7f\x4b\x21\x8e\x03\xf6\x5b\xf5\xe1\x18\xd6\x1f\xd5\xa1\x37\xbd\x46\xfc\xf4\x95\xe5\x4e\xe6\xcb\x67\x34\xa2\xb1\xb8\x57\xcb\x56\x1f\xc0\x25\x6d\xda\xed\x52\x2d\x97\x76\x34\x5d\x3e\x3c\x99\xc5\x62\xa9\x46\xd3\x87\xa7\x21\xd3\x64\x75\xfc\xe6\x61\x3f\x19\xdb\xd7\x64\xeb\x54\x6f\xb8\x9a\x9f\x51\xed\x5b\x35\x2c\x77\x53\xfb\xfd\x4e\x39\x4e\x4b\x9c\x95\xfb\xda\xed\x3f\xd7\xf8\x46\xef\x9c\x66\x36\x26\xf3\xcb\x4e\xfd\xfb\x01\x89\xff\x79\x00\xff\x78\xf0\xf2\xd1\x87\xe3\x3f\xff\x7f\xff\x79\x60\x94\x62\xfa\x8f\xab\x7d\x75\x1e\x86\xdd\xdc\x65\xe7\xb3\x3c\xe7\x3e\xf7\x0d\x34\x8e\x13\x6d\x4f\x56\x77\xb5\x41\x4f\xb1\xe3\x27\x9a\xb2\x58\xe9\x53\x23\xe6\x76\xf1\x0d\x01\xe1\xab\x23\xc6\xb9\x55\xcf\xb6\xf4\xba\x3d\x67\x31\xef\xad\x6d\x3a\x9b\xac\xfb\x00\x33\x1e\x1b\x36\x5b\xd8\xf7\x18\xe6\x75\x3b\xcf\x62\xf8\x5b\xdb\xf9\x52\xc4\xc7\xdb\xf9\x8a\xe4\x2e\x9e\xdb\xf1\xda\x0e\x27\x53\xfb\x1d\x4a\x7b\xa9\xfa\x13\x44\x74\x36\xdd\xf1\x09\x08\xbe\xce\xd7\xfe\xfd\x23\xfd\xf0\xa2\x45\xdf\x03\x62\xf6\x06\xd1\x7c\x0b\xc2\xd7\x79\xe0\x6f\x4a\xbc\x04\xe2\x9b\xda\xde\x04\xe3\x65\x8e\xe8\x66\x30\x5e\x26\xc5\xff\xfe\x62\xb7\xdf\x06\x6f\x57\x6c\xea\x3d\xeb\x3e\x9b\xe1\xba\xb5\x55\x67\x4b\x00\xb7\x84\x5d\x07\xc6\x7f\xc7\x53\xf7\x16\x8b\x95\x9d\x7f\xbc\x28\x7f\x62\xae\x46\xa7\xaf\x60\x59\x0e\x7b\xa3\xde\x1b\x23\x8a\x77\x63\xc1\xbf\x32\xaa\x3a\xd3\xce\xb3\x55\x95\x9b\xa2\xa8\xf3\xdf\x07\x15\x47\x9d\x95\x79\x7b\xfc\xf3\x5e\xa9\xc7\x4e\xbb\x28\xe9\xd4\x93\xff\x73\xdd\xf0\xbe\x99\xee\xbd\x59\xc9\xcf\xd7\xd0\x8e\x6a\xbe\xdc\x7e\xe3\x8a\x3f\x10\x6f\x5c\x2a\xe0\xf6\xb0\x4a\xf9\xe6\x53\xbf\xab\xc6\x1d\x7b\x35\xb0\x3f\x07\xe7\x7c\xd9\xee\x76\x5f\xfd\x32\x77\x7e\x3b\x44\x3f\x19\x1f\x3d\x31\xbb\x6b\xe0\x2c\xb7\x73\xbb\x58\x0d\xaf\x7a\xf7\xe5\x76\x64\xbf\x1b\xcf\xbd\x2c\xb1\xde\x8e\xe7\xc5\xba\xc5\xad\xa0\x5e\xac\x38\xff\xfd\x43\xc0\x9d\x7e\xf4\x1e\x7a\xa7\x2c\xd7\x80\xf8\x98\xda\x5d\xac\x70\xdf\x02\x54\xf4\x29\xb2\x76\x93\xf9\x77\x26\x43\x1f\xa2\x5e\xd5\xfb\x0e\x66\xef\x17\xb9\xf8\xe1\xf2\x52\xf9\x4a\xac\x5c\x7d\x48\xe5\xab\x85\x97\x49\xc5\xba\x97\xad\xc5\x2a\x0f\x7f\xff\x92\x08\x97\x8b\xad\x64\x2a\x8b\x22\x29\x1c\xcf\x97\x48\xb8\x99\x8d\xe7\xf2\xd1\x6c\x3c\x5d\xcb\x17\x6b\x28\xd9\xc2\xed\x5c\xbc\x92\x2c\xe4\x6b\x91\x58\xc1\xab\x34\x78\x29\xc2\x0b\x4d\x94\xfc\xf2\xfb\x83\x94\x52\x0a\x29\x91\x3c\x26\x0e\xc0\xef\x0f\xf8\xf7\x07\xf0\xfb\x11\xe5\x87\x2f\x5f\x7e\x7f\xf8\xe2\x95\x3c\xcf\xf3\xfe\xf3\x9f\x2f\x87\x07\xe8\xeb\xb3\x97\xbf\xff\xf8\xe3\xbb\x2d\x6c\x26\x4a\xe9\x46\x3d\xdb\x28\xb4\x92\xf1\x6c\xbd\x9a\x69\xd4\x69\x3c\x91\xf4\x70\x36\xdf\x6a\xa1\x74\x29\x93\xe3\x05\x2f\xed\xd5\x62\xa5\x78\x8d\x65\x8b\x91\x4a\x2c\x5e\x6f\x16\xf2\x5f\x7e\x7f\xa0\xa7\xa6\x89\xa7\xa6\x09\x2a\xa4\xc4\x84\x4a\x72\xd6\x8e\x2b\x6d\xc4\xb7\xb4\x31\x82\x70\x29\x8e\x92\xb5\x18\x45\x5e\xae\x59\x8b\xd7\x92\xd8\x6b\xa5\xbd\x66\x33\xd1\x6c\xd6\x51\x3d\xd9\x6c\xb5\xca\x2c\xd6\x6a\xc6\xaa\xc5\x4c\xb4\xd9\xae\x78\x0d\xc6\x9b\x05\x72\x42\x51\x4a\xc9\xbe\x69\x22\x7b\x1f\x46\x72\x53\x13\x9b\x99\x04\x2b\xe7\x49\x21\x9f\x8a\x15\x23\xb9\x7c\x3c\xcc\x31\xf2\x08\x66\x6d\x5a\xcc\x47\x2b\xe5\x6c\xa2\x91\xe1\x89\x70\x36\x92\x2b\x65\x53\xf1\x02\xa9\xf0\x58\xab\x51\xaf\xbd\x34\x51\x4a\x46\xcf\x5a\xc9\x10\xff\xfd\x01\xd3\x77\x9a\x49\x0f\x7f\x21\x13\x5f\xfb\x41\x8a\xe7\xc6\xbe\xa1\xe5\x97\xb3\x83\x9f\x30\x98\xb7\xe7\xfc\x7e\xd4\x6a\xbe\x9d\xf7\x7b\x46\x94\x61\x23\x85\xa3\x98\x59\xcb\x84\x81\x1a\x71\x4d\xb5\x90\x0e\x61\xe5\x28\x86\x50\x73\xca\xa4\x42\xc4\x29\x07\x09\xc0\xca\x00\x4d\x91\x66\x18\x6b\xc0\xb5\x95\xf2\x09\x30\xf0\xc9\xf4\x54\x06\xe5\x48\x21\x8b\x91\x73\x88\x08\x05\xb8\x06\x96\x03\x67\xa0\x63\x06\x43\xe1\x43\xa7\x7c\x83\x80\x66\xbe\x0f\x84\x8f\xb1\xa1\x9c\x53\x44\xa5\x60\x02\x22\xaa\x20\xfb\xf2\xfb\x03\x3c\xf4\xd4\x17\xef\x97\x4d\xe1\x66\xa6\x47\x76\xa1\x5d\x25\x13\xe6\xd1\x71\x54\x26\x11\xd8\xf6\xc3\x8f\x0b\xd0\x59\x2e\x36\xa9\xcd\x1e\x36\x4d\xa5\xd1\x52\xe1\xb4\x8a\x77\x9e\xf2\xc7\xf2\x24\xab\xf6\x53\x54\xfa\x6e\xc9\x6d\xaf\x09\xc9\x21\x5b\x78\xf0\x13\x04\x09\x34\x7d\xb9\xb0\xfa\x37\x14\xd5\x40\xdf\x17\x50\x41\xa0\x7d\xe4\x0c\x33\x06\x62\x45\x08\x21\x56\x52\x84\x1c\x66\x50\x03\xab\x91\xa0\x50\x3a\x68\x84\xc4\xbe\xd0\x5a\x73\x8a\x09\x63\xd6\xfa\xc0\x3e\x29\x59\x10\xca\x8e\x89\x4f\x15\x51\xc6\x1a\x22\x8c\xa2\xc4\x11\x2d\x10\xc5\xc2\x02\x26\x20\xc6\x56\x11\x9f\x11\xc9\x15\xb3\xcc\x42\x24\x99\x75\xee\xa9\xa9\xd2\x29\xc4\x99\x25\x4f\xca\x8e\x7e\x7f\x80\x94\x4a\xca\xa5\x80\x5f\x35\x36\x82\x8a\xed\x3e\xcc\xaf\xe8\x04\xe8\x34\x6f\x90\xf1\xae\xb0\xae\x6d\x13\xb8\x3e\x9d\x0c\x1e\xd7\x71\xaf\xb0\x8c\xc0\x0c\xca\xf1\x30\x67\xed\xbe\xc9\x6e\xbc\xe6\x22\x8b\x6c\xaa\x4b\x32\x8f\xb3\x35\xcf\x75\x4b\xbd\x24\x6f\xf0\x6c\x5b\xd5\x66\x32\x95\x79\x0c\x4d\x69\x54\x0b\x9d\x3b\x20\xdc\x2c\xd6\x73\x93\x83\x46\xa5\x9e\xff\x1c\x9d\xdc\xe2\xe5\xdf\x1b\xaf\x58\x3a\xe9\x0e\x6d\x6d\x12\xbc\xbb\xf7\x93\xfc\xb1\xda\x4a\x83\x5e\x82\x54\x06\x43\x6d\x16\x14\x23\xde\x99\xd1\x55\x31\x1b\xdb\xd6\x43\x78\x97\x08\x01\xb0\x55\x95\x25\xaf\xf5\x55\xbd\x58\x21\xe9\x6a\xbf\xa3\xc2\xb9\xc7\x69\xae\x9d\xb6\x23\xba\x8a\x4d\xf5\x3a\x54\x2e\x4c\x1f\x7b\x66\x75\xd4\xe1\xd4\x15\x8d\x8e\x2d\xae\x69\xc5\x57\x8d\x8e\x82\xf4\xfd\x54\xef\x4e\xe9\x83\x1a\x6d\x21\xb5\x90\x33\x85\x19\xc3\x50\x13\x1f\x02\xc6\xad\x26\x06\x3a\x5f\x09\x83\x10\x07\xcc\xc7\xc2\x1a\xa0\x04\xc1\x9c\x1b\x42\x35\x87\x50\x72\x20\x39\xe6\xc0\xd2\x27\x6d\x0c\xc2\x2a\x10\x87\x8c\x23\xf3\xd4\x0a\x22\x14\x16\xdc\x39\xe8\x53\xec\x3b\xe2\x80\x46\x0a\x58\x8e\xb9\x33\x4f\xd5\x3a\xa8\xa9\xe4\x4a\x41\x66\xb1\xf2\x25\xb4\x46\x33\xf3\xc4\xff\xf8\x4c\xa3\xe1\x57\x8d\x96\xc9\x5c\x47\xc5\xb2\x9b\x35\x5c\x82\xea\x34\x56\x2e\x0c\x2b\xd9\x7d\x4b\x47\xe7\x99\x78\xc2\x25\x5b\x03\xd1\xe3\x4b\x98\x4f\xe8\xd5\xa6\x30\xcf\xf3\x5e\xca\xdb\xf4\xfa\xa4\x32\x28\x7b\xc3\xa1\x7a\x6c\xa7\x5b\x05\x90\x2a\x35\xc6\x3e\x1f\xf8\x93\xf6\x18\x36\x74\xb9\x10\x4d\x37\x8f\xca\x7a\xd0\xe8\xcd\x0b\xe2\xdd\x79\x3d\x9e\x65\xe5\xbe\x97\x2b\x54\xcc\xe3\xb6\xad\xab\x8f\x85\x7c\xa7\xb9\x54\x75\x88\x63\xa8\x11\xad\x4f\x0b\x99\x08\x4a\xb5\x51\xb6\x35\x8e\x8f\xb3\x8d\xd6\xb6\x92\x29\x24\x43\xdb\x6d\x75\x0f\x44\x36\xd3\xa1\x7b\x27\xfd\xb4\xdb\x2e\xdb\x76\x16\x5f\x15\x16\x03\x8b\x10\x3c\x94\x9c\xbb\xa2\xb1\x19\x71\xad\xd7\xff\x4f\xd0\x58\x4a\xad\xb6\x94\x1b\xa4\x2c\x22\x8e\x69\x5f\x6a\x86\x99\xc3\x96\x31\x1f\x49\xe9\xb8\x90\x4a\x3a\x6e\x04\xa4\xd2\x11\x66\x24\x56\x58\x00\x0e\xad\xa6\x5c\x10\xf7\xa4\x6d\x41\x68\xbd\xcf\x9d\x20\xda\xfa\x80\x68\x80\xa1\xf4\x9d\x05\x0c\x4a\xad\x20\xe7\x1c\x18\xee\x23\x81\x28\x84\x88\x23\xdf\x58\x04\x2d\x21\x88\x33\xc0\x94\xe0\x0c\x3a\x1f\x6a\xf5\xe5\x30\xfa\x7c\xd6\x58\xf4\x55\x63\x1f\xe3\x36\x8e\x26\xa8\xb5\x5d\xe6\x62\x09\x37\xaf\x96\x43\x99\x7e\x25\xbd\xd1\xd1\xfe\x32\x32\x29\x61\x57\x6b\xe0\x58\xdb\x4f\xfb\x38\x3a\x6c\xc0\xce\x7e\xb3\x57\xc9\xe6\xb4\xa5\xca\xce\xcd\x6d\x6f\xb8\x0a\xc1\x01\xf5\x4a\xc9\x59\x22\x57\x47\xb5\x6a\x94\xd8\x4d\x4a\x4e\xd6\x47\xf7\xf6\xa4\xb1\xd3\x33\xc4\x65\x91\x13\x5f\x38\xb8\x75\x86\x6c\x9a\x28\xaa\x16\x7d\xac\x70\xbb\x39\xee\xcc\xba\x4e\xa5\xd1\xce\xe3\x36\x56\xc0\xd9\xe5\x22\x94\x7c\x8c\xad\x17\xe1\xac\xb7\x1d\x17\x49\x22\xa1\x27\x4d\xb3\x81\x22\x13\xa9\x95\xd3\xbb\xbd\x4d\xd9\x72\xc4\x74\xd4\xc4\x74\x43\xe1\xd5\xc1\xc7\x97\xae\x68\x6c\x39\x77\xad\xd7\xff\x0f\xd0\x58\x01\xac\xd0\x4e\x2a\x08\x7d\xac\xa0\xe4\x10\x6a\xa2\x94\xe0\x88\x23\x07\x95\xe1\xcc\xfa\x8e\x59\xae\x8c\x06\x90\x50\x27\xa1\x33\x14\x4a\x4e\x99\x8f\x09\x34\xe2\xe0\x1f\x83\xd0\x7a\x88\x31\x27\xd8\x29\xe8\x63\xdf\x51\x65\x30\xd6\x8e\x71\x07\x30\xe6\x02\x6b\x1f\x42\x2a\x38\x80\x0a\x3e\x0d\x78\x29\x90\x40\x29\x2e\x2c\xe2\xd8\x31\xae\x94\xf5\x9f\xda\x41\xcf\x34\x16\x3f\x6b\x6c\xdd\xae\x87\xae\x32\xef\x55\xd1\x3a\xbd\xec\xeb\x3d\x1d\x6d\xa6\x63\xdc\x53\x63\x8c\xc2\x0d\x57\x5e\x0e\x58\xc1\xf3\xed\xb2\xd9\x2d\x76\x86\xad\x66\x68\xb0\x5f\xeb\xc8\xc6\x76\x78\x6c\x07\x58\xad\xb2\x29\x31\x9f\xf9\xa9\xfe\x7c\xe2\xf2\x9d\x5d\x92\xac\x2a\x93\x66\x3a\xef\x1f\x10\x3e\x68\xec\x99\x12\xa5\x49\x28\x31\xa7\x94\xb4\xeb\xc9\xdc\xaa\x9f\x7f\x7c\xf4\x3c\xd3\x9d\xaf\x69\x24\x12\x2d\xcd\xab\xf9\xb8\xdd\x2d\xfb\xbd\xc1\xc8\x0e\xb6\xa0\x9a\x07\x45\x96\x8c\xee\xe1\xbc\x5a\x08\xb5\x43\xde\xde\x46\xd7\xe1\x78\xcb\x0f\x4f\x4c\x12\xd5\xd2\x91\x99\x2d\xa4\xf7\x72\x3c\x5b\xed\x0f\x1a\x5b\x7b\xad\xb1\xe1\xd8\xe6\xa2\xc3\xbb\xde\xff\x07\x34\xf6\x8d\x28\xef\xca\x06\x81\x1f\x0d\xef\x4e\x9b\x04\x82\x88\x94\xa1\x78\x8e\xa2\x0e\x41\xf0\xf1\x73\xbd\x5e\x2d\x9f\x24\x59\xea\x4e\xb3\xcc\x62\x7c\x12\xcd\x82\x6c\xe9\x71\xd3\xaa\x44\xe4\xbe\xb9\x6e\xd6\xab\x78\xdb\x2b\xf6\x5a\xab\x8a\x86\xd1\xf5\xa8\x94\xb5\xe2\xe9\xf7\x04\x3e\x47\x7a\xbf\x3f\x3c\x0d\x78\xc9\x53\xa4\xf6\x2f\x44\xb0\x04\x67\x7f\xb0\x38\xc6\xdb\x17\x86\x1d\xa0\x60\x18\x07\x2b\x18\xbe\x90\x0b\xff\xfe\x80\xff\x85\xbf\x4d\xe4\xee\x52\x05\xdc\x5b\x2f\x42\x81\x43\x48\x8d\x9f\xfa\xea\x42\x28\x0c\xe9\xbd\xa5\x82\xc1\x4a\x05\xc1\x85\x58\x4f\xfd\x05\xfe\x05\x2f\xa7\x22\xd8\xdd\x75\x30\x58\xb9\xc4\x85\x58\xe2\x20\x15\xba\x7b\xf7\xd0\x60\xc5\x60\x17\x62\xb0\x83\x18\xec\xdb\x44\xf9\xbd\xa5\x92\xc1\x4a\x85\x2e\xa4\x42\x4f\x52\xdd\xdf\x72\x50\xd0\xa6\x73\xe9\xbf\x21\x38\x38\x70\x20\x25\x38\xff\x1f\x24\x77\xb7\x1e\x18\xb0\xf9\xc8\x4b\xd1\x24\x3c\xba\x05\x29\x24\x78\xf9\x2b\xee\xee\xc4\x03\xee\x33\x79\xa1\x79\xf2\x20\xd5\x45\x02\x77\x57\x45\x14\xb0\x41\x11\x74\x26\x16\xfd\xfd\x01\x1d\x07\x12\x58\x00\x49\x5f\xfe\x0a\x74\x6f\xb9\x48\xb0\x62\xf1\x8b\xde\xe2\x87\xde\x22\x48\x50\xfe\xf2\x97\xc8\xbb\x1b\x57\xc0\x62\x89\x4b\xe3\x12\x47\xe3\x42\x98\x50\xc6\x25\x38\x7d\x10\xf8\xee\x9c\x1b\xb4\x47\xbc\x50\xc3\x03\x5b\x89\x8b\x21\xd2\xdd\xc9\x0a\xb2\x80\x39\xf8\xb2\xbb\xd8\xb1\xbb\x18\x96\x98\x10\xc4\x10\x92\x14\x08\x28\xc8\xdd\xbd\x46\xd0\x63\xbf\x57\xfc\x75\x10\x4c\x82\x6f\xff\x63\xf0\xee\x82\x05\x6c\x60\xf2\x42\x0f\xc9\x71\xd8\x04\x04\x93\x94\x51\x04\x39\x96\x10\x83\xbb\xf7\x17\xbc\xdb\x58\xfd\xd4\x5d\xa7\xd1\xfa\x7d\xfb\x86\x07\x6c\x4d\x17\x7d\x83\x4f\xc6\x04\x91\x04\x18\x21\x2a\x00\x23\x14\xde\x7f\x48\x0b\x03\xa6\x60\x0c\xce\x96\xc1\xbf\xf6\x94\x7c\x92\xef\xf0\x09\x1d\x02\x90\x67\x01\x01\xe5\x08\x23\x40\xef\xce\xc8\x08\x04\x3c\x74\xbf\x54\xc2\xe3\x50\x83\x70\x06\x25\x78\xf9\xcb\xee\x6e\x5c\x01\x3b\x79\x7a\x31\xd4\xa0\x87\x01\xd4\x45\x10\x0c\xef\xee\x09\x61\xc0\xdd\x05\x2f\xc4\x82\x5f\x77\x03\xdc\x53\x86\x80\x3d\x06\xbd\x54\x39\x7a\x74\x19\x92\x01\x2e\x08\x86\x98\x23\x4a\x24\x80\x77\x77\x19\x28\xe0\xe1\xd2\x85\x27\x84\x5f\xf7\xd4\xdc\x53\x84\x80\xe3\x44\x08\x2e\x84\xa0\xa7\x08\x58\x00\x2c\x11\xa4\x4c\x30\xc4\x09\x05\xf7\x1f\x1c\xc1\x80\x67\x5e\xf8\xa5\xd6\xf1\xa3\xd6\x11\x20\x08\x05\x1c\x10\x84\x28\xa6\x08\xde\x3f\x02\x0e\x58\x30\x71\x39\x38\x3a\x05\x1f\x50\xd2\xb3\x3f\xf0\xee\x51\x55\xc0\x5e\x82\x5c\x78\x3a\x72\x70\xe0\xf7\x37\xa8\x80\x67\x99\xe9\x65\x24\x7f\x1c\xba\x4a\x84\x01\x67\xcf\x7f\x7f\x82\xd6\x05\xcc\xaf\xfc\x72\xd8\x77\x94\x0b\x8b\x6f\x92\xbc\x7b\x7f\xe1\x80\x09\x16\x5f\x3a\xf1\x83\x5c\xf8\x27\xcc\x34\xe3\x80\xa3\x0b\x74\x29\xc9\x71\x60\x47\xbf\xfd\xef\x65\x4e\xe2\x8d\x25\xbb\xd7\x47\x38\x3f\xb1\xcb\xf3\xcd\x33\x86\x9f\x2b\xf3\xf2\x98\xe0\x27\x4a\x7b\xe3\x90\xdf\x27\x4a\x7c\xe3\x38\xde\x8f\xae\x7b\x9e\x1d\xc9\x3b\xdb\x6c\x5d\x0a\xe7\xd2\xad\x4a\x24\xc6\x4a\xb4\x9d\x4c\xd6\x23\xf5\x62\xa2\x91\xa9\xd0\x64\x23\x17\x4f\x72\x82\xa3\x24\x16\x8d\xb3\x5c\xb5\x15\xae\x86\x5b\xc9\x4a\x91\x67\x93\x85\x70\x2c\x75\x3e\x0f\x9b\xf0\x1a\xe9\x6d\xaa\x5c\x2c\xf1\x01\x65\xbd\x99\x80\xc3\x0a\xb3\xfb\xc8\x38\xb4\x6f\x3d\xc6\x12\xcd\x7d\x9a\x44\x73\x85\xe8\xce\xc9\x36\xf6\x9e\xd3\x61\x73\x52\xe4\xf0\xb1\xe4\x79\x5e\xac\x97\x07\x6b\x2f\x6c\x37\xeb\x36\xe9\x25\x3b\x73\x36\x0b\x2d\x76\xf1\x48\xca\x2d\xf5\x62\x39\x9c\x56\xe6\xa0\x33\xe7\x8f\xe3\x41\x7e\xbd\x5d\x1c\x96\xbb\xc3\xbe\xac\xed\x7a\x87\xdf\x77\x9e\xff\x84\x0f\x85\x6e\x9e\xff\x1d\xf5\x3c\x19\x39\x5f\x2a\xaf\x37\x06\x89\xc7\x6c\xb9\x9b\xad\x54\x6a\x23\x48\xf7\xe4\x11\x15\x63\x1e\x5e\x7a\x8b\x54\xa6\x15\x37\xf5\x02\x70\x6a\xd6\x9d\x26\x3a\xc5\xc9\xa1\xb8\x59\x89\xac\x69\xad\xdb\x6b\xe5\xc6\xa9\xe2\x20\xcb\x43\xd5\x39\x8f\xb7\x5b\x9a\x56\xc6\x20\x0d\x56\xd1\x7c\x27\x39\xdb\x0f\x63\xa9\xc4\xe8\x31\xdd\x54\x80\xd0\x5e\x6f\xdc\x76\x15\x9a\x70\xb1\xea\xc2\x4b\x98\x52\x3e\xd2\x9e\xc6\xab\xa9\x39\x4d\x17\x2a\xcd\x74\xa6\x53\xe8\xe4\x22\x4f\xc6\x79\xe1\x04\x02\xee\x1a\xfc\xa9\xae\xc9\x7d\xdb\x35\xd1\xc8\x02\xaf\x52\x9d\x68\x24\x53\xec\x66\xca\xb1\x48\xa3\x3e\xa7\x83\x61\x87\x97\xba\x61\x65\xf6\xab\xf2\xae\x3b\x72\xf5\xf6\x32\x46\x72\x43\xbf\xf3\xdc\x35\x7d\xef\xdb\xf4\xc3\xd0\xe7\x74\xc4\xb5\x85\x88\xe7\x30\x74\xf4\x31\x1d\x2e\x34\xb2\x62\x12\xc2\x60\xdb\xa4\x19\xb1\x66\x53\xd6\xf1\xeb\x54\x47\x6a\x2e\x6a\xf6\x05\x9c\x29\x28\xba\x93\x1b\x14\x2a\xb8\x24\x4e\xd2\xc1\x78\x91\x9a\x64\x6b\x6d\xbd\x41\xc3\xe8\xb6\x40\xe4\x44\x0d\x63\x83\xbd\xd7\xb9\x3b\xf4\xe4\x53\xd0\x97\x2e\xa0\x0f\xeb\x46\xb4\x18\xcd\x4f\x8c\x1d\x76\xa7\x71\xf9\xb8\x64\x99\x06\x0f\x35\xaa\x83\xb0\x67\x27\xad\x6d\xb3\x5d\xce\x15\xbb\xdc\xeb\xa3\xde\xe3\x8b\x55\x5c\x6e\x6b\xfe\x61\xe8\xe7\x7c\x59\xd0\x21\x38\x1e\xcc\x22\xe5\x16\xa5\xfb\x6e\x37\xb3\xc6\x95\xb6\xdc\xa6\xbb\xa1\xa4\x09\x19\x93\x2c\x00\x8f\x26\x2a\xe1\xfd\xb0\x10\x5e\xb4\x87\x7e\x11\xe4\x8a\x9b\x7a\xd6\xd4\x87\xcb\x96\x28\x2d\x66\x56\x0c\x27\x64\x13\x8f\xd8\x71\x2f\x9c\xda\xaf\x46\xf9\x9c\x88\x6e\xee\x0e\x3d\xfd\x14\xf4\xb5\x4b\xad\x8f\xd4\xbb\xee\xb1\x5a\x90\x8b\x6c\x98\x45\x17\xd5\x6c\x75\x5a\xce\x86\xa3\xd3\xfd\x74\xd3\x2b\xac\xba\x02\x45\x53\xae\x47\x33\x5d\x7f\x00\x5f\xa0\x1f\x7e\x5a\xeb\x23\x83\xa2\x5c\x4f\x1f\x13\x89\x70\x2f\xe1\x29\x59\x43\x6a\x3b\xcb\xed\x13\x4b\x99\xc3\xdb\x7d\x61\x54\xc9\xe6\x33\xe3\x47\xbe\x1b\xd2\x42\x6c\xc8\x80\x37\xa9\x4d\x46\x76\x12\x49\xe7\x1e\x07\x61\x13\x9e\x96\xb6\x36\x4d\xa2\xa1\xc7\xfe\x26\x6a\x49\x61\x93\x0b\x75\x50\x3e\x19\x29\x1d\xa1\x7f\x9b\x5d\xae\x9d\x74\xbe\x81\x5d\xbe\x9e\x76\x7e\xee\x4c\x4a\x99\x04\xcc\x09\x4d\x18\x44\x06\x11\x49\xa4\xa6\x96\x63\x8b\xad\x11\x0e\x02\x60\xac\x01\xc8\x47\x40\x31\x40\x39\xa5\x58\x13\x6e\x94\x52\x50\x11\x26\x80\x53\xe7\x9d\x7a\x30\x8d\xd8\xe1\x63\x2b\xdc\x1a\xc7\xba\x31\x19\x5d\x55\xc7\xb3\xcc\x7c\xdf\xa8\x67\xa7\x3c\x97\x71\xa1\x7c\x9f\x94\xda\x2e\x37\xee\xe4\x36\xa4\x98\x0e\xc1\xf1\x71\x7b\xd6\x7b\xc2\x5f\x3f\xd9\xfc\xc3\xc2\xbf\x9c\x6e\x7e\xd9\x85\x7f\xba\x4e\xf8\x78\x57\xd9\xc3\xab\x74\xd8\xeb\x06\x5e\xd9\xc4\x95\x92\xc6\x76\xb9\x99\xcc\x07\x53\xb5\x58\x4c\xbb\x73\xb5\xb0\x57\x4a\xaa\xda\xc5\xf2\xa1\x12\x8d\x3f\xe4\x8f\x99\x1f\xfe\x78\xa8\xd8\xe9\xd2\x8e\xb4\x9d\x3f\x20\x00\xe9\x47\x2a\x72\x93\xb9\x6f\x17\xfe\x74\x32\x1e\xdb\xed\x72\xa8\x56\x63\xbf\x7b\x59\xd1\xe1\x2e\xb0\x8f\x14\x76\xdc\x66\x78\x3a\x6b\xb7\xb8\x2e\xff\xff\x7d\x38\x9a\xf7\xb7\x65\x6f\x64\xff\xf6\xef\x07\x70\x3c\xa9\xf7\xb7\xd3\xe5\xca\x7f\xfb\xf7\xc3\xf1\xf9\xe1\xcb\xae\x5a\xfc\xed\xdf\xc7\x9b\xc8\x0e\x5f\xfe\xef\x29\xb3\xb3\xf6\x63\x19\x47\x6a\xbb\xdc\x2e\x7a\xfb\x0f\x66\x9f\xdb\x85\x9d\xaf\xbf\x97\xf9\xb7\xff\xfd\x10\x14\x6a\xb1\x3c\x5c\xa1\x63\x4e\x57\x59\x5c\x81\xe2\xd3\xdb\x2f\x3f\xd0\x8e\x93\xb7\x55\x73\xbf\xdb\x5b\x9f\x1e\xbe\xd1\x25\x2f\x7d\x00\x4f\x80\x1c\xe0\x98\xff\xed\xdf\x0f\x7f\x5b\x43\xf8\x2f\xf8\x2f\xf0\xb7\xd3\x03\x7f\x35\x9f\xdb\xf1\x32\x7b\x10\xed\x6f\xff\x7e\xa0\xdf\x7e\x1f\x3e\xdc\x72\xf4\x84\xdb\xff\xff\x19\xc8\x17\x48\x9f\x73\x3e\x15\x8c\x7d\x40\xad\x52\xd0\xf9\x46\x61\x84\x08\xd6\x8c\x41\xec\x38\xb3\x52\x02\xc9\x19\x76\xc0\xf8\x1a\xfa\x54\x39\xe8\x04\xf5\x9d\x76\x9a\x11\x8a\x18\x40\x9a\x58\x8b\x4e\x2d\x7a\x2e\xf7\x49\x8b\xbf\xe9\xc0\xe7\x27\x07\xd9\x9f\x54\xee\x9b\x47\xff\x7b\xf1\xfb\xc5\x58\x4d\x9f\xda\x05\x7d\x89\xb0\xaf\x7c\xaa\x80\xc4\x04\x62\xc6\x14\xa5\x4e\x19\x89\x05\x24\x12\x2b\x6c\x05\xe2\xce\xfa\x56\x4a\x0a\x30\xd3\x8a\x1b\xed\x33\xe2\x0b\xe3\x13\x23\x7d\xff\x6f\xbf\x5d\xa9\xe1\x0d\x0c\xac\xc3\x50\x21\xa0\xb0\x14\xd6\x72\xec\x5b\x84\x10\xa7\x56\x09\xc8\x39\x17\x4c\x2b\x9f\x12\x46\x99\xc3\xd8\xf8\x3e\x71\xd8\x59\x9f\x01\x43\xa9\x31\x0e\x32\x6c\xe4\x8f\x63\x00\x7f\x7f\xfd\x6c\xb2\x5a\x4e\x57\xcb\x60\x65\x7f\x0f\x61\xf0\xc9\xf4\x23\x08\x7f\xba\xae\x3b\x69\xd9\x7f\x31\xf8\x2f\x06\xff\xc5\xe0\xbf\x18\xfc\x17\x83\xff\x62\xf0\x5f\x0c\xfe\x8b\xc1\x1d\x31\x38\x7c\xfa\xbf\x3e\x1e\xbc\x2c\xfc\xe9\xe1\x2e\xd1\x6b\xe9\x79\xa1\xe1\x38\xf9\xd7\x89\xf7\xfc\x4a\xac\x0a\x0a\xb4\x60\x27\xb3\x75\xbe\x5d\x5b\x8d\x17\x9b\x69\x48\xa0\x62\x37\x3c\x14\x3b\xeb\xed\xa3\x1d\x31\x0e\x35\xcc\xcb\xb1\xa5\xf8\xe1\x2f\xac\x4f\xc3\xeb\x1e\x68\x55\xc0\x60\x98\x5e\x5a\xff\xb1\xb8\xec\x6f\xbd\x3c\x2f\x65\x23\x91\x51\xb8\x59\xaf\x2e\x93\x68\x36\x51\xe5\x49\x94\x3d\xcf\x08\xa4\x7b\x9f\x9c\xa6\xb9\x65\x46\x21\xec\x0d\xbc\x02\xa0\x83\x7d\xaf\x9a\xaa\x14\xfd\xa9\xb4\xa9\x5d\xb4\xb6\x9b\xa3\x46\xbb\x55\x49\xc4\x0a\xfd\xbc\x6b\xac\x56\x5b\xd6\x1c\xce\xe7\x8f\xa1\xb6\x2d\xd8\xb5\x23\xb1\x6e\xdf\x9a\x55\x09\xcf\xd2\x35\xe6\x3d\xf2\x74\xa7\x98\x1b\x95\x96\xbd\xb9\x1b\x3e\x4e\xe2\x72\xb7\x6a\x1f\xe7\xad\x9f\xda\x13\x69\x7d\xf2\x00\x5a\xf8\x96\x69\xb0\x52\xda\x8b\x2e\x0b\xed\x1c\x19\xec\x62\x7d\x9c\x71\xcd\x5e\xae\x03\x73\x33\x39\x1c\x35\x62\xdd\x6e\x74\xb2\x6f\xc2\xf9\x7c\x61\x87\x54\xb1\xd0\x1a\x35\xfb\xe3\x39\x7e\x0c\xa7\x5a\x78\xac\x07\x79\xd6\xab\x17\x3a\xc5\xd5\xae\x15\xdd\xa7\x07\xd9\xd6\x0c\x53\x37\x0b\x3b\x7f\x3e\x2a\x2d\x0e\xcd\x71\x5e\x23\x26\xbb\x5e\x36\x56\x0f\xb9\x68\x33\xdb\x9c\x49\x3f\xdd\x59\x4e\x26\xa1\x6a\x93\x94\x61\x31\x5e\x7f\x9c\xd3\x56\xa6\xb6\xcf\x45\x56\xf1\x56\xac\xd1\x28\x8e\xcb\x51\x31\xad\xa1\x44\xce\x8e\x6d\x34\xd9\x4a\x0e\x57\x09\xb0\x7a\xac\x85\x74\xbb\x36\xdf\x37\x4b\x93\x79\xa2\x70\x9c\xab\xfb\x84\xbe\x75\x9e\xfb\x7f\xf3\xd9\x03\x7f\x87\x54\xff\x31\xfd\x2d\x45\xbd\x69\x34\xa4\x99\xeb\x76\x3b\xad\x6e\x27\xb1\xae\xe7\x47\x0b\xd5\xcf\x6d\xe7\xae\x9a\x17\xfe\x7e\x3a\xe8\xed\x2b\xd3\xd0\x4a\x4c\x6d\xb5\x9b\xb6\x4b\x2f\x13\xcf\xa4\xc7\x33\xaf\x57\x2d\x4e\xbd\x66\x49\xd5\x72\xcd\x9e\xf5\x42\xa1\x89\xf0\xf0\x2a\xba\x88\x16\x49\xbe\x5f\xde\x1c\x26\x7f\xc3\xb4\xce\x1e\xeb\x32\xb3\x4a\x17\x95\x18\xa1\xfc\xba\x38\xd2\x91\x91\xb3\xe9\x99\x73\xad\x78\x5b\x26\x50\x75\x42\xc2\x5b\x06\x6d\xec\x70\x3e\xfb\x70\x60\xd0\xcb\xb0\xbe\xed\xe1\xfe\x68\x92\x12\xd5\xc4\x30\x1a\xb2\x1d\x1f\xf3\x62\x73\x99\xcc\x64\xf6\x8d\xba\xd8\xd4\x7b\xed\xb0\x8a\xac\x68\x96\x1e\x56\x08\xda\x87\x1f\x1d\xd6\x71\xb2\x97\xd3\x9e\x2f\x1f\x73\xe7\xf8\xdc\xb2\x10\x79\xe8\xa4\x59\xd8\xa5\xce\xec\x35\xe2\x5d\x4b\x8a\x0f\xd6\x83\xcd\xa1\x7a\x34\x1d\x8a\x49\xaf\xdc\x97\xfb\x5a\x2a\x3e\x95\x5e\x2b\xa7\x32\x05\x0d\x0a\x9e\xce\x2d\x72\xfd\x74\xbe\x56\x4b\xda\x8d\xc2\xe9\x4d\x25\x09\xea\xa8\xad\x26\x43\xde\x19\x24\xe9\x6e\x34\xc7\x91\xfc\xa6\x00\x2d\x6d\x0a\x97\xe8\x0d\xb3\xed\xd1\xe3\x96\x16\xf9\x64\x50\x6c\x44\x8f\x93\xf3\xab\x09\x9e\x2c\x09\x9d\x45\x8a\xb1\xed\xb4\x14\xc2\x93\x64\xfe\x71\x0f\x79\x79\xd7\x5b\xc0\xa1\xcb\xc5\x5b\xa3\x52\xa3\x33\x5f\x55\x1e\xab\x07\x1b\x7c\x99\xd1\x8f\x5e\xea\xcb\xcb\xbf\xa3\x2f\x5f\xc6\xeb\x35\x70\x7a\x90\x6d\x90\x38\xb0\xdd\x02\xf3\x76\x32\x02\x8a\x8b\x44\xac\xb3\xf6\x21\x87\xb0\x26\x45\xab\x4f\x46\xd9\xc1\x48\x96\x38\x1d\x44\xf0\xfa\x58\xca\x4a\xed\x3a\xc7\x9e\xbc\x28\xff\x2c\x25\x9e\xfb\xaf\x94\x9a\x46\xd3\xa5\x92\xe7\x15\x66\xa9\x55\xac\x55\xe8\xce\x0c\xcf\x0a\xb0\xdf\x8e\x13\xc3\x58\xce\x86\xb9\xaa\x9a\x18\xc9\xce\xe3\x6c\x1f\xa3\x09\xa8\x3d\xa5\xb7\x7b\x5d\x5c\xe4\x13\xdb\xb2\x2b\x55\x27\x59\xbf\x3b\x8a\x2c\xd7\x8f\x0b\x4c\xe3\x28\x1a\x2f\x7b\xae\xfe\x38\xea\x4c\x0e\xb5\xcc\x67\x79\x96\xb5\x05\xd5\xe9\x6f\x73\xaa\x56\x94\x2c\xbc\x77\x0b\x69\x81\x3f\x99\xe7\xdb\xcd\x7d\xb8\x91\x1e\xc4\x27\x99\xe7\xfe\x3a\xae\x58\x74\xbe\xd5\x9c\xb3\xfe\x3e\xa6\x17\xfb\x0d\xd7\xeb\xf9\xd3\x83\x08\x5c\x85\x4d\x72\x52\x5d\x75\x72\xeb\xd2\x32\xca\xc3\xdd\x54\x16\xe7\xad\x34\xf5\xa2\x4b\xa4\x1e\xd3\x3d\x9a\x5e\xd7\x0a\x8f\x6d\x6f\xc9\x0f\x55\x65\xf5\xa3\x3d\xb6\x31\xf2\x54\x5f\x3c\x76\x0d\xa4\xf0\x73\xff\xc5\xbc\x76\x3f\x1a\xee\x87\x4b\xdb\x49\x81\x27\x12\xf9\x50\xac\xb1\x6a\xf7\x22\xa1\xb9\xaa\x8f\xd2\xd5\x78\x9e\x6f\x3d\x1c\x5d\x0f\x87\x73\x21\xb2\xe9\xb1\x1c\x66\x3b\x60\x3e\x1b\xd2\x96\x37\x4a\x32\xbd\x71\xce\x36\xe2\xdb\xc6\x6e\x87\x07\x95\x5a\x24\x56\x1f\xf3\x62\x78\x38\x36\xb5\xfc\xb1\x97\x6e\xb6\xb7\xcb\x23\xea\x41\xdb\x5b\xa4\xee\xad\x07\x67\xf8\xbf\xea\x95\x43\x3a\xb3\x37\x30\x0c\x53\xce\x15\xab\xc7\xab\xa3\x59\x2f\x9c\x29\x35\x7b\xbb\x0e\x6b\x75\xfa\xd5\xa2\x5f\x13\x63\x99\x1b\x1a\x4d\x13\x26\x63\xdb\x22\x5a\x1e\x34\x12\x5c\xf2\x59\x0c\x57\xc7\xa1\x46\x96\xae\xe2\xad\x71\x8b\xcd\x86\x66\x91\x92\x35\x0c\xbd\xca\x72\x39\x0e\xe5\xba\xe2\xd0\x3f\x9f\xb0\xb7\x57\x4e\x22\x60\x7b\x8b\xb0\x12\x37\x67\xf8\x87\xbf\x67\x6f\x49\xdb\xdb\x64\x0b\x85\x66\x63\xd3\xf6\x3c\xd8\xaf\x17\x9a\xf3\x36\xcb\x24\x16\x8b\x30\x9b\x6d\x8c\xab\xe1\xc7\x7c\xca\x5f\xad\xe9\x64\xe8\xa5\xf7\xa5\x9c\x9d\x15\x8b\x7c\x3c\x8b\x35\x16\xe9\xd0\x12\x54\xfc\x81\x06\xf1\x25\xec\xcd\x1a\x55\xc4\x6c\x6e\x63\x8b\x3e\x4e\xa4\xbd\xe3\xfd\x1a\x37\xdb\x5b\x24\x75\xd1\xde\x80\xed\xcd\xcb\x66\x4b\xcd\xa3\x53\x3a\xe2\xd3\xba\x06\xd2\x99\xbd\x85\xa7\x99\x4e\x79\x2f\xe6\xf1\x59\xdf\x8c\x67\xe1\xca\xb6\x90\xac\x87\xc5\xaa\x50\x2f\xf6\xf7\xd3\xbc\x37\x8b\x20\x0e\x50\x62\x5a\xdc\x54\xf3\xe9\xa8\xca\xd5\xd2\xca\x0b\xb1\x2e\x18\x56\x4c\xae\x23\xe3\xd5\x75\x27\xc7\x22\x73\xaf\x12\xde\xf8\x31\x35\xea\xc9\xe9\x6c\xb7\xd7\x9d\xe2\xa1\x96\xdb\xed\x2d\x71\xd9\xde\x97\x8f\x81\xd8\x5b\xa9\x1a\xcf\x89\x33\xfc\x93\xd7\x40\x3a\xb7\x37\xd5\x6e\x56\x43\x7a\x10\xdd\xe3\xf8\xac\x9a\xee\x36\x33\x4b\xbf\x62\xd7\xb4\xb3\x9f\xc7\xc0\x26\x8b\x12\x95\xf1\x62\xef\xf8\x92\xcc\xc2\x55\x7f\xdc\xc0\x45\xd2\xb5\x49\xeb\xc5\x53\x83\x4a\x7f\xd9\xd9\x83\x11\x4f\x75\x12\x55\xd8\x99\xd4\x87\x7a\x69\x3c\x5a\x5c\xb6\xf3\xf9\xe3\xf8\xf3\x76\x7b\x8b\xdf\x99\xdf\xc2\x7b\xfb\x68\x3a\x5e\x5c\xda\x58\x3a\x36\x9e\xd0\xf1\x55\x90\xce\xec\x2d\x9c\x6a\x9b\x7a\xcb\xdf\x59\x43\xeb\xae\x45\xf7\xd9\xd8\x66\xed\x36\x8f\x8e\x2b\x99\x42\xc3\xce\x24\x36\xce\x47\x3a\xd3\x71\x6d\x36\x55\x23\x50\xa4\xde\x36\x95\x05\xa1\x09\x06\xbd\x0d\x1f\x14\x26\xd1\x62\xb9\x57\x1a\x8c\x59\xb8\x0e\x1e\x33\x0a\x0f\xf2\xe9\x59\x85\x6f\x3a\x47\xd3\xb9\x9d\xdf\xc8\x45\x7b\x83\xb6\xb7\x8d\xf6\x4b\x67\xf6\x16\x9e\x5c\x03\xe9\xdc\xde\x16\x2e\x35\xc3\x79\xaf\x5a\x4d\xb7\x85\x97\x0d\xb7\x43\xbc\x31\xec\x36\x7d\x41\xda\x1b\x6f\x9e\xa8\x21\x04\x16\xf3\x4e\x72\xb0\x6a\x3b\xd7\x6d\x86\x4b\x1d\x95\x6f\xd9\xc9\xa4\x97\x8d\xca\x49\x01\x6d\x27\xbd\x49\x6c\xd0\x9f\xb7\x97\x8f\xe5\x9e\x9b\xcc\x52\x5b\x95\x4e\xd8\xda\xd1\xf5\xde\x6e\x6f\x97\x4e\x22\x68\x7b\xf3\xcc\xbe\x51\x3b\xfe\xb2\xe6\x7d\x84\xdf\xd2\xe3\xf9\xb2\x99\xd8\xf5\x07\xb3\xa9\x97\xf6\xe2\x2e\xda\x02\xe9\x5d\xba\xdf\x74\x15\x19\xda\x36\xb3\xd9\xa4\x59\xe1\x66\x15\x81\xd4\x76\x9a\x8e\x84\x4b\x28\x03\x5c\xb7\x35\xae\xf7\x16\x60\x39\xd6\xca\x8f\xc8\xd0\xba\xea\x8f\xb2\xe3\xc6\x36\xd3\x81\x93\x44\xa4\x2c\x57\x8b\x63\xa5\xb7\xdb\xdb\x2b\x27\x11\xb0\xbd\xc5\x72\x85\x14\x38\x15\xf2\xf4\xe7\xfa\x35\x22\x67\xf6\x96\x6b\x61\xde\xc9\xc6\x79\x06\x08\x1d\x5a\x55\xeb\x8d\x34\x4f\xc8\x6c\x26\xd3\x59\x8d\x54\x5a\x0f\x42\x90\x25\x08\xe3\xb6\xd0\xec\x24\xfb\x8d\x6a\x2e\xe3\x1c\xa8\x9b\x49\x05\x8a\xc1\x34\x5e\x1d\xb6\xf3\xfd\x75\xde\x16\x71\x2b\x37\x1e\xcd\xec\xbe\xd8\x23\xf1\xc9\x68\xbf\x39\xaa\xc2\xed\xfc\x76\xd9\xde\xa0\xed\xed\x45\x93\x8e\xf6\x76\x15\xa4\xf3\xf1\xa4\xea\xc7\x23\x7b\x9b\xa5\x93\xa7\x10\x8c\x79\x89\x72\xa1\x15\x2d\xa3\x49\x79\x0a\x8a\xe3\x7e\x2d\x55\x2f\x77\xb6\xf5\x68\x7d\x92\xc9\x64\x47\x99\xce\x62\x3b\x09\xcd\xb2\xa3\x6e\x7a\x3c\xe6\xdd\x7d\xb9\x2e\xfb\xad\x8d\xf7\xa8\xc6\x71\x00\x52\xb4\x6f\x43\x9e\xeb\xfa\xc5\x7d\xea\x18\x7f\xdd\x6e\x6f\xd5\xcb\xf6\xbe\x7c\x0c\xc4\xde\xb2\x58\xb6\x1e\x8f\xbf\x3c\xf8\xa3\xfd\x55\x94\xce\xec\xad\x59\xeb\x6a\x5a\xaa\x7a\x85\xc7\x75\x9d\x0e\xaa\xb1\xd2\xac\x30\x95\xbb\x1e\x59\x44\xed\xbc\x5f\xa3\xeb\x54\x95\xd6\x93\x38\xd7\x2b\x24\xb0\x80\xfb\xd4\x74\x38\x52\x2e\xdd\xcf\xe6\x93\x15\x80\xec\x78\x30\x19\x17\x92\xcb\x64\x23\xb5\x9e\xed\xc7\xf5\x52\x3f\x39\x2b\x61\x21\x3f\x1b\xbf\x1d\xc7\xa3\x67\x29\x68\x7e\x5b\x6f\xfa\xf3\x73\xfc\x2f\xaf\xf5\x39\xa4\x33\x7b\x4b\xaf\x13\xfd\x8a\x71\xb1\x64\x75\xb9\x4e\xb7\x1c\x5b\x83\x5d\xad\x1e\xaa\x78\xb4\x36\x9b\x34\xfa\xbe\x68\xa5\x1b\xeb\x7d\x2b\x37\x56\xe5\xa1\x68\xb6\xbc\x44\xc2\x2b\x36\x40\x0f\x37\xd3\x69\x1a\x2b\xe6\xb6\x7e\x12\x8c\x1b\xe9\xe9\x64\x37\x9b\x6e\x44\x23\xbc\xac\xe7\xf3\x99\xdd\xe6\x38\xbf\x71\xb3\xbd\x79\x97\xf7\xbd\x05\x1d\xbf\xd5\x36\x61\xff\xc8\xa1\xc7\xf8\xed\xea\x8d\x88\x67\xf6\x16\x29\x76\x9a\xb3\x8c\x1f\xca\xd8\xe8\x94\x97\x7b\x60\x05\xa2\x20\x15\xab\x6e\x60\xa7\xc0\xc8\xa6\x9c\x68\x99\x24\x24\xa2\x82\x0d\xa8\xcf\x2b\x91\xf6\x5c\x84\xf6\x9d\x65\xa2\xdc\x26\xf9\x79\x77\xb8\x6e\x55\xe7\xde\xb4\xb6\xb2\xab\xfc\x6e\x1a\x87\x2d\x9b\xab\xd6\x3b\xd8\x4f\x1d\xfb\xfb\x76\x7b\x33\x97\xed\x7d\xf9\x18\x88\xbd\x15\x34\xde\x9f\x80\x39\x38\x27\x77\x0d\xa4\x73\x7b\xf3\xe3\xbd\x7e\x6f\x5a\x0f\x0d\xdb\xe5\x54\xb4\xd5\xf3\xf3\xd3\x64\x7c\x33\x56\x59\x92\x06\xf1\xd1\x66\xe0\xcf\x41\x42\xd6\xb7\x49\x32\x6c\x57\x5a\x9d\x6c\xbf\x53\x1a\xaf\x3b\xe3\x5e\x24\x5c\x9a\xaf\x57\xc8\xce\x76\xb3\x42\x3c\x19\x11\x49\x40\xaa\x3c\x2a\xfb\xcd\x85\x6d\xcd\xc9\x67\xe3\xb7\x57\xfa\x1f\xb0\xbd\xc5\x41\x17\xb1\x33\xfc\x5f\xd9\xf7\x21\x9d\xd9\x5b\xb4\x17\x2a\x84\x5c\x2b\xd9\xb6\xe1\x75\xdb\x5b\xe3\xe8\xe0\x71\x56\xcb\x2e\x17\x78\xf3\x58\x9e\xb4\xca\xb9\x52\x64\x5e\x99\x8e\x1e\x79\x31\x93\xa3\xd9\xdc\xac\x97\x88\xe4\x97\xcd\x59\xa7\x87\xd3\x7a\x11\xa1\x0d\xb9\xf0\x5a\xd3\x55\x75\x91\x91\xb9\xe5\x42\x88\x46\xf8\x91\xb3\x7e\xe7\xb3\xf6\x76\xb9\xd9\x33\x68\x7e\x1b\x96\xb2\xf4\x1c\xff\xab\x41\xee\x39\xbf\xd5\xec\xb4\x5d\x9a\x77\x56\xac\xd8\xc5\xbb\x6d\x25\x1d\x6d\x6e\x48\x72\xfa\x98\x29\xaf\x36\x32\x6c\x06\x1e\xe9\xca\xb1\x53\xbb\xc8\x7e\xae\x69\xb4\xb9\x68\xed\x5c\xb8\x37\xdb\xc7\x1a\xfd\x06\xca\xf6\x61\x72\xb9\xd9\x2c\xa7\xa0\xb0\xb3\x31\x5b\xa8\xd8\x12\xf5\xf6\xf9\x3d\x29\x1c\x6a\xb9\xdd\xde\xe2\x97\xed\x7d\xf9\x18\x88\xbd\x55\x26\x71\xd1\x39\xc3\xff\x32\xa8\x3e\xa6\x33\x7b\x93\xd9\x52\xad\x1b\x2e\x96\xe2\xed\xc2\x64\x5a\xe9\x86\xd6\xab\x5a\xbe\xe8\xd7\x46\x20\x9a\x4d\xc9\x4d\x94\xa8\x0d\x21\x32\xe2\xaf\x98\x17\xcd\xd9\xbe\x5a\x8a\x25\xca\xed\x56\xfb\xc6\x7a\x2b\xca\x9b\x52\xae\x68\xe4\xde\x34\x87\x9b\x48\x8c\x1a\xe1\x57\xf1\x6a\xba\x59\x15\xbd\x4f\xda\x5b\xec\xce\xf1\x5b\x2c\xe5\x56\xe1\xb3\xf9\xc9\xf2\xf7\xf8\x2d\x4b\x32\x9d\xd5\x40\x74\x53\xb5\x19\x29\xdb\xdd\x2a\x97\x8b\x4e\x92\x26\xeb\xcd\x69\xb7\x14\x4b\x25\xf7\xf9\x72\x2e\x34\xee\xe6\xe2\x23\xba\xde\x54\x77\xb5\xe1\x32\x3e\xab\x0e\x44\xbd\xd0\xc4\xdd\x48\x27\x3a\xab\xa0\x44\x77\xa7\x39\xdf\x84\x86\xa3\xca\x74\x55\xdd\x15\xc5\x68\x5c\xfa\xa4\xbd\xbd\x9a\xe4\x09\xda\xde\x46\xd9\xdd\xf0\x6c\x7e\x32\x72\xf5\x8e\xea\x73\x7e\x4b\x8d\xbd\xfa\xae\x9f\x8b\xc2\x68\xb7\x51\x7c\x04\x5e\x2c\x52\x19\xc5\x57\x82\x65\x27\x76\xef\xf4\x70\xe1\xe7\x12\xc3\x42\x76\x32\x16\x0b\x6c\xd2\x35\x5f\x6d\xbb\xd1\x76\xd5\x2b\x36\x96\x74\x17\xee\x75\x7b\xa8\xdb\x2a\x36\xd9\xac\x34\x05\xb5\x6d\x36\xcf\x48\x77\xd4\x05\x83\xcf\xce\x4f\x5e\x4e\xaa\x06\x6d\x6f\x35\x99\x58\xc4\xce\xf0\xbf\x1e\x9a\x9c\xd9\xdb\xaa\x36\x6e\x0f\x73\xdb\xbe\x58\xaa\x59\x6e\x12\x2a\xb6\x5c\x8a\xcc\xc3\x43\x02\x23\xd3\xe9\x22\xd4\x4c\x26\x86\xf9\xc9\x92\x3e\x56\x1b\xd5\x76\x4c\x7a\x80\xf5\xa6\xb1\x32\x2b\xf1\xe6\x4c\x6f\xbb\xf9\xfd\xc8\x2b\x8b\xbc\x2a\xe9\x0a\x8e\x2e\x40\xb9\xb4\x26\x64\x8e\x13\xd9\xcf\xf2\x5b\xf8\xce\xfc\x16\x75\xdd\x64\xe3\x0c\xff\xf0\xf7\xf8\x2d\x63\x5a\xd5\x4c\xb4\x98\xd9\xb7\xc6\x86\xb5\x37\xb5\x79\x88\x67\x26\x31\x3f\x12\xc9\xf5\x48\x3a\xd9\x69\xc0\x68\x38\x54\x1b\xc5\xb6\x93\x38\x84\xa3\x5a\xc7\xd4\x0a\x40\x3f\xda\x58\x2a\x8e\x76\xb6\xbe\xf7\xab\xac\x53\x6c\xa7\x72\xa1\x1d\xca\x54\x9a\x79\xe8\x2a\x3c\x5d\x9c\x76\x8e\x6d\xbf\xdd\xde\x2e\xc7\x77\x41\x8f\x27\x73\xcd\x61\xf6\xd8\xc6\x83\x69\x7f\xd7\xde\xbc\x55\xa2\xd9\xaf\x4f\x99\x58\x97\x69\x7b\x58\x94\x38\x89\x8a\x5e\x3d\x5e\x5f\xaf\xfc\x3c\x29\xec\x72\x92\x11\x31\x99\x0f\xbd\x54\x22\xdc\x1e\xe5\xe2\xad\x66\x34\x1c\x77\x45\x16\x2e\xa4\xcc\x76\x93\x11\x7a\xa8\xbb\x18\x5b\xba\x09\x57\xfb\x31\x56\x5e\x64\x8a\xf5\x9a\x3b\xdd\xd0\x79\xbb\xbd\x35\x2e\xdb\xfb\xf2\x31\x98\xf5\x37\xc2\x33\x95\xe3\x2f\x0f\xbe\xa9\x7e\x0d\xa4\x73\x7b\x6b\xf0\x55\x3f\x3c\xf1\x97\xf9\xb2\x53\x30\xc7\x1e\xab\x60\x59\xe9\xf6\x41\xe9\x71\x28\x77\x7a\x2a\x23\xac\x5f\x1a\xcd\x2b\xb1\x9a\x0d\x57\x36\xde\x6c\xe5\xd7\x60\xcb\xcb\x0d\x7d\xdc\xdc\xcf\x52\xe1\x1d\xa6\xb1\xc5\xaa\x9e\x07\x03\xd0\x8d\x0a\x18\x9a\xcf\x23\xf9\xc8\x32\xf5\x59\x7b\x4b\xdd\x7b\x7e\xb2\x2c\xf3\xcd\x53\x21\xde\xf3\x39\xb4\xcb\x74\x1e\xbf\xd5\xb6\x53\x5b\xa1\x16\x0e\xec\x2c\x13\x66\x85\xd8\x1e\x6c\x49\x9f\x47\x49\x23\x16\x4e\x46\x79\xb7\x69\xd3\x0d\xb1\xca\x53\x32\x19\x73\xaf\x33\xdd\xd1\x44\x53\xb0\x44\x23\x57\xed\xd0\x4e\x78\xcb\x43\xa0\x4e\xb3\x69\xaf\xfc\x88\x07\xed\x5c\x69\xd4\xf0\x6a\x75\x50\xf3\x3e\x69\x6f\x91\xcb\xa5\xa5\xa0\xf9\x2d\xb2\x03\xf1\xb3\xf8\xed\xd5\x52\xd6\xb1\xfc\x17\x7b\x8b\xb6\x9a\x91\x2e\x33\xfe\xb0\x46\x0b\x59\xd4\x4f\xb7\x5c\x0a\xac\x79\xd5\x5b\xc6\x51\xa6\x54\xf4\x92\xbd\x29\x00\x23\x55\x24\x34\x92\xdd\xce\x2b\xf9\x44\x24\xef\xe9\x50\x53\x54\xb6\x99\xf9\x7e\x3f\x9a\xaf\xda\x15\xe9\xc6\x4b\x3f\x93\x2f\xb5\x1c\x5b\x86\xd6\xa5\x24\x49\x7d\x7a\x7e\xb2\x70\xd9\xde\x97\x8f\x81\xd8\x5b\xb3\x1b\x4e\xec\x8e\xbf\x3c\x1c\x0b\xba\x3c\x56\x74\x4c\x67\xf6\xd6\xf7\x56\xb6\x3b\xb4\x30\x8d\xf6\x0b\x5c\x56\xd9\x3a\x8d\x47\x43\xd5\x45\x67\x53\x6f\x94\xaa\xc9\x79\x62\xb7\x97\xdb\x65\xd2\xf5\x27\xdd\xea\x54\xae\x3a\x83\x61\x2e\x36\x8c\xc3\x44\x5c\xf1\xfd\xb6\xd7\xaf\x4e\x3b\xdd\x48\x06\x7a\x60\xb7\xab\xaf\x52\x73\x27\x46\xa9\x52\x6f\xf5\xd9\xf9\xc9\xd8\x9d\xe7\x4b\xa2\xfd\x62\x2f\x75\x36\x9e\x2c\x7e\x6f\xfd\x2d\x9c\x8f\xda\x50\x3b\x5b\xca\xb4\x6b\x83\x09\xcb\xc2\x82\x89\xa4\xb3\x3e\x99\x0f\xd4\xae\x6a\x17\xed\x41\x3b\x6c\x31\x8f\xbb\x51\x6a\xb7\x6a\x15\xe3\xb0\x8f\x27\xc9\xfa\xbc\x1b\xca\xae\xac\xbf\x59\xa0\xa6\xe7\xe3\xa6\x2a\x7a\xa3\xc9\xbc\x1b\x9f\x55\xaa\x51\xb2\x4f\x34\x2a\xc7\x41\xf7\x27\xf8\xed\xce\xf1\x5b\xd8\x86\xe6\xc9\x63\x41\x07\x7e\x8b\x7e\xcf\xde\x3c\x35\x8f\x65\xe5\x2e\x8d\x31\x18\x4c\x4a\x89\xd0\xb4\xbf\x7a\x54\xe5\x6a\x83\xd3\x72\x94\x66\xbd\x62\xcc\xef\xe5\x96\x64\xa7\xd4\x0a\x0f\x2b\xa1\x76\x2e\xb3\x9f\x64\x70\x0f\xf5\x2a\xa1\x48\xa1\xa6\xb6\x8b\x44\xbf\xb1\xdd\x56\x77\x26\xa2\x23\xd4\xb2\xec\x76\x29\x40\xfb\x54\xe7\xed\xf6\xa6\x2e\xdb\xfb\xf2\x31\x10\x7b\xab\x2b\x16\x39\xad\x39\x1c\xe6\x4b\x56\xd7\x40\x3a\xb7\xb7\x6a\x4d\x34\x1b\x20\x99\xad\x67\xbc\x70\x4f\xe7\xfc\x3a\x48\xe2\xfa\xb6\x36\x48\x74\x43\xa6\xd4\xad\xf9\x39\x60\xe3\x91\x41\x7c\x5f\xef\xd8\xe6\xa8\x25\x3b\xb0\x1e\xca\x8d\x8b\x32\xba\xc8\x2f\xa0\xea\x4d\x57\xe9\xfa\xd0\x4b\x54\x40\x58\x88\xce\x56\x8f\x26\x25\xda\x65\xf3\xa3\x51\x7c\x62\xfd\xed\xce\xe3\x49\x6f\xf2\x38\x9a\x9f\xd9\xdb\xf7\xf9\xad\x9b\x0b\x8d\x53\x3d\x54\xef\xc6\x77\x69\x1d\x8e\xcf\x15\xca\x57\x52\xcb\x27\x12\x5b\x98\x71\xb9\xd3\x2d\x6e\xf5\x32\x3c\xa9\x2e\x66\x23\x51\x34\x1e\xe7\xc5\x69\x1e\x0d\xab\xd3\x41\x04\x6c\xfc\x61\xa1\x52\x9f\x6c\xb3\xd8\xf6\x67\x6e\x16\x37\x64\xbd\xda\xf5\xf7\xdc\x2f\x1d\xfb\xfb\x76\x7b\xbb\xf3\xfc\xa4\x37\x4e\xb6\x2b\x67\xe3\xc9\x70\xed\x1a\x48\xe7\xf1\x5b\xa5\x3c\x9a\x8f\xb6\xcd\xf0\x7e\x34\x5a\x4f\x60\xf7\x71\x56\x4f\xf7\xca\x61\xf6\xb8\xd6\x6b\x9b\x5e\xc5\x38\xa8\x86\x9b\x99\x12\x57\xed\x68\x9f\x95\xe7\x24\xb1\x8c\x14\x39\x0f\xcb\xdd\x8e\x0c\xea\x8b\xf6\x94\x54\x27\x08\xe7\xa3\xf1\x7c\x68\x69\xc2\x93\xf6\x68\x1c\x29\x54\x07\xd9\x97\xfe\x3f\xdb\xbf\xf1\xc3\xc7\x62\xdf\x3d\x36\xfa\xc6\xdb\x57\x7f\xf4\xe4\xe4\xd9\x1b\x58\x83\x78\x03\x1c\xfc\xfd\xe1\x33\x2f\x67\xfb\x12\xae\x46\x0e\xb7\x05\x22\x8c\x39\x02\x98\x09\x4a\x38\xa7\x02\xf0\xd7\xf7\x81\x91\x77\x5e\xc7\xf6\x8b\x49\x55\xab\x44\xef\x26\xd5\xe7\xee\x2d\xff\x55\xfb\xea\xaf\x93\xea\x07\xfa\x8a\xfe\xfe\x80\xd1\xcb\xcb\xfa\x7e\x7f\x00\xef\x98\xeb\x5b\x6f\x92\xfd\x61\x83\x3d\x7f\x9b\xec\xcb\x61\x67\x8d\xa5\xb0\x9a\x28\x2b\x24\xa7\x0c\x23\xca\x08\xf6\x95\x41\xd0\x97\xc4\x42\xac\x9d\x0f\x38\xd1\x18\x61\x6b\x05\xb6\x90\x40\xed\x38\x80\x8a\x1a\x09\x88\x83\xfa\xf4\xaa\xaf\x6f\xb6\x92\xe7\xbc\x6f\xa9\x3e\xdc\x0b\x85\x41\x16\xa4\x13\xbb\x65\x77\x93\x87\xc3\x16\x50\xbb\xe9\x04\xca\x7c\x72\xbb\xce\x46\x76\x05\xba\x0c\xc7\xfc\x48\x7d\xbd\x89\xcb\x0d\xee\x2c\xe7\x85\x71\xfb\x9a\xf3\xbd\x4c\x6f\xbe\x32\xee\x72\xab\xe9\x8f\xd7\xdf\x0a\x3d\xfa\x57\xa9\xe6\xbb\xf5\xbf\xbe\x2c\xe1\x3a\xee\xd4\x37\xdc\x42\x83\x21\x87\x14\x2b\x61\x38\x96\x3e\x70\xcc\x30\xc1\xa0\x85\xc6\x87\x4a\x53\x1f\x31\x62\xb1\x15\x86\xf8\x4a\x69\xa6\x94\xc5\xce\x97\x44\x62\xc4\xfc\x23\xee\xe8\x35\xee\x7f\x91\xdc\x41\xe1\x2e\xce\xf6\xd9\x5c\x9f\x8d\xff\x1c\xee\x8e\xfb\x5a\x60\x20\x31\x14\x98\x09\xc7\x24\xf1\x85\xc0\x40\x3b\x2e\xa4\x20\xd0\x72\x8b\x7c\xc2\x8c\x6f\x31\xb0\x0c\x48\x26\x8d\x10\xda\x00\xdf\x52\x21\x7c\x6d\xe5\x11\x77\x1c\x38\xee\xb7\xca\x1d\x14\xee\xfc\x6c\xbc\x73\x35\xd4\xf8\x24\xee\xda\x10\xc1\x8c\x36\x06\x20\x43\x18\x10\x90\x33\x0e\x7d\xa2\xa8\xe2\x56\x1a\x66\x05\xa3\xbe\x42\xd2\xd7\x04\x5a\x86\x0c\x57\xca\x71\xa0\x90\xb3\x96\x6a\xcc\x8c\x3d\xbd\x80\xed\x5d\xdc\x7f\x6c\x08\x1e\x29\x77\x0b\xfe\xec\xf4\xd3\xab\x53\xac\x1f\xc2\x3d\xfa\xa9\xfa\xa7\x27\x7b\xfb\xe1\xfa\x3f\x8a\xbb\x80\x10\x4a\xe4\x63\xc1\x08\x36\x8e\x63\x1f\x40\xaa\xa8\x82\x86\x73\x2d\x00\x32\xce\x01\x6a\x88\xa3\xc0\xf9\xcc\x40\x20\x20\x53\x8a\x53\x1f\x28\x06\x81\x74\x52\x1d\x71\xff\x8e\x9f\x59\xa9\x88\xae\x37\xdb\x28\x3a\x6c\x36\xd4\xbc\xce\x6a\xdb\x8d\x6e\xe0\x44\x3e\xdd\x99\x8e\xb1\x57\x89\x74\x53\xf1\x29\xd5\xdb\x4a\xaa\x71\xf8\x3d\x26\x65\xd8\x09\x10\xf7\x5b\xea\xb7\x77\xc6\x9d\x1b\x27\x28\xf7\x11\xf6\xb9\x71\x56\x4b\x4e\x0c\xf7\xb1\xa4\x8c\x73\xca\x04\x55\xc2\x1a\xa7\x04\x91\x4c\x6b\x2e\xa0\x33\x98\x30\x5f\x58\x04\xd0\xe1\x88\xbe\x76\x47\xdc\xaf\xf8\x99\xbf\x48\xee\xa0\x70\x3f\xed\x01\xb9\x1b\xee\x98\x70\xa6\x7d\x46\x24\x65\x98\x08\xe1\x3b\x80\xa8\x11\x88\x4b\xa0\x94\xf4\x09\x61\x44\x42\x21\x10\x46\x1a\x52\x60\x90\x60\xc4\x40\xec\xac\x74\xca\xb7\x94\x00\x76\xc4\x9d\xbc\x8b\xfb\xcf\xb4\xf3\x6b\xb8\xdf\x52\xbf\xb8\x33\xee\x56\x49\x42\x09\x66\x0a\x6b\x46\x81\x75\x4a\x08\xc0\xb0\xe5\x98\x53\x28\x7c\x07\x25\x12\x46\x2a\x82\x0d\x54\x5a\x61\xeb\x33\x41\xf8\xd3\x00\x92\x01\x8d\x39\xc6\xf6\xf4\xba\xc2\xf7\xfd\xfb\x0f\x86\xf4\xe9\x5a\xe4\xf1\x24\xd4\xed\xb8\xc7\x3e\x57\x7f\xe1\xce\x7e\x86\x40\xa6\x18\xf6\xb1\x83\x44\x42\x8a\x39\x93\xc2\x37\x9a\x39\x29\x20\x90\xdc\x1a\x61\x09\xf1\x15\xe2\x06\x19\x09\x00\xd3\x06\x68\xc5\x84\xc0\xc8\x6a\x27\x0d\xa5\x47\xdc\xaf\xf8\xf7\xbf\x48\xee\xa0\x70\xcf\xdd\x59\xdf\x7d\x24\x25\x11\x06\xfa\x4a\x70\xad\x0c\xb2\x4f\x01\x9d\x0f\x35\x80\xc2\x97\x92\xf9\x08\x39\x47\x0d\x65\x8e\x72\x8a\xb5\x8f\x85\x03\xce\x08\xe1\x13\x83\x7c\x6a\x24\x39\xe2\x7e\xc5\xbf\xff\x45\x72\x07\x85\x7b\xb6\x76\x5f\xdc\x29\x25\x56\x21\x24\x21\xb6\xda\x01\xe8\x7c\xa2\xb1\x22\x86\x01\x4d\xa5\xb2\x48\x38\xcc\xa5\x16\x00\x18\xaa\x99\x51\x04\x28\x26\x05\x57\x14\x5b\x6d\x04\x77\x80\x1f\x71\xbf\xe2\xdf\xff\x22\xb9\x83\xc2\x3d\xbd\xb9\x2f\xee\x3e\x11\x9a\x08\x29\x90\xf1\x0d\x74\x80\x4b\x23\x81\xb5\x18\x09\x69\x7c\xa4\x19\x62\x52\xfb\x16\x3c\xc5\x4a\x1c\x0a\x6c\x8c\x56\xc2\x62\xe3\x2b\x44\x35\xb4\x82\xe8\x2f\x5f\xef\x45\x0f\x98\x57\xcf\x79\xed\xec\x6a\xd2\x8f\xe3\x1e\xff\x5c\xfd\xbc\x76\x5b\xfd\x1f\xf6\xef\x98\x2b\x22\x20\x10\xc6\x40\x82\x11\xc7\xc6\x77\xd0\x47\x02\x49\x66\x18\x20\xc2\x00\x09\xa9\xcf\x00\x47\x4f\xb4\xab\xa9\xe3\x92\x68\x21\x29\x03\x8a\x00\x1f\xf8\x47\xdc\xaf\xf8\xf7\xbf\x48\xee\xa0\x70\xa7\x9b\xfb\xe2\x2e\x9d\xb4\x8a\x43\xa2\xa1\xc2\x92\x31\xa2\xa1\x65\xc6\x01\xa7\x9c\x81\x4a\x41\x6e\x8d\xe2\x50\x6b\x40\x39\xa4\xce\x42\xcc\x21\x22\xcc\x61\x04\x84\xc6\x0a\x6a\x78\xc4\xfd\x8a\x7f\xff\x8b\xe4\x0e\x0a\x77\x92\xbb\x2f\xee\x4e\x32\xa6\x34\x86\x00\x62\x6e\x94\x15\xcc\xe7\xd6\x72\xfb\xe4\x5a\x28\xc0\x58\x52\xcc\x7d\x2e\x9c\x78\xa2\x01\xa5\xac\xe2\xc2\x70\x67\x04\x26\x10\x13\xa3\xb8\x3c\xe2\x7e\xc5\xbf\xff\x45\x72\x07\x85\x3b\x9a\xdc\x17\x77\xcc\x80\x11\x12\x08\x01\xac\xd5\x06\x21\x62\x38\x05\x4c\x4b\x21\x20\xa6\xc8\x69\x9f\x69\xa6\xa1\x44\xd0\x09\xa2\x04\xb5\x52\x80\x27\x3a\xe5\x54\x53\xca\x80\x3e\xf9\x19\x1a\x38\xee\xb7\xca\x1d\x14\xee\x30\x76\x5f\xdc\xb5\x0f\x7d\x29\x84\xef\x23\x69\x24\x7b\x0a\x8d\x0c\xc0\xc8\x12\xe1\x04\x43\xbe\x51\xd0\x97\xd6\x30\x48\x35\xe0\xca\x17\x46\x53\x68\x1d\x96\xd2\x37\xd8\x29\x24\xc9\xc9\xcf\xb0\xc0\x71\xbf\x55\xee\xa0\x70\x3f\xbe\x35\xfb\x7e\xb8\x33\xa8\x31\x36\xbe\x35\x4c\x0b\x68\x8c\x05\x56\x30\xcd\xa0\x56\x44\x69\x1f\x09\xa0\x99\x8f\xa9\xcf\x2c\xd1\x4a\x00\x42\x35\x05\x02\x39\x4e\x94\x54\x48\x33\x60\xcd\x11\x77\x1e\x38\xee\xb7\xca\x1d\x14\xee\x5b\x71\x5f\xdc\x21\xc3\x4a\x69\xc6\x7d\xaa\x10\x51\x54\x5a\xa3\xa8\x25\x9a\x58\xea\x30\x92\x88\x38\x06\xb0\xef\x1c\x45\x4f\x5f\x3b\x8d\xa8\x55\x56\x0a\x4e\xb1\xf0\x11\x86\x87\xf9\x19\x7a\xf6\x3e\xe8\xc0\x70\xbf\x55\xee\xa0\x70\x3f\x9d\x97\xbc\x9f\xbe\x23\xee\x8c\x36\x94\x3a\xab\x1c\x82\x96\x59\xc9\x94\x31\x56\x6b\xe0\xa8\xf3\x39\xa6\x04\x38\x27\x29\xa0\x86\x1a\x60\x7c\xce\x7c\x69\x7d\x26\x1d\x31\xc8\x71\xe6\x8e\xb8\xcb\xc0\x71\xbf\x55\xee\xa0\x70\x5f\x81\xfb\xe2\x6e\x11\x45\x5a\x08\x82\x38\x64\x8e\x48\x67\x05\x22\xc6\x09\x5f\x52\x4b\xa1\xa2\x54\x13\x60\x34\xd4\x14\x02\xc8\xb5\x92\xdc\xf8\x54\x6a\x64\x24\x87\x96\xfa\x1a\x82\x53\xdc\x04\x02\x07\xfe\x56\xc1\x83\x02\x7e\x59\xba\x2f\xf0\x5a\x32\xa4\x11\x12\x5c\x62\x41\xa5\xc1\xc8\x58\x69\x98\xc2\x06\x5b\x2e\x90\xf2\xb5\x70\xc8\x00\x2d\x2d\x56\x90\x2b\x09\x29\x87\x8a\x00\x64\xb8\x6f\x08\x57\xe2\x74\x85\x39\xbc\x12\xb1\xfe\x45\x82\x07\x05\xfc\x7c\x71\x5f\xe0\x01\x26\xd8\x48\xe1\x9c\x60\xda\x11\x4d\x9d\xb4\x88\x18\x2d\x34\x16\x42\x3a\x8b\x89\x71\x5c\x41\xc6\x7c\x67\x2c\xb7\x12\x48\xa1\x04\xf6\x21\x74\xdc\x6a\xc9\x11\x3a\x01\x1f\x7c\xc8\x7a\xab\xe0\x41\x01\x3f\x4b\xdd\x17\x78\x2b\x10\x93\x90\x53\xe9\x4b\x9f\x72\xc9\x7c\xea\xfb\x12\x2a\xe8\x73\xe8\x10\xc6\x9a\xf9\x54\x61\xa1\x9c\x54\x86\x4a\xfe\x14\x58\x31\x4a\x01\x17\x02\x0a\x81\x85\xe5\x27\xe0\x83\x8f\x59\x6f\x15\x3c\x28\xe0\x27\x83\xfb\x02\x6f\x04\xf0\x05\x90\x8a\x00\x46\x19\x00\x86\x73\x40\x2d\x37\x1a\x10\x0b\x11\x03\xda\x61\x49\x05\x32\x92\x40\x42\x98\x92\xd4\x69\xe9\x5b\xc5\x18\x13\xc0\x3a\xe0\xe3\x13\xf0\xc1\x07\xad\xb7\x0a\x1e\x14\xf0\xa7\x9b\x5e\xee\x37\x59\x60\x80\xf6\x09\x21\x8e\x5a\x09\xac\x54\x0c\x2a\xaa\x14\x80\x50\x09\xcd\x10\xe6\xcc\x3a\x64\xb8\xc5\x80\x10\x28\x14\x14\xe2\x29\x64\xd2\x1a\x68\x49\x39\x01\x4e\x9c\x80\x0f\x3e\x6a\xbd\x55\xf0\xa0\x80\x1f\xfa\xf7\x05\x1e\x10\x0d\x15\x54\x40\x42\x2a\x35\xf4\xb9\xd6\x04\x3b\x03\x8d\x0f\x1c\x12\x48\x52\x61\x80\x02\xd0\xc7\x98\x1b\x8e\x14\xc0\x88\xf8\x00\x31\xa4\xa9\x30\x12\x33\x48\xbf\x3c\xbf\x60\x2d\x60\xe0\x6f\x15\x3c\x28\xe0\xfb\x37\x4e\x47\x7f\x78\xf9\xc3\x60\xfe\x44\xae\x1c\x01\xe3\xf4\x53\x00\x4b\x24\xc6\xd0\x11\x80\xb5\x53\xd8\x49\xeb\x20\x86\x08\x39\x65\x25\x25\x8a\x63\xcd\x35\x13\x42\x43\x01\x34\xa4\xf0\x14\x3e\xc1\xe0\xe3\xd6\x5b\x05\x0f\x0a\xf8\xde\x9d\xe7\xe1\x15\x36\x02\xf9\x44\xf9\x08\x73\xcb\xb9\xc3\x82\x3a\xec\x1b\x47\x15\xa6\xc2\x57\xda\x27\x1a\xf8\x10\x69\xee\xa8\xd0\x54\xfa\x50\x3e\xc5\x5b\x4a\x28\xce\x00\x04\xfe\x29\x7e\x82\xc1\x07\xae\xb7\x0a\x1e\x14\xf0\x9d\x3b\x4f\xc4\x5b\x20\x31\xe6\xd6\x1a\x07\x31\x63\x8c\x42\x89\xac\x20\x40\x23\xac\x1d\x62\x5a\x30\xe7\x0b\xaa\x25\xd6\x9a\x00\x68\xb0\x82\xbe\x25\xd6\x22\x05\x35\xe5\x12\xc1\xaf\xe4\x1a\x7c\xe4\x7a\xab\xe0\x41\x01\xef\xee\x3d\x13\x0f\x09\x30\xc6\x01\x9f\x53\xc7\x0f\x9f\x0c\x97\x58\x42\xcb\x34\x95\x12\x69\xe9\x53\xa6\xa5\x8f\xb0\x0f\x08\x00\x40\x68\x09\x84\xcf\x81\x22\x10\x5b\x0d\xf0\x69\x86\x0c\x05\x1f\xb9\xde\x2a\x78\x50\xc0\x9b\x3b\x4f\xc5\x53\x43\x18\xc5\x80\x72\x62\x7d\x47\x11\xa5\x10\x69\x0a\x05\x51\x8e\x49\x21\xa5\x91\x54\x09\xc4\xac\xcf\xf4\x61\xe3\x01\xd0\xc8\x60\xa2\xb1\x75\x0a\x53\x64\xf8\xc9\xd5\xa0\xe0\x23\xd7\x5b\x05\x0f\x0a\x78\xff\xee\x73\xf1\x48\x41\xe6\x2b\x81\x34\x37\x40\x1b\x09\xb0\x8f\x18\x11\x88\x63\xe6\xfb\x56\x4b\x47\xac\x53\x80\x73\xc0\xa1\xe5\x48\x10\xc9\x28\xd1\x58\xf9\xf6\x69\x6c\x8f\x4f\xe4\x8a\x82\x8f\x5c\x6f\x15\x3c\x28\xe0\xd5\x9d\x27\xe3\x15\xd0\x46\x1b\x0d\x95\xc2\x54\x73\x87\x94\xf5\x11\x80\x9a\x41\xe1\x7c\x45\x25\x01\xd4\x12\x1f\x73\xea\x84\xe3\x4c\x21\x62\x1d\xa2\x56\x08\xaa\x24\x73\x86\x7f\x9d\x8c\x47\xc1\x47\xae\xb7\x0a\x1e\x14\xf0\xad\x3b\xcf\xc6\x4b\x2d\x01\xa5\x84\x21\xe6\xcb\xa7\xf1\xa3\x64\x9a\x38\x06\x7d\x5f\x42\x60\xb0\xc0\x0a\x0b\x07\x11\xc2\xbe\x70\x94\x70\x61\x8d\xb1\xcc\x59\x06\x14\x77\xc8\x91\xaf\xb3\xf1\x28\xf8\xc8\xf5\x56\xc1\x83\x02\xbe\x79\xe7\xe9\x78\x60\x21\xb7\x82\x3b\xdf\x28\x8a\xe5\x53\x98\xc4\x7d\xed\xa0\x45\x8c\x0a\xe7\x1b\x47\xa0\xd5\x80\x09\x69\x25\x23\x92\x12\xaa\x35\x24\x8a\x4a\x06\x04\x46\x96\xea\x53\xe4\x8a\x82\x8f\x5c\x6f\x15\x3c\x28\xe0\xeb\x77\x9e\x8f\x77\x88\x73\x4b\x94\x76\xdc\x00\x83\x11\x73\x8a\x61\x6b\x19\x22\x90\x3a\xae\x20\xe4\x96\x60\x42\x31\xe0\x88\x71\x6e\xa0\x63\x56\x32\x28\x7c\x61\x90\xd6\x82\x22\xf2\xe5\xf9\x55\xee\x01\x03\x7f\xab\xe0\x41\x01\x5f\xbb\xf3\x7c\x3c\xb5\x98\x21\xa4\x1d\x33\x4a\x43\xc4\x19\xa4\x14\x40\xa2\x05\x16\xdc\x21\x06\x15\xd0\xda\x69\xeb\x10\xe1\xbe\x52\x80\x5a\xe9\x13\x6d\x85\x2f\x24\x30\xca\x48\xfa\x55\xe3\x83\x8f\x5c\x6f\x15\x3c\x28\xe0\x2b\x77\x9e\x8f\xd7\x00\xf8\x02\x2b\x2b\x1c\x36\xc0\x37\xc4\x41\xce\x00\x85\x1c\x0a\xa4\xb4\x71\x80\x10\x60\x7d\xc5\xac\xf3\x0d\xd2\xc0\x29\x21\xb1\x52\x4f\x31\x15\xa6\x96\x20\xff\xb4\x73\x0f\x05\x1f\xb9\xde\x2a\x78\x50\xc0\x97\xef\x3c\x1f\x8f\x1d\xc7\x50\x33\xe6\x43\x85\x0d\xf2\x89\xef\xa4\x81\x4f\x9e\x9c\x5b\x09\x81\xb6\x4a\x31\xf7\xe4\x7f\x14\xe7\xbe\xef\x3b\xc3\x90\xa3\x56\x69\xdf\x60\xeb\x3b\xdf\x3f\x4d\x92\xa1\xe0\x23\xd7\x5b\x05\x0f\x0a\xf8\xe2\x9d\xe7\xe3\x89\x44\xbe\xf0\x91\x00\x42\x3b\x46\xa4\x56\x18\x41\x07\x1c\xa7\xc6\x28\x08\xa9\x80\x10\x70\xed\x1c\x42\xd2\x3a\x42\x39\x26\x40\x29\x2d\x88\x24\x8e\x2a\x43\xe0\x69\x05\x0a\x07\x1f\xb9\xde\x2a\x78\x50\xc0\x9f\xae\xbf\xb9\x1b\xf0\x3e\xc0\xc6\x69\xab\x30\x65\x80\x69\x43\x19\x75\x98\x01\xa9\x30\x60\x4a\x21\xae\x04\x52\x0a\x12\x8d\x9d\x81\x04\x39\xa8\x20\xd6\x5c\xfa\x50\x70\xe8\x28\x51\xf8\xe4\x6a\x70\xf0\x91\xeb\xad\x82\x07\x05\x7c\xee\xce\xf3\xf1\x04\x59\xc2\x9d\x70\xc6\xd7\x1c\x0b\x5f\x10\x62\x21\xa5\xcc\x97\x4e\x19\x28\xac\x16\x42\x70\xc3\x05\x13\xd0\x3a\xfa\x34\xa2\x61\x42\x0a\xab\x99\x85\x3e\xb5\xc2\x7e\x05\x3e\xf8\xc8\xf5\x56\xc1\x83\x02\x3e\x73\xe7\xf9\x78\x6b\x25\x13\x8c\x1a\xe7\x2b\x2e\x7c\x82\x7d\x02\x38\xc1\x90\x3b\x6c\xb4\x6f\xb8\xaf\x24\x17\x8c\x60\x2d\x39\xd6\xbe\x54\xd4\xf8\xc4\x21\x2a\x84\x93\x02\xfa\xcc\x9c\xd6\x5c\x71\xf0\x91\xeb\xad\x82\x07\x05\x7c\xfa\x53\xf3\xf1\x6f\xde\x85\x10\xcc\x45\x08\xf7\xbe\x05\x21\x91\x15\xc9\xd2\xba\x34\xd0\x19\x94\xf4\x70\xa3\xde\x2f\xcf\x33\xa3\x7e\x13\x00\x97\x10\x8b\x6c\x8a\x8f\x40\xac\xbc\x49\x37\x42\x5e\xf3\x70\x61\xcb\xd9\x6d\x07\x97\xd7\xd0\xbf\xba\x96\xfe\xf6\x17\x02\x1d\xcb\x3b\x9e\xfa\x3e\x74\x72\xab\x5f\xf2\x8b\x55\x94\xa0\xdd\xd9\x38\x3c\xea\x24\x12\xb6\x23\xd3\x62\x48\x7c\x18\x1b\xd7\x86\xdb\xc1\x30\x36\x4c\xca\xc5\xac\x3d\x07\x92\xc3\x38\x2b\x64\x1b\xce\x86\x46\x64\x30\x8d\x2f\x53\x8f\x8b\x14\xe8\xc1\x59\xb6\xb7\xa4\x1e\x48\xef\x1a\x63\xdd\x6d\x65\x1b\x74\x12\xfd\xf2\xfb\xc3\x17\xb4\x1f\x15\x96\x19\x96\x36\x8d\xdc\xb0\x1d\xdd\x2d\x53\xfe\xb0\x10\xe3\x21\xcf\x64\x73\x7d\x3e\x29\x76\x4b\x5a\x6e\x12\x43\x54\xaa\x6e\x5f\x2e\x89\x7c\x07\x83\x17\xcd\xf8\x8a\x6f\xe9\x22\xef\x61\x26\x3e\x88\x53\xf8\xb7\x9e\x82\xf7\x02\x38\x85\x1f\xaf\x36\xc2\xf3\x4f\xd4\xef\x5d\xd4\xff\x33\x4f\x4b\x5e\x73\x97\xf7\xbe\xf2\xe2\x76\x23\xbb\x74\x45\xaf\x14\xee\xc7\x6e\xa9\x1a\xb4\xaa\xe3\xcc\x39\x64\x67\x46\x16\x49\x8e\xf8\x64\xc0\x17\x33\xe0\xd2\x31\x52\x6b\xd9\xf9\x7c\xbd\x37\xcb\x74\x67\x93\xd9\xe0\x5e\x32\x51\x42\x51\x82\x5b\xb6\xe1\xc5\x1e\x43\xe9\xbe\xde\x28\x34\xad\x0f\x87\x7a\x53\xd4\x34\x63\xf3\x93\x51\x31\xd4\x69\xaa\x95\xcc\x48\x0a\xf0\x00\xec\x7a\x29\x13\x4a\xe6\x22\x4f\x86\xd0\xcc\xbb\x2e\xd8\xfa\xf5\xc2\x04\xee\xc7\x9e\x5c\xaa\x44\xb2\x8b\xc3\x33\xb8\x19\x55\xfb\x2c\x5f\xcd\xcc\xd0\x6c\x55\x14\xc3\x74\x6e\xf4\x72\x3d\xd6\x5f\x6f\x64\x9f\x55\xf2\xcf\x19\xd9\xbc\x3d\x88\xd1\x66\xa0\x46\xf6\x13\xaf\x9c\xf8\x90\x91\x05\x7c\xbf\xc9\xed\x46\x16\xbd\x68\xfd\x2b\x85\xd3\xa3\xce\x08\xd6\x91\xe9\xd0\x3a\x1c\xcd\xa0\x1d\xe6\xfc\x04\x5c\x6e\xfb\x95\x56\xa6\x2d\x37\xb1\xce\xa4\x12\x56\xb6\x21\x6a\xbd\xf8\x61\xd9\x29\xff\x18\x33\xe7\xaf\x17\x3a\x67\xb2\x92\xa7\x22\x9d\x71\xd7\x4b\xae\x1b\xeb\xde\x6e\xe7\xf7\xd2\x49\x3c\x98\xca\xdd\xa4\x5a\x5a\x8e\x51\x25\xde\xd7\x91\x59\xb6\x56\x2b\x86\x33\x7b\xbf\xbc\x14\xdd\x55\xaa\x1a\x93\x76\xe9\xb6\xc3\x58\x78\xde\x20\xbd\x5e\x7a\x30\xef\xec\x4a\xb6\x10\x99\x85\x52\x09\x9d\xb0\xa8\xec\x79\x4f\x86\x20\xc5\x2a\x1a\xa9\x26\xa2\xaa\xa8\x6a\xbb\x54\x2e\x2b\xc9\x28\x96\x1c\x93\x45\x79\xb9\xef\x47\x47\x91\xc6\xb8\xd5\x93\xd1\x42\x23\xb5\x7b\x7c\x21\xd9\xbf\xda\xc8\x3e\xaf\xe4\x9f\x34\xb2\xd6\x22\x37\xee\x65\x03\x34\xb2\x9f\x79\xbf\xc8\x87\x8c\x2c\xe0\xcb\x6c\x6e\xbf\x5f\xf3\x9d\xe1\xe2\xc1\x56\x6e\xbb\x0f\x11\x87\x9e\xd3\x4b\x79\xe7\xf7\xb1\xca\xc1\x28\xd3\x40\x33\xbc\xe6\x25\xb7\x13\xc5\x9c\x1d\xc4\x34\xac\x56\x53\xb4\xb7\x9d\x0d\x52\x20\x3c\xe9\x34\xe7\x85\x25\xef\x14\x20\x43\x25\x3d\xe8\x22\x53\xa9\xd6\x9c\x8d\x4e\xd6\x3e\x28\x7a\xca\x75\xa3\xcd\xed\xb2\x5b\xf7\x86\x8b\xec\xaa\x3f\x0c\x8f\x76\xfd\xb0\xd7\x3a\x18\xc5\xba\xd6\x5d\xae\x8d\xb7\x2c\x77\x3a\xcd\xf6\x76\x9b\x69\x8c\x99\xd1\x93\xb6\x3f\x99\xee\x40\x72\x94\x6d\xce\xd6\x7e\x26\xfb\x48\x75\x7e\xf9\x72\x5f\xd2\x75\x83\x6b\x7d\xdb\xa9\xdf\x18\xdc\x01\xbb\xa3\x83\x3a\xbb\x0b\xf3\x06\xd6\x77\x85\x97\xbe\x78\x23\xbd\x71\x89\xd6\x95\x77\x05\x7d\xb2\xfe\x37\x9c\xcd\x47\xea\x0f\xfa\x20\xf6\x4d\x17\x87\x05\x5d\xff\x6b\x3c\xde\x77\x38\xd1\x97\x3c\x3f\x78\x97\xeb\x67\xee\x66\x3d\x76\xc5\x8b\xc1\x6d\x2e\xf1\xfb\x90\x43\x0a\xf8\x96\xa7\x04\x9d\xa4\x97\x75\x33\x6e\x15\xea\xa6\x3d\x5b\x36\xa7\xd5\x64\x78\xa9\xfd\x16\x18\x45\x46\xce\x0f\xa7\x32\xb1\x4e\x63\x3c\x5c\xc7\x53\xdd\xc3\x05\xbf\x7f\x8d\x43\x8a\x3f\xd7\x5f\x2a\x0e\x3b\x3c\x91\xed\xa6\x3b\x60\xcb\xfb\x53\x6f\x03\x63\x1b\x96\x44\xcd\x38\xdb\x95\x53\x23\x97\x4e\x6d\xe2\x6e\x0b\x64\x7e\xd5\xa3\x7a\x59\x48\x7b\x71\xbb\x89\x7b\x79\x57\x50\x5e\x58\xc4\x4b\xed\x21\x9d\x62\x8f\x76\xf0\x80\x45\x93\xd1\x5e\xc7\xd5\xf2\xb5\x28\x64\x1d\xff\xe0\x34\x3a\xe5\x44\x65\x43\xda\x51\x8c\x8b\x5e\x5c\x35\xba\x10\xaf\xbc\xac\x13\x71\x58\xac\x15\xb7\xcb\x58\x2a\x3e\x9b\xc2\x4d\xa6\x55\x1a\xd3\x97\x17\x36\x06\xe5\x90\x6e\x18\x21\x35\x83\x74\x48\x9f\xac\x3f\x40\x87\xf4\xd9\x9b\xa6\x3e\xeb\x90\x02\xa9\xff\x13\x0e\xe9\x47\xeb\xff\xcb\x1d\x52\xc0\xd7\x9f\xdd\xee\x90\xde\x89\xf5\x8f\x0e\xa9\x34\x2c\x9f\x3a\x3a\x40\x87\x14\x4e\x86\x72\x59\xf6\x58\xde\x37\x66\xab\x78\xb1\x2b\x3a\xd9\x38\x2a\xaf\xda\xfb\xd6\xb2\xdf\x9f\x16\x6d\x72\x1d\x9a\x18\x99\xe3\x64\x3b\xac\x01\xd9\x54\x44\x51\x0b\xf3\xdd\xdc\x32\x57\x29\xa7\x26\xd9\xd4\xb2\x03\x63\x2a\xda\x88\xc9\xfd\x7a\x99\x74\xc3\x7a\x23\xe5\xa9\xca\xa6\x74\x70\x1a\xce\x75\x9b\x9b\xfe\x56\x86\xe6\x43\x00\x45\xa1\xde\xc6\xf5\x49\x63\xc2\xdd\x2c\x36\x9c\x2f\x49\x52\xe6\x13\xbb\x42\x2a\xd2\x64\x48\xbf\xdc\x98\xfd\x8b\x38\xa4\xf0\x4b\xf9\xe7\xe9\xa7\x39\xa4\xc8\xed\xf5\x07\xed\x90\xde\x70\x90\x3f\xcd\x21\xfd\xe8\x92\x80\xe7\x7d\xd2\x21\x45\xea\xb1\x53\x18\xf8\xd7\x38\xa4\x80\xef\x05\xbc\x3d\x64\xfb\x89\x0e\xe9\x2c\x64\x8b\x65\xc2\xeb\x47\xb1\xcf\x42\x3b\xdd\x6c\x23\x8f\x8b\x74\x37\xd6\x2a\x8e\x74\x3f\x2b\x9b\x15\xbf\xb9\xf4\x97\x93\x5c\xca\xd8\x25\x35\xdd\xce\x80\xb7\xd2\xf5\xf4\xde\x1b\x97\x2b\x9d\x56\x75\xed\x76\x93\x54\x3a\x93\x36\xa5\x51\x93\xb1\x55\x17\x4d\x1e\xe7\x09\x99\x61\xe9\xd4\xa8\x73\x0c\xd9\xf2\x49\x25\xda\xe9\x7a\xbf\x92\xda\x6f\xd2\xa6\x33\x1e\x64\x66\x7e\x39\x51\x29\xf7\x22\xb9\x79\xbc\x04\x26\xed\x7c\x2c\xc4\xdc\xbc\x50\x3f\x73\x38\xbf\x48\xc8\xf6\x69\x87\xf4\xc9\xfa\x03\x74\x48\x81\xdc\x9d\xf5\x09\x87\xf4\xb3\xef\xee\xf2\xbc\x4f\x86\x6c\x7f\xb5\x43\x0a\xf8\xc2\xcc\x1f\x14\xe2\x63\x21\xdb\x51\xa8\x1f\x53\xf2\xcf\xbc\x83\x63\x35\x28\xe0\xf3\x1e\x4f\x3e\xb7\xb7\x94\x0c\xb5\x07\xfb\x72\xc8\x46\x40\x9c\x6f\x8b\x72\xef\x4d\x6d\x72\x9d\x4b\xf2\xf1\xcc\x2e\xf7\xaa\x62\x5a\x5d\xd1\x48\xee\xe6\x9b\xcd\x5a\xc7\xc6\x5b\x12\xd5\xac\xb3\x07\x9d\xf9\xb8\x9c\x0e\xa7\x2b\x8c\x15\xda\x3a\x31\x8a\x0c\xf8\x6e\x9f\x1c\x89\xe8\x20\xcd\x75\x9a\x94\xbc\xda\xc1\xc9\xb0\x69\xb9\x96\x9f\x15\x50\xad\xf0\x38\xe9\x24\x8a\xe3\x3c\x4c\xe4\x44\x3b\x93\x1f\x0d\x8a\xe5\x19\x2b\x2e\x54\xcc\x8f\x89\x46\x64\xef\xef\xbf\x37\xe7\x74\xa1\x04\x6f\x38\xb0\x73\xc0\x6f\x58\xce\xed\xf9\x2f\x7d\xf7\x46\x7a\xdf\x81\x04\x58\xff\x6d\x21\xde\xe5\xe5\x7f\xbf\xdc\x9c\x8b\xf7\xed\xa5\x8c\x3f\xb9\x7d\x11\x56\xe2\xe6\xf3\x0e\x26\xe0\x9b\x61\x6f\x77\x30\xef\x8c\x78\x8e\x42\xfd\xe0\xb0\xfe\x3e\x0e\x26\x1e\x4f\x64\x13\xf1\x78\x53\xc7\xa2\x65\x33\x40\x36\xbe\x2b\x79\xd5\xfc\x34\xb9\x9a\x15\x42\x8b\xf8\x7c\x3a\x5b\x6c\x47\xf9\xfc\x26\xa1\x1e\x73\xd9\x9e\xce\x97\xd2\xd9\x68\xb3\xa1\x5c\x84\x34\x44\x26\x97\x29\x85\xba\x31\x90\x03\xd5\xec\xb6\x6d\x57\xa1\x82\x58\xb6\xc6\xe1\xd5\x66\xe3\x1d\x9c\x40\xa9\x31\xed\x6f\x42\xf1\x74\xbc\x6a\xa6\xfd\xfc\x72\x3d\x0a\x47\x9a\xbc\x45\x63\xbb\x9e\xab\xa0\x52\x78\x0e\xb2\xd3\x49\x67\xc7\x42\xe3\xfa\xcb\xa2\xc9\x2f\xe2\x60\x6e\x32\xf0\x00\xeb\x7f\x3d\x22\xf8\x40\xfd\xd7\x1d\xcc\xaf\x34\x87\xe2\x5d\x71\x30\x3f\xaf\x7d\x01\x39\x98\x80\xaf\x40\xbe\xdd\xc1\xbc\xb3\xd4\x7c\xdb\x08\xe6\xa6\x10\xec\x7b\x0e\x26\x3b\x06\x79\x1b\x59\xa8\x11\x6d\xcd\x47\xcb\x45\x2e\x5d\xaa\x17\xb2\xbb\x42\xb5\x38\x8b\x6a\x5e\xc9\x55\x23\xed\xc4\xc4\x8d\x68\xa5\x5b\x63\xce\x1f\xe2\x62\xb1\x67\x53\xe3\x52\x7e\x39\x80\xf1\x51\xb9\x6e\x6b\x5b\xd3\x6a\xc2\xf9\xa2\x81\x32\x49\x98\x2c\xe9\x34\x23\x24\xb9\x01\x07\x27\xb0\x99\x0e\x53\xc0\x9f\x25\x57\xcb\x6c\x3f\xd3\xde\x68\xaf\xb5\x6b\xeb\x48\x36\xd4\xac\x6b\x68\xaa\xeb\x68\x7f\x13\x6a\xf5\x63\x60\xd1\x6c\xbf\xb4\xed\x17\x71\x30\x37\x19\x78\x80\xf5\x5f\xea\xce\x87\xea\x0f\x68\x04\x73\xc7\x10\xc4\x0b\x62\x04\x73\x73\xfb\x02\x72\x30\x01\xdf\xf5\x7d\xbb\x83\x79\xe7\xb5\xe8\xb7\x8d\x60\xee\xe2\x60\xe2\x98\x8c\x5a\xbb\x72\x56\xd7\xab\x04\x95\x96\xf1\x55\x8b\xd6\xf2\x60\x31\x97\x31\x7f\x15\xc3\xc3\xa5\x17\x92\x3b\x6f\xdb\xcb\x17\xd6\xab\x81\xae\x57\x0b\x6a\x2f\xd8\x2a\xd2\x9c\xc6\xda\xc3\x26\x8c\x8f\x63\xdb\x56\xb4\xbd\x29\xb4\xd3\x8d\x7a\xd3\x2d\xb4\x99\xac\x75\xbd\xb6\x39\xae\x82\xd5\x6b\xac\x97\x29\x17\xe7\x22\x1c\x8a\x2d\x58\xb5\x11\x81\xa3\x55\xa6\x98\xa7\x2b\x2f\x5a\x5f\x2e\xa7\xde\x74\xda\x65\xb5\xc7\x75\xcb\x6d\x5e\x5e\x1f\xf5\x8b\x38\x98\x9b\x0c\x3c\xc0\xfa\xdf\xa8\xe8\xa7\x8c\x60\x7e\xb2\x83\xf9\x79\xed\x0b\x6a\x04\x13\xec\xa5\xf6\xb7\x4f\x0a\xbf\x33\x82\x09\xe6\xbd\xd4\x95\xa4\x9e\x9c\x75\x5a\xe6\xaa\xea\x9d\xbd\x27\xb7\x90\x15\x5c\xca\x8e\x19\x92\x84\x1c\x44\x42\x7e\xa1\xca\xa6\xa5\x15\xda\xbb\x28\x4d\x74\xbb\xb1\xad\x97\x59\x66\x46\x9a\x2f\xc4\x64\x3f\x58\xec\x66\xa9\x56\x0a\x41\x3b\x8b\x64\xfd\xe1\x6a\x93\x1d\x6a\xb4\x09\xf7\x46\xb4\xb0\x99\x83\x1d\xda\xef\xb7\xad\x24\x5f\xcf\x0a\xe1\xcd\xd1\xe0\xb7\xa9\x65\x6a\x14\xc1\xf9\xe4\xc6\x9a\x41\x81\xec\x7a\x66\x33\x6f\x8d\x46\x82\xa4\x7a\xd2\x6f\x15\xcd\x6a\x42\xe4\xae\xd7\xd8\xb2\xd8\xf7\xb6\x87\x5f\xdf\x58\xf6\x83\xa3\x3d\xef\x45\x81\x8f\xe5\xdf\xfe\xce\x66\x93\x32\xab\xce\x59\x79\x93\xcb\xa6\xbd\xed\xf0\x4a\xb7\xb6\xff\x30\xa9\x5c\x39\xbe\xd8\xff\x6c\x44\xf5\x6a\xe3\xdb\x77\x1c\x5e\x70\xf5\x47\x6f\xaf\x3f\x88\x83\x2f\xe7\x07\x4f\x2e\x37\x52\x9e\xd2\x4f\x3b\xf8\x72\x39\x49\x7f\xb5\xfe\xcb\x10\xfb\xcc\x56\x2f\x53\xed\x45\x9e\x1f\xf4\x35\x67\xf2\x1d\xd3\xbd\x7d\xc9\xe6\x59\xd0\xf0\x4d\xed\xbd\xbd\x7d\xd9\x69\x74\x09\xbc\xe4\xc5\x82\xd8\x65\x9f\x97\x9e\xf1\xfc\x85\xda\x77\xdc\x78\x7b\x71\x64\xe7\x3c\x7d\x68\xde\x2f\xd8\x37\x86\xdc\x4e\x6a\xef\x8c\x9a\x03\x21\xb5\x9a\x4c\x2c\x62\x67\x8a\x98\xbe\x0a\xd9\x19\xa9\xad\x6a\xe3\xf6\x30\xb7\xed\x8b\xa5\x9a\xe5\x26\xa1\x62\xcb\xa5\xc8\x3c\x3c\x24\x30\x32\x9d\x2e\x42\xcd\x64\x62\x98\x9f\x2c\xe9\x63\xb5\x51\x6d\xc7\xa4\x07\x58\x6f\x1a\x2b\xb3\x12\x6f\xce\xf4\xb6\x9b\xdf\x8f\xbc\xb2\xc8\xab\x92\xae\xe0\xe8\x02\x94\x4b\x6b\x42\xe6\x38\x91\x8d\x74\x8e\xa4\x56\xc2\xd3\x54\x2c\x85\xcb\xa5\x9d\x2f\xf7\xdb\xcd\x24\xd3\x80\x9d\x4a\x3e\x52\x6e\x26\xc2\xbb\x76\x89\x41\x49\x2b\x64\xd8\x88\x0c\xa2\xde\xf7\x8e\x63\x04\x48\x6a\x2f\x4e\xf8\x13\xa4\x56\x05\x6a\x73\xb2\x9e\xc3\xff\xbd\xd2\xcd\x9f\x41\x6a\xaf\x56\x7e\xcf\xfa\xfd\x25\x5d\x18\x79\x1c\x74\x11\x7b\x85\x64\xd0\x4e\xbe\xe4\x05\xe6\xe4\x5f\x9c\x52\xd0\xf8\xc5\x7e\x71\xfc\x5e\x8f\x0e\xde\xc7\x6f\x51\x2c\x24\x17\xaf\x7e\x73\x48\x9f\x25\xc9\xb3\x85\xb5\x7b\xfb\xa6\x8d\xf7\xff\x46\x12\xf2\xbe\x1d\xb4\xfd\x35\x8b\xc4\xee\xb9\xe5\xc2\xfb\x76\x27\x47\x65\x12\x17\x6f\x1d\xfb\xf8\x50\x54\x18\xf0\xab\x9f\x6e\x27\xd0\xf8\x35\xd0\x8f\x29\x10\x02\x3d\x43\x2a\xe6\xbd\xb9\xa4\x7c\x46\xa0\x32\x5b\xaa\x75\xc3\xc5\x52\xbc\x5d\x98\x4c\x2b\xdd\xd0\x7a\x55\xcb\x17\xfd\xda\x08\x44\xb3\x29\xb9\x89\x12\xb5\x21\x44\x46\xfc\x15\xf3\xa2\x39\xdb\x57\x4b\xb1\x44\xb9\xdd\x6a\xdf\x58\x6f\x45\x79\x53\xca\x15\x8d\xdc\x9b\xe6\x70\x13\x89\x51\x23\xfc\x2a\x5e\x4d\x37\xab\xa2\x77\x22\xd0\x31\x65\xe3\x78\x36\xd1\x1f\x8e\x2a\x5b\xba\x14\xc5\xb9\x4c\xcc\xe2\x8f\x68\x9c\xe0\xe1\x66\xdc\x91\xaa\x5f\x29\xaf\x73\x9d\xde\x7e\xa2\x5f\x7c\xc5\xdd\x09\xf4\xe5\xe3\x27\x08\x34\xd3\x69\xee\x4e\xa5\x1c\x14\xf4\x95\x72\xfe\x0c\x02\x7d\x63\x07\xf2\xfb\x04\x90\x8d\xee\xbb\xfc\xfa\x6f\x02\x24\x80\xda\x95\x86\xdc\x48\x00\xf7\x23\xd0\xf8\x2f\x8e\xdf\xa5\xaf\xf8\x1e\x7e\x8f\xb8\x16\x7b\xe3\x5c\xde\x67\x09\xf4\x27\xfa\xa6\x5f\x97\x40\x63\xb3\xb0\x7b\x6f\x8b\xce\x2f\x4c\xa0\x5a\xa4\xd8\xab\x91\xe2\x29\x7d\xec\x0c\x72\xb0\xef\xf0\xbb\x9d\x40\x13\xd7\x40\x3f\xa6\x40\x94\xb4\x54\x8d\xe7\x4e\xbb\xec\x0f\x7d\x91\xbc\x8a\xd9\x19\x81\xaa\x76\xb3\x1a\xd2\x83\xe8\x1e\xc7\x67\xd5\x74\xb7\x99\x59\xfa\x15\xbb\xa6\x9d\xfd\x3c\x06\x36\x59\x94\xa8\x8c\x17\x7b\xc7\x97\x64\x16\xae\xfa\xe3\x06\x2e\x92\xae\x4d\x5a\x2f\x9e\x1a\x54\xfa\xcb\xce\x1e\x8c\x78\xaa\x93\xa8\xc2\xce\xa4\x3e\xd4\x4b\xe3\xd1\xe2\xb2\x9d\xcf\x47\x4e\xd3\xaa\x8f\x0d\x35\xcf\x95\x62\x18\xad\xba\x0b\xb7\x72\xab\x48\xaa\x16\x2d\xd4\xf3\xc2\x16\xbb\x35\x36\x9b\xcf\x6c\xde\xc9\x0e\x88\x01\x34\xfe\xde\x59\xe5\xe0\x08\xf4\xac\xd0\x4f\x10\x68\x38\x57\xdb\x9f\xca\x3c\x28\xa8\x7f\xd9\xb4\x9f\x41\xa0\xf1\xcb\xf2\xce\xfa\xfd\x25\x5d\x3c\x2f\x2e\x61\xf8\x75\x68\x18\x34\x01\xb4\xbc\xc0\x08\xe0\x7e\x04\x9a\xf8\xc5\xf1\xbb\xf4\x15\xdf\xc1\x2f\x5c\xcc\xb4\xcb\x6f\x38\xf8\xcf\x12\xe8\x59\xc5\xf7\xf6\x4d\xbf\x2e\x81\x26\x42\x91\xc2\x1b\x11\xfe\x4b\x7f\xfc\x9a\x04\x3a\x2c\x65\xe9\x5b\xcd\xfe\xd8\x61\x95\x60\x5f\xc6\x7a\x3b\x81\x5e\x2a\x4d\xd0\x04\x7a\x76\xa9\xc7\xb1\xd3\xaf\x62\x76\x46\xa0\x53\xd8\xcd\x4d\x72\x62\x9e\xef\x19\x3c\x1d\x87\x2b\xeb\xd0\x62\xd6\x29\x6f\x52\xa9\x5d\xb6\x33\xb0\x61\x5d\xcb\x25\x65\xa5\x55\x4d\x74\x9a\xcd\x46\xbb\x12\x86\x25\x5e\x5e\x53\x52\xea\x34\x75\x9a\x36\xf3\xdb\xe2\xcc\x93\x83\xce\x3e\x94\x6d\x4d\xd3\x3e\xae\xcb\xec\x62\xf0\x38\x0a\x9f\x36\x22\xe4\x3b\x28\x1d\x49\x45\x57\xeb\x4a\x3a\x6f\x4a\x8a\xf6\xc2\xf9\xca\xa3\x50\x68\xd1\x4e\xb9\x6e\xa6\x6b\x47\x9e\xdb\x18\xb8\xac\xb7\xb2\x3f\x6f\x0a\x37\x1c\xc4\xba\xe4\xf9\x85\x18\x87\xf2\x5a\x97\x4d\xfb\x19\x04\x7a\x24\x80\xef\xad\x0b\x5e\x10\x40\x75\x37\xaa\x55\x5e\x21\x19\x34\x01\xf8\x5e\x60\x04\x70\x3f\x02\x4d\xfe\xe2\xf8\xbd\x26\x98\xf7\xf1\x3b\x5b\x2c\xbf\x4c\x9f\x25\xd0\xb3\xbb\x67\xee\xed\x9b\x7e\x5d\x02\x3d\xbb\xcf\xed\x6a\xfa\x85\x09\xf4\x72\x93\xdb\x79\xfa\xd8\x05\x3d\xc1\xbe\x55\xfb\x76\x02\xbd\x74\x10\x41\x13\xe8\x51\x09\x3c\xef\x8a\x51\x9f\xa5\x33\x02\x35\x2c\xeb\x2d\x08\x35\x3a\x3c\xf0\xa2\x8d\x7c\x8d\xda\xe5\x78\x32\x51\xbb\x4d\x72\x36\x0f\x43\x59\x75\x04\x74\x77\x2c\x34\xea\xd5\xbc\x71\xde\xdb\xb2\x89\x08\xad\xec\xa4\xac\x36\xe3\x47\x5c\x4e\xef\xca\xeb\x52\x03\x37\x32\xd3\x76\x51\x4f\xc9\x3e\x4c\xe4\xde\x6f\x0d\xa2\xa7\x08\x74\x1d\xde\xb5\xfa\xb9\x8c\x19\xce\x27\x8f\x20\x9a\x1d\xf4\x49\x6b\x81\xba\x3b\x0b\xbb\x8d\x8d\x5d\xf4\x75\xcd\x0a\x3a\xce\x17\x59\xa6\xf6\xf3\xa6\x70\xc3\x41\xac\x81\x9e\x2b\xe4\x8b\x83\x3f\x4f\x3f\x83\x40\x8f\x04\xf0\x83\x6b\x78\xd7\x17\x1a\x83\x26\x80\x8e\x17\x18\x01\xdc\x8f\x40\x53\xbf\x38\x7e\x6f\x0c\x26\xde\xc4\x6f\xb2\xed\xfa\xaf\x14\xf1\x98\x3e\x4b\xa0\x67\x03\xc4\x7b\xfb\xa6\x5f\x97\x40\xcf\xda\x7f\x35\xfd\xc2\x04\x7a\x36\xe0\x7f\x95\x3e\x44\xa0\x0c\x6a\x8c\x8d\x6f\x0d\xd3\x02\x1a\x63\x81\x15\x4c\x33\xa8\x15\x51\xda\x47\x02\x68\xe6\x63\xea\x33\x4b\xb4\x12\x80\x50\x4d\x81\x40\x8e\x13\x25\x15\xd2\x0c\x7c\x7d\x23\x13\xff\x3c\x81\x5e\x2e\x9c\x07\x4d\xa0\x67\xa3\xa4\xb3\xed\xcc\x97\xe9\x8c\x40\xe3\xc9\x59\xa3\x96\x21\xd9\x55\x9f\x18\xb1\xa8\xf5\x4a\x50\x14\xc2\xcc\xf5\x06\x7a\x51\x2c\x35\xdb\x5e\x21\xe5\xda\x18\x2d\x3a\x0b\x86\x1e\x4b\x90\x27\x72\xe3\x4d\x6b\xb6\xd8\xc6\x27\x70\xd9\x23\xb2\xcc\xfd\x5c\x56\x99\xe8\x62\xdc\x4d\xf6\x07\xe3\x41\xa1\x94\xdb\xfb\x8f\xd1\xd3\x1a\x68\x4b\xe7\xe4\x7e\xa9\x48\xd2\x90\x42\x77\xde\xd2\xd3\xcc\x3a\xd2\xc9\xea\x68\x33\x41\xb3\x33\xaf\xac\x6b\xa9\x2c\xae\x4c\x27\xf3\x56\xe1\x45\x2f\xef\x4e\xa0\x41\xac\x81\x9e\x4f\x89\x94\xbc\x6b\x5b\x30\x7f\x06\x81\xbe\x71\xe0\xe8\x7d\x02\x50\xb9\x56\xf3\xb5\xe7\x0a\x9a\x00\x06\x5e\x60\x04\x70\x3f\x02\x4d\xff\xe2\xf8\xbd\xde\x64\xf3\x3e\x7e\xbb\xf8\x40\xbd\xb1\xc9\xe5\xb3\x04\x7a\xb6\x44\x71\x6f\xdf\xf4\xeb\x12\xe8\xe5\x95\xbd\x97\xe9\xd7\x25\xd0\xf3\x25\xa7\x57\xe9\x43\x04\x0a\x19\x56\x4a\x33\xee\x53\x85\x88\xa2\xd2\x1a\x45\x2d\xd1\xc4\x52\x87\x91\x44\xc4\x31\x80\x7d\xe7\x28\x7a\xfa\xda\x69\x44\xad\xb2\x52\x70\x8a\x85\x8f\x30\xfc\xfa\x66\x3d\xf1\x79\x02\xbd\xdc\x9e\x1d\x34\x81\x9e\xcd\xd3\x5f\xde\x09\x73\x96\xce\x08\x74\x24\x54\x3e\x0d\x45\xc9\x14\x90\x18\x76\x43\xb3\x50\x35\x5d\x6e\xca\x54\x74\x58\x99\x75\x55\x7e\xbf\xed\x0c\x55\x28\xdf\xd9\x99\x69\xa2\xb9\x35\x1d\xaf\xd5\xf2\xa4\xae\x64\x8d\x3f\x18\x0f\x4a\x62\x1f\xdf\xb8\x8a\x69\x8d\x46\xfd\xcc\x6c\x1c\xdd\xb6\x12\xb0\x06\xc0\x3c\xfb\xf5\x68\x49\xbc\x3f\x9b\xb7\x45\xa3\x57\x19\x8e\x97\x53\x5b\x01\xd4\xe5\xa6\xe9\x62\x2b\xba\x0f\xd5\x66\xcd\xc1\xe3\xae\x39\x63\x2d\x53\xed\x47\x72\xa5\xef\xdd\x45\x14\x1c\x81\x9e\x5f\x64\x7c\xbb\xc2\x9e\x2d\xca\x97\xae\xb6\xef\x67\x10\xe8\x91\x00\x7e\x70\x0d\xcf\xef\xb6\x13\xd3\x57\x48\x06\x4d\x00\x13\x2f\x30\x02\xb8\x1f\x81\x66\x7e\x71\xfc\x5e\x1f\xe5\x78\x1f\x3f\x1a\x1b\x4d\xdf\x98\xa7\xfb\x2c\x81\x9e\x45\x2f\xf7\xf6\x4d\xbf\x2e\x81\x9e\xad\xe1\x5e\x4d\xbf\x30\x81\x9e\x6d\x7a\x7c\x95\x3e\x16\x81\x22\xee\x8c\x36\x94\x3a\xab\x1c\x82\x96\x59\xc9\x94\x31\x56\x6b\xe0\xa8\xf3\x39\xa6\x04\x38\x27\x29\xa0\x86\x1a\x60\x7c\xce\x7c\x69\x7d\x26\x1d\x31\xc8\x71\x76\x7a\x0b\xb6\xfc\x3c\x81\x66\xaf\x81\x7e\x4c\x81\x10\xe8\xd9\x4e\xb1\xe3\xd6\xeb\xab\x98\x9d\x11\x28\x9a\x0e\xc5\xa4\x57\xee\xcb\x7d\x2d\x15\x9f\x4a\xaf\x95\x53\x99\x82\x06\x05\x4f\xe7\x16\xb9\x7e\x3a\x5f\xab\x25\xed\x46\xe1\xf4\xa6\x92\x04\x75\xd4\x56\x93\x21\xef\x0c\x92\x74\x37\x9a\xe3\x48\x7e\x53\x80\x96\x36\x85\x4b\xf4\x86\xd9\xf6\xe8\x71\x4b\x8b\x7c\x32\x28\x36\xa2\xa5\x53\x04\x3a\x0e\x69\x58\x0f\xcd\x44\x97\xae\x86\x33\x6c\x57\x1b\xe9\xb6\xfb\xba\x17\xa2\xb5\x38\x34\x51\xdf\x2c\xc6\x0b\xe5\xaa\x15\x89\xbe\x77\xbb\x68\x80\x04\x1a\xc8\x1a\xe8\xd9\x86\xc2\x17\x82\x3c\x4f\x3f\x83\x40\x8f\x04\xf0\x83\x6b\x78\xb6\x9c\x9e\xbd\x0e\xf3\x82\x26\x80\x85\x17\x18\x01\xdc\x8f\x40\xb3\xbf\x38\x7e\x97\xbe\xe2\x7b\xf8\xc9\xd5\x24\xf5\x46\x84\xf4\x59\x02\x3d\x1b\xd7\xdc\xdb\x37\xfd\xba\x04\xfa\xde\x59\x10\xef\xd7\x26\xd0\xb3\x63\x77\xaf\xd2\xc7\x2e\x98\x44\x14\x69\x21\x08\xe2\x90\x39\x22\x9d\x15\x88\x18\x27\x7c\x49\x2d\x85\x8a\x52\x4d\x80\xd1\x50\x53\x08\x20\xd7\x4a\x72\xe3\x53\xa9\x91\x91\x1c\x5a\xea\x6b\x08\x4e\x97\x1b\x80\xcf\x33\xe8\x25\x15\x04\xcd\xa0\x67\x87\x95\xde\x38\xe6\xe0\x7d\xcb\xa0\x60\x18\xa6\x9c\x2b\x56\x8f\x57\x47\xb3\x5e\x38\x53\x6a\xf6\x76\x1d\xd6\xea\xf4\xab\x45\xbf\x26\xc6\x32\x37\x34\x9a\x26\x4c\xc6\xb6\x45\xb4\x3c\x68\x24\xb8\xe4\xb3\x18\xae\x8e\x43\x8d\x2c\x5d\xc5\x5b\xe3\x16\x9b\x0d\xcd\x22\x25\x6b\x18\x7a\x95\xe5\x72\x1c\xca\x75\xc5\xd7\x83\xa0\x64\x98\x21\xdd\x88\xdf\x90\xe9\xd0\x24\x9d\x7f\xcc\x0d\x6d\x4d\xd5\x75\x29\xbf\xd0\xb5\x52\x9c\xcf\x9a\x38\x3e\xda\xa1\x66\x72\xb8\xdb\xbe\x34\xed\xee\x0c\x1a\xc8\x22\xe8\xd9\x74\xd4\xf5\x33\x7b\x3f\x83\x41\x8f\x0c\xf0\x83\x8b\x78\x4e\xcf\x22\xaf\xb7\x6f\x04\xcd\x00\x1b\x2f\x30\x06\xb8\x1f\x83\xe6\x7e\x71\xfc\xde\xd8\x92\xfc\x16\x7e\x11\x2f\x3a\xc1\x6f\x84\x48\x9f\x65\xd0\xb3\x65\xdf\x7b\xfb\xa6\x5f\x97\x41\xcf\x0e\xb2\x5e\x4d\xbf\x30\x83\xbe\xb3\xc1\xec\x83\xbb\x88\x24\x43\x1a\x21\xc1\x25\x16\x54\x1a\x8c\x8c\x95\x86\x29\x6c\xb0\xe5\x02\x29\x5f\x0b\x87\x0c\xd0\xd2\x62\x05\xb9\x92\x90\x72\xa8\x08\x40\x86\xfb\x86\x70\x25\xd4\x89\x41\x03\xb8\x1f\x28\x7f\x0d\xf5\x63\x0a\x84\x41\xbd\x02\x9d\x9f\xc6\xfe\x13\xef\x23\x0c\xda\x1b\xe4\x86\x4f\x99\xd8\xa4\x47\xca\x1d\x96\x98\xe2\xc5\x7a\x5f\x2d\x26\x7c\x55\x2b\x6d\x49\x72\x39\xcd\x83\x6a\x67\xb5\x68\xce\x73\xd5\x81\xae\x2f\xc2\xd3\x75\x32\xbf\x78\xdc\x00\x1d\x8f\xcb\x70\xa1\xb3\xdc\x25\x5a\x19\x14\x62\x7b\x37\x68\xb6\x72\xf5\x58\x58\x36\x99\xfa\xca\xa0\xab\x46\x66\x97\x49\x0e\x48\xc3\xe4\x96\xcc\xa8\x3e\x78\xb4\x91\x79\xb6\xbf\x03\xd9\x71\x7f\xd2\x9c\x95\xeb\xdb\xa9\x97\x6d\xee\x6b\x76\xf2\xbd\x57\xee\x04\xc8\xa0\x81\xac\x82\x7a\x7c\xb4\x38\xb6\x39\x72\xfd\xb5\x34\x3f\x83\x41\xdf\xb8\x94\xe6\x7d\x06\xe8\x78\x2c\x1f\xba\xfe\x9b\x00\x19\x00\x78\x81\x31\xc0\xfd\x18\x34\xff\x8b\xe3\x77\xe9\x2b\xbe\x8b\x5f\xa5\xd7\xbf\xbe\xb7\xf5\xd3\x0c\x7a\x76\x7e\xe3\xde\xbe\xe9\xd7\x65\xd0\x77\xee\x73\x7a\xe9\x8f\x5f\x93\x41\x47\x7e\x67\xf1\xa9\x55\x50\x80\x09\x36\x52\x38\x27\x98\x76\x44\x53\x27\x2d\x22\x46\x0b\x8d\x85\x90\xce\x62\x62\x1c\x57\x90\x31\xdf\x19\xcb\xad\x04\x52\x28\x81\x7d\x08\x1d\xb7\x5a\x72\x84\x4e\x0c\x1a\xc0\x65\x44\x85\x6b\xa8\x1f\x53\x30\x37\xec\x75\xc3\x89\xd3\x84\xf7\x53\x67\x87\x87\x57\x41\x3b\x63\xd0\xbe\xb7\xb2\xdd\xa1\x85\x69\xb4\x5f\xe0\xb2\xca\xd6\x69\x3c\x1a\xaa\x2e\x3a\x9b\xfa\xff\x43\xdd\x99\x35\xa7\xae\x63\xf1\xfe\xfd\x7c\x8a\x3c\xf6\x2d\x4e\x17\x92\x25\xd9\x72\x77\xdd\x5b\x65\x8c\x99\x27\x33\xc3\x4b\x97\x24\x4b\x60\x26\x03\x66\xfe\xf4\xb7\x12\xc8\x0e\x01\x32\x9d\xd8\xd9\x6c\x57\x9d\xb3\x21\x09\xd2\xd2\xb2\x58\x3f\x4b\x4b\xfa\xab\xe3\x36\x73\xcb\xec\xfe\x60\xee\x56\x39\x35\x0a\x86\xcd\xb9\xb9\x1e\x8c\x27\x65\x67\x92\x81\xd9\x0c\x33\x0e\x3b\x7f\xd4\x9c\x0f\x86\x76\x11\x5a\x60\xbf\x6f\xaf\xf3\x4b\x45\xa7\x79\xd7\x5f\x3f\xef\x64\xb1\x40\xad\x3f\x4a\x0e\x97\x66\xa9\x4b\xf0\x58\xc3\x21\xf6\x15\x06\x08\x05\x1d\x5e\x43\x33\xdd\x9d\x16\x07\xd4\x51\x6a\x39\xd9\xbf\xcc\x82\xc6\x4d\xd0\xf3\xc3\x8b\xfe\xf9\x56\x50\xe9\x38\xfc\x68\xf3\x13\x41\xb3\xbf\x65\x21\xee\x91\x00\x5f\x4c\xe3\x0d\x9c\x20\xd8\xdd\x9e\xb9\x8c\x90\x00\xd8\x8a\x8c\x00\xf1\x11\xb4\x7a\xe7\xfe\xbb\x8c\x15\x1f\xf9\xaf\x7b\x18\xcd\xf1\xd5\x67\x2c\x2b\x02\x82\x9e\x45\xdf\xb8\x63\xd3\xfd\x12\xb4\x3f\xcb\x97\xde\xd0\xaa\x78\xb9\x1f\xf7\x49\xd0\xcd\x76\xb4\x7c\xcb\xec\xcf\xcd\xe2\x52\x4d\x37\xa1\x41\x4c\x61\x0a\x62\x98\xba\x20\x42\x98\x90\x41\x61\x40\xa5\x21\xc4\x75\x41\x18\xa2\x4c\x99\xcc\x23\xa6\xa1\x0b\x43\xea\x84\x00\x83\x52\x48\x29\xa2\xd2\x38\x11\x34\x02\x35\xa2\xda\x2d\xaf\x1f\xaf\x48\x08\xda\x2e\x5b\xa7\xc3\xfa\x8e\xbd\x94\xdf\x74\xda\x39\x41\x71\x46\xf7\x67\xb5\xfd\x6c\xa0\x4b\xd0\x5b\x95\x56\x96\x69\xa7\x1c\x5a\xe9\xa5\xd7\xeb\xb2\x53\x9f\xe6\xea\xa6\xac\x39\x2b\xe4\x65\x18\x18\x4c\x59\xb2\x46\x71\xa9\x3e\xee\xc8\x34\xc3\x7d\xae\x39\xfa\xb6\xd8\x2e\xcd\x96\x23\xb1\xa8\x7b\x9d\xdc\xc8\x81\xbd\x0a\xb2\xad\xd3\x42\x22\xdd\x66\x75\xaf\xbf\x17\x6d\xc2\x33\x87\x42\x76\xb8\xdb\xd1\x51\x55\xdb\xb1\x6a\x31\xc1\x60\xdf\x0b\xd5\xb4\xed\xca\x7c\x36\x5f\xad\x7e\x24\x78\x1d\x21\x41\xa3\xc8\x83\xa6\x5a\xdb\xd4\xe9\x20\xc0\x27\x82\x66\xae\xf6\x58\xff\x04\x41\x8f\x04\xf8\x62\x1e\x6f\x42\xb1\x2e\xaf\x3c\x19\x35\x01\xa8\x15\x19\x01\xe2\x23\x68\xed\xce\xfd\x77\x19\x2b\x3e\xf2\x5f\x98\x1c\xa7\x62\x1a\x83\x9e\xed\xe0\x88\x3b\x36\xdd\x2f\x41\xdf\x93\xf4\xb1\xee\x9b\xa0\xef\xac\x31\xfb\x1c\x41\x3d\x0a\x04\x05\x26\xc3\x40\x27\x3a\x00\x9e\x61\x00\x22\x0d\x8f\x03\x2c\xa1\xa6\x03\xae\x90\x49\xa8\xe6\x99\x18\x62\xac\x33\x93\x28\x6e\x0a\xc9\x74\x5d\xa7\x40\x2a\x20\xd0\x89\xa0\x11\xc8\x11\x5d\x36\x23\x72\x3d\x3f\x2d\x39\x5b\x1c\x3f\xf9\xd4\x4b\xeb\x37\x9d\x76\x46\xd0\x6c\x6f\xbb\xed\x6d\x5b\x65\x96\x5e\xef\x86\x23\xb5\xcb\x2c\xa7\xbd\xc1\x46\xd7\x26\x7d\xbf\xb5\x6b\x4a\xea\x56\xb6\x06\xe9\xb3\x64\xcd\xde\xf7\x93\xfd\x06\xae\x14\xf5\xb9\xec\x58\x85\x61\x62\x4a\x73\x08\x4d\x86\xa2\x1d\x86\x2b\xe2\x4c\xac\x61\xa6\x9f\x38\x6c\xfb\x7d\xd4\x7e\x5e\x49\xa4\x59\x7b\x6b\x3a\x4e\x4d\x7a\x16\x44\x29\xa9\x78\xaa\xea\x4c\xed\x64\xb5\x3d\x58\x4d\x52\xf5\xec\xa2\x9d\x20\x87\x45\x7f\x3a\xa8\xd2\xf2\x4b\xdb\x63\x27\x68\x24\x82\xb8\x25\x9e\x90\x67\xb3\xb8\x99\xdf\x32\x8b\x7b\x24\xc0\x17\xf3\x78\xcb\x1a\xb1\xea\x71\x8f\xa1\x8e\x77\x2e\x1a\x02\xc4\x47\x50\xf7\xce\xfd\xf7\xc6\xaa\xaa\x37\xfd\x97\xd4\x46\xc1\x1b\x11\xfe\xbb\x04\x3d\x7b\xb0\x89\x3b\x36\xdd\x2f\x41\x6f\x2f\x22\xbb\xb8\x1f\x77\x49\x50\xdb\xee\xcd\x67\xdf\xca\x83\x2a\x0f\x70\x81\x31\x56\x44\x9a\x40\x9a\x4c\x87\x8c\x30\x06\x20\x64\x94\xeb\x1a\x32\x74\xa9\x34\xcf\x90\x08\x60\x0c\x29\x83\x94\x32\xcd\xc4\x9c\x03\x6e\x12\x03\x03\x45\x4f\x04\x8d\x40\x8f\xe8\xb2\xd7\x44\x2e\xe8\x37\x4c\xe0\x53\x14\x7a\xea\xa5\x1f\x0a\xfa\x6d\x06\x0b\x5b\x6f\xee\x9d\x61\x63\x39\xcc\x18\x45\xbc\xdd\x56\x07\x1e\x08\xed\xcd\x34\x63\xb9\x03\x55\x86\xce\x21\x21\x9d\x6d\x87\x4f\x93\xa9\x5a\xa1\xd1\x01\x9d\x79\xb5\xb9\x6b\x11\x25\x9d\xa2\x55\x9d\x97\x7a\x2c\x57\xd8\x6c\x36\xe9\x44\xa7\x5f\x9c\x92\x5a\x3e\xb9\x67\xde\xf3\x66\x96\xa4\xbb\x71\xea\xb5\xee\x3c\x3d\x9f\x0f\xe7\x2c\x48\x65\x83\x95\x5f\xd1\x8c\x3d\x4c\x94\x1d\xb7\x17\xf4\x7c\x7f\x52\x0a\x4b\x93\xae\x5b\x7b\xb9\xbb\xb1\x13\x34\x12\x45\x5c\x3b\x67\x0c\x8e\x8b\x5e\x9e\x08\xea\xfc\x16\x41\xbf\xdb\x6b\x98\x3e\x20\xc0\xc6\x0c\xf4\x6b\x6f\x46\x4d\x00\xe7\x46\xcd\xff\x90\x00\xf1\x11\xb4\x7e\xe7\xfe\xbb\x26\xcc\xbb\xfe\x4b\xbb\x3d\x7f\xa0\x5d\x7d\xc6\xb2\x22\x20\xe8\x59\x7a\x3a\xee\xd8\x74\xbf\x04\x1d\x4c\x8b\xfd\x37\x66\xc9\x5f\xee\xc7\x7d\x12\xb4\x14\x86\x93\xef\xe5\x41\x31\x87\x0c\x32\x60\x42\x62\x72\x28\x0c\xce\x31\x52\x1e\xf4\x04\x50\x1a\xd5\x4c\x42\x3d\xc0\x00\x14\x08\x19\x9e\xa1\x31\x80\x34\x2c\x80\xa6\x6b\x9c\x50\xcf\x44\x3a\x24\x27\x82\x46\x20\x48\x74\x29\x06\x16\x35\x41\xab\xe5\x44\xde\x3f\x7e\xf2\x69\x8c\x64\xde\x74\xda\x19\x41\x1d\x50\x31\xcc\xf1\xca\x9a\x4f\x1a\x8d\x51\xb0\x69\x11\x90\x1f\xaf\x0e\xfe\xba\xbe\x2c\x54\xf4\xdd\xb4\x3e\xce\x18\x2a\x6c\x27\x7a\xa3\x22\x19\xd0\x6e\xa7\x26\x07\x5e\x67\x9d\xa3\x6b\x42\x0e\xf6\xa1\x2f\x52\x07\xcf\x0b\xa8\xcd\xfc\xb5\xd3\x99\x17\xca\xb5\x51\xb9\xdf\xcf\xdb\xa7\x3c\x68\xaa\x94\x1d\x06\x85\x4c\x3f\x14\xd2\x70\x93\xc0\xdb\xd6\x8a\xf6\xa4\x07\x8a\x96\x28\x23\xb8\x0f\xd2\x85\xb2\x35\x2d\xc2\x51\xbf\x32\xfc\xe8\xe0\xe5\xe8\x08\x7a\x16\x1f\xbf\xd1\x63\xf1\x01\xfb\x67\x79\xd0\xf4\x95\x4e\xc9\x4f\x10\xf4\x48\x80\x2f\xe6\xf1\x40\x36\x1f\x54\x62\x1f\x43\xdd\x7c\x5a\xfc\x67\x04\x88\x8f\xa0\x8d\x3b\xf7\xdf\xb5\x70\xe0\xfb\xfe\x93\x93\xc1\x3c\x9e\xdd\x2c\xe7\x35\xc5\x1d\x9b\xee\x97\xa0\xbe\x51\x2a\x5c\x3d\x2a\x5f\xde\x8f\xfb\x24\xe8\x7b\xc7\xc9\x7c\xee\x2c\x60\x0f\x19\x9e\x49\x95\xa1\x01\x4f\x71\xe4\x09\x89\x4d\x84\xa0\xc2\x00\x71\xc5\x90\x32\xa5\x82\x08\x6a\x9a\x62\xd2\x24\x98\x19\x88\x1b\x5c\xa7\x94\x43\x0a\x38\x24\xf0\xa4\xa7\x00\x23\x50\x24\x6a\xde\xf2\xfa\xf1\x8a\x46\xd2\x0f\x99\xbd\xc4\xf1\x93\x4f\xbd\xf4\x70\xd3\x69\x67\x04\xed\xb6\x86\x9c\xb8\x4d\xab\x9a\xd8\xb4\xc9\xb8\xe9\xb8\x8b\xea\xdc\xdc\xfb\x38\x4c\xcb\xe5\xa8\x45\x36\xf9\x26\x69\xe7\x50\xd9\xaf\x66\x11\x85\x87\xfc\x7c\x32\x65\xaa\x30\x2a\x55\x72\x0d\xa0\xc9\xd9\x38\x98\x55\x73\xab\x5c\x27\xbf\x59\x1c\x66\x6d\x77\x94\x5b\xb8\x88\x9a\xcf\xb3\xb8\xdd\xa6\xea\x8f\x50\xbe\x92\x38\xa0\x6a\xa3\x59\x56\x6e\x7a\xa3\xd7\x88\xb1\x2b\x37\x4a\xba\xde\x6e\xcc\xaa\x68\x15\xf8\xbb\x41\x29\x53\xff\x39\x41\x05\x27\x92\xfd\xa0\x1b\x05\x47\x67\x79\xd0\xf4\x6f\x11\x54\x38\x12\xe0\x8b\x79\x3c\x34\xef\x15\x3b\x57\x9e\x8c\x9a\x00\x65\x2b\x32\x02\xc4\x47\xd0\xe6\x9d\xfb\xef\x32\x56\x7c\xe4\xbf\x85\x27\xed\x6b\xd3\x2c\x2b\x02\x82\x9e\xf9\x24\xee\xd8\x74\xbf\x04\x7d\x4f\x99\xdd\xba\x6f\x82\xca\xd6\xde\xff\x56\x1e\x94\x21\x8f\x6a\x02\x33\xa1\x21\x43\x1a\x86\x42\x94\x28\x24\x3c\x45\x18\x22\x54\x30\x2e\x30\x07\x02\x6a\xdc\x50\x84\x72\x62\x0a\x68\x1a\xca\xe3\x8c\x32\x43\x07\x10\x88\x93\xa0\x02\x8c\x40\x92\xe8\x72\x1e\x3d\x72\x4d\x3f\x9f\xce\xd9\xf1\x93\x4f\xbd\xf4\x5a\x3d\xc5\xba\xd8\xcd\x52\xd8\x66\x44\x70\xb0\x4c\x17\xb7\x47\xc9\x95\x95\xb2\xc6\xf3\x21\xdf\x54\x7d\x3d\x17\x22\x8d\xf0\x5c\x3a\x35\x6f\xfa\x7a\x21\x59\xaa\xa0\x46\x3b\x97\x0d\x7b\xae\xd6\xda\xa6\xe1\x52\x8a\x41\x2f\xe8\xad\x82\x4e\x1a\x26\x16\xe3\xa2\x97\x29\x37\x0e\x72\x9d\xef\x07\x5e\xe1\x99\xa0\x81\x39\x08\x1b\x61\x1e\x11\x44\x71\xf7\x70\x50\x9d\x51\xa7\xbc\xa0\x8d\xed\xb6\xb1\x4a\x76\x4a\x1d\x91\xed\x26\xf9\xa2\xe8\x0d\x9c\xf2\xcf\x29\x2a\x38\x91\xec\x07\x9d\x96\xf6\x93\xb3\x3c\xa8\xfd\x5b\x0e\x06\x3d\x12\xe0\x8b\x79\x3c\x7d\xd6\x1d\x4c\x62\x1f\x43\xb9\x56\x64\x04\x88\x8f\xa0\xad\x3b\xf7\xdf\x1b\xfa\x86\x6f\xfa\x0f\x58\x6c\x19\x4f\x1e\x34\x15\xc9\xc1\xa0\x9f\x8b\x4d\xf7\x4b\xd0\xd9\xa4\x1c\xfc\x99\x07\x83\xda\xb3\x00\x0e\xbe\x95\x07\x95\xc0\x44\xc8\x90\xd2\x53\x10\xe9\xba\x4e\xa0\xa9\x49\x8a\x01\xd7\x10\x57\x9a\xce\xa9\xae\x04\x25\xdc\x44\x9c\x63\x00\x3d\xc4\xa0\x90\x58\x4a\x8d\x41\x4e\x0c\x53\x83\xcf\x2b\x89\x22\xd0\x24\x6a\xdf\xf2\xfa\xf1\x8a\x84\xa0\xb9\x8a\x41\x34\xcb\xea\x42\xec\x8e\x1b\x72\x34\xbd\x3d\xeb\x70\x3e\x8b\x3b\x9c\xc0\xf6\xf0\x50\x20\x68\xd2\x36\x47\xb3\x72\xd8\xb4\xcd\x64\x9a\x24\x57\x4b\x30\x62\x1d\x7b\xd0\x10\xa0\x68\x4f\xbd\xc6\x62\xb2\xe0\x6e\x72\x9c\x76\x06\x9b\x66\x62\xa4\x1a\xa5\xf4\xda\xd5\x07\x65\x33\x5b\xb0\x1b\x2a\xc8\x74\x9b\x78\xbe\x94\x2e\x98\xce\x4b\x1b\xdb\x3e\x11\x14\x17\xca\xc8\x58\xd1\x66\x7f\xda\xea\x97\x02\xb7\x94\x37\xe8\x74\x9d\x4d\xe6\x3b\xa4\x6a\xb8\x29\xa0\xe7\xaa\xcd\x75\x71\xb8\xea\x8e\x87\x3f\xb7\x92\xc8\x89\x64\x3f\xa8\x40\x9b\x59\x37\x91\x52\xdd\xa1\x5d\x2f\xe8\xd5\xfe\x55\xe0\xfa\x09\x82\xbe\x71\x7c\xe4\xfb\x04\x30\xad\xec\xe2\x7a\xd3\x65\xd4\x04\x68\x59\x91\x11\x20\x3e\x82\xb6\xef\xdc\x7f\x97\xb1\xe2\x23\xff\x19\xd5\xce\x64\x92\xbc\x19\x28\xbf\x4b\xd0\xc8\x62\x13\x4c\x0e\x3e\x88\x4d\xf7\x4b\xd0\xb9\x5e\xe9\xfd\x99\x27\x83\xda\x5b\x8a\xe5\xe6\x0d\xb5\x8d\xcf\xad\x24\x82\x18\x78\x9e\x02\xc2\x20\xca\x78\x7a\xe5\x19\x26\x32\xa1\xd4\x39\x31\x4d\x8d\x9b\x82\xe8\xdc\x14\x1a\x12\x00\x03\x00\x28\x37\x01\x15\x06\x60\x18\x22\xc9\x01\x3a\xc9\xca\x6b\x11\x68\x12\x5d\x3e\x63\x47\xae\xea\x87\x8d\xe2\x69\xf6\xec\xe9\x39\xef\xfa\x5b\x68\xbd\x26\x68\xc7\x58\x8f\x52\x81\x58\x55\xea\x8a\xc1\xb2\x9e\x68\x82\x55\x63\x38\x02\x6e\x62\x62\xee\xf9\xdc\xb4\xf5\x91\x3b\x5d\x36\x9c\x96\x4c\x35\xb6\xd6\x62\x2d\x5a\xb0\x67\x95\x27\x02\x75\x0f\x8b\x7c\x6a\x8f\x88\x13\xae\xdb\x15\x30\x06\xc3\x34\x85\xc9\xe5\xd2\xae\xd8\xab\xfc\xb3\xa2\x02\x6d\xa5\x3d\x5a\xf6\x94\xa8\xa0\x2d\x24\xd5\x3a\x59\x76\xfa\x45\xb2\xeb\xac\x45\x9e\xa6\x2c\x2b\xbf\x76\x47\x39\x7b\xec\x24\xc2\xf4\xcf\xe9\xca\x9f\x85\xb9\x6f\xf4\xd8\xe6\x28\x9c\x9f\xe5\x41\x53\xbf\x65\x3f\xe8\x91\x00\x5f\xcc\xe3\x25\x0e\x93\x79\x5f\x5d\x2e\x88\x88\x9a\x00\x3d\x2b\x32\x02\xc4\x47\xd0\xce\x9d\xfb\xef\x8d\xf1\xf8\x5b\xfe\x73\xac\x5c\x7d\x83\xe2\x21\xe8\x59\xc5\x71\xc7\xa6\xfb\x25\x68\x58\xab\xe6\x96\xd7\x6a\x1a\xaf\xef\xc7\x7d\x12\x54\x77\x0d\x91\xfc\x0e\x41\x89\x87\x75\x82\x00\x31\xb0\x14\x8a\x68\x84\x40\x8d\x13\x48\x31\x53\xba\x49\x4d\xd3\x33\x09\xa3\x9a\x2e\x85\xce\x39\xf3\x34\x09\xb8\xe6\x21\xcc\x91\x54\x0c\x11\xcd\x33\x4e\xb3\xb8\x5a\x04\x9a\x44\xdd\x5b\x5e\x3f\x5e\xd1\xa8\xfa\x8d\x74\xb6\x3e\xeb\xa5\xd7\xca\x6a\xd6\x85\xb0\xbc\x73\x48\x08\xbf\xd4\xef\x38\xdd\xfc\x24\x74\x3a\xab\x65\x0f\xe6\x7d\xa8\x0e\x01\xdb\x69\x5e\xd6\x76\x92\x99\x35\xc8\x0e\xab\xfb\x05\xdf\x9a\x20\xbd\x09\x13\x63\xc4\xda\xd5\xa9\x5b\x6a\xa6\xf6\x2d\x52\xe8\x8c\x9c\x8d\xa7\x57\xe7\x89\xa0\x8d\xfc\x84\x51\xac\xd5\x56\xbb\xe7\xfd\xa0\xdd\x56\xbf\x99\xea\x36\x43\xb3\xd1\xae\x17\x61\xd6\x59\x6a\xd3\xc2\xac\xdf\x09\x0a\xeb\xdd\x72\xbd\x2a\x0d\xc2\x55\xa5\x54\xdb\x04\xb0\xd4\xfd\xb9\x59\xdc\x4c\x24\x79\xd0\x62\x6d\xbe\x38\xcb\x83\x5a\xbf\x65\x3f\xe8\x91\x00\x5f\xcb\xe3\xa5\xac\x14\xe0\x66\x32\x6e\x02\x08\x2b\x32\x02\xc4\x47\xd0\xee\x9d\xfb\xef\x32\x56\x7c\xe4\x3f\x7b\x59\x2e\xc6\x34\x06\x8d\xe4\x6c\xd0\xcf\xc5\xa6\xfb\x25\xe8\x23\xa6\x6a\x7f\x24\x41\xd3\xe9\x71\x82\xd7\xbe\x43\x50\x2e\x34\x06\x75\xc1\xa8\xc6\x0d\x0f\x70\xcf\x04\x48\x68\x3a\xa6\x9a\x81\x74\x21\x24\x37\x15\x96\x8a\x01\xc3\x00\x06\x94\x86\x46\xb1\xa9\x13\xcc\x11\x13\xd2\x33\x31\x44\xa7\x95\x44\x5a\x04\x9a\x44\x97\x2b\x25\x22\x57\xf5\xf3\x0e\x9d\x53\x77\x6f\x59\xd7\xdf\xb2\xd3\x75\x46\xd0\xc2\x6c\xb9\xea\x66\xf7\xa3\xf1\x62\x6e\x15\xac\x8c\x4a\xf7\x40\x61\x5f\x18\x75\x55\xc3\x4c\xee\xba\xa5\x52\xce\x5b\xa3\x6e\x53\x03\xf9\xdd\xbc\x60\xa7\x5c\xad\x08\xd4\xb0\x37\x6b\xfb\x21\x58\xcd\x38\x13\xb6\x99\xdc\x34\xc5\xb4\x34\xeb\xec\x8a\x03\x18\x64\xed\xba\xb9\x0e\x9f\x35\x89\x36\x76\xd0\xd9\x07\x45\x04\x4a\x9a\x5b\xb3\xfb\xf9\xc2\x81\x97\x75\x62\x56\x13\x03\x6f\x2b\xa4\x08\x1a\x9d\x76\xa9\x1a\x1a\x7d\xb7\xf9\x73\x2b\x89\x32\x91\xe4\x41\x53\xa8\xd2\x3f\x86\xb3\xd4\xed\x3d\x25\x3f\x41\xd0\x23\x01\xbe\x96\xc7\x4b\x59\x8b\x83\x3d\x8f\x7d\x0c\x35\xb0\x22\x23\x40\x7c\x04\xed\xdd\xb9\xff\xde\x58\x55\xf5\xa6\xff\xd2\xf9\xe4\x80\xc4\x43\xd0\x48\x0e\x07\xfd\x5c\x6c\xba\x5f\x82\x6e\x49\x6d\x7a\xf8\x33\x09\x5a\x26\xa9\xbe\xfa\x0e\x41\x19\xe0\x1e\xf7\x38\x64\x0c\x11\x6e\x28\x8d\x49\xa1\x01\xc8\x75\x48\x95\x60\xc4\xc4\x80\x48\x2c\x90\x41\x14\x55\x86\xce\x34\x2c\x95\x46\x24\xa5\x84\x99\xba\xf2\x8c\xe7\xc3\x41\xb5\x08\x34\x89\xfa\xb7\xbc\x7e\xbc\xa2\x51\xf5\xdb\xe8\x3b\x7a\xd6\x4b\x3f\x5c\x8b\x9b\x5d\xec\xec\xa4\xf0\x3d\xd3\x2c\x14\x9d\xd4\x46\xef\x19\x9b\xe9\xb8\x05\xd7\x89\x96\x9b\x68\x6c\xd3\xbb\x5c\x7e\x54\x92\xe5\xe9\x74\xb9\x22\xad\x8d\xd6\xb4\x43\xdd\x5e\xe1\x55\x30\xde\x6c\x47\x93\x6c\xc8\x53\x01\x0c\x45\x8b\xce\xdc\xe9\x76\xdd\x5d\xfb\x94\xab\x4a\xb6\x69\x9d\x08\x1a\x94\x34\x33\x64\x01\x5c\x25\x8b\xeb\xed\x20\xab\x65\x6b\xfb\xc9\xc4\xea\x8e\xb7\xa8\x8b\x4d\x2d\x18\x1b\xfb\x6e\x30\x64\x93\x0d\x4c\xfc\xe0\x2c\x6e\x24\xfb\x41\x65\x72\x99\x3b\x16\x94\x72\x7f\xdb\x5a\xdc\xa7\xb0\xf6\x86\xca\xf9\xcb\x75\x19\x75\xf7\x35\x5c\x8d\x9d\x00\x63\x2b\x32\x02\xc4\x47\xd0\xfe\x9d\xfb\xef\x32\x56\x7c\xe4\x3f\x86\xf5\x06\x8c\x87\xa0\x91\x9c\x0e\xfa\xb9\xd8\x74\xbf\x04\x3d\x54\xdd\x4e\xf7\xcf\x24\x68\xa7\xe2\x74\xbf\x95\x07\x35\xb9\x09\x08\xc1\xba\xa6\x0b\x93\x2b\x86\x4c\x9d\x63\xa5\x43\x21\x4c\x08\x3c\x44\x11\x43\x54\x41\x4d\x43\x82\x2a\x82\x0d\x2a\x3d\x4f\xea\x4a\xea\x80\x19\x4a\x53\xf8\xf9\x74\x50\x2d\x02\x4d\x22\x76\xcb\xeb\xc7\x2b\x1a\x55\x3f\xa6\xdb\xbd\xb3\x5e\xba\xbe\xe9\xb4\x33\x82\x36\x5b\xb4\xdb\x01\xb9\x52\xbb\x68\xa5\x7c\x5e\x16\x6d\x90\x43\xed\x5d\x6b\x9c\x1d\x26\x3d\x77\xd8\x12\x65\x20\x33\xf6\x38\x73\x68\x0f\x64\x77\xda\x33\x07\xb0\x9d\x2c\xcf\x6a\x66\x3a\xac\x84\x90\xf9\xf3\x75\xa1\x3d\xb1\xb2\x0d\x90\xa2\x74\xb0\xe3\xd3\xc0\x25\x43\x7d\x99\x3e\x11\x74\x4a\x52\xed\xba\xcf\x0b\x1b\xbd\xda\x59\xd5\x7a\x62\x5f\x4f\x37\x07\x7a\xb5\xe6\xf8\xb5\xbc\xd9\x92\x55\x24\x79\xa2\x57\x54\x7b\xd3\xfa\xb9\x31\xe8\x59\xc4\xfc\x06\x41\xdb\xcb\xa0\x70\x0c\x55\x4f\xdf\x18\xfb\x6a\xa3\xf5\x4f\x10\xf4\x48\x80\xaf\xe5\xf1\x52\xd9\x75\x75\xbc\x8a\x9d\x00\x81\x15\x19\x01\xe2\x23\x28\xbb\x73\xff\x5d\xc6\x8a\x8f\xfc\xb7\x6d\x82\x76\x25\x1e\x82\x46\x72\x3c\xe8\xe7\x62\xd3\xfd\x12\x14\x8e\xea\x19\xe3\xcf\x24\xa8\x1a\xe6\xda\xdf\xca\x83\x02\x09\x0d\x49\x0d\x25\x3c\x46\x90\x89\x0c\xcf\x30\x04\x57\x50\x6a\x3a\xa1\x4a\x78\x0a\x43\xc9\x81\x4e\x4d\x69\xea\xd8\x24\x98\x70\x0e\x31\x23\xa6\x0e\x28\xd2\x24\xe1\x27\x4d\x22\x2d\x02\x4d\xa2\x4b\x2d\xc8\xa8\x09\xda\xcc\x90\x06\x38\xeb\xa5\x1f\xee\x66\x29\x0d\x27\x18\x32\xb9\x29\x01\xd9\xe9\x37\x93\xde\xce\x1c\x6d\x33\xf5\x36\x37\x66\x69\x99\x0e\x47\x35\xb9\xae\x15\x8b\xc4\xb5\x53\x83\x4e\x7f\x94\xea\x64\xb6\xdb\x7a\xf7\x90\x18\x34\xfd\x9c\x10\xf6\x26\x4b\x3a\xd8\x33\xd1\x5a\x58\x2d\xbc\xab\x8e\xb9\x3d\x82\xed\x9c\xf9\xbc\x16\x37\x3d\x54\x81\xa2\xda\xa4\xda\x54\x5d\x55\xa2\xb2\x30\x19\x51\x04\x72\xcb\x54\x30\x9b\xf7\x0b\xed\xcc\x7a\xd7\x98\x4c\x06\x83\x3d\xe1\x3f\xa7\x49\x94\x8d\x22\x0f\x9a\x2a\x77\x27\xa5\xb3\x59\xdc\xdf\xb3\x9b\xe5\x48\x80\x2f\xe6\xf1\xca\x8e\x99\x69\xc6\x4e\x80\xd0\x8a\x8c\x00\xf1\x11\x94\xdf\xb9\xff\xae\x75\x63\xdf\xf5\x5f\x26\xdd\x5f\x05\xa9\x78\x08\x1a\xc9\xf9\xa0\x9f\x8b\x4d\xf7\x4b\x50\x84\xeb\x50\xfd\x99\x04\x0d\x60\xb1\xf5\xad\x3c\xa8\xd2\x0c\x43\x62\xc6\x95\xe1\x01\x0f\x69\xba\x62\x3a\x92\x52\xd7\x30\x24\xca\x60\x10\x1a\x12\x23\x4c\x10\x30\x34\xdd\x30\x3c\xa8\x74\x69\xea\x90\x0a\xea\x69\x9c\x53\xa2\xe1\x13\x41\x23\xd0\x24\xba\x5c\xc1\x1d\xb9\xaa\xdf\x16\x8f\xdc\xb3\x5e\x7a\x7b\xff\xd2\x19\x41\x77\x23\xb5\xb6\xc2\x6e\xb8\x6c\xee\x36\x09\x52\x69\xf7\x66\x21\x07\x61\xb0\xb0\xf5\x7e\x30\x59\x37\x93\xdd\x80\x8f\x96\x2b\x4c\xa4\x25\x2b\xfd\xf2\x76\x6e\x26\xeb\x6d\x6d\x58\xea\xee\x1b\xe3\x76\xb5\x3d\xd6\xaa\x14\xe2\xa4\x37\xd8\x4b\x36\x37\xca\x89\xd2\xa0\xe3\xf3\x5a\xea\x79\x2d\xee\x4c\x8d\x17\x49\xe5\x82\x3d\xd7\x7b\x09\xe2\xbb\x6d\x53\x77\xba\x24\x5d\x6f\xa6\xf6\x7d\x04\x14\x9f\xf7\x7a\xfb\x4a\xd1\x18\x36\x5e\x42\x43\xec\x04\x8d\x44\x17\x37\x9d\xf6\x4f\x27\x8f\x1c\x09\x7a\x35\x90\xf9\x09\x82\x1e\x09\xf0\xc5\x3c\x9e\xab\x71\x66\xc5\x4e\x80\xad\x15\x19\x01\xe2\x23\xa8\xb8\x73\xff\x5d\xef\xf6\x78\xdf\x7f\xad\xe2\xb4\x54\x8f\x87\xa0\x91\x9c\x0f\xfa\xb9\xd8\x74\xbf\x04\xd5\x2b\x8d\x49\xfa\xcf\x24\xe8\xbe\x50\x69\x7c\x2b\x0f\x4a\x24\xd2\x35\x8d\x2b\xdd\x63\x1c\x6a\x86\x0e\x09\x01\x10\x73\x8a\xa8\xa1\x34\x1d\x32\xc0\xb9\xe2\x52\x69\xd8\x10\x8c\x01\x22\x4d\x81\xb9\xa4\x82\x9a\xc0\x63\x9e\x49\x9e\xc7\xa0\x11\x68\x12\x79\xb7\xbc\x7e\xbc\xa2\x51\xf5\xe3\xe8\x10\x9e\xf5\x52\x75\xd3\x69\x67\x04\x15\x19\x7f\xe4\xcf\xdb\xc9\x49\xbf\x9e\x4f\xf7\x7c\x51\x99\xe7\x32\xdb\x19\x2b\xe1\x02\xc8\x4c\xb7\x63\xb1\x04\x59\xb3\xbd\xcb\xe1\x49\xbf\xd1\x1b\x94\x46\x03\x77\xb6\x19\xcc\x7c\x3b\xe5\x2e\x37\x6b\x4d\x2e\xf6\x8b\x6a\x26\x67\xd3\x1c\xc0\x4d\x23\x6d\x8e\xba\xa1\xec\x2d\xf1\xf3\x6e\x96\xee\xa8\xe7\x6f\x34\x6d\xe9\xcc\x7a\xed\x56\xaa\x81\xab\x39\x3a\xcd\x0e\xd6\xc9\xcd\xa6\x90\xdb\x2f\x52\x72\xe6\x6c\x82\x7d\x21\xcd\xb4\xf6\x0f\x8e\x41\x23\xd9\x0f\x4a\x36\xaa\x7a\x96\x07\x4d\x5d\x75\xce\x9f\x20\xe8\x53\x84\xbd\x16\x17\x7d\x9f\x00\x6d\x7b\xee\x83\xd8\x09\x00\xac\xc8\x08\x10\x1f\x41\xbd\x3b\xf7\xdf\x65\xac\xf8\xc8\x7f\xfe\xd4\x4b\x98\xf1\x10\x34\x92\xf3\x41\x3f\x17\x9b\xee\x97\xa0\xd4\x6f\xb6\x66\x7f\x26\x41\x0d\xcf\x75\xbf\x95\x07\xe5\x00\x08\x8a\x98\xa4\x0a\x79\x40\x78\x58\x41\x43\x07\x04\x1a\x90\x6a\x8c\x7b\x0a\x60\x0c\xa4\x60\xba\x54\xc2\xd3\x38\x50\x8c\x9a\x88\x31\x41\x09\x47\x44\x62\x4d\xf0\x13\x41\x23\xd0\x24\xba\x3c\x18\x29\x6a\x82\x96\xb3\xc8\xc9\x9f\xf5\xd2\xeb\x99\x34\xeb\x35\x41\x79\x6e\x5f\x5c\x1d\x5c\x07\xec\x3b\xca\xb2\xb7\x1d\x95\x80\xf3\x5e\x1b\xd5\xaa\x59\x61\x15\x77\x93\xca\x6a\x55\x2a\xe2\x14\x29\x4d\xbb\x08\xb7\xb7\xad\x7c\x76\xd4\xc9\x2d\x8a\x79\x7f\x9b\x64\xe9\x55\xc8\xf2\x8b\x54\x21\xaf\x6b\x5c\x8d\x7b\x33\xbd\xe8\x97\x3b\x7e\x7d\x36\xb1\x4e\x04\x0d\xad\x7d\x7a\x19\x50\x33\x5d\x69\xee\xbc\x41\xab\x9b\xb5\x17\x26\x75\xdc\xea\x7e\x6a\x50\xb0\x4c\xeb\x7e\x73\x11\x0e\x79\x45\xba\xe1\xcb\x37\x34\x6e\x82\x9e\x45\xcc\x6f\xf4\xd8\x2d\x17\xee\x59\x1e\x34\x75\x75\xf0\xee\x4f\x10\xf4\x48\x80\x2f\xe6\xf1\x7a\xf3\x99\xda\xc4\x4e\x00\x6c\x45\x46\x80\xf8\x08\x2a\xef\xdc\x7f\xd7\x87\xa8\xbd\xef\xbf\xf5\xaa\x9d\xce\xc4\x43\xd0\xb3\x81\x7a\xdc\xb1\xe9\x7e\x09\x9a\x40\x2d\xa7\xf4\x47\x12\xd4\x71\x76\xcd\xea\xb7\xf2\xa0\x48\x19\x08\x72\x5d\x17\x90\x21\x4f\x13\x58\x28\xd3\x83\x84\x73\x68\x48\x13\x02\x2e\x19\xd3\x95\xae\x98\xce\x0c\x43\x08\xa1\x3c\x5d\x53\x44\x32\x2e\x3c\x24\x85\x12\xe2\xa4\x2c\xaf\x45\xa0\x49\x74\xf9\xdc\x15\xb9\xaa\xdf\x4e\x6b\x8d\xcf\x7a\xe9\x87\x8a\x0a\xe3\x71\x7f\x41\xc2\xf6\x56\x90\xf9\x52\xaf\xf4\xd4\x62\xd2\xe8\x8d\x5d\xb9\x59\x6a\x06\xf2\xf9\xb0\x6a\x3a\xdb\xf6\x7e\x5c\xd5\xa6\x2e\x4e\x8c\x59\x22\xb5\x74\x47\x89\xc4\x56\x89\x70\x5d\xc8\xf0\x2c\x93\x8e\x5e\x59\x1d\xdc\x5d\x53\x19\x5d\x97\x65\xfb\xf3\xed\x68\x4c\xec\xd3\x7e\xd0\x1a\x2a\xf3\x7e\x98\x1d\x81\xb0\x59\x9b\xd5\x3b\x46\x26\x31\x76\x37\x8b\xf9\x86\xeb\x6c\xa6\xca\x07\xb3\xb7\xe9\x2e\x36\x95\x5a\x98\x2c\xff\x9c\xb2\x7c\x2e\x92\xfd\xa0\xb3\x5c\xbf\x71\x96\x07\xfd\x3d\x8a\x0a\x47\x02\x7c\x31\x8f\xc7\x97\x6d\x77\x17\x3b\x01\xa8\x15\x19\x01\xe2\x23\xa8\xba\x73\xff\x5d\x8f\xd1\xde\xf7\x1f\x56\xa5\xee\x3c\x1e\x82\x46\x72\x3e\xe8\xe7\x62\xd3\xdd\x12\x34\x95\x2a\xb7\x0e\x9b\x3f\x93\xa0\xd5\x4c\xa7\xf2\xad\x3c\x28\x36\x35\x41\x85\x46\x01\xe5\x4a\xc7\x26\x67\x48\x83\x0a\x28\x83\x78\x1e\x83\x90\x50\x08\x81\xc1\x95\xd2\x34\x53\x2a\x4c\x0c\x84\x01\x63\x9c\x62\x13\x2b\xc2\x3c\x0c\xb5\x23\x41\x51\x04\x9a\x44\x97\xfd\x3b\x72\x55\x3f\x01\x9f\x8f\x7e\x6f\x59\x37\x4f\x98\xb2\x2e\x76\xb3\x04\x3b\x37\x44\x7e\x82\x39\x7a\xd5\x92\x83\xd4\xb8\x39\xb5\x80\xb7\x70\x98\x97\x26\x18\xda\x99\x56\xaf\xdc\x76\x21\xb3\x7d\x9f\xf8\x41\xa9\xcc\x6a\xba\x4f\x82\x46\x9f\x24\xb0\x00\x6d\xd5\xd3\xca\x56\x6d\x3a\xdf\x79\x15\xbb\xda\x43\x9b\x6d\x0e\x77\xd3\x74\xff\x4c\xd0\x46\x63\x5f\x2e\x5a\x7e\xb2\x5f\x58\x8f\xf2\x2a\x8d\xba\x5e\x50\xef\xa4\x9c\xdc\x26\x99\x9f\x1b\xa0\x7d\x70\x8b\x0b\xdc\x68\x99\x0c\x9e\xe9\x6e\xc6\x4e\xd0\x48\xf6\x83\xbe\xec\x6c\x3b\x12\xf4\xca\xb4\x9f\x20\xe8\x91\x00\x5f\xcc\xe3\xc9\xdc\x1e\xea\x71\x13\xe0\x18\xab\xa3\x21\x40\x7c\x04\x1d\xdc\xb9\xff\xae\x59\xf8\xbe\xff\x92\xd4\xa2\x31\x11\x34\x92\xf3\x41\x3f\x17\x9b\xee\x97\xa0\xe9\x61\x7b\xd4\xfc\x33\x09\xda\xed\xf7\x4b\xdf\xca\x83\x0a\x80\x3c\xc5\x25\x43\x44\x07\x3a\xf7\x88\x4e\x14\xd2\x81\xc9\x10\xd0\x19\xd3\x0c\x46\x35\xc6\x20\xe6\x48\x79\x10\x6b\x0a\x32\x88\xb8\x61\x0a\x48\x0d\xa8\x08\x66\xe8\x34\x8b\x8b\x22\xd0\x24\x1a\xde\xf2\xfa\xf1\x8a\x84\xa0\x99\x1c\x80\xe2\xac\x97\x7e\xa8\x49\x34\x69\x66\x27\xa4\x34\x31\x3a\x75\x3d\x08\x72\x01\x6e\xd6\x9a\x39\xbf\x16\xd6\x86\x3d\xd7\x11\xb5\x75\xc6\xc3\x13\xbe\xc7\x68\xe6\xfb\x2a\xb4\xed\x59\x69\xdc\x57\x87\xa0\xdf\xdb\x55\xd3\x53\x2b\x97\xdb\x24\xeb\xdd\x71\x38\x4e\xe5\x0c\x59\x1f\xef\xec\x7e\x2f\x55\xef\xd6\xdd\x67\x45\x85\x6d\x1a\x19\xfa\xa8\x3d\x60\x66\x7b\x42\x35\x9b\x95\xb3\x0b\x5f\x06\xc5\x45\xa6\x54\x33\x33\x36\x65\x8e\x21\x45\x36\x97\x83\x8d\xd1\x0f\xce\xe2\x46\x92\x07\x6d\xa9\x66\xfb\x2c\x0f\xfa\x7b\x34\x89\x06\xbf\x5e\xbd\xba\xde\x27\x80\x4a\x5a\xb5\x62\xec\x04\x70\xac\xc8\x08\x10\x1f\x41\x87\x77\xee\xbf\xcb\x58\xf1\x81\xff\xb2\x99\x34\xdc\xc7\x34\x8b\x1b\xc9\xf9\xa0\x9f\x8b\x4d\xf7\x4b\xd0\x8c\xd6\x69\xa0\x3f\x93\xa0\x83\x95\x28\x7c\x2b\x0f\x8a\x35\x89\x0d\x45\x95\x27\xb8\x81\xa8\xa0\x18\x4b\x48\x88\x2e\x4c\xc5\x3c\x48\x25\xa7\x94\x1a\x9e\x41\x75\x0a\xa5\x22\xd2\xd4\xa1\x4e\x4d\x2a\xb9\x2e\xa1\x20\x92\xca\x67\x82\x46\xa0\x49\xe4\xdf\xf2\xfa\xf1\x8a\x46\xd5\x6f\x0f\x32\xf8\xac\x97\x5e\x6f\x18\xb7\x5e\x13\x94\x35\x02\x47\x24\x8b\x3b\x16\xa0\xbe\x3e\x68\x85\xcd\x21\x74\x55\x69\x34\x69\x62\xaa\x37\xdd\xe2\x60\xb5\x36\x2b\xc3\x45\x93\x3a\x87\x86\xab\x8d\x32\x76\x67\x50\x4b\x04\x5e\xa1\x35\x6b\xe6\x6b\xf5\x96\x81\xd3\xd5\xc1\x62\xeb\x0c\x44\x2e\x95\x9d\x07\x1b\xc6\xc2\x50\xc3\xe9\xd3\x18\xd4\x5d\xd7\x93\x23\x73\x8f\xaa\xe5\xa1\x83\xdb\xed\x70\xa6\x83\x9e\x8e\xfd\x1c\xc4\x2c\x65\x40\xbd\x93\x09\xa6\xd5\xd5\x3a\x97\xd1\xab\x3f\x47\xd0\xb3\x88\xf9\x8d\x1e\x5b\x2a\xb9\xdd\xb3\x3c\xe8\xb5\x78\xc0\x4f\x10\xf4\x48\x80\x2f\xe6\xf1\x86\xae\x29\x86\xb1\x13\xe0\xe6\xd3\xe2\x3f\x23\x40\x7c\x04\xf5\xef\xdc\x7f\x97\xb1\xe2\x23\xff\xe5\xb4\x39\x8a\x67\x25\x91\x7d\x56\x54\xdc\xb1\xe9\x7e\x09\x9a\x2f\x75\x6d\xfe\x67\x12\x74\x91\x52\xb9\x6f\xe5\x41\xa5\x34\x75\xaa\x13\x4f\x09\x66\x50\x81\x91\xc0\xc0\xc0\x08\x1a\x0a\x79\x5c\x78\x86\x60\xa6\x41\x75\x8c\xb8\x69\x20\x2e\x4c\x46\x3c\x81\x95\x46\x28\x55\x26\x85\x42\xf7\x8c\x13\x41\x23\xd0\x24\x1a\xdd\xf2\xfa\xf1\x8a\x46\xd5\x2f\x5c\xa5\x4e\xf9\xa7\xa7\xd5\x2d\xe9\x9b\x4e\x3b\x23\xa8\x96\xd9\x06\x72\xd6\x2d\xb4\xab\x4d\xdf\x0c\xf6\x9d\xdc\xbe\x52\x4a\x80\x6d\xa9\xee\xf9\xe3\xf4\x36\x85\x17\x5e\xa5\x30\x1d\x25\xaa\xae\x4f\x19\x18\xd5\x07\x23\x37\x9b\x84\x49\x27\x6c\x2c\x28\x25\x0b\x63\xda\xda\x74\x89\xd1\xb5\x47\xad\x6c\x2e\xb1\x54\x06\x48\x25\xec\xcc\xf3\x4a\x22\x63\xce\xb2\x5d\xb5\x9f\x8d\x9c\x9a\x93\x02\xe5\x2e\x35\x37\x15\x55\x9c\xe0\x7e\x7a\xdd\xad\xd2\xe9\x04\x39\x74\xe2\xd7\xa6\xa9\xdd\xea\x65\xd9\x66\xec\x04\x8d\x24\x0f\xfa\x12\x0c\x8e\xba\xb8\xbf\x45\x93\xe8\x48\x80\x2f\xe6\xf1\x86\xe6\xc2\x4b\xc6\x4e\x80\xb2\x15\x19\x01\xe2\x23\xe8\xe8\xce\xfd\x77\x19\x2b\x3e\xf2\x5f\x7e\xd4\x21\x3c\x1e\x82\x9e\xf9\x24\xee\xd8\x74\xbf\x04\x2d\x0e\xba\xbb\xe4\x9f\x49\xd0\x43\xdb\xcf\xbe\x9f\x07\xfd\xeb\xaf\x7f\xff\xfb\xaf\x7f\xff\xfb\x21\xcd\x56\xec\x41\x05\xcb\x87\x0a\x9b\xca\xff\x3c\xac\xe7\x83\x25\xf3\xe4\x89\xa8\xff\x7d\x68\xee\xe7\xf2\x3f\x0f\x4d\x2b\x55\x72\x1e\xd2\x56\xd3\xfa\xef\x43\x43\x0c\xe5\x94\xfd\xe7\x61\xbe\xe6\x13\x5f\xfc\xf7\xa1\xba\x9d\xc9\xe5\x7f\x1e\x1e\x0b\xfb\xeb\x15\x97\x5f\x17\xf5\x0b\xce\xda\xdf\x0f\xf0\x55\xac\x0c\x5f\x62\xe7\x0d\xba\xbf\x5d\xca\xaf\xf1\xed\xd6\xaa\xb9\x63\xeb\xaa\x94\xe7\x16\x1e\x1b\xc6\x84\x08\xd6\xb3\x95\xf7\xd8\xdc\xb3\xd7\xff\x9b\x8f\xe5\xaf\x66\xda\xd5\x4a\xa3\x59\xb7\xf2\x95\xe6\x07\xcd\xb4\x4a\x4d\xa7\x7e\xf2\x4a\xb5\x52\xea\x9d\x97\xf8\xd7\xc3\xc3\xc3\x83\x95\x4e\x9f\x95\x76\x55\xe1\x43\xad\x9e\x2f\x5b\xf5\xde\x43\xd1\xe9\x3d\xfc\xeb\xf4\x5b\xdf\xfb\xfb\xe1\xf1\x2f\x66\x6c\x2a\xdf\x32\x3f\xfc\xf5\x22\x5a\xc3\xc3\x77\xac\x0e\xdf\x33\xf9\xca\x50\xce\x66\x8f\xff\x45\x64\x1e\x67\xb3\x5b\x96\x3d\x57\xf0\xda\xa8\x59\xe0\xc9\x1b\x16\x4d\xa4\x37\x90\xcb\xa1\x64\x9e\x5c\x86\xaf\xdf\xfd\xef\xf8\x2e\x94\x8b\xff\x45\x62\xee\xab\xc2\x6f\x19\xfe\x4e\xed\x0f\xad\x4a\xde\x6d\x39\x0f\xff\xfa\xf5\xd3\x2f\xb5\x24\x1a\x7f\x7f\xb1\x01\xd7\xf7\xe0\xf4\x7b\x16\x0e\xaf\xac\x0f\x94\x7a\x34\xfb\xf8\x4f\x44\xf6\x1e\x0b\xbb\x65\xe8\x59\x35\xaf\x2d\x7c\xfa\xc5\x8d\x6e\x32\x97\x8f\xd6\x3d\xfd\x3f\x22\xe3\x9e\xca\xba\x65\xdb\x4b\x25\xaf\x4d\xf3\xe7\x7f\x3f\xcc\x83\xe5\xea\xda\xb6\xc7\xfa\xc2\xe1\x62\x2d\xd7\xf2\xd5\x9b\xa8\x2c\x3d\x2b\xf2\xa6\xc1\x97\x55\xde\xba\xe9\xb7\xac\x0e\xd7\xfc\xf4\x4f\x74\x96\x86\x6b\xfe\x86\x8d\xcf\xd5\xbc\xb6\x6e\x29\xc3\x1b\xb7\x7b\xb1\x0e\x96\xeb\xa9\x3f\x53\xc1\xd9\xcb\x88\x8c\x7c\x29\xf0\x96\xa1\x17\xd5\x7d\x2a\x86\x85\x62\x7e\xfc\x58\x78\xf6\x32\x22\x6b\x5f\x0a\xbc\x65\xed\x45\x75\xaf\xad\x5d\x84\x72\x75\xf3\xbb\xfe\x08\x6b\x19\xae\xd8\x4a\x9e\xbd\x8c\xca\xde\x5f\x05\xde\xb4\xf7\x75\x75\xaf\xed\x7d\xfa\xf9\x4d\xbe\xae\x96\xeb\x70\x35\xf1\x67\x32\x3c\x7b\x19\x91\xc1\x2f\x05\xde\x32\xf8\xa2\xba\x37\x1f\x0d\xfc\x30\x5c\xcb\xe5\xdf\x0f\x2c\x0c\xe5\x4a\x04\xde\x8d\x36\xec\x94\xfc\xf5\xa0\x74\xfe\x26\xaa\x76\x9c\x15\x79\xb3\x25\x97\x55\xde\x8a\x12\xa1\x5c\xfc\xfd\xb0\xda\xf9\x33\x4f\xee\x6e\xb4\xe0\xc5\xfc\xa8\x6d\x7f\xd7\xf0\x6f\x59\x7d\xf1\x88\xfa\xfa\x6d\x44\xf6\xbf\x2e\xf4\x56\x23\x6e\x54\xfb\x66\x4b\x4e\x7f\x7b\xbb\x39\xa7\x3e\xc7\xd9\x84\xcd\x84\x0c\x9f\x6d\xcf\x57\xd2\x4e\xf7\x03\xb3\xed\xba\x63\x35\x9d\xe3\x9f\x5e\x96\xf3\x50\xad\xbc\x3c\xc5\xb6\x1a\xf9\x4a\xf6\x81\xaf\x96\x52\x3e\xfc\xeb\xf4\x17\xff\xe7\xa1\x93\x73\xea\xce\xaf\xf7\x0f\xff\xef\xff\x3e\x40\xf0\x7c\x5d\x3f\x68\xca\x70\x75\x64\xf9\x63\x2b\xfe\xb1\x95\xaf\x8b\x79\x34\xf2\xf4\x9c\xf2\xca\xc4\x50\x4e\x26\xfe\x6c\xf0\xf4\xdd\xfb\xfb\x81\xaf\xf7\x2f\x6f\xe6\x4b\x5f\x5c\x7f\x17\x1f\x6f\x03\xdf\x87\x72\xf1\x8f\x0d\xfb\x55\xc2\xa3\x4d\x2f\x5f\x8c\x57\x66\xbd\xfd\xa8\xf8\xf8\xe7\x4a\xca\xef\x9b\xf0\x5c\xc8\xd1\x8a\xb3\x00\xf3\x49\x43\x4e\xbf\xf9\x9e\x21\xe7\x85\x3c\x1a\xf2\xfa\x41\xf8\x93\x96\x84\x62\x2e\x67\x9b\x6f\x5a\x72\x5e\xc8\xa3\x25\xa1\x98\x7f\xd1\x21\x2f\x40\xfd\xb6\x25\xe7\xe5\x9c\x8c\x79\x7e\x4a\x78\x6d\x0c\x0b\x57\x6f\x1b\x74\x16\x38\xbe\x67\xd1\x65\x41\x8f\x26\x5d\xc4\xc6\x0f\x7d\x54\x0b\xc2\xd5\x60\x29\x1b\x6e\xe9\x69\x2c\xcc\x59\x28\x1f\xbc\xf5\x74\xfe\x20\x82\xe9\x7c\x22\x57\xf2\xa9\xda\xff\x1f\x00\x00\xff\xff\xde\xab\xf0\xb5\x16\x04\x02\x00") - -func order_books_310CoreSqlBytes() ([]byte, error) { - return bindataRead( - _order_books_310CoreSql, - "order_books_310-core.sql", - ) -} - -func order_books_310CoreSql() (*asset, error) { - bytes, err := order_books_310CoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "order_books_310-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x28, 0x94, 0x48, 0x4f, 0x7f, 0xf6, 0x68, 0xb5, 0x84, 0xf3, 0x47, 0xa8, 0x1f, 0x37, 0x37, 0x69, 0x9, 0xa7, 0x84, 0x48, 0xe6, 0xa2, 0x5, 0xa1, 0xeb, 0xad, 0x22, 0xa1, 0x2f, 0xa2, 0x3e, 0x82}} - return a, nil -} - -var _order_books_310HorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x79\x6f\xeb\x3a\x92\x37\xfc\x7f\x7f\x0a\xe3\x62\x80\xd3\x8d\x9c\xdb\xe6\x2e\xf2\xf6\xd3\x0f\x20\xef\xfb\xbe\x0f\x06\x01\x25\x51\xde\x97\x78\xb7\x07\xcf\x77\x7f\x11\xdb\x89\x1d\xc5\x4b\x22\xcb\xbe\xbe\xfd\x1e\xde\x99\xd3\x91\x25\x55\x91\x55\x2c\xd6\x8f\x64\xa9\xf8\xfb\xef\x7f\xfb\xfd\x77\x5f\x6e\x38\x99\x36\xc7\xaa\x98\x4f\xf9\x2c\x39\x95\x86\x9c\x28\x9f\x35\xeb\x8f\xfe\xf6\xfb\xef\x7f\x7b\xbd\x1f\x9a\xf5\x47\xca\xf2\xd9\xe3\x61\x7f\xff\xc0\x5c\x8d\x27\xed\xe1\xc0\x27\xfe\xc9\xfe\x09\x0f\x9e\x32\x56\xbe\x51\xf3\xf9\xf5\x75\xc7\x23\x7f\x2b\x86\x4b\xbe\xc9\x54\x4e\x55\x5f\x0d\xa6\xcf\xd3\x76\x5f\x0d\x67\x53\xdf\xbf\x7d\xe0\x5f\x9b\x5b\xbd\xa1\xd9\xfd\xfc\xab\xd9\x6b\xbf\x3e\xad\x06\xe6\xd0\x6a\x0f\x9a\xbe\x7f\xfb\x7e\x94\x4b\x11\xfe\xe3\x5f\x6f\xe4\x06\x96\x1c\x5b\xcf\xe6\x70\x60\x0f\xc7\xfd\xf6\xa0\xf9\x3c\x99\x8e\xdb\x83\xe6\xc4\xf7\x6f\xdf\x70\xb0\xa3\xd1\x52\x66\xf7\xd9\x9e\x0d\xcc\x69\x7b\x38\x78\x36\x86\x56\x5b\xbd\xde\xb7\x65\x6f\xa2\x3e\xb0\xe9\xb7\x07\xcf\x7d\x35\x99\xc8\xe6\xe6\x81\x85\x1c\x0f\xda\x83\xe6\xbf\x76\x75\x57\x72\x6c\xb6\x9e\x47\x72\xda\xf2\xfd\xdb\x37\x9a\x19\xbd\xb6\xf9\xf3\xb5\xb1\xa6\x9c\xca\xde\xf0\xf5\x31\x3d\x55\x0a\x17\x7c\x25\x3d\x90\x0a\xfb\xe2\x11\x5f\xb8\x16\x2f\x96\x8a\xbe\x6c\x26\x55\xdf\x3d\xff\xcf\x56\x7b\x32\x1d\x8e\x57\xcf\xd3\xb1\xb4\xd4\xc4\x17\x2a\x64\x73\xbe\x60\x36\x53\x2c\x15\xf4\x78\xa6\x74\xf0\xd2\xc7\x07\x9f\xcd\xe1\x6c\x30\x55\xe3\x67\x39\x99\xa8\xe9\x73\xdb\x7a\xb6\xbb\x6a\xf5\xaf\x7b\x30\x34\x37\x7f\xdd\x83\xe5\x6b\xbf\xba\x5f\x03\xb7\xdc\xbe\xdf\xba\x6d\x05\x5f\x3b\xf2\x39\x66\x07\x4f\xed\x89\x6f\x1e\x8f\x67\x42\xe1\xda\xc1\x93\x3b\xb2\x9b\x5a\x3d\x2b\xdb\x56\xe6\x74\xf2\x6c\xac\x9e\x87\x63\x4b\x8d\x9f\x8d\xe1\xb0\x7b\xfe\xc5\xf6\xc0\x52\xcb\xe7\x83\xc6\x0d\x26\x72\xd3\xd1\x27\xcf\xc3\xc1\x73\xdb\xfa\xce\xdb\xc3\x91\x1a\xcb\xf7\x77\xa7\xab\x91\xba\xe2\xed\x7d\x4d\xae\xaa\xc5\xf7\xde\xed\x29\xab\xa9\xc6\x9b\x17\x27\xea\x65\xa6\x06\xe6\xb7\x9a\x70\xf0\xfa\x68\xac\xe6\xed\xe1\x6c\xb2\xfb\xed\xb9\x25\x27\x2d\x97\xa4\xae\xa7\xd0\xee\x8f\x86\xe3\x57\x73\xdc\x8d\xa9\x6e\xc9\xb8\x95\xa5\xd9\x1b\x4e\x94\xf5\x2c\xa7\xdf\x79\xff\xad\x33\xbb\xe8\x4a\x3b\xbb\x74\x51\xe9\xc3\x37\xa5\x65\x8d\xd5\x64\x72\xfe\xf5\xd6\x74\x6c\x6d\xfc\xce\x73\x6f\x38\xec\xce\x46\x5f\x78\x7a\x74\xa9\x4a\xdb\xa7\x64\x7b\xfc\x4d\xc2\x6f\x83\xee\x97\x5f\x78\x1d\x27\x6c\x5b\x8d\xbf\xf6\xe8\x1b\x79\x17\xaf\xec\xc4\xfa\xb5\x97\x36\x43\xeb\x37\x98\x1c\x0e\xc5\x97\xde\x18\xbd\xbe\xd0\x9a\x5e\xd4\xc0\xe4\xc3\x00\x64\xac\x2e\x76\xa3\xd6\xbb\xa5\x7f\xe5\xe1\xe1\xb6\x1e\xc3\x8b\x0f\xb6\x27\xd3\xe7\xe9\xf2\x79\x74\x99\xe4\xeb\x93\xc3\xd1\x57\x9f\x54\x5f\x7d\xec\xcd\x95\x9c\x7f\xd8\x78\x33\xf7\x8b\x8f\x5d\x1e\xc5\x8c\xd5\xd7\x94\xb9\xf5\x91\xaf\xd2\x9e\x4c\x66\x97\x38\xbf\x3f\x6c\x0e\x2d\xf5\x4d\x5c\xf0\xde\x0d\x46\x72\x3c\x6d\x9b\xed\x91\x1c\x9c\x75\xde\x97\x5e\x7d\x1e\x7d\x13\x9b\xbc\x7b\xb4\xef\xd6\xe0\xf8\x8b\xdf\xe6\xbf\x11\xde\x57\xf8\x6d\x1f\xbc\x39\xfd\xad\x32\x5f\x35\xb9\xfb\xf3\xd5\x3f\xbc\x41\xbf\x4d\x67\x78\xfe\x62\x0d\x9a\xc3\xf1\xe8\xb9\xdf\x6e\xee\x00\xc3\x99\x2a\x38\x9e\xfc\x72\x1b\xbf\x8f\xf7\xce\x51\xfe\x6a\xe7\xdc\xbe\x1d\xcc\xa6\xca\xe9\x8c\xaf\x6d\x6d\x39\x87\xc2\x11\xbd\x9c\x2a\x7d\x91\xf6\x89\x4e\xe7\x01\xe5\x9d\xba\xcf\x53\xda\x5c\x7d\xbd\xf9\x6f\x5e\xba\x18\xce\x97\xc3\x99\xa0\x0b\x99\xbd\xe2\xec\x89\x7a\xf9\x36\xe7\x0f\x44\xbe\xfc\xb6\xa5\xbe\xf8\xec\x1e\xcd\x7e\xb9\x85\x27\xac\xfe\x3b\xed\x3b\x4e\xe2\x6b\xef\xee\x70\xdf\xd7\x1e\xde\x81\xbc\x2f\xb7\x6d\x37\x02\x7c\xa7\x2d\xdb\x57\xbe\xf8\xec\x0e\xfe\x7d\xbd\x3e\x6f\x78\xf1\x2b\x35\x72\x8c\x21\xe7\x1f\x3e\x18\x12\x76\x0f\xea\xd1\x68\x21\x1c\xd5\x4b\x47\x1e\xee\xb7\x5f\x67\x1c\x6d\x53\xfd\x7d\x30\xeb\xab\x71\xdb\xfc\xef\xff\xf9\xc7\x17\xde\x92\x4b\x17\x6f\xf5\xe4\x64\xfa\x77\x39\x58\xa9\xde\x66\x29\xe6\x0b\x6f\xd8\xed\xf1\xd1\x57\x22\xe5\x4c\xb0\x14\xcf\x66\xce\xb4\xe7\x59\x36\x9b\xfb\xda\xfd\xf4\x7d\xaa\xe8\x19\x1a\x6f\xad\xbb\x82\xc6\x6b\x5b\x37\xaf\xef\x2b\xff\xd3\xf7\x9d\x86\x6c\x9a\xfe\x05\x0a\xe1\x5a\x29\x9c\x29\x3a\x48\xf4\x46\xcd\xc9\x4b\xef\xad\x2f\x06\x63\xe1\xb4\xfe\x89\xc3\xbf\xfe\xb6\x5d\x85\xcb\xc8\xbe\xfa\xe3\xed\x37\x5f\x69\x35\x52\x7f\xec\x5e\xf9\x97\xaf\x68\xb6\x54\x5f\xfe\xe1\xfb\xfd\x5f\xbe\xec\x62\xa0\xc6\x7f\xf8\x7e\xdf\x2c\xce\x05\x0b\xe1\x57\x7d\xed\x28\xbf\xd1\xfb\xdb\x07\x8a\x1f\x6f\xee\x08\x07\xb3\xe9\x74\x38\x53\x3a\x43\x79\xfb\x80\x2f\x9b\xf9\x48\xc0\x17\x2f\xfa\x7e\xbc\x2d\xbb\xbd\xfd\x36\xd9\x10\xf9\xe1\xe4\xfc\xd6\xfc\x1d\xcf\x77\x09\x5d\x6c\xcf\x07\x59\x66\xb2\x25\x87\x3c\x7d\xd5\x78\x29\xf6\x5e\xad\xc3\xf5\xb7\x0f\xec\xf7\x54\x1c\x15\xf9\x4e\xe3\x3f\x11\xd9\x08\x20\x97\xf2\x8f\x9a\xc5\x7c\xca\x37\x1a\x0f\x4d\x65\xcd\xc6\xb2\xe7\xeb\xc9\x41\x73\x26\x9b\x6a\x23\x86\x2f\xae\x17\x1e\x56\xf7\x72\x47\xdb\x55\xff\xad\xaf\xee\xeb\xff\xa6\xdb\x63\xb2\x7c\xef\xd9\x17\xe9\xfb\x0a\xe1\x52\xb9\x90\x29\x1e\xfc\xf6\x37\x9f\xcf\xe7\x4b\xe9\x99\x68\x59\x8f\x86\x7d\x9b\xd6\xa7\xd3\xe5\xed\x78\x57\x2c\x15\xe2\xc1\xd2\xe6\x09\xbd\xe8\xfb\xaf\xe7\xff\xf2\x15\xc3\xa9\x70\xb0\xe4\xfb\x2f\xf8\x7a\xe5\xd4\xc6\x45\x43\xbc\xae\x75\x97\xc8\x7b\xd6\x38\x74\xac\x71\x5f\x19\xa9\xae\x6b\xdf\x17\x38\xbc\x37\xf1\xfd\x27\x57\x2d\xfc\xfb\xdf\x7c\xbe\xa0\x5e\x0c\xfb\xaa\xb1\x70\xc6\xf7\x5f\xf0\xbf\xe1\xff\xf8\xff\x0b\xfe\x37\xfa\x9f\xff\xfb\x5f\x68\xf3\x37\xfa\x6f\xf4\x3f\xbe\xd2\xf6\xa6\x2f\x9c\x2a\x86\x5f\x85\x12\xce\x84\xfe\x71\x54\x32\x5f\xf0\x03\x57\x4a\xe6\x32\x87\x5b\x4b\xe6\xff\xb8\x91\xcc\x67\x9f\xba\x93\xc3\xbb\x1f\xfe\x9a\x20\xf6\x6e\xfb\x13\xc5\x4d\x8d\x7d\xbe\xe2\xab\xac\x7c\xff\xde\x8f\x00\x3f\xb7\x3f\x97\xea\xb9\xb0\xef\xdf\x87\x16\xf1\x8f\x63\x56\xeb\x69\x1d\x9d\x04\x1d\x55\x7c\x33\xe3\xaf\xd7\xf0\x28\x04\xba\xb6\x96\xc7\x88\x3a\x6a\xfa\xc1\x20\x3f\x56\x77\xdf\xcb\x3e\xd7\xf6\x18\xcc\xbb\xba\xb6\x47\x88\x3a\x6b\x7b\x68\x24\x67\x6b\xfb\xea\xb9\x2c\x65\xcb\x59\x6f\xfa\x3c\x95\x46\x4f\x4d\x46\xd2\x54\xbe\x7f\xfb\x7e\xfc\xf8\xd7\xc7\xbb\x8b\xf6\xb4\xf5\x3c\x6c\x5b\x07\x5b\x69\x1f\xda\x7a\x88\x7f\x77\x4d\xdc\x18\xd8\xd7\x9a\xb7\xb5\xc5\xc3\xc9\xf7\xb6\x45\x6d\xcb\x67\xb4\x9b\xed\xc1\x74\x03\x0c\x32\xe5\x54\x6a\xdb\x1c\xd9\x7f\x85\xf1\x3e\xb3\x25\xc7\xd2\x9c\xaa\xb1\x6f\x2e\xc7\xab\xf6\xa0\xe9\x78\x6c\x30\xeb\xbf\x43\x7e\x5f\x7b\x30\x55\x4d\x35\x76\x3c\x62\xf7\x64\x73\xe2\x9b\xf4\x65\xaf\xf7\x99\xcd\x74\xd8\xef\x7d\x66\xf2\x77\x44\xe9\x3f\xde\x9f\xfc\xac\x76\xe7\xbc\xc1\xad\x38\x9c\xab\x1d\xef\x22\x99\xaa\xe5\x27\x81\x8c\x46\xbd\xf6\x66\xcd\xde\x37\x6d\xf7\xd5\x64\x2a\xfb\x23\xdf\xab\xce\x36\x97\xbe\xf5\x70\xa0\x3e\x57\xf4\xd4\xac\xe8\x0d\x8f\xee\xa6\x53\x5f\xab\xf3\xfb\xe4\xeb\x04\xd5\x5d\x37\xd4\x0b\xa5\x2d\xa2\x83\x9b\x1f\xe2\x99\x60\x21\xbc\x81\x5f\x81\xfa\xee\xa7\x4c\xd6\x97\x8e\x67\x2a\x7a\xaa\x1c\x7e\xbf\xd6\x6b\xfb\xeb\xa0\x1e\x8c\x85\x7d\xf0\x52\x63\x5c\x8b\xdd\x49\xe8\x53\x57\xdc\x2d\x7a\xf8\x06\x6a\x39\x9d\xcb\xde\xdf\x7f\x9c\x68\xf1\x8f\x3f\xfe\x18\xab\xa6\xd9\x93\x93\xc9\x3f\x9c\xea\xda\xee\x55\x1c\xe9\x5b\x8c\xfc\xe3\x8c\xa2\xb6\x73\xe3\xab\x5b\xb6\x5d\xd1\x79\x6f\xd7\x71\xcb\xd8\xaf\xd5\x1d\xaf\xe6\xd1\xc7\xcd\xa1\x75\xec\x71\x88\x8e\x3f\xbe\x5d\xfe\x3b\xf2\x02\x65\xe7\x2c\xec\xf8\xf2\x82\x47\xdd\xf6\x90\xe6\xdd\x3a\xed\xb9\x86\xf8\xb2\xd5\x4c\x38\xe4\x0b\xd4\x2f\xb4\x68\xbb\x42\x77\xbe\x41\xef\xb4\x1c\xb7\xff\xd9\xb6\x4e\xd5\xed\x6d\xcd\xe7\xda\x5e\xb7\xa3\xb3\xeb\x76\x0e\x9b\x79\x3e\x35\xd2\x7f\x5e\xe2\x3a\xf5\xe4\x6f\x9b\x8d\x8f\xdf\x4e\xf4\xe6\x4d\x3f\x3e\x7e\xcb\x52\x53\xd9\xee\x4d\x7c\x9d\xc9\x70\x60\x9c\xee\x6c\x6f\x0b\x65\xd7\xca\x61\x47\x67\x27\x87\xb7\x7d\xeb\x13\x75\x3b\xd8\x4c\xfe\x92\x15\x1e\xdb\xc7\x3e\xfe\xe2\x4e\x2c\x07\x2b\xa3\x1b\x45\xbc\xd7\xe3\x6d\x94\x03\x0e\x0e\x7b\x45\x7c\xed\xf9\xf7\xcd\x64\x87\x63\x1a\xce\xa6\x7b\xdf\xe4\x7c\x67\xac\xe4\xf4\xe2\x4b\xdb\x67\x67\x23\xeb\xcb\xcf\xbe\x77\x9d\xdd\xa5\x63\x9f\xfd\x53\x5b\xe0\x27\x3c\x30\x95\xbd\x67\x73\xd8\x1e\x4c\x8e\xf7\x41\x5b\xa9\xe7\xd1\x70\xd8\x3b\x7e\x77\xb3\xf3\x69\xab\x53\xba\xde\xdc\x1e\xab\x89\x1a\xcf\x4f\x3d\xf2\x8a\x43\xa7\xcb\xe7\x0d\x4c\x6a\xaf\x4f\x3d\x35\x1a\x0f\xa7\x43\x73\xd8\x3b\xd9\x2e\xa7\x8e\xde\x3a\x8b\x92\x96\x1a\x6f\xe0\xc5\xf6\xf7\xc9\xcc\x34\xd5\x64\x62\xcf\x7a\xcf\x27\x3b\xca\xae\xe1\xb2\xdd\x53\xd6\xe9\xa7\x4e\x9b\xd5\x89\xb5\xeb\x6b\xad\xec\xc4\x7e\xc8\x05\x9f\xf7\xf5\xd1\xe6\xf2\xf8\xf5\xdd\x26\x7b\xeb\xc6\xce\xf2\xb8\x97\x5b\xfb\x56\x43\xaf\x74\x73\x67\x79\x7d\x76\x7b\xc7\x1f\x3f\xe3\x06\x0f\x76\x76\x3c\xeb\x9b\x97\xa6\x39\x1f\xa3\xaa\x4e\x4c\x85\x5e\x91\xbf\xb9\x6d\xca\xc6\x03\x5e\xe9\x00\x77\x96\x3f\x9c\x8d\xcd\xf7\x30\x8d\x13\xae\xe7\x6d\x38\xf9\xf1\xe3\x8f\x3f\x4e\x4f\xc5\x4e\xdb\xc1\x6e\x63\xed\x5a\x71\xee\x62\x01\xff\xee\x29\x5e\xd8\x0d\x89\x6e\xbc\xd7\x26\x16\xe6\x24\x5b\x47\x24\xe2\xb9\x87\x76\xc1\x91\xe7\x1e\xd9\xce\x83\x8f\x3e\xf0\x39\xa6\xf3\xc2\x73\x67\xd9\xbd\x3f\x75\x86\xe3\xa6\x4a\xed\xc9\xf3\x44\xf5\x7a\x6a\xec\x33\x86\xc3\x9e\x92\x83\x37\x9f\xd4\x36\xd5\xf3\xe0\x83\xff\xdd\xfe\xf6\xd1\x27\xef\xa3\x89\x9e\x1d\xde\xfa\x43\x3c\x93\xf3\xe6\xc1\x36\xfd\xd1\xc8\xcf\x4d\xad\x9f\x37\xb1\xc1\xbe\x60\x2c\x1c\x4c\xfa\xfe\xfe\xf7\x43\x09\xfe\x5f\x1f\xf8\xc7\x3f\x2e\x91\x3a\xf6\xfa\x9b\xd0\xfe\xcf\x27\x39\x7e\x81\xde\x07\x99\x3a\xc8\x3b\x04\xbe\xa9\xe0\x59\x53\x3a\xbe\xc3\xed\x81\x71\x1d\x8f\x59\xf8\xa2\x27\xfd\xca\x10\x76\x8d\x2f\xbd\x14\x1f\xe0\x8d\x37\xbd\xc0\xe5\x5e\xfe\xf4\x9b\x8d\xbd\xd2\xa3\x5e\xe0\xf6\xd9\xa7\x9e\x7a\xe1\x8c\x57\xfd\x10\x13\xe2\x61\x5f\x7d\xeb\x9f\x87\x55\xfa\xf2\x24\x6a\x37\xf6\x5f\x98\x9a\x7d\xd5\xf1\x9e\xf7\xa1\x47\x9f\xdd\xb3\x3e\x6a\x2f\xaf\xb3\x80\xd3\xd3\x88\x53\x13\xb4\x3f\x65\x8a\x35\x5d\x3e\xab\xc1\x5c\xf5\x86\x23\x75\x6c\xd9\x72\xba\x7c\x9d\xf0\xcc\x7a\xd3\x13\x37\xfb\x6a\x2a\x4f\xdc\x7a\x9d\x6a\x9d\xba\x3d\x69\x37\x07\x72\x3a\x1b\xab\x63\x2b\x6c\x82\xfd\xe3\xbf\xff\x67\x8f\x5d\xfe\xf7\xff\x1d\x43\x2f\xff\xfd\x3f\x4e\x99\xab\xfe\xf0\xc4\x62\xd8\x9e\xd6\x60\x38\x50\x67\xb1\xd0\x9e\xd6\x67\x32\xbb\x96\xb5\xfb\xea\xd9\x18\xce\x06\xd6\x66\xc5\x9a\x8f\xe5\xa0\xa9\x9c\xb3\xb1\x8f\xae\xf5\x55\x12\xaf\xd4\x9a\xca\xba\x3c\xdd\xda\xad\xfd\xb5\xad\x37\x6b\x7b\x0b\xe1\xfa\xca\x10\xb1\x35\xb7\x4d\xbc\xdc\x85\xe8\xb0\x62\xb8\x74\x66\x9d\xf4\x70\x45\xea\x70\x95\xf4\x7b\xf3\x08\xef\x1a\xf1\xc5\xe0\xb9\xb3\x8d\x3a\x3b\xff\xf8\x4a\x23\x4f\x7a\x5a\xcf\x9a\xf9\xe5\xf8\xc3\xb3\x0d\xbd\xe0\x16\x8e\x37\x35\x24\xa7\xd2\x67\x0f\xc7\x17\x76\x8b\x7c\x21\xbd\xa4\x5f\x68\x5e\x3c\x53\x0c\x17\x4a\xbe\x78\xa6\x94\xfd\xb0\x63\xb4\xf1\xa2\x45\xdf\xdf\xe1\x4f\xdf\x0f\x08\xf6\xe5\xc7\x4f\x1f\xfa\xe9\x03\x3f\x7d\x3f\x7e\xfc\xe3\x5f\x17\xdf\x46\x67\xdf\x3e\xd1\x9c\x73\x3b\x3e\xdf\x6d\x92\x73\xd7\xe7\xad\x62\x3f\xe0\x73\x7b\xd0\x9e\xb6\x65\xef\x79\x1b\x81\xf3\xcf\xc9\x4b\xef\xc7\x4f\xdf\x0f\x04\xa0\xf8\x1d\xb0\xdf\x01\xf6\x41\xfe\x07\xe2\x7f\x10\xed\x9f\x00\x23\x22\xd8\x13\x40\xce\x26\x9f\xa4\x8e\x9e\xb7\x5f\x56\x7c\xd0\xa8\xb1\x7a\x9e\x0e\xdb\xd6\x79\x4e\x82\x51\xed\x3b\x9c\xf0\xf3\x6c\xa2\xde\x3d\xdc\x73\x7b\xf0\xe9\x6b\x8e\xb3\xfc\x08\x01\x84\x7f\x87\x1f\x79\x96\x96\xf5\xec\x5c\x13\x3b\xcb\x83\x12\x8a\xd1\x77\x78\xd0\xe7\xad\x3f\x7d\x43\xf6\x9b\xbd\xd4\xb3\x2c\x18\x06\xe8\x5b\xcd\x60\x6f\x2c\x76\xa3\xe7\x17\x58\x70\x02\xe9\x77\x58\x68\xcf\xfd\xa1\xd5\xb6\x57\x5f\x6f\x05\x87\x0c\x7d\x8b\x05\xff\xd0\x8a\x5d\x08\xf5\x17\xf8\x68\x84\xe1\xef\xf1\x79\x55\xba\x6c\x36\xc7\xaa\x29\xa7\xc3\xf1\xf9\x3e\x25\x00\x04\xe2\x3b\xe4\xc5\x86\xfc\x76\xbd\xf4\x79\x69\x8d\xcf\x53\x47\x1a\xfc\x96\xaa\x21\xd8\x90\xdf\x69\x61\x33\x4b\x3e\xcf\x80\x0a\xed\x5b\xd2\x81\xf0\x90\xc1\xfb\xb4\xeb\x75\x00\x38\xcf\x48\x30\xf1\xbd\x96\xa0\x0f\x8a\xde\x4d\x74\xb7\x1f\xed\x9e\xe3\x04\x81\x46\xc9\xb7\x34\x02\xf1\xb6\x39\xef\xcb\x03\x67\x35\x0e\x21\xd2\xd8\xf7\x5a\x42\x9e\xed\xf6\xf2\xed\x03\x86\x61\xbf\xf7\x6c\xb7\x55\xef\xec\xd0\x08\x21\x85\xf0\x5b\x83\x30\xa4\x6f\xfb\x36\x6f\xeb\xe9\xcb\x0b\xcd\x60\xda\xf7\x86\x79\xc8\x9e\xdb\x83\xa6\x9a\x4c\x9f\x3f\xaf\xd8\x5f\x60\xa5\x09\xfe\x3d\x8d\x68\x1f\xa0\xc2\x66\x6b\x44\x9e\x77\x26\x10\x01\x80\xc9\x8e\xc9\x09\x5f\x7b\x76\x9f\xff\xbb\xce\xf6\xd3\x5e\xff\x21\x88\x88\x06\x6b\xc9\x28\x2b\x64\x48\x36\x13\x0f\xe7\x82\xe9\x4c\x24\xa0\x61\xa4\x13\xcc\x1a\x34\x97\x09\x15\x0b\xa9\x68\x35\xa9\x45\x03\xa9\x60\x3a\x9f\x8a\x47\xb2\xa4\xa8\x85\xeb\xd5\x4a\xd9\x29\xa1\x93\x4c\xd0\x86\x09\xc2\xf9\x08\x8a\x95\xc3\x14\xe9\xe9\x5a\x39\x52\x8e\x61\xbd\x9e\xd0\x6b\xb5\x68\xad\x56\x41\x95\x58\xad\x5e\x2f\xb0\x70\xbd\x16\x2e\xe5\x92\xa1\x5a\xa3\xa8\x57\x99\x56\xcb\x92\x2f\x33\xc1\xaf\x4c\x02\xb5\x68\x3e\x51\xad\xa4\xaa\xd9\x7a\x2c\x92\xaa\x94\x92\xd5\x0a\x8d\x44\x63\x3a\x4e\x65\xea\x75\x94\xc8\x27\xd3\x5a\x56\x4f\xe8\xe5\x70\x3e\x52\x66\xa9\x5c\xb0\x18\x8e\x54\x6a\xd9\xcc\x97\x99\x90\x0d\x93\x42\xae\x1e\x8b\xa7\x50\x30\x8e\x23\x99\x3c\x09\xd4\x52\x91\x74\x26\x94\x8a\x24\xca\x99\x5c\x19\xc5\xea\xb8\x91\x8e\x14\x63\xd9\x4c\x39\x18\xce\xea\xc5\xaa\x96\x0f\x6a\xd9\x1a\x8a\xfd\x70\x1b\x97\xf2\x0a\x53\x2f\xe8\x7a\x17\xcb\xb7\x0f\xc3\xfd\xe7\x44\x9d\x8f\xd9\xf8\xe9\x23\x3f\x7d\xd3\xf1\x4c\x7d\xa1\x07\x7e\x8e\xc6\x70\xdd\xff\xb6\xb3\xa8\xc3\xde\x67\x8e\x95\xd5\x9e\x3e\xcb\xde\xa8\x25\x07\xb3\x3e\x79\xb5\x99\x40\x29\xf8\xe3\x16\x7d\xe6\x23\x77\x74\x82\x7b\xb9\x18\xba\x96\xbb\x9b\xe8\x07\x4f\xb4\xfc\x61\xc6\xb9\x81\xf4\x5f\xd3\xf1\xb1\xe0\x07\xb7\x4a\x7e\x0b\x80\x38\xd0\x32\xd4\x5e\x87\x55\x0d\x23\xfe\x7a\xb1\xa9\xd7\x8f\xff\xfd\x6d\xeb\x26\x7f\xfb\xc3\xf7\x1b\x05\x00\xfc\x73\x37\x13\xf9\xed\xa7\xef\xb7\x7d\x90\xcd\xeb\xdd\x72\x31\xb4\xff\x71\xba\x1a\x6d\x7e\x74\x6a\x6e\xff\xc4\x36\xd8\xe6\xf5\x19\xb7\x2a\xfc\xed\xff\x9d\xea\x42\xce\xb6\x21\x47\xdb\xd0\x4f\x1f\xfe\x4f\x69\x1b\x7e\x6f\x9b\x86\x35\xed\x3f\x55\x6f\xdb\xb6\xfd\x27\xe9\xed\xdd\xde\x38\x24\x1a\x76\xa1\xb7\x40\x29\xf8\xa8\x6d\x43\x8e\xb6\x7d\x5b\x6f\x0f\xdc\xb6\x77\x7b\xe3\x94\x32\xf1\x9f\xaa\xb7\x6d\xdb\xfe\x93\xf4\xf6\x6a\x6f\x88\x73\x22\x00\x15\x9c\x6e\xf5\x06\x36\x8d\xeb\xb5\xfb\xed\x4d\xdb\x04\x42\x18\x6b\x08\x60\xc6\xe9\x3f\x89\xa6\x51\x0e\xb4\xbf\xd4\x98\x82\xdf\xda\x08\x01\x78\xf3\xe1\xff\xb9\x6d\x24\xf0\xcd\xdf\xb9\x6a\xe3\x5f\xa1\xaf\x42\x8e\xde\x7c\xc3\x7f\x5a\x1b\xd1\x4f\x1f\xa7\x5c\x08\xcc\x19\xdf\x0e\xa3\xdb\x16\x4e\xa6\x72\x3c\x6d\x0f\x9a\xcf\x86\xec\xc9\x81\xb9\xa9\x31\x3c\x1c\x74\xbe\xcc\x81\x7c\xe4\x70\x64\x30\x83\x47\x07\xb3\x37\x39\x0d\xe4\xb4\x3d\x57\xae\x5b\xf4\xaa\xb7\x6d\x93\x16\xaa\xdd\x6c\xbd\x32\x84\x3f\x7d\xbf\x6d\x01\xfa\x73\x57\xad\xee\xd6\x97\x36\xb5\x22\x48\xdb\x0d\x7b\xe7\xe5\x7c\x95\xa8\x77\x4c\x4e\x88\xda\x53\x69\x3b\xda\xf5\x45\x69\xbb\x5b\x43\xf9\xd6\xe8\xb4\xad\x15\xe3\xbb\x01\xf8\xb4\xb4\xd9\x75\xa2\xde\x72\x38\x22\x6a\xe6\xa9\x9c\x1d\x2d\xfa\x9a\x9c\x5d\xae\xf0\x6c\x6b\x75\x61\x12\x7c\x2c\xf2\xdd\xed\x24\xf8\x2d\xfa\xfd\xad\xb1\xf4\xa7\xef\x07\x07\x8a\x1b\xb6\x90\x10\x9a\x58\x42\xa1\x41\x68\x10\x29\xb9\x86\x34\x64\x43\x69\x69\x4c\x99\x36\x53\x9a\xb4\x0c\x00\x09\xb5\x05\xb4\x2d\x0a\x85\x46\x99\x89\x09\xb4\xb8\xfa\xf1\xd3\xf7\x43\x51\xaa\x0c\x45\x35\x0b\x49\x85\x88\xcd\x0c\x53\x18\x0c\x33\x1b\x2b\xc6\x4c\x24\x84\xad\x71\x21\x85\xad\x59\x1c\x52\x61\x13\x66\x09\x2c\x31\x07\x1a\x54\x06\xd5\x38\xb1\x7f\xfc\xf4\x61\xbc\xfd\xff\x0f\x4b\x93\xec\x0f\xcc\xfe\xa0\xd8\xb9\x62\xb9\xfb\xf9\x9f\x94\x70\x24\xf8\xc5\xbb\x08\x12\x8d\x70\xcc\x08\x07\x3f\x7d\x90\xbd\x6a\xf4\x53\xf9\xe9\x23\xe4\xf5\x5f\xb8\xfb\xe7\xed\x57\xf8\xfe\x07\xfc\xe9\xfb\xa1\xeb\xba\x1e\x7c\xaa\xa8\x79\xcf\x2e\x8e\xdb\x25\x34\x4f\x4c\x3b\xc6\x9a\xf6\x17\xa3\x01\x6e\xcb\x01\x46\x81\xaa\x5d\x98\x76\x59\x56\x37\xd5\xb4\xd6\xca\x35\x7b\xf5\x9a\xbf\xbb\x9e\x1b\xc1\x85\x6a\x6a\xe1\x15\x60\xe5\xe2\x22\xcf\x4c\x66\xc6\x3b\xe3\xa1\x9d\x69\xae\x62\x64\x56\x1c\xd6\x12\x19\xf3\x95\xb4\x5e\xcb\x55\xd2\xa3\xbc\xfe\x5e\x12\xc4\x1f\x1d\x53\x4a\x1a\x95\x58\x7a\xd6\xc9\x3c\x3d\xe9\xba\xd5\x1a\xcf\x69\x30\x18\xca\x8f\x4b\x99\x88\x5a\x4d\x3b\xed\x6e\x5f\x75\x97\xa0\x94\x01\x39\x16\x0b\xad\xe1\xb8\x94\xf5\x37\xfc\xfa\x5a\x85\xe6\x81\x48\xdd\x0c\x0c\xad\x18\x2a\x27\x82\x2f\x2a\x9b\x58\x8b\xc1\xcb\x6c\xdd\x7c\xa5\x5c\xce\x90\x94\x5c\x8f\xd0\x01\xb3\x40\x78\xa1\x7f\x2c\xad\xd7\x7f\x1a\x7a\x0d\x92\xbc\xae\x87\x40\x42\xff\xab\x95\x5d\xbf\x02\x27\x6c\xdf\x69\x0e\xc4\x9b\xae\xfc\x43\x41\xaa\xa0\xc6\x24\x66\x0c\x43\x83\x98\x10\x30\x4d\x19\xc4\x82\xb6\x29\xb9\x85\x90\x06\x98\x89\xb9\xb2\x80\xe4\x04\x6b\x9a\x45\xa8\xa1\x41\x28\x34\x20\x34\xac\x01\x45\xb7\xeb\xa0\xe4\x68\xbf\x46\x27\xbb\x3b\xd7\x18\x38\x6d\x2a\x6f\x77\xb7\x13\x1e\x26\x20\x27\x67\x8c\x01\xc2\xaf\x1a\x43\x44\x45\xd0\x10\xd5\x97\xd3\x74\x38\x6a\x8f\x4b\x05\x7f\xb2\x53\x4c\x2c\x8c\x50\x67\x1a\x1c\xe6\xb1\x5d\xae\xe2\x70\xc3\x4c\x98\x38\xd4\xab\xc2\xe6\x7a\xb1\x96\xb1\xda\xa8\x2e\x0b\xb6\x3d\x56\xed\xde\xcc\x0f\xbb\x54\xcf\xc7\x5e\xa2\xe9\x0a\x2a\x97\x42\x44\x2d\xe2\x62\x38\x9f\x6c\x94\xb7\x31\x86\x03\x65\x8a\x9c\x46\x4c\x6e\xc3\xa5\x6d\x91\x45\x0d\x85\xe4\xa4\x83\x25\x6e\xd4\x06\xcd\x97\x96\x2d\x13\x68\xa5\x6b\x2a\x9c\xc5\xa9\xe9\xc4\x1f\x7b\x0a\xcf\x27\x81\x94\xbe\x1c\xe4\x48\x34\x6a\x0c\x6b\xd6\x02\xf2\x64\xb0\x5c\x48\xac\xd6\x2a\xae\x0a\x41\xab\x29\x87\x56\xcb\x1f\x98\x6d\x8c\x21\xff\xd9\x18\xf4\x42\xfa\x58\x87\xfa\x8b\x1b\x03\xf9\xba\x2d\x60\x6f\xfa\xf1\x0f\x0b\x9a\x26\x87\x12\x02\xc3\x44\xb6\xc5\x2c\x0b\x62\x49\x08\x21\x4a\x50\x84\x6c\xcc\xa0\x01\x94\x81\x38\x85\xc2\x86\x16\x17\xd8\xe4\x86\x61\x68\x14\x13\xc6\x94\x32\x81\x3a\x67\x0b\xf0\x54\x6f\x67\x80\x22\x76\xd2\x52\xde\xef\xee\x26\xc8\x90\x73\x7e\xc6\x16\xb4\x2f\x9a\x82\x88\xa5\x9b\x32\x9c\x5a\xcc\xe1\x14\x94\x46\xe1\x42\xb6\x57\x4c\xad\xeb\x46\x68\x9c\x8c\x44\xed\x58\xbd\xcb\xdb\xda\x14\x66\xa2\xc6\x6c\x91\x1d\x67\xb4\x76\x5c\x5f\xb4\x3b\xa4\xd8\x2d\xe8\xbd\x9e\x7c\x6a\x24\xea\x59\x10\xcf\x57\x07\xa6\xd6\x35\x87\x8d\x01\xac\x1a\x85\x6c\x28\x51\x8b\x6f\x54\xf7\x6a\x0a\xc3\x83\xd1\xb9\x35\xae\x44\x52\xac\xd0\xd1\xd3\xd9\xa2\xf5\xb4\x6c\x18\xa5\xa7\x6c\xa6\x59\x9b\xca\x0a\xc4\x61\x54\x0d\x55\x46\xd9\x64\x10\xc5\x1b\x28\x55\x1f\x44\x06\xa9\x6a\x7d\x59\x4c\x66\x63\xfe\xe5\xb2\xb4\x06\x3c\x95\x6c\xd2\xb5\x2d\xcc\x84\xbd\x9c\x36\xd4\x4b\x64\x96\x9d\x74\x15\x42\x70\x43\x39\x7d\xc4\x14\x92\xfc\x58\x77\xfa\xff\x8f\x29\x20\x6f\xba\xf1\x0f\x86\x2d\xc1\x6d\x8a\x99\x52\x8c\x5b\xd0\x40\x9a\x41\x0d\x2e\x6c\x84\xa5\x4d\x31\x84\x86\x46\x99\x90\x88\xd8\xd2\x86\x04\x60\x69\x01\x83\x22\x83\x61\x6c\x00\xcd\x50\x42\xfc\xd8\xc0\xd1\xe3\x18\x09\x9c\xec\xec\x50\x50\x28\xce\xdd\x7d\xb5\x84\xed\x44\x8e\x50\x81\xce\x18\x02\xfe\xa2\x21\xa0\x5c\xa3\x03\x33\x33\x3a\x04\x46\x42\xab\x92\xc1\x2a\x3b\x2f\x2f\xa3\xb8\x32\x1a\x76\x9f\xe6\x11\x3d\x3b\x0d\xc2\x24\x4a\x6b\x01\x8d\x35\x3a\x56\x6a\xa1\xd7\x26\x29\xa4\xe2\x2d\x92\x7c\x7a\x99\x6b\xe9\x56\xbe\x1d\xd3\xaa\x5a\xaa\x21\xcb\x2f\x22\x9e\x7c\xf2\x8f\x68\xc8\xe0\xc6\x76\x38\xde\x18\xc2\x66\xcc\x8e\xbf\xff\xa3\x6f\xfa\xea\x64\x7f\xbd\xd0\x73\xf9\xee\x56\xd1\xb4\xbe\x88\x6a\xad\xb5\x19\xd3\x9e\x4a\xf5\x04\x68\x47\x49\xb1\xdb\x33\xac\x09\xc5\x48\x6b\xbe\xd0\x59\x2e\x15\x5e\x56\xfc\x78\x15\xf5\x03\xb0\x94\xc5\xa9\x56\xee\xc8\x4a\xae\x48\x12\xa5\x4e\x53\x06\xd2\x4f\xa3\x74\x23\xa1\xfa\x74\x16\x1e\x19\x73\x7f\x21\x3b\x7a\x6a\x5b\xb3\xad\x69\xc4\x8f\x18\x4a\x78\x72\xac\xb3\xfd\xc5\x0d\xe5\x1b\xf8\x09\x7a\xd3\xc9\x37\xb1\xba\xaf\x13\xc9\xd7\x89\xd7\xab\x3b\xf9\x1d\xc0\xdf\x01\xf4\x01\xf0\xc7\xe6\xff\x4e\x76\x66\x4c\x35\x41\x2f\xde\x25\x48\x10\xc1\x34\x24\xd8\x99\xbe\x7e\xbc\xa7\x6f\xab\xf4\x67\x2b\xe5\x74\x09\xd4\x92\x6d\xb2\xf2\xaf\x8a\xc9\x80\x16\x1a\x84\x44\x0c\x81\x65\x27\xf0\x34\x01\xcd\xe9\x64\x11\x5f\xac\x61\xcd\x2a\x56\xeb\x32\x90\x90\x91\x8d\x11\x85\x8f\x74\xe2\xe3\xe5\xad\x13\xeb\x7a\xa0\x7b\x87\x86\x78\x5a\x7e\x6c\x3b\xd3\xe5\xa9\xf6\x17\xbe\x86\x75\x3b\xf3\x3e\x11\xe4\x7c\x60\x39\xdb\x59\x2a\x01\x74\xb3\xca\x7b\xc2\xe2\x2e\x90\x41\xef\x64\x08\xdb\x2c\xa4\xba\x23\x83\xdf\xc9\x70\x6d\xb3\xe7\xe3\x8e\x0c\x79\x23\x43\x11\x67\xd4\x35\x19\xfa\x4e\x86\x09\x06\x5d\x93\x61\x6f\x64\x18\x04\xd4\xbd\x88\xb5\x77\x32\x14\x52\xf7\x22\xe6\xef\x64\x04\x22\xee\x45\x2c\xde\xc8\x68\x18\x13\xf7\x22\x86\xe0\x9d\x8e\x46\x88\x7b\x19\xc3\xf7\x7e\xcc\x21\xc5\xee\x85\x0c\xdf\x3b\x32\xa7\x0c\xbb\x97\x32\x7c\xef\xc9\x5c\x68\xc8\xbd\x98\xe1\x7b\x57\x16\x98\xa3\x2b\xe4\xfc\xde\x97\x85\x26\xd0\x15\x72\x7e\xeb\xcc\x02\x20\x00\xaf\x90\xb3\xf6\x4e\x87\x41\x78\x85\x9c\xdf\xba\xb3\x80\x00\x81\x2b\xe4\x2c\xde\xe9\x10\x0c\xdc\xcb\x19\x81\x77\x3a\x9c\x00\xf7\x72\x46\x6f\xfd\x59\x20\x44\xc4\x15\xe3\x32\x7a\xa7\xc3\xa8\x70\x2f\x67\xf4\xd6\x9f\x05\x06\xdb\x6d\x24\x97\x74\xc8\x3b\x1d\xb2\xdd\x26\x71\x49\x87\xbe\xd3\xe1\xdb\x0d\x00\x97\x74\xde\xfb\x33\x41\xe2\x1a\xff\xf7\xde\x9f\x89\x06\xae\x70\x80\xe8\xbd\x3f\x53\x08\xaf\xf0\x80\xe8\xbd\x3f\x53\x8a\xae\x70\x81\xf8\xbd\x3f\x53\x81\xaf\xf0\x81\xf8\xbd\x3f\x33\x4c\xae\x70\x82\xf8\xbd\x3f\x33\x8d\x5e\xe1\x05\xf1\x7b\x7f\xd6\x20\xbb\xc2\x0d\x62\xe2\x8c\x78\x73\x49\x87\x3a\xa3\x02\x5d\xd2\x61\xce\x48\x2e\x97\x74\x34\x07\x1d\xec\x92\x0e\x77\x46\x28\xb9\xa4\x23\x9c\x51\x5c\x2e\x91\x21\x70\x46\xde\xb8\xa4\x03\x1d\x74\x5c\xca\x87\x20\x67\xb4\x8c\x4b\x3a\xce\x88\x14\xb7\xf5\x21\x8e\xa8\x0f\xb7\x74\xa8\x33\xb2\xc2\x25\x1d\xf6\x71\xaf\x9f\xb8\x24\xa3\x39\x42\x14\x5c\x92\xe1\x1f\xf7\xc2\xdd\xd6\x46\x38\x42\x05\x5c\x4e\x4f\xc0\xc7\x1d\x63\x97\xb5\xa1\xd0\xb1\xf1\xec\x4d\x02\x23\x4f\x02\xb8\xcf\x7f\x5d\xfb\xd3\xf7\x5a\xf7\xaf\x45\x74\x9f\xc8\xe3\x73\xf5\xac\xfa\x10\xb2\x1d\x4c\xa3\xf7\x17\x6c\x13\x9c\xb0\x0d\x1d\xd8\x7c\xd3\xf5\xdb\x1f\xbe\xdf\xc0\x3f\xe1\x41\xd8\xc0\xc7\xd8\x8d\xc3\x88\x82\x6d\xaa\x94\xf1\x6f\x7f\xf8\xfe\xf7\x37\xeb\xb7\x3f\x36\x11\x01\xbf\x0d\x5e\xff\xf8\x7f\x3f\x7d\xbf\xbd\x7d\xf3\xf4\xdb\x1f\xbe\xd7\xdf\x8d\xd9\xaa\x3d\x68\x3e\x1f\x0d\x30\xfb\x70\xef\x5c\x7c\xd2\x44\xf5\x7a\x9f\x9f\xdc\xc5\x32\x38\x09\x79\x12\xc6\x74\x83\x4f\x6e\x4e\x6b\x67\xbb\x3a\xb1\xbf\x40\x27\xb4\xb3\x2d\x1f\xb5\x23\x2e\x28\x47\xfc\xd2\xcd\x55\xba\xd9\x2e\xf9\xec\x2f\xf8\x09\xdd\x20\xfa\xd9\x72\xf8\x05\xdd\xf0\x5f\xba\xb9\x46\x37\xbb\x75\xb4\xfd\x05\x39\xa1\x1b\x82\x38\xd5\x1c\x76\xa3\x5d\xd0\x8d\xf6\x4b\x37\x57\xe9\x66\xbb\x38\xb9\xbf\x00\x27\x74\xc3\x5e\x8b\xf6\x51\x37\xce\x10\x36\xa7\x6e\xd8\x2f\xdd\x5c\xa3\x9b\xdd\x8a\xef\xfe\xe2\x04\x1a\x40\xc7\xd0\x80\xf3\x0b\x00\xa7\x6e\xe8\x2f\xdd\x5c\xa5\x9b\xed\x32\xfa\xfe\xe2\x04\x16\xd8\xba\x1b\x87\x6e\xc8\x05\xdd\x90\x5f\xba\xb9\x4a\x37\xdb\xbd\x89\xfd\xc5\x09\x2c\x80\xb7\xe5\xa3\x6e\xf0\x05\xdd\xe0\x5f\xba\xb9\x46\x37\xbb\x0d\x9f\xfd\xc5\x09\x2c\x40\x8f\x8d\x69\xe8\x82\x6e\xd0\x2f\xdd\x5c\xa5\x9b\xed\x26\xda\xfe\xe2\x28\x16\x80\x1f\x82\xd6\x4f\x7e\xa4\xf1\x69\xf2\xf9\x4b\x37\xd7\xe8\x66\xb7\x31\xb9\xbf\x38\x8a\x05\x20\x38\xa9\x9c\x2f\xe9\x06\xfc\x52\x8e\x2b\xe5\x6c\x77\x7b\xf7\x17\x27\xc0\x00\x10\x02\x00\x21\x9c\xba\xb9\xa4\x1d\xf0\x4b\x3f\x57\xea\x67\xbb\x8b\xbe\xbf\x38\xb5\x38\x00\x04\x17\xc0\xb9\x70\x73\x41\x3d\xe2\x97\x76\xae\xd3\xce\x2e\x36\x61\x7f\x71\x6a\x79\x00\x61\x42\x19\x77\x2c\xdd\x5c\xd0\x0e\xff\xa5\x9d\x2b\xb5\xb3\x8d\xf8\xd8\x5f\x9c\x5a\x20\x20\x80\x13\xea\x5c\xbc\xb9\xa0\x1d\xed\x97\x76\xae\xd2\xce\x5b\x1c\xcd\xfe\xe2\xd4\x86\x01\xc3\x02\x13\xe2\x58\xbe\xb9\xa0\x1d\xf6\x4b\x3b\x57\x6a\x67\x1b\x9d\xb4\xbf\x38\xb5\x61\x20\x18\xd0\xb8\x43\x3b\xf4\x82\x76\xe8\x2f\xed\x5c\xa7\x9d\x5d\xcc\xd7\xfe\xe2\x04\x2a\x40\x04\x0b\x80\x1c\xda\x21\x17\xb4\x43\x7e\x69\xe7\x4a\xed\x6c\x23\xe9\xf6\x17\x27\x50\x01\x46\x88\x72\xc0\x1c\x8b\x38\x17\xb4\x83\xb7\x1b\xa8\xe8\x7d\x63\x67\xf7\xac\xf8\xa5\x2b\x57\xba\xda\x46\x2b\xee\x2f\x4e\x60\x04\xa2\x31\x28\x00\x75\x2c\xea\x5c\xd0\x15\xfa\x65\x49\xd7\x69\x67\x17\x03\xba\xbf\x38\x81\x11\x04\xd8\xfc\xe7\x98\x9d\x5e\x9a\x9c\xfe\xd2\xce\x95\xda\xd9\x46\xd6\xee\x2f\x8e\x62\x04\x7a\x7c\x5d\x07\x7d\x6d\x5d\x87\xfe\x52\x8d\x1b\xd5\xec\x82\x95\xf7\x17\x27\x00\x02\x10\x1c\x60\x81\x9c\xcb\x3a\x17\x94\x43\x7f\x69\xe7\x3a\xed\x6c\x43\xc0\xf7\x17\xa7\x96\x0d\x00\x67\x82\x3a\x76\xae\xc5\x05\xe5\x10\xf6\x4b\x39\x57\x29\x67\x1b\x57\xbf\xbf\x38\xb5\x6a\x80\xa0\xa0\xd0\x61\x3a\xfc\x92\x72\x7e\x59\xce\x55\xca\xd9\x7d\xac\xb0\xbf\x38\xb5\x68\xf0\xaa\x38\xee\x00\x04\xda\x05\xe5\xe0\x5f\x96\x73\x9d\x72\xb6\x5f\x80\xec\x2f\x4e\xad\x19\x30\x88\x04\x70\x6c\x5e\xb3\x4b\xca\xf9\x65\x39\x57\x29\x67\xf7\x59\xcd\xfe\xe2\xd4\x46\x82\x40\x18\x68\x0e\x9f\x43\x2f\x28\x07\xfd\xb2\x9c\xeb\x94\xb3\xfd\x56\x69\x7f\x71\x02\x10\x20\xcc\x81\xa0\x0e\x9f\x43\x2e\x29\xe7\x97\xe5\x5c\xa7\x9c\xed\x07\x60\xfb\x8b\x13\x80\x00\x6f\x03\x74\x1d\xcb\x39\x97\xe6\x39\xbf\x2c\xe7\x2a\xe5\xec\xbe\xaa\xdb\x5f\x9c\x00\x04\x84\xbe\xfe\xe7\x5c\xbf\xb9\xa4\x9c\x5f\x96\x73\x9d\x72\xb6\x9f\x2a\xee\x2f\x4e\x00\x02\x7e\x2c\x9a\x0d\x5e\x50\xce\x2f\xc3\xb9\x4a\x37\xbb\xcf\x3f\xf7\x17\x47\xf1\x00\x3e\x19\x69\xf8\xa5\x40\xc3\x5f\x0b\x6b\xdf\xd4\xcd\xc7\x4f\x61\xdf\x2f\xb6\x1e\x07\x6e\x74\x33\x1d\xfe\x76\x4d\xa2\xd9\x9f\xbe\xdf\xec\xf1\xb0\x7f\x95\x34\xce\x46\x6b\x1f\x55\xec\x65\x8d\x7a\xad\x2a\x6f\x8f\x8c\x39\xad\xaa\xdd\x99\x18\xef\x17\xec\xb3\xaa\xdc\xe6\xaa\xfd\xa5\x2a\x4f\x55\xf5\xf6\x01\xf5\xfb\x05\xfa\xcb\x5a\xd5\x9f\x91\x75\xfd\xae\xaa\xda\x9d\x7c\xf1\x7e\xc1\xff\xb2\x56\xf5\x1f\xac\xaa\x0f\x9f\xef\xbf\x5f\x6c\xa7\xae\xec\x6b\x87\x09\x4c\xc7\xb3\xc9\x54\xa9\x6b\x95\xb1\x21\x33\x1c\x5f\x6b\xc2\x0f\x32\x1e\xde\x1e\x65\x7c\x38\xc2\xe3\xfd\x02\xfc\xc9\x9a\xbb\xc2\xa2\x1f\x43\x73\x1e\x1f\x3b\x78\x5a\x73\xbb\x83\x49\xde\x2f\xd8\x7f\x8a\xe6\xfe\xac\xd1\xf2\x6e\x9a\xdb\x25\x05\x79\xbf\x40\xff\x29\xa3\xe5\x9f\xe6\xe7\x6e\x3e\x5a\x1e\xe6\x4f\x79\xff\x9b\x1f\x1c\xbd\x61\xcf\x06\xd6\xae\x2d\x2e\xcf\x04\xdd\xc8\x65\x7b\x32\xe7\xb5\xca\xfd\xc2\xe9\x36\x57\x1e\x5e\xfa\x1d\xb1\xed\x12\xbd\xbc\xff\x4d\x6e\x2b\x36\xf7\x9d\xf9\x6b\x87\xd5\xdc\x53\x72\xdb\xa4\x34\xef\x7f\x83\x9b\x4a\xee\x8a\x01\xfc\x0b\x07\xcf\x78\x74\x5a\xee\x89\x0c\x37\xdb\x63\xbd\xbf\x9d\xdd\xe6\x32\xd5\xf7\xb3\x9c\x3d\xcf\x4d\x7b\x8a\xf8\xf1\xec\xb4\xec\x74\xa6\xa4\x8b\x84\x90\x33\xe9\x8b\x5b\x42\xd8\x99\xa1\xc4\x2d\x21\xe2\x4c\xa7\xe1\x96\x10\x75\xe6\x7e\x70\x4b\x88\x39\x13\x15\xb8\x25\xa4\x39\xbf\xaa\x77\x4b\x88\x3b\x3f\x01\x77\x4b\x48\x38\xbf\x57\x76\x4b\xe8\x63\xbe\xda\x6b\xa4\xfd\x31\x63\xed\x35\xe2\xfe\x98\xb3\xf6\x1a\x79\x7f\xcc\x5a\x7b\x8d\xc0\x3f\xe6\xad\xbd\x4a\xe2\xd4\xf9\xe9\x92\x6b\x4a\xcc\xf9\x99\x8d\x6b\x4a\x9a\xf3\x93\x10\xd7\x94\xb8\xf3\xf3\x05\xd7\x94\x84\x33\xd4\xde\xf5\x58\x09\x9c\x81\xe0\xae\x29\x41\x67\xd0\xb2\x6b\x4a\xc8\x19\x60\xeb\x9a\x12\x76\xc6\x83\xba\xa6\x44\x9c\xb1\x8b\xae\x29\x51\x67\xa0\x9d\x6b\x4a\xcc\x19\x15\xe6\x9a\x92\xe6\x0c\x61\x72\x4d\x89\x3b\xe3\x6d\x5c\x53\x12\xce\xe0\x10\xd7\x6e\x1c\x38\x23\x19\x5c\x53\x82\xce\x6d\x77\xd7\x94\x90\x73\x8f\xd8\x35\x25\xec\xdc\xd1\x74\x4d\x89\x38\xf6\xdf\x4e\x65\xce\xbc\x4c\x89\x3a\x77\xf2\x5c\x53\x62\x8e\x8d\x26\xf7\x75\x72\x6e\x59\x9d\xca\x76\x7a\x99\x12\x77\xec\xa8\xb8\xaf\x93\x70\xee\xcd\xb8\x46\x98\xc0\xb1\x75\xe0\xba\x4e\x1f\xb3\xdd\xf2\x2b\xe4\xf4\x31\xdf\xed\x35\x16\xfc\x31\xe3\x2d\xb8\xa6\x4e\xc4\xb1\x86\xe8\x9e\x12\x75\xae\x69\xb9\xa6\xc4\x3e\x2e\xb2\x9c\xca\xed\x7a\x99\x90\xf6\x91\x90\xfb\x3e\xc0\x3f\xae\x5f\xb8\xaf\x91\x70\x2c\x84\xb8\x9e\xf8\x80\x8f\xeb\x02\xae\x6b\x44\x1d\x0b\x0c\xa7\x33\xe0\x9e\x22\x75\xcb\x1c\xb8\x17\x78\x7e\x2b\x0b\xee\x01\x2d\xcf\x67\xf0\x7b\x79\xfe\x30\x09\x37\x08\x17\x1c\x59\xa6\x05\x6d\xa0\x09\x4b\x00\xa5\x30\xe2\xc2\x32\x91\xc1\x10\x13\x86\xa9\x00\xe7\x86\xa5\x41\x8e\x2d\xcb\x90\x5c\x61\xcb\x94\x88\x1a\x50\x71\x62\xbc\xb6\x69\xbb\xcd\xe9\x7a\x5d\xf3\xe0\x64\x31\xfa\x76\xa2\xd2\xe9\xe3\x5a\xa9\x76\xe6\x2c\xd7\xcd\xcd\x0f\xcb\x10\xdb\x83\x98\x92\xac\xa3\xda\xb8\xd3\x1f\xc6\x79\x29\xda\x0b\xf9\x55\xd3\xc4\x5a\xae\x36\x8d\x25\x93\xeb\x6a\x85\x2f\x2a\xed\x46\x40\x06\x67\x34\x45\x37\x47\x88\x35\x36\x2f\x6d\x0e\x0a\x0b\x39\xce\x09\x0a\xec\xff\x3c\x38\xfc\xb1\x52\x29\x15\x76\x7f\x4e\x8d\x66\xad\xc0\xc2\xda\x30\x94\x02\xa9\xfc\xd3\xa2\x5e\x0c\x8a\x75\x6d\x5e\xab\x94\xf0\xb2\x9d\x6b\xd7\x67\x45\x03\x86\xe6\xfd\x7c\x4a\x6d\x4e\xcc\xab\x15\x63\xc6\x70\xfb\x66\x78\x53\xd3\xa3\xa7\x13\x49\xad\x3b\xef\x2e\x36\xec\xb3\x29\xae\x09\xd1\xb4\x7a\x24\x2a\xba\x41\xbf\x99\x2d\xb1\x51\x7e\x86\xd6\x76\x88\x46\x5b\xad\xf0\x52\x4f\x4e\x93\x7d\x43\x9b\xf0\xe1\xba\x3b\x59\xbd\xc4\xeb\x71\x04\xd5\x4b\x30\x65\xf6\x66\x8b\x54\xcf\x40\x8b\x40\xbb\x4f\xb3\x8b\x31\x58\xa1\xf5\x7a\x59\x8f\x69\xf3\x97\x6c\x60\xf1\xef\x7f\xff\x38\x3c\xb4\x2a\x7a\x70\xd8\xd3\xfe\x4f\xa7\x2c\x74\x37\xb2\x3d\x68\xeb\xcd\x65\xf7\xde\xa6\x4d\x1b\xf6\xfa\x0c\x1c\x34\x6f\xfc\x92\x61\x29\x95\x95\xcd\xce\x32\x2d\xcb\x39\xc1\x02\x6b\x7b\x22\x14\x30\x87\xe3\x4c\xa3\xb6\x0e\x54\x13\xdd\xc8\x30\xf9\x26\xff\x6e\xbd\x34\x48\x16\x2b\xfa\x3b\xbd\xe0\xe6\xcf\xa6\x93\x73\xf8\xa8\xa8\xde\xfa\x8f\x87\xfc\x43\xee\xf9\x6f\xd4\x11\xd9\xdf\x0a\xce\x86\x78\x38\x25\xf4\x25\x98\x0b\x2f\x47\x79\x3f\x1e\xc6\x32\x4f\x6b\xa8\x15\x56\xed\x09\xec\xd9\xe9\x48\xbd\x9f\xaf\x36\xc7\xb3\xe2\x53\xe9\xf5\xe9\x42\x2b\x6b\x8e\x12\xe5\x3d\xff\xf4\x5e\x1e\x87\xe5\xe4\xb9\x61\xe1\x5b\xf0\xff\xdc\x47\xf3\x9f\xdb\x7f\x50\x0e\xfa\x90\xb3\x94\xf7\xed\x79\xe0\x3e\xbe\x29\x8b\xf7\x86\x06\x5c\xd5\xd7\x7d\xfd\x52\xa3\xd0\x14\xe8\x31\xff\x7b\x39\x22\xf3\xdd\x75\xf9\xc1\xea\xb7\x91\x67\xb0\xa2\xcf\x4f\x1d\x56\xb7\x1f\x13\x8f\xf6\x2f\x37\xfd\x95\x93\x3d\xbd\x83\xf1\xe3\x93\xac\x8e\x15\x2f\xec\x45\x2b\xbb\xe3\xbf\xf5\x0f\xff\x7b\x2b\xe7\xb3\xd9\x70\x19\x0c\x07\xea\xfd\x64\xc7\xed\xbf\xaf\x50\x69\x03\x09\x2e\xe3\xc5\x03\x4c\x43\xb0\x26\x09\x87\x80\x5b\x16\x24\x18\x69\xd8\x32\x6d\x68\x22\x8e\x04\xb3\x18\x20\xdc\x02\x02\x52\x93\x01\x0d\x31\x0a\x94\x41\x6d\x4d\x10\x83\x0b\xca\x80\x24\xc0\x04\xe6\x16\xd3\x20\x8f\x30\x0d\xbb\x8c\x69\xf8\xb9\xd3\xeb\x37\x37\x3f\xec\x88\x5c\x8b\x69\x9c\xce\xc1\x6b\x4c\x53\x16\xd1\x49\xf8\xa0\xcf\x1e\x3f\xd2\xf4\x00\xd3\xcc\xca\x83\x46\x2f\xbd\xec\xf0\xa9\x7c\x49\x0f\xfd\xb9\xba\x1d\x27\xe3\x40\x8f\xc0\xe0\x68\x34\xf1\xd7\x62\xd1\x5e\x66\x38\xa5\x4f\xa5\x6a\xa9\x11\x16\x3a\x60\xed\x51\xb8\xc0\xf2\x5a\xed\xc5\x58\xb6\x32\xeb\xbe\x5e\xe0\x19\x99\x37\x8a\x38\x34\x01\x85\xfc\x9c\x90\x31\x8e\xa6\x82\xcd\x7b\x63\x9a\xf8\x5d\x64\x77\x07\x4c\xb3\x95\x89\xf3\xa0\x7f\x67\xb7\x71\x8c\x13\x11\xd0\x42\xec\x93\x20\xbd\xf6\xf1\x79\xdd\x33\x1f\xbf\xf7\x49\x5e\xcb\x2f\xfc\xe0\xf2\xfb\x0c\x0e\xcf\xcb\x6f\x92\xcb\xc6\x8e\x9e\x5a\x7c\x3d\x46\xba\x8f\xcd\x6c\xca\x42\xff\x2b\x62\x10\xfd\x23\x66\xdf\x36\xf3\x7b\xfd\x53\x0f\x54\x2a\x99\x9d\x7c\x82\x70\x16\xb0\x62\xc3\xd2\xac\x99\x9e\xe7\xa7\x21\x2d\xd0\x8a\xa7\x70\x46\x09\xab\x92\xb3\xa3\xf1\xa7\x44\x9b\x26\xe6\xe5\xec\x53\x43\x9f\x6a\x9b\x57\x67\xdd\x2c\xce\xeb\xf6\x7b\xcd\xf9\x5e\x7e\x9b\xfa\x14\x87\x11\xfe\x69\xf2\xb1\x2b\xff\x3e\x86\x9f\xfe\x24\xfc\xa2\x7b\x64\x4b\x74\xe1\x8e\xff\x0e\x3f\xdd\xca\xd1\x79\x8b\x9f\x84\x2d\x94\xd4\x20\x31\xa0\xc4\x82\x31\x62\x40\xc5\x2c\x1b\xd8\xd2\xb6\xa0\x94\x50\x53\x96\xd4\xa0\x61\x00\xaa\x41\x6a\x2b\x88\x35\x88\x08\xb3\x31\x02\xdc\xc0\x12\x1a\x70\x8b\x9f\xb0\x47\xf8\x49\xbb\x8c\x9f\x84\xc6\xce\x00\xa8\xed\xdd\x0f\xa1\x20\xd7\x22\xa8\x88\x43\xbd\x5e\x23\xa8\x03\xb3\x0a\xeb\x1f\x87\xc9\x83\x72\x80\xa0\x44\x2a\x5f\x6e\x05\x72\xf9\x48\x23\x3b\x1c\x15\x5b\xfe\xf9\xac\x9c\xc9\x99\xe5\x3e\x08\xa5\xe2\x62\x11\x22\x72\x41\x88\x08\x9a\x33\xa6\x87\xd2\xaa\x23\xa7\x7c\x8a\xd2\xab\xd9\xba\x3a\x5f\xf2\xc2\x22\x9f\xce\x59\x62\x6d\xd5\x7a\x8b\x60\x98\x5a\xdc\x2c\xe1\xd9\x68\x31\xcb\xe9\x77\x47\x50\xf7\x91\xdd\x1d\x10\xd4\x86\xb1\xd3\x8d\x5e\x42\x00\xa9\xd0\xba\xa5\x1d\x7f\xc7\x43\x04\x50\x3e\x52\x11\x97\x08\xe0\x76\x08\x2a\xf2\xe0\xf2\x73\xda\xff\x25\xf9\x3d\xe1\x72\x38\xfd\xe9\x1d\x5d\xf7\x00\x41\xdd\x71\xbc\x79\x5c\x04\x15\x7e\x09\xd8\xc7\xeb\x7c\xa0\x8f\xc7\x44\x50\x06\x8f\xb3\x4f\x53\x85\x5d\xb9\x05\x82\x72\x8b\x60\x74\x8f\x6c\x89\xa4\xdd\xf1\xdf\x21\xa8\x5b\x39\x3a\x6f\x11\x94\x2d\x18\x93\x06\x86\x00\x62\xcd\x92\x8a\x33\x53\x53\x4a\x53\x0a\x70\x4e\x01\xc6\x82\x62\xcd\xd4\xb8\xcd\x29\x51\x52\x4a\x25\x35\x6e\x69\xb6\xc5\x31\x81\x98\x58\x52\x13\x5b\x04\x45\x3c\x42\x50\xfc\x22\x82\x12\x10\x9e\xd9\x56\xdb\xdd\xfd\x10\x03\x7b\x2d\x82\x8a\x3a\xd4\xeb\x35\x82\xca\x97\x22\x69\x7e\xd0\x6b\x63\x47\x3b\xf4\x01\x82\x92\x8d\x5a\xc9\x6f\x74\x43\x6b\x1c\x79\x29\x25\x5a\xb5\xe4\xd4\x2c\xaa\x39\x6d\xae\xc7\x61\xb0\x48\xa1\x68\x71\x30\x59\xdb\xda\x94\xbc\x04\x4a\xe6\xa0\x8a\x73\xa4\xa5\x62\x4a\x8f\xc4\xbb\xc5\xce\xb4\xb9\x06\x7d\x2d\xde\x8c\x96\x60\x73\x58\xe9\x19\x53\x4b\xa7\xb9\x69\x23\x93\x09\xde\x7d\x5f\x2d\x7f\x17\xd9\xdd\x01\x41\x45\x9c\xf4\x0e\xea\x73\xb4\xb9\xaf\x25\x37\x85\x81\xcf\xc2\xf4\x1a\x01\xd4\x75\xcf\x10\xc0\xed\x10\x54\xf4\xc1\xe5\xe7\xb4\xff\x0b\xf2\x0b\xe4\x92\x8d\xc2\x09\x0f\x7f\x2d\x82\xba\x8f\xcd\x6c\xca\xe3\x22\xa8\xa8\x3f\x98\x3d\xb1\xc6\xb7\xd7\xc7\x63\x22\xa8\x5e\x3e\x45\x4f\x55\xfb\x16\x08\xca\x2d\x82\xd1\x3d\xb2\x25\x34\x74\xc7\x7f\x87\xa0\x6e\xe5\xe8\xbc\x45\x50\x98\x01\x8b\x0b\xc0\x39\x50\xca\xb0\x10\x22\x96\x46\x01\x33\x04\xe7\x10\x53\x64\x1b\x26\x33\x98\x01\x05\x82\x36\x27\x92\x53\x25\x38\xd0\x6c\xa0\x69\xd4\xa0\x94\x01\x63\xb7\x87\x47\x3d\x42\x50\xe2\x32\x82\x42\x8c\x9c\x41\x50\xdb\xbb\x1f\x3e\xfe\xb9\x16\x41\x39\x47\x18\xaf\x11\x54\xe6\x29\x6c\xd5\x0f\x7a\xed\xe7\x11\x5b\xff\x88\xa0\x46\xb0\x95\x1e\xa6\xf9\x38\xd3\xb6\xf0\x68\x10\x28\xce\xfd\x93\x97\x66\x61\x11\x8f\xaf\x52\xcd\xae\x0a\x18\xe5\x74\x4c\x14\xeb\xa5\x68\xb3\x56\xab\x36\x8a\x01\x98\xd7\x0a\x73\x4a\xf2\xcd\x9a\x91\xa0\xb5\xcc\x32\xf7\xa2\x8b\x6e\x73\xed\x4f\xd5\x47\x09\x13\x57\x44\x6a\xd2\x7d\xea\x07\xf4\x7b\x23\xa8\xf2\x5d\x64\x77\x07\x04\xb5\x45\x00\x97\x22\x83\x1c\x23\x45\x69\xd5\x2f\x17\x3f\x09\xd2\x6b\x04\x60\x1e\x95\x89\x2b\x04\x70\x3b\x04\x15\x7b\x70\xf9\x7d\x46\x18\xe7\xe5\x67\xc5\xad\xd9\x89\xad\x9a\x6b\x11\xd4\x7d\x6c\x66\x53\x1e\x17\x41\x25\xca\xc1\xa7\x93\x7e\xff\xb1\x11\xd4\xf6\xfe\xf1\x72\x0b\x04\xe5\x16\xc1\xe8\x1e\xd9\x12\x0c\xbb\xe3\xbf\x43\x50\xb7\x72\x74\xde\x22\x28\xc3\x84\xa6\xe0\xdc\x34\x91\xb0\x04\x33\x24\x56\x16\xc0\x48\x11\x6e\x73\x86\x4c\x4b\x42\x53\x28\x8b\x41\x6a\x00\x4d\x9a\xdc\x32\x28\x54\x36\x16\xc2\xb4\xb0\x2d\x91\x20\xbb\x5d\x3c\xe6\x09\x82\x62\x1b\xf0\x74\x01\x41\x11\x48\xcf\x20\xa8\xed\xdd\x0f\x5f\x3d\x5f\x8b\xa0\x9c\xde\xc4\x6b\x04\xb5\x1d\x31\x8e\xf6\xda\x83\x72\x80\xa0\x2c\x96\xd2\x27\x84\x5a\x46\xa0\xab\x87\xaa\x99\x32\x55\xd3\xc1\x70\x28\x57\x8b\xd8\xcb\x38\x00\x45\xc9\x26\xa0\xb5\x62\xfe\x7e\xbb\xac\x0f\x32\xfa\x92\x0d\xb9\x7f\xa6\x86\x05\xb9\x18\x3c\xe1\x42\x62\x55\x98\xe7\xab\xb8\x9a\x1c\x35\x72\xc6\x88\xac\x03\x44\xac\xcd\x7a\x37\x74\xf7\x35\xa8\xfa\x5d\x64\x77\x07\x04\xb5\x45\x00\xdf\x8c\xe3\x39\x1e\x6c\xe4\x35\x02\x68\xea\x9e\x21\x80\xdb\x21\xa8\xf8\x83\xcb\xef\x04\x9a\x3c\x29\xbf\xe1\xb2\x65\x96\x3f\xbd\xa3\xeb\x1e\x20\xa8\xfb\xd8\xcc\xa6\x3c\x2e\x82\x3a\xa8\xff\xd1\xf2\xc0\x08\x0a\x93\x02\xbc\x67\x1c\x94\x5b\x04\xa3\x7b\x64\x4b\xeb\xa6\x3b\xfe\x3b\x04\x75\x2b\x47\xe7\x2d\x82\x62\xd0\xc0\xd8\x32\x95\xc5\x0c\x0e\x2d\x4b\x01\xc5\x99\xc1\xa0\x21\x89\x34\x4c\xc4\x81\xc1\x4c\x4c\x4d\xa6\x88\x21\x39\x20\xd4\xa0\x80\x23\x5b\x23\x52\x48\x64\x30\xa0\xac\x2d\x82\xd2\x3c\x42\x50\xf0\x32\x82\xa2\xf8\x1c\x82\xda\xde\xfd\x90\xee\xe5\x5a\x04\xe5\x8c\xb4\xf4\x1a\x41\x1d\xcc\xa9\xc2\xfa\xc9\xcf\x9a\x0e\x10\x54\x24\xf6\x52\x2d\x27\x49\x6a\xd6\x21\x16\x9f\x94\xdb\x79\xc8\xb3\x01\x66\xb7\xbb\xc6\x24\x97\xaf\x35\xf4\x6c\xdc\x6e\x60\x34\x69\x4e\x18\x7a\xca\x43\x2d\x9a\x1e\x2c\xea\x2f\x93\x65\x64\x08\xa7\x6d\x22\x0a\x9a\x99\x4e\x49\x2b\x34\x19\xb4\x62\x9d\xee\xa0\x9b\xcd\xa7\xd7\xe6\x53\xe8\xee\x71\x50\xe6\x5d\x64\x77\x07\x04\x75\x62\x68\x38\x8f\x00\x64\xba\x5e\xfb\xec\xba\xbc\x46\x00\x5d\xdd\x33\x04\x70\x3b\x04\x95\x78\x70\xf9\x7d\x8e\xb4\x3e\x2f\xbf\x55\xa4\x2b\x4f\x44\x3a\x5f\x8b\xa0\xee\x63\x33\x9b\xf2\xb8\x08\xea\x60\x0d\xed\x68\x79\x5c\x04\x15\x08\xa4\xcb\xeb\x7b\xc6\x41\xb9\x45\x30\xba\x47\xb6\xb4\xe4\xee\xf8\xef\x10\xd4\xad\x1c\x9d\xb7\x08\x0a\x32\x2c\xa5\xc1\x34\x93\x4a\x44\x24\x15\xca\x92\x54\x11\x83\x28\x6a\x63\x24\x10\xb1\x19\xc0\xa6\x6d\x53\xf4\xfa\xb3\x6d\x20\xaa\xa4\x12\x5c\xa3\x98\x9b\x08\x43\xc0\xb6\x08\x8a\x7b\x84\xa0\xd0\x65\x04\xc5\xa8\x38\x83\xa0\xd8\x3e\x90\x7c\x97\xe6\xee\x5a\x00\xe5\xfc\x9c\xd7\x6b\x00\x75\xb0\xad\xbf\xe9\xb4\xc7\x41\xca\x01\x80\xea\x73\x99\x49\x40\x9e\xb7\xb2\x88\xf7\x5a\xfe\x17\x7f\x29\x51\xa8\x89\x78\xa8\x57\x7c\x69\xc9\xcc\x7a\xd9\xec\x49\x7f\xa6\xb9\xb2\x46\xd1\xda\xd2\x6a\xea\xf5\xba\x2e\x8c\x62\xca\x32\xbb\x83\x6e\x9e\xaf\x23\x0b\xbb\x68\xd5\xfb\xfd\x4e\xf2\x65\x10\x5a\xd6\xa3\xb0\x0c\xc0\x38\x75\xff\xf4\x02\xcd\xbb\xc8\xee\x0e\x00\x6a\x0b\x00\xbe\x19\xc6\x63\xb6\x1a\xd1\xd1\x27\x41\x7a\x0d\x00\x86\xba\x67\x00\xe0\x76\x00\x2a\xf9\xe0\xf2\xfb\xfc\x39\xff\x79\xf9\xd1\x70\x7f\x74\xc2\x2d\x5d\x0b\xa0\xee\x63\x33\x9b\xf2\xb8\x00\xea\x20\x8c\xeb\x68\x79\x60\x00\x95\x6c\xd6\x56\xa7\xaa\x7d\x0b\x00\xe5\x16\xc0\xe8\x1e\xd9\xd2\xa2\xee\x8e\xff\x0e\x40\xdd\xca\xd1\x79\xbc\x04\x85\x34\xdb\x32\x2c\x4a\x6d\x25\x6d\x04\x15\x53\x82\x49\xcb\x52\x86\x01\x6c\x6a\x9b\x1a\xa6\x04\xd8\xb6\xa0\x80\x5a\xd4\x02\x96\xa9\x31\x53\x28\x93\x09\x9b\x58\xc8\xd6\x98\xbd\x05\x50\xc2\x23\x00\x85\x2f\x03\x28\x4d\x3b\x17\x48\xbe\xbd\xfb\x21\xbf\xef\xb5\x08\x2a\xe5\x50\xaf\xd7\x08\xea\xe0\xd3\x92\xf0\xf1\x5e\xa6\x7f\x44\x50\x68\xd4\xe3\xc3\x76\xa1\x23\xd6\xe5\x78\x64\x24\xf4\x7a\x5a\x26\xb3\x06\xc8\xea\x46\x7a\x92\xee\x24\x32\xe5\x72\x4c\x2d\x24\x4e\x2c\x8a\x31\x50\x41\x0d\x39\xec\x69\xcd\x6e\x8c\xae\xfa\x63\x1c\xcc\x2c\xb2\x50\xd1\x1a\xb7\xa3\xed\x5e\xaa\xd1\x7f\x5a\xd2\x9c\x36\xec\xe6\xaa\xa1\xfc\xbd\x11\x54\xf7\x2e\xb2\xbb\x03\x82\xda\x22\x80\x6f\x86\xf1\xa8\x42\xe2\xe5\xf3\x3a\x8f\xd7\x08\x60\xa2\x7b\x86\x00\x6e\x87\xa0\x52\x0f\x2e\x3f\xa7\xfd\x5f\x92\x9f\x98\x0d\xe3\x27\x96\x48\xae\x45\x50\xf7\xb1\x99\x4d\x79\x5c\x04\x75\x2e\x23\x80\xfe\xd8\x08\xaa\x04\xe4\xe2\x9e\x61\x50\x6e\x11\x8c\xee\x91\x2d\xcd\x80\x3b\xfe\x3b\x04\x75\x2b\x47\xe7\x2d\x82\x52\x88\x22\x83\x73\x82\x34\xc8\x6c\x22\x6c\xc5\x11\xb1\x6c\x6e\x0a\xaa\x28\x94\x94\x1a\x04\x58\x06\x34\x28\x04\x50\x33\xa4\xd0\x2c\x93\x0a\x03\x59\x42\x83\x8a\x9a\x06\x04\xbb\x04\x97\xc0\x23\x08\x45\x2e\x43\x28\x2e\xce\x41\xa8\xed\xdd\x0f\x07\x1b\x5c\x0b\xa1\x9c\xdf\x25\x79\x0d\xa1\x0e\xf2\x9b\x9c\xf8\x30\x5e\xff\x08\xa1\x40\x2f\x40\x35\x4d\xb2\x4a\xa4\xd4\x7f\x69\x07\x92\xf9\x5a\x7b\xd5\x64\xf5\x66\xa7\x94\x33\xcb\x7c\x20\xd2\x3d\xcb\xa0\x51\x2b\xa9\x1a\x3c\x54\xe8\x56\xa3\x9a\xd0\x5e\xc2\xb8\x34\xf0\x57\x53\x74\x16\xa9\x0f\xea\xec\xa5\x67\x4d\xe2\xa2\x8c\xa1\x5e\x9c\x4e\x07\xfe\x74\x8b\xdf\x3f\x1f\xd4\xf0\x2e\xb2\xbb\x03\x84\xda\x42\x80\x6f\xc6\xf1\xd8\xc6\x4b\xf0\x73\x08\xaf\xd7\x10\x60\xa1\x7b\x06\x01\x6e\x07\xa1\xd2\x0f\x2e\xbf\x13\xdf\x25\x9e\x92\x5f\x50\x0f\x0d\xf1\x89\x45\x92\x6b\x21\xd4\x7d\x6c\x46\xd7\x1f\x1a\x42\x1d\xe4\xb3\x3a\x5a\x1e\x18\x42\x9d\xf9\xc8\xe0\x26\x10\xca\x2d\x84\xd1\x3d\xb2\xa5\x69\xde\x1d\xff\x1d\x84\xba\x95\xa3\xf3\x38\x92\x5c\x30\x64\x20\xc4\x35\x81\x39\x15\x16\x46\x96\x12\x16\x93\xd8\xc2\x4a\xe3\x48\x9a\x06\xb7\x91\x05\x0c\xa1\xb0\x84\x9a\x14\x90\x6a\x50\x12\x80\x2c\xcd\xb4\x88\x26\xb9\xdc\x41\x28\x6f\x92\x84\x33\x70\x31\x49\x38\x05\x00\x9d\x0e\x84\x7a\xbb\xfb\xe1\x44\xa7\x6b\x21\x54\xc6\xa1\x5f\xaf\x21\x94\x9e\xa5\xe3\xdd\x4a\xc1\x50\xff\x0a\x84\x6a\x77\xd3\xbd\xd7\x87\xd8\xb0\x4d\x0a\x4d\x16\x1d\xe1\xc9\x7c\x5d\xca\x45\x4d\x59\xce\x2f\x49\x6c\x3a\xca\x80\x52\x73\x36\xa9\x8d\xd3\xa5\xae\x51\x99\x04\x46\xf3\x58\x66\xf2\xb4\x00\x46\x24\x22\x02\xd9\xe6\x74\x15\xad\x27\x91\x9f\xad\xed\x6e\xad\x9e\xae\x84\x03\xa2\xc6\xe4\xfd\x21\xd4\xe4\x2e\xb2\xbb\x03\x84\x3a\x91\x9b\xfa\x3c\x04\x68\xea\x2c\xe3\x3f\xfe\x8e\x87\x10\x00\xe8\x9e\x41\x80\xdb\x41\xa8\xcc\x83\xcb\xcf\x69\xff\x17\xe5\x57\x6c\x77\x8e\x7f\xe0\x76\x35\x84\xba\x8f\xcd\x6c\xca\xe3\x42\xa8\x33\x69\xdd\xf7\xfa\x78\x4c\x08\xd5\x37\x9b\x93\x7b\x06\x42\xb9\x85\x30\xba\x47\xb6\x34\x9e\xb8\xe3\xbf\x83\x50\xb7\x72\x74\xde\x42\x28\x80\x09\xb6\x04\xb7\x6d\xce\x0c\x9b\x18\xd4\x16\x0a\x11\xcb\xe0\x06\xe6\x5c\xd8\x0a\x13\xcb\xd6\x24\x64\xcc\xb4\x2d\xa5\x29\x01\x04\x97\x1c\x9b\x10\xda\x9a\x32\x84\x86\xd0\x0e\x42\x79\x93\x93\x9c\x81\x8b\x39\xc9\x29\x80\xe4\x74\x3e\x83\xb7\xbb\x1f\x8e\xb2\xbc\x16\x42\x65\x1d\xfa\xf5\xfc\xa4\x95\x56\x20\xba\xdb\x20\x7f\x1d\x19\x02\xbd\xa3\x3d\xfa\x00\x42\x75\xf4\x99\x6a\xf5\x14\x4c\xa0\xf5\x04\x17\x64\xaa\x42\x23\x21\x7f\x69\xd2\x5c\x54\xaa\xf9\x52\x6c\x1c\x5d\xad\xc5\x72\x1a\xb3\x3b\xc3\x56\x69\x24\x66\xcd\x6e\x2f\x1d\xee\x45\x60\x34\x22\xb5\xf5\xb2\xdd\x29\x8d\x9a\xad\x60\x12\xea\x60\xb5\xaa\xcc\xe2\x63\x9b\xf7\xe3\xf9\xf6\xec\xfe\xf9\x0c\x16\x77\x91\xdd\x1d\x20\xd4\x16\x02\x7c\x33\x94\xa7\x19\x1e\x0e\x97\xc7\x37\xaf\x3c\x84\x00\x44\xf7\x0c\x02\xdc\x0e\x42\x65\x1f\x5c\x7e\x4e\xfb\xbf\x24\xbf\xda\xba\x33\x22\x9f\xde\xd1\x75\x0f\x20\xd4\x7d\x6c\x66\xcf\xea\x21\x21\x54\x63\x10\x4f\x9d\xc8\x59\xba\xd7\xc7\x63\x42\xa8\xf9\xa2\x33\x3e\x55\xed\x5b\x40\x28\xb7\x10\x46\xf7\xc8\x96\x5e\xe2\xee\xf8\xef\x20\xd4\xad\x1c\x9d\xc7\x1b\x79\x1c\x31\x01\x35\x2a\x4c\x61\x52\x4d\x30\x93\x9a\xa6\x80\x12\x9a\x1a\xb4\x11\xc6\x06\x33\xa9\xc4\x5c\xda\x42\x5a\x54\x68\xcc\xd4\x14\xa3\x14\x68\x9c\x43\xce\x31\x57\xda\x0e\x42\x79\x93\x96\x9c\x81\x8b\x69\xc9\x29\x38\x97\x12\xea\xed\xee\x87\x33\xbc\xaf\x85\x50\x39\x87\x7e\xbd\x86\x50\x95\xb4\x5e\xdb\x0d\xd3\x9b\x21\xcd\x38\xda\xa3\x0f\x21\x14\x89\xb0\xf6\x20\xb7\x1a\x34\x99\x02\xf5\x69\x6a\xaa\x8b\x60\x20\xcc\x33\xf5\xd0\x6c\x96\x0e\x17\xfa\xb1\x82\x50\xb9\xf0\x14\x5b\x11\x09\x9a\x7d\xe9\xcf\x71\x92\x2a\x74\xab\x2a\x24\x49\xc3\x40\x61\xb6\x48\x56\x52\x83\x71\xc7\x7c\x29\x58\xd5\x58\x27\x0c\xeb\x19\x1c\xd4\xef\x1e\x4d\x0e\xee\x22\xbb\x3b\x40\xa8\x2d\x04\xf8\x66\x2c\x4f\x8f\x13\xa6\x3e\x09\xd2\x6b\x08\xc0\x75\xcf\x20\xc0\xed\x20\x54\xee\xc1\xe5\xe7\xb4\xff\x4b\xf2\x9b\xf8\xbb\x81\x1b\xad\x42\xdd\xc7\x66\x36\xe5\x71\x21\xd4\xb9\xdc\xde\xfa\x63\x43\xa8\x33\x1f\x1a\xdc\x04\x42\xb9\x85\x30\xba\x47\xb6\x34\xec\xba\xe3\xff\x06\xa1\x6e\xe4\xe8\xbc\x85\x50\x16\x07\x26\x07\x42\x12\xc0\x28\x03\xc0\xd2\x34\x40\x95\x66\x19\x80\x28\x88\x18\x30\x6c\x2c\x28\x47\x96\x20\x90\x10\x26\x05\xb5\x0d\x61\x2a\xc9\x18\xe3\x40\xd9\xc0\xc4\x3b\x08\xe5\x4d\x5e\x72\x06\x2e\xe6\x25\xa7\x00\x73\x74\x06\x42\x6d\xef\x6e\x21\x94\xc0\x1c\x79\x10\x4e\xee\x54\xb2\xe7\x27\xbb\x20\xff\xe0\x65\xfb\xe6\x66\x48\x2b\x1c\xed\xd1\x07\x10\x2a\x5a\x5f\x2c\xea\x8b\x72\x5a\x86\x66\xcb\x56\xc7\x5e\x46\xc6\xfd\x7a\x73\xce\x50\xaf\xd1\x2e\x2f\x4b\x8a\xe7\x33\x0b\x8d\x36\xa4\x3f\x17\x5c\x35\xfc\x8d\x22\xc9\x24\xd9\x48\x55\xf5\x44\xeb\xa9\xcf\x63\x18\xf7\x5a\x66\x65\x32\x99\xd2\x70\x4f\x6f\x45\x1a\x4f\xeb\x45\xa3\x81\x2b\xf7\x0f\x27\x27\x77\x91\xdd\x1d\x20\xd4\x16\x02\x7c\x33\x96\x67\x9c\xa3\x7a\xe1\xd6\xab\x28\xdb\x9e\xea\x0d\x04\xb8\x1d\x84\xca\x3f\xb8\xfc\x4e\x84\xd6\x9f\x94\x9f\x1f\x75\x86\x27\x5c\xfc\xb5\x10\xea\x3e\x36\xb3\x29\x8f\x0b\xa1\x8e\x7f\x49\xe0\xd0\xc7\x43\x42\xa8\x60\xb0\x3e\x1a\xdc\x33\x16\xca\x2d\x84\xd1\x3d\xb2\xa5\x81\xee\x8e\xff\x0e\x42\xdd\xca\xd1\x79\x7c\xb2\x8b\x05\x0c\x93\x10\x62\x53\x25\x80\x12\x92\x41\x49\xa5\x04\x10\x4a\x6e\x30\x84\x35\xa6\x6c\x64\x69\x0a\x03\x42\x20\x97\x90\x73\x89\x04\x31\x0c\x60\x08\xaa\x11\x60\xf3\x1d\x84\xf2\x26\x31\x39\x03\x17\x13\x93\x53\x40\xc1\xe9\xd3\x85\xdf\xee\xee\x20\x94\x26\x90\x07\xe1\xe4\xce\x21\xc6\xf3\xa3\x5d\x5a\x4f\x64\xe7\xb2\x36\x43\xda\xc5\xa3\x5d\xe6\xcd\x97\x20\x2b\xad\xc2\xad\xe2\xb8\x15\xd1\x92\x64\xb1\xc8\x36\x2d\x30\x09\xce\xfb\x11\x3d\xdf\xb4\xd3\x30\xbc\x7e\x52\xe1\x45\xd5\xe8\xfb\x03\xb9\x44\xb1\x0a\xaa\xa3\x6c\x69\x59\xa6\xb6\x0a\x27\xf5\xec\x28\x55\x97\xb1\xc4\x7c\x3e\x0f\x3d\x55\x1b\xc9\x3e\xcd\xc5\xfd\x2b\x69\xdd\x3f\xa7\x01\xbf\x8b\xec\xee\x00\xa1\x0e\x06\xeb\xc3\x72\x1e\x02\xcc\xc5\x90\x7d\xde\x8d\xf0\x1a\x02\x84\x8f\x70\x76\x09\x01\x6e\x07\xa1\x0a\x0f\x2e\xbf\xcf\x10\xe3\xac\xfc\x42\xf9\x7a\xbb\x89\x3e\xbd\xa3\xeb\x1e\x40\xa8\xfb\xd8\xcc\xa6\x3c\x2e\x84\x6a\xf6\x93\x8d\x13\x1b\xa5\x7b\x7d\x3c\x26\x84\x4a\x4d\x26\xbd\x7b\xc6\x42\xb9\x85\x30\xba\x47\xb6\xd4\x33\xdd\xf1\xdf\x41\xa8\x5b\x39\x3a\x8f\x63\xa1\x88\x01\x25\x94\x40\x40\x2a\x0c\x68\x6a\x86\x41\xb0\x6d\x41\xcb\x04\x36\xe2\x48\x50\x6e\x01\x09\xa0\x89\xb1\x66\x69\x48\x02\x8c\x88\x09\x10\x43\x06\xe5\x96\xc0\x6c\x93\x06\xfc\x15\x42\x79\x94\x99\x1c\x5e\xcc\x4c\x4e\x01\x3b\xb7\x08\xc5\xde\xd7\xa0\x04\x40\x00\x7a\x10\x4c\xee\x3c\x40\xc2\x6b\x00\x95\x4d\x3f\xc5\xdb\xdb\x37\x37\x31\x92\xe2\x68\x7f\x3e\x00\x50\x61\x90\xd1\x44\x77\xaa\x8f\x7a\xc5\x62\x67\x38\x2f\x53\x10\xef\x4e\xd7\xed\x59\x61\x9c\xc8\xb0\x65\xbf\xd0\x8d\x68\xf6\xa4\xf2\x54\xef\x24\x69\x93\xd7\xaa\x39\xd5\xb4\xaa\xb3\x18\x9f\x51\xba\x0e\xae\x1b\x66\x60\x6d\x59\x43\x1e\x94\xed\x59\xb8\x3a\x4a\xa4\x73\x9d\x74\xa3\x11\x0f\xde\x3b\x12\xea\xd0\xed\xdc\x50\x76\x77\x00\x50\x5b\x00\xf0\xcd\x48\x1e\x10\x8d\x0f\x33\x37\x5f\x43\x39\x3a\x01\x70\x07\x00\x6e\x07\xa0\x8a\x0f\x2e\xbf\xcf\x07\xc8\x9c\x97\x9f\xea\x35\x47\xb7\x49\x69\x70\x27\x9b\xd9\x94\xc7\x05\x50\x6d\x2d\x95\x30\x8f\xcb\x77\x2f\xa5\xc7\x04\x50\xfb\x2f\x21\x3f\x97\x5b\x00\x28\xb7\x00\x46\xf7\xc8\x96\x3a\xc4\x1d\xff\x1d\x80\xba\x95\xa3\xf3\x16\x40\x51\x0b\x6b\x96\xe0\xb6\x86\x80\x65\x1b\xd8\x32\x15\x11\x18\x43\x9b\x00\x6c\xd8\x12\xdb\x42\xd9\x10\x43\x84\x6c\xa9\x04\x25\x52\xc3\x86\x66\x30\xce\x0d\xc8\x81\x01\x29\xdc\x65\xd5\x84\x1e\x25\x26\x87\x17\x13\x93\x53\xa0\x91\xd3\x29\x0d\xde\xee\xee\x20\x14\x83\xd0\x83\x60\xf2\x92\x43\xbf\x9e\x1f\xed\x82\x45\xfd\x69\xfb\xe6\x66\x48\x5b\x1f\xed\xd1\x07\x10\xaa\x56\x6e\x19\x34\x5f\xd2\xb3\x4f\xf3\x0a\xed\x96\xc2\xf9\x97\xec\x48\xac\xda\x64\x12\x52\xe3\x4e\x99\xce\xe3\x25\x5a\x89\xe1\x74\x3b\x1b\xc5\x1c\xae\xe3\xa3\x5e\x5f\xda\x89\x4e\x2a\x13\x2b\x02\xa4\x06\xdd\xe1\x20\x1b\x9b\xc6\xaa\xf1\xf9\xcb\x7a\x50\xc9\x77\x62\x2f\x79\xcc\xc5\xdd\xb7\xf1\x02\xe1\xbb\xc8\xee\x0e\x10\x6a\x0b\x01\xbe\x19\xc9\x83\x47\xf5\x64\xf5\x93\x20\xbd\x86\x00\x69\xdd\x33\x08\x70\x3b\x08\x55\x7a\x70\xf9\x39\xed\xff\x92\xfc\x5e\x2c\x15\xfc\x5c\x35\x5d\xf7\x00\x42\xdd\xc7\x66\x36\xe5\x71\x21\xd4\xb9\x33\x7a\xf5\xc7\x86\x50\xaa\xbc\x6a\xdf\x33\x12\xca\x2d\x84\xd1\x3d\xb2\xa5\x76\xd9\x1d\xff\x1d\x84\xba\x95\xa3\xf3\x16\x42\x49\x6c\x71\x64\x12\x69\x22\xac\x29\x4d\xb3\x31\xa7\x36\x36\x2d\x9b\x4a\x4c\xb9\x29\x0d\x93\x18\xc0\x84\xc8\xd0\x6c\xca\x0d\x2a\x4c\x28\x34\xdb\x32\x24\x97\x1a\x03\x10\x98\xbb\xbc\x9a\xd0\xa3\xcc\xe4\xf0\x62\x66\x72\x0a\xb8\xc6\xcf\x40\xa8\xed\xdd\x2d\x84\x82\x00\x01\x0f\x82\xc9\x9d\xbb\xee\x9e\x9f\xed\xd2\xe6\x23\xb9\x7d\x73\x33\xa4\x7d\xce\xb8\xac\x3b\x52\x1a\x24\x16\x11\x73\xb8\xd6\x45\x9e\x54\x3a\xfe\xa9\x1e\xd0\xbb\xa3\x96\x31\xcf\xb6\x59\x6c\x82\x11\x35\x62\xa1\xc0\xa8\xd4\x66\x09\x7f\x2a\x83\x8b\x95\x58\x74\x52\xcf\xa3\xf2\x22\x04\xc7\xca\x6c\xd6\x87\xf5\xe9\xb0\x1a\x82\x4f\x2f\xdd\xa4\x15\x49\x17\xd7\x6a\x16\x6f\x0c\xad\xc4\xfd\x21\x54\xfc\x2e\xb2\xbb\x03\x84\xda\x42\x80\x6f\x46\xf2\xb0\x41\xad\xd9\xbb\xf9\x2a\x4a\x5e\xf7\x0c\x02\xdc\x0e\x42\x95\x1f\x5c\x7e\x27\xce\xb9\x39\x29\x3f\xa0\xcb\xf1\x6d\x22\xa1\xee\x64\x33\x9b\xf2\xb8\x10\x6a\xd0\x4b\x0f\x4f\xae\xe5\x3c\x36\x84\x1a\x0c\x61\xf3\x9e\x91\x50\x6e\x21\x8c\xee\x91\x2d\x35\x17\xee\xf8\xbf\xa5\x34\xb8\x91\xa3\xf3\xf8\x7b\x3c\x20\x30\xd6\x94\xb2\x6c\x88\x19\x63\x14\x0a\xa4\x38\x01\x06\xc2\x86\x8d\x98\xc1\x99\x6d\x72\x6a\x08\x6c\x18\x04\x40\x0b\x4b\x68\x2a\xa2\x14\x92\xd0\xa0\x9a\x40\xf0\x2d\x98\xdc\xa3\xdc\xe4\xf0\x62\x6e\x72\x0a\x01\x65\xa7\x21\xd4\xee\xee\x0e\x42\x11\x0c\x3c\x08\x26\xaf\x38\xf4\xeb\x35\x84\x8a\x65\x34\x8a\x74\xbd\x06\x49\xbe\x5b\x54\x9d\xfe\xf1\x45\xea\xc3\x8d\xbc\x56\x0f\x56\x5a\xeb\x04\xc5\xbd\x8a\xe8\x0c\xd2\x93\x52\x50\xf8\x43\xd4\x3f\x1d\x83\x8e\xac\x06\x9b\x45\x13\x24\x83\x7d\xab\xf8\xd2\x7b\x31\xf2\xfe\x6e\x28\xdc\x9c\x97\x9e\x3a\x76\x31\x15\x9a\xe5\x59\x33\x2d\xa2\x89\x60\xd1\x1e\x46\x6a\x25\x32\x1a\xab\x3c\xe8\x8f\x52\xf3\x60\xf0\xee\x10\xca\x33\xd9\x41\x7f\xf3\xb4\xec\xee\x00\xa1\x36\xc3\xd4\x89\xa3\xda\x8e\xc9\x70\x53\x84\x1e\x7d\xf9\x9c\x7a\xc9\x6b\x08\x50\xd6\x3d\x83\x00\xb7\x83\x50\x95\x07\x97\x9f\xd3\xfe\x2f\xc9\x4f\xcb\x56\x7b\x3d\xff\x51\x4f\x79\x2d\x84\xba\x8f\xcd\x6c\xca\xe3\x42\xa8\x11\xcb\xd4\x3f\x1f\xf9\xe8\xd0\xc7\x63\x42\xa8\x05\x27\x6a\x7e\x22\xe9\xea\x2d\x20\x94\x5b\x08\xa3\x7b\x64\x4b\x76\xda\x1d\xff\xb7\x8d\xbc\x1b\x39\x3a\x8f\x83\xc9\x21\x01\x96\x65\x03\x53\xa3\xb6\xb6\xf9\xcb\xd2\x04\x16\x50\x31\x83\x0a\x81\x0c\x61\x52\x66\x08\x13\x61\x13\x10\x00\x00\x37\x04\xe0\xa6\x06\x24\x81\x58\x19\x00\xef\x0e\x18\x46\x1e\xe5\x26\x87\x17\x73\x93\x53\x08\xcf\x1c\xef\xf2\x76\x77\x07\xa1\x38\x01\x1e\x04\x93\x3b\x67\xe4\x9e\x1f\xef\x42\xb4\xe4\x6e\xb3\x65\x33\x2b\xfc\x3c\x64\xeb\x1f\x21\x54\x55\x9b\x75\x02\x43\x73\x9a\x29\xd8\x12\xa6\xd9\x53\x09\x4c\x8b\xad\x0e\xc8\x3f\xf5\xc4\xca\x18\x89\x20\xeb\xe4\xfb\xe3\x62\xb8\xac\x02\xc5\x85\xfe\x32\x33\xcb\xb0\xae\xa7\x7b\x26\xae\xad\x5f\xe2\x81\x15\xa6\xe1\xc9\xac\x92\x01\x5d\xd0\x0a\x71\xe8\x1f\x8f\x83\x99\xe0\x34\x7e\xf7\xc4\x9a\x87\x3e\xf8\x86\xb2\xbb\x03\x84\xda\x42\x80\x6f\xc6\xf2\x3c\xad\x7b\xa3\x86\xed\x8c\x89\xf5\x1a\x02\xd4\x8f\xca\xc4\x15\x04\xb8\x1d\x84\xaa\x3e\xb8\xfc\x4e\xac\xc8\x9d\x92\x5f\x58\x8f\x15\xe6\xf8\x36\x10\xea\x3e\x36\xb3\x29\x8f\x0b\xa1\x26\xb9\x6c\x6c\xfc\x39\xa9\xea\x47\x7d\x3c\x26\x84\x62\x79\xcd\xf4\xdf\x11\x42\xb9\x85\x30\xba\x47\xb6\x64\x0d\xdd\xf1\xdf\x41\xa8\x5b\x39\x3a\xaf\x63\xa1\x08\xa3\x18\x50\x8d\x28\xd3\xa6\x88\x52\x88\x0c\x0a\x39\x91\x36\x13\x5c\x08\x4b\x50\xc9\x11\x53\x26\x33\x0c\x69\x21\x05\x0c\x64\x61\x62\x60\x65\x4b\x4c\x91\xa5\xed\x36\xf2\x90\x47\xb9\xc9\xe1\xe5\xdc\xe4\x10\x89\x33\x59\xa1\x76\x77\xb7\x10\x0a\x21\x22\x3c\x08\x27\xaf\x39\xf4\xeb\xf9\xf1\x2e\x1d\x26\x67\xdb\x37\x37\x3d\xee\xf3\x71\x1c\xba\xe3\x8c\xe1\xf0\xfa\xc9\x6c\xa7\x1a\xd5\x70\x2d\xde\x9b\x84\xab\xd3\x71\x1d\xc6\xdb\xd0\x5e\x0f\xe5\x12\x59\xd1\x60\xd8\x1f\x99\x81\x68\x2b\xbb\x7a\x31\x16\x02\x84\xe6\x93\xa7\x2e\x96\x95\x6c\x3f\x9f\x2a\x05\x56\x65\x9a\xa8\x76\xc2\x73\x8b\x65\x47\x4f\xc3\x0a\x6e\x3f\x69\xc9\x5c\x6e\xba\xbc\x7b\x56\xa8\x40\xf9\x2e\xb2\xbb\x03\x84\xda\x42\x80\xef\xc5\xf2\x04\xf4\x00\x30\x84\xff\xd6\x10\xc0\xd4\x3d\x83\x00\xb7\x83\x50\xb5\x07\x97\x9f\xd3\xfe\x2f\xc9\x2f\x38\x4e\x27\x6f\xb4\x0a\x75\x1f\x9b\xd9\x94\xc7\x85\x50\xaf\x38\x25\xf7\x97\x84\x50\xa1\x50\xf7\xc9\xc8\xdd\x11\x42\xb9\x85\x30\xba\x47\xb6\x64\x86\xdd\xf1\x7f\x3b\x63\xf8\x46\x8e\xce\xe3\xe3\x5d\x4c\x24\x21\x33\x25\x47\x86\x66\x01\xc3\x12\x00\x9b\x88\x11\x8e\x34\xcc\x4c\x53\x19\xc2\x26\xca\x96\x40\xd3\x80\x06\x95\x86\x38\x11\x8c\x12\x03\x4b\x53\x59\x82\x40\xbc\x0b\x27\x47\x1e\xe5\x26\x87\x97\x73\x93\x43\x02\xcf\x20\xa8\xcd\xcd\x1d\x80\x62\x54\x78\x10\x4c\xee\x0c\xac\xf5\xfc\x70\x17\x6b\x5d\xdd\x8d\x8c\x65\xfd\xf3\x80\xbc\x2b\x07\x00\x2a\x31\x18\x4f\x6b\xd1\x55\xa7\xfb\x32\xd2\x13\x7a\xc4\x0e\xd5\x41\x62\x95\xe8\xd4\xec\xa2\xf0\x2f\x6b\xa9\x54\xcc\x9a\xe1\x5a\x09\x81\xf8\x72\x94\x08\x06\xf2\x28\x09\xec\x56\x7d\x50\x69\x4f\xc0\x74\x60\x48\x33\x28\xfc\xf3\x92\xd9\x4f\x0d\xaa\xcb\x64\x13\x0e\xa3\xc1\x82\x98\x4d\xee\x9e\x99\x3c\x50\xbf\x8b\xec\xee\x00\xa0\xb6\x00\xe0\x7b\x91\x3c\x01\xfd\x65\x1d\x1c\xdd\x7c\x0d\xa5\xa9\x7b\x06\x00\x6e\x07\xa0\xea\x0f\x2e\xbf\x13\x81\xf5\x27\xe5\x17\x8a\xfb\x9b\xf4\x36\x00\xea\x3e\x36\xb3\x29\x8f\x0b\xa0\x16\x34\xd7\x5f\xff\x35\x01\x54\x9a\x06\x1a\xf6\x1d\x01\x94\x5b\x00\xa3\x7b\x64\x4b\xb2\xe9\x8e\xff\x0e\x40\xdd\xca\xd1\x79\x1c\x4c\x0e\x0c\xcb\xb0\x0c\x28\x25\xa6\x86\x66\x23\xa9\x4c\x04\xa0\xc1\x20\xb7\x4d\x49\x05\x01\x54\x11\x13\x6b\xd4\xe6\xb6\xc6\x24\x22\xca\x46\x54\x71\x4e\xa5\x60\xb6\xa5\xa9\xb7\x6d\x3c\x8f\x32\x93\xc3\xcb\x99\xc9\x21\x3d\x93\x12\x6a\x7b\x73\x0b\xa0\x30\x60\xdc\x83\x50\xf2\x86\x43\xbb\x9e\x1f\xed\x32\x67\xcb\x9d\x51\x6d\x06\xac\x8b\x5f\xe3\x45\x5f\x96\x41\xbf\xd9\xb6\x84\x48\x24\xc3\x81\x39\xab\x6b\xf3\x7e\xb7\x0c\x67\x4f\xe5\xfc\x53\x71\x11\x5a\xc6\xe2\x9d\x94\x4a\xf7\xfb\xe3\x29\x2d\xcf\x51\x29\x38\x61\xc1\x29\x99\x0e\xbb\xf3\x45\xa7\x17\x9d\x18\x81\x21\x9c\x98\x65\x3e\xc8\xf7\x17\xb3\xda\xac\xcd\x0d\x3b\x13\x2d\xe9\x77\x07\x50\xe6\x5d\x64\x77\x07\x00\xb5\xf1\x6a\x27\x0e\xbb\x3d\x26\xc3\x0d\x7b\x7d\x95\x23\xd9\x9b\x03\x80\xae\xee\x19\x00\xb8\x1d\x80\x6a\x3c\xb8\xfc\x9c\xf6\x7f\x49\x7e\x92\xb0\x22\xbc\x0d\x80\xba\x8f\xcd\x6c\xca\xe3\x02\xa8\x75\x36\x5f\xad\xfd\x35\x01\x54\x35\x13\xae\xdd\x33\x0e\xca\x2d\x80\xd1\x3d\xb2\xa5\x3a\x77\xc7\xff\x2d\xa9\xe6\x8d\x1c\x9d\xb7\x00\x4a\x18\x02\x50\x4a\x18\x62\xa6\x30\x6c\x89\x05\x33\x88\xcd\xa0\x69\x0a\x08\x2c\xcc\xb1\xc4\xdc\x86\x08\x61\x93\xdb\x94\x68\x5c\x59\x96\x62\xb6\x62\x40\x6a\x36\xb2\x09\x78\x5b\x81\xf2\x28\x2f\x39\xbc\x9c\x97\x1c\x32\x7a\xe6\x80\xe1\xdd\xdd\x1d\x84\x22\x1a\xf7\x20\x94\x5c\x3a\xf4\xeb\xf9\xd1\x2e\x92\x05\x77\x6e\x6e\x33\x64\xcd\x8e\xf6\xe8\x03\x08\x55\x2a\xf3\x5a\x15\xc4\x52\x95\xa4\x1e\x68\x1b\x69\xb3\x02\x62\xb8\xb2\x2c\x77\xa3\x2d\xbf\x95\x6f\x95\xcd\x34\x50\x91\x60\x37\xb2\xae\x34\x55\xad\x5f\x17\x4d\x58\xf1\xa7\x07\x39\x11\x9a\x64\x26\x50\xb6\x47\xb3\x44\xa5\xa7\x47\x8b\x20\xc0\x79\x73\x69\xf4\x87\x79\xda\x62\xe3\xd0\xdd\x21\x54\xf3\x2e\xb2\xbb\x03\x84\x6a\x38\xc5\xb5\x2d\xe7\x21\x40\x74\x96\xed\x4e\x6f\x0e\x01\x86\xba\x67\x10\xe0\x76\x10\x4a\x3e\xb8\xfc\x9c\xf6\x7f\x49\x7e\x8b\x12\xa8\x64\x6e\x03\xa1\xee\x63\x33\x9b\xf2\xb8\x10\x0a\x76\x0a\x11\xed\xaf\x09\xa1\xec\x56\xac\x72\xcf\x38\x28\xb7\x10\x46\xf7\xc8\x96\x6a\x75\x77\xfc\x77\x10\xea\x56\x8e\xce\xe3\xa4\x9a\x0a\x6a\x8a\x6b\xb6\x69\x49\x8a\x05\xd6\x2c\x4d\x33\x0d\x1b\x2a\xc4\x28\xb7\x4d\xcb\x26\x50\x19\x80\x71\xa1\x04\x23\x82\x12\x6a\x18\x90\x48\x2a\x18\xe0\x18\x29\x6a\xec\xf2\x92\x23\x8f\xf2\x92\xc3\xcb\x79\xc9\xa1\xc6\xcf\x7d\x8d\xb7\xbd\xbb\x83\x50\x9c\x73\x0f\x42\xc9\x9d\xa7\x47\x79\x0d\xa1\x4a\x11\x5a\xdc\x1d\x7b\xb5\x19\xb2\x2e\x26\x34\x48\xb5\x7a\x04\x4a\x35\x4f\x01\x55\x6d\x94\xfc\xd6\x52\x74\x16\x91\x42\xc5\xd0\x06\x21\x15\x9a\x74\x72\x6a\x96\x4b\x26\x69\x3e\x18\x68\x56\x1b\x9d\x40\x35\xb2\x58\x14\x6a\xeb\xa7\x66\xa9\x1d\x33\xcd\xe0\x3c\x4a\xab\xc4\x12\x78\x66\xea\x65\xb2\xcc\x76\x8d\x60\x07\x56\x62\xe2\xfe\x5f\xe3\x75\xef\x22\xbb\x3b\x40\xa8\x2d\x04\xf8\x66\x1c\x4f\x3a\x2c\x22\xa5\x9b\x43\x80\x89\xee\x19\x04\xb8\x1d\x84\x32\x1e\x5c\x7e\x9f\x4f\x8f\x3b\x2b\xbf\x48\xa8\x31\x1d\x06\x6e\x03\xa1\xee\x63\x33\x9b\xf2\xb8\x10\x0a\x93\x02\xb4\xff\x9a\x10\x6a\x08\x93\xe5\x7b\xc6\x41\xb9\x85\x30\xba\x47\xb6\x54\x01\xee\xf8\xef\x20\xd4\xad\x1c\x9d\xc7\x5f\xe3\x21\x4d\x53\x44\x1a\xb6\x66\x01\x0b\x23\x66\x4b\x86\x95\x62\x88\x40\x6a\x6b\x12\x42\x4d\x11\x4c\x28\x06\x1a\x62\x9a\x66\x41\x9b\x29\xc1\x20\x37\xb9\x85\x0c\x83\x53\x44\x76\x10\xca\xa3\xbc\xe4\xe8\x72\x5e\x72\x28\xc0\xb9\x55\xa8\xed\xdd\x2d\x84\x22\x48\x68\x1e\x84\x92\x3b\x3f\xf8\xf5\xfc\x68\x97\x05\xe9\xec\x3a\xd2\x66\xc8\x3a\x9e\xef\xe4\x00\x42\x2d\x3b\xf6\x4c\x9f\xd4\x26\xe3\xd2\x72\xfe\x44\x33\x95\xfa\x60\x62\x80\xc9\xf0\x25\xc8\x1a\xc3\xde\xac\xe4\xaf\x0d\x8d\xce\x78\x4a\xa8\xd2\x55\xa6\x91\x5e\x8c\x84\xbf\x50\x41\xad\x54\x6d\x55\xec\x56\xb2\x95\x2e\xca\x72\x48\xfc\x56\x73\xa5\xe4\x48\x4b\x3f\xa5\x9a\xd5\xb6\x91\x0b\xdc\xfd\x6b\xbc\xe1\x5d\x64\x77\x07\x08\xb5\x85\x00\xdf\x8c\xe4\xc9\x23\x43\xea\x37\x87\x00\x0b\xdd\x33\x08\x70\x3b\x08\x65\x3e\xb8\xfc\x3e\x7f\xf0\x7f\x5e\x7e\xe5\x64\x3f\x55\xb8\x0d\x84\xba\x8f\xcd\x6c\xca\xe3\x42\x28\x96\x29\xf6\x42\x7f\x4d\x08\xb5\x4a\x64\x8a\xf7\x8c\x84\x72\x0b\x61\x74\x8f\x6c\xa9\x9c\x77\xc7\x7f\x07\xa1\x6e\xe5\xe8\x3c\xfe\x1a\x4f\x61\x86\x90\x61\x33\x4b\x1a\x10\x69\x0c\x52\x0a\x20\x31\x38\xe6\x9a\x8d\x18\x94\xc0\x30\x6c\x43\xd9\x88\x68\xa6\x94\x80\x2a\x61\x12\x43\x71\x93\x0b\x60\x49\x4b\xd0\xb7\x55\x28\x8f\x32\x93\xa3\xcb\x99\xc9\x11\x40\x67\x12\x1a\x20\x80\xf6\x69\x35\x89\x06\x34\x0f\x82\xc9\x2d\x87\x7e\x3d\x3f\xdc\xc5\xc0\xeb\xc9\xf6\xcd\xcd\x90\x65\x1f\xed\xd1\x07\x10\xca\x8c\xb4\x3b\xed\x51\xc5\xdf\x6b\x14\xe2\xa1\x7a\xdb\xcc\x8c\x62\x91\xc5\x40\xa6\x48\x02\x44\xfa\x8b\xae\x39\x06\x51\x51\x59\xc6\x48\xaf\x51\xac\x37\x53\x9d\x66\x7e\x30\x6f\x0e\xda\xc1\x40\x7e\x3c\x9f\x21\xf5\xb2\x7a\xc9\x46\x62\x41\x1e\x03\xa4\xa4\x85\x44\xa7\x36\x51\xf5\x31\xb9\x7f\x42\x83\xc9\x5d\x64\x77\x07\x08\xb5\x71\xb1\x9f\x8f\x18\x3b\x0f\x01\x2a\xc1\x51\x1b\xdc\x1c\x02\x00\xdd\x33\x08\x70\x3b\x08\x65\x3d\xb8\xfc\x9c\xf6\x7f\x49\x7e\xed\xbe\xf5\x24\x6e\x03\xa1\xee\x63\x33\x9b\xf2\xb8\x10\x8a\xb7\x4b\xe5\xc1\x5f\x13\x42\x69\x56\x3e\x7f\xcf\x58\x28\xb7\x10\x46\xf7\xc8\x96\x8a\x13\x77\xfc\x77\x10\xea\x56\x8e\xce\xe3\xaf\xf1\x00\x30\x39\x96\x8a\xdb\xd8\x02\xa6\x45\x6c\xa8\x31\x40\xa1\x06\x39\x92\x86\x65\x03\x42\x80\x32\x25\x53\xb6\x69\x21\x03\xd8\x92\x0b\x2c\xa5\xc9\xa9\x81\xa9\x22\xc8\x34\x76\x10\xca\xa3\xcc\xe4\xe8\x72\x66\x72\x04\xe9\x99\x84\x06\xbb\xbb\x5b\x08\x45\x21\x64\x1e\x84\x93\x2b\x87\x7e\xbd\x86\x50\xe9\x28\x0e\xef\xd2\xc4\x6d\x86\xac\xcf\x1b\x2f\xfa\x47\x08\x65\xc4\x56\xc9\xe9\x3a\x1f\x06\xab\xaa\xad\x07\x17\x55\xfb\x09\x8e\xea\x15\x9c\xcb\x46\x4d\x3d\xb9\xec\x65\xa6\xd3\x54\x92\x04\x68\xaa\x5f\xc3\xa4\xb2\x28\xc7\xa3\x9d\x6a\xec\x25\x19\x6f\x2f\xfc\x32\x34\x9d\xc8\xf8\x4b\x20\x11\x67\xc8\xb0\xbb\xf5\x01\x4b\xb6\xd3\xd5\x76\x61\xd0\xd3\xef\x0e\xa1\x16\x77\x91\xdd\x1d\x20\xd4\x16\x02\x7c\x33\x96\xa7\x3e\x1a\xd8\xf3\x9b\x43\x00\xa2\x7b\x06\x01\x6e\x07\xa1\xd4\x83\xcb\xcf\x69\xff\x97\xe4\x37\x9b\x56\x42\x91\xdb\x40\xa8\xfb\xd8\xcc\xa6\x3c\x2e\x84\x7a\xc2\xe5\x70\xea\x2f\x09\xa1\xc2\xe1\x65\x29\x7b\xcf\x58\x28\xb7\x10\x46\xf7\xc8\x96\x0a\x71\x77\xfc\x77\x10\xea\x56\x8e\xce\x5b\x08\x85\x6d\x0d\x43\x83\x31\x13\x4a\x6c\x21\x93\x98\xb6\xb0\x20\x35\x0c\xa8\x29\x01\x81\xa1\xa4\x64\x36\xb3\x25\x93\x9a\x66\x9a\xa6\x6d\x31\x64\x53\x25\x0d\xd3\xc2\xca\xb4\x4d\x73\x77\xc0\x30\xf2\x28\x33\x39\xba\x9c\x99\x1c\x9d\x5d\x84\x42\xfb\xa4\x9a\x94\x22\xe6\x41\x30\xb9\x73\x8e\xe6\xf9\xd1\x2e\x4b\x54\xde\x2d\xa5\x9f\xc8\x83\xac\x7f\x04\x50\xdd\x6e\xe3\x85\x4e\x2a\x0b\x93\x8e\xc6\x2c\x53\xb7\x5f\x7a\xc5\x7a\x37\xaf\xe6\x63\xa4\xe1\xb6\xd1\xca\x8a\xf0\xa2\xb2\xea\x66\x51\x3f\x4f\x9e\xba\xf2\x29\x30\xce\x77\x9e\x9e\x16\xb6\x39\x99\x25\x22\x46\x54\xaa\x30\xcb\x4c\xd7\xf9\x65\xc9\xd6\x6a\x79\x19\x6d\x8c\x16\x9d\x2e\x0d\xde\x3d\x23\x14\xb8\x8b\xec\xee\x00\xa0\xb6\x00\xe0\x9b\x91\x3c\xc6\xb8\x92\x5f\xde\x1c\x00\x70\xdd\x33\x00\x70\x3b\x00\x65\x3f\xb8\xfc\x3e\xaf\xd1\x9c\x97\x1f\xb1\x53\xb5\xd1\x6d\x00\xd4\x7d\x6c\x66\x53\x1e\x16\x40\x05\x02\xe9\xf2\x7a\xfe\xd7\x04\x50\xd9\x48\x35\x73\xcf\x48\x28\xb7\x00\x46\xf7\xc8\x96\x72\x5d\x77\xfc\x77\x00\xea\x56\x8e\xce\x5b\x00\x45\x04\x32\xb9\x89\x38\xe0\x86\xcd\x88\x30\x24\x46\xd0\x06\xb6\x46\x2d\x4b\x42\x48\x39\x84\x40\x33\x6c\x1b\x21\xa1\x6c\x42\x35\x4c\x80\x94\x06\x27\x82\xd8\x54\x5a\x04\xa2\x2d\x80\xc2\x1e\xe5\x25\x47\x97\xf3\x92\x23\x82\xcf\xad\x41\x6d\xef\xee\x20\x94\xc0\xcc\x83\x60\x72\xe7\x60\xe8\xf9\xd1\x2e\x26\xec\xed\xde\x2c\x9f\xee\xd4\x87\x29\x0d\x86\xcb\xfc\x04\xb7\x9f\x64\x98\x65\x75\xd5\x0c\x74\x4b\x7d\x1d\x58\x2f\x61\x69\x85\x28\x81\xc1\x48\xb9\x9e\xae\xe4\xa1\x0c\xb6\xdb\xb4\x3d\x4c\xa5\x65\x8e\xb5\xe9\xb0\xd8\xa0\x4f\xc4\x04\x15\xbb\x8e\xd2\x7a\xae\x3f\x5a\x5a\x99\x60\xb6\x8e\xe7\x8b\x18\xa9\x85\xf8\xea\xfe\x10\x8a\xdc\x45\x76\x77\x80\x50\x5b\x08\xf0\xcd\x48\x1e\x15\x5b\x41\x76\x6b\x08\xb0\x1d\xb0\xbc\x81\x00\xb7\x83\x50\xcd\x07\x97\xdf\x67\x30\x74\x5e\x7e\x7e\xae\xf3\x1b\x41\xa8\xfb\xd8\xcc\xa6\x3c\x2e\x84\x0a\xb5\x2a\x9d\xd2\x5f\x13\x42\xd5\x1a\x8d\xd4\x3d\x23\xa1\xdc\x42\x18\xdd\x23\x5b\xca\xea\xee\xf8\xbf\xa5\x34\xb8\x91\xa3\xf3\x16\x42\x99\x00\x5b\xb6\xa1\x24\xa6\x0c\x30\xc3\xa2\x8c\xda\x98\x01\x21\x31\x60\x52\x22\x4d\x72\x24\x25\x24\x06\xb6\x2d\x48\x90\x0d\x25\xc4\x86\x26\x4c\xc8\x35\x68\x53\x22\xf1\x6e\x1b\x0f\x7b\x94\x97\x1c\x5d\xce\x4b\x8e\xe8\xb9\xa4\x50\xbb\xbb\x5b\x08\xc5\x30\xa1\x1e\x04\x93\xb7\x1c\xfa\xf5\x1a\x42\x45\x62\x00\xee\xa2\x55\x36\x43\xd6\xc5\xbc\xe4\xbd\x52\xb4\x47\x53\x3d\xad\x5a\x60\xc3\x61\x6c\x48\x4a\xb9\x52\xac\x9d\x9b\xe4\x5a\xf5\x7c\xd8\xcc\xcd\x22\x16\xe9\x19\x2b\x82\x07\xed\xb6\x3d\x09\x06\x07\xa9\x6e\xc3\x5e\x0f\x1b\xf5\x65\x36\xd4\xd7\x63\xb1\xb9\xbf\x50\xeb\x4e\xba\x81\x98\xa6\x0a\xdd\x65\xb0\x51\x0f\x14\x6a\x85\xfc\xfd\xd3\x6a\xf2\xbb\xc8\xee\x0e\x10\x6a\x3f\x40\x7c\x28\xe7\x21\x80\xed\xd7\x73\xc9\x9b\x43\x80\xb0\xee\x19\x04\xb8\x1d\x84\x6a\x3d\xb8\xfc\x9c\xf6\x7f\x41\x7e\xd1\x48\x08\xae\x6e\xb4\x8d\x77\x1f\x9b\xd9\x94\xc7\x85\x50\x11\x54\x2d\xe2\xbf\x26\x84\x6a\x4e\xcd\xc4\x3d\x23\xa1\xdc\x42\x18\xdd\x23\x5b\x4a\x9b\xee\xf8\xef\x20\xd4\xad\x1c\x9d\xc7\xab\x50\x48\x11\xcd\xe6\xb6\x65\x1a\x1a\xe6\x26\x27\x44\x41\x4a\x99\x29\x6c\x69\x41\xae\x0c\xce\xb9\x66\x69\x9c\x71\xa8\x6c\xaa\x04\x83\x8c\x0b\xae\x0c\xa6\xa0\x49\x15\x57\x6f\x10\xca\xa3\xbc\xe4\xe8\x72\x5e\x72\xc4\xce\x6d\xe3\xb1\xfd\x36\x1e\xd3\x28\xf5\x20\x94\xbc\xed\xd0\xae\xe7\x07\xbb\xac\x40\x64\xe7\x09\x36\x03\xd6\xe7\x0c\x83\xfa\x47\x00\x25\x8b\xc3\xb0\xe9\x4f\x2e\xe5\x10\x37\x58\xb3\x3c\x29\xb5\x60\xde\x4e\x75\x7a\x25\xc2\x59\x29\x9f\x6c\x4e\x67\x22\xd3\x7a\x29\xf1\xf0\xba\x98\x47\x9d\x48\xb0\xda\xcc\x3d\x0d\xad\x44\x79\x50\x8a\xe7\x0a\x65\x8d\x84\xb2\xcd\x97\x45\xb8\x69\xc6\x02\xd1\xd1\x70\x2e\xe5\x64\x82\x48\xe8\xde\x6b\x50\x87\xa6\x74\x43\xd9\xdd\x01\x40\x6d\x01\xc0\x37\xe3\x78\x5a\x79\x61\xb6\x6e\x0e\x00\x8e\x4e\x00\xdc\x01\x80\xdb\x01\xa8\xf6\x83\xcb\xcf\x69\xff\x97\xe4\x17\x43\x23\x7c\x9b\x50\xf2\x3b\xd9\xcc\xa6\x3c\x2e\x80\x8a\xa7\x6a\x41\xe3\xaf\x09\xa0\x5e\x02\x76\xec\x9e\x71\x50\x6e\x01\x8c\xee\x91\x2d\x25\x89\x3b\xfe\x3b\x00\x75\x2b\x47\xe7\x2d\x80\x52\x4a\x30\xce\xa8\x65\x9b\x52\xe3\x26\xc1\x26\x01\x1a\xc1\x50\xb3\xb1\x65\x98\x96\x66\x4a\xa1\x71\x46\xb0\x21\x34\x6c\x98\x42\x52\xcb\x24\x36\xa2\x9c\xdb\x82\x43\x93\x59\xda\x0e\x40\x79\x94\x97\x1c\x5d\xce\x4b\x8e\x34\x2e\xce\x20\xa8\xed\xdd\x2d\x84\xd2\x20\x23\x1e\x84\x92\x77\x1c\xfa\xf5\xfc\x68\x97\xc9\x34\xb0\x8b\x56\xd9\x7c\xb0\x7c\x1c\xa6\x1c\x40\x28\x14\x59\x0c\xd5\xa0\x96\xa8\x64\x4b\x6d\x31\x5c\x55\x63\xab\x4c\xea\x09\x2c\x52\x05\xab\xdd\x0d\x2d\x02\xe4\xc5\xca\x24\xfa\x9d\xa7\x6c\xbe\xcd\x25\xe8\x14\x9a\x9d\x7c\xd4\x0f\xfd\xe1\x49\xf1\x85\x73\xfa\xa2\xf5\xcb\xf3\x1a\xd5\x6a\xc1\x4e\x39\x1a\x7b\x1a\xdb\x1a\x08\x3c\x05\x23\x77\x0f\x25\x0f\x86\xef\x22\xbb\x3b\x40\xa8\x2d\x04\xf8\x66\x24\x4f\x4b\xbc\x58\xfe\x9b\x43\x80\xb4\xee\x19\x04\xb8\x1d\x84\xea\x3c\xb8\xfc\x9c\xf6\x7f\x49\x7e\xf1\x4e\x95\x1a\xb7\x81\x50\xf7\xb1\x99\x4d\x79\x5c\x08\x95\x6c\xd6\x96\xfe\xbf\x26\x84\x5a\x57\xda\xd1\x7b\x46\x42\xb9\x85\x30\xba\xf7\xb6\xe4\x06\x42\xdd\xca\xd1\x79\x0c\xa1\xa4\x20\x94\x60\x26\xb1\xc1\x28\x50\xb6\xe4\x1c\x30\xac\x34\xac\x51\xc8\x4d\x1b\x0a\xc4\x2d\x21\x09\xb6\xa0\x34\x24\x56\x26\xe3\x44\x03\xc4\x86\x0c\x18\x58\xc3\xf8\xb5\x12\x64\x8b\x78\xa2\x41\x84\xf3\x11\x14\x2b\x87\x29\xd2\xd3\xb5\x72\xa4\x1c\xc3\x7a\x3d\xa1\xd7\x6a\xd1\x5a\xad\x82\x2a\xb1\x5a\xbd\x5e\x60\xe1\x7a\x2d\x5c\xca\x25\x43\xb5\x46\x51\xaf\x32\xad\x96\x25\x7b\x04\x45\xc5\xc5\x48\x72\xae\x69\xe4\xf4\x2e\xde\xdb\x5d\xa8\x41\x4d\x70\x0d\xa3\x7d\x56\xcd\x54\x95\x44\x80\x6a\x65\x99\xbe\x12\x41\x90\x9b\x44\xc3\xcd\xb9\x09\x35\x08\xcb\x82\xd7\x3b\xa4\x9f\xea\xf6\x45\x5e\xa3\xdd\x20\x9e\xeb\x1f\x11\x94\xf3\xf0\xa8\x80\xa3\x97\xdd\xdd\x42\xf7\x25\xf6\x5e\xdf\x7c\xcc\xdf\xe8\xae\x0b\x7e\x15\x04\x11\x6d\x99\x13\x6b\x7d\xa4\x62\xf3\x74\x4c\x1b\xbc\xa8\xe9\x5a\x16\xad\x7a\x8b\x57\x63\xab\xf1\x62\x31\x37\xc2\x83\x25\x09\x19\xac\xb9\x06\xcd\xf1\xa0\x90\x08\x24\x8a\x8c\x65\x1b\x46\xb4\x1f\xec\x6a\xab\x75\xac\xcf\x43\xdd\x84\x66\x24\x48\x5e\x2f\x7f\x05\x55\x1d\xca\xe7\xdf\x27\x11\xcb\xc1\x43\xdf\x9d\x34\x57\xf4\x79\xdb\xdc\xeb\xe3\x44\x09\x9f\xba\x11\xf0\x98\xff\xf1\xc3\xc4\x2e\xf0\x3f\x18\x15\x43\x7b\xf9\x7c\x6f\x54\xd2\xf5\x48\xa5\x0c\x76\x82\xff\x66\x7f\xde\x55\x65\xef\x96\x16\xc7\xea\x1c\xde\xff\x78\xe7\xfa\x05\x59\x5e\xb3\xce\xd6\xef\xa8\x87\x39\x18\x91\xbf\x6b\x4b\x89\x72\xf0\x69\x57\xd7\xa3\x68\x67\x57\xce\x7b\x98\xf0\x75\xfc\xb3\xa6\x3b\xfe\x3b\x0f\x63\x8b\x7e\x29\x13\x13\x24\x95\xaf\xcd\xc3\x7e\x9c\x0e\xf6\x88\xe2\x0b\x7b\xa6\x46\x0c\x67\x46\x09\xd8\x8e\x2d\xeb\x76\x72\x1e\x0a\x8a\x49\xd1\x8e\x35\x33\xf3\x97\x50\xae\x18\x9c\x59\xe1\x6e\xb8\x97\x1a\x0f\x69\x6f\x22\xeb\xc9\xd2\x3c\x95\x56\xc6\x22\x9b\x1f\x4c\x27\x83\x96\x1e\xf0\x3c\xeb\x20\x81\x4c\x32\x6c\x62\x1b\x12\x01\x29\xd6\x98\xe0\xa6\x65\xb0\xd7\x39\x38\x10\x9a\xb2\xb8\x22\xc4\x94\x48\xb3\x90\x25\x00\x60\x86\x05\x0c\xc9\x38\xc7\x48\x19\xb6\xb0\x36\x07\x4d\x90\x9f\x3e\xe4\x91\x87\xb9\x18\x6a\xcb\x35\x2e\xd0\x19\x0f\xb3\xbd\xbb\xf3\x30\x1a\xde\x27\x1d\x74\xef\x61\x9c\xb8\xe2\x93\x87\x31\xfa\xcd\x3e\xac\x20\xab\x49\x2b\xb0\xff\x02\x55\x2f\x6d\x46\xe1\x74\xd9\x29\xd6\x93\x0d\xb1\x08\x37\x87\xc5\x80\x54\x55\x5e\x6e\x47\x36\x98\xf8\x36\x1e\x26\x12\x89\xa6\xa2\x91\x48\xcd\x08\x87\x0a\x56\x17\xa9\xc8\x2a\xaf\x97\x32\xa3\xd8\xec\x25\xeb\x9f\x44\xc6\xa3\x97\xc9\xb2\x9f\xc9\x2c\xa2\xf2\x29\x9d\x6a\x1b\x99\x7c\x22\x15\xaa\x55\xa5\x1d\x24\x55\x9e\x4c\x27\xf3\xfe\x56\x18\xa4\x41\x29\xb5\x6c\xa8\x99\x3f\xcb\xa7\xf5\x41\x60\xb6\x58\xe8\x8f\xe8\x61\x5c\x8d\xf0\x1e\xf2\xff\x8c\x33\xbf\xc0\xff\xb8\x87\x09\xcc\x64\xd0\xa8\xd4\x1a\x28\xd4\xab\x55\xe5\xb8\xc2\xca\xcb\x85\x51\xc5\xd1\x4c\xa2\x39\x1a\x60\xbd\x18\x6c\xc5\x23\x23\x6a\x2c\x8b\xf1\xea\xe6\xfd\x7b\x7b\x98\xfb\xd5\xcf\xa5\x87\xf9\x93\x46\x78\xdd\x23\x0f\x93\x26\xee\xf8\xef\x3c\x4c\xb9\x5c\x9f\xd4\xcb\x15\x6b\x92\xcf\x44\x50\xa9\x41\x6a\x09\x3d\x90\x46\x5d\xc5\x86\xda\xd3\xa2\x3a\xeb\xbf\xac\xa3\x75\x80\xf5\xc6\x98\x2c\x66\x89\x09\xd4\xbb\x93\x8c\xd5\x18\xf1\x54\xcb\x58\x0c\x17\xa3\xd0\x53\xb8\x94\x5f\x17\xd2\xf3\x48\x8f\x69\x5c\x5b\xc1\xb6\x19\xd5\x42\xde\x9f\xae\x64\x22\x21\x08\xb7\xa0\x29\xb9\x66\x48\x0b\x29\x8c\x84\x30\xa1\x01\x20\x37\x85\x60\x26\x42\xb6\x4d\x2d\xca\x6c\xaa\x51\x6c\x98\x98\xdb\xc0\xb6\x38\x37\x89\x85\x4c\x6a\x09\xb2\xf5\x30\xd8\x23\x0f\x73\x31\x12\x91\x73\x80\x4e\x9f\xef\xfd\x7a\x77\xef\x61\x38\x24\xfb\x9c\x6c\xee\x3d\x8c\x73\x95\xe4\xea\x39\x4c\xbe\x57\x08\xb9\xeb\x95\x67\x3c\x4c\x6a\x00\x32\x2a\x38\x91\x7d\x5a\x1f\xf7\xa7\x93\x74\x22\x5f\xc9\xa6\x56\xd9\x52\xee\x25\x64\x68\xc5\x74\x29\xd8\x88\x0e\xed\x3e\x2d\xb6\xca\xcc\x36\x7b\x38\x97\x6b\xab\xf8\x20\x9f\x99\x76\x61\xa4\x5f\xa8\xa8\xf2\xd2\xaa\xd7\xe0\x78\x52\x45\xc9\x18\x8c\xe5\x8d\x04\x23\x24\xb6\x00\x8f\xe8\x61\x5c\x8d\xf0\x1e\xf2\x3f\xbe\x6a\x76\x9f\x39\x4c\xb0\x12\xde\x2d\x0a\x3e\xe6\x1c\xc6\x75\xfd\xfe\x1c\x0f\xe3\x76\x84\xd7\x3d\xf2\x30\xa9\xb2\x3b\xfe\x3b\x0f\x33\xb3\xf3\x90\x24\x97\x2f\x46\xaf\x3d\x93\x68\xb1\xe8\x05\xca\x64\x1e\xa7\xe9\xa7\x61\x66\x3e\x8d\x2f\xd3\x89\xae\x6c\x3d\x19\xbd\x64\xa4\x34\x12\xab\x9a\xc9\x9f\x12\xa4\x6d\xe9\x08\x95\xca\xd5\x46\xa4\x42\x4b\x11\xd8\xb2\xab\xb3\xa5\x51\x1f\xda\x65\x2b\x30\x19\x8c\x3b\x4d\x3b\xe4\xf9\x1c\x86\x52\xa2\x24\x42\x02\x62\x65\xd8\x00\xda\x26\x31\xb0\x24\x16\x03\x06\x15\x52\x21\x6e\x63\x4d\x18\x1c\x00\x8b\x1a\xcc\x92\x04\x48\x26\xb8\x26\x29\x56\x86\xc5\x35\x1b\x68\x5b\x0f\x43\x3c\xf2\x30\x17\x03\xb5\x38\x87\xec\xf4\x3e\xe3\xdb\xdd\x9d\x87\xa1\x74\x9f\xb2\xca\xbd\x87\x71\x9a\xe1\xd5\x73\x98\x9b\x78\x98\x08\x26\xfd\xfa\xaa\x90\x32\x2a\x25\x82\xf2\xd3\xc8\xac\x4e\xcb\x19\x30\x19\x8b\xb0\x39\x0b\xe3\xde\x54\xf7\x8b\x95\xbe\x6c\x67\xb2\xf3\x59\xd7\xa8\x94\xb2\x72\xcd\xd9\x2c\x58\x1b\x85\x1b\xbd\x1a\x8c\x0c\xc2\xcb\x7a\xa8\xb1\xc8\x36\x12\xd5\x4a\xcd\x9e\x18\xd6\x70\x6e\x54\xca\x0b\xf3\x11\x3d\x8c\xab\x11\xde\x43\xfe\x27\x18\xdd\x65\x0e\x73\x67\x0f\x73\xbf\xfa\xfd\x39\x1e\xc6\xed\x08\xaf\x7b\xe4\x61\x12\x0b\x77\xfc\x77\x1e\xa6\x66\xb7\x1b\x9d\x44\x78\x3a\xad\xe4\x3a\x8d\x20\xa8\xd2\x4e\x2f\x8f\x8b\xab\x39\x28\xac\x48\x49\x55\x41\xc8\x8f\xe3\xa1\x68\x1c\xb0\x27\x56\x98\x56\xd2\x74\x9c\x5b\xbf\x90\x84\xea\x16\xfa\x15\xbb\x5c\x35\x4b\x91\x66\x66\xa0\xd3\x6e\xaf\x51\xb1\x9e\x96\x53\xd4\x16\xd3\x4a\x29\xe0\x79\x28\x8b\x61\x11\xce\x2c\xc3\xb2\x00\xb2\x08\x03\x1c\x6a\x4c\x83\x26\x91\x54\x6a\x4a\x58\x4c\x71\x46\x4d\x89\x84\x69\x10\xa8\x18\xb2\x34\x29\x6d\x0d\x48\x64\x2b\x45\x0d\xcc\xac\xd7\x4a\xe0\xb7\x7d\x98\x6b\x23\x59\x2e\xef\xc3\x30\x40\xc9\x26\x73\xf4\xf9\xbb\x10\x71\x4e\x04\xa0\xc2\x8b\x03\x62\xcf\xec\xc3\x6c\x0e\x8f\x71\xb7\xea\x85\x1d\x3b\xb5\x9b\x12\x7d\xe7\x9f\x0f\x88\x6e\x3f\x59\x45\x2f\x78\xae\xe5\xed\x15\xcf\xa5\x55\x37\x6c\xc0\x52\x29\x4e\xdb\xcb\x97\x6e\x1c\x04\x86\xcd\xda\x38\x3b\xd5\x9a\x59\xc8\x50\xde\xe8\xb6\x90\x55\x2c\x95\x6d\x15\x1a\xce\x4d\x90\xd3\xa5\xdd\x0a\xd5\x96\xd3\x56\x45\xef\x4d\x52\xb3\x4e\x2f\xd0\x5f\x75\x02\x7a\xfd\x2b\x1e\xe3\x30\x38\xf0\xa4\xc7\xd0\x0f\x3e\x20\x76\x11\xc9\x60\x67\xf7\xf2\x3d\x51\x2e\x8c\xd8\xde\xf1\x77\xb7\xaf\xb2\xe1\x7f\xe0\x31\x36\xc5\xcd\x6e\x2f\x3f\xc0\xd1\x27\x78\x9e\x1f\xe5\xbc\xe6\xff\x59\x1e\x27\xf9\xeb\xfa\xe3\xee\x2b\x5d\xdc\xb7\xf9\xbe\xac\x5e\x76\xaf\xba\xf7\x48\x57\xea\xea\xe9\xba\x7d\x9b\x18\x2a\xd6\x47\x86\x1c\x2b\xff\x34\xe0\x4f\x2d\xf8\x92\xe5\x0b\xf3\x4a\x26\xdd\xe9\xa7\xa2\x2f\xf9\x4e\x3e\xda\x0e\xa8\x09\xc3\x33\x5d\xab\x8d\x1b\x81\x59\x31\xd6\x80\x89\x4c\x41\x90\x6c\x5b\xac\xf3\x3c\x30\x7a\x0a\x67\xec\x28\x8a\x94\x83\xd5\xc5\x8c\x65\xcb\x51\x23\x99\x0e\x7b\x7f\xd4\x01\x87\x10\x0a\x64\x62\xce\x08\xb6\x6c\x0d\x9b\x00\x52\x49\x25\xb4\x34\xcd\xe0\x00\x59\xb6\x0d\xa8\x45\x6c\x0a\x6c\x93\x59\x10\x70\xc8\xa4\xd4\xa8\x09\x24\x83\x40\xd8\x42\x6e\x3d\xd2\x66\xdf\x26\x50\x8b\xe6\x13\xd5\x4a\xaa\x9a\xad\xc7\x22\xa9\x4a\x29\x59\xad\xd0\x48\x34\xa6\xe3\x54\xa6\x5e\x47\x89\x7c\x32\xad\x65\xf5\x84\x5e\x0e\xe7\x23\x65\x96\xca\x05\x8b\xe1\x48\xa5\x96\xcd\x7c\xd3\x23\xb1\xd3\x69\x7a\xdf\xef\x6e\x3d\x12\x04\x60\x1f\x19\x10\xa5\xc3\xc4\xb4\x62\x0d\xea\xd9\x8a\xd5\x78\x99\xd6\x46\xa5\x58\x60\x6a\x98\x75\xd0\x0f\xf6\x6d\x33\x10\x4f\x86\x9b\xd5\x41\x6f\x1e\x89\xb7\x36\x69\x2b\xff\x1c\x8f\x14\x79\xe7\x9f\xcf\xf5\x9a\x5a\x34\xd5\x4a\x34\xc1\x52\xeb\x8c\xf4\x05\x0c\x2f\x58\x0c\xd5\x22\x6c\x55\x88\xf7\xed\x44\x7c\x11\xb1\x97\x40\x64\x66\x6d\x6a\x4c\xb3\x09\x3d\xa2\x16\x11\x3d\x63\x67\xa5\x1e\xe0\x91\x7c\xa3\x47\x47\x58\xa7\x4d\xdc\x65\xa1\x58\xa8\xdd\xb4\xcb\x99\x72\x08\xb2\xe6\x97\xe6\x30\xdf\xf6\x48\xdf\x9c\xf3\x65\x9e\xc2\x56\xcd\x4b\x8f\x74\x25\x7f\x0f\x3d\xd2\x77\xe7\x08\x98\x14\xa0\xe9\xa1\x47\xf2\x84\xff\x15\x1e\xe9\x91\xf6\xa1\x2e\x79\x24\x37\xb2\xda\xb9\x02\x4f\x3c\x92\x1b\xfe\xea\x3a\x8f\xf4\x54\x0d\x4d\xea\xb3\x70\x3f\x54\x8a\xcd\xb2\xdd\x50\xa8\x5c\x0a\x0d\xed\x86\x59\x1b\x27\xc2\xed\x06\xef\x76\xf4\x8a\x3f\x56\x02\x88\xa5\x7a\x33\x40\xba\x7a\x45\xd3\xcb\x3a\xe4\x74\xa8\xc7\x16\x95\x40\xbf\xd6\x1f\x98\xa1\x7e\x48\x95\x86\x69\x33\x9b\x0c\x88\x3c\xcc\xe7\x6a\x2f\xde\xcf\x91\x34\xcb\xe6\x54\x33\x11\x36\x35\xcb\x56\x86\xd0\x88\xa5\x99\x58\x50\xa6\x69\x94\x71\x2a\xb9\xb2\x6c\xc9\x89\x60\x86\xa1\x71\x68\x5b\x98\x30\x93\x2b\x04\x10\xb5\xa5\x25\x0c\x7b\xeb\x91\xb0\x47\x1e\xe9\x52\x24\x01\x03\x54\xe3\xe7\xe6\x48\xdb\xbb\x3b\x8f\x44\xe0\x3e\x92\xc0\xbd\x47\x3a\x13\x49\xb0\xf5\x48\xae\x56\xd5\x2e\x79\xa4\x40\xcc\x9f\x4e\xb1\xa7\xc2\xba\xfa\x32\x8b\xe4\x5a\xbc\x99\x8a\xa0\xc2\xac\xb1\xae\x4f\x3b\x9d\x51\x4e\xc5\xe6\xfe\xa1\x25\xd2\x1a\x59\xf6\xca\x40\xd4\x24\x91\x54\xc1\x4c\x2b\x3d\x4d\x17\x0b\xf1\x61\x2a\x3e\x6d\xc2\xb0\x0c\x55\xc3\x62\x3d\x9f\xc6\xec\x5e\xa5\x1a\xd7\x65\x71\x91\x7f\x44\x8f\x14\x38\x6e\x49\x77\xf3\x48\x41\xf7\xfc\xbd\xf6\x48\x27\x3c\xe4\xdd\x3c\xd2\x77\x23\x82\x75\xfd\x71\x57\x15\x8f\x7a\xa4\x3f\xc9\x23\xe8\x37\xd0\xd5\x77\xf8\xef\x3c\x52\xd8\xe6\x8b\xf9\x98\xc6\x32\xf2\x85\x94\x9f\x62\x2b\x7d\x52\x6b\x44\xe9\x20\xd3\x46\xd9\x6c\x57\x10\xe5\x7f\x6a\x61\xb0\x9e\x77\xa2\x95\x52\x09\x5a\xe3\xd6\xb8\xa7\x95\x51\x78\x05\x96\x89\x70\xbb\x39\x69\xa3\x50\xb9\x30\xcc\xd4\x4b\x38\xfb\x04\xac\xa7\x4a\xa5\xde\x0c\x8c\x52\xde\x7f\xc1\x8f\x89\xc6\x0c\x93\x11\x41\x19\x26\x9c\x9b\x36\x40\xd4\xe2\x48\x13\x40\x4a\x61\x12\xc2\x88\x80\x9c\x23\x8c\x0c\x48\x81\x85\x38\x23\x16\xc4\xb6\x12\xb6\x34\x15\x25\x80\x6d\x3d\x12\xf1\x68\xd5\xee\x0b\x1e\xe9\x74\x68\xdb\xdb\xcd\x9d\x3f\xe2\xc8\x8b\xb3\xe0\xee\xe8\x8f\x0e\xd6\xec\xc2\xc9\xc0\xfc\x89\xaf\x53\x50\x8d\x16\xcb\xe0\xd3\x24\xd1\x0a\xd7\x73\x7d\xa3\x93\x12\xb5\xa2\x59\x9b\x9a\xd3\x61\x3a\x6e\xa9\x29\xb5\x5a\xcd\xae\x56\x4f\x54\x12\x6b\x7d\x50\x28\x36\xeb\xa5\xb9\xbd\x1a\xc6\x13\xc9\x84\x95\xef\xd7\x18\x9b\xb5\xd0\xf0\x69\x1c\x15\x49\x96\x88\xf7\x9b\x0f\xb9\x66\x77\xb5\x3f\xba\x92\xbf\x87\xfe\xe8\xda\x35\xb3\x6b\xfd\x91\x27\xfc\xaf\xf0\x47\x8f\x14\x47\x71\xc9\x1f\xdd\x73\xcd\x4c\xbf\x81\xae\xbe\xc3\x7f\xe7\x8f\xf2\xc3\xa8\x5f\x5b\xa7\xe7\x15\x36\x08\x85\x53\x6c\xd1\x0f\x17\x9a\x4f\x8d\x59\x7a\x0e\xad\xc4\x52\xc1\x15\x6a\x2e\x5a\x90\xe1\x1e\x8a\x06\x4b\xd3\x66\xaf\x3c\x48\x07\xad\x48\x32\xd0\xca\x0a\x7f\xb2\xd9\xec\x0e\x7b\x30\xd8\xb0\xc7\x2f\x2c\x26\x3b\x6c\x62\x80\xf1\xb0\xdb\x96\xde\xaf\xd9\x59\x06\x16\x5c\x19\x44\x2a\x2e\x34\xca\x30\xa2\x8c\x60\x53\x5a\x08\x9a\x82\x28\x88\x0d\xdb\x04\x1a\x31\x30\xc2\x4a\x71\xac\x20\x81\x86\xad\x01\x28\xa9\x25\x00\xb1\xa1\xf1\x63\xb3\x60\xb7\xd9\x45\x0a\x14\x72\xf5\x58\x3c\x85\x82\x71\x1c\xc9\xe4\x49\xa0\x96\x8a\xa4\x33\xa1\x54\x24\x51\xce\xe4\xca\x28\x56\xc7\x8d\x74\xa4\x18\xcb\x66\xca\xc1\x70\x56\x2f\x56\xb5\x7c\x50\xcb\xd6\x50\xec\xc7\xe6\xf5\xf3\x6e\x08\x01\x4c\x4f\x06\xc0\xbd\xdf\xdd\xba\x35\xce\xf8\x7b\x74\x42\x34\xc5\x63\xf9\x79\xbe\x6b\x24\x51\x4c\xc7\xd5\x4a\xa7\x30\x4e\xf6\x3b\x35\x00\xec\x28\x9f\xa4\xe2\x5a\x1f\x84\x0b\x8b\x44\xd5\xaf\xd7\xb0\xfe\xee\x87\xb6\x9d\xdd\xa1\xd4\x4f\xe3\x84\x8b\xdd\xee\xc3\xa3\x94\x03\x95\xf9\x22\x22\x16\x9b\xae\x5a\xef\xe4\xcd\x5c\x09\x45\x69\xeb\x65\x10\xe8\x37\xa3\x51\xd5\x14\x09\xde\x23\x26\x0c\x0f\xca\xbd\x65\xb7\x17\xee\xc5\xc4\xe4\xa5\x31\x06\x42\x83\x11\x96\x4d\x55\x6d\xe5\xef\x93\xee\x28\x32\x8d\x3f\x4d\xe2\xa0\x0d\x5f\x52\xed\x29\xd5\x41\x62\x55\x1d\x18\xad\x7a\xaa\x4a\x87\xa1\x2f\xf8\x9e\x0f\x9d\xf6\xa3\xef\x39\x68\xf3\x7e\xec\x3d\x5c\xf1\x68\xfb\x03\x20\x05\x12\xd1\xd5\xb4\xb5\xc8\xc0\x5e\x1d\xc8\xd5\x68\x08\x45\x26\xb6\x9c\xa7\x82\xab\x2c\x9d\x06\xc2\x66\x70\xdb\x46\xdc\x9c\x8e\xb3\x83\xba\x5f\x2b\xef\xdf\x4f\x1f\xad\xc4\x05\x7b\xbe\x82\x7f\xa4\x54\x0d\x8c\xaf\xe0\xaf\xeb\x7f\xde\xb7\x23\x47\xc7\xd6\x80\x7b\x59\x64\x07\x8d\xb3\xcd\xbc\x24\x8b\x6b\x75\xf1\xda\x17\x9e\x4c\x07\xbd\x6f\xc9\xe2\x7f\xa3\x71\x10\x0b\x01\xd1\x9a\xd5\xe5\x68\xd1\x18\x06\x5a\x83\x61\xae\x68\x27\x54\x2c\x53\x48\xc0\x84\xd9\x48\x14\x12\x05\xbf\x91\xec\x4b\x91\x53\xa2\xa0\x3a\x6d\x38\xc0\x73\x3a\x4b\x24\x0b\x46\x31\x37\x0e\x66\xe2\x53\xd9\x26\x63\x95\xcf\x04\xcd\xde\x08\x91\x6a\x10\xce\xa4\xee\xf9\xea\x13\x35\x2d\x4d\x41\x0b\x43\x0d\x52\x2c\xb9\xa5\x61\x61\x02\x9b\x59\x8c\x33\xa8\xa0\x65\x42\x69\x50\x13\x31\xa2\xb0\xe2\x16\x31\xa5\x34\x98\x94\x0a\xdb\xa6\x20\x02\x23\x66\x6e\xc7\x56\x74\xdd\xd8\x7a\xe9\xb4\x42\x86\x00\x13\x27\x3f\x90\x7c\xbf\xbb\x19\x5b\x09\xd2\xf6\xfb\xf2\xee\xc7\xd6\x33\x18\x7f\x5b\x5c\x60\xcc\x43\xab\x3a\x18\x5b\x83\xb1\xbe\x36\xec\x6a\x93\x17\x60\x27\xc2\xa4\x5c\x57\xe3\xf1\x7c\x6d\x4d\x13\xcd\x45\x72\x81\xdb\xb1\x68\x1e\x85\x08\xae\xab\xaa\x1e\x7e\xf2\x27\x3a\xc6\x42\xa2\x51\xa5\xd7\x33\x16\x39\x83\x26\x55\x66\xd8\xcf\xf9\x9b\x35\x39\x13\x49\x41\x01\xee\x82\x55\x3b\x6e\xf9\x63\xe9\xe0\x63\x8d\xad\xd7\x8e\x6d\xd7\xd9\xf3\xb8\xd1\x0d\xd3\x9a\xa7\x63\xeb\x1d\xf7\x77\x2f\xae\xec\xdf\x71\x6c\xd3\x3d\x1a\x5b\xf9\x41\x9a\x88\x13\xbb\x62\xe7\xc6\xd6\x16\x9d\xb1\x44\x56\x4b\x4e\x63\xab\x42\x36\x12\x8d\xbd\x30\x8d\x63\xa3\x58\x4f\x07\x27\x19\xd2\x5a\x76\x33\xcd\xa7\x0c\x8a\xf5\x9a\x81\xdc\x7c\x55\x47\x3c\x3a\x7d\xa9\x34\x1a\x55\x1e\x42\x4f\xc5\x41\x47\x26\x3a\x7e\x12\x41\xe3\x79\x71\xae\xac\x0c\xcd\xa4\x87\xed\x98\xbd\x5c\x7b\xff\x15\xba\xad\x99\x06\xc7\x40\x60\xc8\x31\xe3\x36\x13\xc4\xe4\x1c\x03\xc3\xd6\xb8\xe0\x04\x2a\x4d\x21\x93\x30\xcb\x54\x18\x28\x06\x04\x13\x16\xe7\x86\x05\x4c\x45\x39\x37\x0d\x25\xb6\x23\x23\xbe\x6e\x6c\xbd\xb8\xc5\x8c\x00\x17\xec\xcc\xd8\xba\xbd\xbb\x1d\x5b\x19\x3f\xd8\x61\x76\x3d\xb6\x9e\xf9\x6e\x63\x5b\x5c\xac\x27\xd7\x0f\xe9\x1d\xe0\xd6\xbc\x2e\x83\xcd\x41\x4b\x8f\xcd\xab\xf3\xf6\x6a\x65\xb6\x13\x31\xdc\x1d\x89\xd5\xb0\x94\x9f\x0e\x50\x31\xd2\x31\x82\x2f\xa9\x72\x39\x17\x48\xae\xcd\xc2\x94\xb7\x66\xf1\x52\x58\xa8\xa9\xbd\xec\x85\x03\xe3\x2a\x69\xb7\x13\xdd\x71\x73\x95\x57\xd9\xe0\x8b\x3f\x1e\x35\xa2\x0a\x15\x0e\x32\xd8\xe8\x7f\xfe\xd8\x7a\xfd\xd8\x76\xe5\xd8\x5a\x9f\xa4\x07\xed\x94\x87\x63\xeb\x3d\x77\x2a\x6f\x31\xb6\xba\x1d\xdb\x74\x8f\xc6\x56\xb7\x73\x98\xb7\x35\x6a\x3d\xda\x1c\x26\x48\x3e\xa0\xc1\x31\x99\x4c\x06\xf1\x76\x41\xd0\xa4\x6d\xbe\x84\x41\xaa\x21\xba\xad\x3a\x5a\xbc\xb4\x61\x24\xb4\x28\x4e\x70\xd8\xb0\xe3\x46\x3b\xbc\xcc\xd5\xc6\x35\xde\x28\xe8\x12\xce\xe2\xc3\x76\x23\x49\xd2\xdd\x58\xa7\xf9\x32\x5f\x05\xfa\xcb\xc1\xb4\x9b\xff\xea\xd7\x71\x7f\xfb\xdb\xef\xbf\xff\xed\xf7\xdf\x7d\x19\xd9\x57\x7f\xf8\xe4\x64\xa2\xa6\xcf\x93\xa9\x9c\x4e\x0e\xff\x7e\x1e\x75\xd5\xea\x5f\xbe\xd2\x6a\xa4\xfe\xf0\x05\xb3\x99\x62\xa9\xa0\xc7\x33\xa5\x7f\xf9\x8a\x66\x4b\xf5\xe5\x1f\xbe\xd1\xcc\xe8\xb5\xcd\x7f\xf9\xb2\x8b\x81\x1a\xff\xe1\x7b\xa5\xf8\xb7\xbf\xe9\xa9\x52\xb8\xe0\x2b\xe9\x81\x54\xd8\x97\xcd\xa4\xea\x87\x14\xff\xe6\xf3\xf9\x7c\x7a\x28\x74\x40\xed\x13\x43\x5f\xae\x10\x4f\xeb\x85\xba\x2f\x19\xae\xfb\xfe\xde\xb6\x3e\xd5\xb6\x39\x1c\x8f\x9e\xfb\xed\xe6\x58\x6e\xdd\x80\xe3\xda\xa3\x5a\x3b\xa8\x1e\xab\xf9\x31\xc6\x17\x6b\xff\xe6\xc9\x36\xcd\x9e\x38\x2e\xb7\xff\xf3\x6c\x0e\x2d\xb5\xfb\x73\xba\x1a\xbd\xfd\xd9\x9e\x4c\x66\x6a\xfc\xec\x49\xeb\x3e\xb2\x3d\xd6\x38\x57\x15\xf3\x95\x33\xf1\x7c\x39\xec\xfb\xfb\xfe\xf1\x9f\xbe\xfd\xf3\x6f\x7f\x6f\x5f\xf8\xa6\x68\xbc\x51\xeb\xb7\x1b\xfe\x2d\xa5\x0e\x47\x6a\xdb\x19\x9e\x47\x72\x3c\x6d\x9b\xed\x91\x1c\x1c\xb4\xe4\xf8\x6d\x8f\x5b\x76\x9c\xc9\xb9\x96\x9e\xa9\xd6\x97\x5b\x7e\x00\xcc\x8e\xb7\xfd\xd4\x03\x1e\xb7\xfe\x14\x9b\x73\xed\x3f\x5b\xb5\x8b\x12\xd8\x76\x69\x63\xb5\xe9\xed\x6f\x0d\x89\x67\x42\xe1\xda\x85\x36\x04\x0b\x61\xbd\x14\xde\x3e\xfa\x91\x8a\x2f\x9b\x71\x1a\x43\xb9\x18\xcf\x44\x7d\xc6\x74\xac\xd4\xa1\x75\x9d\xae\xcd\xd6\xc6\xae\xaf\xcf\x96\xce\xd7\x6a\x74\xc2\xae\x8d\xd5\xb3\x34\xcd\xe1\x6c\x30\x75\x5d\x9d\x3d\x89\xc3\x9a\x7c\x98\x0d\x7c\xac\xcf\xf6\xe1\x9f\xbe\xdd\x1f\xcf\x13\xf5\x32\x53\x03\xf3\xb3\xc0\x8c\xd5\x73\x4b\x4e\x5a\xd7\xd4\xec\xf5\xfd\xaf\x55\xeb\xb0\xa7\xbd\xbe\x75\xac\x36\xff\x1f\x73\xe6\xd7\xd3\x36\x0f\x85\xf1\xaf\x62\x71\x03\x48\x7d\xaf\xb8\x43\x7a\x91\x50\x71\x37\x34\x54\x58\xda\x69\x97\x51\x5a\xbb\x25\x22\xad\xad\xc4\x45\xdd\xb7\x9f\x9c\x38\xc1\x76\xec\xd8\x75\x5c\xd8\x25\xf4\xe4\xf1\xef\x3c\x39\xf1\x9f\xe3\x02\xa3\xed\x88\x17\xd7\x29\xf8\x11\x35\xb1\x9d\x3d\x13\x90\x51\x5a\xe4\xeb\x66\x3a\x20\x25\xb2\x4c\xd3\x29\xe6\xb5\x51\xff\x1e\x40\x2a\x56\x89\x06\x58\x93\x93\xb1\xf1\x66\x83\xd7\x7a\xa9\xf5\x67\xad\x1c\x4d\xc0\x45\xfd\xf0\x85\x0d\x36\x47\x91\x30\x73\xe4\x0d\xd8\x96\x1e\xc7\x0b\x80\x26\x34\xa5\xb1\xb8\x85\x96\x8c\x6e\x59\xaa\x82\x32\x31\x27\xc0\x8e\xf1\x12\x10\x5a\x96\x9a\x0e\x4c\x41\x56\x30\x25\x41\x28\xaf\xca\x57\x12\x94\x83\x80\xff\xd0\x08\x35\x7f\xd8\xe8\x4a\x7c\xed\xf5\x54\x3d\xde\x6b\x55\x4e\x46\x6e\xfe\xaf\x31\x9a\x89\x64\x5f\x63\x61\xf5\x34\xfd\xa6\x37\x13\x20\x6b\x5e\x09\x1b\xf3\x5a\x3f\x34\xc2\x4b\xd2\x55\x7e\xac\x44\x7c\x90\x55\x56\xe1\xd1\xeb\xa7\x49\x4c\x23\x47\x58\xe3\x94\x63\x9d\x80\x64\xb3\x19\xb1\x68\xf5\xa5\xbc\xe0\xea\xc8\x21\xb4\x9a\x1d\x97\xd1\xec\xd3\xf4\x5c\x90\x5a\xb8\x0f\x69\x1c\x1f\x15\x35\x5f\x4a\xa7\x9b\x71\xd8\xbc\x98\x86\x59\x5a\xe2\x82\x90\xb7\x03\x1d\x47\xa4\x6a\x79\xbf\xd1\x66\xbf\x6b\xe1\xa3\x59\x5e\xa6\x2c\xdf\xe1\x28\x84\xba\x9a\xdf\x77\x2b\x00\x27\x40\x47\x9e\x00\x31\xc5\xaf\x0b\x52\x61\x94\x66\xcc\x92\x44\x84\x79\x5b\xe8\xb8\x88\x4f\xdc\x1d\x71\xd5\x68\xee\x9e\x60\xac\xd3\xb7\x7c\x8f\xf0\x31\xd5\xb6\x1c\x55\x4a\xf6\x69\x86\x50\x89\xab\x6a\xac\xa1\xce\x01\x94\x73\x9a\xf8\x59\x3b\x19\x35\x81\x27\xb0\x8f\xaf\x83\x21\x6d\x37\xb1\xe1\x2b\x53\x05\xc5\x2e\x9c\xeb\xb1\x3f\x34\xfc\x0c\x3e\xa8\xea\xdc\xf6\xf3\x20\x07\xa8\xd8\x43\x71\xc9\xae\x88\x22\xd1\x9a\xa4\x9d\xdb\x37\xdf\x4a\x96\xc4\x63\x17\x83\x22\x1d\xb2\xdf\xb4\xcb\xed\x28\x29\xf9\xc4\xf7\x8e\xcb\x2a\x27\xfb\xf8\x46\xeb\x23\xb8\xf1\xb5\x07\xfc\x93\x11\x53\x4f\x60\xa7\xc2\xcf\x7f\x69\x0c\x67\x26\x52\xac\x7f\x12\xb4\xc4\xef\x39\x39\x54\x9f\x92\x8d\x69\x30\x67\x5a\xa6\x87\xfc\xf3\x6b\x9b\x28\x67\xcb\xa9\x1d\xc0\x99\x87\xb5\xdb\xa5\x4a\x77\xeb\xed\x59\x3e\x6d\x5d\xdd\x78\x00\x3e\xf5\x03\x57\x45\xd5\x23\x54\xa4\x2f\x7c\x68\x08\x9f\x1c\x1c\xe7\xba\xc1\xc1\xe2\x2d\x5f\x7d\x61\x2f\x76\xf7\x22\x26\x1f\xb6\xcf\x51\x36\x7d\xfd\xe0\xa3\x7e\xbd\x89\xeb\x16\xf2\xb6\xc3\x98\xae\x08\x79\x0b\x76\x79\x40\xd3\xb9\x45\xb8\xba\x42\x98\x65\x79\x51\x81\xff\xee\xee\xc0\x65\x45\x0a\x24\xdd\xa6\x5d\xde\xde\x32\x7c\x64\xd7\xd7\x13\x60\x0f\x5c\x13\xe4\x17\xd8\xf4\xe2\xed\xa1\x2b\x72\xd8\xbe\x32\xaf\xe1\x95\xd0\x61\x00\x25\x54\x43\xb8\x06\xbf\xbf\xc3\x04\x36\x45\x06\xfe\x07\x37\x37\xde\x17\xd1\x39\x4a\x37\xd2\x35\xd1\xec\xc7\xe7\x5c\x47\x8b\x61\xc1\xec\x39\x81\x8f\xdf\xe6\xdd\x15\x10\x48\xe0\x0c\x26\x70\x3e\x85\x0b\xed\x56\xa4\xfe\xf5\x79\x0e\x7e\xbd\x3c\xf0\x92\x49\xe0\x62\x99\x3c\x4e\x97\xfc\x5f\x0f\xf0\x09\x2e\x21\x98\xde\x2f\xa6\xf7\x0f\x70\xe0\x1e\x8d\x9f\x3b\xd4\x3f\x53\xad\x15\x13\xcf\x0c\x75\x1c\xc7\x25\x99\x8d\x44\xf5\x47\x6f\x1b\x19\xcd\x12\x1b\x7d\xc7\x8d\xa2\xd5\x09\x71\x94\xfd\x72\x1f\x64\x0e\x93\x0b\x6d\x97\x60\xb8\x60\x4e\x73\xa0\xdf\x54\xfa\x42\x1b\x2c\x30\xaa\x17\x86\x36\x58\xdc\xa2\xd0\x5b\x1c\xff\x82\x21\xf6\xd2\xe8\xf5\x90\x7c\xab\xe3\x85\x54\x6c\x5b\xe2\xc5\xcf\x27\x80\x32\x96\xf1\x12\x03\xe8\xb0\xa3\x60\x4d\x76\xb4\xc0\x0c\xd7\x39\xfc\x0d\x00\x00\xff\xff\x9a\xa5\x9d\xd2\x25\x61\x02\x00") - -func order_books_310HorizonSqlBytes() ([]byte, error) { - return bindataRead( - _order_books_310HorizonSql, - "order_books_310-horizon.sql", - ) -} - -func order_books_310HorizonSql() (*asset, error) { - bytes, err := order_books_310HorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "order_books_310-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0x75, 0x19, 0xce, 0xa9, 0x7d, 0x80, 0x6b, 0xbf, 0x10, 0xcd, 0xf2, 0x8d, 0x80, 0x15, 0x25, 0xfc, 0xf3, 0xd3, 0x23, 0x30, 0x9, 0x62, 0x9c, 0x1e, 0x82, 0xfd, 0x92, 0x88, 0x3b, 0xec, 0x15}} - return a, nil -} - var _pathed_paymentCoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x69\x8f\xe2\xc8\xb6\x36\xfa\xbd\x7e\x05\xea\x2f\xd5\x5b\xd4\xde\x84\x1d\x0e\x0f\xdd\xb7\x8f\x64\x6c\x03\x66\x36\x83\x19\xae\xae\x4a\xe1\x70\xd8\x18\xb0\x0d\x1e\x98\x5e\xbd\xff\xfd\x8a\x21\x13\x92\x24\xc9\x4c\xa0\xaa\xfa\x9c\xd3\x96\xba\x3a\xc1\xcb\x6b\x3d\xf1\xc4\x5a\x2b\x66\xf3\xef\x7f\x7f\xf9\xf7\xbf\x33\xcd\x30\x4e\xdc\x88\xb6\x8d\x6a\xc6\xc6\x09\xb6\x70\x4c\x33\x76\xea\xcf\xbe\xfc\xfb\xdf\x5f\xb6\xf7\xd5\xd4\x9f\x51\x3b\xe3\x44\xa1\x7f\x14\x58\xd0\x28\xf6\xc2\x20\x23\xfd\x87\xff\x0f\x73\x22\x65\xad\x33\x33\xf7\xfb\xf6\xf1\x33\x91\x2f\x6d\xad\x93\x89\x13\x9c\x50\x9f\x06\xc9\xf7\xc4\xf3\x69\x98\x26\x99\xbf\x32\xe0\xcf\xdd\xad\x69\x48\x26\xaf\xbf\xf5\xec\x29\xfd\xee\x05\xdf\x93\x08\x07\x31\x26\x89\x17\x06\xdf\x63\x1a\x6f\xf5\xbe\x16\x26\x53\x6f\xab\x9a\x06\x24\xb4\xbd\xc0\xcd\xfc\x95\xf9\xda\xed\x14\xc4\xaf\x7f\x3e\xd9\x0e\x6c\x1c\xd9\xdf\x49\x18\x38\x61\xe4\x7b\x81\xfb\x3d\x4e\x22\x2f\x70\xe3\xcc\x5f\x99\x30\x38\xe8\x18\x51\x32\xf9\xee\xa4\xc1\xde\x96\x15\xda\x1e\xdd\xde\x77\xf0\x34\xa6\x2f\xcc\xf8\x5e\xf0\xdd\xa7\x71\x8c\xdd\x9d\xc0\x12\x47\x81\x17\xb8\x7b\x91\x28\x5c\x7e\x8f\x29\x49\x23\x2f\x59\x6f\x95\x3b\xce\x9f\x07\x02\x28\x8e\xc8\xe8\xfb\x0c\x27\xa3\xcc\x5f\x99\x59\x6a\x4d\x3d\xf2\x6d\xcb\x18\xc1\x09\x9e\x86\xee\x9f\x5f\xbe\xa8\xad\x46\x33\xa3\xd7\x55\xad\x9f\xd1\x0b\x19\xad\xaf\xb7\x3b\xed\x83\xe4\x7f\xd2\x99\x1b\x61\x9b\x8e\xbc\x38\xb1\xd6\x31\x9d\xff\x79\x55\x3a\x26\xb3\x79\x1a\x46\xa9\x1f\x7f\x4c\x98\x06\x8b\x8f\x48\x4e\xa9\xed\xd2\xe8\x23\x92\x5b\x9c\x0e\xa5\x1f\x94\xfc\x80\x98\x45\xe3\x24\x74\x1c\x1a\x79\x81\x4d\x57\xd7\x65\x31\x21\x61\x1a\x24\x16\x9e\xe2\x80\xd0\xf8\xcf\x2f\x72\xb5\xa3\xb5\x32\x1d\x39\x5f\xd5\x4e\xa4\x1b\xf5\xea\xe0\x02\xbd\x61\xb4\xce\xec\xb4\x2b\x8d\x7a\xbb\xd3\x92\xf5\x7a\xe7\xe4\xa1\x97\x82\xdf\x67\x13\xba\xfe\x88\xfe\x64\xf5\xbe\xea\x67\x99\x4f\x68\x75\xe8\x07\x30\x9f\x8a\x7d\x5c\x77\x94\xc6\xc9\xd4\x0b\x68\x7c\x4d\xf3\xb3\xd0\x87\xf5\x6e\x51\xd0\x5d\x36\xb8\xa2\xf7\x28\xf4\x71\xbd\xcf\x2e\x7f\x4d\xef\xb3\xd0\x87\xf5\xee\xe5\xbd\xc0\x09\xaf\xe8\x3d\x0a\x7d\x58\xef\x2c\xb5\xe2\xd4\xba\xa2\x73\x2f\xf0\x19\x7d\x53\x2f\x1e\xcd\x53\x9a\x5e\x63\xf6\x54\xec\xe3\xba\x29\x8d\xae\xd1\xba\xbb\xff\x61\x6d\xbb\x30\xbe\xa6\x6e\x2f\xf0\x61\x7d\xfb\xac\x34\xa2\xd8\xbe\xae\xf6\x85\xdc\x0f\xd6\x7e\xc8\x94\x74\xfe\xfd\x83\x66\x2c\x1c\x5c\x51\x6e\xe1\xe0\xc3\x80\x0f\xd9\xef\x1a\xd6\x27\x91\xcf\xea\xdc\xf6\x01\xde\x57\xbb\x95\x3a\x68\xde\xc9\x9e\x2b\xbe\x98\x72\xaf\xcb\x3e\xa7\xc6\xf7\xc4\x8e\x89\xee\x1d\xc9\xe7\xc4\x75\x5d\xee\x98\x88\xde\x91\x7b\x4e\x2c\xef\xca\x7d\x08\xdf\x31\xa1\x5c\x97\xdb\x27\x89\x77\x65\x9e\x43\xfe\x1d\xc9\x6d\x1c\x5f\x17\xd9\xc7\xe6\x75\x99\x17\xa1\x70\x5d\xd4\xc2\xc1\x75\x81\x27\x57\xfd\x90\xd4\xd6\xf3\x0e\x82\x5a\xbf\xa3\xd5\xdb\x7a\xa3\x7e\x2a\x3c\x9d\xb9\xf1\x7c\x7a\x90\x68\x2b\x25\xad\x26\xbf\xd2\xf5\xe7\x97\x7d\xdf\xb8\x8e\x7d\xfa\xc7\xd3\x77\x99\xce\x7a\x46\xff\x38\x3c\xf2\x67\xa6\x4d\x46\xd4\xc7\x7f\x64\xfe\xfd\x67\xa6\xb1\x0c\x68\xf4\x47\xe6\xdf\xbb\x2e\xb3\xd2\xd2\xe4\x8e\xf6\xa4\xf9\x49\xdf\x97\x17\x1a\x5f\xde\x3c\x28\x56\x1a\xb5\x9a\x56\xef\x5c\xd1\xbc\x17\xc8\x34\xea\x2f\x15\x64\xf4\x76\xe6\xeb\x53\xff\xf6\xe9\xbb\x78\xa7\xe4\xeb\xb9\xe5\xa7\xe2\x1f\x6c\x3e\x33\xf4\x6e\x79\x5e\x70\x59\x6f\x74\xce\xf8\xcc\xf4\xf4\x4e\xe9\x19\xd6\x69\x87\xf6\x85\xf9\xa3\x96\x33\x20\x9f\x29\xfc\x2b\x25\x3b\x02\x9a\xd5\xdc\xcc\xdd\x8e\x62\x66\x51\x48\xa8\x9d\x46\x78\x9a\x99\xe2\xc0\x4d\xb1\x4b\x77\x34\x7c\xb0\x03\xbe\x15\xb3\xa9\x83\xd3\x69\xf2\x3d\xc1\xd6\x94\xc6\x33\x4c\xe8\x76\x34\xf1\xf5\xec\xee\xd2\x4b\x46\xdf\x43\xcf\x3e\x19\x20\xbc\x28\xec\xa9\x43\x1e\x8a\xb9\x73\xdd\x63\x21\x9f\x1c\xe0\x12\xe1\x7b\x2f\x3f\x4d\xba\xbf\x7f\xc9\x64\x32\x4f\xdf\x78\x76\x86\x8c\x70\x84\x49\x42\xa3\xcc\x02\x47\x6b\x2f\x70\x7f\x47\xfc\xbf\x76\x75\x53\xef\x56\xab\xdf\x76\xd2\xdb\x07\x03\xec\xd3\x0b\xc2\xa2\x78\x49\x78\x81\xa7\xe9\x25\x69\x86\x61\xcf\xc5\xa7\x38\x4e\xfc\xd0\xf6\x1c\x8f\xda\x19\x2f\x48\xa8\x4b\xa3\x67\x91\x2f\xff\x3a\xaf\xfb\xe7\x28\xbe\x93\x8b\xf8\x26\x22\x0e\x03\x81\x8c\xe5\xb9\x5e\x90\x9c\xdd\x8c\xe9\x3c\x48\xfd\xcb\xf7\x82\xd4\x8f\x53\x8b\x06\x49\xb4\x1d\x0a\x9e\x17\x73\x2f\xe3\x05\xce\x14\x6f\x47\x8c\x36\x8d\x93\xcb\x70\xf6\x82\xa3\xd0\xa7\x76\xe8\x63\x2f\xb8\x20\xc5\x71\xe7\xa0\x93\x51\x44\xe3\x51\x38\xb5\xe3\x4c\x42\x57\xe7\xc8\x9c\x29\x76\xdf\x42\x74\xb5\x6e\x0e\x8c\xa4\x5b\xab\x53\x0f\x5b\xde\xd4\x4b\xb6\x85\xdb\x97\xff\x89\x92\xe9\xf4\xda\x6d\xcf\x0d\xb6\x7d\xa1\x2d\xac\xfd\x37\x27\xbd\x81\xe7\xae\xc5\x81\xf4\xef\xbb\x61\x75\x46\x29\x69\x4a\x25\xf3\xfb\xef\x4f\x55\xf1\x5f\x7f\x65\xc0\xbf\xfe\x75\xe5\xe9\x73\x80\xe7\x7a\x5e\x15\xe0\x3d\x8d\x2f\xea\xf2\x4c\xdb\xcb\x7a\x7e\x4f\xd3\x6b\x7a\xce\xd4\x5d\xe0\x6f\xaf\xf3\x75\x60\x6c\xdb\xbf\x5b\x63\x62\xdb\x65\xdc\x87\x43\x10\xda\xf4\x34\x16\x5e\xc4\xc0\x6b\xa3\x2f\xdb\xe7\x5b\xcd\xbf\xec\x18\xef\x81\x1c\xbe\xc3\xf1\xe8\x04\x0c\xff\xca\xb7\x67\x11\x5d\xbc\x2b\x64\xa5\x64\x42\x93\xa9\x17\x27\xef\x8a\x3e\xf7\xb6\x9f\xdc\x7d\xff\x35\x99\x86\x31\x4d\x3c\xff\x8d\xc8\xdf\x25\xd6\x0b\xb1\x75\x52\xe7\x2f\x3b\xf5\xcf\xfa\xce\xea\xfb\x68\xe7\x0d\xd7\x79\x6b\x6c\xf0\x52\xcd\xb1\x14\x6f\x79\xcb\xa1\xf3\x75\x6b\x8d\x1d\x06\x5e\xbf\x3f\x07\x39\x8d\x3e\x98\x41\xf7\x33\x2f\xf6\x5b\x19\x74\xe7\xee\x38\x8e\x69\x72\x89\xcf\x7d\xac\xbe\x79\x1b\xfb\xdb\xb0\xba\xac\x7a\x16\x79\x84\x06\x6f\x24\xb1\xdd\xcd\xb7\x32\xdc\xee\x66\xc6\x0e\x53\x6b\x4a\xb7\xfe\x46\xbc\xdd\x8c\xe4\x43\xb3\xe8\x49\x0d\x1f\x86\xac\xfb\xb2\x9c\xd5\xeb\xa1\x80\x6f\xf8\xc6\xe1\xc9\x03\xc3\x67\x8f\x3e\xf1\xfe\x96\x43\xec\x3b\xec\xb7\xfa\xc3\x7e\x58\xbf\x77\x07\x6f\x76\xa9\xe1\x47\xaf\x22\x37\x8c\x92\x67\x36\x54\xad\x20\x77\xab\x9d\x0c\x38\x6f\x36\xe9\x2a\xc1\x49\x42\xfd\x59\x92\xd9\x86\x45\x9c\x60\x7f\x96\xd9\x76\x99\xc2\x74\xff\x4d\x66\x13\x06\xf4\x75\x63\xeb\x60\x6f\x9a\x46\x27\x4d\xed\x5b\x16\x92\xf5\x8c\xbe\x5f\x29\xfb\x69\x89\x13\xbd\xaf\xd3\xfe\xb3\xc5\x37\x6a\xe7\x30\xb3\x11\x46\xe7\x95\xfa\xfb\x8e\x89\xff\xca\x80\x7f\x65\xe4\xba\x9a\xd9\x7f\xfc\x7f\xfe\xca\xf0\x08\x41\xf4\xaf\x8b\x75\x75\x3a\x0c\xbb\xb9\xca\x4e\x67\x79\x4e\x73\xee\x1b\x6c\xec\x27\xda\xb6\x51\x77\x11\xd0\x76\xec\x78\x07\x94\x38\xb5\x0e\x20\x22\x1a\xbf\x68\x80\xe0\xc5\x1e\x63\x44\xf1\x73\x2c\xbd\xc6\x73\x32\xe6\xbd\x15\xd3\xc9\x64\xdd\x07\x5a\xc6\x3d\xb0\x79\x4c\xaf\xb5\x30\xaf\x71\x9e\x8c\xe1\x6f\xc5\x79\x54\xf1\x71\x9c\xaf\x1a\xb9\xb3\xfb\x34\x58\xd0\x69\x38\xa3\xef\x34\x69\x47\xd3\x77\x34\x44\x27\xd3\x1d\x77\x50\xf0\x34\x5f\xfb\xfb\x47\xea\xe1\xe8\x45\xef\x11\x31\x7f\xa3\xa1\x79\x49\xc2\xd3\x3c\xf0\x0b\x8d\xe7\x44\xbc\xb0\xf6\x26\x19\xc7\x39\xa2\x9b\xc9\x38\x4e\x8a\xff\x7e\x8c\xdb\x97\x83\xb7\x0b\x31\x75\x2d\xba\x4f\x66\xb8\x6e\x45\x75\xb2\x04\x70\xcb\xb0\x6b\xd7\xe2\x5f\xc9\xd4\x5e\x1c\xa7\x34\xfa\xb8\x2a\x12\xda\x17\x47\xa7\xaf\x68\x49\xa6\x9e\xef\xbd\xd1\xa3\xb8\x3a\x16\xfc\x95\xa3\xaa\x13\xef\x3c\x59\x55\xb9\x69\x14\x75\xfa\xfc\xa3\xc6\x51\x27\x3a\x6f\x1f\xff\x5c\xd3\xba\xaf\xb4\x33\x4d\x87\x9a\xfc\xaf\xcb\x81\xf7\x62\xba\xf7\x66\x27\x3f\x5d\x43\xdb\xbb\x79\xb2\x7a\x91\x8a\x3f\x30\xde\x38\x77\xc0\xd5\x6e\x95\xf2\xcd\xbb\x64\x84\x03\x97\x5e\x1c\xd8\x9f\x92\x73\xba\x6c\x77\x7b\xae\x3e\xce\x9d\xdf\x4e\xd1\x4f\xe6\xc7\x0a\xed\xf5\x25\x72\x92\x55\x44\xe3\x74\x7a\x31\xbb\x27\x2b\x9f\xbe\x3b\x9e\x3b\x2e\xb1\xde\xce\xe7\xd9\xba\xc5\xad\xa4\x9e\xad\x38\xff\xfe\x21\xe2\x0e\x0f\x5d\x63\xef\x20\x72\x89\x88\x8f\xb9\xdd\xd9\x0a\xf7\x2d\x44\xa9\xdb\x91\xb5\x13\x46\xef\x4c\x86\x66\x54\xb9\x23\xbf\xc3\xd9\x75\x95\xf1\xa7\xf5\xe9\xf5\xb6\xd6\xea\x64\xf4\x7a\xa7\x71\x9c\x54\x34\xe5\x6a\x57\x6b\x67\x7e\xff\x5a\xcc\xb7\x9a\x83\x92\x5e\x65\x15\x1d\x16\xea\x06\x97\xef\x57\x0b\xb5\xba\x5a\x2d\x94\xbb\xf5\x66\x97\x2d\x0d\xe0\xb0\x56\x68\x97\x1a\xf5\xae\xa2\x35\xe4\x76\x4f\x30\x14\xa1\xd1\x67\x4b\x5f\xbf\x65\xa4\xc3\xc5\xed\xff\x87\x00\xf8\x96\x41\xdf\x32\xe0\xdb\x9e\xe5\xcc\xd7\xaf\xdf\x32\x5f\x65\x43\x96\x65\xf9\xaf\xbf\xbe\xee\x6e\xb0\x4f\xf7\x8e\xff\xfe\xeb\xcf\xf7\x10\xca\xa8\x97\x6f\x0e\x64\x34\xe0\x7a\xb2\x56\xea\xf7\x5a\x6c\xb7\xd2\x60\xbb\x0d\x2e\xdf\x2d\x96\xba\x86\xc0\x69\xdd\x66\xa5\x51\x67\x8d\x92\xc9\xf5\x5a\xa5\x86\xde\xaa\x57\x2a\x25\xf6\x88\x70\x0b\x4c\x44\xa2\x24\x41\x0e\x49\xf0\x5b\x86\xb9\x82\x10\xde\x82\x50\x31\x9a\x83\x62\x89\xab\x20\xa1\x9f\x57\xb5\x7a\xa5\xd2\x47\xa8\xa2\x76\x7a\x8d\x4e\x05\xf5\xd4\x5e\xcb\x68\x94\xd8\x6a\x49\x53\xfb\x50\xab\x98\xba\xd1\xaa\xd6\xb4\x76\x31\x5f\x7c\x46\x28\xbe\x40\xc8\x5d\xe7\x90\xbb\x09\x21\x0b\x8d\x02\x5b\xea\x6a\x88\x95\x6b\xfd\x6e\xa1\x5b\x82\xf2\xa0\x2c\xf7\xfb\xc5\x7e\xdf\x64\xcd\x52\x7f\x30\x68\xf1\xda\xa0\xaf\x75\x9a\x15\xb5\x3f\x6c\xcb\x3d\x5e\xe8\x37\xb8\x9f\x88\x30\xdf\x2f\x1a\xe5\x9e\x59\xed\x35\x06\xa5\x42\xd5\xec\x54\x7a\x26\x2a\x14\x4b\x32\xac\xd6\x07\x03\xb6\x6c\x54\x6a\x42\x43\x2e\xcb\x5d\xcd\x28\x74\xf9\x6a\x53\x69\x6b\x05\xb3\xdf\xa8\x3f\x23\x14\x5e\x20\x44\x27\x35\x79\x01\x21\xba\x89\xc3\x7e\xa5\xc8\xb7\xea\x5c\xa3\xae\x6b\x4d\xa5\x56\x2f\xe4\x05\xc8\xca\x1c\xe4\x87\xa8\x59\x57\xdb\xad\x6a\xb1\x57\x11\x8a\xf9\xaa\x52\x33\xaa\x7a\xa1\xc1\xb5\x05\x6d\xd0\x33\xbb\x6f\x73\x78\xcd\x0f\xf9\x8b\x08\xdf\xc8\x0d\xe7\x73\xaa\x77\xa4\x99\xb7\x67\x4a\x3f\x9b\x6b\x5e\xce\x96\x3e\xd3\xc8\x43\x5b\x12\x1d\x04\x79\x4a\x79\xd1\x66\x2c\x56\xb0\x90\x25\x4a\x0e\x0b\xb1\x83\x20\xc3\x58\x02\xe2\x25\xcc\x72\x0e\x76\x18\x0e\x40\x6c\x03\x0b\xb1\x16\x0f\xa1\x05\x04\x8b\x4a\xd2\x96\x2a\x70\xe7\xb5\xd5\x81\x04\x16\xb3\x14\xb2\x8e\xc3\x72\x22\x06\x82\x05\xa8\x00\x1c\x9b\x71\x78\x1b\x32\x22\x61\x1c\x4c\x6c\x16\x58\x3c\x21\x40\x24\x10\xda\x48\x10\x10\x8b\x24\x91\x17\x19\x16\x61\x86\xff\xba\xab\x3f\xb0\xad\xb8\xbf\xed\x95\xef\x57\x3c\x6e\x9d\x5b\xb7\x2b\x79\x41\x0d\x54\xa9\xc4\x82\xd5\x38\x9f\x8d\x81\x9b\xc4\x4b\x7d\xb9\x61\xfa\x76\xbb\x37\xc0\xf9\x32\x2e\xb8\x5b\x79\xad\xce\x55\xf1\x66\xc6\x1a\xef\x6a\x1e\xca\x7d\x86\xdb\x89\xe5\x27\x3f\xa1\x20\x0f\xbd\xbe\x9e\x85\xfa\x1b\x8e\x0a\x1d\x09\x11\xe2\x10\xc6\xb6\x00\x10\xa1\xe8\x40\x1e\x01\xc2\xb0\x44\x60\x08\x10\x78\xc4\x10\x47\xe4\xa9\x44\xa1\x6d\x41\x82\x88\xe8\x88\x2c\x10\x91\xc8\x31\x94\xc3\x0c\x03\xb7\xed\xcf\x43\x9c\xdd\x22\x22\x82\x96\xc0\xf3\x2c\xe0\x78\x81\x23\x22\x47\x44\xcb\x82\x94\xc5\x10\x49\x0c\x94\xb0\x48\x20\x82\xc4\xe1\x30\xc7\xd9\x50\xb4\x11\x12\x18\x0e\x71\x3c\x61\x79\x24\x61\x04\xbf\xee\x9a\x5d\x06\x21\x09\x09\x92\xc0\xf3\x07\x8f\x55\xd8\xe6\x70\xcc\xd4\x53\x14\x02\xab\x2c\xf4\xb8\x60\xdd\x58\x74\x57\x45\x68\xce\xc2\x49\x76\x51\x90\x1b\x89\xc2\x54\xd8\x9a\x90\x17\xf8\xe1\x28\x70\x2c\x4d\x9d\x95\x9a\x03\x9b\x43\x81\x41\x3a\x42\x7f\xe2\xe8\xb5\x65\xbb\x2f\xb9\x05\x55\xca\x3a\x3d\x9c\x08\x0c\x6f\xe8\x3d\xb2\x63\xb8\xdf\x34\x6b\xf6\xce\xa3\xf4\xe7\x7f\xf6\xe9\x2d\x3e\x7e\x5e\xca\x4d\xe3\xe0\x3b\x86\xe4\x8b\xd5\x76\x51\xb4\x50\x0f\x58\xe9\x4a\x4b\xe6\x71\x62\x1a\x1b\x41\x37\x73\xa5\x48\xf5\x8b\x5a\x62\xcb\x9c\xaf\x68\x6a\x7f\x2d\x8e\x3a\x09\x3b\x70\x5b\x41\x47\xef\xe8\xe9\x86\x9b\xd7\x87\x1a\x9a\xd7\xea\x9d\x0d\x98\x69\x80\x63\x4c\xd2\x35\x8b\x4b\xbf\x87\xbb\xcb\x9d\xa9\x0b\x1e\x5d\x02\x97\xbc\xe2\xc9\xa3\x55\x50\xfe\x81\xbe\xf7\x63\xae\x0f\x7a\x34\x95\x24\x81\x08\x3c\x86\x9c\x20\x59\xa2\x44\x58\x87\x50\x11\x43\x2a\x30\x90\x73\x20\x74\x28\x45\x9c\x2d\xd8\x88\x81\x3c\x6f\x59\x92\xc3\x10\x09\x72\x44\x64\x21\x62\x6c\x8b\x05\x78\xeb\x8d\x8f\x88\x0a\x02\xb6\x29\xd6\xe6\x31\x22\x88\x5a\x12\xe2\x81\xc4\xf3\x84\xe5\x6c\x28\x38\x94\xe5\x2d\x56\x84\x94\xb5\x24\x96\xb5\xb0\x20\x31\x16\x20\xd4\xb6\x18\x86\xb2\x0e\x00\x8e\x23\xed\xd2\x37\x3c\xf1\x68\xe1\xc9\xa3\x37\x59\x73\xd3\x5c\xda\xb1\xec\x72\x22\xdb\xad\x69\x31\x21\x79\xb6\x4b\xb2\x45\x9e\x36\xad\x66\x61\xdd\x74\xdd\xd1\xc0\xa0\xed\x91\xb6\x1e\x42\x6d\x82\x86\x7a\x85\x71\xaa\x5a\xbb\x4f\xaa\x53\x2d\x07\xc0\x46\x8e\x01\xaf\x48\x74\x32\x63\xca\x56\x8e\xa5\x51\x7d\x4d\xd2\x9d\x1b\xed\x3d\x7a\x79\x64\xbc\xed\xf7\x06\x03\xa0\x75\x27\xf9\x5e\x8d\x73\x73\xd9\x49\xe0\x76\xbd\xf1\x52\x37\x85\x46\xa4\xa0\xe1\x24\x57\x2b\x0d\x8a\xe5\xb1\xa6\xc5\x50\x06\xab\x71\x6f\x46\xfa\xd1\xb4\xa7\xf4\x2c\xa5\xd3\x71\xb2\xe5\xa8\xa2\x72\xd1\xc4\x4b\x83\x89\xa5\x36\xd8\x55\xc9\x13\xe5\x1c\xda\x6b\xae\x5d\xf0\xd8\x86\x76\xa9\xd6\xff\x17\x78\x2c\x07\xa9\x85\x81\xc3\x52\x89\x93\x30\x11\x25\x07\x60\x56\x72\x20\xb6\x04\x16\x70\x18\x61\xd6\x61\xa1\xcd\x00\x8c\x25\x8c\x28\xa0\xa2\x85\xa1\x6d\xd9\x14\xf2\x98\x17\x25\x9e\xdb\xe5\xcf\x47\x78\x3d\x61\x39\x24\x70\xdb\x4c\x2b\x52\xc2\x11\x6a\x49\x3c\x63\x13\x8a\x19\x07\x39\x00\x70\x02\x96\x90\x8d\x24\x4c\x2c\x0b\x8b\x94\xa7\x8c\xc4\x63\x20\x4a\xc8\x61\x6d\x87\x25\xa2\xb8\xf5\x7a\xee\xc4\x63\xc5\x27\x8f\xcd\xfa\xfd\x15\x1b\x02\x6a\x79\xa4\x2a\xf2\x95\x66\xa0\x01\x71\x93\x4b\xcd\xba\x63\x6a\x2c\x16\x82\xd5\xba\xd3\xd1\x75\xa6\x64\xe9\x95\xd6\x4a\x5b\x27\x52\xdb\x9e\xa0\x65\x76\x2d\xb5\x48\x3d\x46\xc5\x54\x5f\xc1\x39\x6a\x2b\x26\x4b\xaa\xdd\x99\x10\x26\x5d\x50\xce\x76\x06\x3b\x86\xb7\x1e\x4b\x4f\x18\x1f\xd2\xa9\xde\x6c\xc3\xd8\x18\xc9\x4a\x5a\xd1\x27\x31\xe4\x78\x06\x89\x2d\x58\x96\x98\x49\x34\xcf\x96\xc5\x1c\xf5\x8b\x93\xd5\xa2\x1d\x29\xad\x7e\x3b\x5c\x72\x82\xb6\x89\xa6\x23\xd8\x08\x9d\xfe\x32\x5f\x9a\x9b\xcc\x30\xaa\xa6\x21\x4a\x8b\xbd\x50\x9f\x3a\x55\xa7\xaa\xbb\xbb\x1c\x6f\x5c\xf0\xd8\x6e\xf7\x52\xad\xff\x2f\xf0\x58\xc4\x4b\x82\x48\x6d\x24\xf1\x0c\xb5\x1d\x28\x8a\x2c\x43\x2c\x16\x48\x90\xb5\x6c\x87\x15\x1c\x8a\x00\x66\x19\x8e\x61\x19\x96\x03\xac\x8d\x2c\x07\x61\x16\x08\x58\x60\x6d\x44\x24\x1e\x6d\xbd\xed\x11\x5e\x4f\xa8\x2d\x3a\x22\x16\x28\xb5\x05\x0a\x18\x8e\x05\x80\xd9\x66\x63\x69\xeb\xd9\xac\xc0\x43\xc4\x42\xc8\x70\xc8\x16\x10\x4f\x2d\x1b\xb0\x90\xa5\x36\x81\x58\x60\x30\x2f\x31\xfc\xb6\x7b\x8b\x4e\x3c\x56\x7a\xf2\x58\xd0\x8c\xc2\x66\x75\xd6\xc6\xeb\xb2\x58\xa9\x38\x8d\x88\xb8\xed\x69\xb8\xd0\x25\xad\x32\xc7\x7d\x97\xaf\x86\xd2\x82\xd6\xe7\xb8\x3c\x2c\x77\xda\xf2\xb0\x86\x26\x65\xac\x8f\x61\xc1\x9f\xfb\x8a\x46\xbc\x9e\xd6\x69\x65\x8d\x5c\x23\x96\x04\x47\x37\x39\xb9\x81\xcd\x56\x79\xb1\x4f\x6f\x3b\x8f\x3d\x71\xa2\x9a\x37\x33\x5d\xd5\xaa\x36\xf2\xcb\x56\x38\x2d\xe5\xe3\x4e\x3b\xf6\x57\x85\xfa\x86\x76\xfa\x50\xb6\xe7\xc3\x76\x3f\x81\xd5\x62\xad\xe0\x8f\x1b\x6c\xd3\x0b\x84\xc4\x71\x0b\x8a\x9c\x5f\x37\x3d\xe2\x8e\xcb\x6c\xbd\x5d\x5b\xb5\x6c\xbb\xc7\x4b\xf2\xb8\x9a\x2c\x79\x82\x71\x6b\xb8\xf3\xd8\xee\x05\x8f\x35\xb9\xb3\x0a\xcf\xcb\xff\x3b\x3c\x56\x62\x79\xdb\x61\x19\x01\x61\x4e\xa0\x82\xc3\x11\x44\x59\x01\x42\x41\xe2\x89\x65\x71\x98\xf0\x96\x68\x21\x80\x28\x67\x63\x11\xf1\x12\x01\x36\xcf\x8a\x9c\xc4\x58\x92\xcd\x08\x0c\x72\x76\x83\xa9\x07\x78\x3d\x11\x11\x02\x92\xe5\x60\x01\x70\x16\x8b\x2d\x51\xb4\x1d\x01\x3b\x12\x85\x70\x9b\x87\x05\x5b\x14\x05\x46\x00\x1c\x03\x6d\xe8\x58\x90\x73\x18\x81\x17\x45\x49\xb4\xa8\x23\xf1\x58\xa0\x5f\x77\x83\xe6\x27\x8f\x15\x9e\x46\x66\x0a\x83\xfb\xe3\xa4\xd7\x2b\x25\x22\xe7\x8e\xd6\x6b\xa5\x53\x91\xc4\x20\x37\x55\xbc\x42\x5e\x6f\x1b\x0a\x63\x49\x58\x2f\xcd\xd6\x0c\x99\x4e\xa7\x9e\xcf\xcc\x59\x83\x81\xd6\x68\x64\x0a\xec\xa0\xec\x8a\x93\x38\x32\x84\x51\x43\x64\x67\xeb\xec\x60\xee\x4d\x55\x5d\x16\xa5\xb5\xb6\x73\xa3\xbd\xc7\xba\x47\xc6\xed\x70\x56\x9c\x0f\x73\x05\x77\x23\xae\x5c\x89\x71\x94\x65\x27\x5e\xac\x74\x3f\x96\xd2\x49\x4f\x80\x4a\x89\x2a\x49\x3e\xad\xfb\xf5\x5e\x55\x37\x0d\x3f\x37\x5b\xb6\xd7\x73\x6e\xec\xd0\x45\x30\x6e\x5a\x7a\x89\xd5\x49\x3f\x9f\x6f\x76\xb2\x9b\xce\xca\x0e\xbd\xc1\x62\x31\x9d\x3b\x3b\xfd\x83\x0b\x1e\xdb\x27\x67\x15\xfe\x3f\xc2\x63\xdf\x98\x97\xb8\xb0\x11\xe8\xb3\x13\x12\x87\xcd\x40\x8f\x98\x72\x62\x9e\x86\xfd\x5d\xd3\xec\x1e\x1c\x20\x6c\x2e\x07\xb9\x82\x9d\x23\xfa\xba\xde\x9d\xe7\xe8\xbc\xd4\xd8\xcc\xe6\xc2\xc0\x0e\x97\xc4\x69\x6f\x26\x25\x67\x58\x30\x5b\x4a\x85\xd5\x26\x7f\x7d\x7d\x7a\xde\x34\x3b\xad\x43\xe1\x13\xcb\xed\xb7\x78\x4d\x08\xd5\x2a\xa8\x1a\xd9\xe5\xa0\xad\x48\x9b\xfe\xa2\x6f\x76\xe0\xca\x6b\x7a\x83\xb4\x6d\x31\xea\xc2\x37\xaa\x54\xdc\x3e\xcf\x3c\x4d\x66\xec\xd0\x30\x4f\xb3\x11\xfc\xdb\x14\xbe\xde\x3a\x73\xc7\x3c\xd1\x9b\x7b\x3b\xee\xd3\x79\xbe\x3d\xe3\x0e\x6d\x6f\x6c\xae\xb8\x43\xe3\x1b\xdb\x20\x3e\xeb\x87\x27\x5b\x21\x4e\x26\x17\x3b\xad\xd6\xc0\x90\xfb\x85\x7c\xad\xd8\xab\x9b\x4d\xc5\x2c\x09\x72\x57\xcb\x23\x41\xe9\xb5\x58\xbd\x63\x36\xbb\x95\xee\x40\xab\x2b\xed\x2a\xdb\x10\x1a\x6c\xb5\xab\xd5\xf2\x0a\xbb\x1f\xdc\xef\x7d\xa9\x42\x06\x9c\xab\x20\x23\xae\x0f\x93\xbe\x37\x77\xb8\x8a\xa6\x42\x2e\x6a\x01\xcf\xee\x03\xb3\x93\x2f\x7a\x93\x45\x67\x91\x82\x74\x54\x3c\x86\xdc\x6e\x2c\xae\xec\xfe\xdc\xe6\x16\xcd\x2b\xda\x52\x6c\x34\x26\x44\x1a\xc1\xb1\x6f\xe7\x57\xcd\x84\xb6\x44\x77\x93\x2f\x3b\xac\xdc\x6d\x42\x24\x0d\xe7\x70\xd1\x9f\xc9\xa3\xe1\x6e\x38\x94\x27\x52\x77\xc5\xee\x9e\x77\x9f\xff\xd9\x25\x22\x65\xf9\xfc\x59\x95\x65\x49\x39\x49\x5d\x79\x69\xa0\xc0\xb6\xaa\xc8\xed\x42\x90\x1b\x25\x95\xa9\x14\x4c\x2c\x6e\x83\xe0\xa2\xaf\x74\x20\x27\x19\xad\x72\x4e\x2f\xf0\x53\x6d\x60\xd6\x76\xea\x42\x65\x19\x17\x04\xa5\x04\xb0\xed\x2b\xeb\x54\x60\xf8\xba\xb2\x6e\x56\x87\x8d\x76\x3d\xd0\x26\xd5\xe6\x90\x13\x7a\xfc\xcc\xcd\xad\xa7\x40\x6a\x75\xfb\x6c\x4e\x2e\x7b\xed\xca\x52\x8f\x96\x92\x38\xb2\x43\x14\xd5\xa6\x20\x98\x12\x5f\xd7\x72\x2b\x12\x17\xf9\x7e\x14\x6d\xf2\xee\x5f\x7f\x9d\x37\x91\x0f\xae\x1a\x78\x57\xd5\xd4\x5e\x56\x8d\x9a\x0f\x48\xbb\x33\x9d\xb8\x91\x29\xc6\xad\xb2\xbd\x4c\xbb\x9d\x5c\xa7\x53\x53\x36\x9d\xb0\xca\xf0\xed\xa0\x3b\x5d\xe4\x86\x7c\x0c\xcb\x6b\x41\x7e\xae\x1a\x78\x96\x62\x3f\x4d\x3d\x5c\x7a\x72\xa5\x4b\x7c\x87\x19\xdb\xac\x4f\xb9\xfc\x22\x5f\x2a\xb6\xcc\x4a\xd2\x9f\xa8\x4b\x73\x99\x88\x26\xcd\x85\x12\xd2\xf2\xeb\xd0\x4c\xad\x89\x07\x0a\xe3\x89\x3d\x34\x56\x31\x6f\x54\x8c\xf2\x50\x09\x47\x59\xab\x50\x57\x04\x7e\x4a\xdc\xa5\xd5\x69\xe6\x1c\x30\xf8\x09\xd4\x73\x77\x51\x6f\x9c\x53\x5f\xd2\x3a\x15\xc8\x94\xd9\x4e\xa0\x0a\x55\xa6\xb0\x64\x37\x13\xcc\x8d\x4b\x34\x9a\xea\xe5\xfe\x70\x99\xb4\x83\xd4\x63\x3a\x46\x80\xea\xee\x33\xf5\xaf\x3a\x94\x9f\xa5\xbe\x5a\x1c\x41\x52\x5e\x8b\xd2\x20\x9e\x69\x9d\x0d\x35\x2c\x54\x18\xb2\x86\x10\x6f\xe4\x76\xdf\xcf\xd5\x41\x98\x48\x92\xbb\x52\xb4\x51\xd3\x2f\xe4\xea\x82\xaf\x76\xd5\x61\x05\x56\x10\xcf\x08\x6d\xab\x69\xd8\x12\xb3\x28\xe1\xd8\x0a\x9d\x99\xdb\x04\xc6\x20\xdb\x5f\x38\x8a\xf1\xc3\xa9\x47\x77\x51\xdf\x3d\xa7\xbe\xae\xe7\x27\x1b\xdf\x98\x86\x5e\x93\xf4\xf0\x7c\xa0\xb7\xd6\xe5\x41\xab\x5e\x42\xaa\xc8\x6f\x60\x22\x8e\xfa\xae\x8c\x66\xa6\xe6\x8b\xc6\x33\xf5\xe8\x5e\xea\x37\x9a\x07\x07\xa0\x58\x89\xbc\x41\xce\xa1\xa3\x1e\x9a\xf7\xd5\xaa\x10\x0c\x72\x4a\x81\x2c\x7c\xd6\x80\x35\x69\x9c\x8c\xad\x16\x5d\x6b\xba\x3c\x92\xb0\x34\xe3\xe5\xcd\x22\x22\xf5\x4d\x35\x19\xf0\xee\x82\x31\x9b\x4a\x77\xac\x34\x88\x12\xe9\xee\xa6\x06\x40\xe0\xd4\x94\xe5\x0f\xa7\x9e\xbf\x8b\xfa\xc1\x19\xf5\x4a\xaf\x62\xf5\xa2\xa1\xda\xb7\xd3\x62\xa1\xbf\x18\xba\xbe\xba\x6e\xaf\x13\x35\xd5\x84\x0d\x0e\xaa\xc8\x9b\x57\xba\x35\x57\xdd\x40\xbd\x7d\x4c\x38\xfc\xbd\xd4\x87\x63\x3e\x59\x96\xe8\xaa\xd4\x9f\x45\x15\xa9\x50\xf6\xf2\x7a\x7d\x51\x97\xa0\xeb\xa1\x49\x58\x23\x4a\x67\xd4\x4d\xd6\x0c\x18\xd1\x5a\xa9\xa5\xa9\x6b\xd0\x71\xd4\x4e\xb3\xda\x5b\xc7\xbc\xb4\xa9\x7a\x41\x09\x72\xb8\x9b\x4a\x4d\x86\x96\xe7\xde\xaa\x8c\xeb\xa6\x0f\x03\xf9\x40\xfd\xdb\x0d\xfb\xa5\xcd\x7d\x37\x34\xec\x4f\x1b\xfc\x9e\x2b\xd3\x41\x22\xb0\x04\x4e\x84\x40\x04\x9c\x88\x24\xc7\x11\x79\x9b\xc5\xc8\xe1\x05\x89\xb1\x28\x84\x54\x10\x2c\x5b\x00\x12\xb4\x1d\xd1\x41\x80\xe3\x24\x87\x88\x8c\x80\x25\x8e\xe3\x99\xdd\xec\xfd\x73\xa5\xee\xfc\x7b\x3f\x56\x9e\xad\xc6\x9e\x5c\x9d\x2a\x4b\xc6\x67\x68\x65\x96\x73\x43\xa3\xe9\x78\x49\xa9\x5d\x66\x9c\x96\x59\xd3\x70\xa5\x2d\x35\xb2\x42\x9b\xd7\xf6\xb3\x41\xd7\x0a\x7f\x79\x33\xdf\xa7\x0b\x7f\xdc\xd0\xf7\x5c\xf8\x29\x8e\x93\xdd\x51\x01\xfb\xb0\x65\xf7\xec\xda\x76\x83\xef\x1e\x7e\x9e\x47\xd4\x05\x1c\x87\x10\xc3\x11\x19\x79\x8b\xc3\xcd\x73\x1c\xff\x67\xb7\x2b\xe4\xb7\xc3\x8b\x3c\x7e\xfb\x23\xc3\xec\xf7\x89\xfc\x16\xd3\x68\x41\xa3\xdf\xfe\xc8\xfc\xb6\x60\x98\xff\x30\xff\x01\xbf\x1d\x6e\x90\x34\x8a\x68\x90\x54\x77\x45\xfb\xed\x8f\x0c\xff\xf2\xfb\xfc\xee\x34\x47\xfc\xdb\x1f\x99\xff\xf7\xcb\x93\xa1\xff\xf3\xe5\xd4\xec\x4e\x72\xab\x98\x02\xc0\x31\xa2\xcd\x8b\x16\xa5\x82\x05\x58\x0b\x89\x22\x2b\x21\x89\x01\x12\x63\x43\xc1\x86\x36\x0f\x88\xe4\x08\x9c\x20\x51\x28\x58\x1c\x24\x1c\xc7\x63\x91\xf2\xa2\xe8\x38\x16\xc2\x07\x44\xcf\x7a\x03\xba\x4a\x7e\xfb\xe3\xcc\xda\xbe\x30\xdb\xb2\xff\xf6\x47\x06\xbc\xb8\xf5\x7f\xcf\x9e\x8f\x03\x3c\xdb\xe2\x02\x12\x8f\x6c\xe4\x08\x48\xe4\x90\xcd\x32\x84\x85\xbc\x03\x39\x22\xf1\x84\xe1\x21\x72\x10\xc7\x58\xd8\xa1\x44\xe0\x01\xa1\x22\xe4\x05\x1b\xb0\xbc\xe4\x48\x84\x48\x80\x22\x60\xd9\xbf\x7d\xb9\x60\xe1\x0d\x0e\x80\x04\x05\x48\x19\x44\x89\x60\x61\xcc\x31\x98\x75\x80\x88\x24\xc6\xc1\x2c\xcb\x8b\x8e\x48\x05\x91\x07\x82\x48\x78\x22\x02\x41\x94\xa0\x03\x19\x42\x29\x44\x02\x6f\x71\x9c\x44\xad\xcf\x73\xc0\x7c\x7b\x7d\x2f\x4c\x93\x59\x9a\x3c\xb6\xec\x57\x19\xbe\xf3\xfa\x14\xc3\xf7\xda\xfa\x51\x5e\xf6\x0f\x07\xff\x70\xf0\x0f\x07\xff\x70\xf0\x0f\x07\xff\x70\xf0\x0f\x07\xff\x70\xf0\xe3\x38\xd8\xfd\xf5\xff\x7d\xf9\xbf\x1f\x19\x34\x3c\xbd\xfe\x6f\xff\x6e\x91\xf3\x32\xec\x07\x0d\x0c\xf8\x88\xa6\x80\x26\xcb\x30\x9a\xcc\x70\x1c\xcf\x46\x11\x8e\xe9\x05\x4d\x1d\x1a\x27\x99\xb6\x5a\xc8\xd4\xf7\xc2\x99\x3f\x33\x6d\x3a\x4b\xa8\x6f\xd1\x28\xc3\x02\x06\x7d\xc4\x90\x13\x46\x84\xc6\x64\x16\x06\x5b\xee\xa7\x38\x0d\xc8\xe8\xdc\xd0\xee\xdd\x1d\x1f\x51\xb6\x1f\xb2\x1d\xf6\xc6\xc7\x97\xcb\x7f\x18\x34\x25\x9e\xbf\xab\xce\x6f\xe7\x63\xa8\x63\xdd\xff\x36\xc2\xdb\xa1\xd0\xce\xfa\x97\x93\xda\xfe\xcd\xa1\xf4\x63\x82\x3e\x5e\x25\xab\xd8\xdb\x7c\x50\x3c\xa2\xbb\x81\xdb\x3b\xc2\x1f\x73\x85\xed\x38\x36\x26\xb3\xdd\xf1\xf9\x4b\xd7\xf3\x72\xce\x6e\xf2\x4f\x09\x8a\x0d\x5d\x4e\xbb\x55\xb5\x67\x99\xdc\x3c\xc8\x2a\x23\x59\xca\x56\x80\xad\x07\xa6\x54\xe8\x2e\x5b\xe1\xac\x0a\x04\x21\xa9\x86\xad\xe3\xda\xe1\x7e\x1a\x26\xd7\x93\x13\xe0\x2e\x5d\x6d\x34\xcc\x71\x56\x7b\xe6\x0c\x51\x31\x5b\xcb\xda\x02\xb3\x9c\x48\xd9\x66\x57\x6b\x3b\xeb\x3c\x9d\xb5\x8a\x85\xce\xf3\x8c\x40\xd9\xbb\x73\x9a\xe6\x96\x19\x85\xbc\xbc\x68\xcf\x3a\x4c\xa3\x53\x0b\x17\xd0\xe1\x4b\x8d\x3a\x1b\xd2\x41\xb0\x59\x94\x4c\xab\xd9\xe7\xb3\xf5\x0e\x58\x17\xdb\x6d\x35\x72\x56\x85\xe1\x3a\x5a\x7b\x6b\xa3\x32\xd2\x02\xc9\x9d\xf0\x33\xa4\xd7\x0a\x83\xb5\x2d\x54\x98\x12\xd3\x47\xf5\x06\xdf\x07\x79\xd3\xe9\x14\x1c\x5f\x7d\x9e\xe1\x50\x06\x77\xae\xc5\xe6\x6f\x99\x06\x33\xaa\x60\xde\x95\x3a\x93\x4d\xa5\x2a\xc1\xec\x68\x33\xb6\xe7\x25\xbf\x2c\x0a\x2b\xa6\xb7\x61\xb2\x8b\x71\x57\xaa\x8d\x26\x13\x97\x87\x62\xab\x47\xe6\x62\x18\x4f\x94\xb0\x55\xce\x0d\xca\x8d\x39\x6d\xab\xf9\x5e\x2d\xa0\xeb\xa4\x25\x99\xd9\x4e\x27\x9d\x4a\xb2\xd9\x07\xab\x3e\x72\xc1\x0e\xce\xb8\x32\x5e\xaf\xc7\xa3\x5a\xde\x34\x0d\x28\x3b\xab\x85\xb8\x42\x9d\x6c\xdb\xaf\x56\xec\xd9\xd2\xeb\xa2\x70\xe8\x4f\xe2\xb4\x40\x04\xc6\x30\x40\x54\x2a\xf9\x68\x38\x2e\x16\xd3\x4a\x33\x1b\x38\x53\xb1\xed\xa5\x0b\x58\x57\x3b\x72\xcd\xcc\xd7\x4b\x8c\x59\xb0\x2a\x72\xb9\xa1\xca\x77\xfa\x9b\xfb\x5c\xff\xcb\x7b\xd7\xbe\x77\x97\xf3\x39\xff\x35\x2a\x7a\x36\x22\x79\x18\xb7\x18\x1e\xaf\x17\xad\xf6\xc0\x6d\xab\xd6\xc6\xb1\x39\x3d\x1d\x56\xd4\x92\x3c\xe1\xcc\x2a\x49\x6c\xbd\x3f\xce\x83\x96\x2c\x26\x1a\x5c\x82\xcd\x9a\x89\xa3\xc6\x82\xac\xb9\xd9\x4a\xca\x16\xa7\xd5\x45\x47\xea\x7b\x38\x8c\xdb\xbd\xb1\x39\x4c\xd0\x72\xb7\x6e\x92\x37\x67\xb4\xc1\x0c\x07\x14\x6e\x3c\xa5\x54\xd5\xcb\xb5\x08\xae\x9d\x6c\xb7\xa2\x77\xb5\x51\x59\xae\x9a\x0b\x26\x74\x69\x50\x35\xd7\xbd\xee\x89\xbf\xf0\x63\xea\xc1\xb1\x1f\xea\x62\xa7\x38\x55\x73\xd4\x25\x50\x68\xf6\x93\x52\xa5\xb2\xe9\x99\xe2\xd2\xf4\x86\x79\xac\xa4\xa8\x8a\x76\x46\x86\xbb\x87\x4e\x96\xd0\xe4\x33\xff\x3b\xde\xcf\x9b\x66\xfd\xb0\x8b\x4f\x61\xd2\xbc\x5d\x0a\x3b\xa9\x5b\x5b\x18\x89\x2a\xe4\x47\x7a\x15\xd6\xa9\x64\x9b\x4d\xa7\xa8\x67\xcb\x1e\x2a\x2f\xba\x8d\xec\x50\x4e\x84\xfd\x8e\xc3\x82\x44\x0f\x8f\xaa\x89\xbb\x58\xaa\x69\xa3\x27\x1b\x92\xd0\x62\x5a\x9d\xa4\x6b\x2f\xeb\x6a\x69\xa6\xe6\x94\x2e\x9d\x6d\x6c\xa3\xd9\x9f\x86\x01\xf1\xaa\xe6\x4e\xfe\xb6\xe5\xe9\x7d\x01\x9c\xfe\x48\x3e\xbf\xb0\x30\x59\x4c\x96\xbb\xe2\xa9\x9c\x84\x5b\xdd\x74\xd3\xef\xd3\x7a\x29\x65\x0a\x8e\x3e\xc8\x5b\xb3\x69\x3e\x6c\x66\x2d\x26\xcf\xa5\xb5\x62\xc2\x76\x8b\xc3\x84\x1f\x37\x2b\x8b\xa5\xd9\x68\xf9\xb5\x8d\xd3\x57\x87\xb8\x94\x5f\xe8\x5e\x14\xeb\x22\xad\x3b\x59\xa9\xc0\x68\x3a\x28\x8c\xa4\x5a\x8e\x1d\xfb\xca\xd1\x1f\xf3\xcf\xf9\xed\xf3\xfe\x7d\x6d\xaa\xf7\x8d\x43\xc2\x9f\x9d\xed\x3c\x39\x28\xfc\x88\x83\x4a\xcc\xb7\xcc\x3d\xa7\x88\xbe\x6a\xdd\xd6\xd7\x6f\x19\x89\x65\x21\x14\x58\x00\x79\x11\x71\x82\x80\x44\x20\x7c\xcb\x30\x2f\x37\x0a\xf0\x57\xce\xbc\x5c\x2c\xd4\x7d\x9b\x24\xee\x38\x78\xf4\xb5\xdb\x56\xdf\x2a\x14\x3c\x2f\xd3\x49\x21\xc1\x47\x4a\x75\xfb\x59\x9e\x1f\x58\x2a\xe9\xd7\xd6\xd4\x8f\x71\xbf\xf3\x32\x81\x93\xef\xae\x84\xe9\x5b\x07\x9d\x3f\x1d\xa8\xa7\x87\x9d\x8f\x87\x90\x78\x9e\x47\x3c\xe6\x29\xb6\x29\x0b\x44\x96\x20\x41\x04\x48\x60\x58\x5e\xb0\x25\xca\x71\x08\x52\x4a\x91\x20\x32\x04\x4b\x18\x89\x18\x43\x46\xa2\x16\x70\xa8\x08\x39\x84\x1c\xfb\x70\xa6\xe2\x45\xb7\xaf\x76\x96\xf6\xf3\x5e\x2e\x0f\xaa\xa0\x5c\x5c\x27\xa3\x65\x9d\x99\x0e\x00\x5e\xcf\x42\x46\xaa\x97\x56\x8b\xaa\xb2\x6e\xa0\x24\xaf\x11\xc5\x5c\x2c\x0b\xd2\x12\xba\x49\xd4\x08\x86\xaf\xf2\xed\x85\xeb\xcd\xb3\x39\xda\x59\x33\xf4\x79\xfb\x83\x5c\x96\x9c\xe9\xfb\xa0\xfd\xd7\x0b\x9b\x97\x79\xb7\x18\x47\x64\x45\x28\x72\x04\xf1\x94\xb3\x00\xcb\x39\x1c\x2b\x20\x87\xe5\x78\x24\x02\x6c\x61\xcb\x71\x18\x4c\xa1\x25\x59\x98\x67\x2c\x00\x45\x49\x80\x48\xa0\x48\xa0\xd4\x22\x2c\xd8\xf3\xce\xbe\xe6\xfd\x17\x95\xfb\x51\xbc\x8b\x27\x7b\x05\xf4\x1f\xc0\x3b\x6b\xb1\x54\x64\x6d\x0b\x5b\x5b\xce\x2d\x56\xc0\x80\x40\x86\x03\x04\x0b\x8c\x2d\x62\x22\x59\x44\x60\x44\xc8\x38\x92\x83\x30\xb4\x6c\x5e\xa2\x04\x43\x5b\x14\x1d\x0b\x50\x82\xc8\x9e\x77\xf8\x70\xde\x6f\x2d\xf7\xa3\x78\x17\x4e\xb6\xa9\xd7\x7e\x00\xef\x94\x11\x2c\x4c\x11\x62\x6d\x0c\x18\x80\xb0\x0d\x59\x07\x58\x12\xc6\xb6\x63\x03\x87\x67\x21\x75\xa0\x40\x2d\x4e\xe4\x2d\x06\x58\x80\xe3\x08\x23\xb1\x50\x84\x3c\xa0\x1c\x42\xb6\xb0\xe7\x9d\x7b\x38\xef\xb7\x96\xfb\x51\xbc\xa3\xe5\xbb\x86\xee\xe2\x9d\x38\xb6\x28\x32\x3c\xb5\x91\x28\x10\x44\x6d\x51\xb4\x29\x06\xd4\x02\x40\x64\x44\x82\x1d\x28\x12\x20\x20\x40\x05\x81\x03\x14\x20\x9b\x42\xc2\x0a\x8c\xc0\x53\x09\x53\x2a\x52\xba\xe7\x1d\x3d\x9c\xf7\x5b\xcb\xfd\x28\xde\xb9\x93\xca\xbe\x78\x42\xe3\xde\xfc\x8e\x08\xb6\x09\x05\xc8\x21\x00\xdb\xc8\xe6\x1d\x0a\x80\x64\x89\x16\xb0\xa9\x45\x80\x0d\x6d\xc7\x86\x2c\xc5\x1c\x6b\x89\xd4\xc2\x90\x4a\x14\xf3\x22\x61\x05\x8e\xa7\x1c\x03\x9c\xc3\xc9\xae\xab\xbc\xcb\xc2\xa0\x2a\xca\xc2\x78\xea\x6a\x4d\x0a\xec\x6e\x57\x30\x4b\x44\x35\x56\xbc\x91\x5b\x4e\x4b\x73\x02\xbb\x2a\x83\x70\x19\xea\x1e\xb3\x2f\x8b\xe0\xc7\xa1\x7c\xd4\xf7\xc6\x75\x9d\x77\xf5\x3e\xfb\x3e\xb9\xcd\xfe\x87\x79\xb7\x39\x91\xb7\x2d\xdb\x06\xac\xcd\xf1\x40\x64\x04\x5e\x60\x08\x87\x11\x16\xa8\x64\xf3\x54\xe4\x11\xc1\xac\x44\x2c\x8e\xa1\x3c\x6b\x0b\x18\x3b\x02\xc0\xac\x43\x29\xb2\x20\x6f\xd3\x3d\xef\xd7\xdb\x55\x25\x0d\x61\x98\x70\x68\xae\x34\xb5\xd5\xcc\xc8\xc1\xb0\x54\xcf\x6e\x18\xa1\xb5\xf6\x62\x66\xea\xd4\x0a\x03\xdf\xe8\xb9\x51\xda\xce\x76\xe4\x1f\xc1\xfb\x2d\xf6\x7f\x34\xef\x22\xc3\x30\x12\x4b\xa0\xc8\x73\xd0\x76\x04\x48\x00\x83\x30\xc2\x8c\x2d\x08\x96\x08\x58\xdb\x71\x00\xb2\x39\x07\x01\x87\xf0\x36\x03\x44\x86\xc7\x58\x40\x04\x60\x9e\x01\x92\x23\xe1\x3d\xef\xef\xb4\xab\x29\x56\x2c\xb3\x3f\x64\xd5\x69\xbf\x87\x23\x93\xef\xae\x96\x56\x0f\x16\xeb\x65\x77\x16\x40\xb9\xad\x8c\xf4\xc2\x0c\x59\xab\xb6\xde\x73\x7f\x04\xef\xb7\xd8\xff\xd1\xbc\x43\x96\x72\x16\x66\x1c\x96\x11\x2d\x1e\x63\x96\x63\x81\xc5\x49\x02\x87\x78\xcc\x58\x40\x02\x12\xa0\x50\x84\x02\xe5\x79\x0b\x72\x12\x02\x10\xd8\x1c\xb5\x6d\x1e\xd8\xc0\x01\x48\x38\x9c\x20\xbd\xd0\xae\xfe\xa2\x72\x3f\x8a\xf7\x09\xf7\x63\x79\x07\x12\x01\x0c\x27\x60\x9e\x25\xdb\x7e\x3c\xcb\x50\x2a\x4a\x92\x0d\x08\x21\xb6\xc4\x12\x91\x41\x2c\xa2\x14\x0b\x0c\x8b\x80\xc0\x02\x96\x07\x90\x65\x2c\x88\x59\x4e\x92\x10\x15\xad\xc3\x39\xc8\xeb\x79\xc6\xcd\xe5\xc7\xa2\x09\xa5\xe5\x58\x67\xda\x91\xc4\x87\x44\x68\xf8\x51\x32\x62\xc7\xf9\x95\x54\x6d\x18\xb6\x34\x31\x4d\x4d\x8f\x06\xed\xc7\xe5\x77\xed\x3e\xfb\x3f\xda\xdf\x05\x01\xf2\x0e\xb0\x44\x5e\xb2\x29\x70\x04\x0e\x23\x6a\x0b\x8e\x68\xf3\x88\x95\x24\x6e\xdb\x65\xdc\x8e\x4e\x01\xc7\x32\x0e\x74\x08\x6b\x59\x84\x83\x22\x10\x39\x87\x65\x88\x08\x10\xda\xf3\xfe\x4e\x7e\xff\xec\xb4\xe4\xa3\x79\xbf\xc1\xfe\x8f\xe6\xdd\x11\x38\x62\x23\x4e\x04\xc0\x46\x50\x20\x80\xb7\x1d\x07\x22\x42\x38\x41\x84\x16\x15\x45\x86\xb0\x36\x2f\x00\xc2\x30\x88\xc1\x88\x27\x58\x70\x24\xc4\x08\x48\xb4\x89\xc0\x31\xc8\xde\xf3\x7e\x21\xbf\xff\xa2\x72\x3f\x8a\xf7\x1f\x9d\x67\x88\x04\x1d\x11\xf0\xbc\xe0\x40\xc1\xde\x75\x55\x24\x4a\x80\x4d\x25\xde\x71\x20\x14\x19\x9e\xe3\xf0\x36\x03\x61\x8e\x50\xcc\x10\x8b\x27\xd4\x62\x2c\x42\x09\xef\x6c\x9b\x5c\x71\xcf\xfb\x85\xfc\xfe\x8b\xe2\xfc\x22\xef\x37\xd8\xff\xd1\xbc\x5b\x88\x75\x18\xde\x71\x2c\x49\x24\x80\x13\x28\x84\x96\x44\x58\x4a\x20\x10\x45\x00\x21\x20\x36\x15\x18\x47\x44\x16\xe4\x38\x68\x63\xca\x12\x44\x2c\x91\x27\x82\xcd\xd9\x22\x87\x0e\xbb\xff\x2f\xe4\xf7\x07\xb6\x6b\x17\x97\x5b\xde\xe3\xbd\x70\x9f\xfd\x71\xf7\x36\xfb\x1f\xe5\x9d\xb1\x59\xcc\x59\x54\x60\x39\x01\xf0\x48\x74\x78\xd1\xb6\x10\xa0\xd4\x61\x25\x8a\x01\x76\xa0\x23\x89\x88\x50\x46\xb4\x10\x61\x19\xd1\x01\x90\xe3\x19\x9b\x03\x84\x13\x6c\xc2\x4a\x87\xad\xff\xd7\x79\xbf\xb7\xff\x7c\xb2\x2c\xf3\x71\xde\x8b\xf7\xd9\x3f\xad\xf7\xcf\xd8\xbf\xba\xdb\xff\xf2\xeb\x21\x3f\x3f\xb1\xfc\xa3\x67\x95\x8b\x55\xb1\x64\x2c\x8c\x89\x55\x61\x4b\x32\xec\x99\xe3\x56\x54\xf1\xc7\x7d\x00\x9c\xa2\x18\x57\x75\xc1\x07\x5a\x6b\x59\xee\xe5\xe4\xfe\xee\x90\xd7\xc9\xec\xf1\x39\x4b\xaf\x58\xfb\xc4\x59\xd3\x9d\x7c\x03\x45\x95\x53\x7d\xfb\x59\x85\x6d\xa5\xe4\x6d\xb5\x4f\x59\xd8\xe5\xa8\xa4\xb0\xed\xd5\x2c\x5f\x1d\xb6\x56\x4c\x54\xde\xb4\x0b\xd5\x32\x58\xa9\x2a\x48\x2b\xc5\x99\x3f\xb7\x9c\xa9\xda\xc9\xf6\xfb\xfa\x9c\xef\x7a\x6a\x7e\xe3\x17\x56\x49\xb6\xd8\xc8\xf6\xe7\x85\xd0\x68\xda\x51\xbf\x23\xcc\x98\xb0\x3a\xd4\x4b\xf3\x4e\xad\xf9\xf5\x5b\xe6\xeb\xd0\x1f\xf6\x66\x69\x44\x75\xbd\x5a\xa0\xb2\xb9\x2a\x07\x2c\x6d\x15\x9a\x29\xea\xbb\x64\x8e\x7b\x95\x70\x15\x44\x6a\xd6\x05\xa6\x73\x7c\x9f\xcf\x15\x0e\x8e\x9e\xf1\xe2\x38\xc5\x89\xec\xae\x75\x7b\xc4\x2c\xcf\xad\xb3\x2c\xf2\x03\x66\x79\xea\xd1\xba\x63\xdc\x61\x5f\x96\x7f\x5d\xaf\xf0\x52\xb6\xfc\xd1\x4b\x08\xb7\x07\xd9\x95\x15\xff\xfd\xf5\xd9\x15\xf7\x6b\x41\xe6\x04\x85\xf6\x66\x48\x47\x8c\xb0\x49\x44\x36\xac\xd9\x73\xca\x65\x73\xab\x20\xce\x4d\x4a\x79\xbb\xd8\x77\xa4\xbc\x9e\x6f\x0d\x1c\x73\x08\x55\xa3\x03\xf1\x72\x39\x0c\x50\x75\xee\xea\x45\xa9\x3c\x9f\x2e\x6a\x7e\x8b\xe9\x54\xf0\x8a\x84\x65\x43\x4d\xe7\x45\xa2\xb4\x49\x6d\x1b\x08\xb1\xe3\x86\x0d\x6d\xd5\x43\x55\x79\x22\x29\xb6\x53\x2e\xf6\xe4\x39\xbf\xc8\x15\xd3\x06\x4a\xfd\xe2\xb2\x51\x26\x8c\x33\x75\xd2\xc5\x49\x69\x7f\x7d\x90\xdd\xeb\xe4\xf7\x06\x59\x6d\x59\xf5\xc3\x47\x06\xd9\x4f\x1c\xf2\x7e\x28\xc8\x1e\xbc\x5e\x74\x7b\x90\xa9\x67\xe8\x5f\x39\x9c\xe5\xbb\x3e\x63\xb2\xb6\x8b\x4c\xc6\x9f\x33\x74\x5a\x23\x45\x26\x59\x8d\xdb\x83\xca\x50\x5a\x6a\x6e\xd8\xce\x63\xda\x13\xbb\x5e\x61\x4f\xd8\xdb\x41\xa6\x96\xd3\x29\x93\x54\x8b\xd5\x02\x67\xae\x96\x09\xb0\x55\xc5\xd4\x1c\x3e\xb1\xd0\x94\xb3\xd6\xb5\xa8\xe8\x2a\xb3\xec\xd4\x1c\xd6\xfc\x15\x49\x10\xe7\xd5\x1d\xd6\x5f\x25\xe3\x15\x5f\xb3\xd1\xb0\xcc\x69\x9c\x3a\x25\xb1\xc3\xf1\x9a\x3c\xca\x17\xdb\xdd\x66\x1c\x88\xce\x40\xdd\x06\x42\x65\xcd\x2b\x2c\x9f\x2e\xcb\xd5\x32\xaf\xaa\x05\x79\x1d\x94\x06\x51\x79\x51\x2a\xaa\x25\x24\xe1\x86\x84\xe9\x7a\xcc\xea\xd9\xa5\x50\x38\x2e\x0f\xfc\xfa\x20\xbb\xd7\xc9\xef\x0d\xb2\x2a\x98\xf0\xf2\x03\x83\xec\x67\xce\xa3\x7e\x28\xc8\x1e\xbc\x38\x78\x7b\x90\x9d\xaf\x78\xbf\x72\xb8\x06\xab\xe4\xe4\x06\x87\x06\x79\x15\x26\x25\xb3\xd0\x60\x5a\x50\x06\x35\x3a\x69\x8a\xe5\x16\x1f\xd4\x19\x59\xa2\x3d\xcf\x5e\xeb\xc9\xbe\x92\xae\x04\xd9\x60\xe0\xac\x1b\x91\xdf\x1c\x39\x13\x8f\x9f\x46\xcd\x6c\xa8\x38\x69\x50\xf6\x5b\x29\xeb\x3b\xab\x29\x07\x42\x34\xef\xb5\x84\x35\x33\xf0\x9b\xe2\x2c\x2c\x66\xf9\xfe\xdc\xe5\x98\x71\x45\xe9\xd5\x97\x66\xd8\x14\x18\x41\x31\xb5\x26\x15\x80\x0e\x12\xda\x5b\x74\xe8\x78\x52\xde\xbd\x34\xab\x9f\xa6\x66\x9b\x75\xb5\x42\xd4\xa9\x2e\x53\x1c\x39\xa0\x39\x18\x0b\x1b\x27\x6a\x17\x63\x23\xd6\x3a\xf9\xc9\xd8\x65\xd5\x89\x69\x1f\xd7\xfa\x7f\x7d\x90\xdd\xeb\xe4\xf7\x06\x59\x85\xcb\xd6\x07\x0f\x0c\xb2\x9f\xb9\x38\xf7\xa1\x20\x7b\xf0\x4a\xf0\xed\x41\x56\x38\x43\xff\xca\xe1\xa2\x79\x9d\xaf\xd2\x06\x76\xc7\xab\x1a\xee\x36\x25\x3e\xbf\x71\x62\x89\x02\x12\x46\xf5\x61\x7f\x93\xef\x95\x27\x85\xb0\xf2\xb4\x01\xf3\x6a\x90\xd5\x7d\x63\x64\x1b\x74\x5d\x23\xbd\x42\xaf\x29\xda\x66\x6b\xa2\x26\x85\x36\x97\x94\x74\x65\x5d\xb1\x71\x73\xd2\xe2\xb3\xb9\xaa\x90\x4d\x6a\x9b\x4a\x2f\xec\x8e\x2d\x55\xee\xc7\xa4\x35\xd0\xb3\x63\xbe\x60\xe7\xcc\x42\x17\xab\x1b\x7b\x10\xf7\x14\x39\x2e\x41\xd0\x4b\xc7\x7a\x75\x1b\x08\x1b\xc9\xcb\x5b\x49\xaf\xb4\xa2\xac\x0e\xe7\x6a\x24\xeb\xc5\x5a\xb4\x19\xcb\xb6\x81\xa0\xd1\xc8\xdb\x9c\x58\x5e\xd9\xa9\x9f\xf2\x8d\xe3\xc6\x8e\x5f\x1f\x64\xf7\x3a\xf9\xbd\x41\x56\x96\xfa\xee\xf2\x91\xdd\xc5\x9f\xb8\x12\xfb\xb1\x31\xd9\x63\x97\xfd\x3f\xb9\xcb\xf9\x64\x17\xf6\x95\x89\x8f\xdd\x7b\x10\xf2\x2d\xd3\x6c\x1f\x48\xfc\x78\x9f\xbb\x9f\x7b\xbe\x8e\xfa\xb4\x67\xfb\x86\x5c\x37\xda\x9b\xc5\x4c\xcb\x2b\x72\x7f\x11\x33\x4d\xd7\x2f\xe5\xba\x05\xcb\x91\x07\x09\x6c\xc8\xae\x3b\x68\x9a\x1d\x1b\xcc\xc6\x26\x29\x63\x13\x4e\x55\x2d\x37\x6e\x0c\x6b\x41\xb5\x30\xac\x4d\x0a\xda\xc8\xe5\xec\x69\x6a\x1a\x2b\xaa\x0e\xe5\x65\xa7\xd2\x6d\xe2\xc0\x8e\x97\xee\x2e\x28\x12\x12\x11\xae\x90\x93\x23\x93\x59\x70\xb2\xcf\xc5\x75\x5e\x54\x3b\x50\xaa\xa5\x33\x25\x6d\xa4\x63\x9e\xce\xc2\x65\xd0\x4a\x0d\x43\x7c\x46\x76\x39\xe0\x06\x2f\x2b\xf5\x45\xc0\xed\xb8\xdb\x77\xb5\x4f\x36\xa8\xdc\xd0\xea\x97\x83\x63\x5d\xbc\x71\xbd\xb1\xbd\xee\x45\xc0\x3f\xc4\xfe\x1b\xc9\xe6\x23\xf6\xcf\xa7\x4e\xef\xdd\xf2\x71\xd3\x96\xc2\x47\xdb\xff\xc4\xd4\xad\x7c\xb4\x6f\xdc\x62\xbf\x50\x30\xcd\x83\x0f\x54\x54\xb1\xd8\x5c\xf5\x1d\xa8\xd4\xc6\x66\x65\x01\xe7\xa3\x4d\xcc\xe3\x94\x2d\xe1\x5a\xa9\x04\x62\x94\x87\x6c\xcb\xec\x1a\x5e\x32\x3a\x79\x5d\x61\xfe\x18\x70\xcb\x73\xfe\x3e\x96\x90\x1e\xbb\x1f\xe6\xf6\x63\x21\xef\x26\xa4\x9b\x8e\x85\xc0\x4b\x09\xa9\xf8\x6c\xdf\xc8\x4b\x13\xbf\xd2\x63\xe7\x70\x21\x18\xce\x5a\x6c\xd6\xe8\x44\xb3\x98\x4e\x47\x47\xde\x6a\x3e\xd1\x41\x3e\x74\xfb\x51\x23\x11\xdc\x06\xc3\xb3\x86\x35\x19\xb1\x76\xbb\xd3\x75\xa8\x1a\x2e\x08\x68\xca\xd8\x19\xa9\xfd\x55\x32\x32\xe5\x69\x5c\x4d\xc7\xd3\xbc\xbf\x1e\xe7\xe5\xc1\x2e\x69\x2c\xba\xa3\x64\x61\xcb\x49\xcb\x75\xfb\xc3\xd5\xaa\xd2\x0b\x78\xdb\x0a\x87\x24\x9c\xad\x41\xc9\xaf\xf6\xe7\x0b\x52\xa9\x66\x91\x55\x4f\xde\xeb\x01\x7c\x3e\x21\xdd\xd0\x43\x7a\x68\x42\xba\xd3\xfe\x03\x13\xd2\x43\xd6\x72\x5e\x5f\x3f\x6d\x2f\xd6\xbd\x09\xe9\xb3\xf6\x0b\x66\x17\x1c\x94\x57\x7b\x5c\x01\xd0\x51\x83\x97\xd7\x92\x02\x9a\x71\x51\x73\x17\x84\x11\x18\xa6\x2b\x89\x83\x31\xe7\x57\x27\xbe\x64\x08\x68\xa2\xc0\xc5\x49\x55\xdc\x9b\x90\x1e\xbc\x51\xac\x88\xc2\x72\x62\xda\xc1\xa0\x61\xda\xc3\x79\xd2\x9f\x75\x4a\xf9\xc4\x22\x03\xe0\x2b\xbe\x43\xf2\x7a\x45\x73\x7b\xc1\x74\x51\xd0\x47\x58\xfe\x65\x09\xa9\xf0\x6c\xdf\x68\x4e\x5d\xa1\x58\x1d\x95\x5d\xb0\x12\xc6\x33\x79\xc9\x68\x4b\xbe\xc4\xf6\x0b\xfc\xba\xa5\xfb\x4e\x59\x5f\x16\x9c\x15\x90\xea\xa9\x87\xac\xa4\x51\x96\x0b\x74\x59\x90\xeb\x4e\x03\xcb\x79\xb1\x60\x0c\xa7\x68\x06\x65\xe4\xc2\x09\xaf\x96\x54\xcf\x75\xba\xf5\xae\xca\xf0\x2e\xd9\x25\x0d\xb7\x55\x6c\x2f\xb9\xa1\x0a\x61\x53\x2e\xe0\xde\x88\x81\xa9\x5c\x75\xc4\x02\xd3\xec\x36\x57\x89\xa6\x17\xe6\x33\x66\x59\x19\x18\x01\x0a\x9f\x91\x3d\x2a\x21\xdd\x30\xf9\x58\x6e\x1c\xeb\xe2\x8d\xeb\xe3\x09\xe9\x4e\xfb\x0f\x4c\x48\xf7\x2e\xea\xdf\x9b\x90\x1e\x62\xff\x8e\x84\xf4\x59\xfb\xbf\x3c\x21\x3d\x78\x07\xe5\xed\x09\xe9\xca\x32\xda\xa3\x87\x6c\x27\x09\xa9\x56\xf6\x17\xd9\xe9\xa8\x80\x8c\xe1\xd4\xb5\xf5\x79\xbe\xaf\xb6\xed\x91\x96\xb8\x11\xee\x44\xad\xf6\xd2\x8c\x90\x9d\xcb\x47\x75\x85\x15\xa9\x53\xaa\x85\xab\x41\x1d\x67\xd9\x54\x4a\xda\x9a\xbd\xea\x66\x47\xc5\x3e\x5f\x6e\xf5\x84\xa5\x5c\x80\x56\x63\x26\x8b\xd1\x6a\xb5\x92\xb5\x5d\xd2\xa8\xa5\x6d\xbe\xb4\x2e\x56\xf1\xbc\xac\x28\x60\x0a\xcc\x79\x71\x39\x29\xab\x63\x17\x22\x3f\x06\x53\xa3\x56\xef\x24\x8c\x0b\x9a\xf9\xfe\x11\xd9\xdf\x24\x21\x9d\x1c\xba\x3d\xbd\x7e\x5a\x42\x52\x6e\xb7\xff\x43\x76\x19\x7d\x76\xb7\xcb\x2f\xdc\xe5\x24\xcb\x77\x26\xa4\x5f\x3d\x64\x7b\xf0\xd6\xe2\x4f\x16\xe2\x63\x3d\xa4\x7d\xa1\x3e\xe9\xe4\xb7\x25\xb0\x7d\x45\x57\x79\xf1\xb4\xa7\xa0\x3d\xe3\x35\x14\x5c\x1a\xcd\x3c\xb3\x2e\x69\x1c\x14\xf4\x7e\x81\x94\x66\x8e\x19\x85\x2b\xa6\xdd\xc8\xd5\xcb\x89\xe2\xe7\xd9\x91\x8b\xdd\x9a\x51\x52\x5b\x6a\xd1\xa8\x95\xea\x70\x3e\x6e\x93\x4e\x63\x3e\xa7\x5a\x5c\xd7\xd2\x45\x25\x1b\x08\x3a\x67\x65\xa5\x42\x04\x5a\x30\x59\xfa\xc4\x8d\x77\x49\x46\x21\x72\x97\xfa\x55\xbd\xa2\xea\x94\x2f\x07\xc6\xa6\xc6\xb6\xd7\xf9\xee\x54\x98\x93\x76\xb7\xa4\x2b\x03\x55\xb7\x1a\x5e\x7b\xd8\x0f\xe3\x67\x64\x97\x13\xd8\x99\x13\xbc\x91\xc0\x4e\x09\xbf\x61\xcf\xc4\xdd\x3d\xaa\x07\xda\xbf\xad\x47\x75\xbe\x5d\xef\x6f\x17\xc0\xf2\xcb\xed\xab\x3f\x1d\xdf\x22\x5a\xba\x77\x27\x98\x07\xef\xa1\xff\x64\xb7\xed\x33\x09\xe6\x93\xf3\x0c\xf7\xbc\x5a\xe4\xb8\x32\xb0\xbb\x4a\xcf\x78\x0d\x75\x9c\x6f\xcb\xe9\xb4\x42\xa4\xa4\x35\x2f\xba\xd9\xc6\xc4\xb4\x2a\xcd\x0d\x17\x4e\x5b\xc6\xa0\x4b\x17\x6b\xc5\x59\x80\xaa\x3c\x9d\x5b\xfd\x22\xbf\x6e\x5a\xb3\x16\xc8\xb7\xf8\x50\xf0\x23\xcf\x6f\xf9\x62\x83\x33\xc3\x56\xbe\xa8\xcb\x1d\x23\xcf\xb1\xf5\x46\x8f\x14\x36\xb6\xb1\xdc\x25\x01\x7b\x63\x2d\xd3\x62\x40\x55\xd8\x9e\x0a\xfd\x6c\x7d\xd8\xf6\xbb\x93\xf1\x38\x52\x97\xc6\x48\xcc\x2d\xa3\x85\xd6\x90\x47\x4d\x9d\xb8\x85\xe3\x4a\xc9\xa3\x12\xcc\x0d\x3b\x1f\x1f\x9a\x60\xee\xb4\xff\xc0\x04\xf3\x77\x9a\x43\x91\x2f\x24\x98\x9f\x88\x4f\x4d\xf1\xfa\xfe\x04\xf3\xe0\xc3\x22\xb7\x27\x98\x2b\x43\xaa\xdb\x7a\x30\x77\x24\x98\xb3\x1e\xcc\x49\x82\x69\xe8\x95\xf6\x54\x35\x7c\xa9\x1b\xcd\xd9\x74\x1c\x2c\x56\xc3\x71\x71\xce\x6f\xca\x46\x40\x9a\x9d\x99\xb8\x98\x72\xb1\xa2\x70\x2d\xcc\xd5\xba\x01\x2e\x0d\x54\x3c\x69\xf5\x3b\x85\xd0\x98\xea\x05\x39\x42\x09\x08\xcb\x4b\x3b\xdf\x8e\xf9\x4e\x59\xac\x21\x93\x16\xdd\xbc\x65\xec\x57\xcd\x24\xb0\x31\xdb\xb2\x6a\xd6\xc5\x7c\x92\xdb\xf4\x6b\x2d\xae\x91\xf5\xf2\xcb\x64\xb8\x5c\xb6\xba\xd8\x8c\x67\xb9\x69\xcb\x1e\xc0\x92\x61\xbe\xb7\x75\xf8\xa7\x27\x98\x9b\x02\xfc\x81\xf6\x5f\x0f\x39\x3e\x60\xff\x41\x3d\x98\x9f\x9c\x60\x7e\x26\xbe\x87\xf4\x60\x1e\x7c\x2a\xea\xf6\x21\xd2\xbb\x09\xe6\x93\x4b\xb7\xf7\x0c\x91\xce\x7a\x30\x27\x43\xa4\x22\x37\x15\x26\x8a\x3c\x47\x78\xbe\x68\xb3\x76\xae\xd4\x49\x06\x44\xa8\xca\x58\x98\xb5\xbb\x9e\xd7\xe0\x2a\xeb\x4a\xd9\x9a\xfb\xb1\xea\x2e\xc8\xa4\xa8\xb0\xb6\x35\x22\x51\x28\x25\x64\xa1\x0c\x4b\xce\x72\xde\x31\xb3\xde\x64\x21\x96\x7c\x71\xe8\x60\x1e\x4e\x06\xcd\x89\xb1\x5f\x05\x5b\x77\xb2\xf2\x30\x10\x21\x84\x8a\x17\xc4\x2a\x9d\x2e\xc4\x8d\xdb\x6b\x55\xd6\x8a\x37\xd9\xcc\x4b\x55\xab\x11\x5b\x9b\xd8\xca\x89\x85\xe3\x86\x8b\xbf\xc9\x10\xe9\xee\x04\x73\xa7\xfd\x07\x26\x98\xbf\xd3\xb2\xb4\x7c\x21\xc1\xfc\x44\x7c\x8f\xe9\xc1\x3c\xf8\xf8\xdf\xed\x93\xc2\x57\xb6\x7d\xef\x5f\xb3\x75\x7b\xc2\xb8\x37\x8b\x9f\xe0\xb9\x38\x19\x77\x32\xc9\x5c\x98\xf6\x97\x38\xf4\x85\xf5\xb4\xdd\xb1\xd7\xb8\x21\xcc\xeb\x35\x81\x1b\x64\xcb\xdd\x89\xcc\x86\x20\x25\x42\x8f\x2d\x6c\xf2\xd3\x89\x49\xd9\x98\x6c\x82\x5a\x0d\x67\x5b\xe2\xc8\xec\x58\xd3\x06\x9a\x1a\x7c\xb6\x40\x3a\x35\x34\xd6\xa3\x9e\x31\x5f\xcd\x0b\x85\xa1\xd5\x98\xc8\xfb\x21\x54\xd2\x16\x7b\x39\xc1\xaf\xe5\x4b\xdc\x26\x25\xd5\xb8\xa6\xbb\x6a\xad\x06\x83\x12\xd7\xdb\xb4\x54\x36\xad\x16\xd6\x9c\x55\x62\xea\xa3\xc2\xb1\xf7\x75\x39\x01\x5d\x7e\xfd\xcf\x67\x27\x72\x8f\x7c\xdc\xe1\xc4\xb7\xfd\x18\xe2\xde\x0b\xb2\x4f\x27\x54\x2e\xaf\xe4\xbc\x99\x58\x8d\xdb\xcb\xdc\x40\x91\xce\xc8\xf2\xcb\xc4\xf6\x6a\x83\xdd\x3b\x89\xf5\x71\xf6\xd5\x9b\xec\x1f\x27\xcf\x1f\x78\x44\xf6\xd5\x2b\x7b\xf6\xd7\x4f\x3b\xa2\xfb\x6a\xff\xd6\x3b\xf6\x4f\x8e\x86\xff\xed\xe6\xb6\xce\xf8\xf9\xfb\xe0\x7b\x15\x63\xc7\x18\x3c\xb9\x96\x47\xd0\xbb\xcf\x9f\x6c\x13\xee\xce\x09\xa5\xb3\x85\xc0\x73\x1f\xd8\x7d\xee\xfe\xcd\xf0\x69\x6f\xf3\x79\x76\xe5\x8f\xf9\xec\x7f\x5e\xce\x7e\xbf\xc3\xf2\xe0\x73\xf3\xff\xbc\xfe\xf9\x17\xbf\xfe\x79\x3f\x02\x2a\xb5\x67\x55\xb4\x6e\x2d\x87\x03\x29\x64\x19\x35\x15\x67\xbc\x1b\x6d\xb2\x83\x7e\xa3\x58\xed\x2b\xc5\xa6\x0c\x06\xb6\x51\x6b\x49\xcb\xd9\x7b\x9d\x1b\xfd\xcc\xd1\x3f\xdd\xb0\x1c\xf5\x3d\x84\xcb\x7b\x3a\x9f\xfb\x9f\xf5\x96\x7f\xee\xe8\xfa\xe8\x7b\xd7\x46\xa7\x27\x9d\x8e\x5b\xf6\x48\xde\xbb\x03\xe1\x81\xf6\x6f\xda\x81\xa0\x9c\xbf\x5f\xe6\x6f\x37\xfa\x93\x5f\xbe\x8f\xe3\x67\xe3\xd3\x8a\xc6\x7c\xf9\x1e\xbe\x73\xfe\xfe\x4e\xf3\xff\x97\xf8\xfb\x99\xf8\x7a\x13\xde\xf8\x10\x7f\xfb\x4e\xe2\xfe\x37\x88\x7f\x45\xae\x7b\xcc\x52\x81\x71\xa9\x7c\x47\x7c\xf9\xe3\x0e\x99\xff\x76\x9d\x9e\x63\x5b\xf0\xc6\x96\x43\xf9\xa9\xd3\xfc\xdf\xb2\x53\x7a\x52\x3f\x3f\x7d\xa9\xa9\xc5\xe1\x9a\xec\x3c\x23\x17\xe5\xb3\xf6\xe4\xa4\x2d\xbb\x74\x9d\xc4\xcf\x7f\xb7\x41\xd6\x0e\xef\xe0\x76\x7f\xb9\xb7\x6f\x73\xc5\x5f\x4e\xae\x73\xfe\xaf\xbd\xa3\xe9\xf0\xb3\x53\x8f\x78\x51\xd3\x4b\x55\xcf\x63\x87\xd3\x37\x2d\xed\xf0\xc6\xc7\xfe\xcd\x85\xd9\xd2\xb7\xb5\x3c\xef\x08\x59\xca\x4d\x63\x22\xbf\xd2\xf2\x54\xc2\x7d\xc1\x30\x21\x61\x1a\x24\xbb\x9f\x92\x3a\xf9\xfb\xfb\x6c\x42\x9f\x8b\xa9\x34\xea\xed\x4e\x4b\xd6\xeb\x9d\x77\x8a\x29\x57\x3b\x5a\xeb\xc0\x4a\xa3\x5e\x1d\x9c\x6a\xdc\xfd\xbe\x95\xac\xaa\x27\xda\x5e\x19\xcc\x34\x5b\x7a\x4d\x6e\x0d\x32\x15\x6d\x90\xf9\xfd\x70\xd7\xb3\xbf\x65\xb6\x12\x01\xf6\xe9\x5b\xf0\xe3\xe7\x3f\x1e\x0b\x3c\xbe\x82\x3a\xbe\x06\xf9\x15\x50\x0b\x07\xdb\xff\x1e\x04\xcf\xc2\xc1\x25\x64\x4f\x06\x5e\x82\x0a\x42\x9b\x5e\x40\xb4\xff\x3d\xb5\x11\xc5\x36\x8d\xe2\x97\x9f\xbe\xef\x3f\xc5\x74\xfe\xfd\x21\x70\x5f\x28\xbf\x04\xfc\x8a\xf5\x4c\xb7\xae\x1b\x5d\x2d\xf3\xfb\xf3\xb7\x9f\x2a\xc9\x63\xf8\xfe\x64\x01\x5e\xd7\xc1\xe1\x3e\x8e\x47\xaf\xd0\x87\x8e\xb3\x85\xbd\xff\xdf\x83\xf0\xee\x95\x5d\x02\x7a\x62\xe6\x25\xc2\xdd\x8d\x0b\x6e\x32\xa3\x5b\x74\xbb\x7f\x1f\x04\x6e\xa7\xeb\x12\xb6\xa3\x91\x97\xd0\xbc\xd9\xb7\xcc\x2c\x8c\x92\xd7\xd8\xb6\xf6\xe2\xd1\x3c\xa5\x29\x7d\xf1\xe1\x51\x48\x4f\x54\x5e\x04\x7c\x6e\xf2\x52\xa5\x5f\x42\x1d\xa7\xd6\xe1\x7f\x8f\x43\x1a\xa7\xd6\x1b\x18\x9f\xcc\xbc\x44\x17\xd1\xf8\x42\x75\xcf\xd3\x30\x4a\x7d\x2f\x70\xc2\x93\x3f\x1f\x04\xf2\xa8\xf0\x12\xd0\x33\x73\x1f\xca\x61\x31\x99\xed\x1f\x8b\x4f\xfe\x7c\x10\xda\xa3\xc2\x4b\x68\xcf\xcc\xbd\x44\x3b\x8f\x69\x72\x31\xd6\x4f\x7e\xcc\xf1\xf8\xe7\xa3\xf0\x3e\x2b\xbc\x88\xf7\xa5\xb9\x97\x78\x77\xdf\x5f\x6c\x5f\x4f\x7e\xd8\xe9\xf8\xe7\x83\x00\x1f\x15\x5e\x02\x7c\x66\xee\xcd\xae\x81\x17\xc7\x29\x8d\xbe\x65\x70\x1c\xd3\x84\x84\xf6\x85\x32\x9c\xbe\xe2\xf4\xf4\xc3\xa3\xca\x71\xa2\xf2\x62\x49\xce\x4d\x5e\xca\x12\x31\x9d\x7f\xcb\x24\x2b\x2f\xb0\xe9\xea\x42\x09\x8e\xf0\x1f\x8d\xfd\x2a\xf0\xbb\x50\x9f\x75\x51\x5f\x7e\x7c\x10\xfe\x97\x4a\x2f\x15\xe2\x82\xd9\x37\x4b\x72\x90\xbd\x5c\x9c\x83\xcf\x59\x78\x8a\x03\x72\xfc\xb9\x3e\xbd\xae\x6a\xfd\x77\x60\x2b\x2d\x4d\xee\x68\x7b\xd1\x73\x3d\x99\x46\xfd\xd8\x8b\xed\xb6\xf5\x7a\x31\x63\x25\x11\xa5\x99\xdf\x0f\x12\xff\xca\xf4\x4a\x5a\x4b\x7b\xfe\x9c\xf9\xaf\xbf\x8e\xbf\x58\x06\x5e\x77\x34\x69\x9c\xec\xdb\xf2\x6d\x29\x6e\x46\xf9\x52\xcd\x16\xe4\xa1\x9f\xf2\x02\x62\x4c\xa7\x53\x2f\x70\x77\xb1\xf7\x2d\x63\xa5\xeb\xe3\x87\x59\xe4\x91\xd7\xb1\xb8\xad\x06\x6b\x1d\xd3\xf9\xcd\xc0\x9e\x35\x6c\x31\x1d\x03\xe3\x05\xac\xb7\xbb\x8a\x5b\x71\x87\xd2\xfb\x21\x3c\x29\xd9\xa3\x38\x49\x30\x1f\x04\x72\xb8\x73\x1f\x90\x53\x25\x5b\x20\x2f\x3b\xc2\x1f\x44\x12\x93\x19\x0d\x16\x77\x22\x39\x55\xb2\x45\x12\x93\xd9\x27\x09\x39\x36\xa8\x77\x23\x39\xd5\x73\x00\xf3\xd4\x4b\x78\x09\x06\xc7\xc9\xdb\x80\x4e\x12\xc7\x7d\x88\xce\x15\x6d\x21\x9d\xe5\xc6\x77\x39\x6a\x86\x71\xe2\x46\xb4\x6d\x54\x33\x4f\xbf\x03\x9e\xb1\x53\x7f\x96\x21\xa1\x3f\x9b\xd2\x84\xee\xcc\xfe\xff\x01\x00\x00\xff\xff\x73\x11\x8c\x9e\x54\xcc\x00\x00") func pathed_paymentCoreSqlBytes() ([]byte, error) { @@ -1150,7 +472,7 @@ func pathed_paymentCoreSql() (*asset, error) { return a, nil } -var _pathed_paymentHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x7d\x69\x93\xaa\xc8\x12\xe8\xf7\xf9\x15\xc4\x89\x1b\xd1\xe7\x84\x7d\xa6\x29\x76\xce\xbc\xb9\x11\xa8\xb8\xef\xbb\xde\x98\x30\x0a\x28\x10\x45\x51\xc0\xad\x6f\xdc\xff\xfe\x42\x70\x41\x14\x17\xb4\x7b\x7a\xde\x23\xce\xf4\xa8\x54\xe5\x56\x59\x99\x59\x59\x59\xf0\xf3\xe7\x6f\x3f\x7f\x62\x15\xd3\x76\x34\x0b\xd5\xab\x05\x4c\x81\x0e\x94\xa0\x8d\x30\x65\x3e\x9e\xfe\xf6\xf3\xe7\x6f\x9b\xfb\xc9\xf9\x78\x8a\x14\x4c\xb5\xcc\xf1\xa1\xc1\x02\x59\xb6\x6e\x4e\x30\xfe\x77\xe6\x77\xe0\x6b\x25\xad\xb1\xa9\xd6\xdf\x74\x0f\x34\xf9\xad\x2e\x36\x30\xdb\x81\x0e\x1a\xa3\x89\xd3\x77\xf4\x31\x32\xe7\x0e\xf6\x27\x86\xff\xe1\xde\x32\x4c\x79\x74\xfa\xab\x6c\xe8\x9b\xd6\x68\x22\x9b\x8a\x3e\xd1\xb0\x3f\xb1\x97\x66\x23\xc5\xbd\xfc\xb1\x03\x37\x51\xa0\xa5\xf4\x65\x73\xa2\x9a\xd6\x58\x9f\x68\x7d\xdb\xb1\xf4\x89\x66\x63\x7f\x62\xe6\x64\x0b\x63\x80\xe4\x51\x5f\x9d\x4f\x64\x47\x37\x27\x7d\xc9\x54\x74\xb4\xb9\xaf\x42\xc3\x46\x47\x68\xc6\xfa\xa4\x3f\x46\xb6\x0d\x35\xb7\xc1\x12\x5a\x13\x7d\xa2\xfd\xb1\xa5\x1d\x41\x4b\x1e\xf4\xa7\xd0\x19\x60\x7f\x62\xd3\xb9\x64\xe8\xf2\xeb\x86\x59\x19\x3a\xd0\x30\x37\xcd\x84\x42\x43\xac\x61\x0d\x21\x5e\x10\xb1\x6c\x0a\x13\x3b\xd9\x7a\xa3\x8e\x95\x4b\x85\xee\xb6\xfd\xef\x03\xdd\x76\x4c\x6b\xdd\x77\x2c\xa8\x20\x1b\x4b\xd6\xca\x15\x2c\x51\x2e\xd5\x1b\x35\x21\x5b\x6a\xf8\x3a\x1d\x37\xec\xcb\xe6\x7c\xe2\x20\xab\x0f\x6d\x1b\x39\x7d\x5d\xe9\xab\x23\xb4\xfe\xe3\x33\x10\xca\xee\xa7\xcf\x40\xb9\xd1\xab\xcf\x63\xd0\xc3\x76\x3f\x77\x1e\x81\x1b\x45\xbe\x84\xcc\xd7\xea\x00\xdc\x6d\x9e\x2d\x25\xc5\x8e\xaf\xe5\x16\xac\x4b\x55\x1f\xa9\x2a\x92\x1d\xbb\x2f\xad\xfb\xa6\xa5\x20\xab\x2f\x99\xe6\xe8\x72\x47\x7d\xa2\xa0\x55\xdf\xc7\xdc\xc4\x86\xae\xa2\xdb\x7d\x73\xd2\xd7\x95\x7b\x7a\x9b\x53\x64\xc1\x7d\x5f\x67\x3d\x45\x0f\xf4\x3e\x50\xf2\x10\x15\xf7\xf5\x35\x90\xa2\x21\xcb\xed\x68\xa3\xd9\x1c\x4d\xe4\xbb\x58\xf0\x75\x9f\x5a\x68\xa1\x9b\x73\x7b\xfb\x5b\x7f\x00\xed\x41\x44\x50\x8f\x43\xd0\xc7\x53\xd3\xda\x4c\xc7\xad\x4d\x8d\x0a\x26\xaa\x2c\x65\xc3\xb4\x91\xd2\x87\xce\x3d\xfd\x77\xca\x1c\x41\x95\xb6\xf3\x32\x02\xd1\xfe\x9e\x50\x51\x2c\x64\xdb\x97\xbb\x0f\x1c\x4b\x71\xfd\x4e\xdf\x30\xcd\xd1\x7c\x7a\x43\xeb\xe9\x35\x92\xbc\x56\x50\xb7\xee\x04\xbc\x33\xba\x37\x77\xd8\xd8\x09\x55\x45\xd6\x6d\x4d\x77\xe0\x23\x74\xd9\x8a\xf5\xb6\x4e\xae\x69\xbd\x03\x89\xdf\x14\x5f\xeb\x31\xdd\x74\x18\x38\x57\x47\xc0\x3e\x32\x40\xd2\xfa\xaa\x1a\x0d\xf6\x33\xfd\x96\xc6\xa6\x47\x87\x79\xb5\xa1\x6e\x3b\x7d\x67\xd5\x9f\x5e\x07\xb9\x69\x69\x4e\x6f\x6d\x89\x6e\x6d\xb6\x73\x25\x97\x1b\x4b\xbb\xe9\x7e\xb5\xd9\x75\x2b\x26\xad\x6f\x1b\x4c\xcf\x47\x6e\xa4\x6d\xdb\xf3\x6b\x98\xf7\x8d\x65\x53\x41\x77\xc6\x05\x7b\x35\x98\x42\xcb\xd1\x65\x7d\x0a\x27\x17\x9d\xf7\xb5\xae\xfd\xe9\x9d\xb1\xc9\xde\xa3\xdd\x4b\xc1\xf9\x8e\x77\xe3\x77\x85\x77\x0b\x3e\xaf\xe1\x87\xc3\xf7\x06\x73\x33\x92\xdb\x8f\x1b\xff\xb0\x0b\xfd\x5c\x65\xe8\xdf\x48\x81\x66\x5a\xd3\xfe\x58\xd7\xb6\x01\xc3\x05\x12\x02\x2d\x6f\xe6\xf1\xfe\x78\xef\x12\xe4\x5b\x95\xd3\xeb\x9d\x28\x17\x9a\xc5\x12\xa6\x2b\x1e\xe6\xa4\x98\x12\x9a\x85\xc6\x8d\xb0\x43\x94\xee\x09\x90\xb7\xc3\x7d\x19\x92\xfb\xed\x76\xf6\x77\x5e\xba\x2e\x56\x9b\x62\x29\x11\x41\x66\x9b\x38\xdb\x46\xb3\xbb\x31\x1f\x01\xb9\xb9\xb7\x82\x6e\x6c\x7b\x88\x66\x6f\xe6\x30\x64\xd6\xdf\xc3\xdf\x79\x10\xb7\xf5\xdd\xc6\x7d\xb7\x35\xde\x06\x79\x37\xf3\xb6\xb5\x00\xf7\xf0\xe2\x75\xb9\xb1\xed\x36\xfc\xbb\x9d\x9e\x5d\xbc\x78\x0b\x45\x01\x1b\x72\xb9\xb1\xcf\x24\x6c\x1b\x0a\xe9\x74\x4d\x4c\x0b\x8d\x33\x8d\xc7\xfa\x66\xc5\xa1\xcb\xe8\xfb\x64\x3e\x46\x96\x2e\xff\xe7\xaf\x1f\x37\xf4\x82\xab\x08\xbd\x0c\x68\x3b\xdf\xe1\x64\x8d\x0c\x37\x15\x73\x43\x0f\x55\xb7\xce\x76\x49\x35\x4b\x89\x46\xb6\x5c\xba\xc0\x4f\x1f\x6a\xda\x81\xba\x57\xec\x84\xd0\x0b\x30\x76\xdc\x3d\x00\x63\xc3\xab\xdb\xfd\x40\xfc\x2b\x76\x0f\x23\x2e\xeb\x37\x40\x10\x3b\x0d\xb1\x54\x0f\x80\x30\xa6\x9a\x3d\x33\x76\xba\x98\xc8\x88\x45\xe1\x04\xc3\x1f\xbf\x79\x59\xb8\x12\x1c\xa3\x5f\xbb\xdf\xb0\xc6\x7a\x8a\x7e\x6d\xbb\xfc\x81\xd5\xe5\x01\x1a\xc3\x5f\xd8\xcf\x3f\xb0\xf2\x72\x82\xac\x5f\xd8\x4f\x37\x39\x97\xa8\x89\x9b\xf1\xda\x42\xde\xc1\xfb\xed\x08\xe2\xf1\xcd\x2d\xe0\x44\xb9\x58\x14\x4b\x8d\x0b\x90\xbd\x06\x58\xb9\x74\x0c\x00\xcb\xd6\xb1\x97\x5d\xda\x6d\xf7\x9b\xed\x02\x79\x09\x62\xde\xb1\xbf\xc5\xb9\x97\xd0\x55\x7e\x8e\x64\x59\x2a\x37\x02\xf2\xc4\xda\xd9\x46\x66\x4f\x96\x3f\xff\x76\x84\xfe\x00\x25\x40\xc8\x3d\xcc\x9f\x00\x71\x05\x50\x29\xbc\x4d\xb5\x7a\xb5\x80\x4d\x2d\x53\x46\xca\xdc\x82\x06\x66\xc0\x89\x36\x87\x1a\x72\xc5\x70\x63\xbe\xd0\x4f\xee\x75\x45\xdb\x92\xbf\xd3\xd5\x03\xfd\xbb\xb1\x3d\x27\xcb\xbd\x66\x5f\x85\x8f\xd5\xc4\x46\xb3\x56\xaa\xfb\x7e\xfb\x0d\xc3\x30\xac\x20\x94\xd2\x4d\x21\x2d\x62\x2e\xf7\xc5\x62\xd3\xb3\x77\xf5\x46\x2d\x9b\x68\xb8\x2d\x84\x3a\xf6\xaf\xfe\xbf\xb0\xba\x58\x10\x13\x0d\xec\x5f\x60\xf3\x2d\x38\x1a\x57\x27\xe2\x63\xdc\x5d\x03\xff\x34\xe6\x88\x73\xcc\xdd\x62\xa9\x1e\xe3\xef\x06\x0c\x7b\x16\xf7\x3f\x45\xe2\xf0\xfb\x6f\x18\x96\x10\xea\x22\xd6\xce\x88\x25\xec\x5f\xe0\x3f\xe0\xaf\xb7\x7f\x81\xff\x10\x7f\xfd\xfb\x5f\x84\xfb\x99\xf8\x0f\xf1\x17\xd6\xf0\x6e\x62\x62\xa1\x2e\x6e\x84\x22\x96\x92\x3f\xce\x4a\xe6\x06\x3f\xf0\xa0\x64\xae\x63\xf8\x68\xc9\xfc\x9f\x28\x92\x39\xf5\xa9\x5b\x39\xec\xfd\xf0\x6d\x82\x38\xb8\xed\x13\x88\x2e\xc5\x18\x56\xdf\xc8\x0a\xfb\xf3\x60\x01\x5e\xbd\x9f\x1b\xdd\x8a\x88\xfd\xe9\x9f\x11\x3f\xce\xcd\xda\xa7\xd2\x18\x04\x18\x20\x71\x37\x8d\x6f\xa7\xf0\x6c\x08\xf4\x28\x95\xe7\x80\x06\x28\x3d\x9a\x90\xc7\xe4\x1e\xb4\xec\x94\xda\x73\x61\xde\xc3\xd4\x9e\x01\x1a\xa4\xd6\x3f\x49\x2e\x52\xbb\xf1\x5c\x0a\x52\xe1\xdc\x70\xfa\x0e\x94\x0c\x64\x4f\xa1\x8c\xb0\x3f\xb1\x97\x97\x3f\x8e\xef\x2e\x75\x67\xd0\x37\x75\xc5\xb7\x95\x76\xc4\xab\x3f\xfe\xdd\xb2\xe8\x4e\xb0\xdb\xd8\xf3\xe6\xa2\x7f\xf1\xed\x71\xa4\x2b\x98\xa4\x6b\xfa\xc4\x71\x03\x83\x52\xb3\x50\xf0\xd8\x81\xe3\x4d\x18\x8f\xc9\x03\x68\x41\xd9\x41\x16\xb6\x80\xd6\x5a\x9f\x68\x81\x66\x93\xf9\x78\x1f\xf2\x63\xfa\xc4\x41\x1a\xb2\x02\x4d\x54\x03\x6a\x36\x66\x8f\xa1\x61\x9c\xa2\x71\xcc\xb1\x71\x8a\xe4\x3b\x41\xd3\x3f\xf6\x2d\x4f\x87\x3d\xb8\x6e\x88\x2a\x8e\x60\xb6\x63\x2f\x12\x07\xad\x4e\x04\x32\x9d\x1a\xba\x9b\xb3\xc7\x1c\x7d\x8c\x6c\x07\x8e\xa7\xd8\x66\xcc\xdc\xaf\xd8\xbb\x39\x41\xa7\x84\x86\xad\x8a\x76\xf1\xe8\x76\x39\x75\x1b\xcd\xfb\xc5\x57\x08\xd4\xad\x1a\x0a\xb5\x86\x17\xd1\x01\xf7\x87\x6c\x29\x51\x13\xdd\xf0\x2b\xde\xdd\xfe\x54\x2a\x63\xc5\x6c\xa9\x25\x14\x9a\xe2\xfe\xbb\xd0\x39\x7c\x4f\x08\x89\x8c\x88\x81\x6b\xcc\x44\x16\x7b\x10\xd0\x89\x2a\x6e\x93\x1e\xd8\x04\xad\x9c\x05\x34\xbe\xbf\x84\x70\xfc\xf2\xeb\x97\x85\x34\xd9\x80\xb6\xfd\x23\x38\x5c\xde\x5e\xc5\x19\xdd\x62\xa8\x1f\x17\x06\xca\x5b\x1b\x3f\xcc\x99\x97\xd1\xd9\xf3\x75\x7e\x66\x1c\x72\x75\xe7\xc9\x3c\xdb\x5c\x36\x95\x73\xcd\x01\x71\xbe\xb9\x97\xfe\x3b\xd3\x81\x66\x2e\xcd\xb0\xf3\xe9\x85\x27\xa9\xad\x1f\xe6\xa7\x29\xed\x25\x46\xb0\x72\xbb\x24\x26\xb1\x78\xf7\x0a\x47\x5e\x86\xee\x32\x43\x7b\x58\x81\xdb\xbf\xeb\x4a\x18\x6d\xbb\x9c\xcf\xa3\x5a\xb7\x85\xb3\x55\xbb\xc0\x9c\xe9\x87\x59\xfa\xd3\x14\x57\x58\xcb\x6f\xee\xc6\xc7\xb7\x10\x6d\x76\xf5\xf8\xfc\x2d\x05\x39\x50\x37\x6c\x6c\x68\x9b\x13\x29\x5c\xd9\x76\x89\xb2\x47\xe5\xb0\x85\xb3\x95\xc3\x6e\xdf\x3a\x84\x36\xdf\x66\xf2\x4d\xb3\xf0\xdc\x3e\xf6\xf9\x8e\x5b\xb1\xf8\x32\xa3\xee\x40\xec\xe9\xd8\x59\x39\x3c\x80\xe1\x30\x10\xb7\xb5\xdf\x6f\x26\x07\x1c\x93\x39\x77\x0e\xbe\x29\xd8\xc7\x42\xd0\xb9\xda\xc9\x6b\x3b\x9f\x2a\x37\xb7\xdd\xab\xce\xf6\x6b\x60\x9f\xfd\x84\x17\x70\x12\x0f\x38\xd0\xe8\xcb\xa6\x3e\xb1\xcf\xeb\xa0\x8a\x50\x7f\x6a\x9a\xc6\xf9\xbb\xee\xce\xa7\x8a\xc2\xc6\xda\xbd\x6d\x21\x1b\x59\x8b\xb0\x26\x9b\x38\xd4\x59\xf5\xdd\x30\x49\x7f\x0f\x6b\x35\xb5\x4c\xc7\x94\x4d\x23\x94\xaf\xe0\x18\xed\x94\x05\x41\x05\x59\x6e\x78\xe1\xfd\x6e\xcf\x65\x19\xd9\xb6\x3a\x37\xfa\xa1\x8a\xb2\x65\x1c\xea\x06\x52\xae\xb5\xda\x92\x1e\xa2\x42\xe1\x53\x2f\x24\xbf\xfd\xe8\x4c\x0c\xd9\x33\xb9\xe2\x17\x6f\xb7\x48\xd7\x6d\xdc\xbd\x2c\x3f\xd7\xd5\x5d\xc4\xf1\x59\xae\xef\x2e\x46\x1f\x74\x85\x17\x71\x9d\xba\xc6\xf3\xcd\x2f\xb8\x4a\xdf\xee\xcf\xd3\x74\xf3\xda\x52\xe8\xb8\xf2\x2a\x64\xb9\xb4\x59\x1d\xc8\x1e\x2b\xae\x97\x7c\xd0\x49\x6e\xad\x83\x39\xb7\xe4\x7d\x29\x47\x88\x7b\xda\x99\x9c\x97\x97\x5f\xbf\xc2\x97\x6b\xe1\xf3\x60\xbb\xf9\xf6\xa8\x38\xb7\xf5\x82\xdf\x9f\x1a\x53\x6c\xcd\x66\x14\x0f\xe7\xd6\xcb\x84\xa2\x0d\x54\x2b\x5e\x6a\xb4\x2d\xa0\xbc\xd4\xc4\x5b\x2b\x9f\x6d\x70\x5a\xf7\x79\xa5\xdd\x45\x74\xfb\x56\x17\x30\xba\x24\xe9\x76\xdf\x46\x86\x81\x2c\x4c\x32\x4d\x03\xc1\xc9\xce\x6f\xe9\x32\xea\x4f\x8e\x7c\xb4\xf7\xdb\xb1\xdf\x3e\x54\x1c\xf5\x03\x1e\xfd\xa8\xe6\x29\x78\xd3\xb7\x95\x7f\xb6\x3a\xd4\xa5\xba\xef\xd6\x0f\x63\x89\x8c\x98\xc8\x63\xdf\xbf\xfb\x25\xf8\x6f\x0c\xff\xf1\xe3\x1a\xa8\x73\xdd\x77\x42\xfb\x3f\x27\x72\xbc\x01\xde\x91\x4c\x03\xe0\x03\x02\x77\x09\xbc\x38\x95\xce\xef\x82\x3f\x61\x72\x9d\xaf\x6b\xb8\xd1\x93\xde\x62\xc2\x1e\xf1\xa5\xd7\x6a\x08\x9e\xe3\x4d\xaf\x60\xf9\x2c\x7f\x7a\x27\xb3\x0f\x7a\xd4\x2b\xd8\x4e\x7d\x6a\x58\x87\x0b\x5e\xf5\xa8\x6e\xe4\x89\xba\xba\xd3\x4f\x3f\x49\x37\x2f\xb4\xb6\xb6\xff\xca\xf2\xed\x56\xc7\x7b\xd9\x87\x9e\x6d\x7b\x40\x7d\x76\xbe\x6c\x56\x0a\xe1\x4b\x8d\xb0\x45\xdc\xdf\xb2\x0c\x73\x56\x7d\x34\x59\x20\xc3\x9c\xa2\x73\xa9\x4d\x67\xb5\x59\x14\xcd\x0d\x27\xe4\xe6\x18\x39\x30\xe4\xd6\x66\x39\x16\x76\xdb\xd6\xb5\x09\x74\xe6\x16\x3a\x97\x85\xe3\x99\x1f\xff\xf9\xeb\x10\xbb\xfc\xf7\x7f\xe7\xa2\x97\xff\xfc\x15\x94\x39\x1a\x9b\x21\x09\xb3\x03\xac\x89\x39\x41\x17\x63\xa1\x03\xac\x53\x30\x5b\xce\xf4\x31\xea\x4b\xe6\x7c\xa2\xb8\x59\x6d\xce\x82\x13\x0d\x05\x57\x6c\xc7\xae\x75\x23\x89\x0d\x34\x0d\x05\x96\xc0\x93\x09\xb2\xfa\xb7\xcd\x80\x03\xa4\x8b\xea\xea\x07\x7c\x5d\xc8\xdb\x44\x3d\x5a\xf6\x77\x1a\xeb\x91\x77\x2d\xe9\x87\xe9\xca\xce\x16\xec\x8a\xd0\x6e\x31\x60\x9e\x31\x70\x2b\xfe\xae\xd4\xb7\xd5\xc5\xc6\x85\x4c\xaf\x3f\xa7\xe6\xcf\xf3\xde\xb7\xca\x79\x1e\x13\x37\x96\xff\x5d\x64\xea\xe2\xea\xe8\x16\x26\x43\xe3\x80\xa7\xb1\x79\x73\x05\xe5\x45\x46\xaf\x38\xad\xf3\xac\x26\xa1\x03\x31\xd5\xb4\xae\xec\x77\x61\x49\xa1\x21\x5c\x61\x2f\x5b\xaa\x8b\xb5\x06\x96\x2d\x35\xca\x47\x7b\x5e\xae\x8f\xaf\x63\xdf\xc1\x2b\xf6\x02\x08\x7c\x7b\xbd\xbc\x62\xc4\x2b\x86\xbf\x62\x2f\x2f\x3f\xfe\xb8\xda\x97\xb8\xd0\x37\x84\x95\x4b\xfb\x55\xf7\xb2\x13\xdc\xb3\xda\x91\xf5\x02\xfa\xfa\x44\x77\x74\x68\xf4\xbd\xfa\xa1\xdf\xed\x99\xf1\xf2\x8a\xbd\x10\x38\xe0\x7f\xe2\xcc\x4f\x9c\xc4\x00\xf7\x8b\xe0\x7e\x51\xec\xef\x38\x49\x50\x3c\x13\xc3\x89\x20\xc3\xa1\xd0\x89\xbe\x77\x2e\xe4\x68\x34\xa5\x75\xdf\x31\x75\xe5\x32\x26\x9e\xa1\xd9\x7b\x30\x91\xfd\xb9\x8d\xf6\xbe\xb7\xaf\x4f\x4e\xce\xa2\x5c\xc4\x47\x51\x38\xc5\xdd\x83\x8f\xea\x43\x45\xe9\x07\x33\x7a\x17\x71\xd0\x14\x4d\x12\xf7\xe0\xa0\xfb\x9e\xa7\xdf\xad\x39\xdc\x9d\xe0\x8b\x28\x18\x12\x27\xee\x62\x83\xd9\xa1\xd8\x5a\xce\x1b\x50\x70\x14\xa0\xef\x41\xc1\xf6\xc7\xa6\xa2\xab\xeb\xdb\xb9\xe0\x00\x43\xdc\x85\x82\x3b\xe2\x62\x5b\x00\x7e\x03\x1e\x96\x62\xc8\xfb\xf0\x6c\x06\x1d\x6a\x9a\x85\x34\xe8\x98\xd6\x65\x9d\xe2\x71\x80\xf3\xf7\x80\xe7\x5d\xf0\x5e\xb6\xb7\xbf\x52\xac\xcb\xd0\x09\x16\xdc\x35\xd4\x00\x77\xc1\x6f\x47\xc1\x5d\xbf\x5f\x46\x40\xf3\xec\x5d\xd2\x01\xc0\x8f\x60\xbf\x20\xdc\x18\x80\xcb\x88\x78\x86\xbf\x8f\x13\xe2\x68\xa0\xb7\x4b\x70\xef\xc8\xf1\x25\x4c\x00\x67\x69\xea\xae\x11\x01\xa4\xc7\xce\x3e\x71\x71\x71\xc4\x01\x20\x58\xe6\x3e\x4e\xa8\xbe\xaa\xaf\x76\xc7\x2f\xcc\xb1\xd1\x57\x75\x64\x5c\x34\x8d\x00\xd0\x00\xdc\x65\x84\x01\xbd\xdb\x75\xda\xed\x06\xac\xae\xb0\xc1\xb0\xf7\x99\x79\xc0\xf4\xf5\x89\x86\x6c\xa7\x7f\xba\xdf\x70\x05\x15\xcb\x73\xf7\x8d\x08\x7b\x14\x26\xb8\x1b\x3b\xf0\xb2\x33\xd9\xb8\x5d\x92\xba\x0b\x09\xb7\x57\x5f\xd5\xf4\xa2\x65\x14\x98\xec\x00\xff\x49\x02\x0c\x50\xbf\x00\xff\x8b\xe2\x7f\x07\x04\xc9\x91\x74\x0c\x07\x17\xfc\xf9\xc5\x4a\x88\x7b\x1d\xfa\x49\x35\x84\x3f\x48\x49\xc7\x3b\xe9\x6a\xae\xdd\x2a\xb4\xcb\xdd\x4c\xaa\xd0\x6a\xe4\xdb\x2d\x3a\x95\xce\x08\x64\xa1\xd4\xed\x12\xb9\x6a\xbe\xc8\x96\x85\x9c\xd0\x14\xab\xa9\x26\x53\xa8\x24\xea\x62\xaa\xd5\x29\x97\x82\x02\x0a\x45\xb2\x89\x66\xd2\x89\x4e\x3e\xcd\xd4\x4a\x54\xb9\x94\x15\x2b\x89\x62\x29\x15\x67\x49\x42\xa0\x48\xa6\x47\x57\x4a\xc9\x7a\xad\x90\x6e\xe7\xd9\x74\xbc\x90\x28\x56\x0b\xd9\x54\x99\xaa\xb3\x62\xb7\xdd\x6a\xde\x8c\x84\xdc\x20\x11\xe8\x76\xbc\xd2\x15\xe8\x2e\xd5\x16\xc4\x4c\xa7\x5d\x23\x9a\xf9\x32\xd1\x2c\x53\xf1\x66\x3a\xd3\xac\xb2\x94\xd8\xac\xe4\xcb\x25\xa2\x9a\x69\x51\xed\x5a\xa6\x9c\xad\x95\xf2\xf9\xcc\xc9\x50\x87\x22\xa1\x5c\x4e\xaa\x95\x6e\x3a\x43\xe5\x69\xb6\x13\x4f\x8a\xa5\x7c\xbe\x43\xd3\xf9\x64\xa3\x5d\x6e\xe4\xe9\x76\xb2\x5d\xab\x96\x33\x44\x21\x23\x26\x3b\xa4\x98\x6f\x65\xab\xb5\x42\x51\xac\xa7\xe3\xe9\x9b\x91\xd0\x2e\x12\x82\xac\xa6\x88\x4c\x53\xa4\x09\xa1\xd8\x69\xa6\x9a\x19\x52\xe8\xe6\x84\x4e\x27\xdd\xe9\xb4\x88\x56\xa6\xd3\xed\xd6\x18\xb1\xdb\x11\x1b\x95\x7c\xb2\xd3\xab\x0b\x6d\x86\xed\x94\xa9\x9b\x91\x30\xee\xc0\xd7\x2a\xdd\x4c\xb6\x40\x24\xb2\x64\xaa\x54\xa5\xe2\x9d\x42\xaa\x58\x4a\x16\x52\xb9\x66\xa9\xd2\x24\x32\x5d\xb2\x57\x4c\xd5\x33\xe5\x52\x33\x21\x96\x85\x7a\x9b\xad\x26\xd8\x72\x87\xc8\xbc\x44\xad\x41\xda\x04\xf4\x57\xb4\x76\x5b\xb7\x79\x28\xb9\xfe\xdd\x46\x97\xeb\x73\x5e\x31\xe6\x15\x73\xac\x39\xba\x61\x2e\x9d\x56\xde\x44\x9e\x49\xde\x7a\xd3\x3f\x8f\x64\x0b\x29\xba\xd3\x87\xc6\x74\x00\x27\xf3\x31\xb5\x99\xfd\xcd\x7a\xf2\xe5\x23\x86\xf3\x18\x3b\x11\x82\x5d\x6c\xd6\x5e\x1e\xd4\xd8\x28\x95\x2e\x4f\x19\xe5\xa3\xb5\xb9\xbb\x00\xba\x6d\x8c\xcf\x15\xba\x44\x1d\xe4\x5d\xb1\x8b\xcf\xc6\x10\x34\xcb\xf0\x1c\xce\x72\x2c\xf9\x8a\x01\x97\xae\x97\xff\x7e\xf3\x82\x8a\x6f\xbf\xb0\x6f\x00\xff\x7d\xbb\x6a\xfb\xf6\x8a\x7d\x3b\x94\x53\x6d\xee\x89\xcd\xda\xe1\x47\x67\x3d\x75\x7f\x0c\x8e\xdb\xa1\x85\x57\x56\xb5\x69\x13\x75\x00\xbf\xfd\x2f\x4c\x81\x82\x9c\x11\x01\xce\x88\x57\x8c\xbc\x83\xb3\x66\x3d\x19\x95\xb3\x68\x13\x23\x3a\x67\x9b\x7f\x1e\x6b\xde\xe6\x95\x4b\x45\x44\x0f\xb8\xe1\x68\x17\xeb\x7d\xfb\xb5\x51\x87\x6f\xb6\x69\x28\xfd\x30\xa1\x49\xe6\x5c\x1b\x38\xa1\xb7\xbd\xbe\xe7\x04\xeb\xbb\x73\x49\xba\x3b\xf8\xe7\xb4\xee\xe8\xde\x25\x20\x3e\x5c\x4f\x18\xa7\x20\xe6\xcf\x54\x6a\x10\x18\x7a\xea\xdc\xd0\x47\x8c\x4b\x3e\x7e\xe8\xb7\xe3\xf6\xc8\xd0\x6f\xb5\xe7\xd1\xa1\x8f\x38\x4e\x97\x86\xfe\xa3\x67\x3d\x78\xc5\x00\xbb\x59\x2e\xb0\x24\xc1\x81\xb3\x96\x9a\xf8\x67\x5a\x6a\x2a\xc0\xd9\x19\x4b\xfd\x0f\xe5\x8c\xd8\x73\xc6\x92\x2c\x1b\xe2\x5d\xff\x99\x4e\x88\x0e\xb0\x76\xd6\xbd\xfe\x33\x59\xdb\xcf\x34\x0e\x50\x21\x31\xd1\x25\x7d\xfc\xc2\x9c\xd1\x01\xce\xee\x9c\x69\x5f\x98\x33\x72\xcf\x19\x4d\x33\xfc\xfd\x33\xed\x0b\x1b\x11\x2a\xc0\xda\xbd\x33\xed\x0b\xb3\xb6\x19\x35\x82\xe3\x28\x1e\xa7\x79\x8e\xf6\x46\x0d\x77\x79\x33\xf4\xb1\xee\xb2\xc6\x13\x04\x49\xb2\x04\x4e\x32\x1c\xfd\x3b\xc5\xb2\x34\x87\xb3\xff\x28\x1e\x89\x1d\x8f\x00\xc7\x77\x7e\x3b\x12\x8f\x5f\x78\xf6\x81\x3d\x8f\x14\xd8\xf9\xb9\xff\x77\x79\xe4\x88\x9d\x57\xf8\x7f\x4d\x57\xe9\x57\x8c\xa3\x39\x9e\x27\x39\x86\xf3\x8c\xa8\xc7\xa1\xed\x40\xcb\xd1\x27\x5a\x5f\x82\x06\x9c\xc8\x28\x68\x73\x6e\x46\xc0\x1c\x23\xb8\xd5\x94\xed\xa4\x34\x81\x8e\xbe\x40\x91\xf9\xd9\x8c\x9a\xc7\xd0\x12\xe9\xda\xc0\xd9\xae\x72\xbc\xe4\x49\x7f\x84\xd6\x9f\xa3\x49\xd4\x96\x2a\x8a\x60\xb7\x46\xef\x83\xa4\xbc\x45\xf0\xd1\x52\x0e\xf0\x73\xa3\x94\x3f\x61\xa9\xec\x51\xc5\x70\x5b\xb3\xfb\x51\x52\xf6\x10\x7c\xb4\x94\x03\xfc\xdc\x26\xe5\xa8\x59\xa0\x7b\x3c\xb8\x4b\x15\x8d\xf3\x5b\xc3\xff\x41\x52\xde\x22\xf8\x68\x29\x07\xf8\xb9\x4d\xca\x11\xf7\x68\xee\x8a\x21\x3c\xaa\x68\x7c\xeb\x7a\x3e\x4a\xca\x1e\x82\x8f\x96\x72\x80\x9f\x1b\x2d\x46\xc4\xb4\xd6\xff\x6e\xd8\x92\x3c\x77\x86\x32\x6a\x8a\x7d\x77\x8e\xd2\xbf\x2f\xc5\x13\x8c\xa2\x12\x80\xa5\x21\xc5\x22\x56\xa5\x64\x1a\x11\x2c\x49\xb2\x3c\x23\x4b\x12\x05\x65\x46\xe2\x24\x1a\xa7\x11\xa5\x40\x8e\x66\x78\x19\x57\x18\x62\x13\x6a\x48\xbc\x02\x58\x40\xab\x2f\xaf\xd8\x0b\xcd\xf0\x2c\x87\x14\x9a\x67\x00\x52\x54\x92\xe3\x08\x20\x4b\x04\xce\x93\x84\xa4\xa8\x04\xab\x22\x1a\x87\x04\xa0\x00\x01\x08\x0a\x27\x14\x5a\x52\x69\x48\xe0\x2c\x64\x09\x85\x96\x79\x86\x7e\x71\x15\x07\x04\x36\x89\x99\x5f\x24\xf3\x0b\xe0\xc1\xbd\x63\xf7\x67\x9c\xff\x9d\x21\x29\x86\xe1\xae\xde\xdd\x26\x25\x49\x96\x65\x5e\x31\xb0\xf9\x0f\x3f\xb9\x5e\x31\x40\xbb\x7f\xb7\x7f\xf6\xbf\xee\x3f\x6c\x68\x13\x04\x41\x48\x00\xd8\x19\x3a\xed\x76\xc6\xe1\x28\x6d\xb0\x5e\x27\x1a\x79\x9e\x9b\xbc\x19\x09\x3d\x15\xcf\xd6\xab\x09\x20\xf1\x30\x9b\x99\xae\x81\x6c\x18\x86\x3e\x06\x33\xa2\x0a\x48\x69\x30\x68\xb1\x44\x37\xa7\x71\x23\xdb\xaa\xb2\x83\x32\x47\x4c\xd7\xb1\xee\x4c\x37\x92\x59\x81\xe3\xd7\xa2\xb6\x01\x2d\x74\x2a\xad\x22\xf2\x3e\xba\x97\x62\x4e\xd3\xb3\xde\x5b\x4a\x7b\xe7\x56\x1a\x0f\xd4\xc4\xb2\x61\x2f\x56\xd9\xb1\xcd\xcf\x47\x6d\x96\x4c\x64\x50\xc2\x89\xcf\x4b\xe3\x52\xbb\x90\x6d\x55\xc7\x6f\xd3\x65\x7d\x3d\xa3\x86\x2a\x5a\x4c\x86\x15\x29\x9b\x21\xb2\x72\x27\x1e\xaf\x34\x62\xef\x8d\x95\x62\xea\xdd\xc5\xc2\x98\xa9\x2e\xfc\x6e\x89\x2a\xc0\xf7\x29\x51\x3d\x20\x13\x3a\xb2\x70\x7c\xc5\x37\x7f\x7a\x42\x07\x50\x55\x41\x48\xe2\x39\xe1\x9f\x76\xbd\xec\xcc\x51\xa9\x59\x28\x84\x4c\xff\xe0\x8c\xa0\x9f\xa3\xcd\x2f\x14\x89\x24\x88\xab\x04\xe2\x29\x1e\xca\x1c\xaf\xe2\x90\xe0\x55\x12\x4a\x2c\x81\x53\x90\x86\x84\x4a\x90\x0a\xc0\x21\xe4\x21\x8d\x70\xc4\x49\x90\x54\x24\x05\x91\x0c\x64\x38\x9e\xa1\xf8\x0b\x33\x02\xe7\x43\x75\x9e\x61\x19\x9c\xbc\x7a\x97\x00\x14\x4b\x71\x24\x43\x71\xf8\xa5\x19\x41\xdd\x38\x23\xf0\x8a\x65\x56\x0a\xd3\x3a\x5c\xe7\xb8\x7c\x5e\x2d\x5b\xb2\x56\x37\xcc\x45\x96\x17\xf3\x33\xd8\xd1\x98\x82\xc9\x2f\x50\x69\x06\x73\xbd\x5c\xa3\x2e\xf4\x8a\xf4\x28\x07\xb3\x43\x32\x35\x9e\x8d\x13\xa2\xac\xb7\xc5\x46\x2d\x56\x7d\x2b\xdb\x3c\xab\x66\x5b\x94\x50\x86\xad\x5a\x6e\x21\xba\x23\xe8\xce\x08\x9f\x92\x16\xf5\x69\x4b\x4b\x4a\x85\x72\x7c\x59\x33\x8d\x4c\xdc\x6e\xd4\xed\xf1\x2a\x55\x7a\x47\x8d\x0e\x29\x28\xb3\x5e\xbd\xe3\x90\x85\x74\x31\x35\x1e\x96\x89\x8a\x3e\x61\x1d\x55\x4b\x25\x84\xf8\xba\xa2\xcb\xda\x30\x47\x94\xea\xc5\x55\x4d\x51\xda\x0c\x2f\x0c\x0b\xce\x92\x91\x21\xac\xf5\xdc\x19\xd1\x3c\x33\x23\x5a\x54\x40\xa1\xfe\xbf\x9c\x11\xd4\x73\xb4\xf9\x05\xf1\x3c\x2b\xb3\x0c\x24\x29\x96\x97\x38\x5e\x26\x54\x19\x71\x90\x44\x2c\x20\x29\x95\x24\x55\x84\x68\x4a\x61\x15\x1a\x90\x0c\x23\x49\xbc\x0a\x64\x9e\xa4\x64\x8e\x20\x69\xa0\x48\x04\x0e\x5f\xdc\x2d\x25\xea\xac\x72\x87\x7b\x01\x8e\x22\x69\xea\xe2\x5d\xd7\xf9\xb8\x49\x2c\x86\x07\x1c\x75\x69\x46\x90\x37\xce\x88\xd8\xb8\xb3\x22\x4c\x1c\x49\xba\x5c\xe0\x98\x7c\x65\x22\xe2\xdc\xfb\xdb\xbc\x55\x52\x5b\x22\x01\xd9\xc9\x6a\xdd\x68\x64\xb3\x20\x23\x65\xf3\xb5\x95\xb8\x76\xf8\xba\x32\xa2\x97\xb1\x35\x5f\x93\x4b\x36\x9d\x9e\x67\x57\xe4\x8c\xae\x27\x5a\x84\x5c\x68\x4e\x59\xd3\x69\xe2\xb9\x58\xa3\xeb\x8e\xa0\x3b\x23\x7c\x23\xda\x43\x46\xb6\x52\x27\xed\xea\x40\x48\xcc\xf3\xd9\x91\x4d\x52\x0c\xa0\xb9\x1a\x99\xe3\xc1\xc8\x9a\xc5\x72\xdc\x1b\x1a\xa7\x47\xab\x45\xdd\x4a\xd4\x3a\x75\x73\x49\xb1\xe2\xbb\x65\x0c\xc8\xb2\xa9\x76\x96\xf1\xcc\xac\x05\x7a\x56\x61\x6e\xd2\xf3\x74\xdb\xcc\x1a\x6a\x41\x2d\x64\x35\x77\x46\x54\xcf\xcc\x88\x66\xf3\x9c\x56\xfd\xc3\x67\x04\x75\xef\x8c\x20\x9f\xa3\xcd\x2f\xa4\xca\xd3\xb2\xac\xca\x40\x91\x70\x9c\x23\x39\x95\x64\x68\x5c\x06\x84\xcc\x02\x19\x67\x19\x1a\xc8\x2a\xc7\x20\x1e\x91\x8a\x44\xca\xb4\xcc\xa9\x1c\x81\x73\x34\x47\x01\x44\x41\x00\x48\xe2\xd2\x8c\x60\x43\x75\x7e\x13\xda\x86\xcf\x88\xdd\xdd\x6d\xee\x13\x70\x1c\x77\x61\x46\xf0\x37\x4e\x88\xf7\x58\xeb\xbd\xb2\x54\x6c\x41\xa3\x38\xa2\x59\x14\x6d\x59\x8e\x13\x4d\x39\x96\x66\x50\x45\xaa\xa4\xd6\x15\x4d\x1b\x74\xab\xa8\x3e\x10\xd7\x3d\x52\x1c\xd1\xbd\x6c\x1e\xa8\x05\xb1\xde\x91\x0b\x86\xf8\x86\xe3\xef\x82\x8d\x33\x09\x1e\x8d\xa6\x20\x27\xbd\x11\xc8\x2a\xad\xe5\xf9\xd2\x1d\xc0\xcd\x84\x50\x96\x87\x01\xad\x8f\xdb\xdd\x2e\x2e\x36\x47\xf1\x76\x91\xd2\xde\x62\xa3\x89\xd6\xd4\x87\xcb\x6c\x8b\x2d\x5b\x09\xba\x37\x7a\x2b\x66\xba\xe9\xdc\x50\x14\x6d\x52\xc0\x57\xc3\xf6\x54\xee\x58\x46\x3b\xd1\x96\x12\x8d\x86\x1a\xcb\x59\xf9\x24\x65\x8d\xf4\xf9\x64\x24\x25\xcb\xc4\x2a\xa3\x73\xc2\x1b\xed\x41\x2e\x9e\x99\x10\x65\xf1\x9c\x52\xfd\xff\x36\x21\x88\xe7\x28\xf3\x0b\x43\x2a\x3c\xa7\xd2\x24\x83\x10\xc3\x29\x40\x22\x58\x89\x96\x38\x5e\x25\x48\xa8\xd2\x24\x00\x12\x4b\x33\x3c\x24\x28\x15\xaa\x80\xc2\x49\xa8\xe0\x12\x4d\x48\x0c\x49\x4a\x38\x2b\x21\x7e\xe3\x66\x68\xf7\xdf\x19\xdd\x66\xc2\x54\x9e\x05\x0c\xe9\xa1\x0f\xbd\xbb\x09\x9a\xbc\x64\x1d\x45\xf3\xc4\x85\xf9\x70\xeb\x22\x82\xa8\xf4\x86\xa0\x34\xa7\x4d\x5c\xca\xb1\x6d\x6a\xb2\x2e\x2f\x9a\xab\x34\xd9\x9a\x9a\xa3\xd8\x22\x25\x94\x9d\x04\xc8\x13\x45\x36\xce\x32\xbd\xc1\x44\x95\xc4\xe4\x34\x53\xe9\x2a\x14\x3d\xa9\xca\x0d\xb6\x33\x52\xb3\xc5\x65\xbd\xc3\x6b\xa9\x24\x1f\x53\xdb\xd0\x61\x01\x53\xcd\xb6\xbd\xf8\xdd\x9d\x0f\xae\x01\xcf\xee\xff\x08\xae\xca\xda\x87\xef\x4b\xa1\x52\x1d\x79\xe3\x5d\xe5\xc7\x5c\xa1\x9e\xe6\x24\xba\x8d\x4b\xf3\x95\xe8\xcc\x6c\xa7\x55\x7d\x67\xb3\xad\xb7\x8c\x95\x1c\xa7\x45\x47\x11\xa8\x71\x42\x4c\x76\xd6\xdc\xa0\xe1\x10\x5d\xad\x36\x69\x64\x1b\xd9\xf9\x3b\x35\x2b\xf5\x44\x7a\x56\x2c\x35\xde\xf1\xa9\x88\x53\xa0\x25\x37\x5b\xe9\xe5\xb8\x0d\x9b\xee\x7c\xcc\x9e\x99\x2f\x19\xfc\x9c\xce\xfd\xc3\xe7\x0b\x7d\xef\x7c\x01\xcf\xd1\x75\xf7\xe4\xe3\x06\x35\xfe\x8a\xbd\x00\x9e\xc5\x7f\xe2\xe0\x27\x0e\x30\x1c\xff\xe5\xfe\x0b\xd5\x69\x92\xf3\xc2\x9e\xcb\x77\x29\x82\xa7\x78\x86\x25\xf8\x4b\xeb\xe6\xf3\xfa\xee\x91\xf4\x77\x0f\x4d\xf8\x15\xef\xe4\x75\x6a\xfd\xb6\xae\xe7\xe3\x6c\x72\x92\xe4\x33\x04\xbe\x1a\xc6\x63\x36\xae\x39\xf6\x32\xbb\x7c\x07\x1d\xa5\xde\xee\xc2\x78\x0e\xa6\xdc\xa9\x24\x9e\x51\xe5\xf3\xd7\x4e\x95\x05\x21\x3e\xfa\x04\x46\x9e\x7a\xbd\xec\x94\x69\xab\xca\x57\x12\x53\x37\x3c\x61\x28\x6a\x9e\x2a\xe4\x68\x66\x58\xa9\x19\x11\x32\xef\xae\x80\x39\x29\x56\x8c\x06\x86\xdc\xad\xa8\x29\x9c\x76\x13\xcd\xd1\xc0\x04\x4b\x8d\xa8\x68\x60\xe8\x60\x2d\x56\x34\x30\x4c\xa0\x86\x86\x8e\x06\x86\x0d\x96\xe2\x44\x03\xc3\x05\x8a\x43\x22\x52\xc3\x07\xab\x67\xa2\x81\x01\x78\xa0\xec\x21\xe2\x50\x01\x10\x80\x13\x51\x01\x01\x11\xa8\x55\x88\x0a\x87\x0c\xd4\x03\x44\x1c\x2d\x40\x05\xf7\xdc\x23\xc2\xa1\x83\xfb\xda\x11\xe1\x04\xb6\x76\x99\x88\x60\xd8\x63\x30\x11\x95\x10\x70\xc7\x7b\x92\x51\xa9\xe1\x8f\xc1\x44\xd4\x41\x02\x3f\xde\xbb\x8b\x48\x0d\x11\xdc\xd2\x8c\x08\x86\x38\xde\xe3\x8a\x4a\x4d\x70\xab\x2c\x22\x18\xea\x78\x2f\x28\x2a\x35\x74\x60\x07\xeb\x39\x0f\xb0\x7b\xca\xc1\x8f\xcb\xcf\x2f\xd8\xf8\xc7\x5b\x4f\x82\x84\x3c\xc7\xed\xe1\x08\xc0\x2f\x47\xbf\xcb\xdf\x7f\x21\x7c\x15\x75\x8e\xf9\xd0\xa6\xe7\x2b\xf6\x4d\xb5\xcc\xf1\xa3\x95\xea\x53\xe8\x0c\xbe\xfd\xc2\xfe\xf3\xd7\x2b\xf6\xec\xb3\x2a\xdb\xe7\xc7\x8d\xe1\x2a\x0c\xe4\x73\x4a\xc9\x77\xcf\xa9\x0b\x2d\xa0\xf7\x6e\x9f\x3f\x3d\xe1\xbb\x77\x03\x2f\x4f\x2c\x97\xfa\x80\x93\x8f\xe7\xf4\xd0\x1f\xec\x1d\xbe\x30\xae\x1e\x7a\x7b\xd3\xee\x09\x6e\x57\x6c\x47\x03\x14\x52\xc9\xea\x3d\xaf\x6d\xc3\xfc\x7f\xbf\xed\x8e\x37\x4c\x36\xff\xff\xdf\xf1\xb1\x07\xfc\x15\xfb\x26\xcd\xd7\xfa\x44\x0b\x39\x79\xe0\xbf\x77\x51\xf2\xc8\x30\x4e\xa1\xec\x8e\x40\x1c\xdd\xbc\x78\x0a\xc2\x8f\xef\x39\xa7\x57\x8e\x91\x3f\xa5\xbe\xec\x03\xce\xdc\x9e\x51\x8a\xe3\x98\x7b\xff\x05\xdf\x6f\xe3\xed\x8d\xd3\x03\xa7\x9f\x0e\xc6\x29\xfa\xcc\xfe\xba\x07\x17\x3e\xe0\xb4\x6f\xf8\x40\x6d\x0f\x3d\xec\xbf\x30\xa7\x03\xf5\x80\x07\x38\x0c\x54\xf4\xa9\xf0\x85\x0f\x2b\x7c\xc0\x19\xdb\xd0\x91\xda\x2d\xd5\xf6\x5f\x88\x0f\x9a\x52\xcf\x18\xa9\xaf\x76\x42\xe1\x53\x07\x6a\x7b\xba\x61\xff\x85\x3b\x1d\xa8\xa7\x04\x66\xcf\xb0\x7d\x5f\xee\x54\xc2\x27\x19\xbf\xa3\x13\x0d\xfb\x2f\x94\x3b\x4c\xcc\x6d\x15\xe3\x8e\x35\xb7\x1d\x84\x1e\x1d\x0b\x17\x8c\x69\x3d\xaa\x16\x5f\x63\xe4\x9e\xfc\x24\x8c\xd0\x91\xdb\x9d\xd3\xd8\x7f\xc1\x23\x8f\x5c\x74\x73\xe7\x1f\xb9\x07\x7c\xe4\x17\xb1\x8e\x1f\xbe\x5c\x38\xce\x84\xed\xbf\x30\x7f\xf3\xc8\x3d\xe0\x33\xbf\xc6\xc8\x7d\x42\x4c\x7f\x94\x7b\xdc\x7f\x21\xfe\x66\x6b\xf9\xb4\x91\xfb\xbb\xac\xe5\xc7\x8f\x9c\x3f\x4d\xbb\xff\xcc\xf9\xaa\xd3\xd5\xf9\x44\xd9\x3d\x8d\x22\xda\x63\x79\x5c\xb9\x78\x0f\xc7\x79\x78\xd1\x7b\xb5\x54\xfe\xc1\xc7\x07\xdd\x23\xb5\x6d\x3a\x79\xff\x99\xfa\x58\xa9\x3d\x90\xa2\xfa\x52\x52\xf3\xd2\xde\xfb\xcf\xf8\x87\x4a\xed\x01\x0b\xf0\xa5\xa4\xb6\x4d\xcf\xef\x3f\x33\x1f\x2a\xb5\x07\xa2\xcc\xaf\x25\x35\x6f\x1b\x61\xff\x99\xf8\xd8\x19\x1a\x3d\xc2\xfb\x70\xa9\x5d\xd9\x92\x38\xf3\x1e\x94\xa8\xdb\x11\xdb\x77\xa1\x9c\xdd\x8a\xc0\x43\x8f\xad\x78\xfb\x12\xe0\xb8\x3a\xc6\xfb\xed\xf0\x83\xfb\x66\xd0\xdd\x52\x99\x62\x00\x60\x38\x06\xa7\x28\xc0\xb3\x80\xa7\xd9\xdd\xf6\xe9\x75\x56\xaf\xbf\xa7\xe2\x01\xe6\xcf\x3f\x41\xfa\x6c\x3d\x06\x11\xbe\x6f\x7c\x15\x10\x11\x00\x14\xb6\x71\x77\x15\x10\x19\xcc\xcc\x47\x05\x44\x05\xb2\xb9\x61\xdb\xac\x57\x01\xd1\xc1\xb4\x70\x54\x40\x4c\x20\x6d\x19\xb6\x0d\x7d\x15\x50\x30\xff\x19\x79\xd4\xb8\x40\x7a\x2e\x32\x45\x7c\x30\xcf\x17\x15\xd0\x71\x85\x06\xf7\xc0\xb0\x1d\xd7\x68\x70\x0f\xa8\xe4\x71\x95\x06\xf5\x08\x24\x32\x90\x02\x88\x3c\x72\xc7\x95\x1a\x8f\xcc\x93\xe3\x5a\x8d\x87\xc6\x8e\x39\x8e\xd9\xc3\x76\xdd\xaf\x03\x62\x8f\x01\x45\x56\xcb\xa3\x8a\x0d\xea\x11\x8a\xf8\x63\x40\x91\xb5\xf2\xa8\x6a\x03\x7f\x80\x22\x22\x18\xb4\x46\x06\x44\x1c\xc7\x71\xd1\x29\x22\x8f\x01\x45\x9e\x25\x47\xd5\x1b\xc4\x23\x14\xd1\xc7\x80\xc2\xeb\x37\xee\x7d\x8f\xd0\x33\x2a\x38\xae\xbd\x98\xe1\x9e\x1a\x8e\xd0\xb7\x06\x3d\x21\x72\xf0\x3f\xc2\x59\x21\x20\x25\x21\x96\xa0\x58\x9c\xa1\x39\x95\xe1\x14\x89\xc6\x11\x52\x09\x1e\x41\x1c\xaa\xa4\xca\x73\xb4\x8c\x00\x27\xd1\x32\x01\x38\x15\x27\x29\x06\x28\x14\x2e\x53\xac\x22\x13\x3c\xe1\x3d\x84\x16\x3c\x92\xbe\xf3\xd5\xf3\x53\xbb\x0a\xe6\xd0\x83\xc4\x34\xce\x86\x56\x4b\xef\xef\x1e\xc5\x2d\x5e\xe9\x73\x9e\x19\x22\x9d\x1c\x8e\xcd\x2c\xd7\x48\x1b\xc9\x37\xa4\xc9\x24\x5b\xe9\x38\x99\x7c\xfe\xbd\xdd\xe2\x96\x2d\xbd\x17\x87\x89\x39\x5d\xa0\x8b\x82\x5b\x3a\x2c\xec\x0a\xf4\x13\x81\xca\xdc\xf8\xe1\xa3\x7b\x3f\xde\x6a\x95\xb6\x27\x4f\x12\x60\x1e\x57\x32\x66\x63\xae\x15\x17\x55\x27\xc9\xc6\x07\xd9\x02\x59\x42\xbc\xd2\xaa\xa8\xe9\x6c\x2c\xa7\xd3\xb9\x45\xb3\x1c\xeb\x09\x0e\xeb\x9d\x92\x49\xf1\x68\xdb\x35\xe9\x68\x8b\x65\x72\x5e\x6e\x0b\x55\x9e\xad\x81\x5a\xc3\x69\x2a\xcb\x52\x32\x33\x4d\xbe\x25\x9a\x68\xfa\xae\x54\x2b\x1d\xc3\x9c\xc8\x7a\xa1\xe5\xb6\x6f\xb6\x5a\xcd\xed\xf1\x64\xb3\xb2\xec\xbe\xa5\x94\x37\x39\xbb\x2e\x35\x67\x6f\x68\x96\x29\xbf\x4f\x67\x6c\x57\x31\x97\xb2\x5a\x7f\x1f\x65\xd4\x5e\xaa\x55\x4b\xe4\x09\xd1\xab\x82\x8e\xab\x9d\xc1\x49\xbd\x31\x64\x47\x8b\xd1\xd2\x65\x2f\x49\xf1\xb0\xd6\x9c\xbf\x77\x3a\xa8\x94\x99\x83\x94\x9a\xed\xc6\xa5\xa9\x11\x37\x2b\x31\x09\xc4\xa9\x79\x31\xed\x10\xcd\x74\xcf\x61\x86\x95\xfc\x62\xd9\x2a\xd7\xc6\xc5\x77\xb5\x93\xec\xc1\x4c\x7c\x91\xd5\x2d\x3b\xcb\xa1\x92\x1a\xe3\x53\x40\xcc\xe2\xa9\x01\x5f\x7c\x23\x86\xe3\x84\xf6\xe7\x9f\x2f\xfe\x32\xf4\xb4\xaf\x7c\xfb\xf0\xd1\x27\x6b\x4f\x2e\xd2\x58\x1b\x83\x16\xa1\x68\x74\x0b\x8c\x67\x00\x19\x45\x39\x0d\x9c\xd5\xb0\xde\xcd\xf7\xf8\xa5\xa8\x99\xf5\x38\x44\x6d\xae\xa9\xa7\xcc\x00\xbc\x54\xaa\xd5\xf2\x0e\x58\x08\xf9\x24\x97\xae\xac\x3a\x2a\x99\x28\x0e\x5b\xf9\x05\x39\x1b\xbc\xdb\x0c\x9c\x13\x19\x58\xcc\x64\x70\x9b\x8e\x93\x44\xad\xd5\xac\xea\xce\x60\x7b\xe4\x61\x57\x36\xfe\x8f\x1e\xdb\x83\xbc\xab\x7b\x5d\x4d\xba\x6d\x7c\xc7\xda\xad\x59\x89\x29\xa0\x32\xd4\x86\xab\x22\x6c\x56\x78\x26\xfe\xae\xda\x3c\xc2\x65\xd3\x2a\xf5\x3a\xef\xf1\x76\x6e\x94\x32\xf3\x3b\xdd\x10\x84\x32\x6d\xe5\xca\x3e\xdd\x0f\x8c\xdf\xd1\xd8\x9d\xb9\xe2\x4f\xc6\x9f\x88\x82\x3f\xe1\xe2\x2f\x1e\x1a\x7a\xfd\xd9\x6e\x81\x13\xd8\xa1\xa1\x89\x15\x84\x2b\xcd\x26\xdb\xca\xc8\xc9\xea\x8a\xa9\xbe\x2d\x8d\xcc\x4c\x26\x9b\x49\x40\xc3\x1c\x99\xd5\xc1\xa3\xfa\x95\x9c\xc3\xb5\x16\x7f\xdb\x5f\xcb\x73\x34\xbb\xdf\xd3\x7f\x0b\x7d\x62\xba\x3a\x5b\x5e\xa3\x2f\x28\xbf\xc4\xdc\x24\x4d\x87\xa2\x67\x89\x8a\xb8\x9a\x56\xdf\x48\x33\x53\x8a\xbd\x03\xb6\xb6\xd6\x6d\x60\xa8\xc5\x54\x77\x5c\x6d\x6b\xd6\xbc\x1e\x6b\xb8\x9d\x52\xad\x26\xbe\x1d\xb8\x42\x9b\x4a\xe1\x68\x50\x66\x84\x35\x9f\xc0\x2b\x76\x5a\xd4\x16\x32\x60\x01\x68\xf2\x5c\x77\x48\x8d\x0b\xa3\x31\x5f\x65\xe9\x51\x82\x5c\x44\x97\xdf\x67\xd2\xd7\x1e\x31\xd5\x9b\xe4\x97\x72\x3f\xba\xfa\x18\x9f\xc3\x84\xd4\xea\xf4\x88\xa4\xd1\x69\x43\xab\xc5\x34\x57\x4b\xa9\x4d\xa6\x4b\x39\x6d\x3a\x21\x85\x7a\x62\x90\x4d\x4d\x69\x69\x55\xcf\xb6\xb5\x63\x7d\x7e\xc0\x5e\x3c\x62\xdf\x0a\x0c\xb7\xd5\xaf\xea\x39\xfe\x0e\xf4\xc5\x0f\x27\xe0\xfe\x1e\x7b\xde\x6a\x35\x6a\x5b\x50\x8e\xa4\x75\x6a\x8c\xc8\x9a\xc9\x02\x5e\xa8\xc6\x96\xdd\x7a\x82\x7f\xef\x2c\x3a\xad\x06\xb9\xd2\x2b\x7a\x77\x5e\x97\x40\x72\x31\xae\x16\x10\xe7\x31\xb0\xb7\xa7\xa2\x70\xec\xfb\x7d\x97\x2b\x8f\xe6\xe1\x7e\x9a\x36\x73\x4e\x4b\x99\x74\xcb\x2d\xa5\x37\x73\x3a\xd3\x46\x26\xee\x48\x72\x17\x1f\x27\xc6\xaa\x1c\xcf\xe6\x45\xad\x3d\x31\x16\xa9\xec\x00\x3e\x4a\x5f\x22\xb6\x48\x08\x99\x83\xaa\x05\xc7\xc3\xbd\x1f\x7e\xf9\xc6\x27\x92\xbf\x7d\x44\x7f\x6a\x14\x2c\x0a\xea\x9e\x72\x4e\x08\xf8\x93\x83\xff\x3c\x7b\xf9\xe6\x8f\x77\xc4\xeb\xce\xf9\xf3\x48\x7c\xb0\xb0\x96\xe7\xed\xcf\x89\x7e\x9c\x95\xbf\x4b\x6f\x37\xba\xbe\x3c\x1a\x1f\x5c\xd0\x17\xdf\x15\x94\xff\x21\x9e\x38\xf8\xcf\xa4\x8f\xd3\x3b\xed\xab\xc0\x8e\xed\xb1\x7c\x80\x17\x32\xbf\x42\x4f\xf9\xf9\xec\x7b\x64\xfc\x23\x2a\x1a\x7e\x2f\x96\xfd\xef\x47\x05\xca\x6e\x2e\xde\x7d\xcf\xe6\xee\x5c\xa9\xf7\x77\xb3\x70\x74\x17\x48\xd7\x57\xcf\xbe\x15\x9e\x44\x13\x2a\x60\x54\x55\xe2\x39\x19\xa7\x58\x44\x92\x12\x2f\x13\x48\x26\x71\x8e\xc3\x49\x12\x97\x15\xc4\x02\x95\xa3\x25\x92\xa2\x48\x05\x22\x42\xa6\x65\x89\x63\x64\x56\xa1\x14\x8e\xa2\x09\xef\x50\xed\x43\xaf\xcb\xf1\xad\xf0\xe8\x6b\x2b\x3c\x86\x03\x4c\xf8\x03\x13\x76\x77\x8f\x12\xca\x9e\x56\xde\x39\x8b\x7c\x2b\xbc\x64\x60\x78\x7d\x5a\xe0\x6a\x79\xbc\xd6\x6a\xd5\xb7\x5a\xa6\xbd\xc5\x87\x5c\x8b\xe4\x97\xc3\x2c\xa8\x5b\x3c\x63\xca\x6c\x79\x6c\x39\x03\x62\x18\x5f\xf1\x85\x72\x55\xe1\x47\xad\x96\x98\xb5\xba\x75\xcf\x6b\x45\x8f\x22\x5c\x2b\xe3\xa3\xe7\xac\x26\xa6\xf6\xfc\x54\x53\x46\x67\x09\xcd\x31\xbb\x36\xea\x0d\x65\x0d\xcb\xec\xac\x54\x64\xa9\x6e\x2c\xd7\x1c\x09\x84\x89\xcf\x65\xb6\x4d\xa4\xde\xe3\xc6\xa8\x85\x08\x5b\x7e\x9f\x14\x8b\x30\x56\xe3\x06\xad\x86\x64\x94\x69\xa3\xca\xc4\x52\x72\xa3\x48\x0f\xb3\x56\xbb\x3a\x5b\xcd\x52\xa9\x9e\x54\x1e\x09\xcb\x5b\x56\x6d\x41\xf9\x09\x51\xc6\xc3\xbb\xc4\x2f\x2c\xef\x3f\xc3\x57\x54\xbe\xb6\xf7\x46\x38\x65\xda\xca\x02\x41\x38\x5e\xd1\x68\x41\xdc\x57\x56\x54\xcf\xc3\x9f\x8c\x84\xdf\xf5\x80\x3e\x8f\xec\xdd\xba\x37\xa2\x65\xc7\xf6\xb0\x79\xc0\x5f\x14\xce\x64\x5f\xae\x79\x84\x67\xe3\x3f\xd5\xed\x50\xfc\xc1\x15\xd1\x97\x88\x48\xce\xcb\xe7\xeb\xd0\x77\x5b\xc4\xb4\x3c\x10\xed\x7e\xff\x12\x11\x76\x50\x27\xfe\x91\x2b\x00\xf7\x8a\x1f\xec\xd9\x3f\x6e\x85\x76\xe0\xef\xbc\x3e\x5d\x8e\x5a\xa3\xd8\x08\x7f\xd4\x78\x36\x43\xfc\x89\x36\xea\x1e\xfc\xdb\xa8\xb5\xdd\x52\xe3\x33\x5d\x5a\xe4\x5b\xb9\x12\x99\x33\xd9\xb9\x89\xbf\x2f\x06\x43\xca\xa8\x57\x93\x70\x58\xa7\xdf\x1d\xa9\xdb\x29\xa6\xdb\xb5\x16\x0b\x57\xef\x65\x79\xb9\xb2\xe8\xcc\x3a\xd5\x2a\xcd\x9b\xec\xb8\x95\xb4\xa8\xd6\xaa\xf8\x3e\x2e\xea\x4e\x2f\x61\xa5\xcd\x66\xcb\xb0\x99\x6a\x52\x78\x76\xd4\x8a\xf3\x32\x0e\x28\x16\x32\x84\xcc\x11\x1c\x49\x00\x84\x38\x9e\x57\x70\x59\x96\x15\x9e\x90\x39\x40\x13\x34\x42\x90\x05\x04\x8d\xb3\x04\x4e\x30\x38\x49\x00\x89\x84\x04\xc5\xf3\x34\xe2\x24\xef\xd1\x49\xe0\x91\x52\x7e\x5f\xd4\x4a\x5e\x8b\x5a\x39\x8a\x01\xe1\x0f\x7b\xdc\xdd\x3d\x2a\x3a\x78\x89\x32\x53\x7c\x51\x6b\x50\xd3\xe3\x01\x2d\xbb\x7b\x2d\x1f\x3d\xea\xf2\xe5\x82\x3c\xfc\x7b\x7a\xab\x09\x98\x19\x4c\xf5\x56\x89\x17\x29\x92\xcd\x76\x52\x72\x66\xaa\xb6\x2c\x73\x05\xea\xe5\xb7\x52\xce\x49\x8c\xe3\xc4\x40\x83\x5a\xb1\x9a\x49\xd6\x92\xe9\x6a\x31\x53\x22\x67\xc3\xba\xdc\x28\xcf\x66\x48\xb4\x4b\xe2\x7c\x91\x8f\x4d\xd8\x2c\x25\xc5\xf8\x94\x85\xd7\x48\x67\x39\x96\x35\xfb\x96\xa8\xd4\x2f\x9f\xf0\xc8\xcd\xd7\xe8\xde\xb5\x74\x20\x17\x1d\x72\x5d\x89\x9c\x9e\x87\xff\x7c\x6e\xea\x0a\xfe\x13\xab\xf8\xe9\x91\x81\x8b\xef\x96\xc8\xe5\x8b\x46\x56\x7f\x9e\xcb\x8b\xf8\x2c\xf2\xdd\x73\x89\x1d\xdb\x5b\xcf\x7a\x12\x85\xfb\xae\xcb\x1e\x46\x7c\x0c\xbf\x3f\x2f\x73\x0f\xfe\xad\x87\xc9\x99\x28\x3d\xce\x35\x49\xbc\x31\x54\xed\x81\xdc\x5a\x22\x83\x6f\xcf\x87\x99\x56\x96\xe5\xf0\x31\x9e\xef\x66\x60\x3a\x3e\x13\x56\x82\x5c\x12\x8b\x3d\x61\x29\x93\x68\x56\xca\xad\x8a\xcc\x6c\x4a\xd5\x97\x78\x9d\xe1\x2c\x46\xb5\x87\x83\x05\x8b\xb7\x17\xb5\x0c\x22\x13\xbd\x75\x62\xf9\x6c\x0f\xc3\xb2\x24\xa3\xe2\x12\xc7\xf0\x0a\xc2\x55\x96\x82\x34\x52\x58\x95\x53\x18\x9a\xe0\x79\x8a\x27\x48\x0e\x49\xb8\x8a\x53\x04\x50\x49\x55\x26\x24\x49\xa6\x48\x0e\xe7\x28\x95\x00\x32\x87\x7b\x4f\xe5\xf2\x9e\x75\x10\xf9\x58\xdf\x7d\x1e\x86\xa3\xc2\xf3\x22\xbb\xbb\x47\x45\x64\x9e\x56\xde\xb9\x0e\xbe\xc7\xc3\xdc\xb9\x7b\xf7\x48\xb6\xf8\x30\x2b\xdc\x2b\xb3\xa7\xb7\x9a\x1c\xc6\xeb\xc2\xdc\xc8\xcb\xbc\x53\x9b\xa5\xb5\x58\x79\xd4\x92\xf2\x95\x77\xca\x34\x6a\xd5\x6e\x13\x2d\xd6\x09\x75\x81\x17\x04\x63\x26\x75\xd2\xcc\xba\x22\x4d\x6b\x78\xbc\xc6\x98\xec\xd8\xd2\xc7\xb5\x31\x57\xa6\x5a\x66\x2d\x9e\xce\x0a\x8d\x6a\x9c\x22\x4a\xe5\xb6\x9c\x7a\x57\xaa\x37\xe5\x3d\xee\xf6\x30\xf7\xc6\xb6\xcf\xf6\x30\x0f\xe2\x7f\xa2\x87\xf9\xc4\xdd\x38\x8f\x94\x3b\x3d\xcc\x57\xda\xcd\xbc\xea\x61\xa2\xcf\xa5\xe7\x78\x98\x08\xf8\x1f\xf4\x30\xe5\x62\x2a\x9b\x60\x9a\xd3\x77\x02\xa4\x4d\x98\xa4\x98\x5a\xcb\x36\xdf\x2a\xba\xde\x4a\xc5\x07\x35\xe6\x2d\x9b\x8b\xbd\x55\xed\x44\x7b\xea\xc8\x92\x95\xe5\xe7\x46\xa6\x9a\xca\xcc\x86\x73\x38\xcf\xf7\xd2\xd2\x92\x1d\xb4\x07\xa2\xd8\xd5\xe2\x25\x21\x33\xec\xe2\x74\x6f\xd9\x29\x81\xe7\xaf\x61\x54\x96\x92\x15\x9a\xe2\x70\x5c\xa1\x49\x56\xc6\x19\x45\x55\x49\x5a\x96\x29\x96\x23\x25\xc4\x71\x40\x26\x14\x86\xc5\x65\x00\x68\x00\x69\x46\x86\xac\xca\xd3\x80\xa5\x39\x45\x66\x29\x40\x2b\x9e\x87\x21\x9f\xe4\x61\xae\xd6\x56\x71\x34\xce\x5c\x78\x3c\x37\x8d\x33\x87\xc7\x73\x6f\x8b\x82\x1f\xf5\x30\x17\x6a\xab\x3e\x7d\x3f\x32\xb0\x86\xf1\x79\x98\x72\x36\x5f\x37\x92\xd5\x31\xdf\xb4\x66\xc4\x7c\x38\x59\xac\x7a\xc3\xf4\x8c\x79\xcf\x55\x27\x72\xa5\x31\xe5\x16\x06\x65\x27\x12\x54\x0d\x52\xc5\xe6\x04\x66\xba\x49\x38\xaa\x75\x1a\x29\xb3\x6a\x64\x53\x82\x45\x3b\xb8\x99\x5b\x2a\xf1\xba\xcd\x34\x72\x5c\x91\x6e\xa1\xb4\x16\x97\xaa\xda\x57\xf4\x30\x91\x2c\xfc\x13\xf1\x87\x64\xaa\x3e\x65\x0d\xf3\xc9\x1e\xe6\x33\xe9\x8b\xb4\x86\xf9\x9b\x2c\xbc\xf0\x24\x0f\xe3\xcf\xd2\xdd\x83\x7f\xeb\x61\x28\x6d\x9a\x6f\x96\x12\x12\xa8\xcf\x2d\xc8\x94\xd1\x5b\x6a\x5c\x84\x96\x55\x34\x12\xca\x92\x2f\x4f\xd6\xb1\x8e\xbe\xcc\x16\x06\x29\x4b\x5b\xd5\x15\x53\xd1\x4a\xb3\x5a\x4a\x29\xb6\x07\x89\xa6\xd6\x4c\x2c\xc6\x64\x5d\x9b\xc4\xf1\x54\xfe\x7d\x5a\x9c\x2c\xdf\x8d\x16\x05\x85\x94\x93\x78\xba\x87\x91\x79\x52\xe5\x70\x86\x61\x55\x92\x55\x54\x16\x87\x04\x8f\x64\x5c\x41\x3c\xa3\xaa\x24\xc9\x01\x86\xa2\xa0\xcc\x11\x1c\xa4\x64\x04\x81\x2c\x31\x32\x92\x80\x24\x23\x99\x51\x55\x15\xa7\xb9\xc3\x53\xeb\x9f\x91\x25\xbb\xc1\xc3\x10\x17\xf6\x76\x77\x77\x8f\x8e\x78\x3c\x9a\x25\xbb\xea\x61\xca\x44\xe2\x4d\x28\x53\x74\x37\x9e\x24\x9d\x4c\x2b\x55\x06\x35\x52\xc0\x8b\x68\x54\xe1\x72\x35\x66\x52\x02\x02\x8f\xda\xba\xb2\xce\x3a\x5e\x7e\xff\x81\x2c\x59\x60\x0d\xe3\xcb\x92\xa5\x29\x83\x1d\x25\x84\x19\x0d\x67\x8b\x3a\xa1\xbc\x65\x1a\x4e\x57\x66\x0b\x02\x64\xa7\xf5\xa6\xae\x97\xa9\xfc\x3a\x9f\x93\x66\x63\x3b\xa9\x2d\xe4\x51\x3a\x41\x28\xd2\x40\xb6\x4c\xde\x91\x17\x89\x5e\x46\x5d\xce\x1a\xad\x98\x3e\x5a\x70\x99\x31\xd7\x53\x21\x43\x8e\xba\x95\x51\xb5\xfb\x15\xb3\x64\x0f\x7b\x98\x07\xf1\x3f\xd1\xc3\x7c\x62\x45\xa6\x47\xca\x9d\x1e\xe6\x2b\x55\xb4\x5e\xf5\x30\x9f\x98\xa5\x12\x9e\x94\x25\x7b\xd0\xc3\x48\x7a\x67\x5e\xcd\x26\x2c\x63\x36\xe3\x0b\x3d\x92\x53\xca\x60\xf0\x6e\xdb\x71\x6b\x6e\xe4\xea\xf9\x2c\xab\x59\x59\xd3\x98\xcf\xe0\xb2\x9c\xe0\xd7\xd5\x6e\xa1\x07\xe6\xa9\xf5\x7c\x48\x80\x35\x97\x1b\x29\x6f\x89\x69\xa9\xc3\xe4\xeb\x6f\x4b\x24\xad\x0c\xde\xb2\x50\x4d\x8b\xd5\xe2\x1f\x50\x3d\x24\x43\x45\x46\x38\xad\xca\x38\x54\x68\x85\x51\x11\x8e\xf3\x12\x27\xe1\x0a\x92\x64\x5c\x21\x15\x55\x21\x09\x04\x29\x42\xe2\x90\x04\x49\xc4\x23\xc8\x70\x32\xc1\x52\x0c\xa2\x00\xae\xbe\x78\xaf\xed\x7b\xe4\xc1\x3c\xf7\x64\xc9\x78\x9e\xbd\xf4\xb6\x15\xf7\xe6\xd1\xc1\x3f\x4f\x27\xef\xac\xd0\xbf\x2d\x47\xe6\x55\xf8\x45\xf2\x17\x9d\xc0\x7e\xae\xa7\xb3\x7b\xfc\x55\xa1\x54\xad\xbf\x2f\xa6\x62\x3c\x21\x74\x16\x36\xa8\x68\xe3\xcc\x5b\x33\x25\xa9\x42\xd7\x21\xcb\x82\xa6\x75\x2b\xad\x86\x82\x4f\x87\x2d\x39\x07\x5b\xa4\x91\x14\xdf\x86\xe5\x5e\x71\x52\x48\xf5\x8a\xa3\x94\x38\xd0\x28\xc5\x98\xb7\xaa\x2b\x94\xec\x09\xcb\x46\xbe\x59\x81\x13\xc5\x5e\xde\xb4\x22\x49\xfb\x15\x39\xcc\x5f\x08\xbe\x77\xc0\xdc\xe9\x5f\x5d\x7b\x3d\x39\xc8\x37\xe4\xba\x62\xaf\x9f\x87\x3f\x5a\xce\xeb\x50\x0f\xe3\xaf\x1f\xb9\xd3\x1e\x9f\xad\x90\x3c\xbd\x2e\xdb\xb8\x67\xe3\xbf\xa3\x42\x53\x10\xbe\xae\xbf\xbc\x96\x53\x8b\x22\xab\x87\x73\x6a\x4f\x1c\xab\x7b\xf0\x6f\xfd\x91\x00\xe2\x85\x72\x6c\x54\x15\xb3\x71\x14\x7b\x6f\xc6\x12\x5d\x95\xaf\xb6\x1c\x2e\xae\x93\x32\x95\x48\xc4\x35\xbe\x55\x22\xeb\xe3\x52\x6b\x69\x4c\x3b\xa8\x59\x6c\xc4\x8a\xf4\x68\x2d\xdb\xad\xd1\xba\xda\xac\xa7\x93\x03\xa2\x4d\xb7\x92\x29\xaa\x34\x4a\xc6\x8b\xd3\x2a\x3f\x53\x88\xf7\xe7\xaf\x78\x24\x85\xe2\x18\x45\x52\x14\x9c\x50\x28\x06\xe7\x00\xcb\xb0\x40\xa6\x20\x0d\x59\xc4\x2b\x0c\xe2\x18\x5a\x86\x04\x2f\x4b\x14\x40\x0c\xa1\xb0\x10\xba\xcb\x22\x15\x21\x5a\x22\x19\x05\x79\xfe\x88\x78\xd2\x79\xc5\x6b\xfe\x88\xc5\x71\x9c\x0a\x7f\xdb\xd1\xe6\xee\xc1\x23\x6d\x0f\x90\x3f\x7a\x5e\xf1\xaa\x47\x8a\x94\x23\x23\xcf\x79\xa4\xf4\x1e\x7f\x35\xce\x8f\xc6\xf9\x36\x31\x23\x17\x6c\x55\x5d\x73\x95\x22\x1a\x89\x12\x68\x34\xb2\xb4\xbe\x9a\x8d\xb2\x78\xdc\xd4\x3a\x56\xd9\x61\xb5\x32\x60\x88\xaa\x34\x1a\x10\x4a\xbd\xd1\x54\x51\xd2\x5c\xc8\x78\x45\x80\xea\x20\xd9\x59\x39\x83\x96\x60\xd8\x85\xf9\xd0\x88\x8f\xd7\xc3\xb8\x70\xd3\x0a\xe6\x6e\x8f\x14\xe5\xcc\xd9\x33\x3d\xd2\x83\xf8\x9f\xe8\x91\x9e\x52\xb3\x7f\x7a\xdd\x6c\xe5\x3e\xfb\xcc\x80\x20\x7c\xdd\x5d\xa8\xab\xbb\x3c\x11\x64\xf5\x4c\x8f\xf4\xe8\x58\xdd\x83\x7f\xeb\x91\x32\x44\xbd\x3b\x95\xa0\x85\xde\x9c\xf8\x5b\x61\xc9\xad\x98\x6a\x6d\xd1\x2a\x15\x87\xe3\x42\x7a\x56\x1d\x56\xd3\x7a\x1c\xd9\x0c\x39\x17\xd8\x8e\xd5\x8b\xcf\xeb\x99\x1e\xc8\x95\x6a\x3c\x55\xd6\xf9\xf7\x2a\x17\x9f\xc6\xc4\x92\x9a\x26\x52\xcd\x44\x7b\x39\x67\xca\xcd\xb4\x94\x2f\x8a\xcf\x5f\x21\x71\x00\x00\x9e\x90\x49\x8e\xa1\x48\x45\x65\x49\x19\x07\x34\xa4\x21\x50\x58\x56\xe2\x70\x42\x51\x55\x9c\x56\x28\x95\xc6\x55\x99\x51\x00\xce\x01\x06\x42\x96\x96\x71\xc8\x00\x9c\x57\x79\xe8\x79\x24\xf2\x49\xe7\x2b\x6e\xf0\x48\x44\xe8\x3b\x8b\x77\x37\x8f\x1e\x43\xf2\xe8\xe9\x8a\x4f\xf4\x47\xbe\xd3\x10\x15\x43\x63\xd3\x85\x41\x4e\xc3\x57\xec\x70\x2a\x2c\x81\xb8\x64\x32\x44\x27\xc5\xac\x6b\xd9\xb1\x9a\xcb\x2e\x53\xea\x0a\xe7\x4b\x73\x9d\x96\x9c\x72\x4e\x48\xa1\x65\x4a\x28\xa9\x65\x28\xc4\xb9\x54\xb5\x67\xd0\x53\x52\xa0\x35\x72\xc4\x24\x33\x49\x5d\x53\x9b\xa5\x66\x12\x30\x9a\xfc\x21\xfe\x28\x42\xc5\xfe\xc3\x55\x01\x4f\xc4\xff\x44\x7f\xf4\x68\x35\xee\xa3\xfe\xe8\x29\xf8\x1f\xf0\x47\x5f\x69\xcf\xea\x9a\x3f\x8a\x22\xab\x67\xfa\xa3\x28\xf8\x1f\xf4\x47\xb1\x76\xd2\xee\xce\xc5\x71\xb2\x91\x99\x97\x47\xc9\x64\xb3\x91\x34\xd5\x9e\xdc\xb1\x72\xa2\xde\xe3\x46\x43\xa1\xf5\x96\x69\xe0\x04\x53\x30\xe6\x38\x35\x12\x5a\xac\xd0\x14\x00\x47\x9b\x42\x66\xd9\x8a\x8f\x3b\xe3\x89\x9c\x1c\x27\x51\xc3\x2c\xca\xe5\x7c\x9c\xaf\x82\x6a\xa5\x33\x8b\x3f\xbd\xae\x8d\x24\x10\x25\x41\xa0\x12\x80\x93\x18\x08\x09\x8a\xc0\x25\x8a\x67\x29\x9a\x81\x40\xc2\x79\x9c\xc7\x11\xc9\x91\x2c\x62\x18\x89\xa4\x78\x1a\x27\x71\x85\x42\x8a\xc2\xe0\x0a\xae\xe2\x34\x8b\x7b\xfe\x88\x7a\x92\x3f\xba\xb6\x27\xc4\xe2\x38\xcd\x84\xbf\xff\x72\x77\xf7\xe8\x71\x56\x8f\x7a\xa4\x0b\x7b\x42\xcf\xce\xd9\xf9\x3c\x52\x31\x37\x5e\xc4\x8c\x41\x8a\xae\xf6\x0c\x4d\xc9\xce\xe2\x9d\x64\x5d\x19\x88\x8e\x66\xc1\x86\x55\xab\x2f\x5b\x16\xad\xbc\xc5\xad\x52\x82\xe0\x90\x9a\x29\x9a\xab\x6e\x09\xc6\x88\x39\xef\xd4\x45\x65\xd5\x8c\x0d\xd2\x1d\x26\x57\x6b\xb3\x4b\x21\x45\x4a\xe5\xa9\xc0\x59\xab\xd5\x4a\x10\xbf\xa2\x47\x8a\xf4\x54\x90\x27\xe2\x8f\xf4\x54\x90\x8f\xf1\x48\x21\x1e\xf2\xd3\x3c\xd2\xbd\xe7\x53\x04\xe1\xeb\x56\x82\x9f\xf5\x48\x7f\x93\x47\x10\x3e\x60\xac\xee\xc1\xbf\xf5\x48\xcb\x31\x7c\x63\xda\x62\xc7\x88\x8f\xdb\x71\x5c\x37\x53\x72\x29\x47\x88\x75\x22\xe1\x4c\xcb\x4e\xaa\x10\x6f\x2f\x0c\x92\x4b\xdb\x78\x41\x5a\xd1\x9c\xbc\x1e\xa6\x34\x60\xb1\x90\x25\x40\xb6\x46\xa6\x1a\x8c\xd8\x53\x4d\x23\x25\x2d\x04\xa1\xa3\xd8\xcc\x28\xb9\x5e\x64\x32\xa2\x50\x7d\xb6\x47\x62\x18\x86\xa1\x19\xc8\x20\xa8\x20\x02\xe7\x08\x99\x66\x39\x9c\x66\x01\xc1\xb0\x0a\x8f\x28\x8a\x26\x11\x42\x34\xcb\x01\x19\xf2\x90\xe6\x20\x24\x01\x8f\x24\x5c\x45\x1c\x49\xd1\xb4\xaa\xbc\xec\x1e\xdd\x1a\xfd\x01\xb5\xbb\x27\xbf\x5e\x70\x44\x80\xa1\x2f\xbd\x79\x9c\x3e\x6c\x44\x79\x8f\x30\xdc\x7a\xa1\x02\x97\xa9\x2e\xaa\x23\x29\x4f\x64\x04\xb2\xdd\x1a\xd6\xac\xfc\x78\xd8\xc1\x71\x35\xcd\xd9\x85\x2c\x3b\xc6\xc5\xda\x32\xd7\x7e\x13\x3a\xa4\xb0\xf7\x42\x9e\xba\x04\x86\xf4\xc4\x4a\x44\xa8\xa5\xca\xfb\xe1\xb5\x16\xcb\x14\xbf\x99\x45\x62\x5c\x49\x76\x10\x41\x36\x29\xc4\x27\x88\xfa\x6a\x1a\x2f\xf4\x6a\x2b\x60\xe5\xde\xeb\xa9\x42\x0e\x5f\x25\x93\xf8\x3c\x9f\x9e\x8e\x67\x92\x6a\x24\x1b\xb1\x4e\x27\x3b\x63\x9a\x7a\x32\xfe\x3e\x4e\xad\x9c\x58\xba\x1c\xeb\xcc\x52\x66\xb5\xa2\x58\x9d\x06\x3b\x05\x66\xa1\x97\xcd\xcc\x1a\xc5\xca\x0d\x9e\xe7\x48\x65\x8f\x3d\x8f\x8f\xe7\x83\xe5\xf5\xc7\x97\xfa\x5b\x1c\x2f\xe0\xb9\xf4\xda\x19\x2c\x4b\xc0\xe8\xe2\x70\x3d\x35\x01\x5f\xca\xac\x16\x85\xc4\xba\x4c\x3b\x71\x51\x4e\x78\x3c\x92\x9a\x63\x95\x27\xdd\x37\xaa\x78\xe8\xdf\x3c\x4b\xc4\x95\xd9\xfc\x00\xfe\x92\xb5\x6e\x54\x1f\xc0\x2f\x08\x7f\x5f\x55\xef\x59\xcb\x1a\x8f\x2e\x8b\xf2\xa4\x77\x91\xcd\x6b\xb2\x78\x74\x2c\x36\xba\x10\x93\x03\xf0\xee\x92\xc5\x7f\x3b\x55\x40\x3a\x0e\x28\x67\x16\x55\x67\x64\xc3\x6a\x9d\x68\xca\x0a\x5c\xcb\xf8\xa0\xbe\x56\x8a\xd5\x25\x5f\xd0\x07\xb3\xde\x6c\x4c\xd2\x55\xfc\xcd\x00\xeb\xfc\xdc\xc8\x6a\x4b\x99\x1e\xc8\x92\x3a\x18\x2e\x0c\x66\x00\xc5\x24\x09\x01\x1e\x63\x14\x98\x20\xea\x71\x66\xf4\x9e\x7c\x7a\xac\x2f\x01\x95\x23\x38\x92\xa3\x64\x9a\x41\x94\x84\x13\x94\x4a\x11\x2c\xad\x12\x14\x43\x73\x38\x94\xa0\xa4\xaa\x00\x22\x52\xe2\x25\xc8\x00\x09\x27\x39\x9e\x25\x69\x16\xd1\x2c\x42\x92\x4c\xe0\x9e\x65\x25\x1e\xb3\xac\xc4\x75\xcb\xca\x52\x97\x4c\xab\x77\xd7\xff\x30\xd6\x47\x6d\xeb\x85\x08\xdf\xbb\x22\x54\x11\x85\xda\x56\x75\x92\xaa\xbf\xf7\xd0\x00\xb0\xef\x0e\x47\x98\x45\x65\x86\xa8\xd8\xdb\x6a\x62\xbf\x8d\x32\x71\x25\xdd\x51\xf9\x78\x36\x5e\xeb\xaa\xad\x1e\x99\xac\x36\x48\xb8\x5c\xf6\x26\x74\x61\xa6\x65\xd3\x7c\x6e\x66\x2c\x8a\xe3\x1a\x68\xe4\xe1\x4a\x36\x73\xd5\xe4\x7c\x96\x96\x13\x75\xb9\xf8\xb5\x6c\xeb\xa3\xb6\xed\xd1\xf9\x5c\x5c\x16\xc6\xe6\x33\x6d\xeb\x27\x9e\xc9\xbb\x9a\x47\xf9\x44\xdb\x26\x3c\xc9\xb6\x72\xd4\xa1\x7f\x48\x0e\xf2\xa2\x6d\xed\xd0\xab\xa6\x4d\x74\x4c\x05\x71\xac\x5a\x9a\x25\x33\x70\x32\xaf\x2c\xb8\x1e\x5b\xa1\xe3\xcb\x4e\xcd\x20\xdf\xaa\x75\xa1\xd9\xce\x80\xb6\xb2\xc4\x45\x9e\xb0\x8b\xe9\x5e\xac\xce\x98\x89\xf8\xa2\x0e\xa7\xd2\x7b\x6e\xa4\x34\xd7\x63\xbb\x93\x4f\x34\x05\x76\x36\x98\x08\xa3\xc9\xf3\x4f\x6f\x10\x12\x81\x38\x42\x91\xa0\xb4\xb1\xab\x12\xc1\x42\x5c\x26\x01\x85\xcb\x90\x05\x0a\x07\x65\x5e\x92\x59\xc0\x91\x40\xe5\x55\x1a\x92\x92\xc2\xf0\x48\x86\xa4\xc2\x71\xaa\x84\x23\x99\x96\x3d\xcb\x48\x3e\x66\x5b\xaf\xa6\xf3\x01\xc3\x93\xa1\x07\xcf\xf7\x77\xfd\x8f\x95\x7e\xd4\xb6\x5e\x78\x5a\x92\x77\x45\x58\xbd\x87\xd8\xd6\x64\x6e\x6e\x00\xa7\x90\x2e\xa4\xa8\xd6\x6a\xe9\xe0\x4a\x32\xd1\x12\x55\xc6\x91\x68\x83\x92\xd6\x45\x2b\xad\x25\xa6\x31\xa3\xd5\x2b\x8e\x57\xb2\x43\x53\x7a\x49\x25\xc6\x2b\x67\xb8\x62\x8a\x0a\xdd\xcb\x51\x22\x95\x34\x64\x5b\xa5\x18\x51\x18\xc4\xd3\xf5\x66\xc5\x9e\x70\x6a\x37\xf9\xb5\x6c\xeb\xa3\xb6\xed\xd1\xf9\x5c\xc0\x47\x8c\xf0\x44\xdb\xfa\x99\x79\xe1\x8f\xb0\xad\x51\x6d\x9b\xf0\x24\xdb\xca\xfa\x06\xa0\x78\xb7\x2c\xfe\xbb\x96\xa6\x8a\x54\x5f\xe9\x2b\x94\x92\xe5\x82\x92\xa9\x2e\x8d\x5a\x26\x66\xb5\x63\x3d\x94\xe6\x86\xf9\x95\x29\xcc\xd4\x69\xab\xdd\xc8\xd9\x9d\x02\x42\xd9\x61\x87\x9f\xda\x52\x97\x43\xc3\x0c\x6a\xd7\x51\xbc\x2c\xd0\x9d\x42\x26\x56\x1e\x08\xd9\x6a\x6d\x64\x24\xd9\xdc\x5b\x86\x10\x9e\x1e\xb7\x22\xc0\x4a\x10\xd1\x34\xa1\x40\x1c\xe0\x34\x54\x48\x42\xc5\x25\x1e\x42\x45\x55\x70\x95\x21\x48\xa4\x92\x2c\x92\x28\x8e\x91\x00\x2e\xe1\x14\x25\x03\x9e\x20\x39\x92\xc1\x11\x45\xd3\x0a\xeb\xd9\x56\xea\x31\xdb\x7a\x35\x35\x0d\x58\x00\xc2\x4d\xab\x77\xd3\xff\x78\xfc\x47\x2d\x6b\xd0\x95\x9f\x58\xd6\x08\xb5\x8c\x61\x96\xb5\xdb\x55\xd7\x65\x6b\x5c\x19\xa8\x23\x9d\x31\xac\x4a\xcc\x4c\xa8\xf3\x49\x6e\x5c\x9b\x13\x63\x75\x65\x50\xb8\x49\xcf\xda\x35\x76\x0d\xba\xe3\x0a\x37\x35\xd3\x31\xa6\x33\xd3\x28\x30\xcc\x27\xda\xa5\x65\xcb\xac\xb0\x80\x4d\xb4\xc4\x0a\x62\xf1\x2c\xee\xa0\xf6\xa2\x81\x86\xa3\xdc\xd7\xb2\xac\x8f\x5a\xb6\x47\x67\x73\x9e\x8a\x95\xba\x4f\xb4\xac\x9f\x59\x93\xf8\x11\x96\x35\xaa\x65\x13\x9e\x64\x59\xe9\xe5\x55\x44\x97\x2c\x2b\x91\xce\x70\xc3\x19\x3d\xa4\x3a\x74\x76\x3e\x85\xef\x6f\x33\x61\xc2\x4e\xd7\xbd\x91\xe4\x4c\x27\x5c\x0f\x95\xf2\x65\x68\x8c\x10\xe7\xb4\x73\xc3\xb7\x3c\x8c\x2f\xe6\x06\x63\x96\x4b\xdd\xb5\x66\x0c\xe5\x14\x4c\xc6\x78\xb4\x34\x6a\x49\x72\xce\x27\x4a\x85\x8e\x61\xe1\xa4\x49\x27\x9e\x9e\x6b\x95\x55\x85\xe3\x00\x83\x14\x9a\x63\x65\x1a\x29\x1c\xa7\x20\x88\x23\x09\xc7\x39\xc0\xc9\x50\x25\x39\x19\x67\x69\x1c\xb1\x2c\x85\x23\x9c\x56\x10\x29\x13\x2c\x60\x19\xc4\x43\x84\x38\x84\x3c\xcb\x4a\x3f\x66\x59\xaf\x3d\xe4\x93\x05\x2c\xcf\x72\x17\x4c\x2b\xcf\xf2\x2f\xc7\x2f\xfa\x78\xd4\xb6\xa6\x02\x83\x7a\x62\x5b\x23\x54\xe5\x85\xd9\xd6\xd2\xb8\x3a\x50\xaa\x68\x5d\x94\xdb\xa9\x76\x85\x53\x5a\xb5\x51\xd2\x49\xd5\x29\x27\x93\x4d\xac\xf3\x0a\xac\x8c\x6a\x4c\xec\xad\xc0\xc6\x9c\xe2\x7b\xbe\x6d\x36\x87\x52\x52\xe8\xd8\x72\xad\x9b\x8d\x0d\x99\x94\xf2\xd6\x4a\x35\x61\xf2\x5d\xe9\xda\xed\x84\x60\x67\x48\xbc\x3d\x1f\x66\x0b\x5f\xcb\xb6\x3e\x6a\xdb\x1e\x9d\xcf\x39\xbe\xa3\x2d\x9f\x99\x11\xf8\xc4\xea\xba\x8f\xb0\xad\x51\x6d\x9b\xf0\x24\xdb\x1a\x35\xf3\xbe\xb5\xad\xef\xbd\x51\xb6\xd3\xcc\xd8\xc3\x4c\x6a\xd0\x1a\xbe\x65\x5a\xcd\x9e\xc0\xd6\x9a\xf3\x42\x6d\x2d\xd8\xfa\xa4\x3d\xa4\x45\xb4\x58\xac\x63\x6f\x56\xa3\xb8\x36\x66\xa9\x2c\xb1\x5c\xa6\xd8\x8c\xd8\x4e\x54\xcc\xd8\xa0\xa3\x82\x5a\x2b\xad\x71\x64\xbb\x90\xd2\xb4\x42\x9c\xe7\x53\x96\x79\xf3\x13\x83\x8e\x5f\x1f\xe4\xbd\x5e\xd7\x76\xa0\x63\xfb\x3f\xf7\xa7\x23\xb4\xde\xbd\x86\x27\x51\x2e\xd5\x1b\x35\x21\x5b\xba\xf6\xc6\x20\xa1\xd0\x10\x6b\xdb\xb7\xf6\x94\x4b\x85\xae\x1f\xe2\x6f\x18\x86\x61\x42\x32\xe9\x83\x76\x82\x10\xab\xd4\xb2\x45\xa1\xd6\xc5\xf2\x62\x17\xfb\xae\x2b\x27\xd4\x6a\xa6\x35\xed\x8f\x75\x6d\xf7\x6e\xca\xc0\xf7\x27\x51\x1d\x80\x7a\x8e\xf2\x73\x88\xaf\x52\xbf\xf3\x64\x2e\xdb\x76\xe0\x6b\xff\xf0\x7e\xe4\xfe\xe1\xad\xc8\x7d\xff\xeb\x8f\xfb\x4f\xe1\xee\x18\xed\x39\xe6\x22\x11\x86\x35\x4b\xd9\x6a\x53\xc4\xbe\x1f\x9a\xbf\x62\x87\xf6\xbb\xcf\x5e\x87\x3b\x45\xf3\x9c\x61\xbd\x9b\xf1\xbb\x06\x75\xff\xc6\xd4\xe3\x17\x79\x5d\xbe\xfd\x64\xce\xce\x23\xb9\xc4\xe9\x05\xb2\x6e\xe6\x3c\xf4\x25\x66\x57\x5f\x13\xf6\x5c\xee\xc3\xd0\x5c\xe2\xff\x22\x69\x57\x25\xe0\xa9\xb4\xb4\x76\xb5\x7d\xc7\x48\xb6\x94\x14\x3b\x57\x78\x48\xd4\x44\xa1\x21\x7a\x4d\x8f\xa1\x60\xe5\x52\x70\x32\x34\xeb\xd9\x52\x1a\x93\x1c\x0b\x21\xff\xec\x0a\xa7\xc6\x9b\x63\x8f\xd3\xe3\xc1\xb9\x8d\xa2\x90\x79\x2d\xad\xfb\xdb\x17\xfa\x46\x26\xe7\x00\xc2\x4f\xc9\xd1\x6a\xe0\x98\x1e\xaf\xf1\x2b\xb6\xfd\xd0\xb7\xd1\x6c\x8e\x26\xf2\xa9\xc0\xa4\x75\x5f\x45\xe8\x3e\x02\xa7\xa6\xed\x68\x16\xb2\xcf\xd2\xe9\x83\x76\x1b\xad\xbe\x0e\x3f\xb0\x76\x46\xac\x89\x98\x1f\x46\xb6\x8e\x95\xca\x0d\xd7\x87\xff\x71\x42\xfa\x00\xda\x83\x27\xd0\xbc\x01\x73\x1b\xb1\xfe\xb9\xb2\xe9\x75\x4e\x9e\xfa\x64\x82\xac\x67\x91\x76\x00\x76\x1b\x81\x5e\xfb\x13\x32\xb7\x82\x3d\x7f\xf7\xb2\x8c\x0d\xa4\x68\x0f\xcc\xa4\x3d\x84\xdb\xe8\xf7\xda\xee\xf5\xf5\x15\x83\xd3\xa9\xa1\xcb\x9e\x7d\x36\x2d\x25\xc4\x6f\xf6\xd1\x66\xb2\xba\xf7\x23\x50\xba\x75\xdb\x1e\xc1\x01\x70\x7e\xb2\x91\xaa\x22\x39\x38\xf7\x4f\xdd\x88\xae\xbc\x62\xdf\xdc\xce\xdf\xc2\x88\xd5\x95\x27\x91\xa9\x2b\x37\x13\xb8\xb3\x05\x1b\xf2\x22\x10\x6d\x4e\xfb\xd3\x67\xd1\xbd\x85\xe5\x27\x3d\x24\x76\x88\xc4\xc9\x79\x06\x9c\xd5\xf3\x18\xd8\xc2\x0a\xd1\xe9\x88\x2c\xf8\x21\x9c\x63\xc2\x9c\x6e\xb4\x72\x60\x46\xe2\x61\x4b\xfc\x01\x46\x54\xe1\x5f\x16\xb4\xbd\x9d\xed\xae\xef\x7c\x5c\xd6\xc7\xe0\xfc\x24\x7b\xbf\x07\xad\xdf\x59\x8a\xfc\x72\x7d\x16\x59\x27\x30\x6f\x34\xcf\x67\x08\x74\xbc\x21\x71\x1e\x19\xd6\x03\x8c\xe8\x2a\x79\x4d\xfd\x1c\x4b\xd9\x20\x91\xa0\x7d\x67\xbc\x70\x96\xe0\x53\x60\x01\xca\x15\x14\xa0\xd3\xdf\xf6\x2a\x81\xa6\xaa\x3e\xe0\xb4\x4e\x41\xdd\x44\x9c\xdb\xf2\x12\x69\x2e\xed\xc8\x7a\x9a\xf8\x02\xf0\xae\x11\x19\x68\x7e\x0b\xa5\xcf\x91\xe3\x11\xb4\x5b\xa9\xbc\x2a\xcd\xe7\xd0\x76\x13\x4d\x97\x69\xd9\x51\x6c\x98\xe6\x68\x3e\x7d\x8c\xa2\x63\x58\x37\x8f\xa8\xb7\x00\x09\xa1\x6f\x0a\x75\xab\xef\xe8\x63\xf4\x14\x0a\x83\xd0\x6e\x9b\xb7\x5b\x02\x5f\xb1\x20\xc9\xaf\xd8\xd6\xc4\xcb\x86\x69\x23\xa5\x0f\x9d\x10\x26\x9e\x60\xb7\xb7\x70\xae\x51\x7c\x67\x74\xb4\x81\xfa\x34\xe9\xde\x21\xd8\xab\x72\xd3\x27\x0a\x5a\xf5\x03\x21\x87\xdd\x37\x27\x7d\xa8\x28\x16\xb2\xed\x47\x05\x7a\x15\xc1\xd1\xc2\x79\x7b\x3b\xb0\x54\xf5\x1a\xde\x41\xfb\xe3\x7a\x70\x09\xf6\x75\x8a\xcf\xcc\xb2\x63\x80\xdb\x28\x7c\x03\xcf\x59\x4f\xa3\x27\x45\x2e\x42\xbd\x1a\xf6\x6f\x1a\x5d\x21\x74\x1b\x43\x6d\x40\xee\x95\xe8\x49\xd4\x9e\x03\x7d\x35\x7c\xbb\x55\x93\x7d\xc0\x9f\xad\x0c\x47\xa0\xa3\xc4\x9b\xe1\xe0\xc6\x53\xd3\xda\x18\xbe\x05\xb2\x6c\xdd\x9c\x3c\x5f\xd0\x41\x0c\xd7\xc9\x0f\x74\xb8\x9d\x99\xad\xe9\xb9\x3d\xc9\x11\x41\xfe\x3e\x1c\x57\x39\xf1\xb5\xbd\x9d\x89\xa9\x85\x16\xba\x39\xb7\x3f\x85\x9b\x73\xc8\xae\xb2\x75\xae\xd3\xed\xfc\xed\x92\x28\x1f\xc6\xd3\x0e\xc1\x55\x3e\x42\xd3\x8f\xc7\xa0\xf7\xfe\xf6\x43\xa6\x76\x10\xfa\xd9\x05\xf0\xbd\x13\xfc\x18\xe8\xf1\x12\xea\x49\x33\xfc\x12\x8a\x5b\x78\xb8\xb2\xae\xbb\x88\xec\x79\xee\xeb\x14\xf0\x4d\xb4\x5f\x77\x62\xfe\xc5\xf6\x47\xa8\xcd\x29\xfc\xc8\x4b\x7d\x37\x88\xdb\x3b\xf2\x5d\x86\xb1\x2f\x99\xe6\x28\xb2\x94\x2f\xc0\xbc\x1a\x22\x7c\xff\xae\x20\x07\xea\x86\x8d\xfd\xfc\xf7\xbf\xb1\x17\xdb\x34\x14\xdf\xf6\xe6\xcb\xaf\x5f\x0e\x5a\x39\x3f\x7e\xbc\x62\xe1\x0d\x65\x53\xb9\xad\xa1\xb7\x39\x12\xde\x54\x32\xe7\xda\xc0\xb9\x09\xfd\x51\xd3\xcb\x04\x1c\x35\x0d\x90\xb0\x4b\x8a\xbb\x4a\x86\xfd\x89\x91\xe4\xcd\x95\x01\xba\xd2\x57\x7d\xfb\x76\xa9\xfc\xe7\xd4\x07\x6c\xd1\x62\xa9\x72\x4d\xcc\xa6\x4b\xfb\x3d\x39\xac\x26\xa6\xc4\x9a\x58\x4a\x88\xf5\xc0\x36\x95\x7b\xb7\x5c\xc2\x9a\x95\xe4\x46\x65\x6a\x62\xbd\x51\xcb\x26\x1a\x9b\x9f\x92\x62\x41\x6c\x88\x58\x42\xa8\x27\x84\xa4\x78\x61\x63\x73\xb3\xee\x38\xfe\xda\x0f\xa4\x62\x9e\x27\x8c\x63\x3c\x57\x76\x2d\xc3\x28\x39\x96\x4f\x30\x6d\x74\x56\x58\xdb\x40\xff\xca\x16\x6f\xa8\x24\xb6\x4b\xd9\xbf\x5d\x0e\x7e\x3a\xce\x49\x61\x97\x25\xb8\xac\x30\xf7\x49\xe0\x34\xa9\xf4\x37\x8a\x21\x84\x98\x63\x59\x9c\x49\x83\x3d\x57\x29\x82\x29\x8e\xaf\x20\x90\x70\xd5\x38\xc9\x21\xdd\xa2\x1d\x18\x54\x14\xa4\x60\x63\x38\x99\x43\xc3\x58\x1f\x51\x9a\x4d\x61\x62\x27\x5b\x6f\xd4\x3d\x9a\x3d\xce\x7e\x1f\xa1\x75\x7f\x01\x8d\x39\xea\x6f\x20\x22\x2c\x59\x2b\x57\xfc\x84\x1f\x7a\x05\x5a\x7a\x25\x12\xbf\xb9\xed\x83\x08\xce\xc3\xfe\x63\xe7\x22\xbd\xe6\x41\xcc\xdf\x5d\xb9\x5d\xbc\x36\x42\x92\x07\xd0\x82\xb2\x83\x2c\x6c\x01\xad\xb5\x3e\xd1\xbe\x13\x34\xfd\x63\xbf\x53\xfa\x7a\x1d\x8a\x8b\xf4\x1a\x9c\xdf\x02\xb5\xbe\x41\x6a\x0f\x07\x28\x56\xd3\xbe\x3e\xd1\x90\xed\xf4\x0d\xb8\xf9\xe3\x46\xda\x2f\xaf\xd8\x0b\xfe\xf2\xe3\x8f\x53\x5d\x09\x00\x3a\xa7\x2c\xe7\x24\x7d\x5c\xf1\x31\x42\xeb\xcd\x88\x1f\xc9\x73\x9f\x30\xb1\x75\x6d\xb2\x89\xf5\x6f\x10\xe8\xae\xd3\x19\x69\x30\xd4\x8f\x1b\x64\x89\x79\xc8\xa2\xf7\x5f\x22\x5d\x1b\x38\x98\x3e\x71\x90\x86\xac\xc0\x30\xfe\xfc\x89\x2d\x11\xb6\xd4\x0d\x03\x9b\xcd\x91\xb5\xc6\xa4\xf5\x0e\xa1\x6d\x62\xce\x00\x3a\x98\x6e\x63\xcb\xc1\xfe\x57\xdd\xc6\x9c\x01\xc2\x54\xdd\xb2\x1d\x4c\x77\xd0\x18\xd3\x27\xee\x2f\xb2\x39\x9e\x9a\xb6\xee\xa0\x8d\x70\x6f\x20\xeb\x48\xda\x1e\xf0\x7d\xd9\xc6\x8f\x8d\x6e\x6c\xed\x4e\xc5\xab\x12\xa8\x57\x0b\x98\x02\x1d\xb8\xb1\xe7\x98\x32\x1f\x4f\x5d\x84\x06\x72\x90\x6b\x30\xfe\x6f\x00\x00\x00\xff\xff\x82\x8f\x9e\x4b\x30\x29\x01\x00") +var _pathed_paymentHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x7d\x69\x93\xaa\xc8\x12\xe8\xf7\xf9\x15\xc4\x89\x1b\xd1\xe7\x84\x7d\xa6\x29\x76\xce\xbc\xb9\x11\xa8\xb8\xef\xbb\xde\x98\x30\x0a\x28\x10\x45\x51\xc0\xad\x6f\xdc\xff\xfe\x42\x70\x41\x14\x17\xb4\x7b\x7a\xde\x23\xce\xf4\xa8\x54\xe5\x56\x59\x99\x59\x59\x59\xf0\xf3\xe7\x6f\x3f\x7f\x62\x15\xd3\x76\x34\x0b\xd5\xab\x05\x4c\x81\x0e\x94\xa0\x8d\x30\x65\x3e\x9e\xfe\xf6\xf3\xe7\x6f\x9b\xfb\xc9\xf9\x78\x8a\x14\x4c\xb5\xcc\xf1\xa1\xc1\x02\x59\xb6\x6e\x4e\x30\xfe\x77\xe6\x77\xe0\x6b\x25\xad\xb1\xa9\xd6\xdf\x74\x0f\x34\xf9\xad\x2e\x36\x30\xdb\x81\x0e\x1a\xa3\x89\xd3\x77\xf4\x31\x32\xe7\x0e\xf6\x27\x86\xff\xe1\xde\x32\x4c\x79\x74\xfa\xab\x6c\xe8\x9b\xd6\x68\x22\x9b\x8a\x3e\xd1\xb0\x3f\xb1\x97\x66\x23\xc5\xbd\xfc\xb1\x03\x37\x51\xa0\xa5\xf4\x65\x73\xa2\x9a\xd6\x58\x9f\x68\x7d\xdb\xb1\xf4\x89\x66\x63\x7f\x62\xe6\x64\x0b\x63\x80\xe4\x51\x5f\x9d\x4f\x64\x47\x37\x27\x7d\xc9\x54\x74\xb4\xb9\xaf\x42\xc3\x46\x47\x68\xc6\xfa\xa4\x3f\x46\xb6\x0d\x35\xb7\xc1\x12\x5a\x13\x7d\xa2\xfd\xb1\xa5\x1d\x41\x4b\x1e\xf4\xa7\xd0\x19\x60\x7f\x62\xd3\xb9\x64\xe8\xf2\xeb\x86\x59\x19\x3a\xd0\x30\x37\xcd\x84\x42\x43\xac\x61\x0d\x21\x5e\x10\xb1\x6c\x0a\x13\x3b\xd9\x7a\xa3\x8e\x95\x4b\x85\xee\xb6\xfd\xef\x03\xdd\x76\x4c\x6b\xdd\x77\x2c\xa8\x20\x1b\x4b\xd6\xca\x15\x2c\x51\x2e\xd5\x1b\x35\x21\x5b\x6a\xf8\x3a\x1d\x37\xec\xcb\xe6\x7c\xe2\x20\xab\x0f\x6d\x1b\x39\x7d\x5d\xe9\xab\x23\xb4\xfe\xe3\x33\x10\xca\xee\xa7\xcf\x40\xb9\xd1\xab\xcf\x63\xd0\xc3\x76\x3f\x77\x1e\x81\x1b\x45\xbe\x84\xcc\xd7\xea\x00\xdc\x6d\x9e\x2d\x25\xc5\x8e\xaf\xe5\x16\xac\x4b\x55\x1f\xa9\x2a\x92\x1d\xbb\x2f\xad\xfb\xa6\xa5\x20\xab\x2f\x99\xe6\xe8\x72\x47\x7d\xa2\xa0\x55\xdf\xc7\xdc\xc4\x86\xae\xa2\xdb\x7d\x73\xd2\xd7\x95\x7b\x7a\x9b\x53\x64\xc1\x7d\x5f\x67\x3d\x45\x0f\xf4\x3e\x50\xf2\x10\x15\xf7\xf5\x35\x90\xa2\x21\xcb\xed\x68\xa3\xd9\x1c\x4d\xe4\xbb\x58\xf0\x75\x9f\x5a\x68\xa1\x9b\x73\x7b\xfb\x5b\x7f\x00\xed\x41\x44\x50\x8f\x43\xd0\xc7\x53\xd3\xda\x4c\xc7\xad\x4d\x8d\x0a\x26\xaa\x2c\x65\xc3\xb4\x91\xd2\x87\xce\x3d\xfd\x77\xca\x1c\x41\x95\xb6\xf3\x32\x02\xd1\xfe\x9e\x50\x51\x2c\x64\xdb\x97\xbb\x0f\x1c\x4b\x71\xfd\x4e\xdf\x30\xcd\xd1\x7c\x7a\x43\xeb\xe9\x35\x92\xbc\x56\x50\xb7\xee\x04\xbc\x33\xba\x37\x77\xd8\xd8\x09\x55\x45\xd6\x6d\x4d\x77\xe0\x23\x74\xd9\x8a\xf5\xb6\x4e\xae\x69\xbd\x03\x89\xdf\x14\x5f\xeb\x31\xdd\x74\x18\x38\x57\x47\xc0\x3e\x32\x40\xd2\xfa\xaa\x1a\x0d\xf6\x33\xfd\x96\xc6\xa6\x47\x87\x79\xb5\xa1\x6e\x3b\x7d\x67\xd5\x9f\x5e\x07\xb9\x69\x69\x4e\x6f\x6d\x89\x6e\x6d\xb6\x73\x25\x97\x1b\x4b\xbb\xe9\x7e\xb5\xd9\x75\x2b\x26\xad\x6f\x1b\x4c\xcf\x47\x6e\xa4\x6d\xdb\xf3\x6b\x98\xf7\x8d\x65\x53\x41\x77\xc6\x05\x7b\x35\x98\x42\xcb\xd1\x65\x7d\x0a\x27\x17\x9d\xf7\xb5\xae\xfd\xe9\x9d\xb1\xc9\xde\xa3\xdd\x4b\xc1\xf9\x8e\x77\xe3\x77\x85\x77\x0b\x3e\xaf\xe1\x87\xc3\xf7\x06\x73\x33\x92\xdb\x8f\x1b\xff\xb0\x0b\xfd\x5c\x65\xe8\xdf\x48\x81\x66\x5a\xd3\xfe\x58\xd7\xb6\x01\xc3\x05\x12\x02\x2d\x6f\xe6\xf1\xfe\x78\xef\x12\xe4\x5b\x95\xd3\xeb\x9d\x28\x17\x9a\xc5\x12\xa6\x2b\x1e\xe6\xa4\x98\x12\x9a\x85\xc6\x8d\xb0\x43\x94\xee\x09\x90\xb7\xc3\x7d\x19\x92\xfb\xed\x76\xf6\x77\x5e\xba\x2e\x56\x9b\x62\x29\x11\x41\x66\x9b\x38\xdb\x46\xb3\xbb\x31\x1f\x01\xb9\xb9\xb7\x82\x6e\x6c\x7b\x88\x66\x6f\xe6\x30\x64\xd6\xdf\xc3\xdf\x79\x10\xb7\xf5\xdd\xc6\x7d\xb7\x35\xde\x06\x79\x37\xf3\xb6\xb5\x00\xf7\xf0\xe2\x75\xb9\xb1\xed\x36\xfc\xbb\x9d\x9e\x5d\xbc\x78\x0b\x45\x01\x1b\x72\xb9\xb1\xcf\x24\x6c\x1b\x0a\xe9\x74\x4d\x4c\x0b\x8d\x33\x8d\xc7\xfa\x66\xc5\xa1\xcb\xe8\xfb\x64\x3e\x46\x96\x2e\xff\xe7\xaf\x1f\x37\xf4\x82\xab\x08\xbd\x0c\x68\x3b\xdf\xe1\x64\x8d\x0c\x37\x15\x73\x43\x0f\x55\xb7\xce\x76\x49\x35\x4b\x89\x46\xb6\x5c\xba\xc0\x4f\x1f\x6a\xda\x81\xba\x57\xec\x84\xd0\x0b\x30\x76\xdc\x3d\x00\x63\xc3\xab\xdb\xfd\x40\xfc\x2b\x76\x0f\x23\x2e\xeb\x37\x40\x10\x3b\x0d\xb1\x54\x0f\x80\x30\xa6\x9a\x3d\x33\x76\xba\x98\xc8\x88\x45\xe1\x04\xc3\x1f\xbf\x79\x59\xb8\x12\x1c\xa3\x5f\xbb\xdf\xb0\xc6\x7a\x8a\x7e\x6d\xbb\xfc\x81\xd5\xe5\x01\x1a\xc3\x5f\xd8\xcf\x3f\xb0\xf2\x72\x82\xac\x5f\xd8\x4f\x37\x39\x97\xa8\x89\x9b\xf1\xda\x42\xde\xc1\xfb\xed\x08\xe2\xf1\xcd\x2d\xe0\x44\xb9\x58\x14\x4b\x8d\x0b\x90\xbd\x06\x58\xb9\x74\x0c\x00\xcb\xd6\xb1\x97\x5d\xda\x6d\xf7\x9b\xed\x02\x79\x09\x62\xde\xb1\xbf\xc5\xb9\x97\xd0\x55\x7e\x8e\x64\x59\x2a\x37\x02\xf2\xc4\xda\xd9\x46\x66\x4f\x96\x3f\xff\x76\x84\xfe\x00\x25\x40\xc8\x3d\xcc\x9f\x00\x71\x05\x50\x29\xbc\x4d\xb5\x7a\xb5\x80\x4d\x2d\x53\x46\xca\xdc\x82\x06\x66\xc0\x89\x36\x87\x1a\x72\xc5\x70\x63\xbe\xd0\x4f\xee\x75\x45\xdb\x92\xbf\xd3\xd5\x03\xfd\xbb\xb1\x3d\x27\xcb\xbd\x66\x5f\x85\x8f\xd5\xc4\x46\xb3\x56\xaa\xfb\x7e\xfb\x0d\xc3\x30\xac\x20\x94\xd2\x4d\x21\x2d\x62\x2e\xf7\xc5\x62\xd3\xb3\x77\xf5\x46\x2d\x9b\x68\xb8\x2d\x84\x3a\xf6\xaf\xfe\xbf\xb0\xba\x58\x10\x13\x0d\xec\x5f\x60\xf3\x2d\x38\x1a\x57\x27\xe2\x63\xdc\x5d\x03\xff\x34\xe6\x88\x73\xcc\xdd\x62\xa9\x1e\xe3\xef\x06\x0c\x7b\x16\xf7\x3f\x45\xe2\xf0\xfb\x6f\x18\x96\x10\xea\x22\xd6\xce\x88\x25\xec\x5f\xe0\x3f\xe0\xaf\xb7\x7f\x81\xff\x10\x7f\xfd\xfb\x5f\x84\xfb\x99\xf8\x0f\xf1\x17\xd6\xf0\x6e\x62\x62\xa1\x2e\x6e\x84\x22\x96\x92\x3f\xce\x4a\xe6\x06\x3f\xf0\xa0\x64\xae\x63\xf8\x68\xc9\xfc\x9f\x28\x92\x39\xf5\xa9\x5b\x39\xec\xfd\xf0\x6d\x82\x38\xb8\xed\x13\x88\x2e\xc5\x18\x56\xdf\xc8\x0a\xfb\xf3\x60\x01\x5e\xbd\x9f\x1b\xdd\x8a\x88\xfd\xe9\x9f\x11\x3f\xce\xcd\xda\xa7\xd2\x18\x04\x18\x20\x71\x37\x8d\x6f\xa7\xf0\x6c\x08\xf4\x28\x95\xe7\x80\x06\x28\x3d\x9a\x90\xc7\xe4\x1e\xb4\xec\x94\xda\x73\x61\xde\xc3\xd4\x9e\x01\x1a\xa4\xd6\x3f\x49\x2e\x52\xbb\xf1\x5c\x0a\x52\xe1\xdc\x70\xfa\x0e\x94\x0c\x64\x4f\xa1\x8c\xb0\x3f\xb1\x97\x97\x3f\x8e\xef\x2e\x75\x67\xd0\x37\x75\xc5\xb7\x95\x76\xc4\xab\x3f\xfe\xdd\xb2\xe8\x4e\xb0\xdb\xd8\xf3\xe6\xa2\x7f\xf1\xed\x71\xa4\x2b\x98\xa4\x6b\xfa\xc4\x71\x03\x83\x52\xb3\x50\xf0\xd8\x81\xe3\x4d\x18\x8f\xc9\x03\x68\x41\xd9\x41\x16\xb6\x80\xd6\x5a\x9f\x68\x81\x66\x93\xf9\x78\x1f\xf2\x63\xfa\xc4\x41\x1a\xb2\x02\x4d\x54\x03\x6a\x36\x66\x8f\xa1\x61\x9c\xa2\x71\xcc\xb1\x71\x8a\xe4\x3b\x41\xd3\x3f\xf6\x2d\x4f\x87\x3d\xb8\x6e\x88\x2a\x8e\x60\xb6\x63\x2f\x12\x07\xad\x4e\x04\x32\x9d\x1a\xba\x9b\xb3\xc7\x1c\x7d\x8c\x6c\x07\x8e\xa7\xd8\x66\xcc\xdc\xaf\xd8\xbb\x39\x41\xa7\x84\x86\xad\x8a\x76\xf1\xe8\x76\x39\x75\x1b\xcd\xfb\xc5\x57\x08\xd4\xad\x1a\x0a\xb5\x86\x17\xd1\x01\xf7\x87\x6c\x29\x51\x13\xdd\xf0\x2b\xde\xdd\xfe\x54\x2a\x63\xc5\x6c\xa9\x25\x14\x9a\xe2\xfe\xbb\xd0\x39\x7c\x4f\x08\x89\x8c\x88\x81\x6b\xcc\x44\x16\x7b\x10\xd0\x89\x2a\x6e\x93\x1e\xd8\x04\xad\x9c\x05\x34\xbe\xbf\x84\x70\xfc\xf2\xeb\x97\x85\x34\xd9\x80\xb6\xfd\x23\x38\x5c\xde\x5e\xc5\x19\xdd\x62\xa8\x1f\x17\x06\xca\x5b\x1b\x3f\xcc\x99\x97\xd1\xd9\xf3\x75\x7e\x66\x1c\x72\x75\xe7\xc9\x3c\xdb\x5c\x36\x95\x73\xcd\x01\x71\xbe\xb9\x97\xfe\x3b\xd3\x81\x66\x2e\xcd\xb0\xf3\xe9\x85\x27\xa9\xad\x1f\xe6\xa7\x29\xed\x25\x46\xb0\x72\xbb\x24\x26\xb1\x78\xf7\x0a\x47\x5e\x86\xee\x32\x43\x7b\x58\x81\xdb\xbf\xeb\x4a\x18\x6d\xbb\x9c\xcf\xa3\x5a\xb7\x85\xb3\x55\xbb\xc0\x9c\xe9\x87\x59\xfa\xd3\x14\x57\x58\xcb\x6f\xee\xc6\xc7\xb7\x10\x6d\x76\xf5\xf8\xfc\x2d\x05\x39\x50\x37\x6c\x6c\x68\x9b\x13\x29\x5c\xd9\x76\x89\xb2\x47\xe5\xb0\x85\xb3\x95\xc3\x6e\xdf\x3a\x84\x36\xdf\x66\xf2\x4d\xb3\xf0\xdc\x3e\xf6\xf9\x8e\x5b\xb1\xf8\x32\xa3\xee\x40\xec\xe9\xd8\x59\x39\x3c\x80\xe1\x30\x10\xb7\xb5\xdf\x6f\x26\x07\x1c\x93\x39\x77\x0e\xbe\x29\xd8\xc7\x42\xd0\xb9\xda\xc9\x6b\x3b\x9f\x2a\x37\xb7\xdd\xab\xce\xf6\x6b\x60\x9f\xfd\x84\x17\x70\x12\x0f\x38\xd0\xe8\xcb\xa6\x3e\xb1\xcf\xeb\xa0\x8a\x50\x7f\x6a\x9a\xc6\xf9\xbb\xee\xce\xa7\x8a\xc2\xc6\xda\xbd\x6d\x21\x1b\x59\x8b\xb0\x26\x9b\x38\xd4\x59\xf5\xdd\x30\x49\x7f\x0f\x6b\x35\xb5\x4c\xc7\x94\x4d\x23\x94\xaf\xe0\x18\xed\x94\x05\x41\x05\x59\x6e\x78\xe1\xfd\x6e\xcf\x65\x19\xd9\xb6\x3a\x37\xfa\xa1\x8a\xb2\x65\x1c\xea\x06\x52\xae\xb5\xda\x92\x1e\xa2\x42\xe1\x53\x2f\x24\xbf\xfd\xe8\x4c\x0c\xd9\x33\xb9\xe2\x17\x6f\xb7\x48\xd7\x6d\xdc\xbd\x2c\x3f\xd7\xd5\x5d\xc4\xf1\x59\xae\xef\x2e\x46\x1f\x74\x85\x17\x71\x9d\xba\xc6\xf3\xcd\x2f\xb8\x4a\xdf\xee\xcf\xd3\x74\xf3\xda\x52\xe8\xb8\xf2\x2a\x64\xb9\xb4\x59\x1d\xc8\x1e\x2b\xae\x97\x7c\xd0\x49\x6e\xad\x83\x39\xb7\xe4\x7d\x29\x47\x88\x7b\xda\x99\x9c\x97\x97\x5f\xbf\xc2\x97\x6b\xe1\xf3\x60\xbb\xf9\xf6\xa8\x38\xb7\xf5\x82\xdf\x9f\x1a\x53\x6c\xcd\x66\x14\x0f\xe7\xd6\xcb\x84\xa2\x0d\x54\x2b\x5e\x6a\xb4\x2d\xa0\xbc\xd4\xc4\x5b\x2b\x9f\x6d\x70\x5a\xf7\x79\xa5\xdd\x45\x74\xfb\x56\x17\x30\xba\x24\xe9\x76\xdf\x46\x86\x81\x2c\x4c\x32\x4d\x03\xc1\xc9\xce\x6f\xe9\x32\xea\x4f\x8e\x7c\xb4\xf7\xdb\xb1\xdf\x3e\x54\x1c\xf5\x03\x1e\xfd\xa8\xe6\x29\x78\xd3\xb7\x95\x7f\xb6\x3a\xd4\xa5\xba\xef\xd6\x0f\x63\x89\x8c\x98\xc8\x63\xdf\xbf\xfb\x25\xf8\x6f\x0c\xff\xf1\xe3\x1a\xa8\x73\xdd\x77\x42\xfb\x3f\x27\x72\xbc\x01\xde\x91\x4c\x03\xe0\x03\x02\x77\x09\xbc\x38\x95\xce\xef\x82\x3f\x61\x72\x9d\xaf\x6b\xb8\xd1\x93\xde\x62\xc2\x1e\xf1\xa5\xd7\x6a\x08\x9e\xe3\x4d\xaf\x60\xf9\x2c\x7f\x7a\x27\xb3\x0f\x7a\xd4\x2b\xd8\x4e\x7d\x6a\x58\x87\x0b\x5e\xf5\xa8\x6e\xe4\x89\xba\xba\xd3\x4f\x3f\x49\x37\x2f\xb4\xb6\xb6\xff\xca\xf2\xed\x56\xc7\x7b\xd9\x87\x9e\x6d\x7b\x40\x7d\x76\xbe\x6c\x56\x0a\xe1\x4b\x8d\xb0\x45\xdc\xdf\xb2\x0c\x73\x56\x7d\x34\x59\x20\xc3\x9c\xa2\x73\xa9\x4d\x67\xb5\x59\x14\xcd\x0d\x27\xe4\xe6\x18\x39\x30\xe4\xd6\x66\x39\x16\x76\xdb\xd6\xb5\x09\x74\xe6\x16\x3a\x97\x85\xe3\x99\x1f\xff\xf9\xeb\x10\xbb\xfc\xf7\x7f\xe7\xa2\x97\xff\xfc\x15\x94\x39\x1a\x9b\x21\x09\xb3\x03\xac\x89\x39\x41\x17\x63\xa1\x03\xac\x53\x30\x5b\xce\xf4\x31\xea\x4b\xe6\x7c\xa2\xb8\x59\x6d\xce\x82\x13\x0d\x05\x57\x6c\xc7\xae\x75\x23\x89\x0d\x34\x0d\x05\x96\xc0\x93\x09\xb2\xfa\xb7\xcd\x80\x03\xa4\x8b\xea\xea\x07\x7c\x5d\xc8\xdb\x44\x3d\x5a\xf6\x77\x1a\xeb\x91\x77\x2d\xe9\x87\xe9\xca\xce\x16\xec\x8a\xd0\x6e\x31\x60\x9e\x31\x70\x2b\xfe\xae\xd4\xb7\xd5\xc5\xc6\x85\x4c\xaf\x3f\xa7\xe6\xcf\xf3\xde\xb7\xca\x79\x1e\x13\x37\x96\xff\x5d\x64\xea\xe2\xea\xe8\x16\x26\x43\xe3\x80\xa7\xb1\x79\x73\x05\xe5\x45\x46\xaf\x38\xad\xf3\xac\x26\xa1\x03\x31\xd5\xb4\xae\xec\x77\x61\x49\xa1\x21\x5c\x61\x2f\x5b\xaa\x8b\xb5\x06\x96\x2d\x35\xca\x47\x7b\x5e\xae\x8f\xaf\x63\xdf\xc1\x2b\xf6\x02\x08\x7c\x7b\xbd\xbc\x62\xc4\x2b\x86\xbf\x62\x2f\x2f\x3f\xfe\xb8\xda\x97\xb8\xd0\x37\x84\x95\x4b\xfb\x55\xf7\xb2\x13\xdc\xb3\xda\x91\xf5\x02\xfa\xfa\x44\x77\x74\x68\xf4\xbd\xfa\xa1\xdf\xed\x99\xf1\xf2\x8a\xbd\x10\x38\xe0\x7f\xe2\xcc\x4f\x9c\xc4\x00\xf7\x8b\xe0\x7e\x51\xec\xef\x38\x49\x50\x3c\x13\xc3\x89\x20\xc3\xa1\xd0\x89\xbe\x77\x2e\xe4\x68\x34\xa5\x75\xdf\x31\x75\xe5\x32\x26\x9e\xa1\xd9\x7b\x30\x91\xfd\xb9\x8d\xf6\xbe\xb7\xaf\x4f\x4e\xce\xa2\x5c\xc4\x47\x51\x38\xc5\xdd\x83\x8f\xea\x43\x45\xe9\x07\x33\x7a\x17\x71\xd0\x14\x4d\x12\xf7\xe0\xa0\xfb\x9e\xa7\xdf\xad\x39\xdc\x9d\xe0\x8b\x28\x18\x12\x27\xee\x62\x83\xd9\xa1\xd8\x5a\xce\x1b\x50\x70\x14\xa0\xef\x41\xc1\xf6\xc7\xa6\xa2\xab\xeb\xdb\xb9\xe0\x00\x43\xdc\x85\x82\x3b\xe2\x62\x5b\x00\x7e\x03\x1e\x96\x62\xc8\xfb\xf0\x6c\x06\x1d\x6a\x9a\x85\x34\xe8\x98\xd6\x65\x9d\xe2\x71\x80\xf3\xf7\x80\xe7\x5d\xf0\x5e\xb6\xb7\xbf\x52\xac\xcb\xd0\x09\x16\xdc\x35\xd4\x00\x77\xc1\x6f\x47\xc1\x5d\xbf\x5f\x46\x40\xf3\xec\x5d\xd2\x01\xc0\x8f\x60\xbf\x20\xdc\x18\x80\xcb\x88\x78\x86\xbf\x8f\x13\xe2\x68\xa0\xb7\x4b\x70\xef\xc8\xf1\x25\x4c\x00\x67\x69\xea\xae\x11\x01\xa4\xc7\xce\x3e\x71\x71\x71\xc4\x01\x20\x58\xe6\x3e\x4e\xa8\xbe\xaa\xaf\x76\xc7\x2f\xcc\xb1\xd1\x57\x75\x64\x5c\x34\x8d\x00\xd0\x00\xdc\x65\x84\x01\xbd\xdb\x75\xda\xed\x06\xac\xae\xb0\xc1\xb0\xf7\x99\x79\xc0\xf4\xf5\x89\x86\x6c\xa7\x7f\xba\xdf\x70\x05\x15\xcb\x73\xf7\x8d\x08\x7b\x14\x26\xb8\x1b\x3b\xf0\xb2\x33\xd9\xb8\x5d\x92\xba\x0b\x09\xb7\x57\x5f\xd5\xf4\xa2\x65\x14\x98\xec\x00\xff\x49\x02\x0c\x50\xbf\x00\xff\x8b\xe2\x7f\x07\x04\xc9\x91\x74\x0c\x07\x17\xfc\xf9\xc5\x4a\x88\x7b\x1d\xfa\x49\x35\x84\x3f\x48\x49\xc7\x3b\xe9\x6a\xae\xdd\x2a\xb4\xcb\xdd\x4c\xaa\xd0\x6a\xe4\xdb\x2d\x3a\x95\xce\x08\x64\xa1\xd4\xed\x12\xb9\x6a\xbe\xc8\x96\x85\x9c\xd0\x14\xab\xa9\x26\x53\xa8\x24\xea\x62\xaa\xd5\x29\x97\x82\x02\x0a\x45\xb2\x89\x66\xd2\x89\x4e\x3e\xcd\xd4\x4a\x54\xb9\x94\x15\x2b\x89\x62\x29\x15\x67\x49\x42\xa0\x48\xa6\x47\x57\x4a\xc9\x7a\xad\x90\x6e\xe7\xd9\x74\xbc\x90\x28\x56\x0b\xd9\x54\x99\xaa\xb3\x62\xb7\xdd\x6a\xde\x8c\x84\xdc\x20\x11\xe8\x76\xbc\xd2\x15\xe8\x2e\xd5\x16\xc4\x4c\xa7\x5d\x23\x9a\xf9\x32\xd1\x2c\x53\xf1\x66\x3a\xd3\xac\xb2\x94\xd8\xac\xe4\xcb\x25\xa2\x9a\x69\x51\xed\x5a\xa6\x9c\xad\x95\xf2\xf9\xcc\xc9\x50\x87\x22\xa1\x5c\x4e\xaa\x95\x6e\x3a\x43\xe5\x69\xb6\x13\x4f\x8a\xa5\x7c\xbe\x43\xd3\xf9\x64\xa3\x5d\x6e\xe4\xe9\x76\xb2\x5d\xab\x96\x33\x44\x21\x23\x26\x3b\xa4\x98\x6f\x65\xab\xb5\x42\x51\xac\xa7\xe3\xe9\x9b\x91\xd0\x2e\x12\x82\xac\xa6\x88\x4c\x53\xa4\x09\xa1\xd8\x69\xa6\x9a\x19\x52\xe8\xe6\x84\x4e\x27\xdd\xe9\xb4\x88\x56\xa6\xd3\xed\xd6\x18\xb1\xdb\x11\x1b\x95\x7c\xb2\xd3\xab\x0b\x6d\x86\xed\x94\xa9\x9b\x91\x30\xee\xc0\xd7\x2a\xdd\x4c\xb6\x40\x24\xb2\x64\xaa\x54\xa5\xe2\x9d\x42\xaa\x58\x4a\x16\x52\xb9\x66\xa9\xd2\x24\x32\x5d\xb2\x57\x4c\xd5\x33\xe5\x52\x33\x21\x96\x85\x7a\x9b\xad\x26\xd8\x72\x87\xc8\xbc\x44\xad\x41\xda\x04\xf4\x57\xb4\x76\x5b\xb7\x79\x28\xb9\xfe\xdd\x46\x97\xeb\x73\x5e\x31\xe6\x15\x73\xac\x39\xba\x61\x2e\x9d\x56\xde\x44\x9e\x49\xde\x7a\xd3\x3f\x8f\x64\x0b\x29\xba\xd3\x87\xc6\x74\x00\x27\xf3\x31\xb5\x99\xfd\xcd\x7a\xf2\xe5\x23\x86\xf3\x18\x3b\x11\x82\x5d\x6c\xd6\x5e\x1e\xd4\xd8\x28\x95\x2e\x4f\x19\xe5\xa3\xb5\xb9\xbb\x00\xba\x6d\x8c\xcf\x15\xba\x44\x1d\xe4\x5d\xb1\x8b\xcf\xc6\x10\x34\xcb\xf0\x1c\xce\x72\x2c\xf9\x8a\x01\x97\xae\x97\xff\x7e\xf3\x82\x8a\x6f\xbf\xb0\x6f\x00\xff\x7d\xbb\x6a\xfb\xf6\x8a\x7d\x3b\x94\x53\x6d\xee\x89\xcd\xda\xe1\x47\x67\x3d\x75\x7f\x0c\x8e\xdb\xa1\x85\x57\x56\xb5\x69\x13\x75\x00\xbf\xfd\x2f\x4c\x81\x82\x9c\x11\x01\xce\x88\x57\x8c\xbc\x83\xb3\x66\x3d\x19\x95\xb3\x68\x13\x23\x3a\x67\x9b\x7f\x1e\x6b\xde\xe6\x95\x4b\x45\x44\x0f\xb8\xe1\x68\x17\xeb\x7d\xfb\xb5\x51\x87\x6f\xb6\x69\x28\xfd\x30\xa1\x49\xe6\x5c\x1b\x38\xa1\xb7\xbd\xbe\xe7\x04\xeb\xbb\x73\x49\xba\x3b\xf8\xe7\xb4\xee\xe8\xde\x25\x20\x3e\x5c\x4f\x18\xa7\x20\xe6\xcf\x54\x6a\x10\x18\x7a\xea\xdc\xd0\x47\x8c\x4b\x3e\x7e\xe8\xb7\xe3\xf6\xc8\xd0\x6f\xb5\xe7\xd1\xa1\x8f\x38\x4e\x97\x86\xfe\xa3\x67\x3d\x78\xc5\x00\xbb\x59\x2e\xb0\x24\xc1\x81\xb3\x96\x9a\xf8\x67\x5a\x6a\x2a\xc0\xd9\x19\x4b\xfd\x0f\xe5\x8c\xd8\x73\xc6\x92\x2c\x1b\xe2\x5d\xff\x99\x4e\x88\x0e\xb0\x76\xd6\xbd\xfe\x33\x59\xdb\xcf\x34\x0e\x50\x21\x31\xd1\x25\x7d\xfc\xc2\x9c\xd1\x01\xce\xee\x9c\x69\x5f\x98\x33\x72\xcf\x19\x4d\x33\xfc\xfd\x33\xed\x0b\x1b\x11\x2a\xc0\xda\xbd\x33\xed\x0b\xb3\xb6\x19\x35\x82\xe3\x28\x1e\xa7\x79\x8e\xf6\x46\x0d\x77\x79\x33\xf4\xb1\xee\xb2\xc6\x13\x04\x49\xb2\x04\x4e\x32\x1c\xfd\x3b\xc5\xb2\x34\x87\xb3\xff\x28\x1e\x89\x1d\x8f\x00\xc7\x77\x7e\x3b\x12\x8f\x5f\x78\xf6\x81\x3d\x8f\x14\xd8\xf9\xb9\xff\x77\x79\xe4\x88\x9d\x57\xf8\x7f\x4d\x57\xe9\x57\x8c\xa3\x39\x9e\x27\x39\x86\xf3\x8c\xa8\xc7\xa1\xed\x40\xcb\xd1\x27\x5a\x5f\x82\x06\x9c\xc8\x28\x68\x73\x6e\x46\xc0\x1c\x23\xb8\xd5\x94\xed\xa4\x34\x81\x8e\xbe\x40\x91\xf9\xd9\x8c\x9a\xc7\xd0\x12\xe9\xda\xc0\xd9\xae\x72\xbc\xe4\x49\x7f\x84\xd6\x9f\xa3\x49\xd4\x96\x2a\x8a\x60\xb7\x46\xef\x83\xa4\xbc\x45\xf0\xd1\x52\x0e\xf0\x73\xa3\x94\x3f\x61\xa9\xec\x51\xc5\x70\x5b\xb3\xfb\x51\x52\xf6\x10\x7c\xb4\x94\x03\xfc\xdc\x26\xe5\xa8\x59\xa0\x7b\x3c\xb8\x4b\x15\x8d\xf3\x5b\xc3\xff\x41\x52\xde\x22\xf8\x68\x29\x07\xf8\xb9\x4d\xca\x11\xf7\x68\xee\x8a\x21\x3c\xaa\x68\x7c\xeb\x7a\x3e\x4a\xca\x1e\x82\x8f\x96\x72\x80\x9f\x1b\x2d\x46\xc4\xb4\xd6\xff\x6e\xd8\x92\x3c\x77\x86\x32\x6a\x8a\x7d\x77\x8e\xd2\xbf\x2f\xc5\x13\x8c\xa2\x12\x80\xa5\x21\xc5\x22\x56\xa5\x64\x1a\x11\x2c\x49\xb2\x3c\x23\x4b\x12\x05\x65\x46\xe2\x24\x1a\xa7\x11\xa5\x40\x8e\x66\x78\x19\x57\x18\x62\x13\x6a\x48\xbc\x02\x58\x40\xab\x2f\xaf\xd8\x0b\xcd\xf0\x2c\x87\x14\x9a\x67\x00\x52\x54\x92\xe3\x08\x20\x4b\x04\xce\x93\x84\xa4\xa8\x04\xab\x22\x1a\x87\x04\xa0\x00\x01\x08\x0a\x27\x14\x5a\x52\x69\x48\xe0\x2c\x64\x09\x85\x96\x79\x86\x7e\x71\x15\x07\x04\x36\x89\x99\x5f\x24\xf3\x0b\xe0\xc1\xbd\x63\xf7\x67\x9c\xff\x9d\x21\x29\x86\xe1\xae\xde\xdd\x26\x25\x49\x96\x65\x5e\x31\xb0\xf9\x0f\x3f\xb9\x5e\x31\x40\xbb\x7f\xb7\x7f\xf6\xbf\xee\x3f\x6c\x68\x13\x04\x41\x48\x00\xd8\x19\x3a\xed\x76\xc6\xe1\x28\x6d\xb0\x5e\x27\x1a\x79\x9e\x9b\xbc\x19\x09\x3d\x15\xcf\xd6\xab\x09\x20\xf1\x30\x9b\x99\xae\x81\x6c\x18\x86\x3e\x06\x33\xa2\x0a\x48\x69\x30\x68\xb1\x44\x37\xa7\x71\x23\xdb\xaa\xb2\x83\x32\x47\x4c\xd7\xb1\xee\x4c\x37\x92\x59\x81\xe3\xd7\xa2\xb6\x01\x2d\x74\x2a\xad\x22\xf2\x3e\xba\x97\x62\x4e\xd3\xb3\xde\x5b\x4a\x7b\xe7\x56\x1a\x0f\xd4\xc4\xb2\x61\x2f\x56\xd9\xb1\xcd\xcf\x47\x6d\x96\x4c\x64\x50\xc2\x89\xcf\x4b\xe3\x52\xbb\x90\x6d\x55\xc7\x6f\xd3\x65\x7d\x3d\xa3\x86\x2a\x5a\x4c\x86\x15\x29\x9b\x21\xb2\x72\x27\x1e\xaf\x34\x62\xef\x8d\x95\x62\xea\xdd\xc5\xc2\x98\xa9\x2e\xfc\x6e\x89\x2a\xc0\xf7\x29\x51\x3d\x20\x13\x3a\xb2\x70\x7c\xc5\x37\x7f\x7a\x42\x07\x50\x55\x41\x48\xe2\x39\xe1\x9f\x76\xbd\xec\xcc\x51\xa9\x59\x28\x84\x4c\xff\xe0\x8c\xa0\x9f\xa3\xcd\x2f\x14\x89\x24\x88\xab\x04\xe2\x29\x1e\xca\x1c\xaf\xe2\x90\xe0\x55\x12\x4a\x2c\x81\x53\x90\x86\x84\x4a\x90\x0a\xc0\x21\xe4\x21\x8d\x70\xc4\x49\x90\x54\x24\x05\x91\x0c\x64\x38\x9e\xa1\xf8\x0b\x33\x02\xe7\x43\x75\x9e\x61\x19\x9c\xbc\x7a\x97\x00\x14\x4b\x71\x24\x43\x71\xf8\xa5\x19\x41\xdd\x38\x23\xf0\x8a\x65\x56\x0a\xd3\x3a\x5c\xe7\xb8\x7c\x5e\x2d\x5b\xb2\x56\x37\xcc\x45\x96\x17\xf3\x33\xd8\xd1\x98\x82\xc9\x2f\x50\x69\x06\x73\xbd\x5c\xa3\x2e\xf4\x8a\xf4\x28\x07\xb3\x43\x32\x35\x9e\x8d\x13\xa2\xac\xb7\xc5\x46\x2d\x56\x7d\x2b\xdb\x3c\xab\x66\x5b\x94\x50\x86\xad\x5a\x6e\x21\xba\x23\xe8\xce\x08\x9f\x92\x16\xf5\x69\x4b\x4b\x4a\x85\x72\x7c\x59\x33\x8d\x4c\xdc\x6e\xd4\xed\xf1\x2a\x55\x7a\x47\x8d\x0e\x29\x28\xb3\x5e\xbd\xe3\x90\x85\x74\x31\x35\x1e\x96\x89\x8a\x3e\x61\x1d\x55\x4b\x25\x84\xf8\xba\xa2\xcb\xda\x30\x47\x94\xea\xc5\x55\x4d\x51\xda\x0c\x2f\x0c\x0b\xce\x92\x91\x21\xac\xf5\xdc\x19\xd1\x3c\x33\x23\x5a\x54\x40\xa1\xfe\xbf\x9c\x11\xd4\x73\xb4\xf9\x05\xf1\x3c\x2b\xb3\x0c\x24\x29\x96\x97\x38\x5e\x26\x54\x19\x71\x90\x44\x2c\x20\x29\x95\x24\x55\x84\x68\x4a\x61\x15\x1a\x90\x0c\x23\x49\xbc\x0a\x64\x9e\xa4\x64\x8e\x20\x69\xa0\x48\x04\x0e\x5f\xdc\x2d\x25\xea\xac\x72\x87\x7b\x01\x8e\x22\x69\xea\xe2\x5d\xd7\xf9\xb8\x49\x2c\x86\x07\x1c\x75\x69\x46\x90\x37\xce\x88\xd8\xb8\xb3\x22\x4c\x1c\x49\xba\x5c\xe0\x98\x7c\x65\x22\xe2\xdc\xfb\xdb\xbc\x55\x52\x5b\x22\x01\xd9\xc9\x6a\xdd\x68\x64\xb3\x20\x23\x65\xf3\xb5\x95\xb8\x76\xf8\xba\x32\xa2\x97\xb1\x35\x5f\x93\x4b\x36\x9d\x9e\x67\x57\xe4\x8c\xae\x27\x5a\x84\x5c\x68\x4e\x59\xd3\x69\xe2\xb9\x58\xa3\xeb\x8e\xa0\x3b\x23\x7c\x23\xda\x43\x46\xb6\x52\x27\xed\xea\x40\x48\xcc\xf3\xd9\x91\x4d\x52\x0c\xa0\xb9\x1a\x99\xe3\xc1\xc8\x9a\xc5\x72\xdc\x1b\x1a\xa7\x47\xab\x45\xdd\x4a\xd4\x3a\x75\x73\x49\xb1\xe2\xbb\x65\x0c\xc8\xb2\xa9\x76\x96\xf1\xcc\xac\x05\x7a\x56\x61\x6e\xd2\xf3\x74\xdb\xcc\x1a\x6a\x41\x2d\x64\x35\x77\x46\x54\xcf\xcc\x88\x66\xf3\x9c\x56\xfd\xc3\x67\x04\x75\xef\x8c\x20\x9f\xa3\xcd\x2f\xa4\xca\xd3\xb2\xac\xca\x40\x91\x70\x9c\x23\x39\x95\x64\x68\x5c\x06\x84\xcc\x02\x19\x67\x19\x1a\xc8\x2a\xc7\x20\x1e\x91\x8a\x44\xca\xb4\xcc\xa9\x1c\x81\x73\x34\x47\x01\x44\x41\x00\x48\xe2\xd2\x8c\x60\x43\x75\x7e\x13\xda\x86\xcf\x88\xdd\xdd\x6d\xee\x13\x70\x1c\x77\x61\x46\xf0\x37\x4e\x88\xf7\x58\xeb\xbd\xb2\x54\x6c\x41\xa3\x38\xa2\x59\x14\x6d\x59\x8e\x13\x4d\x39\x96\x66\x50\x45\xaa\xa4\xd6\x15\x4d\x1b\x74\xab\xa8\x3e\x10\xd7\x3d\x52\x1c\xd1\xbd\x6c\x1e\xa8\x05\xb1\xde\x91\x0b\x86\xf8\x86\xe3\xef\x82\x8d\x33\x09\x1e\x8d\xa6\x20\x27\xbd\x11\xc8\x2a\xad\xe5\xf9\xd2\x1d\xc0\xcd\x84\x50\x96\x87\x01\xad\x8f\xdb\xdd\x2e\x2e\x36\x47\xf1\x76\x91\xd2\xde\x62\xa3\x89\xd6\xd4\x87\xcb\x6c\x8b\x2d\x5b\x09\xba\x37\x7a\x2b\x66\xba\xe9\xdc\x50\x14\x6d\x52\xc0\x57\xc3\xf6\x54\xee\x58\x46\x3b\xd1\x96\x12\x8d\x86\x1a\xcb\x59\xf9\x24\x65\x8d\xf4\xf9\x64\x24\x25\xcb\xc4\x2a\xa3\x73\xc2\x1b\xed\x41\x2e\x9e\x99\x10\x65\xf1\x9c\x52\xfd\xff\x36\x21\x88\xe7\x28\xf3\x0b\x43\x2a\x3c\xa7\xd2\x24\x83\x10\xc3\x29\x40\x22\x58\x89\x96\x38\x5e\x25\x48\xa8\xd2\x24\x00\x12\x4b\x33\x3c\x24\x28\x15\xaa\x80\xc2\x49\xa8\xe0\x12\x4d\x48\x0c\x49\x4a\x38\x2b\x21\x7e\xe3\x66\x68\xf7\xdf\x19\xdd\x66\xc2\x54\x9e\x05\x0c\xe9\xa1\x0f\xbd\xbb\x09\x9a\xbc\x64\x1d\x45\xf3\xc4\x85\xf9\x70\xeb\x22\x82\xa8\xf4\x86\xa0\x34\xa7\x4d\x5c\xca\xb1\x6d\x6a\xb2\x2e\x2f\x9a\xab\x34\xd9\x9a\x9a\xa3\xd8\x22\x25\x94\x9d\x04\xc8\x13\x45\x36\xce\x32\xbd\xc1\x44\x95\xc4\xe4\x34\x53\xe9\x2a\x14\x3d\xa9\xca\x0d\xb6\x33\x52\xb3\xc5\x65\xbd\xc3\x6b\xa9\x24\x1f\x53\xdb\xd0\x61\x01\x53\xcd\xb6\xbd\xf8\xdd\x9d\x0f\xae\x01\xcf\xee\xff\x08\xae\xca\xda\x87\xef\x4b\xa1\x52\x1d\x79\xe3\x5d\xe5\xc7\x5c\xa1\x9e\xe6\x24\xba\x8d\x4b\xf3\x95\xe8\xcc\x6c\xa7\x55\x7d\x67\xb3\xad\xb7\x8c\x95\x1c\xa7\x45\x47\x11\xa8\x71\x42\x4c\x76\xd6\xdc\xa0\xe1\x10\x5d\xad\x36\x69\x64\x1b\xd9\xf9\x3b\x35\x2b\xf5\x44\x7a\x56\x2c\x35\xde\xf1\xa9\x88\x53\xa0\x25\x37\x5b\xe9\xe5\xb8\x0d\x9b\xee\x7c\xcc\x9e\x99\x2f\x19\xfc\x9c\xce\xfd\xc3\xe7\x0b\x7d\xef\x7c\x01\xcf\xd1\x75\xf7\xe4\xe3\x06\x35\xfe\x8a\xbd\x00\x9e\xc5\x7f\xe2\xe0\x27\x0e\x30\x1c\xff\xe5\xfe\x0b\xd5\x69\x92\xf3\xc2\x9e\xcb\x77\x29\x82\xa7\x78\x86\x25\xf8\x4b\xeb\xe6\xf3\xfa\xee\x91\xf4\x77\x0f\x4d\xf8\x15\xef\xe4\x75\x6a\xfd\xb6\xae\xe7\xe3\x6c\x72\x92\xe4\x33\x04\xbe\x1a\xc6\x63\x36\xae\x39\xf6\x32\xbb\x7c\x07\x1d\xa5\xde\xee\xc2\x78\x0e\xa6\xdc\xa9\x24\x9e\x51\xe5\xf3\xd7\x4e\x95\x05\x21\x3e\xfa\x04\x46\x9e\x7a\xbd\xec\x94\x69\xab\xca\x57\x12\x53\x37\x3c\x61\x28\x6a\x9e\x2a\xe4\x68\x66\x58\xa9\x19\x11\x32\xef\xae\x80\x39\x29\x56\x8c\x06\x86\xdc\xad\xa8\x29\x9c\x76\x13\xcd\xd1\xc0\x04\x4b\x8d\xa8\x68\x60\xe8\x60\x2d\x56\x34\x30\x4c\xa0\x86\x86\x8e\x06\x86\x0d\x96\xe2\x44\x03\xc3\x05\x8a\x43\x22\x52\xc3\x07\xab\x67\xa2\x81\x01\x78\xa0\xec\x21\xe2\x50\x01\x10\x80\x13\x51\x01\x01\x11\xa8\x55\x88\x0a\x87\x0c\xd4\x03\x44\x1c\x2d\x40\x05\xf7\xdc\x23\xc2\xa1\x83\xfb\xda\x11\xe1\x04\xb6\x76\x99\x88\x60\xd8\x63\x30\x11\x95\x10\x70\xc7\x7b\x92\x51\xa9\xe1\x8f\xc1\x44\xd4\x41\x02\x3f\xde\xbb\x8b\x48\x0d\x11\xdc\xd2\x8c\x08\x86\x38\xde\xe3\x8a\x4a\x4d\x70\xab\x2c\x22\x18\xea\x78\x2f\x28\x2a\x35\x74\x60\x07\xeb\x39\x0f\xb0\x7b\xca\xc1\x8f\xcb\xcf\x2f\xd8\xf8\xc7\x5b\x4f\x82\x84\x3c\xc7\xed\xe1\x08\xc0\x2f\x47\xbf\xcb\xdf\x7f\x21\x7c\x15\x75\x8e\xf9\xd0\xa6\xe7\x2b\xf6\x4d\xb5\xcc\xf1\xa3\x95\xea\x53\xe8\x0c\xbe\xfd\xc2\xfe\xf3\xd7\x2b\xf6\xec\xb3\x2a\xdb\xe7\xc7\x8d\xe1\x2a\x0c\xe4\x73\x4a\xc9\x77\xcf\xa9\x0b\x2d\xa0\xf7\x6e\x9f\x3f\x3d\xe1\xbb\x77\x03\x2f\x4f\x2c\x97\xfa\x80\x93\x8f\xe7\xf4\xd0\x1f\xec\x1d\xbe\x30\xae\x1e\x7a\x7b\xd3\xee\x09\x6e\x57\x6c\x47\x03\x14\x52\xc9\xea\x3d\xaf\x6d\xc3\xfc\x7f\xbf\xed\x8e\x37\x4c\x36\xff\xff\xdf\xf1\xb1\x07\xfc\x15\xfb\x26\xcd\xd7\xfa\x44\x0b\x39\x79\xe0\xbf\x77\x51\xf2\xc8\x30\x4e\xa1\xec\x8e\x40\x1c\xdd\xbc\x78\x0a\xc2\x8f\xef\x39\xa7\x57\x8e\x91\x3f\xa5\xbe\xec\x03\xce\xdc\x9e\x51\x8a\xe3\x98\x7b\xff\x05\xdf\x6f\xe3\xed\x8d\xd3\x03\xa7\x9f\x0e\xc6\x29\xfa\xcc\xfe\xba\x07\x17\x3e\xe0\xb4\x6f\xf8\x40\x6d\x0f\x3d\xec\xbf\x30\xa7\x03\xf5\x80\x07\x38\x0c\x54\xf4\xa9\xf0\x85\x0f\x2b\x7c\xc0\x19\xdb\xd0\x91\xda\x2d\xd5\xf6\x5f\x88\x0f\x9a\x52\xcf\x18\xa9\xaf\x76\x42\xe1\x53\x07\x6a\x7b\xba\x61\xff\x85\x3b\x1d\xa8\xa7\x04\x66\xcf\xb0\x7d\x5f\xee\x54\xc2\x27\x19\xbf\xa3\x13\x0d\xfb\x2f\x94\x3b\x4c\xcc\x6d\x15\xe3\x8e\x35\xb7\x1d\x84\x1e\x1d\x0b\x17\x8c\x69\x3d\xaa\x16\x5f\x63\xe4\x9e\xfc\x24\x8c\xd0\x91\xdb\x9d\xd3\xd8\x7f\xc1\x23\x8f\x5c\x74\x73\xe7\x1f\xb9\x07\x7c\xe4\x17\xb1\x8e\x1f\xbe\x5c\x38\xce\x84\xed\xbf\x30\x7f\xf3\xc8\x3d\xe0\x33\xbf\xc6\xc8\x7d\x42\x4c\x7f\x94\x7b\xdc\x7f\x21\xfe\x66\x6b\xf9\xb4\x91\xfb\xbb\xac\xe5\xc7\x8f\x9c\x3f\x4d\xbb\xff\xcc\xf9\xaa\xd3\xd5\xf9\x44\xd9\x3d\x8d\x22\xda\x63\x79\x5c\xb9\x78\x0f\xc7\x79\x78\xd1\x7b\xb5\x54\xfe\xc1\xc7\x07\xdd\x23\xb5\x6d\x3a\x79\xff\x99\xfa\x58\xa9\x3d\x90\xa2\xfa\x52\x52\xf3\xd2\xde\xfb\xcf\xf8\x87\x4a\xed\x01\x0b\xf0\xa5\xa4\xb6\x4d\xcf\xef\x3f\x33\x1f\x2a\xb5\x07\xa2\xcc\xaf\x25\x35\x6f\x1b\x61\xff\x99\xf8\xd8\x19\x1a\x3d\xc2\xfb\x70\xa9\x5d\xd9\x92\x38\xf3\x1e\x94\xa8\xdb\x11\xdb\x77\xa1\x9c\xdd\x8a\xc0\x43\x8f\xad\x78\xfb\x12\xe0\xb8\x3a\xc6\xfb\xed\xf0\x83\xfb\x66\xd0\xdd\x52\x99\x62\x00\x60\x38\x06\xa7\x28\xc0\xb3\x80\xa7\xd9\xdd\xf6\xe9\x75\x56\xaf\xbf\xa7\xe2\x01\xe6\xcf\x3f\x41\xfa\x6c\x3d\x06\x11\xbe\x6f\x7c\x15\x10\x11\x00\x14\xb6\x71\x77\x15\x10\x19\xcc\xcc\x47\x05\x44\x05\xb2\xb9\x61\xdb\xac\x57\x01\xd1\xc1\xb4\x70\x54\x40\x4c\x20\x6d\x19\xb6\x0d\x7d\x15\x50\x30\xff\x19\x79\xd4\xb8\x40\x7a\x2e\x32\x45\x7c\x30\xcf\x17\x15\xd0\x71\x85\x06\xf7\xc0\xb0\x1d\xd7\x68\x70\x0f\xa8\xe4\x71\x95\x06\xf5\x08\x24\x32\x90\x02\x88\x3c\x72\xc7\x95\x1a\x8f\xcc\x93\xe3\x5a\x8d\x87\xc6\x8e\x39\x8e\xd9\xc3\x76\xdd\xaf\x03\x62\x8f\x01\x45\x56\xcb\xa3\x8a\x0d\xea\x11\x8a\xf8\x63\x40\x91\xb5\xf2\xa8\x6a\x03\x7f\x80\x22\x22\x18\xb4\x46\x06\x44\x1c\xc7\x71\xd1\x29\x22\x8f\x01\x45\x9e\x25\x47\xd5\x1b\xc4\x23\x14\xd1\xc7\x80\xc2\xeb\x37\xee\x7d\x8f\xd0\x33\x2a\x38\xae\xbd\x98\xe1\x9e\x1a\x8e\xd0\xb7\x06\x3d\x21\x72\xf0\x3f\xc2\x59\x21\x20\x25\x21\x96\xa0\x58\x9c\xa1\x39\x95\xe1\x14\x89\xc6\x11\x52\x09\x1e\x41\x1c\xaa\xa4\xca\x73\xb4\x8c\x00\x27\xd1\x32\x01\x38\x15\x27\x29\x06\x28\x14\x2e\x53\xac\x22\x13\x3c\xe1\x3d\x84\x16\x3c\x92\xbe\xf3\xd5\xf3\x53\xbb\x0a\xe6\xd0\x83\xc4\x34\xce\x86\x56\x4b\xef\xef\x1e\xc5\x2d\x5e\xe9\x73\x9e\x19\x22\x9d\x1c\x8e\xcd\x2c\xd7\x48\x1b\xc9\x37\xa4\xc9\x24\x5b\xe9\x38\x99\x7c\xfe\xbd\xdd\xe2\x96\x2d\xbd\x17\x87\x89\x39\x5d\xa0\x8b\x82\x5b\x3a\x2c\xec\x0a\xf4\x13\x81\xca\xdc\xf8\xe1\xa3\x7b\x3f\xde\x6a\x95\xb6\x27\x4f\x12\x60\x1e\x57\x32\x66\x63\xae\x15\x17\x55\x27\xc9\xc6\x07\xd9\x02\x59\x42\xbc\xd2\xaa\xa8\xe9\x6c\x2c\xa7\xd3\xb9\x45\xb3\x1c\xeb\x09\x0e\xeb\x9d\x92\x49\xf1\x68\xdb\x35\xe9\x68\x8b\x65\x72\x5e\x6e\x0b\x55\x9e\xad\x81\x5a\xc3\x69\x2a\xcb\x52\x32\x33\x4d\xbe\x25\x9a\x68\xfa\xae\x54\x2b\x1d\xc3\x9c\xc8\x7a\xa1\xe5\xb6\x6f\xb6\x5a\xcd\xed\xf1\x64\xb3\xb2\xec\xbe\xa5\x94\x37\x39\xbb\x2e\x35\x67\x6f\x68\x96\x29\xbf\x4f\x67\x6c\x57\x31\x97\xb2\x5a\x7f\x1f\x65\xd4\x5e\xaa\x55\x4b\xe4\x09\xd1\xab\x82\x8e\xab\x9d\xc1\x49\xbd\x31\x64\x47\x8b\xd1\xd2\x65\x2f\x49\xf1\xb0\xd6\x9c\xbf\x77\x3a\xa8\x94\x99\x83\x94\x9a\xed\xc6\xa5\xa9\x11\x37\x2b\x31\x09\xc4\xa9\x79\x31\xed\x10\xcd\x74\xcf\x61\x86\x95\xfc\x62\xd9\x2a\xd7\xc6\xc5\x77\xb5\x93\xec\xc1\x4c\x7c\x91\xd5\x2d\x3b\xcb\xa1\x92\x1a\xe3\x53\x40\xcc\xe2\xa9\x01\x5f\x7c\x23\x86\xe3\x84\xf6\xe7\x9f\x2f\xfe\x32\xf4\xb4\xaf\x7c\xfb\xf0\xd1\x27\x6b\x4f\x2e\xd2\x58\x1b\x83\x16\xa1\x68\x74\x0b\x8c\x67\x00\x19\x45\x39\x0d\x9c\xd5\xb0\xde\xcd\xf7\xf8\xa5\xa8\x99\xf5\x38\x44\x6d\xae\xa9\xa7\xcc\x00\xbc\x54\xaa\xd5\xf2\x0e\x58\x08\xf9\x24\x97\xae\xac\x3a\x2a\x99\x28\x0e\x5b\xf9\x05\x39\x1b\xbc\xdb\x0c\x9c\x13\x19\x58\xcc\x64\x70\x9b\x8e\x93\x44\xad\xd5\xac\xea\xce\x60\x7b\xe4\x61\x57\x36\xfe\x8f\x1e\xdb\x83\xbc\xab\x7b\x5d\x4d\xba\x6d\x7c\xc7\xda\xad\x59\x89\x29\xa0\x32\xd4\x86\xab\x22\x6c\x56\x78\x26\xfe\xae\xda\x3c\xc2\x65\xd3\x2a\xf5\x3a\xef\xf1\x76\x6e\x94\x32\xf3\x3b\xdd\x10\x84\x32\x6d\xe5\xca\x3e\xdd\x0f\x8c\xdf\xd1\xd8\x9d\xb9\xe2\x4f\xc6\x9f\x88\x82\x3f\xe1\xe2\x2f\x1e\x1a\x7a\xfd\xd9\x6e\x81\x13\xd8\xa1\xa1\x89\x15\x84\x2b\xcd\x26\xdb\xca\xc8\xc9\xea\x8a\xa9\xbe\x2d\x8d\xcc\x4c\x26\x9b\x49\x40\xc3\x1c\x99\xd5\xc1\xa3\xfa\x95\x9c\xc3\xb5\x16\x7f\xdb\x5f\xcb\x73\x34\xbb\xdf\xd3\x7f\x0b\x7d\x62\xba\x3a\x5b\x5e\xa3\x2f\x28\xbf\xc4\xdc\x24\x4d\x87\xa2\x67\x89\x8a\xb8\x9a\x56\xdf\x48\x33\x53\x8a\xbd\x03\xb6\xb6\xd6\x6d\x60\xa8\xc5\x54\x77\x5c\x6d\x6b\xd6\xbc\x1e\x6b\xb8\x9d\x52\xad\x26\xbe\x1d\xb8\x42\x9b\x4a\xe1\x68\x50\x66\x84\x35\x9f\xc0\x2b\x76\x5a\xd4\x16\x32\x60\x01\x68\xf2\x5c\x77\x48\x8d\x0b\xa3\x31\x5f\x65\xe9\x51\x82\x5c\x44\x97\xdf\x67\xd2\xd7\x1e\x31\xd5\x9b\xe4\x97\x72\x3f\xba\xfa\x18\x9f\xc3\x84\xd4\xea\xf4\x88\xa4\xd1\x69\x43\xab\xc5\x34\x57\x4b\xa9\x4d\xa6\x4b\x39\x6d\x3a\x21\x85\x7a\x62\x90\x4d\x4d\x69\x69\x55\xcf\xb6\xb5\x63\x7d\x7e\xc0\x5e\x3c\x62\xdf\x0a\x0c\xb7\xd5\xaf\xea\x39\xfe\x0e\xf4\xc5\x0f\x27\xe0\xfe\x1e\x7b\xde\x6a\x35\x6a\x5b\x50\x8e\xa4\x75\x6a\x8c\xc8\x9a\xc9\x02\x5e\xa8\xc6\x96\xdd\x7a\x82\x7f\xef\x2c\x3a\xad\x06\xb9\xd2\x2b\x7a\x77\x5e\x97\x40\x72\x31\xae\x16\x10\xe7\x31\xb0\xb7\xa7\xa2\x70\xec\xfb\x7d\x97\x2b\x8f\xe6\xe1\x7e\x9a\x36\x73\x4e\x4b\x99\x74\xcb\x2d\xa5\x37\x73\x3a\xd3\x46\x26\xee\x48\x72\x17\x1f\x27\xc6\xaa\x1c\xcf\xe6\x45\xad\x3d\x31\x16\xa9\xec\x00\x3e\x4a\x5f\x22\xb6\x48\x08\x99\x83\xaa\x05\xc7\xc3\xbd\x1f\x7e\xf9\xc6\x27\x92\xbf\x7d\x44\x7f\x6a\x14\x2c\x0a\xea\x9e\x72\x4e\x08\xf8\x93\x83\xff\x3c\x7b\xf9\xe6\x8f\x77\xc4\xeb\xce\xf9\xf3\x48\x7c\xb0\xb0\x96\xe7\xed\xcf\x89\x7e\x9c\x95\xbf\x4b\x6f\x37\xba\xbe\x3c\x1a\x1f\x5c\xd0\x17\xdf\x15\x94\xff\x21\x9e\x38\xf8\xcf\xa4\x8f\xd3\x3b\xed\xab\xc0\x8e\xed\xb1\x7c\x80\x17\x32\xbf\x42\x4f\xf9\xf9\xec\x7b\x64\xfc\x23\x2a\x1a\x7e\x2f\x96\xfd\xef\x47\x05\xca\x6e\x2e\xde\x7d\xcf\xe6\xee\x5c\xa9\xf7\x77\xb3\x70\x74\x17\x48\xd7\x57\xcf\xbe\x15\x9e\x44\x13\x2a\x60\x54\x55\xe2\x39\x19\xa7\x58\x44\x92\x12\x2f\x13\x48\x26\x71\x8e\xc3\x49\x12\x97\x15\xc4\x02\x95\xa3\x25\x92\xa2\x48\x05\x22\x42\xa6\x65\x89\x63\x64\x56\xa1\x14\x8e\xa2\x09\xef\x50\xed\x43\xaf\xcb\xf1\xad\xf0\xe8\x6b\x2b\x3c\x86\x03\x4c\xf8\x03\x13\x76\x77\x8f\x12\xca\x9e\x56\xde\x39\x8b\x7c\x2b\xbc\x64\x60\x78\x7d\x5a\xe0\x6a\x79\xbc\xd6\x6a\xd5\xb7\x5a\xa6\xbd\xc5\x87\x5c\x8b\xe4\x97\xc3\x2c\xa8\x5b\x3c\x63\xca\x6c\x79\x6c\x39\x03\x62\x18\x5f\xf1\x85\x72\x55\xe1\x47\xad\x96\x98\xb5\xba\x75\xcf\x6b\x45\x8f\x22\x5c\x2b\xe3\xa3\xe7\xac\x26\xa6\xf6\xfc\x54\x53\x46\x67\x09\xcd\x31\xbb\x36\xea\x0d\x65\x0d\xcb\xec\xac\x54\x64\xa9\x6e\x2c\xd7\x1c\x09\x84\x89\xcf\x65\xb6\x4d\xa4\xde\xe3\xc6\xa8\x85\x08\x5b\x7e\x9f\x14\x8b\x30\x56\xe3\x06\xad\x86\x64\x94\x69\xa3\xca\xc4\x52\x72\xa3\x48\x0f\xb3\x56\xbb\x3a\x5b\xcd\x52\xa9\x9e\x54\x1e\x09\xcb\x5b\x56\x6d\x41\xf9\x09\x51\xc6\xc3\xbb\xc4\x2f\x2c\xef\x3f\xc3\x57\x54\xbe\xb6\xf7\x46\x38\x65\xda\xca\x02\x41\x38\x5e\xd1\x68\x41\xdc\x57\x56\x54\xcf\xc3\x9f\x8c\x84\xdf\xf5\x80\x3e\x8f\xec\xdd\xba\x37\xa2\x65\xc7\xf6\xb0\x79\xc0\x5f\x14\xce\x64\x5f\xae\x79\x84\x67\xe3\x3f\xd5\xed\x50\xfc\xc1\x15\xd1\x97\x88\x48\xce\xcb\xe7\xeb\xd0\x77\x5b\xc4\xb4\x3c\x10\xed\x7e\xff\x12\x11\x76\x50\x27\xfe\x91\x2b\x00\xf7\x8a\x1f\xec\xd9\x3f\x6e\x85\x76\xe0\xef\xbc\x3e\x5d\x8e\x5a\xa3\xd8\x08\x7f\xd4\x78\x36\x43\xfc\x89\x36\xea\x1e\xfc\xdb\xa8\xb5\xdd\x52\xe3\x33\x5d\x5a\xe4\x5b\xb9\x12\x99\x33\xd9\xb9\x89\xbf\x2f\x06\x43\xca\xa8\x57\x93\x70\x58\xa7\xdf\x1d\xa9\xdb\x29\xa6\xdb\xb5\x16\x0b\x57\xef\x65\x79\xb9\xb2\xe8\xcc\x3a\xd5\x2a\xcd\x9b\xec\xb8\x95\xb4\xa8\xd6\xaa\xf8\x3e\x2e\xea\x4e\x2f\x61\xa5\xcd\x66\xcb\xb0\x99\x6a\x52\x78\x76\xd4\x8a\xf3\x32\x0e\x28\x16\x32\x84\xcc\x11\x1c\x49\x00\x84\x38\x9e\x57\x70\x59\x96\x15\x9e\x90\x39\x40\x13\x34\x42\x90\x05\x04\x8d\xb3\x04\x4e\x30\x38\x49\x00\x89\x84\x04\xc5\xf3\x34\xe2\x24\xef\xd1\x49\xe0\x91\x52\x7e\x5f\xd4\x4a\x5e\x8b\x5a\x39\x8a\x01\xe1\x0f\x7b\xdc\xdd\x3d\x2a\x3a\x78\x89\x32\x53\x7c\x51\x6b\x50\xd3\xe3\x01\x2d\xbb\x7b\x2d\x1f\x3d\xea\xf2\xe5\x82\x3c\xfc\x7b\x7a\xab\x09\x98\x19\x4c\xf5\x56\x89\x17\x29\x92\xcd\x76\x52\x72\x66\xaa\xb6\x2c\x73\x05\xea\xe5\xb7\x52\xce\x49\x8c\xe3\xc4\x40\x83\x5a\xb1\x9a\x49\xd6\x92\xe9\x6a\x31\x53\x22\x67\xc3\xba\xdc\x28\xcf\x66\x48\xb4\x4b\xe2\x7c\x91\x8f\x4d\xd8\x2c\x25\xc5\xf8\x94\x85\xd7\x48\x67\x39\x96\x35\xfb\x96\xa8\xd4\x2f\x9f\xf0\xc8\xcd\xd7\xe8\xde\xb5\x74\x20\x17\x1d\x72\x5d\x89\x9c\x9e\x87\xff\x7c\x6e\xea\x0a\xfe\x13\xab\xf8\xe9\x91\x81\x8b\xef\x96\xc8\xe5\x8b\x46\x56\x7f\x9e\xcb\x8b\xf8\x2c\xf2\xdd\x73\x89\x1d\xdb\x5b\xcf\x7a\x12\x85\xfb\xae\xcb\x1e\x46\x7c\x0c\xbf\x3f\x2f\x73\x0f\xfe\xad\x87\xc9\x99\x28\x3d\xce\x35\x49\xbc\x31\x54\xed\x81\xdc\x5a\x22\x83\x6f\xcf\x87\x99\x56\x96\xe5\xf0\x31\x9e\xef\x66\x60\x3a\x3e\x13\x56\x82\x5c\x12\x8b\x3d\x61\x29\x93\x68\x56\xca\xad\x8a\xcc\x6c\x4a\xd5\x97\x78\x9d\xe1\x2c\x46\xb5\x87\x83\x05\x8b\xb7\x17\xb5\x0c\x22\x13\xbd\x75\x62\xf9\x6c\x0f\xc3\xb2\x24\xa3\xe2\x12\xc7\xf0\x0a\xc2\x55\x96\x82\x34\x52\x58\x95\x53\x18\x9a\xe0\x79\x8a\x27\x48\x0e\x49\xb8\x8a\x53\x04\x50\x49\x55\x26\x24\x49\xa6\x48\x0e\xe7\x28\x95\x00\x32\x87\x7b\x4f\xe5\xf2\x9e\x75\x10\xf9\x58\xdf\x7d\x1e\x86\xa3\xc2\xf3\x22\xbb\xbb\x47\x45\x64\x9e\x56\xde\xb9\x0e\xbe\xc7\xc3\xdc\xb9\x7b\xf7\x48\xb6\xf8\x30\x2b\xdc\x2b\xb3\xa7\xb7\x9a\x1c\xc6\xeb\xc2\xdc\xc8\xcb\xbc\x53\x9b\xa5\xb5\x58\x79\xd4\x92\xf2\x95\x77\xca\x34\x6a\xd5\x6e\x13\x2d\xd6\x09\x75\x81\x17\x04\x63\x26\x75\xd2\xcc\xba\x22\x4d\x6b\x78\xbc\xc6\x98\xec\xd8\xd2\xc7\xb5\x31\x57\xa6\x5a\x66\x2d\x9e\xce\x0a\x8d\x6a\x9c\x22\x4a\xe5\xb6\x9c\x7a\x57\xaa\x37\xe5\x3d\xee\xf6\x30\xf7\xc6\xb6\xcf\xf6\x30\x0f\xe2\x7f\xa2\x87\xf9\xc4\xdd\x38\x8f\x94\x3b\x3d\xcc\x57\xda\xcd\xbc\xea\x61\xa2\xcf\xa5\xe7\x78\x98\x08\xf8\x1f\xf4\x30\xe5\x62\x2a\x9b\x60\x9a\xd3\x77\x02\xa4\x4d\x98\xa4\x98\x5a\xcb\x36\xdf\x2a\xba\xde\x4a\xc5\x07\x35\xe6\x2d\x9b\x8b\xbd\x55\xed\x44\x7b\xea\xc8\x92\x95\xe5\xe7\x46\xa6\x9a\xca\xcc\x86\x73\x38\xcf\xf7\xd2\xd2\x92\x1d\xb4\x07\xa2\xd8\xd5\xe2\x25\x21\x33\xec\xe2\x74\x6f\xd9\x29\x81\xe7\xaf\x61\x54\x96\x92\x15\x9a\xe2\x70\x5c\xa1\x49\x56\xc6\x19\x45\x55\x49\x5a\x96\x29\x96\x23\x25\xc4\x71\x40\x26\x14\x86\xc5\x65\x00\x68\x00\x69\x46\x86\xac\xca\xd3\x80\xa5\x39\x45\x66\x29\x40\x2b\x9e\x87\x21\x9f\xe4\x61\xae\xd6\x56\x71\x34\xce\x5c\x78\x3c\x37\x8d\x33\x87\xc7\x73\x6f\x8b\x82\x1f\xf5\x30\x17\x6a\xab\x3e\x7d\x3f\x32\xb0\x86\xf1\x79\x98\x72\x36\x5f\x37\x92\xd5\x31\xdf\xb4\x66\xc4\x7c\x38\x59\xac\x7a\xc3\xf4\x8c\x79\xcf\x55\x27\x72\xa5\x31\xe5\x16\x06\x65\x27\x12\x54\x0d\x52\xc5\xe6\x04\x66\xba\x49\x38\xaa\x75\x1a\x29\xb3\x6a\x64\x53\x82\x45\x3b\xb8\x99\x5b\x2a\xf1\xba\xcd\x34\x72\x5c\x91\x6e\xa1\xb4\x16\x97\xaa\xda\x57\xf4\x30\x91\x2c\xfc\x13\xf1\x87\x64\xaa\x3e\x65\x0d\xf3\xc9\x1e\xe6\x33\xe9\x8b\xb4\x86\xf9\x9b\x2c\xbc\xf0\x24\x0f\xe3\xcf\xd2\xdd\x83\x7f\xeb\x61\x28\x6d\x9a\x6f\x96\x12\x12\xa8\xcf\x2d\xc8\x94\xd1\x5b\x6a\x5c\x84\x96\x55\x34\x12\xca\x92\x2f\x4f\xd6\xb1\x8e\xbe\xcc\x16\x06\x29\x4b\x5b\xd5\x15\x53\xd1\x4a\xb3\x5a\x4a\x29\xb6\x07\x89\xa6\xd6\x4c\x2c\xc6\x64\x5d\x9b\xc4\xf1\x54\xfe\x7d\x5a\x9c\x2c\xdf\x8d\x16\x05\x85\x94\x93\x78\xba\x87\x91\x79\x52\xe5\x70\x86\x61\x55\x92\x55\x54\x16\x87\x04\x8f\x64\x5c\x41\x3c\xa3\xaa\x24\xc9\x01\x86\xa2\xa0\xcc\x11\x1c\xa4\x64\x04\x81\x2c\x31\x32\x92\x80\x24\x23\x99\x51\x55\x15\xa7\xb9\xc3\x53\xeb\x9f\x91\x25\xbb\xc1\xc3\x10\x17\xf6\x76\x77\x77\x8f\x8e\x78\x3c\x9a\x25\xbb\xea\x61\xca\x44\xe2\x4d\x28\x53\x74\x37\x9e\x24\x9d\x4c\x2b\x55\x06\x35\x52\xc0\x8b\x68\x54\xe1\x72\x35\x66\x52\x02\x02\x8f\xda\xba\xb2\xce\x3a\x5e\x7e\xff\x81\x2c\x59\x60\x0d\xe3\xcb\x92\xa5\x29\x83\x1d\x25\x84\x19\x0d\x67\x8b\x3a\xa1\xbc\x65\x1a\x4e\x57\x66\x0b\x02\x64\xa7\xf5\xa6\xae\x97\xa9\xfc\x3a\x9f\x93\x66\x63\x3b\xa9\x2d\xe4\x51\x3a\x41\x28\xd2\x40\xb6\x4c\xde\x91\x17\x89\x5e\x46\x5d\xce\x1a\xad\x98\x3e\x5a\x70\x99\x31\xd7\x53\x21\x43\x8e\xba\x95\x51\xb5\xfb\x15\xb3\x64\x0f\x7b\x98\x07\xf1\x3f\xd1\xc3\x7c\x62\x45\xa6\x47\xca\x9d\x1e\xe6\x2b\x55\xb4\x5e\xf5\x30\x9f\x98\xa5\x12\x9e\x94\x25\x7b\xd0\xc3\x48\x7a\x67\x5e\xcd\x26\x2c\x63\x36\xe3\x0b\x3d\x92\x53\xca\x60\xf0\x6e\xdb\x71\x6b\x6e\xe4\xea\xf9\x2c\xab\x59\x59\xd3\x98\xcf\xe0\xb2\x9c\xe0\xd7\xd5\x6e\xa1\x07\xe6\xa9\xf5\x7c\x48\x80\x35\x97\x1b\x29\x6f\x89\x69\xa9\xc3\xe4\xeb\x6f\x4b\x24\xad\x0c\xde\xb2\x50\x4d\x8b\xd5\xe2\x1f\x50\x3d\x24\x43\x45\x46\x38\xad\xca\x38\x54\x68\x85\x51\x11\x8e\xf3\x12\x27\xe1\x0a\x92\x64\x5c\x21\x15\x55\x21\x09\x04\x29\x42\xe2\x90\x04\x49\xc4\x23\xc8\x70\x32\xc1\x52\x0c\xa2\x00\xae\xbe\x78\xaf\xed\x7b\xe4\xc1\x3c\xf7\x64\xc9\x78\x9e\xbd\xf4\xb6\x15\xf7\xe6\xd1\xc1\x3f\x4f\x27\xef\xac\xd0\xbf\x2d\x47\xe6\x55\xf8\x45\xf2\x17\x9d\xc0\x7e\xae\xa7\xb3\x7b\xfc\x55\xa1\x54\xad\xbf\x2f\xa6\x62\x3c\x21\x74\x16\x36\xa8\x68\xe3\xcc\x5b\x33\x25\xa9\x42\xd7\x21\xcb\x82\xa6\x75\x2b\xad\x86\x82\x4f\x87\x2d\x39\x07\x5b\xa4\x91\x14\xdf\x86\xe5\x5e\x71\x52\x48\xf5\x8a\xa3\x94\x38\xd0\x28\xc5\x98\xb7\xaa\x2b\x94\xec\x09\xcb\x46\xbe\x59\x81\x13\xc5\x5e\xde\xb4\x22\x49\xfb\x15\x39\xcc\x5f\x08\xbe\x77\xc0\xdc\xe9\x5f\x5d\x7b\x3d\x39\xc8\x37\xe4\xba\x62\xaf\x9f\x87\x3f\x5a\xce\xeb\x50\x0f\xe3\xaf\x1f\xb9\xd3\x1e\x9f\xad\x90\x3c\xbd\x2e\xdb\xb8\x67\xe3\xbf\xa3\x42\x53\x10\xbe\xae\xbf\xbc\x96\x53\x8b\x22\xab\x87\x73\x6a\x4f\x1c\xab\x7b\xf0\x6f\xfd\x91\x00\xe2\x85\x72\x6c\x54\x15\xb3\x71\x14\x7b\x6f\xc6\x12\x5d\x95\xaf\xb6\x1c\x2e\xae\x93\x32\x95\x48\xc4\x35\xbe\x55\x22\xeb\xe3\x52\x6b\x69\x4c\x3b\xa8\x59\x6c\xc4\x8a\xf4\x68\x2d\xdb\xad\xd1\xba\xda\xac\xa7\x93\x03\xa2\x4d\xb7\x92\x29\xaa\x34\x4a\xc6\x8b\xd3\x2a\x3f\x53\x88\xf7\xe7\xaf\x78\x24\x85\xe2\x18\x45\x52\x14\x9c\x50\x28\x06\xe7\x00\xcb\xb0\x40\xa6\x20\x0d\x59\xc4\x2b\x0c\xe2\x18\x5a\x86\x04\x2f\x4b\x14\x40\x0c\xa1\xb0\x10\xba\xcb\x22\x15\x21\x5a\x22\x19\x05\x79\xfe\x88\x78\xd2\x79\xc5\x6b\xfe\x88\xc5\x71\x9c\x0a\x7f\xdb\xd1\xe6\xee\xc1\x23\x6d\x0f\x90\x3f\x7a\x5e\xf1\xaa\x47\x8a\x94\x23\x23\xcf\x79\xa4\xf4\x1e\x7f\x35\xce\x8f\xc6\xf9\x36\x31\x23\x17\x6c\x55\x5d\x73\x95\x22\x1a\x89\x12\x68\x34\xb2\xb4\xbe\x9a\x8d\xb2\x78\xdc\xd4\x3a\x56\xd9\x61\xb5\x32\x60\x88\xaa\x34\x1a\x10\x4a\xbd\xd1\x54\x51\xd2\x5c\xc8\x78\x45\x80\xea\x20\xd9\x59\x39\x83\x96\x60\xd8\x85\xf9\xd0\x88\x8f\xd7\xc3\xb8\x70\xd3\x0a\xe6\x6e\x8f\x14\xe5\xcc\xd9\x33\x3d\xd2\x83\xf8\x9f\xe8\x91\x9e\x52\xb3\x7f\x7a\xdd\x6c\xe5\x3e\xfb\xcc\x80\x20\x7c\xdd\x5d\xa8\xab\xbb\x3c\x11\x64\xf5\x4c\x8f\xf4\xe8\x58\xdd\x83\x7f\xeb\x91\x32\x44\xbd\x3b\x95\xa0\x85\xde\x9c\xf8\x5b\x61\xc9\xad\x98\x6a\x6d\xd1\x2a\x15\x87\xe3\x42\x7a\x56\x1d\x56\xd3\x7a\x1c\xd9\x0c\x39\x17\xd8\x8e\xd5\x8b\xcf\xeb\x99\x1e\xc8\x95\x6a\x3c\x55\xd6\xf9\xf7\x2a\x17\x9f\xc6\xc4\x92\x9a\x26\x52\xcd\x44\x7b\x39\x67\xca\xcd\xb4\x94\x2f\x8a\xcf\x5f\x21\x71\x00\x00\x9e\x90\x49\x8e\xa1\x48\x45\x65\x49\x19\x07\x34\xa4\x21\x50\x58\x56\xe2\x70\x42\x51\x55\x9c\x56\x28\x95\xc6\x55\x99\x51\x00\xce\x01\x06\x42\x96\x96\x71\xc8\x00\x9c\x57\x79\xe8\x79\x24\xf2\x49\xe7\x2b\x6e\xf0\x48\x44\xe8\x3b\x8b\x77\x37\x8f\x1e\x43\xf2\xe8\xe9\x8a\x4f\xf4\x47\xbe\xd3\x10\x15\x43\x63\xd3\x85\x41\x4e\xc3\x57\xec\x70\x2a\x2c\x81\xb8\x64\x32\x44\x27\xc5\xac\x6b\xd9\xb1\x9a\xcb\x2e\x53\xea\x0a\xe7\x4b\x73\x9d\x96\x9c\x72\x4e\x48\xa1\x65\x4a\x28\xa9\x65\x28\xc4\xb9\x54\xb5\x67\xd0\x53\x52\xa0\x35\x72\xc4\x24\x33\x49\x5d\x53\x9b\xa5\x66\x12\x30\x9a\xfc\x21\xfe\x28\x42\xc5\xfe\xc3\x55\x01\x4f\xc4\xff\x44\x7f\xf4\x68\x35\xee\xa3\xfe\xe8\x29\xf8\x1f\xf0\x47\x5f\x69\xcf\xea\x9a\x3f\x8a\x22\xab\x67\xfa\xa3\x28\xf8\x1f\xf4\x47\xb1\x76\xd2\xee\xce\xc5\x71\xb2\x91\x99\x97\x47\xc9\x64\xb3\x91\x34\xd5\x9e\xdc\xb1\x72\xa2\xde\xe3\x46\x43\xa1\xf5\x96\x69\xe0\x04\x53\x30\xe6\x38\x35\x12\x5a\xac\xd0\x14\x00\x47\x9b\x42\x66\xd9\x8a\x8f\x3b\xe3\x89\x9c\x1c\x27\x51\xc3\x2c\xca\xe5\x7c\x9c\xaf\x82\x6a\xa5\x33\x8b\x3f\xbd\xae\x8d\x24\x10\x25\x41\xa0\x12\x80\x93\x18\x08\x09\x8a\xc0\x25\x8a\x67\x29\x9a\x81\x40\xc2\x79\x9c\xc7\x11\xc9\x91\x2c\x62\x18\x89\xa4\x78\x1a\x27\x71\x85\x42\x8a\xc2\xe0\x0a\xae\xe2\x34\x8b\x7b\xfe\x88\x7a\x92\x3f\xba\xb6\x27\xc4\xe2\x38\xcd\x84\xbf\xff\x72\x77\xf7\xe8\x71\x56\x8f\x7a\xa4\x0b\x7b\x42\xcf\xce\xd9\xf9\x3c\x52\x31\x37\x5e\xc4\x8c\x41\x8a\xae\xf6\x0c\x4d\xc9\xce\xe2\x9d\x64\x5d\x19\x88\x8e\x66\xc1\x86\x55\xab\x2f\x5b\x16\xad\xbc\xc5\xad\x52\x82\xe0\x90\x9a\x29\x9a\xab\x6e\x09\xc6\x88\x39\xef\xd4\x45\x65\xd5\x8c\x0d\xd2\x1d\x26\x57\x6b\xb3\x4b\x21\x45\x4a\xe5\xa9\xc0\x59\xab\xd5\x4a\x10\xbf\xa2\x47\x8a\xf4\x54\x90\x27\xe2\x8f\xf4\x54\x90\x8f\xf1\x48\x21\x1e\xf2\xd3\x3c\xd2\xbd\xe7\x53\x04\xe1\xeb\x56\x82\x9f\xf5\x48\x7f\x93\x47\x10\x3e\x60\xac\xee\xc1\xbf\xf5\x48\xcb\x31\x7c\x63\xda\x62\xc7\x88\x8f\xdb\x71\x5c\x37\x53\x72\x29\x47\x88\x75\x22\xe1\x4c\xcb\x4e\xaa\x10\x6f\x2f\x0c\x92\x4b\xdb\x78\x41\x5a\xd1\x9c\xbc\x1e\xa6\x34\x60\xb1\x90\x25\x40\xb6\x46\xa6\x1a\x8c\xd8\x53\x4d\x23\x25\x2d\x04\xa1\xa3\xd8\xcc\x28\xb9\x5e\x64\x32\xa2\x50\x7d\xb6\x47\x62\x18\x86\xa1\x19\xc8\x20\xa8\x20\x02\xe7\x08\x99\x66\x39\x9c\x66\x01\xc1\xb0\x0a\x8f\x28\x8a\x26\x11\x42\x34\xcb\x01\x19\xf2\x90\xe6\x20\x24\x01\x8f\x24\x5c\x45\x1c\x49\xd1\xb4\xaa\xbc\xec\x1e\xdd\x1a\xfd\x01\xb5\xbb\x27\xbf\x5e\x70\x44\x80\xa1\x2f\xbd\x79\x9c\x3e\x6c\x44\x79\x8f\x30\xdc\x7a\xa1\x02\x97\xa9\x2e\xaa\x23\x29\x4f\x64\x04\xb2\xdd\x1a\xd6\xac\xfc\x78\xd8\xc1\x71\x35\xcd\xd9\x85\x2c\x3b\xc6\xc5\xda\x32\xd7\x7e\x13\x3a\xa4\xb0\xf7\x42\x9e\xba\x04\x86\xf4\xc4\x4a\x44\xa8\xa5\xca\xfb\xe1\xb5\x16\xcb\x14\xbf\x99\x45\x62\x5c\x49\x76\x10\x41\x36\x29\xc4\x27\x88\xfa\x6a\x1a\x2f\xf4\x6a\x2b\x60\xe5\xde\xeb\xa9\x42\x0e\x5f\x25\x93\xf8\x3c\x9f\x9e\x8e\x67\x92\x6a\x24\x1b\xb1\x4e\x27\x3b\x63\x9a\x7a\x32\xfe\x3e\x4e\xad\x9c\x58\xba\x1c\xeb\xcc\x52\x66\xb5\xa2\x58\x9d\x06\x3b\x05\x66\xa1\x97\xcd\xcc\x1a\xc5\xca\x0d\x9e\xe7\x48\x65\x8f\x3d\x8f\x8f\xe7\x83\xe5\xf5\xc7\x97\xfa\x5b\x1c\x2f\xe0\xb9\xf4\xda\x19\x2c\x4b\xc0\xe8\xe2\x70\x3d\x35\x01\x5f\xca\xac\x16\x85\xc4\xba\x4c\x3b\x71\x51\x4e\x78\x3c\x92\x9a\x63\x95\x27\xdd\x37\xaa\x78\xe8\xdf\x3c\x4b\xc4\x95\xd9\xfc\x00\xfe\x92\xb5\x6e\x54\x1f\xc0\x2f\x08\x7f\x5f\x55\xef\x59\xcb\x1a\x8f\x2e\x8b\xf2\xa4\x77\x91\xcd\x6b\xb2\x78\x74\x2c\x36\xba\x10\x93\x03\xf0\xee\x92\xc5\x7f\x3b\x55\x40\x3a\x0e\x28\x67\x16\x55\x67\x64\xc3\x6a\x9d\x68\xca\x0a\x5c\xcb\xf8\xa0\xbe\x56\x8a\xd5\x25\x5f\xd0\x07\xb3\xde\x6c\x4c\xd2\x55\xfc\xcd\x00\xeb\xfc\xdc\xc8\x6a\x4b\x99\x1e\xc8\x92\x3a\x18\x2e\x0c\x66\x00\xc5\x24\x09\x01\x1e\x63\x14\x98\x20\xea\x71\x66\xf4\x9e\x7c\x7a\xac\x2f\x01\x95\x23\x38\x92\xa3\x64\x9a\x41\x94\x84\x13\x94\x4a\x11\x2c\xad\x12\x14\x43\x73\x38\x94\xa0\xa4\xaa\x00\x22\x52\xe2\x25\xc8\x00\x09\x27\x39\x9e\x25\x69\x16\xd1\x2c\x42\x92\x4c\xe0\x9e\x65\x25\x1e\xb3\xac\xc4\x75\xcb\xca\x52\x97\x4c\xab\x77\xd7\xff\x30\xd6\x47\x6d\xeb\x85\x08\xdf\xbb\x22\x54\x11\x85\xda\x56\x75\x92\xaa\xbf\xf7\xd0\x00\xb0\xef\x0e\x47\x98\x45\x65\x86\xa8\xd8\xdb\x6a\x62\xbf\x8d\x32\x71\x25\xdd\x51\xf9\x78\x36\x5e\xeb\xaa\xad\x1e\x99\xac\x36\x48\xb8\x5c\xf6\x26\x74\x61\xa6\x65\xd3\x7c\x6e\x66\x2c\x8a\xe3\x1a\x68\xe4\xe1\x4a\x36\x73\xd5\xe4\x7c\x96\x96\x13\x75\xb9\xf8\xb5\x6c\xeb\xa3\xb6\xed\xd1\xf9\x5c\x5c\x16\xc6\xe6\x33\x6d\xeb\x27\x9e\xc9\xbb\x9a\x47\xf9\x44\xdb\x26\x3c\xc9\xb6\x72\xd4\xa1\x7f\x48\x0e\xf2\xa2\x6d\xed\xd0\xab\xa6\x4d\x74\x4c\x05\x71\xac\x5a\x9a\x25\x33\x70\x32\xaf\x2c\xb8\x1e\x5b\xa1\xe3\xcb\x4e\xcd\x20\xdf\xaa\x75\xa1\xd9\xce\x80\xb6\xb2\xc4\x45\x9e\xb0\x8b\xe9\x5e\xac\xce\x98\x89\xf8\xa2\x0e\xa7\xd2\x7b\x6e\xa4\x34\xd7\x63\xbb\x93\x4f\x34\x05\x76\x36\x98\x08\xa3\xc9\xf3\x4f\x6f\x10\x12\x81\x38\x42\x91\xa0\xb4\xb1\xab\x12\xc1\x42\x5c\x26\x01\x85\xcb\x90\x05\x0a\x07\x65\x5e\x92\x59\xc0\x91\x40\xe5\x55\x1a\x92\x92\xc2\xf0\x48\x86\xa4\xc2\x71\xaa\x84\x23\x99\x96\x3d\xcb\x48\x3e\x66\x5b\xaf\xa6\xf3\x01\xc3\x93\xa1\x07\xcf\xf7\x77\xfd\x8f\x95\x7e\xd4\xb6\x5e\x78\x5a\x92\x77\x45\x58\xbd\x87\xd8\xd6\x64\x6e\x6e\x00\xa7\x90\x2e\xa4\xa8\xd6\x6a\xe9\xe0\x4a\x32\xd1\x12\x55\xc6\x91\x68\x83\x92\xd6\x45\x2b\xad\x25\xa6\x31\xa3\xd5\x2b\x8e\x57\xb2\x43\x53\x7a\x49\x25\xc6\x2b\x67\xb8\x62\x8a\x0a\xdd\xcb\x51\x22\x95\x34\x64\x5b\xa5\x18\x51\x18\xc4\xd3\xf5\x66\xc5\x9e\x70\x6a\x37\xf9\xb5\x6c\xeb\xa3\xb6\xed\xd1\xf9\x5c\xc0\x47\x8c\xf0\x44\xdb\xfa\x99\x79\xe1\x8f\xb0\xad\x51\x6d\x9b\xf0\x24\xdb\xca\xfa\x06\xa0\x78\xb7\x2c\xfe\xbb\x96\xa6\x8a\x54\x5f\xe9\x2b\x94\x92\xe5\x82\x92\xa9\x2e\x8d\x5a\x26\x66\xb5\x63\x3d\x94\xe6\x86\xf9\x95\x29\xcc\xd4\x69\xab\xdd\xc8\xd9\x9d\x02\x42\xd9\x61\x87\x9f\xda\x52\x97\x43\xc3\x0c\x6a\xd7\x51\xbc\x2c\xd0\x9d\x42\x26\x56\x1e\x08\xd9\x6a\x6d\x64\x24\xd9\xdc\x5b\x86\x10\x9e\x1e\xb7\x22\xc0\x4a\x10\xd1\x34\xa1\x40\x1c\xe0\x34\x54\x48\x42\xc5\x25\x1e\x42\x45\x55\x70\x95\x21\x48\xa4\x92\x2c\x92\x28\x8e\x91\x00\x2e\xe1\x14\x25\x03\x9e\x20\x39\x92\xc1\x11\x45\xd3\x0a\xeb\xd9\x56\xea\x31\xdb\x7a\x35\x35\x0d\x58\x00\xc2\x4d\xab\x77\xd3\xff\x78\xfc\x47\x2d\x6b\xd0\x95\x9f\x58\xd6\x08\xb5\x8c\x61\x96\xb5\xdb\x55\xd7\x65\x6b\x5c\x19\xa8\x23\x9d\x31\xac\x4a\xcc\x4c\xa8\xf3\x49\x6e\x5c\x9b\x13\x63\x75\x65\x50\xb8\x49\xcf\xda\x35\x76\x0d\xba\xe3\x0a\x37\x35\xd3\x31\xa6\x33\xd3\x28\x30\xcc\x27\xda\xa5\x65\xcb\xac\xb0\x80\x4d\xb4\xc4\x0a\x62\xf1\x2c\xee\xa0\xf6\xa2\x81\x86\xa3\xdc\xd7\xb2\xac\x8f\x5a\xb6\x47\x67\x73\x9e\x8a\x95\xba\x4f\xb4\xac\x9f\x59\x93\xf8\x11\x96\x35\xaa\x65\x13\x9e\x64\x59\xe9\xe5\x55\x44\x97\x2c\x2b\x91\xce\x70\xc3\x19\x3d\xa4\x3a\x74\x76\x3e\x85\xef\x6f\x33\x61\xc2\x4e\xd7\xbd\x91\xe4\x4c\x27\x5c\x0f\x95\xf2\x65\x68\x8c\x10\xe7\xb4\x73\xc3\xb7\x3c\x8c\x2f\xe6\x06\x63\x96\x4b\xdd\xb5\x66\x0c\xe5\x14\x4c\xc6\x78\xb4\x34\x6a\x49\x72\xce\x27\x4a\x85\x8e\x61\xe1\xa4\x49\x27\x9e\x9e\x6b\x95\x55\x85\xe3\x00\x83\x14\x9a\x63\x65\x1a\x29\x1c\xa7\x20\x88\x23\x09\xc7\x39\xc0\xc9\x50\x25\x39\x19\x67\x69\x1c\xb1\x2c\x85\x23\x9c\x56\x10\x29\x13\x2c\x60\x19\xc4\x43\x84\x38\x84\x3c\xcb\x4a\x3f\x66\x59\xaf\x3d\xe4\x93\x05\x2c\xcf\x72\x17\x4c\x2b\xcf\xf2\x2f\xc7\x2f\xfa\x78\xd4\xb6\xa6\x02\x83\x7a\x62\x5b\x23\x54\xe5\x85\xd9\xd6\xd2\xb8\x3a\x50\xaa\x68\x5d\x94\xdb\xa9\x76\x85\x53\x5a\xb5\x51\xd2\x49\xd5\x29\x27\x93\x4d\xac\xf3\x0a\xac\x8c\x6a\x4c\xec\xad\xc0\xc6\x9c\xe2\x7b\xbe\x6d\x36\x87\x52\x52\xe8\xd8\x72\xad\x9b\x8d\x0d\x99\x94\xf2\xd6\x4a\x35\x61\xf2\x5d\xe9\xda\xed\x84\x60\x67\x48\xbc\x3d\x1f\x66\x0b\x5f\xcb\xb6\x3e\x6a\xdb\x1e\x9d\xcf\x39\xbe\xa3\x2d\x9f\x99\x11\xf8\xc4\xea\xba\x8f\xb0\xad\x51\x6d\x9b\xf0\x24\xdb\x1a\x35\xf3\xbe\xb5\xad\xef\xbd\x51\xb6\xd3\xcc\xd8\xc3\x4c\x6a\xd0\x1a\xbe\x65\x5a\xcd\x9e\xc0\xd6\x9a\xf3\x42\x6d\x2d\xd8\xfa\xa4\x3d\xa4\x45\xb4\x58\xac\x63\x6f\x56\xa3\xb8\x36\x66\xa9\x2c\xb1\x5c\xa6\xd8\x8c\xd8\x4e\x54\xcc\xd8\xa0\xa3\x82\x5a\x2b\xad\x71\x64\xbb\x90\xd2\xb4\x42\x9c\xe7\x53\x96\x79\xf3\x13\x83\x8e\x5f\x1f\xe4\xbd\x5e\xd7\x76\xa0\x63\xfb\x3f\xf7\xa7\x23\xb4\xde\xbd\x86\x27\x51\x2e\xd5\x1b\x35\x21\x5b\xba\xf6\xc6\x20\xa1\xd0\x10\x6b\xdb\xb7\xf6\x94\x4b\x85\xae\x1f\xe2\x6f\x18\x86\x61\x42\x32\xe9\x83\x76\x82\x10\xab\xd4\xb2\x45\xa1\xd6\xc5\xf2\x62\x17\xfb\xae\x2b\x27\xd4\x6a\xa6\x35\xed\x8f\x75\x6d\xf7\x6e\xca\xc0\xf7\x27\x51\x1d\x80\x7a\x8e\xf2\x73\x88\xaf\x52\xbf\xf3\x64\x2e\xdb\x76\xe0\x6b\xff\xf0\x7e\xe4\xfe\xe1\xad\xc8\x7d\xff\xeb\x8f\xfb\x4f\xe1\xee\x18\xed\x39\xe6\x22\x11\x86\x35\x4b\xd9\x6a\x53\xc4\xbe\x1f\x9a\xbf\x62\x87\xf6\xbb\xcf\x5e\x87\x3b\x45\xf3\x9c\x61\xbd\x9b\xf1\xbb\x06\x75\xff\xc6\xd4\xe3\x17\x79\x5d\xbe\xfd\x64\xce\xce\x23\xb9\xc4\xe9\x05\xb2\x6e\xe6\x3c\xf4\x25\x66\x57\x5f\x13\xf6\x5c\xee\xc3\xd0\x5c\xe2\xff\x22\x69\x57\x25\xe0\xa9\xb4\xb4\x76\xb5\x7d\xc7\x48\xb6\x94\x14\x3b\x57\x78\x48\xd4\x44\xa1\x21\x7a\x4d\x8f\xa1\x60\xe5\x52\x70\x32\x34\xeb\xd9\x52\x1a\x93\x1c\x0b\x21\xff\xec\x0a\xa7\xc6\x9b\x63\x8f\xd3\xe3\xc1\xb9\x8d\xa2\x90\x79\x2d\xad\xfb\xdb\x17\xfa\x46\x26\xe7\x00\xc2\x4f\xc9\xd1\x6a\xe0\x98\x1e\xaf\xf1\x2b\xb6\xfd\xd0\xb7\xd1\x6c\x8e\x26\xf2\xa9\xc0\xa4\x75\x5f\x45\xe8\x3e\x02\xa7\xa6\xed\x68\x16\xb2\xcf\xd2\xe9\x83\x76\x1b\xad\xbe\x0e\x3f\xb0\x76\x46\xac\x89\x98\x1f\x46\xb6\x8e\x95\xca\x0d\xd7\x87\xff\x71\x42\xfa\x00\xda\x83\x27\xd0\xbc\x01\x73\x1b\xb1\xfe\xb9\xb2\xe9\x75\x4e\x9e\xfa\x64\x82\xac\x67\x91\x76\x00\x76\x1b\x81\x5e\xfb\x13\x32\xb7\x82\x3d\x7f\xf7\xb2\x8c\x0d\xa4\x68\x0f\xcc\xa4\x3d\x84\xdb\xe8\xf7\xda\xee\xf5\xf5\x15\x83\xd3\xa9\xa1\xcb\x9e\x7d\x36\x2d\x25\xc4\x6f\xf6\xd1\x66\xb2\xba\xf7\x23\x50\xba\x75\xdb\x1e\xc1\x01\x70\x7e\xb2\x91\xaa\x22\x39\x38\xf7\x4f\xdd\x88\xae\xbc\x62\xdf\xdc\xce\xdf\xc2\x88\xd5\x95\x27\x91\xa9\x2b\x37\x13\xb8\xb3\x05\x1b\xf2\x22\x10\x6d\x4e\xfb\xd3\x67\xd1\xbd\x85\xe5\x27\x3d\x24\x76\x88\xc4\xc9\x79\x06\x9c\xd5\xf3\x18\xd8\xc2\x0a\xd1\xe9\x88\x2c\xf8\x21\x9c\x63\xc2\x9c\x6e\xb4\x72\x60\x46\xe2\x61\x4b\xfc\x01\x46\x54\xe1\x5f\x16\xb4\xbd\x9d\xed\xae\xef\x7c\x5c\xd6\xc7\xe0\xfc\x24\x7b\xbf\x07\xad\xdf\x59\x8a\xfc\x72\x7d\x16\x59\x27\x30\x6f\x34\xcf\x67\x08\x74\xbc\x21\x71\x1e\x19\xd6\x03\x8c\xe8\x2a\x79\x4d\xfd\x1c\x4b\xd9\x20\x91\xa0\x7d\x67\xbc\x70\x96\xe0\x53\x60\x01\xca\x15\x14\xa0\xd3\xdf\xf6\x2a\x81\xa6\xaa\x3e\xe0\xb4\x4e\x41\xdd\x44\x9c\xdb\xf2\x12\x69\x2e\xed\xc8\x7a\x9a\xf8\x02\xf0\xae\x11\x19\x68\x7e\x0b\xa5\xcf\x91\xe3\x11\xb4\x5b\xa9\xbc\x2a\xcd\xe7\xd0\x76\x13\x4d\x97\x69\xd9\x51\x6c\x98\xe6\x68\x3e\x7d\x8c\xa2\x63\x58\x37\x8f\xa8\xb7\x00\x09\xa1\x6f\x0a\x75\xab\xef\xe8\x63\xf4\x14\x0a\x83\xd0\x6e\x9b\xb7\x5b\x02\x5f\xb1\x20\xc9\xaf\xd8\xd6\xc4\xcb\x86\x69\x23\xa5\x0f\x9d\x10\x26\x9e\x60\xb7\xb7\x70\xae\x51\x7c\x67\x74\xb4\x81\xfa\x34\xe9\xde\x21\xd8\xab\x72\xd3\x27\x0a\x5a\xf5\x03\x21\x87\xdd\x37\x27\x7d\xa8\x28\x16\xb2\xed\x47\x05\x7a\x15\xc1\xd1\xc2\x79\x7b\x3b\xb0\x54\xf5\x1a\xde\x41\xfb\xe3\x7a\x70\x09\xf6\x75\x8a\xcf\xcc\xb2\x63\x80\xdb\x28\x7c\x03\xcf\x59\x4f\xa3\x27\x45\x2e\x42\xbd\x1a\xf6\x6f\x1a\x5d\x21\x74\x1b\x43\x6d\x40\xee\x95\xe8\x49\xd4\x9e\x03\x7d\x35\x7c\xbb\x55\x93\x7d\xc0\x9f\xad\x0c\x47\xa0\xa3\xc4\x9b\xe1\xe0\xc6\x53\xd3\xda\x18\xbe\x05\xb2\x6c\xdd\x9c\x3c\x5f\xd0\x41\x0c\xd7\xc9\x0f\x74\xb8\x9d\x99\xad\xe9\xb9\x3d\xc9\x11\x41\xfe\x3e\x1c\x57\x39\xf1\xb5\xbd\x9d\x89\xa9\x85\x16\xba\x39\xb7\x3f\x85\x9b\x73\xc8\xae\xb2\x75\xae\xd3\xed\xfc\xed\x92\x28\x1f\xc6\xd3\x0e\xc1\x55\x3e\x42\xd3\x8f\xc7\xa0\xf7\xfe\xf6\x43\xa6\x76\x10\xfa\xd9\x05\xf0\xbd\x13\xfc\x18\xe8\xf1\x12\xea\x49\x33\xfc\x12\x8a\x5b\x78\xb8\xb2\xae\xbb\x88\xec\x79\xee\xeb\x14\xf0\x4d\xb4\x5f\x77\x62\xfe\xc5\xf6\x47\xa8\xcd\x29\xfc\xc8\x4b\x7d\x37\x88\xdb\x3b\xf2\x5d\x86\xb1\x2f\x99\xe6\x28\xb2\x94\x2f\xc0\xbc\x1a\x22\x7c\xff\xae\x20\x07\xea\x86\x8d\xfd\xfc\xf7\xbf\xb1\x17\xdb\x34\x14\xdf\xf6\xe6\xcb\xaf\x5f\x0e\x5a\x39\x3f\x7e\xbc\x62\xe1\x0d\x65\x53\xb9\xad\xa1\xb7\x39\x12\xde\x54\x32\xe7\xda\xc0\xb9\x09\xfd\x51\xd3\xcb\x04\x1c\x35\x0d\x90\xb0\x4b\x8a\xbb\x4a\x86\xfd\x89\x91\xe4\xcd\x95\x01\xba\xd2\x57\x7d\xfb\x76\xa9\xfc\xe7\xd4\x07\x6c\xd1\x62\xa9\x72\x4d\xcc\xa6\x4b\xfb\x3d\x39\xac\x26\xa6\xc4\x9a\x58\x4a\x88\xf5\xc0\x36\x95\x7b\xb7\x5c\xc2\x9a\x95\xe4\x46\x65\x6a\x62\xbd\x51\xcb\x26\x1a\x9b\x9f\x92\x62\x41\x6c\x88\x58\x42\xa8\x27\x84\xa4\x78\x61\x63\x73\xb3\xee\x38\xfe\xda\x0f\xa4\x62\x9e\x27\x8c\x63\x3c\x57\x76\x2d\xc3\x28\x39\x96\x4f\x30\x6d\x74\x56\x58\xdb\x40\xff\xca\x16\x6f\xa8\x24\xb6\x4b\xd9\xbf\x5d\x0e\x7e\x3a\xce\x49\x61\x97\x25\xb8\xac\x30\xf7\x49\xe0\x34\xa9\xf4\x37\x8a\x21\x84\x98\x63\x59\x9c\x49\x83\x3d\x57\x29\x82\x29\x8e\xaf\x20\x90\x70\xd5\x38\xc9\x21\xdd\xa2\x1d\x18\x54\x14\xa4\x60\x63\x38\x99\x43\xc3\x58\x1f\x51\x9a\x4d\x61\x62\x27\x5b\x6f\xd4\x3d\x9a\x3d\xce\x7e\x1f\xa1\x75\x7f\x01\x8d\x39\xea\x6f\x20\x22\x2c\x59\x2b\x57\xfc\x84\x1f\x7a\x05\x5a\x7a\x25\x12\xbf\xb9\xed\x83\x08\xce\xc3\xfe\x63\xe7\x22\xbd\xe6\x41\xcc\xdf\x5d\xb9\x5d\xbc\x36\x42\x92\x07\xd0\x82\xb2\x83\x2c\x6c\x01\xad\xb5\x3e\xd1\xbe\x13\x34\xfd\x63\xbf\x53\xfa\x7a\x1d\x8a\x8b\xf4\x1a\x9c\xdf\x02\xb5\xbe\x41\x6a\x0f\x07\x28\x56\xd3\xbe\x3e\xd1\x90\xed\xf4\x0d\xb8\xf9\xe3\x46\xda\x2f\xaf\xd8\x0b\xfe\xf2\xe3\x8f\x53\x5d\x09\x00\x3a\xa7\x2c\xe7\x24\x7d\x5c\xf1\x31\x42\xeb\xcd\x88\x1f\xc9\x73\x9f\x30\xb1\x75\x6d\xb2\x89\xf5\x6f\x10\xe8\xae\xd3\x19\x69\x30\xd4\x8f\x1b\x64\x89\x79\xc8\xa2\xf7\x5f\x22\x5d\x1b\x38\x98\x3e\x71\x90\x86\xac\xc0\x30\xfe\xfc\x89\x2d\x11\xb6\xd4\x0d\x03\x9b\xcd\x91\xb5\xc6\xa4\xf5\x0e\xa1\x6d\x62\xce\x00\x3a\x98\x6e\x63\xcb\xc1\xfe\x57\xdd\xc6\x9c\x01\xc2\x54\xdd\xb2\x1d\x4c\x77\xd0\x18\xd3\x27\xee\x2f\xb2\x39\x9e\x9a\xb6\xee\xa0\x8d\x70\x6f\x20\xeb\x48\xda\x1e\xf0\x7d\xd9\xc6\x8f\xdf\x02\xe3\x7a\x36\xea\xdc\x8c\xe9\xce\x94\x8d\xe7\x2b\xa4\x6c\x24\xb3\x11\xd3\x77\x86\xff\xb1\x2d\x7e\xdc\xb4\xf1\x55\x55\x84\xb4\x3b\x8f\xcc\x17\x9b\x6f\xc0\xd8\xe6\xdc\x92\xa3\x41\xda\x05\xa1\x2e\xc5\x5e\xde\x2f\xb4\xff\xd6\xdc\x56\xbc\xe2\x88\x7a\xb5\x80\x29\xd0\x81\x1b\x37\x86\x29\xf3\xf1\xd4\x95\xb3\x81\x1c\xe4\xda\xc9\xff\x1b\x00\x00\xff\xff\xe6\xc2\x51\x59\x27\x2a\x01\x00") func pathed_paymentHorizonSqlBytes() ([]byte, error) { return bindataRead( @@ -1166,7 +488,7 @@ func pathed_paymentHorizonSql() (*asset, error) { } info := bindataFileInfo{name: "pathed_payment-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc8, 0x36, 0x88, 0x52, 0xc5, 0xca, 0xcb, 0x5a, 0x63, 0xa0, 0xbc, 0xb3, 0xca, 0xd9, 0xa4, 0xf1, 0xfa, 0x54, 0x2, 0xc2, 0x57, 0xbf, 0x4c, 0x81, 0x74, 0x74, 0xef, 0x23, 0xd1, 0x34, 0xd7, 0x3d}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7, 0x51, 0xab, 0x17, 0x3b, 0x30, 0x1c, 0xe, 0x44, 0x69, 0x42, 0xdf, 0x58, 0xbb, 0x36, 0xd1, 0xc2, 0xe5, 0x90, 0x33, 0x7b, 0x5b, 0xb6, 0xb9, 0x5c, 0x78, 0x36, 0x2f, 0x37, 0x4a, 0xd7, 0xd9}} return a, nil } @@ -1190,7 +512,7 @@ func paths_strict_sendCoreSql() (*asset, error) { return a, nil } -var _paths_strict_sendHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x69\xb3\xa2\x48\xf6\x38\xfc\xbe\x3f\x05\x51\x31\x11\xd5\x1d\x56\xb5\x90\xec\xd5\xff\xfe\x45\xa0\xe2\xbe\xef\x3a\x31\x61\x24\x90\x28\x8a\xa2\x80\xdb\x9d\x98\xef\xfe\x84\x80\x1b\xe2\x86\xdc\x5b\xb7\xe6\x19\xa6\xe6\xb6\x4a\x72\xb6\x3c\xe7\xe4\xc9\x93\x27\x93\xef\xdf\x7f\xfb\xfe\x1d\xab\x1a\x96\x3d\x34\x51\xa3\x56\xc4\x14\x68\x43\x09\x5a\x08\x53\x96\xd3\xf9\x6f\xdf\xbf\xff\xb6\xbb\x9f\x5a\x4e\xe7\x48\xc1\x54\xd3\x98\x1e\x1b\xac\x90\x69\x69\xc6\x0c\xe3\xff\x64\xfe\x24\x4e\x5a\x49\x5b\x6c\x3e\x1c\xec\x1e\xf7\x35\xf9\xad\x21\x36\x31\xcb\x86\x36\x9a\xa2\x99\x3d\xb0\xb5\x29\x32\x96\x36\xf6\x37\x86\xff\xe5\xdc\xd2\x0d\x79\x72\xf9\xab\xac\x6b\xbb\xd6\x68\x26\x1b\x8a\x36\x1b\x62\x7f\x63\x5f\x5b\xcd\x34\xf7\xf5\xaf\x3d\xb8\x99\x02\x4d\x65\x20\x1b\x33\xd5\x30\xa7\xda\x6c\x38\xb0\x6c\x53\x9b\x0d\x2d\xec\x6f\xcc\x98\x79\x30\x46\x48\x9e\x0c\xd4\xe5\x4c\xb6\x35\x63\x36\x90\x0c\x45\x43\xbb\xfb\x2a\xd4\x2d\x74\x86\x66\xaa\xcd\x06\x53\x64\x59\x70\xe8\x34\x58\x43\x73\xa6\xcd\x86\x7f\x79\xb4\x23\x68\xca\xa3\xc1\x1c\xda\x23\xec\x6f\x6c\xbe\x94\x74\x4d\xfe\xb6\x63\x56\x86\x36\xd4\x8d\x5d\x33\xa1\xd8\x14\xeb\x58\x53\x48\x14\x45\x2c\x97\xc6\xc4\x6e\xae\xd1\x6c\x60\x95\x72\xb1\xe7\xb5\xff\x73\xa4\x59\xb6\x61\x6e\x07\xb6\x09\x15\x64\x61\xa9\x7a\xa5\x8a\x25\x2b\xe5\x46\xb3\x2e\xe4\xca\xcd\x93\x87\xce\x1b\x0e\x64\x63\x39\xb3\x91\x39\x80\x96\x85\xec\x81\xa6\x0c\xd4\x09\xda\xfe\xf5\x11\x08\x65\xe7\xd3\x47\xa0\xdc\xe9\xd5\xc7\x31\xe8\x62\x7b\x9e\x3b\x97\xc0\x9d\x22\xdf\x42\x76\xd2\xea\x08\xdc\x69\x9e\x2b\xa7\xc4\xee\x49\x4b\x0f\xac\x43\xd5\x00\xa9\x2a\x92\x6d\x6b\x20\x6d\x07\x86\xa9\x20\x73\x20\x19\xc6\xe4\xf6\x83\x96\x36\x9c\x21\xd3\x79\xc4\xe3\xe6\x76\x7b\x43\x55\xbd\xe6\x16\xd2\xf5\x9d\xc5\x38\xb4\x3e\xf3\x10\x32\x1f\x6d\xad\x43\xcb\x1e\x4c\x0d\x45\x53\x35\xa4\x0c\x74\xa4\x0c\x1f\x7f\x56\x5a\x6e\x1f\xa4\x4e\x9b\x29\x68\x33\x38\xe9\xdf\x99\x05\x1d\x5b\xb7\x06\xc6\x6c\xa0\x29\xcf\x3c\x6d\xcc\x91\x09\x0f\xcf\xda\xdb\x39\x7a\xe1\xe9\x23\x25\x2f\x51\xf1\xdc\xb3\xae\x94\x9d\x07\x2d\xb4\x58\xa2\x99\xfc\x14\x0b\x27\x8f\xcf\x4d\xb4\xd2\x8c\xa5\xe5\xfd\x36\x18\x41\x6b\x14\x12\xd4\xeb\x10\xb4\xe9\xdc\x30\x77\x1e\xc9\x1b\x56\xc2\x82\x09\x2b\x4b\x59\x37\x2c\xa4\x0c\xe0\x53\xba\xb8\xb7\xe7\x10\xaa\xe4\x19\x73\x08\xa2\x4f\x9f\x84\x8a\x62\x22\xcb\xba\xfd\xf8\xc8\x36\x15\x67\xe8\x1d\xe8\x86\x31\x59\xce\x1f\x68\x3d\xbf\x47\x92\xdb\x0a\x6a\xe6\x93\x80\xf7\xe3\xce\xc3\x0f\xec\x5c\xe5\xce\x67\x3c\xd6\x74\x0f\x3e\xc4\x23\x0f\x79\xd7\xfd\x43\xce\xe8\xf2\x04\x92\xd3\xd1\xe8\xde\x13\xf3\xdd\x03\x23\xfb\x6e\x0f\x58\x67\x0e\x48\xda\xde\x55\xa3\xd1\xc1\xd2\x1f\x69\x6c\xb8\x74\x18\x77\x1b\x6a\x96\x3d\xb0\x37\x83\xf9\x7d\x90\xbb\x96\xc6\xfc\xd1\x96\xe8\xd1\x66\xfb\xd1\xf4\x76\x63\x69\xfb\xd0\x00\xb5\xe3\xf9\xae\x17\x7b\x74\x30\x76\xc3\x84\x9d\xb4\x2d\x6b\x79\x0f\xf3\xa1\xb1\x6c\x28\xe8\x91\x50\xc5\x1d\x4b\x6f\x44\x29\xde\x60\x3b\x7f\x30\xf4\x99\xa0\xed\x60\x05\xf5\x25\x1a\xec\x1c\x0d\xba\x01\xd8\xd7\xf2\x61\x0c\x01\x63\xf8\x60\x0e\x4d\x5b\x93\xb5\x39\x9c\xdd\x8c\xb8\xee\x3d\xfa\x34\x0d\x87\x31\xf8\x59\x0a\x82\x1f\x7c\x1a\xbf\xd3\xdd\x8f\xe0\x73\x1b\xbe\x3b\x7c\x57\xfd\x76\xba\xe7\x7d\xdc\x8d\x68\xfb\x78\xdd\x51\xdf\xc1\x83\x14\x0c\x0d\x73\x3e\x98\x6a\x43\x2f\xc4\xb9\x41\x82\xaf\xe5\xc3\x3c\x3e\x1f\xa4\x3f\x0c\x79\x3f\xb8\x7a\x71\xf7\x2d\xf0\xbe\xa6\x37\x71\x3c\x6a\x00\xee\xd3\xc9\x4a\xb1\x55\x2a\x63\x9a\xe2\xa2\x4f\x89\x69\xa1\x55\x6c\x3e\x08\xfb\x8a\x62\x47\x00\xd9\x53\xa9\xdb\x90\x9c\x6f\x57\x00\xb9\x0e\xe9\x76\x1b\x9f\x6f\xb9\xdd\x38\x68\x52\xe0\x3d\xd1\x10\x6b\x2d\xb1\x9c\x0c\xd1\x09\xbb\x19\x9d\x85\x16\x4f\x63\x3e\x03\xf2\xf0\xd3\x0a\x7a\xb0\xed\x71\xd2\xf0\x30\x87\x57\x5c\xd5\x33\xfc\x05\x83\x78\xec\x59\x2f\xbc\x7e\xac\xb1\x17\x4b\x3f\xcc\x9b\xe7\xb6\x9e\xe1\xc5\x7d\xe4\xc1\xb6\x9e\x75\x3f\x4e\xcf\xde\x1d\x3c\x42\x91\xcf\xf1\xdd\x6e\x7c\xe2\xc7\xee\x34\xf4\x79\x24\xaf\xb5\x90\xc9\xd4\xc5\x8c\xd0\x0c\x78\x62\xaa\xed\xa6\x81\x9a\x8c\x7e\x9f\x2d\xa7\xc8\xd4\xe4\x7f\xfe\xeb\x8f\x07\x9e\x82\x9b\x10\x4f\xe9\xd0\xb2\x7f\x87\xb3\x2d\xd2\x9d\x14\xe1\x03\x4f\xa8\x9a\x19\xf8\x48\xba\x55\x4e\x36\x73\x95\xf2\x0d\x7e\x06\x70\x38\x3c\x52\xf7\x0d\xbb\x20\xf4\x06\x8c\x3d\x77\x2f\xc0\x70\x12\x23\xbb\xc7\x8f\xc4\x7f\xc3\x9e\x61\xc4\x61\xfd\x01\x08\x62\xb7\x29\x96\x1b\x3e\x10\xfa\x7c\x68\x2d\xf4\xbd\xe6\x26\xb3\x62\x49\xb8\xc0\xf0\xd7\x6f\x6e\x76\xb8\x0c\xa7\xe8\xc7\xfe\x37\xac\xb9\x9d\xa3\x1f\xde\x23\x7f\x61\x0d\x79\x84\xa6\xf0\x07\xf6\xfd\x2f\xac\xb2\x9e\x21\xf3\x07\xf6\xdd\x49\x1a\x27\xeb\xe2\xae\xbf\x3c\xc8\x7b\x78\xbf\x9d\x41\x3c\xbf\xe9\x01\x4e\x56\x4a\x25\xb1\xdc\xbc\x01\xd9\x6d\x80\x55\xca\xe7\x00\xb0\x5c\x03\xfb\xba\x4f\x07\xef\x7f\xb3\x1c\x20\x5f\xfd\x98\xf7\xec\x7b\x38\x0f\x12\xba\xcb\xcf\x99\x2c\xcb\x95\xa6\x4f\x9e\x58\x27\xd7\xcc\x1e\xc8\x3a\xcd\x0b\x9f\xa1\x3f\x42\xf1\x11\xf2\x0c\xf3\x17\x40\x1c\x01\x54\x8b\xf1\xf9\xb0\x51\x2b\x62\x73\xd3\x90\x91\xb2\x34\xa1\x8e\xe9\x70\x36\x5c\xc2\x21\x72\xc4\xf0\x60\x1e\xfb\x94\xdc\xfb\x8a\xe6\x91\xbf\xd7\xd5\x23\xfd\xfb\xbe\x0d\x92\xe5\x41\xb3\xef\xc2\xc7\xea\x62\xb3\x55\x2f\x37\x4e\x7e\xfb\x0d\xc3\x30\xac\x28\x94\x33\x2d\x21\x23\x62\x0e\xf7\xa5\x52\xcb\x75\x7a\x8d\x66\x3d\x97\x6c\x3a\x2d\x84\x06\xf6\x8f\xc1\x3f\xb0\x86\x58\x14\x93\x4d\xec\x1f\xc4\xee\x9b\xbf\x37\xee\x1a\xe2\x6b\xdc\xdd\x03\x1f\x19\x73\x20\x88\xb9\x47\x3c\xd5\x6b\xfc\x3d\x80\xe1\xc0\xe2\xe1\xa7\x50\x1c\xfe\xfe\x1b\x86\x25\x85\x86\x88\x75\xb2\x62\x19\xfb\x07\xf1\x4f\xe2\x5f\xf1\x7f\x10\xff\x04\xff\xfa\xbf\x7f\x00\xe7\x33\xf8\x27\xf8\x17\xd6\x74\x6f\x62\x62\xb1\x21\xee\x84\x22\x96\x53\x7f\x04\x4a\xe6\x81\x71\xe0\x45\xc9\xdc\xc7\xf0\xde\x92\xf9\x7f\x61\x24\x73\x39\xa6\x7a\x72\x38\x8c\xc3\x8f\x09\xe2\x38\x6c\x5f\x40\x74\x28\xc6\xb0\xc6\x4e\x56\xd8\xdf\x47\x0f\xf0\xcd\xfd\xb9\xd9\xab\x8a\xd8\xdf\xa7\x16\xf1\x47\x90\xd5\x46\x4a\xa3\x1f\xa0\x8f\xc4\xbd\x19\x3f\x4e\x61\x60\x08\xf4\x2a\x95\x41\x40\x7d\x94\x9e\x19\xe4\x39\xb9\x47\x2d\xbb\xa4\x36\x28\xcc\x7b\x99\xda\x00\xa0\x7e\x6a\x4f\x8d\xe4\x26\xb5\xbb\x91\x4b\x41\x2a\x5c\xea\xf6\xc0\x86\x92\x8e\xac\x39\x94\x11\xf6\x37\xf6\xf5\xeb\x5f\xe7\x77\xd7\x9a\x3d\x1a\x18\x9a\x72\xb2\xc4\x7b\xc6\xeb\x45\x10\xec\xf1\xe9\x58\xd9\x63\x3c\xba\x06\x79\x91\x0a\x70\x79\xf3\x7e\xc6\xe4\x11\x34\xa1\x6c\x23\x13\x5b\x41\x73\xab\xcd\x86\xbf\x33\xd4\x1f\x4e\xd8\x50\x6e\x15\x8b\x2e\xb3\xee\x93\x0f\x35\x5d\x23\x6d\x38\xb2\x31\x6d\x66\xa3\x21\x32\x0f\x37\x2f\xfb\xf2\x74\x36\x10\x9a\xb5\x93\xfc\x89\xcb\x95\xa6\x60\x92\x36\xd4\x66\xb6\x8f\x2c\x38\x0d\x66\xd6\xd7\x6c\xb6\x9c\x1e\x26\x40\x17\x3c\xb8\x4d\x54\x1d\x0e\x2d\xcc\x9a\x42\x5d\xbf\x44\x63\x1b\x53\x3d\x40\x4c\x80\xa6\xff\xb8\x21\x0a\xff\x2c\x2a\xac\x38\xfc\x09\xab\x83\x48\x6c\xb4\xb9\x10\xc8\x7c\xae\x6b\xce\x42\x11\x66\x6b\x53\x64\xd9\x70\x3a\xc7\x76\x3a\xe9\x7c\xc5\xde\x8c\x19\xba\x24\xf4\xda\x1c\x71\x1f\x6f\x7b\x93\xcb\xc7\x68\x3e\x4c\x45\xaf\x40\xf5\xcc\x4c\xa8\x37\xdd\x88\x95\x70\x7e\xc8\x95\x93\x75\xd1\x09\x2f\x13\x3d\xef\xa7\x72\x05\x2b\xe5\xca\x6d\xa1\xd8\x12\x0f\xdf\x85\xee\xf1\x7b\x52\x48\x66\x45\x8c\xb8\xc7\x4c\x68\xb1\xfb\x01\x5d\xa8\xa2\x97\x53\xc2\x66\x68\x63\xaf\xa0\xfe\xfb\xd7\x2b\x1c\x7f\xfd\xf1\xc3\x44\x43\x59\x87\x96\xe5\x37\x2b\x6f\x81\x2c\xd8\x04\x6f\x74\x94\x9b\x29\x78\x99\x33\x37\x61\x76\xe0\x2b\xd8\x32\x8e\xe9\xd6\x87\x3c\xc5\x31\x51\x1b\xd0\x9c\x00\xc1\xcd\xdd\x0c\x6e\xc0\x03\x34\x73\xcb\xc2\x82\x93\x2d\x11\xa9\xed\x29\xcc\x0f\x53\xda\x5b\x8c\x60\x95\x4e\x59\x4c\x61\x89\xde\x1d\x8e\xdc\x04\xe8\x6d\x86\x0e\xb0\x7c\xb7\xff\xd4\x94\x6b\xb4\xed\x33\x60\xaf\x6a\x9d\x07\xc7\x53\x3b\x9f\xcd\x0c\xae\x79\xfa\xcb\x84\xdf\xb5\x96\x5f\x9c\xd5\xb6\x2f\x57\xb4\xd9\xd1\xe3\xe0\x5b\x0a\xb2\xa1\xa6\x5b\xd8\xd8\x32\x66\xd2\x75\x65\xdb\xa7\x0d\x5f\x95\x83\x07\xc7\x93\xc3\xbe\x58\xe2\x0a\x6d\x27\x15\x0c\x0f\x59\x61\x50\xf1\x44\xf0\x83\x9e\x58\x4e\xf2\xc4\x6e\x00\xb1\xa7\x63\xef\xe5\x70\x1f\x86\x63\x47\x3c\xd6\xfe\x50\xc1\xe0\x1b\x98\x8c\xa5\x7d\x1c\x9b\xfc\xcf\x98\x08\xda\x77\x1f\x72\xdb\x2e\xe7\xca\xc3\x6d\x0f\xaa\xe3\x7d\xf5\x15\x77\x5c\xf0\x42\x5c\xc4\x03\x36\xd4\x07\xb2\xa1\xcd\xac\x60\x1d\x54\x11\x1a\xcc\x0d\x43\x0f\xbe\xeb\x2c\xb7\xab\xe8\x5a\x5f\x3b\xb7\x4d\x64\x21\x73\x75\xad\xc9\x2e\xce\xb6\x37\x03\x27\x4c\xd2\xde\xae\xb5\x9a\x9b\x86\x6d\xc8\x86\x7e\x95\x2f\x7f\x1f\xed\x95\x05\x41\x05\x99\x4e\x78\xe1\x05\x8a\x4b\x59\x46\x96\xa5\x2e\xf5\xc1\x55\x45\xf1\x18\x87\x9a\x8e\x94\x7b\xad\x3c\xd2\xaf\xa8\xd0\x75\xd3\xbb\x92\xed\x7f\xd5\x12\xaf\x2c\x49\xdd\x19\x17\x1f\xf7\x48\xf7\x7d\xdc\xb3\x2c\x47\x3b\xd4\xdd\xc4\xf1\x51\x43\xdf\x53\x8c\xbe\x38\x14\xde\xc4\x75\x39\x34\x06\x37\xbf\x31\x54\x9e\xac\x85\x45\xa6\x9b\xf7\xa6\x42\xe7\xe5\x7e\x57\xa6\x4b\xbb\xd9\x81\xec\xb2\xe2\x8c\x92\x2f\x0e\x92\x9e\x77\x30\x96\xa6\x7c\xa8\x1f\xba\x32\x3c\xed\x5d\xce\xd7\xaf\x3f\x7e\x5c\x9f\xae\x5d\xb7\x03\x6f\x29\xf2\x55\x71\x7a\x75\xba\xbf\x47\x1a\x53\x78\x6e\x33\xcc\x08\xe7\x2c\x39\x5f\x45\xeb\xab\x12\xbe\xd5\xc8\x2b\x5c\xbe\xd5\xc4\x9d\x2b\x07\x36\xb8\xac\xb7\xbe\xd3\xee\x26\xba\x43\xab\x1b\x18\x1d\x92\x34\xcb\xab\xe8\xc5\x24\xc3\xd0\x11\x9c\xed\xc7\x2d\x4d\x46\x83\xd9\xd9\x18\xed\xfe\x76\x3e\x6e\x1f\xcb\xdc\x06\xbe\x11\xfd\xac\xd0\xce\x7f\xf3\xa4\x5c\x22\xb0\x2a\xdb\xa1\x7a\xe0\xd4\xed\x63\xc9\xac\x98\x2c\x60\xbf\xff\x7e\x2a\xc1\xff\xfb\x1b\xc3\xff\xf8\xe3\x1e\xac\xa0\xe7\xf7\x52\xfb\x7f\x17\x82\x7c\x00\xde\x99\x50\x7d\xe0\x7d\x12\x77\x29\xbc\x69\x4c\xc1\x55\x01\x11\x98\x57\x70\xe1\xc8\x83\x63\xe9\x23\x4e\xec\x95\xd1\xf4\x5e\x4d\x45\x34\xe3\xe9\x1d\x2c\x1f\x35\xa2\x3e\xc9\xec\x8b\x63\xea\x1d\x6c\x97\xa3\xea\xb5\x07\x6e\x8c\xab\x67\x75\x34\x11\xea\xea\x5e\x3f\x4f\x49\x7a\x78\xaa\xe5\x79\xff\x3b\x13\xb8\x47\x87\xde\x67\xf2\xb7\x7b\x0b\x38\xa0\x0e\xb4\x97\xdd\x5c\xe1\xfa\x64\xe3\xda\x34\xee\xa7\x4c\xc4\xec\xcd\x00\xcd\x56\x48\x37\xe6\x28\x28\xb9\x69\x6f\x76\xd3\xa2\xa5\x6e\x5f\xb9\x39\x45\x36\xbc\x72\x6b\x37\x21\xbb\x76\xdb\xd2\x86\x33\x68\x2f\x4d\x14\x94\x87\xe3\x99\x3f\xfe\xf9\xaf\x63\xf4\xf2\xef\xff\x04\xc5\x2f\xff\xfc\x97\x5f\xe6\x68\x6a\x5c\x49\x99\x1d\x61\xcd\x8c\x19\xba\x19\x0d\x1d\x61\x5d\x82\xf1\x38\xd3\xa6\x68\x20\x19\xcb\x99\xe2\xe4\xb5\x39\x13\xce\x86\xc8\x3f\x67\x3b\x1f\x5c\x77\x92\xd8\x41\x1b\x22\xe5\xfa\x84\xcb\x5f\xe5\x16\xd6\xd6\xfc\x35\xbb\xae\x99\x4d\xd0\xf6\x5e\x36\xdd\xa5\xd5\x79\xf4\xf9\xc4\xbb\x57\xc7\x17\x96\x68\xaf\x70\x79\x9f\x97\xd9\xc5\x27\x9a\x72\x27\x37\x79\x12\xcd\x5d\x1b\xb7\xbc\x0d\x4f\xce\x88\x1f\xa4\x86\xee\x8e\xa3\xab\xb7\x6f\x05\x53\x4e\x70\x34\xbb\x9a\x05\xd0\x64\x74\x6d\xe0\x75\x6e\x62\x8a\xb1\x94\x74\x84\xcd\x4d\x24\x6b\x4e\xa2\x20\x68\x6d\xe4\x4a\xec\x1b\xb0\xc7\xea\x81\x65\x22\x5f\x0a\x5a\x53\xf6\xbd\xb5\x2f\xd4\x7c\x64\x0c\x72\xbb\xcb\xa9\x8f\xbd\x53\x03\xda\x10\x9b\x37\xd2\xf5\xa7\x89\xd1\xd3\x64\xfd\x73\x53\xd5\xe8\x98\x78\xb0\x44\xf6\x26\x53\x37\xa7\xb8\x8f\x30\x79\x35\x94\x8b\x8c\xcd\x87\xab\x8c\x6f\x32\x7a\x27\xee\x08\x66\x35\x05\x6d\x88\xa9\x86\xf9\xc8\xa2\x2c\x96\x12\x9a\xc2\x1d\x1e\xaf\xc1\xbd\xb2\x18\xfa\x02\xc8\x5b\x8b\x8a\x8f\x80\xcd\x95\x1b\x62\xbd\x89\xe5\xca\xcd\xca\xc5\xc2\xa2\x13\x59\x36\xb0\xdf\xbf\x12\x03\x6d\xa6\xd9\x1a\xd4\x07\x6e\x11\xdb\x9f\xd6\x42\xff\xfa\x0d\xfb\x0a\x70\x82\xff\x4e\xe0\xdf\x71\x16\x23\xf8\x1f\x14\xf9\x03\xa7\xff\x24\x09\x9a\x26\xd9\x18\x0e\xbe\xfe\xf1\xd7\x63\xd0\xc1\xc0\xdd\x31\x76\xd6\x5b\xd2\x76\x60\x1b\x9a\x72\x13\x13\xa0\x39\x8a\x7f\x06\x13\x39\x58\x5a\xe8\x10\x1e\x0d\xb4\xd9\xc5\x2e\xb5\xdb\xf8\x78\x8e\x21\x9f\xc1\x47\x0d\xa0\xa2\x0c\xfc\x69\xd7\x9b\x38\x48\x8e\xa3\x9f\x92\x1e\x3d\x70\x83\xb1\xfd\xbc\xd0\x29\x47\xb8\x89\x82\x62\x69\xfe\x29\x36\x98\x3d\x0a\xcf\x33\xde\x47\x41\x03\x8e\x7a\x06\x03\xeb\x0e\x19\xdb\xc7\x99\x60\x68\x92\x79\x4a\x4e\x9c\xd3\x17\x70\x38\x34\xd1\x10\xda\x86\x79\xbb\xab\x59\x9c\xc2\x9f\x52\x2d\xee\x4c\x46\xde\x36\x8e\xfb\x6c\xb0\x34\xcb\x3f\xc5\x06\xef\xb0\xe1\x66\xe4\x07\x1b\xc5\xbc\x0d\x9d\xe3\x59\xf0\x0c\x74\x02\x77\xc0\x7b\xbd\xe0\x04\x03\x37\x11\x70\x04\xc7\x70\x4f\x21\x20\x4e\x11\x1c\xa6\xec\x3b\xfb\xbf\x8d\x88\x26\x9e\xea\x0e\x02\x9c\x75\x84\x97\x24\x71\x4f\x63\xb8\x89\x88\x27\x28\x9a\x78\x0a\x13\xe9\x72\x73\xc8\x2d\xdd\x56\x2c\x9e\xc5\x79\xe6\x29\xf8\xd4\x40\xd5\x36\xfb\x4d\x4e\xc6\x54\x1f\xa8\x1a\xd2\x6f\x3b\x46\x9e\xe3\x9e\xb3\x3f\x82\xde\x2f\x0c\xee\x17\x6c\x36\x37\xd9\xa0\x70\x9c\x65\x9f\xf2\x21\x04\x33\xd0\x66\x43\x64\xd9\x83\xcb\x25\xa1\x3b\xa8\x00\x78\xce\x14\x09\xf6\x2c\x08\x70\xd6\xde\xe0\xed\xa1\x84\xc2\x49\x9e\x7a\x8e\x1f\xee\xa0\xbd\xaa\x61\xee\x03\x85\x9b\x38\x08\x9c\xa3\x9e\xeb\x15\xde\x55\xaa\xdb\x60\x01\xa0\xc0\x53\x1a\x05\xf0\x00\xd2\xef\xdb\x20\x05\x28\x1e\x7f\x0e\x11\xb1\x37\x74\x13\x4d\x8d\x15\x1a\xbc\x21\xd3\x38\x24\x2c\x8d\x99\x65\x9b\x50\xbb\x33\xe8\x52\x80\x3b\x1a\xcc\x95\x18\xe8\x66\x89\xcf\xb3\x41\xd0\x45\x99\xcf\x9e\x1d\xe2\x1b\xf6\x35\x93\xe8\x66\x6a\xf9\x4e\xbb\xd8\xa9\xf4\xb2\xe9\x62\xbb\x59\xe8\xb4\xe9\x74\x26\x2b\x90\xc5\x72\xaf\x07\xf2\xb5\x42\x89\xad\x08\x79\xa1\x25\xd6\xd2\x2d\xa6\x58\x4d\x36\xc4\x74\xbb\x5b\x29\xfb\x45\x76\x15\x09\xd8\x21\x49\x76\x0b\x19\xa6\x5e\xa6\x2a\xe5\x9c\x58\x4d\x96\xca\xe9\x04\x4b\x02\x81\x22\x99\x3e\x5d\x2d\xa7\x1a\xf5\x62\xa6\x53\x60\x33\x89\x62\xb2\x54\x2b\xe6\xd2\x15\xaa\xc1\x8a\xbd\x4e\xbb\xf5\x30\x12\x72\x87\x44\xa0\x3b\x89\x6a\x4f\xa0\x7b\x54\x47\x10\xb3\xdd\x4e\x1d\xb4\x0a\x15\xd0\xaa\x50\x89\x56\x26\xdb\xaa\xb1\x94\xd8\xaa\x16\x2a\x65\x50\xcb\xb6\xa9\x4e\x3d\x5b\xc9\xd5\xcb\x85\x42\xf6\xa2\xf3\xaf\x22\xa1\x1c\x4e\x00\x59\x4b\x83\x6c\x4b\xa4\x81\x50\xea\xb6\xd2\xad\x2c\x29\xf4\xf2\x42\xb7\x9b\xe9\x76\xdb\xa0\x9d\xed\xf6\x7a\x75\x46\xec\x75\xc5\x66\xb5\x90\xea\xf6\x1b\x42\x87\x61\xbb\x15\xea\x61\x24\xb4\x83\xa4\x56\xed\x65\xb2\x54\x81\x66\xbb\x89\x94\x58\x2e\x14\xba\x34\x5d\x48\x35\x3b\x95\x66\x81\xee\xa4\x3a\xf5\x5a\x25\x0b\x8a\x59\x31\xd5\x25\xc5\x42\x3b\x57\xab\x17\x4b\x62\x23\x93\xc8\x3c\x8c\x84\x71\x3a\xbe\x5e\xed\x65\x73\x45\x90\xcc\x91\xe9\x72\x8d\x4a\x74\x8b\xe9\x52\x39\x55\x4c\xe7\x5b\xe5\x6a\x0b\x64\x7b\x64\xbf\x94\x6e\x64\x2b\xe5\x56\x52\xac\x08\x8d\x0e\x5b\x4b\xb2\x95\x2e\xc8\x7e\x0d\x5b\x5c\xb7\x9b\xe4\xdc\xd1\x5a\xaf\xe0\xfa\xb8\x57\xe2\x4f\x0b\xdd\x2e\x3c\xfb\x86\x31\xdf\x30\xdb\x5c\xa2\x07\x6c\xe9\xb2\xa4\x2c\xb4\x25\xb9\x73\xf0\x53\x3b\x92\x4d\xa4\x68\xf6\x00\xea\xf3\x11\x9c\x2d\xa7\xd4\xce\xfa\xc5\x56\xfd\xeb\x7b\x74\xe7\x39\x76\x70\x05\x7b\xab\x91\xfa\xfa\x1e\x1a\x7b\x8e\x7d\x67\x79\x33\x68\x6b\x2b\xb4\x43\xe6\xfc\x3f\x5c\x11\x5b\x34\xea\x71\x96\xe8\xf8\x86\x91\x8f\x2a\x47\x50\xe9\x57\x58\xed\xd8\x97\x7f\x9d\x88\x08\xd0\x2c\xc3\x73\x38\xcb\xb1\xe4\x37\x8c\xf8\x86\xed\xfa\xec\xdf\x5f\xdc\x71\xe3\xcb\x0f\xec\x0b\x41\xfe\x89\xbb\xd7\x97\x6f\xd8\x97\x63\x81\xe1\xee\x9e\xd8\xaa\x1f\x7f\xb4\xb7\x73\xe7\x47\x7f\x87\x1f\x5b\xb8\x85\x86\xbb\x36\x61\xf5\xee\xcb\x7f\xae\xf5\xbd\x9f\x33\xe0\xe3\x0c\x38\x12\x3f\xe7\x0c\xbf\xce\x59\xab\x91\x0a\xcb\x59\x38\x9d\x0e\xcf\xd9\xee\x9f\xcb\x9a\x9b\x2e\x75\xa8\x08\x39\x74\xee\x38\xda\x87\xd6\x5f\x7e\xec\x40\x7f\xb1\x0c\x5d\x19\x5c\x13\x9a\x64\x2c\x87\x23\x7b\x70\x4d\x5b\xdc\x67\x83\x04\x7b\x72\xe7\x96\x74\xf7\xf0\x83\xb4\xee\xec\xde\x2d\x20\x27\xb8\x22\xe8\x27\x3f\xe6\x8f\x54\x6a\xc2\xd7\xf5\x54\x50\xd7\x87\x0c\x68\x1e\xe8\x7a\xf2\x76\xd7\xe3\x77\xba\xde\xeb\xb7\x57\xba\xde\xd3\x9e\x57\xbb\x3e\x64\x3f\xdd\xea\xfa\xf7\xb6\xfa\x83\xa7\x26\x08\x9e\xe1\x83\x3d\x35\xfd\x27\x47\xfd\xc2\x9e\xda\xe3\x2c\xc8\x53\x83\x5f\xdb\x53\x7b\x9c\xbd\xa3\xa7\x26\x02\xcc\x15\xdc\xf3\xd4\xe0\xbd\x3c\xf5\xbe\xa1\x1b\x7d\x45\xef\x83\x9f\x77\x98\x5e\x0f\xbc\xa3\xc3\x0c\xea\x81\x33\x11\x5f\xf6\x00\xb8\xe2\x30\x2f\xc5\x17\x89\x33\xfc\x69\xbe\xcb\x6f\x07\xf4\xfb\xd9\x01\x78\xbe\x17\xce\xbc\xe6\xf3\xbd\xf0\x6c\x34\xf2\xf3\x83\x07\xaf\x17\x98\xf7\xb3\x85\xa0\x5e\x38\x13\xf3\xf3\xde\xe8\x85\xe0\xe1\x61\x6f\xf4\x01\x3d\x40\xb0\x04\xcb\x73\x2c\x09\x38\x22\x78\x0c\xc7\x7f\xcd\x49\x09\xe5\x63\x2d\x70\xba\xf5\x6b\xb2\x76\xec\x35\x96\x64\xd9\xe7\x7b\xed\x13\x87\x5e\xb4\x8f\xb5\x67\x7b\xed\x13\xb3\x06\xf6\xac\x71\x04\x75\x2d\xb3\xf1\x8b\x2a\x24\xe5\x63\xed\xbf\xc8\xd6\xc8\x03\x6b\x34\x7d\x6d\x96\xf3\x8b\x2a\x24\xed\x63\xed\xbf\xc8\xd6\x76\x1e\x12\x70\x1c\xc5\xe3\x34\xcf\xd1\x6e\xaf\xe1\x0e\x6f\xba\x36\xd5\x1c\xd6\x78\x00\x48\x92\x05\x38\xc9\x70\xf4\x9f\x14\xcb\xd2\x1c\xce\xfe\x52\x9a\x09\xf6\x3c\x12\x38\xbe\x1f\xbb\xff\xdb\x78\x24\x0f\x3c\x52\xc4\x7e\xa4\x0b\xc5\xe3\xaf\xa0\xab\x04\x07\xf6\xe3\xc2\x7f\x1b\x8f\xd4\x37\x8c\xa3\x39\x9e\x27\x39\x86\x73\x9d\xa8\xcb\xa1\x65\x43\xd3\xd6\x66\xc3\x81\x04\x75\x38\x93\x91\xdf\xe7\x3c\x8c\x80\x39\x47\xf0\xa8\x2b\xf3\x05\xe2\x61\xf9\xd9\xf5\x9a\xcb\x90\x7b\x30\x8a\x37\xf9\x76\x17\x41\x06\x13\xb4\xfd\x18\x6b\xa1\x3d\xaa\x28\xc0\x7a\x4e\xef\x9d\xa4\xec\x21\x78\x6f\x29\xfb\xf8\x79\x50\xca\x1f\x60\xaf\x2e\x55\x0c\xe7\xb9\xdd\xf7\x92\xb2\x8b\xe0\xbd\xa5\xec\xe3\xe7\x31\x29\x87\xcd\x8d\x3c\xe3\xf9\x1d\xaa\x68\x9c\xf7\x1c\xff\x3b\x49\xd9\x43\xf0\xde\x52\xf6\xf1\xf3\x98\x94\x43\x16\x69\x3c\x15\x43\xb8\x54\xd1\xb8\x37\xf4\xbc\x97\x94\x5d\x04\xef\x2d\x65\x1f\x3f\x0f\x7a\x8c\x90\x19\xa6\xff\x3c\x50\x93\x14\x74\x3a\x48\xd8\xa5\xf2\xfd\x09\x21\xa7\x85\x29\x0a\x47\x31\x24\xc9\xaa\x0a\x8f\x00\xcb\x50\x24\x4f\x51\x8c\x02\x20\x4d\x01\x55\xe2\x59\x49\x66\x20\x24\x18\x1a\xc7\x11\x54\x68\x59\x61\x10\x4f\x00\x8e\x65\x59\x59\x41\x0a\x22\x70\x56\xfe\xba\x83\x81\x10\xcf\xb0\x12\xc5\x49\x32\x4e\xab\x48\x61\x01\xae\x50\x40\xc1\x71\x96\x20\x39\x85\xe3\x65\x05\x47\x38\x43\xb2\x8a\xa2\x52\x14\x8f\xb3\x08\xec\xe2\x31\x92\x51\x70\x85\x95\x19\x8e\xf9\xea\xf4\x2b\xf0\x55\x70\xb1\x4e\x05\x17\xe3\x2f\xec\x62\xbd\xc2\x2e\x86\xe7\x19\xfa\xfe\x5d\x6f\x71\x91\x64\x59\xe6\x1b\x46\xec\xfe\x8f\x5f\x5c\xdf\x30\x82\x77\xfe\x7a\x7f\x0e\xbf\x1e\x3e\xec\x68\x13\x04\x41\x48\x95\xd9\x79\x9f\x6d\x14\xd7\xe9\xb8\x2d\x0f\x89\x24\x2e\xc8\xcd\x71\x6f\x56\x4e\x0d\x7b\x24\xa9\xd6\xf3\x89\x58\x3e\x9f\x4e\x49\x35\x82\x83\x99\x14\x9d\x17\xd6\x80\x43\xa9\xe4\x34\x05\x88\xe6\x72\x53\x35\x67\x1d\x26\xd3\xe7\x8d\xba\x54\xce\x4c\xaa\xa3\x5c\x5c\x81\x53\x7e\x48\x6c\x4b\x3b\xd0\x42\xb7\x6f\xd3\x85\xa1\x70\xb8\x90\xd0\x2e\xbe\x6d\x56\xeb\x37\x61\xb2\x6e\x25\x48\x66\xb9\x5d\x76\x19\xa2\x92\x78\xdb\xf4\xf3\x96\x56\xd3\xe3\xbd\xba\x91\xcd\xb0\x7a\xaf\x00\x46\xa6\xb4\x7e\xab\xb2\x3c\xdf\x5b\xa9\x85\xa9\x12\xaf\x4c\x09\x4a\x95\x01\x5f\x45\x85\x59\xab\x27\x8c\xf8\x22\xdf\x4a\x34\x28\x3b\x5b\xa8\xed\x20\xf7\xca\x54\x11\xbe\xcd\x41\xed\x88\x4c\x50\x2c\xe1\xfc\x4a\xed\xfe\xf4\x85\x2e\x41\xd5\x04\x21\x85\xe7\x85\x5f\xed\x72\xb5\x8a\xf8\xe6\xec\x18\xba\x62\xfe\x7e\x8b\xa0\xa3\xd1\xe6\xaf\x32\x0e\x09\x12\x70\x32\x64\x54\x45\x92\x54\x1a\x92\x94\xa4\x90\x04\x04\x2c\xab\xd2\x2c\xcf\x12\x94\x2a\x11\x9c\xc2\xd3\x12\x89\x53\x08\xe2\xb2\xc2\x49\x8a\xc4\x2b\x32\x8b\x38\x4e\x55\x28\xb7\x98\x86\x0c\x56\xee\x6b\x3a\xcf\x92\x1c\x4b\xdc\xbb\x09\x08\x8a\xa5\x38\x92\xa1\x38\xfc\x96\x3d\x30\x0f\xda\x43\x29\x39\x2a\x19\xdb\x69\x5c\x5a\x11\x06\xbe\x6a\x66\x34\x25\xde\xa6\xe5\x56\x6c\x33\xee\x77\xde\x12\x15\xa3\x04\x8a\x80\x26\xb3\x4c\x2e\xde\x6a\x4a\xf5\x49\x7c\xd3\xad\x8c\x60\x03\x2c\x32\x1b\x92\x4d\x67\x47\xe5\xb7\xf5\x14\x8d\x57\xca\x54\x59\xae\x8d\x86\x42\xad\x69\x4e\x13\x58\xce\xe9\x3f\xc7\x1e\x4e\x54\x54\xd7\xca\x19\x39\x91\x4d\xf4\xd9\x74\x2d\x35\x17\xf0\x59\x8c\x64\xf5\x8d\xa2\xa8\x6c\xce\xa4\x27\x7d\xa2\xc6\x2e\x66\x72\x7d\xb6\x79\xeb\x4c\x8a\x05\xa9\xd0\x4c\xc9\x00\x6a\xeb\x4e\x72\x36\x4c\x0a\x09\xa3\x98\x61\x87\xf2\xcc\x62\x6c\x19\xb1\x22\xa7\x4c\xc4\x95\xf4\xa6\xe5\xfb\x0e\xe4\x56\x80\x3d\xf4\xfd\xea\xf4\xdf\x60\x0f\xa4\x33\x3c\x3f\x61\x0f\x54\x34\xba\xfc\x95\x67\x01\x2d\xc9\x8a\x22\xa9\x0a\x02\x10\xb0\x3c\xab\xb0\x34\x29\xb3\x24\x4f\x23\x85\xe1\x38\x1c\x47\x94\xa2\x02\x16\xf1\x80\x94\x20\x4f\x01\x1e\xd0\x34\x43\x22\x92\xa5\x09\x16\x72\xbb\x51\x86\x72\xfe\x05\xe8\x36\x75\x55\xe5\x69\x1c\xe7\xae\x1b\xc4\xfe\xae\x9b\xc2\x62\x78\x82\xa3\x6e\x59\x04\xf9\xa0\x45\xe4\x65\x7d\x55\x06\x71\x52\x33\x66\x3a\xaf\x34\x37\x6f\x3a\x22\x8c\xa1\x40\x97\xb9\x19\xd3\xa8\x30\x7a\x72\xa2\xb7\xc7\x14\xd9\xea\x2e\x4a\x89\x4a\x01\xa1\x18\x3f\x19\x16\x26\x69\x00\x7a\x93\x2e\x5b\xef\xe4\xd3\xcd\x54\xcd\xa0\xb2\xb8\x60\x12\xfd\xd6\x7a\x64\x25\x60\x7e\xa8\xba\xc3\x82\x63\x11\x27\x3d\x5a\x1a\x67\x2a\xad\xe9\x7a\xd8\x63\x17\x75\x09\x6f\xdb\x64\x6b\x59\xa7\xfb\x8b\x29\xa2\x27\x60\x31\xce\x72\xec\x22\x3b\x12\xea\x68\x8d\x2f\xd6\x70\xa8\xf7\xd5\x9e\x3d\x4d\x4d\x93\x31\xc6\x10\x52\xfa\x96\xa3\x38\x32\x06\xda\x53\x5b\x15\x49\x88\x37\x1a\x7c\x36\x9b\xa7\x34\xad\xed\xa0\xaa\x05\x58\x44\xab\x15\xa4\x55\xbf\xb8\x45\x50\xcf\x5a\x04\x19\x8d\x36\x7f\xc5\x29\x44\x22\x09\x41\x95\x57\x08\x89\x43\xb8\x4a\x53\x34\xa7\xd0\x24\x4e\x30\xbc\x8a\x70\x85\xe3\x55\x42\x52\x15\x85\x95\x14\x4a\x91\x39\x85\x92\x70\x9a\xa3\x24\x40\x32\x0a\xc1\x22\x82\xbe\x65\x11\xe4\x55\x9d\x67\x28\x8e\x67\xef\xde\xf5\x32\x9f\x04\xc7\x71\x37\x2c\xe2\xd1\x90\x49\x68\x8e\x99\x98\x49\xe3\xd2\x78\xc8\xb7\x3a\xe5\xd6\x3a\x3d\x8f\x0f\x41\x9e\x93\xe2\x0a\xe2\x9b\xf2\xb8\x65\xa5\x47\xc5\x1c\xc0\xbb\x54\x7b\xbc\x7c\xd3\x8b\xba\x50\x55\x63\x84\xb5\x6e\x01\x75\x43\x40\x7b\xd9\x54\x09\x75\x5b\x41\xe9\x4d\x8a\x1f\x6f\x8c\xa6\x3d\xca\x76\x13\x73\xc3\xe9\xc0\x9d\x41\xe4\xd7\xbb\x4f\xb9\xc3\x1f\xc1\xd1\xd9\xe3\x8f\xc2\x5a\xa8\xd6\x26\x6e\x87\x6f\xd9\x5a\x17\x55\x26\xb5\xda\xb0\x95\x19\x66\x6b\x13\x19\xc6\x16\x4a\x79\x99\x4d\xf5\x97\x1d\x31\x39\xb1\xc5\x7e\xaf\x92\x49\xae\x97\x69\x2d\xbe\x8a\x1b\xcb\x55\xc1\x5c\x51\x1c\x5e\x6f\x16\x67\xa5\x54\x3a\x5b\xef\x94\x96\xeb\x58\x01\xc4\xd3\x5a\xb3\x94\x48\x0d\xdf\x66\xb1\xf6\x38\x1b\x73\x0c\xa6\x14\x60\x30\x15\x31\x48\xe9\xfe\xff\x66\x30\x20\x1a\x65\xff\xca\x90\x0a\xcf\xa9\x34\xc9\x20\xc4\x70\x0a\x21\x01\x56\xa2\x25\x8e\x57\x01\x09\x55\x9a\x24\x08\x89\xa5\x19\x1e\x02\x4a\x85\x2a\x41\xe1\x24\x54\x70\x89\x06\x12\x43\x92\x12\xce\x4a\x88\xe7\xbf\x3a\x45\x1a\x74\xa0\xee\x83\xab\x26\xc1\x32\x2c\x77\xf3\xe6\x6e\x04\x71\x33\x79\x14\xcd\x83\x1b\xe6\x42\x5f\x31\x17\x77\xc6\xec\x88\x37\x53\xed\x8f\x89\xf2\x92\x36\x70\x29\xcf\x76\xa8\xd9\xb6\xb2\x6a\x6d\x32\x64\x7b\x6e\x4c\x62\xab\xb4\x50\xb1\x93\x44\x01\x94\xd8\x04\xcb\xf4\x47\x33\x55\x12\x53\xf3\x6c\xb5\xa7\x50\xf4\xac\x26\x37\xd9\xee\x44\xcd\x95\xd6\x8d\x2e\x3f\x4c\xa7\xf8\x98\xda\x81\x36\x4b\x30\xb5\x5c\x47\x76\x40\x3b\x96\x72\x32\xb9\xa8\xf1\x53\xae\xd8\xc8\x70\x12\xdd\xc1\xa5\xe5\x46\xb4\x17\x96\xdd\xae\xbd\xb1\xb9\x76\x3c\x6b\xa6\xa6\x19\xd1\x56\x04\x6a\x9a\x14\x53\xdd\xf5\x1c\x0c\x27\x06\x80\xbd\xca\x78\x9b\xe1\x3b\x65\x9d\x49\x0a\x59\xa3\x44\x13\x85\x4d\x3e\x5d\xe0\x87\xb8\x51\x59\x16\xc9\x89\xc5\x69\x5d\x07\x7e\x2e\xc0\x12\xb2\x78\x90\x36\xed\x2d\x41\x10\x12\x93\x77\x55\xdb\x77\xb8\x5c\x6d\x7a\xce\x12\x88\x68\xb4\xd8\x39\x2b\x01\xf3\xf4\x86\xe0\x59\xfc\x3b\x4e\x7c\xc7\x09\x0c\xc7\x7f\x38\xff\xae\xaa\x2b\x8f\x13\xe4\xf5\x60\x69\x7f\x97\x02\x3c\xc5\x33\x2c\xe0\x6f\xcd\x97\xef\xaa\xf2\xa7\xbc\x12\xdd\x82\x46\x6d\xe3\xdb\x46\x21\xc1\xa6\x66\x29\x3e\x0b\xf0\xcd\x38\x11\xb3\xf0\xa1\x6d\xad\x73\xeb\x37\xa2\xab\x34\x3a\x3d\x98\xc8\xc3\xb4\xa3\xca\x62\x80\x2a\x07\x5f\xbf\xb8\x2a\xe3\xa7\xaa\x7c\x27\x21\xf5\xc0\x99\x99\x61\xf3\x53\x57\xce\xa9\xb8\x56\x2a\x0e\xae\xd8\xdd\x1d\x30\x17\x9b\x0d\xc2\x81\xf1\x57\x2f\x87\xa4\x86\xf2\x17\xd4\x86\x03\x43\x1f\xc0\x30\x38\x43\x87\xa6\x86\xf1\x81\x09\x49\x0d\xbb\xcf\x33\x50\x38\xed\x24\xdf\xc3\x81\xe1\x0e\x60\x28\xc6\xc9\x2e\x87\x03\xc3\x1f\xc0\x70\xac\x53\x81\x11\x0e\x0c\x81\xfb\x0a\xc2\xa8\x90\x70\x2e\x6a\xe6\x42\xc2\x01\xbe\x52\x27\x3a\x24\x1c\xd2\x5f\x0d\x16\x12\x8e\xbf\x88\x27\xac\x7c\x68\x7f\x31\x50\x48\x38\x8c\xaf\x3c\x25\xac\x7c\x58\x1f\x9c\x90\x46\x41\x70\xfe\x9a\x92\x90\x70\x78\x5f\xdd\x46\x58\x3f\x88\xfb\x6a\x23\x42\xf2\x05\x2e\xea\x0f\x42\xc2\x01\xe7\x6b\xe2\x4c\x48\x30\xe4\x39\x98\x90\x5a\x08\xa8\xf3\xb5\xe3\xb0\xd4\xf8\x96\xa0\x43\xea\x20\xf0\x2d\xe9\x86\xa5\x86\xf5\x2d\x3d\x87\x04\xc3\xf9\xd6\x22\x43\x82\xe1\xcf\xc1\x84\x64\x8a\xc4\xcf\xd7\xec\xc2\x82\x21\x7c\x2b\x8d\xd1\x1c\xa1\x1d\xc9\x46\xdb\xdb\x87\x6f\x7d\xc3\x76\xb4\x3f\xb6\xf3\xf6\xca\x49\xd2\x2f\x47\x6c\xa7\x1a\x7f\x1a\xa2\x1d\xbe\xb8\x4b\x31\x84\xbb\x78\x6b\x1b\x2f\xad\x4e\x7f\xc3\xbe\xa8\xa6\x31\x7d\xb5\xba\x7f\x0e\xed\xd1\x97\x1f\xd8\x3f\xff\xf5\x0d\xfb\xb4\x9b\x83\x9d\xca\x7e\xf7\x38\xec\x2b\xbb\x12\x15\x64\xd9\xda\xcc\xd5\x8e\xa9\x36\x73\x1a\x9c\x6f\xc2\x71\x1f\x0f\xde\x08\x75\x72\xef\xf6\xa6\xc3\x93\x86\x91\xd4\xef\xbd\xc3\x39\x15\x57\x95\x71\x1f\xa1\x1f\xbe\x70\x9f\x57\x19\xff\x7d\xa5\x80\xc1\xa7\xa4\x9f\x6a\x5f\x64\xa0\x92\x82\x3b\x4a\x0a\xfe\xa7\xa4\xe7\x4a\xea\x4d\xdc\x0e\x5f\xa8\xcf\xab\xa4\xe7\xca\xf8\xa9\x2a\xbc\x03\x75\x91\xbc\xe7\x30\x71\xfc\x7f\xda\x78\x08\xe7\x4f\x26\xee\xc7\x2f\x8c\xa3\x8d\xae\x32\x3a\xe7\xba\xb9\x3d\xcf\xe3\xce\xff\xbe\x9c\x29\x04\x38\xb3\x6d\xf7\xa4\xfd\x1d\xf3\xff\xfe\xe2\xec\x2a\x25\xbe\x61\x5f\x76\x62\x27\xf0\xff\x9c\xef\xb1\xc3\xbf\x61\x5f\xdc\x53\x6b\xaf\x6c\x0b\x3d\xbd\x77\x53\xf6\xee\xd1\xb8\xd7\x77\x3d\x9e\x02\x8a\xac\x6f\x22\x3e\xdb\xe9\x7a\xdf\xb8\xd9\x90\xe3\x17\x10\xdc\x37\x1c\xe9\x5c\xbe\xbe\xa1\x6e\xf5\x0d\xe3\x75\x0d\x7d\xaf\x67\x02\x36\x20\x9e\xc9\xdc\xbf\xc7\x31\xb0\x43\xee\x77\x5d\x24\x25\xe6\x1f\xda\x37\x6e\x8a\xe9\xf8\x85\x0b\xee\x1b\x96\xe1\x01\x89\x73\xbe\xbe\x61\x6e\xda\x0d\xf9\xc1\x76\x13\xba\x0f\xa3\x36\xaf\x5f\x59\x2d\xce\x33\x7d\x87\x2f\xb8\x3b\xb8\x9f\x8e\xed\x2f\xec\x16\x3f\x8e\xed\xe1\x25\xfc\x89\x77\xda\xbd\xc3\xb9\x5a\xd7\x7b\xca\xcb\x81\x1e\xbe\x30\xef\xd4\x53\xe1\xe3\x9b\x4f\xbc\xbb\xee\x1d\xce\x5f\xbb\xda\x53\xfb\x5d\xb0\x87\x2f\xe0\xb2\xa7\x5e\x88\x75\xff\x67\x53\x91\xd9\xd4\x7e\xe7\xeb\xe1\x0b\x77\xd9\x53\x91\xcc\x6c\xfe\x67\x53\xe1\x6d\xea\x6c\x65\xe2\xf0\xc5\x9d\x84\x32\x8f\xed\x26\xb4\xcd\xa5\x65\x23\xf4\xaa\xd5\x38\x60\x8c\x97\x8f\x50\xf9\x1c\x36\xf6\x01\x11\xc6\xd9\x1e\xde\xc3\x17\xfc\x27\xf7\xdc\x0b\xae\xf7\x73\xf4\xdc\xfb\x4f\xb5\xcf\x77\x26\x1f\xbe\x30\xa1\x7b\x2e\xbc\xff\x3b\xed\xb9\x17\x5c\xf1\xe7\xf0\x96\x11\x1f\x4d\x7c\xbd\xe7\xbc\xf5\xce\xc3\x17\xf0\x93\x7b\x2e\x32\x6f\xf9\xb3\x7a\xee\xfd\xbd\xe5\xe9\xd2\xf0\xe1\x33\x77\xb2\x73\x51\x5d\xce\x94\xfd\xf9\x5d\xe1\xce\x6c\x76\xe4\xe2\x9e\x9c\xfc\xf2\xb4\xf7\xee\x36\xca\x17\xcf\x96\x7e\x46\x6a\xde\x12\xf6\xe1\x33\xf5\xbe\x52\x7b\x21\x01\xfc\xa9\xa4\xe6\x2e\xb5\x1f\x3e\xe3\xef\x2a\xb5\x17\x3c\xc0\xa7\x92\x9a\x57\x12\x70\xf8\xcc\xbc\xab\xd4\x5e\x18\xf1\x3e\x97\xd4\xdc\xd2\x85\xc3\x67\xf0\xbe\x16\x1a\x3e\xc2\x7b\x77\xa9\xdd\x29\x83\x08\x78\xfb\x73\xd8\x12\x08\xef\x0d\xd0\x81\xe5\x0f\xf8\xd5\x2d\xcd\xe4\x7e\x06\x4c\x90\x87\x0a\x6a\x77\x0f\xf4\x49\x49\xb5\x6d\x2e\x91\xbb\x01\x9d\x70\x77\x83\x52\x0c\x41\x30\x1c\x83\x53\x14\xc1\xb3\x04\x4f\xb3\x2c\x7b\x45\x43\x02\xa9\xf2\xd6\xc1\xaf\x53\x45\x1c\x88\x00\xc7\xba\x6e\x97\x58\x12\xec\x7f\x50\xa1\x6e\xed\xc8\x22\x5c\xd2\x7c\x34\xf1\xdc\xad\x12\xb0\x5b\x64\x11\x57\xc9\x3a\x24\x76\x08\xda\x5b\xf5\xde\x1f\x04\x70\x42\x96\x2b\x2c\xda\x09\xbf\x40\x20\x59\x0f\xa9\xc5\xfd\xf7\x18\xbf\xa0\x28\xc1\xaf\xa7\x0b\xac\x6f\x06\xd7\xeb\xfa\xee\x02\x02\x3e\x40\xd7\xea\xb3\xee\x02\x22\x7d\x45\x13\xa1\x01\x51\x3e\x40\xa1\x59\xf3\xaf\x90\x87\x06\xc4\xf8\x00\x85\x66\xed\x62\x95\x34\x2c\x20\xce\xbf\xa4\x17\x16\xd0\xc5\xfa\x53\x58\x40\xe7\x15\xcf\xf8\xf5\x5a\xca\xfb\x90\x2e\x16\x3f\x42\x43\x02\xbe\xe4\xfc\xb5\x8a\xca\xfb\x90\x48\x7f\x9a\x3f\x34\x24\xca\x97\x86\x0e\xad\x95\xe7\xb5\xcf\xe0\x15\x89\x33\xbe\x84\x6b\x78\x39\xb1\x3e\x48\xa1\x4d\xe5\xbc\x02\x9a\x7a\x45\xe2\xbc\x2f\xd5\x15\xde\x57\xe2\xbe\xd4\x4b\x68\xee\xce\xeb\xa0\x5f\x31\xe0\xb3\x4a\x68\xee\x7a\x45\xeb\x7d\x40\xe4\x39\xa0\xd0\xda\x74\x56\x0d\x4d\xbd\x42\x91\x6f\x02\x19\x5a\x2b\xcf\x2a\xa2\xf1\x57\x28\x62\x7d\x93\xb3\xd0\x80\xb8\xf3\xf9\x4a\x78\x8a\xf8\x73\x40\xe1\x87\x6f\xfc\x7c\x2e\x10\xda\x48\xce\x6a\xa3\x81\xcb\xda\x73\x6f\xf9\x7d\xcf\xea\xe8\x7b\x6f\xec\x7d\xa6\x3e\xfa\xf4\xad\x82\x51\x47\x7d\x47\x79\x7e\x65\x28\x04\x19\x45\xe6\x71\x1e\x97\x39\x85\x00\x00\x10\xac\x4c\x41\x19\x97\x49\xc8\x03\x96\x52\x19\x1a\xa7\x48\x99\x07\x10\x57\x24\x46\x41\x1c\x45\xb3\x00\x71\x0a\xc5\xcb\x0a\x4e\x03\xc6\x7d\x13\x17\xf1\x4a\x9a\xfa\x64\xdb\x32\xb5\xdf\xcd\x79\xfd\x30\x25\x9e\xe6\x6f\x1c\xb5\xe4\xde\x3d\x8b\x39\xdd\x6d\xa0\x05\x66\x8c\x34\x72\x3c\x35\x72\x5c\x33\xa3\xa7\xe2\x68\x28\x93\x6c\xb5\x6b\x67\x0b\x85\xb7\x4e\x9b\x5b\xb7\xb5\x7e\x02\x26\x97\x74\x91\x76\xce\x40\x72\x0f\x5d\x71\xb6\xed\x27\x7d\xbb\x14\x13\xc7\x8f\xce\x66\xe2\x44\xbb\x5d\xf6\xf6\xd7\x27\x89\x65\x42\xc9\x1a\xcd\xe5\xb0\xb4\xaa\xd9\x29\x36\x31\xca\x15\xc9\x32\xe2\x95\x76\x55\xcd\xe4\x62\x79\x8d\xce\xaf\x5a\x95\x58\x5f\xb0\x59\xe7\x58\x00\x21\xcd\x23\xef\xd1\x94\x3d\x5c\xad\x53\xcb\x4a\x47\xa8\xf1\x6c\x9d\xa8\x37\xed\x96\xb2\x2e\xa7\xb2\xf3\x54\x3c\xd9\x42\xf3\x37\xa5\x56\xed\xea\xc6\x4c\xd6\x8a\x6d\xa7\x7d\xab\xdd\x6e\x79\xbb\xa8\x8d\xea\xba\x17\x4f\x2b\x71\x39\xb7\x2d\xb7\x16\x71\xb4\xc8\x56\xde\xe6\x0b\xb6\xa7\x18\x6b\x59\x6d\xbc\x4d\xb2\x6a\x3f\xdd\xae\x27\x0b\x40\xf4\x76\x84\xe6\xb5\xce\xd0\xbf\xf7\x12\xb2\x93\xd5\x64\xed\xb0\xb7\x4d\x0e\xdf\x66\x28\xbe\x06\x85\xca\x62\x89\x38\x55\x46\x46\x7b\xcd\x75\x61\x7a\x2b\xb6\xb6\x02\x51\x93\x87\xd3\x62\xac\x21\xd9\xcd\x3a\xaf\x6d\x7b\xd2\x68\x28\x19\x90\x67\x53\x68\x9e\x4e\x71\x6f\xcd\xb6\x8c\x2f\x5a\x6b\xa8\x98\x15\x5d\xda\x70\xbc\xd2\x9c\x66\x73\x99\x62\x42\xf8\xfb\xef\xaf\xa7\x5b\x72\x33\x27\x5b\x59\x8f\x1f\xcb\xc7\x1f\x5d\xb9\x48\xd3\xe1\x94\x68\x03\x65\x48\xb7\x89\xe9\x82\x40\x7a\x49\xce\x10\xf6\x66\xdc\xe8\x15\xfa\xfc\x5a\x1c\x1a\x8d\x04\x44\x1d\xae\xa5\xa5\x8d\xe3\xa3\x8e\x6c\xd3\xe9\x76\xdb\x3d\x76\x41\x28\xa4\xb8\x4c\x75\xd3\x55\xc9\x64\x69\xdc\x2e\xac\xc8\xc5\xe8\xcd\x62\xe0\x12\x64\x61\x29\x9b\xc5\x2d\x3a\x41\x82\x7a\xbb\x55\xd3\xec\x91\x77\x10\x02\x8a\xcf\xdd\x47\x7f\xb9\xbe\x4d\xb0\xb1\x89\xf7\xe8\x51\xde\xb5\x83\x2e\x3b\x47\x07\x25\x4e\x3a\xdf\x5c\x94\x99\x22\xaa\xc0\xe1\x78\x53\x82\xad\x2a\xcf\x24\xde\x54\x8b\x47\xb8\x6c\x98\xe5\x7e\xf7\x2d\xd1\xc9\x4f\xd2\x46\x61\xaf\x1b\x82\x50\xa1\xcd\x9c\x7c\xb4\x8d\x84\xaf\xff\xce\xfa\x2e\xe0\x4a\x44\x8c\x3f\x19\x06\x7f\xd2\x3d\x27\xe3\xd8\xd0\x79\x3e\xb9\x34\x48\xc3\xa6\xe8\x45\xb2\x2a\x6e\xe6\xb5\x38\x69\x64\xcb\xb1\x37\x82\xad\x6f\x35\x8b\xd0\xd5\x52\xba\x37\xad\x75\x86\xe6\xb2\x11\x6b\xba\xdd\xdb\x6e\xe1\x1e\xe2\x62\x87\x4a\xe3\x68\x54\x61\x84\x2d\x9f\xc4\xab\x56\x46\x1c\xae\x64\x82\x25\x88\x16\xcf\xf5\xc6\xd4\xb4\x38\x99\xf2\x35\x96\x9e\x24\xc9\x95\xab\x0f\x4b\xb8\x1d\x26\xe2\x87\x6b\x1d\x44\xb3\xf3\x3d\xf3\x73\xe8\xeb\x4c\x98\xda\x3d\xfa\x1c\xf9\xa5\x9d\x8f\x8e\x3c\x13\x4b\x98\x94\xda\xdd\x3e\x48\xe9\xdd\x0e\x34\xdb\x4c\x6b\xb3\x96\x3a\x64\xa6\x9c\x1f\xce\x67\xa4\xd0\x48\x8e\x72\xe9\x39\x2d\x6d\x1a\xb9\x13\xe7\xe3\xe8\xe3\x0b\xfa\xfe\x8a\x7d\x56\x55\xdc\xb5\x19\x57\x1f\x02\x0f\x86\x38\xd1\x57\xd7\x21\xfc\x14\x7f\xd4\x6e\x37\xeb\x1e\x28\x5b\x1a\x76\xeb\x8c\xc8\x1a\xa9\x22\x5e\xac\xc5\xd6\xbd\x46\x92\x7f\xeb\xae\xba\xed\x26\xb9\xd1\xaa\x5a\x6f\xd9\x90\x88\xd4\x6a\x5a\x2b\x22\xf7\xe8\xb2\xa3\x3f\x70\xe8\x29\x07\x31\xe9\xd2\xd7\x3a\xf0\x2b\x64\x68\x23\x6f\xb7\x95\x59\xaf\xd2\x56\xfa\x0b\xbb\x3b\x6f\x66\x13\xb6\x24\xf7\xf0\x69\x72\xaa\xca\x89\x5c\x41\x1c\x76\x66\xfa\x2a\x9d\x1b\xc1\x57\xe9\xab\xd0\x66\x41\xc8\x1e\x55\xed\xa8\xef\x6e\xb7\x1e\x9d\x68\xe0\x75\xd2\x3f\xa1\xc6\x8b\x17\xf4\x27\x91\x98\x14\x2c\x41\x3d\x50\xce\x09\x3e\x7f\x58\xa7\x60\xe9\x06\xe9\x27\xf6\xe3\x1e\xd7\xf0\xa4\xfd\xbc\xa0\x4f\xd7\xfd\x4f\xc2\x4f\x65\x56\x26\xf4\x0b\xd2\xdd\xa3\x1b\xc3\xeb\xcb\x0b\xe3\x5b\x89\xb7\xf4\xe1\x0d\x7d\x39\xb9\x3a\x29\xd9\x1f\xba\x79\xe3\x9f\x70\x6c\x5f\x01\xc9\xb8\x50\xa1\xe8\x5e\x22\x45\xda\xd9\x76\xba\x42\xd4\x49\x01\x2f\xa1\x49\x95\xcb\xd7\x99\x59\x99\x10\x78\xd4\xd1\x94\x6d\xce\x76\xed\xa3\xde\x6e\x37\x3c\x7d\x19\xc6\x13\x63\xae\x4d\xf2\xeb\x71\x8e\x68\x98\x3c\x63\xc8\x6c\x65\x6a\xda\x23\x30\x4e\x6c\xf8\x62\xa5\xa6\xf0\x93\x76\x5b\xcc\x99\xbd\x86\xab\x0f\xec\xd4\x32\x82\xf5\xe5\x78\x5d\xe8\xf3\xc7\xd1\x97\x48\x75\xa6\xcc\x2d\xfa\x8e\xf1\xc4\x71\xfc\x4c\x1d\x6f\x3f\x3b\x3e\xed\xe4\x31\x95\x8f\xf0\x82\xf5\xef\x72\x6c\xdf\x5f\x27\xe3\x63\x68\xfc\x13\x2a\x1c\x7e\x37\x96\xfd\xf7\x7b\x05\xca\xce\x9a\xd3\xcc\x98\xa1\xc3\x19\x3b\xee\xdf\xfd\x2a\x0c\x7e\x7f\xf6\x7c\x32\xc3\xe3\x59\xc4\x90\x0c\x80\x1c\x21\xc9\x8c\x04\xa1\xc2\x40\x00\x54\x24\x21\x04\x01\x22\x19\xa4\x92\x80\xe4\x24\x99\x65\x39\x5a\x21\x81\xa2\x42\x9c\x94\x28\x46\x56\x38\x99\x43\x80\xa5\xa4\xaf\xfb\x85\x8c\x48\x66\x78\xf4\x9d\x19\x1e\x4b\x00\x9a\xb9\x7e\xd0\xd5\xee\xee\x71\x86\xe7\xe5\xf0\x5f\x9d\xe1\xa5\x7c\xdd\x1b\xe5\x0c\x2f\x9b\x5f\xbb\x4a\xf6\xa1\x33\xbc\xa6\x68\x9f\x58\xc9\xc9\x95\x39\xf0\x5f\xcb\x32\x0d\x76\x13\xaf\x15\x93\xf3\xa1\x1d\x07\xa3\x7e\xb9\x3f\xea\x8a\xf3\xf4\x1c\x6e\xe5\x16\xd3\x19\xa3\x06\xf9\x56\x2c\x11\x99\x31\x52\xcb\x19\x56\xb2\x53\x94\x54\x4c\x2e\x7b\xdb\x4e\x7e\xb3\x92\xa5\xb2\xca\x32\x5c\xbf\xfa\x96\xef\x56\x2b\x8a\xd8\x64\x7b\xc9\xf5\x88\x9e\x0b\xc3\xd6\x93\xb3\xbc\x17\xa2\xaa\x13\xd0\x09\x9e\x9a\xbb\x9f\x5e\x88\x7a\x05\x79\x96\xf2\xe4\x1d\x8a\x9e\x57\x47\x65\x41\x5f\xc7\xcf\xa6\xe5\x2a\xda\x1f\x3a\xfb\x81\xa3\x54\x5e\xae\x7a\xfa\x7a\x3a\x63\x7f\xbf\x19\x64\xa8\x19\x5c\x84\xf8\x53\x61\xf0\xa7\x8e\x23\x60\xfa\xe4\xd6\xb3\x33\x20\x76\x6a\x0d\xdd\x10\xd1\xf9\xde\xf2\xc1\xf3\xae\xda\x25\x7e\x41\x58\x99\x6b\x4f\x06\xa9\xfa\xdb\x2a\xf8\x99\xde\xf1\xfb\xb3\x11\xda\x2e\x42\x74\xa7\x05\x4e\xff\x24\x6a\x07\xfa\x02\x68\x39\x97\x59\x42\x00\xfb\x13\x8b\xd3\x55\xab\xe7\x7f\xe6\x44\x7f\x7e\xb5\x88\xdd\x3f\x23\x7f\x3a\x62\x0f\xef\x9b\x44\x8d\x5c\x06\xcf\xc8\xbd\x3e\x58\x30\xfa\xad\xb3\xe1\x8e\x33\x3c\xd7\xde\x9e\xd5\x87\x93\xfe\x75\xae\x17\x66\x7c\x47\x7d\x75\xfa\xb3\x18\x48\xef\x51\x7f\x7f\x3a\xbd\x89\x26\x9b\xb9\x4b\xef\x5a\x38\x9f\x11\x3d\x19\x8b\xbc\x42\x5f\x19\x36\xe7\xc1\x33\xe8\x40\x79\x7e\x38\x7d\xc5\x19\x29\xdd\xa5\x2f\x12\xfd\x74\x33\x92\x2f\x8c\x7d\xce\x95\x9a\x50\xee\xf0\xe0\xd2\x93\x09\xec\xef\x48\xf4\x33\x1a\x7a\x13\x65\x1c\xdd\xa5\xd7\xaf\x9f\xbf\xce\x8c\xfd\xe5\x0c\xcf\x0b\xf2\x5d\x40\x0d\xdd\x1a\x2f\x4e\xae\xad\xbc\x36\xfc\xbf\x95\x84\xf3\xf1\x42\x60\x7b\x45\x4e\x60\xc7\xfa\x50\xac\x22\x5c\x69\xb5\xd8\x76\x56\x4e\xd5\x36\x4c\x2d\xbe\xd6\xb3\x0b\x99\x6c\xa5\x08\x1a\xe6\xc9\x9c\x46\x38\xed\x5f\x88\x25\xc5\x32\x94\x8c\x67\x33\xcc\x1f\x49\xdf\x5b\x51\xca\xdd\xa2\xef\xef\xa0\x6c\xc3\x4f\x9a\xed\x0b\x11\x65\x1b\xc6\xad\x70\xf8\xbd\x6c\x83\x3a\x2f\xae\xb2\xbc\x60\x15\xa6\x49\x32\x0e\xd3\x13\x62\x9a\x96\x1b\x93\x8e\x6e\xe6\x37\xcd\x39\x2c\xd3\x45\xb5\x64\xbd\xb5\x60\x99\xe6\x70\xc9\x5e\xe2\xd5\x91\x65\x15\xe8\x71\xbe\x37\xcb\xf0\x1b\x8b\x88\xaf\xcc\xcd\x24\x5e\xd2\x65\x8e\xc6\xeb\x55\x7b\x58\x4c\x66\xa7\x93\x64\xa2\x16\x75\xb6\x01\x87\x84\x24\x51\xaa\xcc\x21\x92\x87\x32\xcf\xb3\x24\x2e\xcb\x24\x43\x02\x46\xc6\x01\xc7\x33\x80\xe0\x69\x06\x32\x2a\xaf\x00\xc4\x03\x84\x78\xc0\x2a\x2c\x03\x20\xc3\xe2\x1c\x85\xcb\xb2\x9b\x6d\x20\x23\xca\x36\x30\xf7\xb2\x0d\x80\x60\xc8\xeb\x67\x6e\xef\xef\x9e\xd5\xe7\xbd\x9a\x6d\xf0\x9b\x61\xa4\xd9\x86\x15\xe3\x39\xbb\x0f\xcc\x36\x38\x39\x7c\xff\x75\xb2\x9e\x2c\xe4\x62\x73\x46\x93\x2b\x45\xbd\xd1\xdf\xb6\x1a\xad\xbc\x10\xb3\xf0\xd4\xa8\x18\x2b\x35\x53\x05\x81\x44\x9d\x15\xa2\xf1\x4c\x35\xab\xae\x0d\x09\x22\x24\x33\xdd\xe4\x54\xc6\xd1\xa4\x61\xe3\xc4\x6c\xdd\xa0\xca\xc5\xa9\xba\x55\x9b\x99\xfe\x8c\x53\xea\xf5\x7e\x72\x58\x6b\x91\x42\xcd\xbf\x9e\xdc\x0c\x8a\x2e\xca\xbb\xdf\x78\x97\xaf\x8f\x98\xcd\x86\x9a\x4d\x46\x88\x5f\x7c\x12\xbf\x10\xbd\x97\x0d\xeb\xe5\x84\x88\xbc\xec\x68\x1d\x0e\xbf\xe7\x65\xdf\x4b\x59\xaf\x79\xd9\x7d\x0d\xfb\x93\x6e\x96\x23\x19\x85\x62\x14\x85\x84\x80\xa1\x68\x1a\x97\x81\xa4\x50\x38\xce\xca\x04\x8e\x43\x5c\xe6\x69\x89\x26\x65\xc4\x72\x0c\x83\xb3\x08\x52\x0c\x4f\xc8\x04\xc4\x39\x9a\x06\x2a\x87\x08\x08\xdd\x53\xe3\x89\x57\x76\xba\x3d\x93\xd4\x25\x39\x8e\xbb\xfe\xb6\x8f\xfd\xdd\xb3\xea\x65\xef\x45\x04\xcf\x05\xaa\x8f\x25\x75\x4f\x26\xf9\xef\x3d\x91\x3d\x04\xa2\x09\x61\xb4\xad\x31\x22\xbe\xe2\xc5\xaa\x50\x96\x87\xd5\x1e\xb4\x39\x3c\x5d\x99\xe9\x52\xbf\x91\x6c\x67\xa7\xcb\x45\xbd\x5e\x05\x68\x53\xd3\xe3\x8b\x5e\x43\x98\xa2\x61\x6c\xab\x53\x2a\xce\x8d\x93\xf9\x64\xa1\x47\xf7\xa9\x4a\xa2\xd8\x7e\x13\x09\x2b\x1f\xcb\xd2\x1d\xb2\x43\x76\xd6\xda\xa5\x1b\x0c\x4c\xb8\xfa\x65\x21\x84\x91\xad\x7b\x7d\x4c\x12\xe0\xaa\xab\x3e\x61\xef\xd9\x24\xed\xce\x55\xba\x82\x38\x49\x3c\x5e\xd4\x41\xdd\x71\xd5\xd1\xe1\x4f\x85\xc7\x1f\x75\xe2\xb1\x24\x04\x94\xb9\xdd\x73\xd3\x51\xe3\xbf\xd4\xd1\xc0\xc4\xe7\xf1\x0a\x4c\x7c\x3a\xd7\x2f\x94\xe8\x5a\x1f\x18\xfd\x44\xa5\x17\xfe\x3e\xf8\x9c\xa5\x21\xc9\xd8\xea\x52\x67\xdd\xeb\xce\x52\x75\x18\x7d\x3d\x9d\x3c\x06\x96\x85\xbe\xb3\xbd\x9c\x86\x55\xcf\xe0\xf7\xc2\x9a\xf7\x1a\x7c\xa2\x9d\x3c\x12\x2c\x64\x15\x8a\x91\x15\x92\x73\x0e\xa5\x93\x10\x52\xa1\x44\xc8\x80\xa0\x59\x40\x00\x59\xa2\x00\x8f\x23\x40\x31\x00\x92\x0c\xc5\xa9\x38\x4e\x49\x14\x2f\x93\x90\x25\x59\x06\x32\x5e\x54\x03\x22\x8a\x6a\xee\x4e\x1e\x49\x1e\xe7\xaf\xbf\xc6\x66\x7f\xf7\x6c\x2b\xd5\xab\x51\xcd\x8d\xc9\xa3\xa3\xe5\x1f\x93\xfe\x3c\x89\x6a\xb4\x6e\xf6\x2d\xc7\x98\x63\x12\xc4\xfb\xca\xb2\x92\xd7\x73\x23\x2e\xd6\xc9\x34\xca\x45\x6b\x3e\xcf\x13\xa0\x3a\x8e\xa3\x89\x3d\x03\x78\x3b\x91\x62\x27\xf8\xa6\x33\xe6\x41\x12\xbd\x29\x0d\x73\x28\xd0\x2c\xe8\xd6\xc8\x51\xab\xdb\xe9\xb5\x8c\x2a\x5b\xcd\xac\x26\xdb\x6e\xaa\xf7\x96\x5c\x7f\x74\x54\xf3\x31\xa9\xe3\x0f\x88\x6a\xdc\x8f\x6b\x3f\x66\x9f\xda\x5c\x78\x0a\x5c\x66\x83\x9f\x89\x70\x94\xaf\x09\x91\x8d\xf2\xc7\x51\x29\x6a\xf9\xb9\x82\xfa\xbc\xf2\xbb\x0c\x0f\xc3\x2c\x0f\x3b\xd7\x2f\xb4\xdc\xf2\x6a\x94\xf4\x6a\x72\xeb\xbd\xa3\xa4\x77\xa1\xef\x42\x55\x2a\xcd\xd1\x99\x92\x06\x45\x49\x3f\x29\x4a\x11\x22\xb2\x97\xd3\xe4\x4f\x88\x28\xe9\xbd\x06\xb3\x68\xa3\x24\x86\x61\x18\x9a\x81\x0c\x82\x0a\x02\x38\x07\x64\x9a\xe5\x70\x9a\x25\x00\xc3\x2a\x3c\xa2\x28\x9a\x44\x08\xd1\x2c\x47\xc8\x90\x87\x34\x07\x21\x49\xf0\x48\xc2\x55\xc4\x91\x14\x4d\xab\xca\xe1\x1c\x83\xf0\xe7\x5a\xb8\x67\x20\xdc\x0c\x8e\x58\x86\xe3\xae\xbe\x14\xff\x70\xf7\x74\x4f\xa8\x17\x1b\x15\xb9\x6c\x6d\x55\x9b\x48\x05\x90\x15\xc8\x4e\x7b\x5c\x37\x0b\xd3\x71\x17\xc7\xd5\x0c\x67\x15\x73\xec\x14\x17\xeb\xeb\x7c\x27\x2e\x74\x49\xe1\xfc\xed\xd8\x81\xc5\xb4\xa7\x57\xa8\x19\xc8\x09\xbc\xf6\x6a\x9d\xe6\x77\x1a\x26\x26\x94\x54\x17\x01\xb2\x45\x21\x3e\x09\x1a\x9b\x79\xa2\xd8\xaf\x6f\x08\x33\xff\xd6\x48\x17\xf3\xf8\x26\x95\xc2\x97\x85\xcc\x7c\xba\x90\x54\x3d\xd5\x8c\x75\xbb\xb9\x05\xd3\xd2\x52\x89\xb7\x69\x7a\x63\xc7\x32\x95\x58\x77\x91\x36\x6a\x55\xc5\xec\x36\xd9\x39\x61\x14\xfb\xb9\xec\xa2\x59\xaa\x3e\x10\xf3\x9c\x29\xed\x79\x3c\x71\xc2\xb3\x63\x05\xfe\x59\x7d\x42\x8b\x27\xf0\x22\x9e\xcf\x6c\xed\xd1\xba\x4c\xe8\x3d\x1c\x6e\xe7\x06\xc1\x97\xb3\x9b\x55\x31\xb9\xad\xd0\x76\x42\x94\x93\x2e\x8f\xe4\xd0\x36\x2b\xb3\x5e\x9c\x3a\x49\x95\x05\xbe\x74\xf9\x9e\x3d\xbf\x80\xbf\x6c\x6e\x9b\xb5\x17\xf0\x0b\x3e\xfc\x4f\x2f\xa6\x38\x05\xdb\xce\x75\x91\xa5\xb9\x87\x3f\x70\xf9\x32\x11\x5e\x16\x95\xd9\xc5\x5b\xe0\x9f\x92\xc5\xab\x7d\xb1\xd3\x85\x98\xec\x83\xf7\x94\x2c\xfe\xdd\xad\x11\xa4\x6d\x13\x95\xec\xaa\x66\x4f\x2c\x58\x6b\x80\x96\xac\xc0\xad\x8c\x8f\x1a\x5b\xa5\x54\x5b\xf3\x45\x6d\xb4\xe8\x2f\xa6\x24\x5d\xc3\xe3\x3a\xb1\x2d\x2c\xf5\xdc\x70\x2d\xd3\x23\x59\x52\x47\xe3\x95\xce\x8c\xa0\x98\x22\x21\x81\xc7\x18\x05\x26\x41\x23\xc1\x4c\xde\x52\x91\xfb\x56\x55\x42\x8c\xc2\xaa\x14\x2f\x03\x00\x69\x1c\x97\x54\x12\x01\x1c\x67\x09\x96\xe2\x65\x48\x00\x92\xc5\x09\x00\x15\x59\xa2\x29\x55\x91\x65\x9a\x42\x32\x54\x54\x16\x97\x55\xc8\x21\x8e\xf6\xde\xed\x4b\x46\x34\x03\x65\xef\xcf\x40\x01\x7b\x6b\x06\xea\xde\x3d\x3b\x83\xe3\xd5\x19\xa8\xbf\x40\x31\xc2\x19\xe8\x2b\xc5\xbb\x7c\xdc\x8b\x2a\x1d\x8f\x9d\x0a\xd4\xc4\xf4\x81\x9f\x9a\x60\x65\x14\xca\x90\xd9\x15\xd3\x5d\x97\x99\xa1\x2a\xab\xc5\x6e\x1c\xf4\x72\xeb\x71\x3d\x95\x46\x55\xa1\xf4\x56\x69\xd5\xe4\x58\x62\x9a\x6b\xa3\x76\x83\x25\xd6\x4b\x9a\xb3\x98\x62\x86\xd5\x7a\x2d\x35\x53\x13\x34\xe6\xad\x95\x63\x0c\x53\x9c\xca\x40\xc8\x8e\x85\x6d\xf2\x2d\x59\x7b\xa8\xf8\x39\xc2\x59\xeb\x67\x96\xf7\x8d\xe2\xe1\x88\x67\x6b\x97\xeb\x7b\x81\xb3\xb5\x22\xc3\x79\xc5\x2a\x1f\x32\x5b\x6b\x05\x10\xf2\x4a\x31\xaf\xfc\x1e\xf2\x4b\x7f\x72\xf9\x45\x53\x0c\xfd\xea\xf6\xc6\x9f\x33\x3b\x13\xce\xd7\x7c\x3e\xbc\xf8\xed\xfa\x76\x35\xbf\xad\x27\xc8\x72\x3f\x38\xf2\xf8\x6f\xdf\x1e\x9c\x7a\xb5\x7f\x5e\xa0\xef\x5e\xff\x9c\xd8\x6b\xd0\x75\x62\xaf\x1f\x5d\xcc\x7e\x6f\xfb\x69\x42\xed\x8e\xae\x50\x1d\x7d\xc6\x22\x6c\xc6\x40\x78\x07\x9f\x17\x22\x63\x91\x5c\xf7\x49\x6d\xf4\xb6\x8c\xcf\x55\x81\x5c\x24\xf8\x0d\x67\xab\xf1\xfe\x70\x9c\x2c\x8b\xa5\x36\xc5\x09\x6f\x25\xba\x9e\x78\xa3\x32\xbd\x51\x9b\x6e\x17\x57\xdd\x24\x3b\xdb\xbe\x19\x96\xb4\xcc\x8f\xea\x5c\x5f\x48\x16\xcd\x72\x6d\xbc\xd0\xac\x46\xff\xad\x27\xa0\x52\x2a\x57\x2c\xe5\xa3\x2f\x0a\xe4\x29\x95\xe5\x25\x16\xa8\x50\x51\x10\xdc\x45\xb7\x3c\xe0\x21\x2f\xe1\x04\x2b\x13\x32\x4d\x50\x2c\x4d\xa8\x2a\xc4\x21\xab\xa8\xbc\xaa\x48\x90\x95\x11\x47\xc8\x34\xae\xb2\x34\xe4\x00\xfe\xf5\x1b\x46\xed\x0f\x99\x09\xf9\xa6\x88\x93\xa8\x9a\xbc\x17\x55\xd3\x38\x00\xd7\x53\x17\xfb\xbb\x67\xa7\xc8\x7d\x0d\x63\x09\x27\x51\xf5\x8d\xdc\xc5\xcf\xf1\x2c\xc7\x2b\x7b\xa0\xb7\x56\x5a\x00\x71\x5e\xc0\x8b\xdd\x75\x5f\x6b\x98\xeb\xae\x35\x15\x92\x66\x62\x31\xec\xd6\xe3\xb1\x49\x35\x37\xcf\x10\xad\xd2\xb0\x5f\xa5\x62\xb0\x4d\xad\x9a\x4c\x45\x5c\xaf\x84\x61\x3d\x61\x14\x60\xbd\x3a\xce\x2b\x74\xa5\xcb\x0d\x2b\x89\x4a\x7e\x85\xd7\x0b\x55\x54\xab\x48\xfd\x29\x55\x5b\x3f\x12\x35\x07\x6f\x44\xf6\x47\x96\x27\x8d\x42\xe4\x7a\xf2\x95\x63\x7f\x5c\xb9\xee\x54\x67\x44\x87\xff\x32\x28\x7b\x00\xff\xc5\x6a\xf7\x47\x7b\x76\x97\x94\x47\xca\xce\xc5\x9f\x42\xdf\xdd\x83\x57\x02\xf3\x36\x3f\x29\x87\xe4\x93\x55\x68\xfc\xa7\x9b\xec\x9f\xc1\xbf\xdf\xe4\x6e\xf6\x1a\x13\xb3\x66\xab\x89\x69\xbe\xb0\x4a\xa0\x6d\x4f\x28\x58\x99\x45\x42\xc9\xc6\x99\x1a\xa7\x4d\xa4\x76\x6d\x9b\x98\xc4\xc7\xf4\xbc\xab\xf1\x55\x83\x6a\x26\xb9\x64\x42\xcc\x0c\xe7\x73\x31\x56\xd2\xc9\x09\xad\x6e\x05\x4a\xa4\xa6\xf1\xba\x68\xf0\xb4\x40\xdb\x53\x69\x94\x8a\x7c\x93\x3b\xa9\xe2\x9c\xa4\x42\x02\xc9\x92\xca\x93\x12\x81\x48\x9e\x86\x94\xc4\x13\x10\x70\x00\xd1\x14\x29\xab\x12\xa1\x28\xac\x4c\xa8\x14\x83\x58\x1e\xe0\xbb\x76\x80\xe4\x10\x07\x28\x5e\x92\xdd\x11\x06\xbc\xf2\x86\x9b\xe7\x46\x18\x92\xbd\x35\xc2\xb8\x77\xcf\xce\x04\xf5\xca\xce\x9f\xdb\x68\xf1\x9e\x23\xcc\xab\x73\x8b\x13\xfc\x07\x7a\x6b\xa5\x4e\x7c\xa1\xc5\x2a\x49\xb3\xc8\xcd\x67\xf2\xdb\xd2\xcc\x33\x89\xb1\xac\xd7\xa5\x6e\xb2\xb7\x16\xf0\x44\xbe\x0c\xd7\x05\xa9\x23\xbf\xa9\xc2\xba\xbe\x1c\x19\x2b\x00\xa6\x2d\x89\x50\x21\x48\x64\x8a\xba\x96\x55\xb9\xfa\x82\xa9\x6b\x85\x61\xbd\x9a\x28\xae\x88\xac\x59\xc8\xe6\xd6\xd6\xbb\x8c\x30\x21\xe6\x82\x91\x8e\x30\x2f\xe2\xff\x99\x23\xcc\x0b\x9b\xe4\x85\x8f\x18\x61\xde\xe3\x68\x1d\xef\xba\x3b\xc2\x84\xb7\xa5\x68\x46\x98\x10\xf8\x5f\x1c\x61\x36\x52\x6c\x51\xa4\xa8\x82\xb5\xda\x4e\x95\xb7\x0a\x63\xcd\x8c\x4c\x79\xdb\x4e\xdb\x72\x7e\x2c\xa4\x6a\xe2\x84\x30\x85\xb9\xdd\x7f\x2b\x73\xa9\x44\x86\xc9\x68\x71\x09\xf6\xeb\xab\x36\x6f\xf6\xc4\xde\xb2\x93\x53\xe2\x9b\x8c\x39\xcf\xe4\x16\x09\x91\x13\x97\xf1\x16\xb2\x0c\x79\x1c\xfd\xaa\x2b\xcb\xe3\x40\xc2\x29\x45\xc5\x55\x89\x24\x55\x08\x69\x5e\xe2\x48\x95\x27\x38\x49\x25\x20\xcb\x93\x90\x60\x80\xa4\x00\x45\x26\x15\x8a\x92\x78\x9e\xe4\x11\x4b\xb3\xb2\xca\xca\x12\xcb\xb0\x84\x3b\xc2\x90\x11\xcd\x61\xee\x1d\x94\xc9\xd2\x38\xc5\x5d\x5f\x19\xd8\xdf\x3d\x3b\xe1\xf9\xd5\x39\xcc\x8d\x83\x32\x5d\x05\x7b\x72\x73\xcb\xfb\xcc\x61\x92\xc9\xcd\x08\x25\xa8\x64\xdf\xec\x69\x69\xb5\x24\x74\x18\x79\x32\x8e\x8f\x9b\xf9\xb7\xac\x36\x62\x93\x76\x9d\x6b\xa6\xf0\x8c\xbc\x6a\x4b\x4c\x9c\x49\x74\x34\xbe\x0d\x66\x89\xda\x2a\x65\xc7\xb7\x64\x79\x96\xb0\xb7\x96\x94\x16\x2b\x25\x22\xd3\x66\x98\x4d\xda\x5e\x72\xed\x74\x46\xa8\x7d\xc6\x39\x4c\x28\x0f\x1f\x21\xfe\x2b\xd5\xb9\x61\x46\x98\x0f\x3c\xfc\xd0\x25\xe5\xc9\x11\xe6\x33\x1d\x1e\x19\x38\xc2\xfc\xa4\x39\x84\x10\xd1\x1c\xe6\xb4\xfa\xfa\x19\xfc\xde\x08\x93\x2b\x66\xd2\x54\x76\x98\x9f\xda\x5a\xae\xcd\xad\x13\xd2\x7c\xdb\xa8\xc6\xca\xa5\x59\x09\x15\xb2\x56\x81\xc8\x6e\x4a\xd5\x5a\x7f\xcb\xb7\x57\x66\xdc\x48\xc3\x22\xd1\x85\x72\x3a\xc9\x55\xc8\x78\x51\x06\x72\x86\x2c\x6c\xac\x56\x8d\x7a\x6b\xf5\xbb\xa6\x29\x76\x00\xbb\x69\xb5\x7a\xd1\x1f\xd4\x25\x11\x2a\x07\x38\x92\xa3\x64\x9a\x41\x94\x84\x03\x4a\xa5\x00\x4b\xab\x80\x62\x68\x0e\x87\x12\x94\x54\x95\x80\x88\x94\x78\x09\x32\x84\x84\x93\x1c\xcf\x92\x34\x8b\x68\x16\x21\x49\x76\xb2\x64\x60\x5f\xfd\x1c\xba\xae\x07\xdc\xad\xeb\x61\x71\xea\x46\x5d\x8f\x77\xf7\xf4\x64\xf5\x57\xeb\x7a\x6e\x8c\x2b\xee\xf5\xe2\x86\xd5\xb3\xba\x1e\x75\x96\x6e\xbc\xf5\xd1\x88\x60\xdf\x6c\x0e\x18\x25\x65\x81\xa8\x58\x7c\x33\xb3\xe2\x93\x6c\x42\xc9\x74\x55\x3e\x91\x4b\xd4\x7b\x6a\xbb\x4f\xa6\x6a\x4d\x12\xae\xd7\xfd\x19\x5d\x5c\x0c\x73\x19\x3e\xbf\xd0\x57\xa5\x69\x9d\x68\x16\xe0\x46\x36\xf2\xb5\xd4\x72\x91\x91\x93\x0d\xb9\xf4\xb9\xea\x7a\x5e\xad\xab\x79\xb5\x96\xa4\xb4\x2e\x4e\x8d\x28\xeb\x7a\x3e\x30\x62\xbe\x17\xbd\x7f\x64\x5d\x8d\x10\x51\x5d\x0f\x47\x1d\x9f\xbf\x32\x33\xbd\x59\xd7\xd3\xa5\x37\x2d\x0b\x74\x0d\x05\x71\xac\x5a\x5e\xa4\xb2\x70\xb6\xac\xae\xb8\x3e\x5b\xa5\x13\xeb\x6e\x5d\x27\xe3\xb5\x86\xd0\xea\x64\x89\x8e\xb2\xc6\x45\x1e\x58\xa5\x4c\x3f\xd6\x60\x8c\x64\x62\xd5\x80\x73\xe9\x2d\x3f\x51\x5a\xdb\xa9\xd5\x2d\x24\x5b\x02\xbb\x18\xcd\x84\xc9\x2c\xfa\xfc\x90\xcc\x93\x2a\x87\x33\x0c\xab\x92\xac\xa2\xb2\x38\x04\x3c\x92\x71\x05\xf1\x8c\xaa\x92\x24\x47\x30\x14\x05\x65\x0e\x70\x90\x92\x11\x24\x64\x89\x91\x91\x44\x48\x32\x92\x19\x55\x55\x71\x9a\x73\xa3\x77\x2a\xa2\xfc\xd0\x03\xd1\x3b\xcd\x13\x37\xa2\x77\xf7\xee\xd9\xbb\x50\x5e\xcd\x0f\xdd\x8d\xde\x3f\xfa\xa8\xd4\x13\xfc\xc7\xfc\x50\x86\xd2\xd9\x49\x52\x58\xd0\x70\xb1\x6a\x00\x25\x9e\x6d\xda\x3d\x99\x2d\x0a\x90\x9d\x37\x5a\x9a\x56\xa1\x0a\xdb\x42\x5e\x5a\x4c\xad\xd4\x70\x25\x4f\x32\x49\xa0\x48\x23\xd9\x34\x78\x5b\x5e\x25\xfb\x59\x75\xbd\x68\xb6\x63\xda\x64\xc5\x65\xa7\x5c\x5f\x85\x0c\x39\xe9\x55\x27\xb5\xde\x67\xcc\x0f\xbd\x1c\xbd\xbf\x88\x3f\xc2\xe8\xfd\x03\x0f\x96\x71\x49\x79\x32\x7a\xff\x40\xfa\x5e\x8f\xde\x3f\x30\x3f\x23\x44\x94\x1f\x7a\x31\x7a\x97\xb4\xee\xb2\x96\x4b\x9a\xfa\x62\xc1\x17\xfb\x24\xa7\x54\x88\xd1\x9b\x65\x25\xcc\xa5\x9e\x6f\x14\x72\xec\xd0\xcc\x19\xfa\x72\x01\xd7\x95\x24\xbf\xad\xf5\x8a\x7d\x62\x99\xde\x2e\xc7\x80\xd8\x72\xf9\x89\x12\x4f\xce\xcb\x5d\xa6\xd0\x88\xaf\x91\xb4\xd1\x79\xd3\x44\xf5\x61\xac\x9e\x18\x46\x3d\xc2\x70\x04\x41\xf0\x40\x26\x39\x86\x22\x15\x95\x25\x65\x9c\xa0\x21\x0d\x09\x85\x65\x25\x0e\x07\xca\x6e\x18\x51\x28\x95\xc6\x55\x99\x51\x08\x9c\x23\x18\x08\x59\x5a\xc6\x21\x43\xe0\xbc\xca\xc3\xc3\xab\x18\x23\xa9\x1c\xbd\xbb\x02\xc1\xd0\x38\x71\x7d\x84\xd9\xdf\x3d\x7b\x47\xd6\xab\x95\xa3\x37\x56\x20\xdc\xa3\xc9\x42\xe5\x7b\x48\x5f\x75\x95\x73\x9d\x54\x7a\x56\xf5\x21\x9b\x29\x8e\xf2\x43\x7c\xc3\x8e\xe7\xc2\x9a\x10\xd7\x4c\x16\x74\xd3\xcc\xb6\x9e\x9b\xaa\xf9\xdc\x3a\xad\x6e\x70\xbe\xbc\xd4\x68\xc9\xae\xe4\x85\x34\x5a\xa7\x85\xb2\x5a\x81\x42\x82\x4b\xd7\xfa\x3a\x3d\x27\x05\x7a\x48\x4e\x98\x54\x36\xa5\x0d\xd5\x56\xb9\x95\x22\x98\xa1\xfc\xc8\x88\x71\xba\x97\xe9\x91\x98\x3e\xea\x1d\xca\x0f\x5a\x99\xb0\x37\xf0\xa8\xf1\x3f\x71\xf0\x8b\x20\x7c\xde\x35\xeb\xbb\x31\x7f\x08\x59\xbd\x9c\xb1\x7f\xb1\xaf\x2e\x0e\x5e\x7f\x10\xbf\xe7\x91\x63\x9d\x94\xd5\x5b\x8a\xd3\x54\x33\xbb\xac\x4c\x52\xa9\x56\x33\x65\xa8\x7d\xb9\x6b\xe6\x45\xad\xcf\x4d\xc6\x42\x3b\x9e\x6d\xe2\x80\x29\xea\x4b\x9c\x9a\x08\x6d\x56\x68\x09\x04\x47\x1b\x42\x76\xdd\x4e\x4c\xbb\xd3\x99\x9c\x9a\xa6\x50\xd3\x28\xc9\x95\x42\x82\xaf\x11\xb5\x6a\x77\x91\x88\x3c\x63\x2f\x29\x14\xc7\x28\x92\xa2\xe0\x40\xa1\x18\x9c\x23\x58\x86\x25\x64\x0a\xd2\x90\x45\xbc\xc2\x20\x8e\xa1\x65\x08\x78\x59\xa2\x08\xc4\x00\x85\x85\xd0\x99\x18\xa8\x08\xd1\x12\xc9\x28\xc8\xf5\xc8\x51\x1d\x7c\xfe\x80\x47\x26\x18\xf2\x86\x47\x76\xef\x9e\xbd\x6b\xf0\xd5\xa3\xc8\x3e\xd0\x23\x9f\x1c\x3c\x9e\xe0\x27\xd3\x42\x07\x2c\xc8\x15\x5b\x53\xb7\x5c\xb5\x84\x26\xa2\x44\x34\x9b\x39\x5a\xdb\x2c\x26\x39\x3c\x61\x0c\xbb\x66\xc5\x66\x87\x15\x82\x01\x35\x69\x32\x02\x4a\xa3\xd9\x52\x51\xca\x58\xc9\x78\x55\x80\xea\x28\xd5\xdd\xd8\xa3\xb6\xa0\x5b\xc5\xe5\x58\x4f\x4c\xb7\xe3\x84\xf0\x50\x0c\xff\x82\x47\x8e\xe4\xf5\x06\x0f\x5a\x99\x10\x60\xe5\x1f\xfd\x7a\x05\x41\xf8\xbc\x19\xf8\xbb\x6b\xa8\x21\x64\x15\xa5\x47\xfe\x48\x5d\xf1\x3c\x72\x16\x34\x7a\x73\x09\x9a\x28\x6e\x27\xe2\xc5\x35\xb7\x61\x6a\xf5\x55\xbb\x5c\x1a\x4f\x8b\x99\x45\x6d\x5c\xcb\x68\x09\x64\x31\xe4\x52\x60\xbb\x66\x3f\xb1\x6c\x64\xfb\x44\xbe\x5c\xe7\xa9\x8a\xc6\xbf\xd5\xb8\xc4\x3c\x26\x96\xd5\x0c\x48\xb7\x92\x9d\xf5\x92\xa9\xb4\x32\x52\xa1\x24\x46\x1f\x23\x4b\xb4\x0c\x15\x19\xe1\xb4\x2a\xe3\x50\xa1\x15\x46\x45\x38\xce\x4b\x9c\x84\x2b\x48\x92\x71\x85\x54\x54\x85\x04\x08\x52\x40\xe2\x90\x04\x49\xc4\x23\xc8\x70\x32\x60\x29\x06\x51\x04\xae\xba\x1e\xd9\x59\x43\x0d\xf9\xa2\xfc\x27\x3d\x32\xe0\xae\xbf\x8a\x62\x7f\xf7\xec\x9d\xad\xae\x56\x3e\x79\xf8\xe2\x33\x1e\x39\x54\x56\xa5\x1b\xe4\x91\xc5\x03\xfe\x9a\x50\xae\x35\xde\x56\x73\x31\x91\x14\xba\x2b\x8b\xa8\x0e\xa7\xd9\x78\x2b\x2d\xa9\x42\xcf\x26\x2b\xc2\x70\xd8\xab\xb6\x9b\x0a\x3e\x1f\xb7\xe5\x3c\x6c\x93\x7a\x4a\x8c\x8f\x2b\xfd\xd2\xac\x98\xee\x97\x26\x69\x71\x34\xa4\x14\x7d\xd9\xae\x6d\x50\xaa\x2f\xac\x9b\x85\x56\x15\xce\x14\x6b\x3d\x7c\x67\x8f\xfc\xec\xac\x3d\x6a\x8f\x1c\x09\xfe\x17\x3c\xf2\x67\xca\xaa\xdc\xf3\xc8\x61\x64\x15\xa5\x47\xfe\x48\x5d\xd9\x1f\x24\x49\x24\x8a\x95\xd8\xa4\x26\xe6\x12\x28\xf6\xd6\x8a\x25\x7b\x2a\x5f\x6b\xdb\x5c\x42\x23\x65\x2a\x99\x4c\x0c\xf9\x76\x99\x6c\x4c\xcb\xed\xb5\x3e\xef\xa2\x56\xa9\x19\x2b\xd1\x93\xad\x6c\xb5\x27\xdb\x5a\xab\x91\x49\x8d\x40\x87\x6e\xa7\xd2\x54\x79\x92\x4a\x94\xe6\x35\x7e\xa1\x80\xb7\x64\xf4\x75\x93\x00\x51\x12\x24\x54\x40\x70\x12\x03\x21\xa0\x00\x2e\x51\x3c\x4b\xd1\x0c\x24\x24\x9c\xc7\x79\x1c\x91\x1c\xc9\x22\x86\x91\x48\x8a\xa7\x71\x12\x57\x28\xa4\x28\x0c\xae\xe0\x2a\x4e\xb3\xb8\xeb\x91\xa9\x88\xb2\x16\x77\xf3\xe2\x0c\x4d\xf2\xd7\xcf\x91\xdc\xdf\x3d\x7b\xf7\xf5\xab\x59\x8b\x1b\x79\xf1\xa8\x3d\xf2\x49\xd6\xa2\x94\x9f\xae\x62\xfa\x28\x4d\xd7\xfa\xfa\x50\xc9\x2d\x12\xdd\x54\x43\x19\x89\xf6\xd0\x84\x4d\xb3\xde\x58\xb7\x4d\x5a\x89\x27\xcc\x72\x12\x70\x48\xcd\x96\x8c\x4d\xaf\x0c\x63\x60\xc9\xdb\x0d\x51\xd9\xb4\x62\xa3\x4c\x97\xc9\xd7\x3b\xec\x5a\x48\x93\x52\x65\x2e\x70\xe6\x66\xb3\x11\xc4\x5f\x21\x6b\xf1\xec\x71\xb1\x3f\xf1\x5c\x37\x41\xf8\xbc\x75\x90\x81\x1e\xf9\x27\x65\x0d\x84\xf7\xea\xab\x07\xf1\x7b\x1e\x79\x3d\x85\x71\xa6\x23\x76\xf5\xc4\xb4\x93\xc0\x35\x23\x2d\x97\xf3\x40\x6c\x80\xa4\x3d\xaf\xd8\xe9\x62\xa2\xb3\xd2\x49\x2e\x63\xe1\x45\x69\x43\x73\xf2\x76\x9c\x1e\x12\x26\x0b\x59\x40\xe4\xea\x64\xba\xc9\x88\x7d\xd5\xd0\xd3\xd2\x4a\x10\xba\x8a\xc5\x4c\x52\xdb\x55\x36\x2b\x46\x7f\x06\x1e\x90\x00\xe2\x80\x22\x41\x49\xc2\x01\x25\x01\x16\xe2\x32\x49\x50\xb8\x0c\x59\x42\xe1\xa0\xcc\x4b\x32\x4b\x70\x24\xa1\xf2\x2a\x0d\x49\x49\x61\x78\x24\x43\x52\xe1\x38\x55\xc2\x91\x4c\xcb\x6e\x0d\x07\xf9\x5a\x15\xc8\xdd\xd0\x98\x65\x09\xe6\x7a\x79\xe1\xfe\xee\xe9\xdb\xec\x5f\xad\x02\xb9\x71\x9e\xaf\x7b\x85\xd8\x0b\x7d\xa5\x0a\x24\x95\x5f\xea\x84\x5d\xcc\x14\xd3\x54\x7b\xb3\xb6\x71\x25\x95\x6c\x8b\x2a\x63\x4b\xb4\x4e\x49\xdb\x92\x99\x19\x26\xe7\x31\xbd\xdd\x2f\x4d\x37\xb2\x4d\x53\x5a\x59\x05\xd3\x8d\x3d\xde\x30\x25\x85\xee\xe7\x29\x91\x4a\xe9\xb2\xa5\x52\x8c\x28\x8c\x12\x99\x46\xab\x6a\xcd\x38\xb5\x97\xfa\x5c\x55\x20\xaf\x56\x61\xbc\x5a\x79\x50\xc4\x27\x8c\x10\x61\x15\xc8\x47\x66\x61\xdf\xa3\x0a\x24\x6c\x15\x86\x10\x51\x15\x08\x7b\xd2\x01\x57\x5e\x82\x75\x73\x97\x90\x34\x57\xa4\xc6\x46\xdb\xa0\xb4\x2c\x17\x95\x6c\x6d\xad\xd7\xb3\x31\xb3\x13\xeb\xa3\x0c\x37\x2e\x6c\x0c\x61\xa1\xce\xdb\x9d\x66\xde\xea\x16\x11\xca\x8d\xbb\xfc\xdc\x92\x7a\x1c\x1a\x67\x51\xa7\x81\x12\x15\x81\xee\x16\xb3\xb1\xca\x48\xc8\xd5\xea\x13\x3d\xc5\xe6\xe3\x59\x20\x44\x9e\x11\x46\x04\x2b\x41\x44\xd3\x40\x81\x38\x81\xd3\x50\x21\x81\x8a\x4b\x3c\x84\x8a\xaa\xe0\x2a\x03\x48\xa4\x92\x2c\x92\x28\x8e\x91\x08\x5c\xc2\x29\x4a\x26\x78\x40\x72\x24\x83\x23\x8a\xa6\x15\xd6\xf5\xad\xd4\x6b\xbe\xf5\x6e\x90\xcb\xb2\x80\xbd\xfe\x4e\x8a\xfd\x5d\xc7\xb7\xd2\x38\x7f\x72\x56\x7a\x68\xdf\x7a\xe3\x54\x51\xf7\x7a\xb2\xf6\xe3\x96\x6f\xed\xf5\xd4\x6d\xc5\x9c\x56\x47\xea\x44\x63\x74\xb3\x1a\x33\x92\xea\x72\x96\x9f\xd6\x97\x60\xaa\x6e\x74\x0a\x37\xe8\x45\xa7\xce\x6e\x89\xde\xb4\xca\xcd\x8d\x4c\x8c\xe9\x2e\x86\x14\x31\x2e\x24\x3b\xe5\x75\xdb\xa8\xb2\x04\x9b\x6c\x8b\x55\xc4\xe2\x39\xdc\x46\x9d\x55\x13\x8d\x27\xf9\xcf\xe5\x5b\x5f\xf5\x6d\xaf\xda\x73\x81\x8a\x95\x7b\x11\xfa\xd6\x8f\x9c\xbd\xbf\x87\x6f\x0d\xeb\xdb\x84\x88\x7c\x2b\xbd\xbe\x8b\xe8\x96\x6f\x05\x99\x2c\x37\x5e\xd0\x63\xaa\x4b\xe7\x96\x73\xf8\x16\x5f\x08\x33\x76\xbe\xed\x4f\x24\x7b\x3e\xe3\xfa\xa8\x5c\xa8\x40\x7d\x82\x38\xbb\x93\x1f\xc7\x0b\x30\xb1\x5a\xea\x8c\x51\x29\xf7\xb6\x43\x7d\x2c\xa7\x61\x2a\xc6\xa3\xb5\x5e\x4f\x91\x4b\x3e\x59\x2e\x76\x75\x13\x27\x0d\x3a\x19\x79\xdc\x2a\xab\x0a\xc7\x11\x0c\x52\x68\x8e\x95\x69\xa4\x70\x9c\x82\x20\x8e\x24\x1c\xe7\x08\x4e\x86\x2a\xc9\xc9\x38\x4b\xe3\x88\x65\x29\x1c\xe1\xb4\x82\x48\x19\xb0\x04\xcb\x20\x1e\x22\xc4\x21\xe4\xfa\x56\xfa\x35\xdf\x7a\xf7\x45\x14\xce\x66\xca\x1b\xbe\xd5\xbd\xeb\xfa\x56\x1a\x3f\xc9\x1f\x84\xf6\xad\x37\xce\xcb\x72\xaf\x10\xaf\x7c\xb9\xe6\x5b\xcb\xd3\xda\x48\xa9\xa1\x6d\x49\xee\xa4\x3b\x55\x4e\x69\xd7\x27\x29\x3b\xdd\xa0\xec\x6c\x2e\xb9\x2d\x28\xb0\x3a\xa9\x33\xb1\x78\x91\x8d\xd9\xa5\xb7\x42\xc7\x68\x8d\xa5\x94\xd0\xb5\xe4\x7a\x2f\x17\x1b\x33\x69\x25\xde\x4e\xb7\x60\xea\x4d\xe9\x59\x9d\xa4\x60\x65\x49\xbc\xb3\x1c\xe7\x8a\x9f\xcb\xb7\xbe\xea\xdb\x5e\xb5\xe7\x3c\xdf\x1d\xae\xa3\xac\x5e\xfe\xc0\xb5\xaa\xf7\xf0\xad\x61\x7d\x9b\x10\x91\x6f\x0d\x7b\x42\xa5\xe7\x5b\xdf\xfa\x93\x5c\xb7\x95\xb5\xc6\xd9\xf4\xa8\x3d\x8e\x67\xdb\xad\xbe\xc0\xd6\x5b\xcb\x62\x7d\x2b\x58\xda\xac\x33\xa6\x45\xb4\x5a\x6d\x63\x71\xb3\x59\xda\xea\x8b\x74\x0e\xac\xd7\x69\x36\x2b\x76\x92\x55\x23\x36\xea\xaa\x44\xbd\x9d\x19\x72\x64\xa7\x98\x1e\x0e\x8b\x09\x9e\x4f\x9b\xc6\xf6\xd1\xbd\x87\xbf\xfd\xf6\xfd\xfb\x6f\xdf\xbf\x63\x29\x68\x43\x4c\x35\x4c\xac\x0c\xa7\xe8\x07\x36\x41\xdb\xc1\x0a\xea\x4b\x34\xd8\xb9\x5b\xf4\x17\xd6\xdc\xce\xd1\x0f\xac\x29\x24\x8a\x22\x96\x12\x9a\xc2\x5f\x58\x43\x1e\xa1\x29\xfc\x81\xcd\x97\x92\xae\xc9\x7f\x61\x95\xf5\x0c\x99\x3f\xb0\x1d\xb4\xdf\xce\x5c\xb6\x0f\xd6\x49\x24\xbc\x99\x0f\xb4\xd9\x10\x59\xf6\x40\x87\xbb\x3f\x48\x19\x22\x73\x47\x34\xfe\xf5\x3a\x69\x86\xaa\x22\xd3\x7a\x9a\xa2\x3d\x34\x17\x08\x94\x65\x63\x39\xb3\xad\x81\xa5\x0d\x67\xc8\xb4\x2e\x7e\x18\xcc\x27\x68\xbb\x47\x92\xac\x94\x1b\xcd\xba\x90\x2b\x37\xef\x20\x11\x8a\x4d\xb1\xee\xd1\x54\x29\x17\x7b\x17\x60\x7f\xc3\x30\x0c\x13\x52\xa9\x13\x90\xc1\xa8\xb1\x6a\x3d\x57\x12\xea\x3d\xac\x20\xf6\xb0\xdf\xdd\x3b\xdf\xf6\x4d\x4f\x84\xe3\xb1\x63\x59\xc8\x1e\x58\x36\xb4\xad\xd3\xcf\x51\x31\x71\x84\x18\x48\xbf\x0f\xe1\x39\xe9\x9a\x72\x41\xed\xd0\x30\xe7\x83\xa9\x36\x34\xa1\x3b\x7c\xfb\xbe\x47\x44\xb5\x0f\x6a\x10\xe5\x41\x88\xef\x52\xbf\x8f\x40\x1c\xb6\x2d\xdf\x57\xf7\x3f\x03\xd9\x50\x90\xf7\xd1\xde\xce\xf7\x1f\x35\xcb\x5a\x22\x73\x10\x09\x77\xe7\x68\x83\x98\x0b\x45\x18\xd6\x2a\xe7\x6a\x2d\x11\xfb\xfd\xd8\xfc\x1b\x76\x6c\xbf\xff\xec\x3e\xf0\xa4\x68\xa2\xe9\xd6\xa7\x19\x7f\xaa\x53\x8d\x39\x72\x95\x61\x30\x87\xa6\xad\xc9\xda\x1c\xce\x4e\x38\x09\xbe\x1d\x31\x67\xc1\x48\x6e\x71\x7a\x83\xac\x87\x39\x3f\x09\xa8\x83\x79\xbf\xd6\x20\x62\xee\xaf\xa1\xb9\xc5\xff\x4d\xd2\xee\x4a\xc0\x3f\x3e\xf9\xbe\x47\xc4\x9f\x0f\x6a\x10\x3b\x41\x88\xcf\xa9\x9f\xa0\xed\x05\xf9\xee\x78\xe8\xfd\x27\x22\x62\x5d\x60\x41\x34\x9e\xa0\x39\x27\xcd\xb9\x11\x20\x5d\xd7\x61\x48\x5b\xc7\x97\xec\x29\xcb\x95\x53\x62\xf7\x0e\x51\xc9\xba\x28\x34\x45\xb7\xe9\x39\x14\xac\x52\xf6\xbb\x9a\x56\x23\x57\xce\x60\x92\x6d\x22\x74\xea\xbb\xae\x53\xe3\x7a\xb0\xd7\xe9\x71\xe1\x3c\x46\xd1\x15\xaf\x29\x6d\x07\xde\xb8\x1e\x9a\x9c\x23\x88\x53\x4a\xce\xe6\xc8\xe7\xf4\xb8\x8d\x0f\x01\xc5\xc0\x42\x8b\x25\x9a\xc9\x97\x02\x93\xb6\x83\x11\xb4\x46\xaf\x50\xb6\x7b\xfe\x31\xb2\x4e\xed\x78\xf7\x54\x10\x35\x6e\x90\xf8\x0a\x3d\x2e\x84\xc7\x28\x72\xdb\x1e\xc4\xf3\x0d\x83\xf3\xb9\xae\xc9\xae\xb3\x35\x4c\xe5\xca\x20\x38\x40\x3b\xdd\x70\xee\x87\xa0\xd4\x1b\x83\x5d\x82\x7d\xe0\x4e\xc9\x46\xaa\x8a\x64\xbf\xaa\x5d\x8e\x09\x9a\xf2\x0d\xfb\xe2\x3c\xfc\xe5\x1a\xb1\x9a\x12\x11\x99\x9a\xf2\x30\x81\x7b\xd5\xdb\x91\x17\x82\x68\x63\x3e\x98\x47\x45\xb7\x07\xeb\x94\xf4\x2b\x81\x40\x28\x4e\x82\x19\xb0\x37\xd1\x31\xe0\xc1\xba\xa2\xd3\x21\x59\x38\x85\x10\xc4\x84\x31\xdf\x69\xe5\xc8\x08\xc5\x83\x47\xfc\x11\x46\x58\xe1\xdf\x16\xb4\xe5\x59\xbb\xe3\xaa\x5f\x97\xf5\x39\xb8\x53\x92\xdd\xdf\x7d\x34\x06\x53\x74\x2a\xd7\xa8\xc8\xba\x80\xf9\x98\x7b\x0b\x22\xd0\x76\xbb\xc4\x7e\xa5\x5b\x8f\x30\xc2\xab\xe4\x3d\xf5\xb3\x4d\x65\x87\x44\x82\x16\x7a\x79\xfc\x0c\x02\xe6\xa3\x5c\x41\x3e\x3a\x4f\xdb\xde\x25\xd0\x89\x8e\xa2\x21\xcf\x01\xf5\x10\x71\x4e\xcb\x5b\xa4\x39\xb4\x23\x33\x32\xf1\xf9\xe0\xdd\x23\xd2\xd7\xfc\x11\x4a\xa3\x91\xe3\x19\xb4\x47\xa9\xbc\x2b\xcd\x68\x68\x7b\x88\xa6\xdb\xb4\xec\x29\xd6\x0d\x63\xb2\x9c\xbf\x46\xd1\x39\xac\x87\x7b\xd4\x8d\x77\xaf\xd0\x37\x87\x9a\x39\xb0\xb5\x29\x8a\x84\x42\x3f\xb4\xc7\xec\xd6\x23\xf0\x1b\xe6\x27\xf9\x1b\xe6\xb9\x78\x59\x37\x2c\xa4\x0c\xe0\x65\xb6\xcd\x45\x1b\x81\xdf\xf6\xe0\xdc\xa3\xf8\xc9\xe8\x68\x07\x35\x32\xe9\x3e\x21\xd8\xbb\x72\xd3\x66\x0a\xda\x0c\x7c\x21\x87\x35\x30\x66\x03\xa8\x28\x26\xb2\xac\x57\x05\x7a\x17\xc1\xd9\x3c\xcd\xbb\xed\x9b\x19\xb9\x0d\x9f\xa0\xfd\x75\x3d\xb8\x05\xfb\x3e\xc5\x01\x56\x76\x0e\xd0\x8b\xc2\x77\xf0\xec\xed\x3c\xfc\x1c\xfc\x26\xd4\xbb\x61\xff\xae\xd1\x1d\x42\xbd\x18\x6a\x07\xf2\xa0\x44\x11\x51\x1b\x04\xfa\x6e\xf8\xf6\xa8\x26\x9f\x00\x8f\x5a\x19\xce\x40\x87\x89\x37\xaf\x83\x9b\xce\x0d\x73\xe7\xf8\x56\xc8\xb4\x34\x63\x16\xbd\xa0\xfd\x18\xee\x93\xef\x7b\xe0\x71\x66\x3c\xd7\x13\x32\x53\xf1\x98\xfc\x4f\x70\xdc\xe5\xe4\xa4\xed\xe3\x4c\xcc\x4d\xb4\xd2\x8c\xa5\xf5\x21\xdc\x04\x21\xbb\xcb\x56\xd0\x43\x8f\xf3\xb7\x4f\xa2\xbc\x1b\x4f\x7b\x04\x77\xf9\xb8\x9a\xed\x3a\x07\x7d\x18\x6f\xdf\xc5\xb4\xfd\xd0\x03\x27\xc0\xcf\x1a\xf8\x39\xd0\xf3\x29\x54\x44\x16\x7e\x0b\xc5\x23\x3c\xdc\x99\xd7\xdd\x44\x16\xdd\xf0\x75\x09\xf8\x21\xda\xef\x0f\x62\xa7\x93\xed\xf7\x50\x9b\x4b\xf8\xa1\xa7\xfa\x5e\x2e\x7f\x37\xb1\x5c\x6e\xb5\xd9\xd0\x8d\x81\x43\x0b\x38\x18\xdc\x8e\x3a\x6f\x89\xe2\x3c\x0c\x77\xda\x38\x4d\x6e\x10\xe6\xd4\x05\x4c\x0d\x45\x53\x35\xa4\xbc\x9a\xfb\xbd\x0d\xf6\x1a\xa1\x41\x6d\x6f\x50\x6c\x21\x5d\x8f\x84\x46\x17\xd0\x35\xaa\xdc\xbb\x37\x3b\x75\xd7\x24\xca\x5e\x3d\x83\x77\x8b\xae\xab\xfd\xba\x2f\x70\x88\x60\xc5\xe3\x12\xd4\x8e\xa2\x8b\xb2\x8e\xa0\x55\x8f\x0b\xb2\x9c\xc9\xcc\x21\xa0\xdd\x67\xda\x07\x92\x61\x4c\x42\xd3\x77\x03\xe6\xdd\x50\xf9\xf7\xdf\x15\x64\x43\x4d\xb7\xb0\xef\xff\xf7\x7f\xd8\x57\xcb\xd0\x95\x93\x35\xfb\xaf\x3f\x7e\xd8\x68\x63\xff\xf1\xc7\x37\xec\x7a\x43\xd9\x50\x1e\x6b\xe8\xae\x49\x5d\x6f\x2a\x19\xcb\xe1\xc8\x7e\x08\xfd\x59\xd3\xdb\x04\x9c\x35\xf5\x91\xf0\x07\xd6\xc9\x8a\x75\xd1\x75\xb6\xd8\xdf\x18\x49\x3e\x5c\xee\xa2\x29\x03\xf5\x64\xfd\x33\x5d\xf8\x98\xa2\x17\x0f\x2d\x96\xae\xd4\xc5\x5c\xa6\x7c\x58\x68\xc6\xea\x62\x5a\xac\x8b\xe5\xa4\xd8\xf0\xad\x0e\x3a\x77\x2b\x65\xac\x55\x4d\xed\x54\xa6\x2e\x36\x9a\xf5\x5c\xb2\xb9\xfb\x29\x25\x16\xc5\xa6\x88\x25\x85\x46\x52\x48\x89\x37\x56\xeb\x77\xf3\xef\xf3\xaf\x03\x5f\x4a\x32\x3a\x61\x9c\xe3\xb9\xb3\x14\x7f\x8d\x92\x73\xf9\xf8\xd3\xa7\x81\xc2\xf2\xcc\xf9\x4e\xdd\xc2\x55\x49\x78\x29\x9d\x9f\x2e\x87\x53\x3a\x82\xa4\xb0\xcf\x96\xdd\x56\x98\xe7\x24\x70\x99\x5c\xfd\x89\x62\xb8\x42\xcc\xb9\x2c\x02\xd2\xc1\xd1\x2a\x85\x3f\xd5\xf7\x19\x04\x72\x5d\x35\x2e\x72\xa9\x8f\x6a\x47\xd5\xb0\xec\xa1\x89\x1a\xb5\x22\xa6\x40\x1b\xee\x54\x0c\x53\x96\xd3\x39\x26\x1b\xd3\xb9\x8e\x6c\xe4\xf0\xf0\xff\x05\x00\x00\xff\xff\x0b\x3c\xa8\x03\x1f\x6a\x01\x00") +var _paths_strict_sendHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x69\xb3\xa2\x48\xf6\x38\xfc\xbe\x3f\x05\x51\x31\x11\xd5\x1d\x56\xb5\x90\xec\xd5\xff\xfe\x45\xa0\xe2\xbe\xef\x3a\x31\x61\x24\x90\x28\x8a\xa2\x80\xdb\x9d\x98\xef\xfe\x84\x80\x1b\xe2\x86\xdc\x5b\xb7\xe6\x19\xa6\xe6\xb6\x4a\x72\xb6\x3c\xe7\xe4\xc9\x93\x27\x93\xef\xdf\x7f\xfb\xfe\x1d\xab\x1a\x96\x3d\x34\x51\xa3\x56\xc4\x14\x68\x43\x09\x5a\x08\x53\x96\xd3\xf9\x6f\xdf\xbf\xff\xb6\xbb\x9f\x5a\x4e\xe7\x48\xc1\x54\xd3\x98\x1e\x1b\xac\x90\x69\x69\xc6\x0c\xe3\xff\x64\xfe\x24\x4e\x5a\x49\x5b\x6c\x3e\x1c\xec\x1e\xf7\x35\xf9\xad\x21\x36\x31\xcb\x86\x36\x9a\xa2\x99\x3d\xb0\xb5\x29\x32\x96\x36\xf6\x37\x86\xff\xe5\xdc\xd2\x0d\x79\x72\xf9\xab\xac\x6b\xbb\xd6\x68\x26\x1b\x8a\x36\x1b\x62\x7f\x63\x5f\x5b\xcd\x34\xf7\xf5\xaf\x3d\xb8\x99\x02\x4d\x65\x20\x1b\x33\xd5\x30\xa7\xda\x6c\x38\xb0\x6c\x53\x9b\x0d\x2d\xec\x6f\xcc\x98\x79\x30\x46\x48\x9e\x0c\xd4\xe5\x4c\xb6\x35\x63\x36\x90\x0c\x45\x43\xbb\xfb\x2a\xd4\x2d\x74\x86\x66\xaa\xcd\x06\x53\x64\x59\x70\xe8\x34\x58\x43\x73\xa6\xcd\x86\x7f\x79\xb4\x23\x68\xca\xa3\xc1\x1c\xda\x23\xec\x6f\x6c\xbe\x94\x74\x4d\xfe\xb6\x63\x56\x86\x36\xd4\x8d\x5d\x33\xa1\xd8\x14\xeb\x58\x53\x48\x14\x45\x2c\x97\xc6\xc4\x6e\xae\xd1\x6c\x60\x95\x72\xb1\xe7\xb5\xff\x73\xa4\x59\xb6\x61\x6e\x07\xb6\x09\x15\x64\x61\xa9\x7a\xa5\x8a\x25\x2b\xe5\x46\xb3\x2e\xe4\xca\xcd\x93\x87\xce\x1b\x0e\x64\x63\x39\xb3\x91\x39\x80\x96\x85\xec\x81\xa6\x0c\xd4\x09\xda\xfe\xf5\x11\x08\x65\xe7\xd3\x47\xa0\xdc\xe9\xd5\xc7\x31\xe8\x62\x7b\x9e\x3b\x97\xc0\x9d\x22\xdf\x42\x76\xd2\xea\x08\xdc\x69\x9e\x2b\xa7\xc4\xee\x49\x4b\x0f\xac\x43\xd5\x00\xa9\x2a\x92\x6d\x6b\x20\x6d\x07\x86\xa9\x20\x73\x20\x19\xc6\xe4\xf6\x83\x96\x36\x9c\x21\xd3\x79\xc4\xe3\xe6\x76\x7b\x43\x55\xbd\xe6\x16\xd2\xf5\x9d\xc5\x38\xb4\x3e\xf3\x10\x32\x1f\x6d\xad\x43\xcb\x1e\x4c\x0d\x45\x53\x35\xa4\x0c\x74\xa4\x0c\x1f\x7f\x56\x5a\x6e\x1f\xa4\x4e\x9b\x29\x68\x33\x38\xe9\xdf\x99\x05\x1d\x5b\xb7\x06\xc6\x6c\xa0\x29\xcf\x3c\x6d\xcc\x91\x09\x0f\xcf\xda\xdb\x39\x7a\xe1\xe9\x23\x25\x2f\x51\xf1\xdc\xb3\xae\x94\x9d\x07\x2d\xb4\x58\xa2\x99\xfc\x14\x0b\x27\x8f\xcf\x4d\xb4\xd2\x8c\xa5\xe5\xfd\x36\x18\x41\x6b\x14\x12\xd4\xeb\x10\xb4\xe9\xdc\x30\x77\x1e\xc9\x1b\x56\xc2\x82\x09\x2b\x4b\x59\x37\x2c\xa4\x0c\xe0\x53\xba\xb8\xb7\xe7\x10\xaa\xe4\x19\x73\x08\xa2\x4f\x9f\x84\x8a\x62\x22\xcb\xba\xfd\xf8\xc8\x36\x15\x67\xe8\x1d\xe8\x86\x31\x59\xce\x1f\x68\x3d\xbf\x47\x92\xdb\x0a\x6a\xe6\x93\x80\xf7\xe3\xce\xc3\x0f\xec\x5c\xe5\xce\x67\x3c\xd6\x74\x0f\x3e\xc4\x23\x0f\x79\xd7\xfd\x43\xce\xe8\xf2\x04\x92\xd3\xd1\xe8\xde\x13\xf3\xdd\x03\x23\xfb\x6e\x0f\x58\x67\x0e\x48\xda\xde\x55\xa3\xd1\xc1\xd2\x1f\x69\x6c\xb8\x74\x18\x77\x1b\x6a\x96\x3d\xb0\x37\x83\xf9\x7d\x90\xbb\x96\xc6\xfc\xd1\x96\xe8\xd1\x66\xfb\xd1\xf4\x76\x63\x69\xfb\xd0\x00\xb5\xe3\xf9\xae\x17\x7b\x74\x30\x76\xc3\x84\x9d\xb4\x2d\x6b\x79\x0f\xf3\xa1\xb1\x6c\x28\xe8\x91\x50\xc5\x1d\x4b\x6f\x44\x29\xde\x60\x3b\x7f\x30\xf4\x99\xa0\xed\x60\x05\xf5\x25\x1a\xec\x1c\x0d\xba\x01\xd8\xd7\xf2\x61\x0c\x01\x63\xf8\x60\x0e\x4d\x5b\x93\xb5\x39\x9c\xdd\x8c\xb8\xee\x3d\xfa\x34\x0d\x87\x31\xf8\x59\x0a\x82\x1f\x7c\x1a\xbf\xd3\xdd\x8f\xe0\x73\x1b\xbe\x3b\x7c\x57\xfd\x76\xba\xe7\x7d\xdc\x8d\x68\xfb\x78\xdd\x51\xdf\xc1\x83\x14\x0c\x0d\x73\x3e\x98\x6a\x43\x2f\xc4\xb9\x41\x82\xaf\xe5\xc3\x3c\x3e\x1f\xa4\x3f\x0c\x79\x3f\xb8\x7a\x71\xf7\x2d\xf0\xbe\xa6\x37\x71\x3c\x6a\x00\xee\xd3\xc9\x4a\xb1\x55\x2a\x63\x9a\xe2\xa2\x4f\x89\x69\xa1\x55\x6c\x3e\x08\xfb\x8a\x62\x47\x00\xd9\x53\xa9\xdb\x90\x9c\x6f\x57\x00\xb9\x0e\xe9\x76\x1b\x9f\x6f\xb9\xdd\x38\x68\x52\xe0\x3d\xd1\x10\x6b\x2d\xb1\x9c\x0c\xd1\x09\xbb\x19\x9d\x85\x16\x4f\x63\x3e\x03\xf2\xf0\xd3\x0a\x7a\xb0\xed\x71\xd2\xf0\x30\x87\x57\x5c\xd5\x33\xfc\x05\x83\x78\xec\x59\x2f\xbc\x7e\xac\xb1\x17\x4b\x3f\xcc\x9b\xe7\xb6\x9e\xe1\xc5\x7d\xe4\xc1\xb6\x9e\x75\x3f\x4e\xcf\xde\x1d\x3c\x42\x91\xcf\xf1\xdd\x6e\x7c\xe2\xc7\xee\x34\xf4\x79\x24\xaf\xb5\x90\xc9\xd4\xc5\x8c\xd0\x0c\x78\x62\xaa\xed\xa6\x81\x9a\x8c\x7e\x9f\x2d\xa7\xc8\xd4\xe4\x7f\xfe\xeb\x8f\x07\x9e\x82\x9b\x10\x4f\xe9\xd0\xb2\x7f\x87\xb3\x2d\xd2\x9d\x14\xe1\x03\x4f\xa8\x9a\x19\xf8\x48\xba\x55\x4e\x36\x73\x95\xf2\x0d\x7e\x06\x70\x38\x3c\x52\xf7\x0d\xbb\x20\xf4\x06\x8c\x3d\x77\x2f\xc0\x70\x12\x23\xbb\xc7\x8f\xc4\x7f\xc3\x9e\x61\xc4\x61\xfd\x01\x08\x62\xb7\x29\x96\x1b\x3e\x10\xfa\x7c\x68\x2d\xf4\xbd\xe6\x26\xb3\x62\x49\xb8\xc0\xf0\xd7\x6f\x6e\x76\xb8\x0c\xa7\xe8\xc7\xfe\x37\xac\xb9\x9d\xa3\x1f\xde\x23\x7f\x61\x0d\x79\x84\xa6\xf0\x07\xf6\xfd\x2f\xac\xb2\x9e\x21\xf3\x07\xf6\xdd\x49\x1a\x27\xeb\xe2\xae\xbf\x3c\xc8\x7b\x78\xbf\x9d\x41\x3c\xbf\xe9\x01\x4e\x56\x4a\x25\xb1\xdc\xbc\x01\xd9\x6d\x80\x55\xca\xe7\x00\xb0\x5c\x03\xfb\xba\x4f\x07\xef\x7f\xb3\x1c\x20\x5f\xfd\x98\xf7\xec\x7b\x38\x0f\x12\xba\xcb\xcf\x99\x2c\xcb\x95\xa6\x4f\x9e\x58\x27\xd7\xcc\x1e\xc8\x3a\xcd\x0b\x9f\xa1\x3f\x42\xf1\x11\xf2\x0c\xf3\x17\x40\x1c\x01\x54\x8b\xf1\xf9\xb0\x51\x2b\x62\x73\xd3\x90\x91\xb2\x34\xa1\x8e\xe9\x70\x36\x5c\xc2\x21\x72\xc4\xf0\x60\x1e\xfb\x94\xdc\xfb\x8a\xe6\x91\xbf\xd7\xd5\x23\xfd\xfb\xbe\x0d\x92\xe5\x41\xb3\xef\xc2\xc7\xea\x62\xb3\x55\x2f\x37\x4e\x7e\xfb\x0d\xc3\x30\xac\x28\x94\x33\x2d\x21\x23\x62\x0e\xf7\xa5\x52\xcb\x75\x7a\x8d\x66\x3d\x97\x6c\x3a\x2d\x84\x06\xf6\x8f\xc1\x3f\xb0\x86\x58\x14\x93\x4d\xec\x1f\xc4\xee\x9b\xbf\x37\xee\x1a\xe2\x6b\xdc\xdd\x03\x1f\x19\x73\x20\x88\xb9\x47\x3c\xd5\x6b\xfc\x3d\x80\xe1\xc0\xe2\xe1\xa7\x50\x1c\xfe\xfe\x1b\x86\x25\x85\x86\x88\x75\xb2\x62\x19\xfb\x07\xf1\x4f\xe2\x5f\xf1\x7f\x10\xff\x04\xff\xfa\xbf\x7f\x00\xe7\x33\xf8\x27\xf8\x17\xd6\x74\x6f\x62\x62\xb1\x21\xee\x84\x22\x96\x53\x7f\x04\x4a\xe6\x81\x71\xe0\x45\xc9\xdc\xc7\xf0\xde\x92\xf9\x7f\x61\x24\x73\x39\xa6\x7a\x72\x38\x8c\xc3\x8f\x09\xe2\x38\x6c\x5f\x40\x74\x28\xc6\xb0\xc6\x4e\x56\xd8\xdf\x47\x0f\xf0\xcd\xfd\xb9\xd9\xab\x8a\xd8\xdf\xa7\x16\xf1\x47\x90\xd5\x46\x4a\xa3\x1f\xa0\x8f\xc4\xbd\x19\x3f\x4e\x61\x60\x08\xf4\x2a\x95\x41\x40\x7d\x94\x9e\x19\xe4\x39\xb9\x47\x2d\xbb\xa4\x36\x28\xcc\x7b\x99\xda\x00\xa0\x7e\x6a\x4f\x8d\xe4\x26\xb5\xbb\x91\x4b\x41\x2a\x5c\xea\xf6\xc0\x86\x92\x8e\xac\x39\x94\x11\xf6\x37\xf6\xf5\xeb\x5f\xe7\x77\xd7\x9a\x3d\x1a\x18\x9a\x72\xb2\xc4\x7b\xc6\xeb\x45\x10\xec\xf1\xe9\x58\xd9\x63\x3c\xba\x06\x79\x91\x0a\x70\x79\xf3\x7e\xc6\xe4\x11\x34\xa1\x6c\x23\x13\x5b\x41\x73\xab\xcd\x86\xbf\x33\xd4\x1f\x4e\xd8\x50\x6e\x15\x8b\x2e\xb3\xee\x93\x0f\x35\x5d\x23\x6d\x38\xb2\x31\x6d\x66\xa3\x21\x32\x0f\x37\x2f\xfb\xf2\x74\x36\x10\x9a\xb5\x93\xfc\x89\xcb\x95\xa6\x60\x92\x36\xd4\x66\xb6\x8f\x2c\x38\x0d\x66\xd6\xd7\x6c\xb6\x9c\x1e\x26\x40\x17\x3c\xb8\x4d\x54\x1d\x0e\x2d\xcc\x9a\x42\x5d\xbf\x44\x63\x1b\x53\x3d\x40\x4c\x80\xa6\xff\xb8\x21\x0a\xff\x2c\x2a\xac\x38\xfc\x09\xab\x83\x48\x6c\xb4\xb9\x10\xc8\x7c\xae\x6b\xce\x42\x11\x66\x6b\x53\x64\xd9\x70\x3a\xc7\x76\x3a\xe9\x7c\xc5\xde\x8c\x19\xba\x24\xf4\xda\x1c\x71\x1f\x6f\x7b\x93\xcb\xc7\x68\x3e\x4c\x45\xaf\x40\xf5\xcc\x4c\xa8\x37\xdd\x88\x95\x70\x7e\xc8\x95\x93\x75\xd1\x09\x2f\x13\x3d\xef\xa7\x72\x05\x2b\xe5\xca\x6d\xa1\xd8\x12\x0f\xdf\x85\xee\xf1\x7b\x52\x48\x66\x45\x8c\xb8\xc7\x4c\x68\xb1\xfb\x01\x5d\xa8\xa2\x97\x53\xc2\x66\x68\x63\xaf\xa0\xfe\xfb\xd7\x2b\x1c\x7f\xfd\xf1\xc3\x44\x43\x59\x87\x96\xe5\x37\x2b\x6f\x81\x2c\xd8\x04\x6f\x74\x94\x9b\x29\x78\x99\x33\x37\x61\x76\xe0\x2b\xd8\x32\x8e\xe9\xd6\x87\x3c\xc5\x31\x51\x1b\xd0\x9c\x00\xc1\xcd\xdd\x0c\x6e\xc0\x03\x34\x73\xcb\xc2\x82\x93\x2d\x11\xa9\xed\x29\xcc\x0f\x53\xda\x5b\x8c\x60\x95\x4e\x59\x4c\x61\x89\xde\x1d\x8e\xdc\x04\xe8\x6d\x86\x0e\xb0\x7c\xb7\xff\xd4\x94\x6b\xb4\xed\x33\x60\xaf\x6a\x9d\x07\xc7\x53\x3b\x9f\xcd\x0c\xae\x79\xfa\xcb\x84\xdf\xb5\x96\x5f\x9c\xd5\xb6\x2f\x57\xb4\xd9\xd1\xe3\xe0\x5b\x0a\xb2\xa1\xa6\x5b\xd8\xd8\x32\x66\xd2\x75\x65\xdb\xa7\x0d\x5f\x95\x83\x07\xc7\x93\xc3\xbe\x58\xe2\x0a\x6d\x27\x15\x0c\x0f\x59\x61\x50\xf1\x44\xf0\x83\x9e\x58\x4e\xf2\xc4\x6e\x00\xb1\xa7\x63\xef\xe5\x70\x1f\x86\x63\x47\x3c\xd6\xfe\x50\xc1\xe0\x1b\x98\x8c\xa5\x7d\x1c\x9b\xfc\xcf\x98\x08\xda\x77\x1f\x72\xdb\x2e\xe7\xca\xc3\x6d\x0f\xaa\xe3\x7d\xf5\x15\x77\x5c\xf0\x42\x5c\xc4\x03\x36\xd4\x07\xb2\xa1\xcd\xac\x60\x1d\x54\x11\x1a\xcc\x0d\x43\x0f\xbe\xeb\x2c\xb7\xab\xe8\x5a\x5f\x3b\xb7\x4d\x64\x21\x73\x75\xad\xc9\x2e\xce\xb6\x37\x03\x27\x4c\xd2\xde\xae\xb5\x9a\x9b\x86\x6d\xc8\x86\x7e\x95\x2f\x7f\x1f\xed\x95\x05\x41\x05\x99\x4e\x78\xe1\x05\x8a\x4b\x59\x46\x96\xa5\x2e\xf5\xc1\x55\x45\xf1\x18\x87\x9a\x8e\x94\x7b\xad\x3c\xd2\xaf\xa8\xd0\x75\xd3\xbb\x92\xed\x7f\xd5\x12\xaf\x2c\x49\xdd\x19\x17\x1f\xf7\x48\xf7\x7d\xdc\xb3\x2c\x47\x3b\xd4\xdd\xc4\xf1\x51\x43\xdf\x53\x8c\xbe\x38\x14\xde\xc4\x75\x39\x34\x06\x37\xbf\x31\x54\x9e\xac\x85\x45\xa6\x9b\xf7\xa6\x42\xe7\xe5\x7e\x57\xa6\x4b\xbb\xd9\x81\xec\xb2\xe2\x8c\x92\x2f\x0e\x92\x9e\x77\x30\x96\xa6\x7c\xa8\x1f\xba\x32\x3c\xed\x5d\xce\xd7\xaf\x3f\x7e\x5c\x9f\xae\x5d\xb7\x03\x6f\x29\xf2\x55\x71\x7a\x75\xba\xbf\x47\x1a\x53\x78\x6e\x33\xcc\x08\xe7\x2c\x39\x5f\x45\xeb\xab\x12\xbe\xd5\xc8\x2b\x5c\xbe\xd5\xc4\x9d\x2b\x07\x36\xb8\xac\xb7\xbe\xd3\xee\x26\xba\x43\xab\x1b\x18\x1d\x92\x34\xcb\xab\xe8\xc5\x24\xc3\xd0\x11\x9c\xed\xc7\x2d\x4d\x46\x83\xd9\xd9\x18\xed\xfe\x76\x3e\x6e\x1f\xcb\xdc\x06\xbe\x11\xfd\xac\xd0\xce\x7f\xf3\xa4\x5c\x22\xb0\x2a\xdb\xa1\x7a\xe0\xd4\xed\x63\xc9\xac\x98\x2c\x60\xbf\xff\x7e\x2a\xc1\xff\xfb\x1b\xc3\xff\xf8\xe3\x1e\xac\xa0\xe7\xf7\x52\xfb\x7f\x17\x82\x7c\x00\xde\x99\x50\x7d\xe0\x7d\x12\x77\x29\xbc\x69\x4c\xc1\x55\x01\x11\x98\x57\x70\xe1\xc8\x83\x63\xe9\x23\x4e\xec\x95\xd1\xf4\x5e\x4d\x45\x34\xe3\xe9\x1d\x2c\x1f\x35\xa2\x3e\xc9\xec\x8b\x63\xea\x1d\x6c\x97\xa3\xea\xb5\x07\x6e\x8c\xab\x67\x75\x34\x11\xea\xea\x5e\x3f\x4f\x49\x7a\x78\xaa\xe5\x79\xff\x3b\x13\xb8\x47\x87\xde\x67\xf2\xb7\x7b\x0b\x38\xa0\x0e\xb4\x97\xdd\x5c\xe1\xfa\x64\xe3\xda\x34\xee\xa7\x4c\xc4\xec\xcd\x00\xcd\x56\x48\x37\xe6\x28\x28\xb9\x69\x6f\x76\xd3\xa2\xa5\x6e\x5f\xb9\x39\x45\x36\xbc\x72\x6b\x37\x21\xbb\x76\xdb\xd2\x86\x33\x68\x2f\x4d\x14\x94\x87\xe3\x99\x3f\xfe\xf9\xaf\x63\xf4\xf2\xef\xff\x04\xc5\x2f\xff\xfc\x97\x5f\xe6\x68\x6a\x5c\x49\x99\x1d\x61\xcd\x8c\x19\xba\x19\x0d\x1d\x61\x5d\x82\xf1\x38\xd3\xa6\x68\x20\x19\xcb\x99\xe2\xe4\xb5\x39\x13\xce\x86\xc8\x3f\x67\x3b\x1f\x5c\x77\x92\xd8\x41\x1b\x22\xe5\xfa\x84\xcb\x5f\xe5\x16\xd6\xd6\xfc\x35\xbb\xae\x99\x4d\xd0\xf6\x5e\x36\xdd\xa5\xd5\x79\xf4\xf9\xc4\xbb\x57\xc7\x17\x96\x68\xaf\x70\x79\x9f\x97\xd9\xc5\x27\x9a\x72\x27\x37\x79\x12\xcd\x5d\x1b\xb7\xbc\x0d\x4f\xce\x88\x1f\xa4\x86\xee\x8e\xa3\xab\xb7\x6f\x05\x53\x4e\x70\x34\xbb\x9a\x05\xd0\x64\x74\x6d\xe0\x75\x6e\x62\x8a\xb1\x94\x74\x84\xcd\x4d\x24\x6b\x4e\xa2\x20\x68\x6d\xe4\x4a\xec\x1b\xb0\xc7\xea\x81\x65\x22\x5f\x0a\x5a\x53\xf6\xbd\xb5\x2f\xd4\x7c\x64\x0c\x72\xbb\xcb\xa9\x8f\xbd\x53\x03\xda\x10\x9b\x37\xd2\xf5\xa7\x89\xd1\xd3\x64\xfd\x73\x53\xd5\xe8\x98\x78\xb0\x44\xf6\x26\x53\x37\xa7\xb8\x8f\x30\x79\x35\x94\x8b\x8c\xcd\x87\xab\x8c\x6f\x32\x7a\x27\xee\x08\x66\x35\x05\x6d\x88\xa9\x86\xf9\xc8\xa2\x2c\x96\x12\x9a\xc2\x1d\x1e\xaf\xc1\xbd\xb2\x18\xfa\x02\xc8\x5b\x8b\x8a\x8f\x80\xcd\x95\x1b\x62\xbd\x89\xe5\xca\xcd\xca\xc5\xc2\xa2\x13\x59\x36\xb0\xdf\xbf\x12\x03\x6d\xa6\xd9\x1a\xd4\x07\x6e\x11\xdb\x9f\xd6\x42\xff\xfa\x0d\xfb\x0a\x70\x82\xff\x4e\xe0\xdf\x71\x16\x23\xf8\x1f\x14\xf9\x03\xa7\xff\x24\x09\x9a\x26\xd9\x18\x0e\xbe\xfe\xf1\xd7\x63\xd0\xc1\xc0\xdd\x31\x76\xd6\x5b\xd2\x76\x60\x1b\x9a\x72\x13\x13\xa0\x39\x8a\x7f\x06\x13\x39\x58\x5a\xe8\x10\x1e\x0d\xb4\xd9\xc5\x2e\xb5\xdb\xf8\x78\x8e\x21\x9f\xc1\x47\x0d\xa0\xa2\x0c\xfc\x69\xd7\x9b\x38\x48\x8e\xa3\x9f\x92\x1e\x3d\x70\x83\xb1\xfd\xbc\xd0\x29\x47\xb8\x89\x82\x62\x69\xfe\x29\x36\x98\x3d\x0a\xcf\x33\xde\x47\x41\x03\x8e\x7a\x06\x03\xeb\x0e\x19\xdb\xc7\x99\x60\x68\x92\x79\x4a\x4e\x9c\xd3\x17\x70\x38\x34\xd1\x10\xda\x86\x79\xbb\xab\x59\x9c\xc2\x9f\x52\x2d\xee\x4c\x46\xde\x36\x8e\xfb\x6c\xb0\x34\xcb\x3f\xc5\x06\xef\xb0\xe1\x66\xe4\x07\x1b\xc5\xbc\x0d\x9d\xe3\x59\xf0\x0c\x74\x02\x77\xc0\x7b\xbd\xe0\x04\x03\x37\x11\x70\x04\xc7\x70\x4f\x21\x20\x4e\x11\x1c\xa6\xec\x3b\xfb\xbf\x8d\x88\x26\x9e\xea\x0e\x02\x9c\x75\x84\x97\x24\x71\x4f\x63\xb8\x89\x88\x27\x28\x9a\x78\x0a\x13\xe9\x72\x73\xc8\x2d\xdd\x56\x2c\x9e\xc5\x79\xe6\x29\xf8\xd4\x40\xd5\x36\xfb\x4d\x4e\xc6\x54\x1f\xa8\x1a\xd2\x6f\x3b\x46\x9e\xe3\x9e\xb3\x3f\x82\xde\x2f\x0c\xee\x17\x6c\x36\x37\xd9\xa0\x70\x9c\x65\x9f\xf2\x21\x04\x33\xd0\x66\x43\x64\xd9\x83\xcb\x25\xa1\x3b\xa8\x00\x78\xce\x14\x09\xf6\x2c\x08\x70\xd6\xde\xe0\xed\xa1\x84\xc2\x49\x9e\x7a\x8e\x1f\xee\xa0\xbd\xaa\x61\xee\x03\x85\x9b\x38\x08\x9c\xa3\x9e\xeb\x15\xde\x55\xaa\xdb\x60\x01\xa0\xc0\x53\x1a\x05\xf0\x00\xd2\xef\xdb\x20\x05\x28\x1e\x7f\x0e\x11\xb1\x37\x74\x13\x4d\x8d\x15\x1a\xbc\x21\xd3\x38\x24\x2c\x8d\x99\x65\x9b\x50\xbb\x33\xe8\x52\x80\x3b\x1a\xcc\x95\x18\xe8\x66\x89\xcf\xb3\x41\xd0\x45\x99\xcf\x9e\x1d\xe2\x1b\xf6\x35\x93\xe8\x66\x6a\xf9\x4e\xbb\xd8\xa9\xf4\xb2\xe9\x62\xbb\x59\xe8\xb4\xe9\x74\x26\x2b\x90\xc5\x72\xaf\x07\xf2\xb5\x42\x89\xad\x08\x79\xa1\x25\xd6\xd2\x2d\xa6\x58\x4d\x36\xc4\x74\xbb\x5b\x29\xfb\x45\x76\x15\x09\xd8\x21\x49\x76\x0b\x19\xa6\x5e\xa6\x2a\xe5\x9c\x58\x4d\x96\xca\xe9\x04\x4b\x02\x81\x22\x99\x3e\x5d\x2d\xa7\x1a\xf5\x62\xa6\x53\x60\x33\x89\x62\xb2\x54\x2b\xe6\xd2\x15\xaa\xc1\x8a\xbd\x4e\xbb\xf5\x30\x12\x72\x87\x44\xa0\x3b\x89\x6a\x4f\xa0\x7b\x54\x47\x10\xb3\xdd\x4e\x1d\xb4\x0a\x15\xd0\xaa\x50\x89\x56\x26\xdb\xaa\xb1\x94\xd8\xaa\x16\x2a\x65\x50\xcb\xb6\xa9\x4e\x3d\x5b\xc9\xd5\xcb\x85\x42\xf6\xa2\xf3\xaf\x22\xa1\x1c\x4e\x00\x59\x4b\x83\x6c\x4b\xa4\x81\x50\xea\xb6\xd2\xad\x2c\x29\xf4\xf2\x42\xb7\x9b\xe9\x76\xdb\xa0\x9d\xed\xf6\x7a\x75\x46\xec\x75\xc5\x66\xb5\x90\xea\xf6\x1b\x42\x87\x61\xbb\x15\xea\x61\x24\xb4\x83\xa4\x56\xed\x65\xb2\x54\x81\x66\xbb\x89\x94\x58\x2e\x14\xba\x34\x5d\x48\x35\x3b\x95\x66\x81\xee\xa4\x3a\xf5\x5a\x25\x0b\x8a\x59\x31\xd5\x25\xc5\x42\x3b\x57\xab\x17\x4b\x62\x23\x93\xc8\x3c\x8c\x84\x71\x3a\xbe\x5e\xed\x65\x73\x45\x90\xcc\x91\xe9\x72\x8d\x4a\x74\x8b\xe9\x52\x39\x55\x4c\xe7\x5b\xe5\x6a\x0b\x64\x7b\x64\xbf\x94\x6e\x64\x2b\xe5\x56\x52\xac\x08\x8d\x0e\x5b\x4b\xb2\x95\x2e\xc8\x7e\x0d\x5b\x5c\xb7\x9b\xe4\xdc\xd1\x5a\xaf\xe0\xfa\xb8\x57\xe2\x4f\x0b\xdd\x2e\x3c\xfb\x86\x31\xdf\x30\xdb\x5c\xa2\x07\x6c\xe9\xb2\xa4\x2c\xb4\x25\xb9\x73\xf0\x53\x3b\x92\x4d\xa4\x68\xf6\x00\xea\xf3\x11\x9c\x2d\xa7\xd4\xce\xfa\xc5\x56\xfd\xeb\x7b\x74\xe7\x39\x76\x70\x05\x7b\xab\x91\xfa\xfa\x1e\x1a\x7b\x8e\x7d\x67\x79\x33\x68\x6b\x2b\xb4\x43\xe6\xfc\x3f\x5c\x11\x5b\x34\xea\x71\x96\xe8\xf8\x86\x91\x8f\x2a\x47\x50\xe9\x57\x58\xed\xd8\x97\x7f\x9d\x88\x08\xd0\x2c\xc3\x73\x38\xcb\xb1\xe4\x37\x8c\xf8\x86\xed\xfa\xec\xdf\x5f\xdc\x71\xe3\xcb\x0f\xec\x0b\x41\xfe\x89\xbb\xd7\x97\x6f\xd8\x97\x63\x81\xe1\xee\x9e\xd8\xaa\x1f\x7f\xb4\xb7\x73\xe7\x47\x7f\x87\x1f\x5b\xb8\x85\x86\xbb\x36\x61\xf5\xee\xcb\x7f\xae\xf5\xbd\x9f\x33\xe0\xe3\x0c\x38\x12\x3f\xe7\x0c\xbf\xce\x59\xab\x91\x0a\xcb\x59\x38\x9d\x0e\xcf\xd9\xee\x9f\xcb\x9a\x9b\x2e\x75\xa8\x08\x39\x74\xee\x38\xda\x87\xd6\x5f\x7e\xec\x40\x7f\xb1\x0c\x5d\x19\x5c\x13\x9a\x64\x2c\x87\x23\x7b\x70\x4d\x5b\xdc\x67\x83\x04\x7b\x72\xe7\x96\x74\xf7\xf0\x83\xb4\xee\xec\xde\x2d\x20\x27\xb8\x22\xe8\x27\x3f\xe6\x8f\x54\x6a\xc2\xd7\xf5\x54\x50\xd7\x87\x0c\x68\x1e\xe8\x7a\xf2\x76\xd7\xe3\x77\xba\xde\xeb\xb7\x57\xba\xde\xd3\x9e\x57\xbb\x3e\x64\x3f\xdd\xea\xfa\xf7\xb6\xfa\x83\xa7\x26\x08\x9e\xe1\x83\x3d\x35\xfd\x27\x47\xfd\xc2\x9e\xda\xe3\x2c\xc8\x53\x83\x5f\xdb\x53\x7b\x9c\xbd\xa3\xa7\x26\x02\xcc\x15\xdc\xf3\xd4\xe0\xbd\x3c\xf5\xbe\xa1\x1b\x7d\x45\xef\x83\x9f\x77\x98\x5e\x0f\xbc\xa3\xc3\x0c\xea\x81\x33\x11\x5f\xf6\x00\xb8\xe2\x30\x2f\xc5\x17\x89\x33\xfc\x69\xbe\xcb\x6f\x07\xf4\xfb\xd9\x01\x78\xbe\x17\xce\xbc\xe6\xf3\xbd\xf0\x6c\x34\xf2\xf3\x83\x07\xaf\x17\x98\xf7\xb3\x85\xa0\x5e\x38\x13\xf3\xf3\xde\xe8\x85\xe0\xe1\x61\x6f\xf4\x01\x3d\x40\xb0\x04\xcb\x73\x2c\x09\x38\x22\x78\x0c\xc7\x7f\xcd\x49\x09\xe5\x63\x2d\x70\xba\xf5\x6b\xb2\x76\xec\x35\x96\x64\xd9\xe7\x7b\xed\x13\x87\x5e\xb4\x8f\xb5\x67\x7b\xed\x13\xb3\x06\xf6\xac\x71\x04\x75\x2d\xb3\xf1\x8b\x2a\x24\xe5\x63\xed\xbf\xc8\xd6\xc8\x03\x6b\x34\x7d\x6d\x96\xf3\x8b\x2a\x24\xed\x63\xed\xbf\xc8\xd6\x76\x1e\x12\x70\x1c\xc5\xe3\x34\xcf\xd1\x6e\xaf\xe1\x0e\x6f\xba\x36\xd5\x1c\xd6\x78\x00\x48\x92\x05\x38\xc9\x70\xf4\x9f\x14\xcb\xd2\x1c\xce\xfe\x52\x9a\x09\xf6\x3c\x12\x38\xbe\x1f\xbb\xff\xdb\x78\x24\x0f\x3c\x52\xc4\x7e\xa4\x0b\xc5\xe3\xaf\xa0\xab\x04\x07\xf6\xe3\xc2\x7f\x1b\x8f\xd4\x37\x8c\xa3\x39\x9e\x27\x39\x86\x73\x9d\xa8\xcb\xa1\x65\x43\xd3\xd6\x66\xc3\x81\x04\x75\x38\x93\x91\xdf\xe7\x3c\x8c\x80\x39\x47\xf0\xa8\x2b\xf3\x05\xe2\x61\xf9\xd9\xf5\x9a\xcb\x90\x7b\x30\x8a\x37\xf9\x76\x17\x41\x06\x13\xb4\xfd\x18\x6b\xa1\x3d\xaa\x28\xc0\x7a\x4e\xef\x9d\xa4\xec\x21\x78\x6f\x29\xfb\xf8\x79\x50\xca\x1f\x60\xaf\x2e\x55\x0c\xe7\xb9\xdd\xf7\x92\xb2\x8b\xe0\xbd\xa5\xec\xe3\xe7\x31\x29\x87\xcd\x8d\x3c\xe3\xf9\x1d\xaa\x68\x9c\xf7\x1c\xff\x3b\x49\xd9\x43\xf0\xde\x52\xf6\xf1\xf3\x98\x94\x43\x16\x69\x3c\x15\x43\xb8\x54\xd1\xb8\x37\xf4\xbc\x97\x94\x5d\x04\xef\x2d\x65\x1f\x3f\x0f\x7a\x8c\x90\x19\xa6\xff\x3c\x50\x93\x14\x74\x3a\x48\xd8\xa5\xf2\xfd\x09\x21\xa7\x85\x29\x0a\x47\x31\x24\xc9\xaa\x0a\x8f\x00\xcb\x50\x24\x4f\x51\x8c\x02\x20\x4d\x01\x55\xe2\x59\x49\x66\x20\x24\x18\x1a\xc7\x11\x54\x68\x59\x61\x10\x4f\x00\x8e\x65\x59\x59\x41\x0a\x22\x70\x56\xfe\xba\x83\x81\x10\xcf\xb0\x12\xc5\x49\x32\x4e\xab\x48\x61\x01\xae\x50\x40\xc1\x71\x96\x20\x39\x85\xe3\x65\x05\x47\x38\x43\xb2\x8a\xa2\x52\x14\x8f\xb3\x08\xec\xe2\x31\x92\x51\x70\x85\x95\x19\x8e\xf9\xea\xf4\x2b\xf0\x55\x70\xb1\x4e\x05\x17\xe3\x2f\xec\x62\xbd\xc2\x2e\x86\xe7\x19\xfa\xfe\x5d\x6f\x71\x91\x64\x59\xe6\x1b\x46\xec\xfe\x8f\x5f\x5c\xdf\x30\x82\x77\xfe\x7a\x7f\x0e\xbf\x1e\x3e\xec\x68\x13\x04\x41\x48\x95\xd9\x79\x9f\x6d\x14\xd7\xe9\xb8\x2d\x0f\x89\x24\x2e\xc8\xcd\x71\x6f\x56\x4e\x0d\x7b\x24\xa9\xd6\xf3\x89\x58\x3e\x9f\x4e\x49\x35\x82\x83\x99\x14\x9d\x17\xd6\x80\x43\xa9\xe4\x34\x05\x88\xe6\x72\x53\x35\x67\x1d\x26\xd3\xe7\x8d\xba\x54\xce\x4c\xaa\xa3\x5c\x5c\x81\x53\x7e\x48\x6c\x4b\x3b\xd0\x42\xb7\x6f\xd3\x85\xa1\x70\xb8\x90\xd0\x2e\xbe\x6d\x56\xeb\x37\x61\xb2\x6e\x25\x48\x66\xb9\x5d\x76\x19\xa2\x92\x78\xdb\xf4\xf3\x96\x56\xd3\xe3\xbd\xba\x91\xcd\xb0\x7a\xaf\x00\x46\xa6\xb4\x7e\xab\xb2\x3c\xdf\x5b\xa9\x85\xa9\x12\xaf\x4c\x09\x4a\x95\x01\x5f\x45\x85\x59\xab\x27\x8c\xf8\x22\xdf\x4a\x34\x28\x3b\x5b\xa8\xed\x20\xf7\xca\x54\x11\xbe\xcd\x41\xed\x88\x4c\x50\x2c\xe1\xfc\x4a\xed\xfe\xf4\x85\x2e\x41\xd5\x04\x21\x85\xe7\x85\x5f\xed\x72\xb5\x8a\xf8\xe6\xec\x18\xba\x62\xfe\x7e\x8b\xa0\xa3\xd1\xe6\xaf\x32\x0e\x09\x12\x70\x32\x64\x54\x45\x92\x54\x1a\x92\x94\xa4\x90\x04\x04\x2c\xab\xd2\x2c\xcf\x12\x94\x2a\x11\x9c\xc2\xd3\x12\x89\x53\x08\xe2\xb2\xc2\x49\x8a\xc4\x2b\x32\x8b\x38\x4e\x55\x28\xb7\x98\x86\x0c\x56\xee\x6b\x3a\xcf\x92\x1c\x4b\xdc\xbb\x09\x08\x8a\xa5\x38\x92\xa1\x38\xfc\x96\x3d\x30\x0f\xda\x43\x29\x39\x2a\x19\xdb\x69\x5c\x5a\x11\x06\xbe\x6a\x66\x34\x25\xde\xa6\xe5\x56\x6c\x33\xee\x77\xde\x12\x15\xa3\x04\x8a\x80\x26\xb3\x4c\x2e\xde\x6a\x4a\xf5\x49\x7c\xd3\xad\x8c\x60\x03\x2c\x32\x1b\x92\x4d\x67\x47\xe5\xb7\xf5\x14\x8d\x57\xca\x54\x59\xae\x8d\x86\x42\xad\x69\x4e\x13\x58\xce\xe9\x3f\xc7\x1e\x4e\x54\x54\xd7\xca\x19\x39\x91\x4d\xf4\xd9\x74\x2d\x35\x17\xf0\x59\x8c\x64\xf5\x8d\xa2\xa8\x6c\xce\xa4\x27\x7d\xa2\xc6\x2e\x66\x72\x7d\xb6\x79\xeb\x4c\x8a\x05\xa9\xd0\x4c\xc9\x00\x6a\xeb\x4e\x72\x36\x4c\x0a\x09\xa3\x98\x61\x87\xf2\xcc\x62\x6c\x19\xb1\x22\xa7\x4c\xc4\x95\xf4\xa6\xe5\xfb\x0e\xe4\x56\x80\x3d\xf4\xfd\xea\xf4\xdf\x60\x0f\xa4\x33\x3c\x3f\x61\x0f\x54\x34\xba\xfc\x95\x67\x01\x2d\xc9\x8a\x22\xa9\x0a\x02\x10\xb0\x3c\xab\xb0\x34\x29\xb3\x24\x4f\x23\x85\xe1\x38\x1c\x47\x94\xa2\x02\x16\xf1\x80\x94\x20\x4f\x01\x1e\xd0\x34\x43\x22\x92\xa5\x09\x16\x72\xbb\x51\x86\x72\xfe\x05\xe8\x36\x75\x55\xe5\x69\x1c\xe7\xae\x1b\xc4\xfe\xae\x9b\xc2\x62\x78\x82\xa3\x6e\x59\x04\xf9\xa0\x45\xe4\x65\x7d\x55\x06\x71\x52\x33\x66\x3a\xaf\x34\x37\x6f\x3a\x22\x8c\xa1\x40\x97\xb9\x19\xd3\xa8\x30\x7a\x72\xa2\xb7\xc7\x14\xd9\xea\x2e\x4a\x89\x4a\x01\xa1\x18\x3f\x19\x16\x26\x69\x00\x7a\x93\x2e\x5b\xef\xe4\xd3\xcd\x54\xcd\xa0\xb2\xb8\x60\x12\xfd\xd6\x7a\x64\x25\x60\x7e\xa8\xba\xc3\x82\x63\x11\x27\x3d\x5a\x1a\x67\x2a\xad\xe9\x7a\xd8\x63\x17\x75\x09\x6f\xdb\x64\x6b\x59\xa7\xfb\x8b\x29\xa2\x27\x60\x31\xce\x72\xec\x22\x3b\x12\xea\x68\x8d\x2f\xd6\x70\xa8\xf7\xd5\x9e\x3d\x4d\x4d\x93\x31\xc6\x10\x52\xfa\x96\xa3\x38\x32\x06\xda\x53\x5b\x15\x49\x88\x37\x1a\x7c\x36\x9b\xa7\x34\xad\xed\xa0\xaa\x05\x58\x44\xab\x15\xa4\x55\xbf\xb8\x45\x50\xcf\x5a\x04\x19\x8d\x36\x7f\xc5\x29\x44\x22\x09\x41\x95\x57\x08\x89\x43\xb8\x4a\x53\x34\xa7\xd0\x24\x4e\x30\xbc\x8a\x70\x85\xe3\x55\x42\x52\x15\x85\x95\x14\x4a\x91\x39\x85\x92\x70\x9a\xa3\x24\x40\x32\x0a\xc1\x22\x82\xbe\x65\x11\xe4\x55\x9d\x67\x28\x8e\x67\xef\xde\xf5\x32\x9f\x04\xc7\x71\x37\x2c\xe2\xd1\x90\x49\x68\x8e\x99\x98\x49\xe3\xd2\x78\xc8\xb7\x3a\xe5\xd6\x3a\x3d\x8f\x0f\x41\x9e\x93\xe2\x0a\xe2\x9b\xf2\xb8\x65\xa5\x47\xc5\x1c\xc0\xbb\x54\x7b\xbc\x7c\xd3\x8b\xba\x50\x55\x63\x84\xb5\x6e\x01\x75\x43\x40\x7b\xd9\x54\x09\x75\x5b\x41\xe9\x4d\x8a\x1f\x6f\x8c\xa6\x3d\xca\x76\x13\x73\xc3\xe9\xc0\x9d\x41\xe4\xd7\xbb\x4f\xb9\xc3\x1f\xc1\xd1\xd9\xe3\x8f\xc2\x5a\xa8\xd6\x26\x6e\x87\x6f\xd9\x5a\x17\x55\x26\xb5\xda\xb0\x95\x19\x66\x6b\x13\x19\xc6\x16\x4a\x79\x99\x4d\xf5\x97\x1d\x31\x39\xb1\xc5\x7e\xaf\x92\x49\xae\x97\x69\x2d\xbe\x8a\x1b\xcb\x55\xc1\x5c\x51\x1c\x5e\x6f\x16\x67\xa5\x54\x3a\x5b\xef\x94\x96\xeb\x58\x01\xc4\xd3\x5a\xb3\x94\x48\x0d\xdf\x66\xb1\xf6\x38\x1b\x73\x0c\xa6\x14\x60\x30\x15\x31\x48\xe9\xfe\xff\x66\x30\x20\x1a\x65\xff\xca\x90\x0a\xcf\xa9\x34\xc9\x20\xc4\x70\x0a\x21\x01\x56\xa2\x25\x8e\x57\x01\x09\x55\x9a\x24\x08\x89\xa5\x19\x1e\x02\x4a\x85\x2a\x41\xe1\x24\x54\x70\x89\x06\x12\x43\x92\x12\xce\x4a\x88\xe7\xbf\x3a\x45\x1a\x74\xa0\xee\x83\xab\x26\xc1\x32\x2c\x77\xf3\xe6\x6e\x04\x71\x33\x79\x14\xcd\x83\x1b\xe6\x42\x5f\x31\x17\x77\xc6\xec\x88\x37\x53\xed\x8f\x89\xf2\x92\x36\x70\x29\xcf\x76\xa8\xd9\xb6\xb2\x6a\x6d\x32\x64\x7b\x6e\x4c\x62\xab\xb4\x50\xb1\x93\x44\x01\x94\xd8\x04\xcb\xf4\x47\x33\x55\x12\x53\xf3\x6c\xb5\xa7\x50\xf4\xac\x26\x37\xd9\xee\x44\xcd\x95\xd6\x8d\x2e\x3f\x4c\xa7\xf8\x98\xda\x81\x36\x4b\x30\xb5\x5c\x47\x76\x40\x3b\x96\x72\x32\xb9\xa8\xf1\x53\xae\xd8\xc8\x70\x12\xdd\xc1\xa5\xe5\x46\xb4\x17\x96\xdd\xae\xbd\xb1\xb9\x76\x3c\x6b\xa6\xa6\x19\xd1\x56\x04\x6a\x9a\x14\x53\xdd\xf5\x1c\x0c\x27\x06\x80\xbd\xca\x78\x9b\xe1\x3b\x65\x9d\x49\x0a\x59\xa3\x44\x13\x85\x4d\x3e\x5d\xe0\x87\xb8\x51\x59\x16\xc9\x89\xc5\x69\x5d\x07\x7e\x2e\xc0\x12\xb2\x78\x90\x36\xed\x2d\x41\x10\x12\x93\x77\x55\xdb\x77\xb8\x5c\x6d\x7a\xce\x12\x88\x68\xb4\xd8\x39\x2b\x01\xf3\xf4\x86\xe0\x59\xfc\x3b\x4e\x7c\xc7\x09\x0c\xc7\x7f\x38\xff\xae\xaa\x2b\x8f\x13\xe4\xf5\x60\x69\x7f\x97\x02\x3c\xc5\x33\x2c\xe0\x6f\xcd\x97\xef\xaa\xf2\xa7\xbc\x12\xdd\x82\x46\x6d\xe3\xdb\x46\x21\xc1\xa6\x66\x29\x3e\x0b\xf0\xcd\x38\x11\xb3\xf0\xa1\x6d\xad\x73\xeb\x37\xa2\xab\x34\x3a\x3d\x98\xc8\xc3\xb4\xa3\xca\x62\x80\x2a\x07\x5f\xbf\xb8\x2a\xe3\xa7\xaa\x7c\x27\x21\xf5\xc0\x99\x99\x61\xf3\x53\x57\xce\xa9\xb8\x56\x2a\x0e\xae\xd8\xdd\x1d\x30\x17\x9b\x0d\xc2\x81\xf1\x57\x2f\x87\xa4\x86\xf2\x17\xd4\x86\x03\x43\x1f\xc0\x30\x38\x43\x87\xa6\x86\xf1\x81\x09\x49\x0d\xbb\xcf\x33\x50\x38\xed\x24\xdf\xc3\x81\xe1\x0e\x60\x28\xc6\xc9\x2e\x87\x03\xc3\x1f\xc0\x70\xac\x53\x81\x11\x0e\x0c\x81\xfb\x0a\xc2\xa8\x90\x70\x2e\x6a\xe6\x42\xc2\x01\xbe\x52\x27\x3a\x24\x1c\xd2\x5f\x0d\x16\x12\x8e\xbf\x88\x27\xac\x7c\x68\x7f\x31\x50\x48\x38\x8c\xaf\x3c\x25\xac\x7c\x58\x1f\x9c\x90\x46\x41\x70\xfe\x9a\x92\x90\x70\x78\x5f\xdd\x46\x58\x3f\x88\xfb\x6a\x23\x42\xf2\x05\x2e\xea\x0f\x42\xc2\x01\xe7\x6b\xe2\x4c\x48\x30\xe4\x39\x98\x90\x5a\x08\xa8\xf3\xb5\xe3\xb0\xd4\xf8\x96\xa0\x43\xea\x20\xf0\x2d\xe9\x86\xa5\x86\xf5\x2d\x3d\x87\x04\xc3\xf9\xd6\x22\x43\x82\xe1\xcf\xc1\x84\x64\x8a\xc4\xcf\xd7\xec\xc2\x82\x21\x7c\x2b\x8d\xd1\x1c\xa1\x1d\xc9\x46\xdb\xdb\x87\x6f\x7d\xc3\x76\xb4\x3f\xb6\xf3\xf6\xca\x49\xd2\x2f\x47\x6c\xa7\x1a\x7f\x1a\xa2\x1d\xbe\xb8\x4b\x31\x84\xbb\x78\x6b\x1b\x2f\xad\x4e\x7f\xc3\xbe\xa8\xa6\x31\x7d\xb5\xba\x7f\x0e\xed\xd1\x97\x1f\xd8\x3f\xff\xf5\x0d\xfb\xb4\x9b\x83\x9d\xca\x7e\xf7\x38\xec\x2b\xbb\x12\x15\x64\xd9\xda\xcc\xd5\x8e\xa9\x36\x73\x1a\x9c\x6f\xc2\x71\x1f\x0f\xde\x08\x75\x72\xef\xf6\xa6\xc3\x93\x86\x91\xd4\xef\xbd\xc3\x39\x15\x57\x95\x71\x1f\xa1\x1f\xbe\x70\x9f\x57\x19\xff\x7d\xa5\x80\xc1\xa7\xa4\x9f\x6a\x5f\x64\xa0\x92\x82\x3b\x4a\x0a\xfe\xa7\xa4\xe7\x4a\xea\x4d\xdc\x0e\x5f\xa8\xcf\xab\xa4\xe7\xca\xf8\xa9\x2a\xbc\x03\x75\x91\xbc\xe7\x30\x71\xfc\x7f\xda\x78\x08\xe7\x4f\x26\xee\xc7\x2f\x8c\xa3\x8d\xae\x32\x3a\xe7\xba\xb9\x3d\xcf\xe3\xce\xff\xbe\x9c\x29\x04\x38\xb3\x6d\xf7\xa4\xfd\x1d\xf3\xff\xfe\xe2\xec\x2a\x25\xbe\x61\x5f\x76\x62\x27\xf0\xff\x9c\xef\xb1\xc3\xbf\x61\x5f\xdc\x53\x6b\xaf\x6c\x0b\x3d\xbd\x77\x53\xf6\xee\xd1\xb8\xd7\x77\x3d\x9e\x02\x8a\xac\x6f\x22\x3e\xdb\xe9\x7a\xdf\xb8\xd9\x90\xe3\x17\x10\xdc\x37\x1c\xe9\x5c\xbe\xbe\xa1\x6e\xf5\x0d\xe3\x75\x0d\x7d\xaf\x67\x02\x36\x20\x9e\xc9\xdc\xbf\xc7\x31\xb0\x43\xee\x77\x5d\x24\x25\xe6\x1f\xda\x37\x6e\x8a\xe9\xf8\x85\x0b\xee\x1b\x96\xe1\x01\x89\x73\xbe\xbe\x61\x6e\xda\x0d\xf9\xc1\x76\x13\xba\x0f\xa3\x36\xaf\x5f\x59\x2d\xce\x33\x7d\x87\x2f\xb8\x3b\xb8\x9f\x8e\xed\x2f\xec\x16\x3f\x8e\xed\xe1\x25\xfc\x89\x77\xda\xbd\xc3\xb9\x5a\xd7\x7b\xca\xcb\x81\x1e\xbe\x30\xef\xd4\x53\xe1\xe3\x9b\x4f\xbc\xbb\xee\x1d\xce\x5f\xbb\xda\x53\xfb\x5d\xb0\x87\x2f\xe0\xb2\xa7\x5e\x88\x75\xff\x67\x53\x91\xd9\xd4\x7e\xe7\xeb\xe1\x0b\x77\xd9\x53\x91\xcc\x6c\xfe\x67\x53\xe1\x6d\xea\x6c\x65\xe2\xf0\xc5\x9d\x84\x32\x8f\xed\x26\xb4\xcd\xa5\x65\x23\xf4\xaa\xd5\x38\x60\x8c\x97\x8f\x50\xf9\x1c\x36\xf6\x01\x11\xc6\xd9\x1e\xde\xc3\x17\xfc\x27\xf7\xdc\x0b\xae\xf7\x73\xf4\xdc\xfb\x4f\xb5\xcf\x77\x26\x1f\xbe\x30\xa1\x7b\x2e\xbc\xff\x3b\xed\xb9\x17\x5c\xf1\xe7\xf0\x96\x11\x1f\x4d\x7c\xbd\xe7\xbc\xf5\xce\xc3\x17\xf0\x93\x7b\x2e\x32\x6f\xf9\xb3\x7a\xee\xfd\xbd\xe5\xe9\xd2\xf0\xe1\x33\x77\xb2\x73\x51\x5d\xce\x94\xfd\xf9\x5d\xe1\xce\x6c\x76\xe4\xe2\x9e\x9c\xfc\xf2\xb4\xf7\xee\x36\xca\x17\xcf\x96\x7e\x46\x6a\xde\x12\xf6\xe1\x33\xf5\xbe\x52\x7b\x21\x01\xfc\xa9\xa4\xe6\x2e\xb5\x1f\x3e\xe3\xef\x2a\xb5\x17\x3c\xc0\xa7\x92\x9a\x57\x12\x70\xf8\xcc\xbc\xab\xd4\x5e\x18\xf1\x3e\x97\xd4\xdc\xd2\x85\xc3\x67\xf0\xbe\x16\x1a\x3e\xc2\x7b\x77\xa9\xdd\x29\x83\x08\x78\xfb\x73\xd8\x12\x08\xef\x0d\xd0\x81\xe5\x0f\xf8\xd5\x2d\xcd\xe4\x7e\x06\x4c\x90\x87\x0a\x6a\x77\x0f\xf4\x49\x49\xb5\x6d\x2e\x91\xbb\x01\x9d\x70\x77\x83\x52\x0c\x41\x30\x1c\x83\x53\x14\xc1\xb3\x04\x4f\xb3\x2c\x7b\x45\x43\x02\xa9\xf2\xd6\xc1\xaf\x53\x45\x1c\x88\x00\xc7\xba\x6e\x97\x58\x12\xec\x7f\x50\xa1\x6e\xed\xc8\x22\x5c\xd2\x7c\x34\xf1\xdc\xad\x12\xb0\x5b\x64\x11\x57\xc9\x3a\x24\x76\x08\xda\x5b\xf5\xde\x1f\x04\x70\x42\x96\x2b\x2c\xda\x09\xbf\x40\x20\x59\x0f\xa9\xc5\xfd\xf7\x18\xbf\xa0\x28\xc1\xaf\xa7\x0b\xac\x6f\x06\xd7\xeb\xfa\xee\x02\x02\x3e\x40\xd7\xea\xb3\xee\x02\x22\x7d\x45\x13\xa1\x01\x51\x3e\x40\xa1\x59\xf3\xaf\x90\x87\x06\xc4\xf8\x00\x85\x66\xed\x62\x95\x34\x2c\x20\xce\xbf\xa4\x17\x16\xd0\xc5\xfa\x53\x58\x40\xe7\x15\xcf\xf8\xf5\x5a\xca\xfb\x90\x2e\x16\x3f\x42\x43\x02\xbe\xe4\xfc\xb5\x8a\xca\xfb\x90\x48\x7f\x9a\x3f\x34\x24\xca\x97\x86\x0e\xad\x95\xe7\xb5\xcf\xe0\x15\x89\x33\xbe\x84\x6b\x78\x39\xb1\x3e\x48\xa1\x4d\xe5\xbc\x02\x9a\x7a\x45\xe2\xbc\x2f\xd5\x15\xde\x57\xe2\xbe\xd4\x4b\x68\xee\xce\xeb\xa0\x5f\x31\xe0\xb3\x4a\x68\xee\x7a\x45\xeb\x7d\x40\xe4\x39\xa0\xd0\xda\x74\x56\x0d\x4d\xbd\x42\x91\x6f\x02\x19\x5a\x2b\xcf\x2a\xa2\xf1\x57\x28\x62\x7d\x93\xb3\xd0\x80\xb8\xf3\xf9\x4a\x78\x8a\xf8\x73\x40\xe1\x87\x6f\xfc\x7c\x2e\x10\xda\x48\xce\x6a\xa3\x81\xcb\xda\x73\x6f\xf9\x7d\xcf\xea\xe8\x7b\x6f\xec\x7d\xa6\x3e\xfa\xf4\xad\x82\x51\x47\x7d\x47\x79\x7e\x65\x28\x04\x19\x45\xe6\x71\x1e\x97\x39\x85\x00\x00\x10\xac\x4c\x41\x19\x97\x49\xc8\x03\x96\x52\x19\x1a\xa7\x48\x99\x07\x10\x57\x24\x46\x41\x1c\x45\xb3\x00\x71\x0a\xc5\xcb\x0a\x4e\x03\xc6\x7d\x13\x17\xf1\x4a\x9a\xfa\x64\xdb\x32\xb5\xdf\xcd\x79\xfd\x30\x25\x9e\xe6\x6f\x1c\xb5\xe4\xde\x3d\x8b\x39\xdd\x6d\xa0\x05\x66\x8c\x34\x72\x3c\x35\x72\x5c\x33\xa3\xa7\xe2\x68\x28\x93\x6c\xb5\x6b\x67\x0b\x85\xb7\x4e\x9b\x5b\xb7\xb5\x7e\x02\x26\x97\x74\x91\x76\xce\x40\x72\x0f\x5d\x71\xb6\xed\x27\x7d\xbb\x14\x13\xc7\x8f\xce\x66\xe2\x44\xbb\x5d\xf6\xf6\xd7\x27\x89\x65\x42\xc9\x1a\xcd\xe5\xb0\xb4\xaa\xd9\x29\x36\x31\xca\x15\xc9\x32\xe2\x95\x76\x55\xcd\xe4\x62\x79\x8d\xce\xaf\x5a\x95\x58\x5f\xb0\x59\xe7\x58\x00\x21\xcd\x23\xef\xd1\x94\x3d\x5c\xad\x53\xcb\x4a\x47\xa8\xf1\x6c\x9d\xa8\x37\xed\x96\xb2\x2e\xa7\xb2\xf3\x54\x3c\xd9\x42\xf3\x37\xa5\x56\xed\xea\xc6\x4c\xd6\x8a\x6d\xa7\x7d\xab\xdd\x6e\x79\xbb\xa8\x8d\xea\xba\x17\x4f\x2b\x71\x39\xb7\x2d\xb7\x16\x71\xb4\xc8\x56\xde\xe6\x0b\xb6\xa7\x18\x6b\x59\x6d\xbc\x4d\xb2\x6a\x3f\xdd\xae\x27\x0b\x40\xf4\x76\x84\xe6\xb5\xce\xd0\xbf\xf7\x12\xb2\x93\xd5\x64\xed\xb0\xb7\x4d\x0e\xdf\x66\x28\xbe\x06\x85\xca\x62\x89\x38\x55\x46\x46\x7b\xcd\x75\x61\x7a\x2b\xb6\xb6\x02\x51\x93\x87\xd3\x62\xac\x21\xd9\xcd\x3a\xaf\x6d\x7b\xd2\x68\x28\x19\x90\x67\x53\x68\x9e\x4e\x71\x6f\xcd\xb6\x8c\x2f\x5a\x6b\xa8\x98\x15\x5d\xda\x70\xbc\xd2\x9c\x66\x73\x99\x62\x42\xf8\xfb\xef\xaf\xa7\x5b\x72\x33\x27\x5b\x59\x8f\x1f\xcb\xc7\x1f\x5d\xb9\x48\xd3\xe1\x94\x68\x03\x65\x48\xb7\x89\xe9\x82\x40\x7a\x49\xce\x10\xf6\x66\xdc\xe8\x15\xfa\xfc\x5a\x1c\x1a\x8d\x04\x44\x1d\xae\xa5\xa5\x8d\xe3\xa3\x8e\x6c\xd3\xe9\x76\xdb\x3d\x76\x41\x28\xa4\xb8\x4c\x75\xd3\x55\xc9\x64\x69\xdc\x2e\xac\xc8\xc5\xe8\xcd\x62\xe0\x12\x64\x61\x29\x9b\xc5\x2d\x3a\x41\x82\x7a\xbb\x55\xd3\xec\x91\x77\x10\x02\x8a\xcf\xdd\x47\x7f\xb9\xbe\x4d\xb0\xb1\x89\xf7\xe8\x51\xde\xb5\x83\x2e\x3b\x47\x07\x25\x4e\x3a\xdf\x5c\x94\x99\x22\xaa\xc0\xe1\x78\x53\x82\xad\x2a\xcf\x24\xde\x54\x8b\x47\xb8\x6c\x98\xe5\x7e\xf7\x2d\xd1\xc9\x4f\xd2\x46\x61\xaf\x1b\x82\x50\xa1\xcd\x9c\x7c\xb4\x8d\x84\xaf\xff\xce\xfa\x2e\xe0\x4a\x44\x8c\x3f\x19\x06\x7f\xd2\x3d\x27\xe3\xd8\xd0\x79\x3e\xb9\x34\x48\xc3\xa6\xe8\x45\xb2\x2a\x6e\xe6\xb5\x38\x69\x64\xcb\xb1\x37\x82\xad\x6f\x35\x8b\xd0\xd5\x52\xba\x37\xad\x75\x86\xe6\xb2\x11\x6b\xba\xdd\xdb\x6e\xe1\x1e\xe2\x62\x87\x4a\xe3\x68\x54\x61\x84\x2d\x9f\xc4\xab\x56\x46\x1c\xae\x64\x82\x25\x88\x16\xcf\xf5\xc6\xd4\xb4\x38\x99\xf2\x35\x96\x9e\x24\xc9\x95\xab\x0f\x4b\xb8\x1d\x26\xe2\x87\x6b\x1d\x44\xb3\xf3\x3d\xf3\x73\xe8\xeb\x4c\x98\xda\x3d\xfa\x1c\xf9\xa5\x9d\x8f\x8e\x3c\x13\x4b\x98\x94\xda\xdd\x3e\x48\xe9\xdd\x0e\x34\xdb\x4c\x6b\xb3\x96\x3a\x64\xa6\x9c\x1f\xce\x67\xa4\xd0\x48\x8e\x72\xe9\x39\x2d\x6d\x1a\xb9\x13\xe7\xe3\xe8\xe3\x0b\xfa\xfe\x8a\x7d\x56\x55\xdc\xb5\x19\x57\x1f\x02\x0f\x86\x38\xd1\x57\xd7\x21\xfc\x14\x7f\xd4\x6e\x37\xeb\x1e\x28\x5b\x1a\x76\xeb\x8c\xc8\x1a\xa9\x22\x5e\xac\xc5\xd6\xbd\x46\x92\x7f\xeb\xae\xba\xed\x26\xb9\xd1\xaa\x5a\x6f\xd9\x90\x88\xd4\x6a\x5a\x2b\x22\xf7\xe8\xb2\xa3\x3f\x70\xe8\x29\x07\x31\xe9\xd2\xd7\x3a\xf0\x2b\x64\x68\x23\x6f\xb7\x95\x59\xaf\xd2\x56\xfa\x0b\xbb\x3b\x6f\x66\x13\xb6\x24\xf7\xf0\x69\x72\xaa\xca\x89\x5c\x41\x1c\x76\x66\xfa\x2a\x9d\x1b\xc1\x57\xe9\xab\xd0\x66\x41\xc8\x1e\x55\xed\xa8\xef\x6e\xb7\x1e\x9d\x68\xe0\x75\xd2\x3f\xa1\xc6\x8b\x17\xf4\x27\x91\x98\x14\x2c\x41\x3d\x50\xce\x09\x3e\x7f\x58\xa7\x60\xe9\x06\xe9\x27\xf6\xe3\x1e\xd7\xf0\xa4\xfd\xbc\xa0\x4f\xd7\xfd\x4f\xc2\x4f\x65\x56\x26\xf4\x0b\xd2\xdd\xa3\x1b\xc3\xeb\xcb\x0b\xe3\x5b\x89\xb7\xf4\xe1\x0d\x7d\x39\xb9\x3a\x29\xd9\x1f\xba\x79\xe3\x9f\x70\x6c\x5f\x01\xc9\xb8\x50\xa1\xe8\x5e\x22\x45\xda\xd9\x76\xba\x42\xd4\x49\x01\x2f\xa1\x49\x95\xcb\xd7\x99\x59\x99\x10\x78\xd4\xd1\x94\x6d\xce\x76\xed\xa3\xde\x6e\x37\x3c\x7d\x19\xc6\x13\x63\xae\x4d\xf2\xeb\x71\x8e\x68\x98\x3c\x63\xc8\x6c\x65\x6a\xda\x23\x30\x4e\x6c\xf8\x62\xa5\xa6\xf0\x93\x76\x5b\xcc\x99\xbd\x86\xab\x0f\xec\xd4\x32\x82\xf5\xe5\x78\x5d\xe8\xf3\xc7\xd1\x97\x48\x75\xa6\xcc\x2d\xfa\x8e\xf1\xc4\x71\xfc\x4c\x1d\x6f\x3f\x3b\x3e\xed\xe4\x31\x95\x8f\xf0\x82\xf5\xef\x72\x6c\xdf\x5f\x27\xe3\x63\x68\xfc\x13\x2a\x1c\x7e\x37\x96\xfd\xf7\x7b\x05\xca\xce\x9a\xd3\xcc\x98\xa1\xc3\x19\x3b\xee\xdf\xfd\x2a\x0c\x7e\x7f\xf6\x7c\x32\xc3\xe3\x59\xc4\x90\x0c\x80\x1c\x21\xc9\x8c\x04\xa1\xc2\x40\x00\x54\x24\x21\x04\x01\x22\x19\xa4\x92\x80\xe4\x24\x99\x65\x39\x5a\x21\x81\xa2\x42\x9c\x94\x28\x46\x56\x38\x99\x43\x80\xa5\xa4\xaf\xfb\x85\x8c\x48\x66\x78\xf4\x9d\x19\x1e\x4b\x00\x9a\xb9\x7e\xd0\xd5\xee\xee\x71\x86\xe7\xe5\xf0\x5f\x9d\xe1\xa5\x7c\xdd\x1b\xe5\x0c\x2f\x9b\x5f\xbb\x4a\xf6\xa1\x33\xbc\xa6\x68\x9f\x58\xc9\xc9\x95\x39\xf0\x5f\xcb\x32\x0d\x76\x13\xaf\x15\x93\xf3\xa1\x1d\x07\xa3\x7e\xb9\x3f\xea\x8a\xf3\xf4\x1c\x6e\xe5\x16\xd3\x19\xa3\x06\xf9\x56\x2c\x11\x99\x31\x52\xcb\x19\x56\xb2\x53\x94\x54\x4c\x2e\x7b\xdb\x4e\x7e\xb3\x92\xa5\xb2\xca\x32\x5c\xbf\xfa\x96\xef\x56\x2b\x8a\xd8\x64\x7b\xc9\xf5\x88\x9e\x0b\xc3\xd6\x93\xb3\xbc\x17\xa2\xaa\x13\xd0\x09\x9e\x9a\xbb\x9f\x5e\x88\x7a\x05\x79\x96\xf2\xe4\x1d\x8a\x9e\x57\x47\x65\x41\x5f\xc7\xcf\xa6\xe5\x2a\xda\x1f\x3a\xfb\x81\xa3\x54\x5e\xae\x7a\xfa\x7a\x3a\x63\x7f\xbf\x19\x64\xa8\x19\x5c\x84\xf8\x53\x61\xf0\xa7\x8e\x23\x60\xfa\xe4\xd6\xb3\x33\x20\x76\x6a\x0d\xdd\x10\xd1\xf9\xde\xf2\xc1\xf3\xae\xda\x25\x7e\x41\x58\x99\x6b\x4f\x06\xa9\xfa\xdb\x2a\xf8\x99\xde\xf1\xfb\xb3\x11\xda\x2e\x42\x74\xa7\x05\x4e\xff\x24\x6a\x07\xfa\x02\x68\x39\x97\x59\x42\x00\xfb\x13\x8b\xd3\x55\xab\xe7\x7f\xe6\x44\x7f\x7e\xb5\x88\xdd\x3f\x23\x7f\x3a\x62\x0f\xef\x9b\x44\x8d\x5c\x06\xcf\xc8\xbd\x3e\x58\x30\xfa\xad\xb3\xe1\x8e\x33\x3c\xd7\xde\x9e\xd5\x87\x93\xfe\x75\xae\x17\x66\x7c\x47\x7d\x75\xfa\xb3\x18\x48\xef\x51\x7f\x7f\x3a\xbd\x89\x26\x9b\xb9\x4b\xef\x5a\x38\x9f\x11\x3d\x19\x8b\xbc\x42\x5f\x19\x36\xe7\xc1\x33\xe8\x40\x79\x7e\x38\x7d\xc5\x19\x29\xdd\xa5\x2f\x12\xfd\x74\x33\x92\x2f\x8c\x7d\xce\x95\x9a\x50\xee\xf0\xe0\xd2\x93\x09\xec\xef\x48\xf4\x33\x1a\x7a\x13\x65\x1c\xdd\xa5\xd7\xaf\x9f\xbf\xce\x8c\xfd\xe5\x0c\xcf\x0b\xf2\x5d\x40\x0d\xdd\x1a\x2f\x4e\xae\xad\xbc\x36\xfc\xbf\x95\x84\xf3\xf1\x42\x60\x7b\x45\x4e\x60\xc7\xfa\x50\xac\x22\x5c\x69\xb5\xd8\x76\x56\x4e\xd5\x36\x4c\x2d\xbe\xd6\xb3\x0b\x99\x6c\xa5\x08\x1a\xe6\xc9\x9c\x46\x38\xed\x5f\x88\x25\xc5\x32\x94\x8c\x67\x33\xcc\x1f\x49\xdf\x5b\x51\xca\xdd\xa2\xef\xef\xa0\x6c\xc3\x4f\x9a\xed\x0b\x11\x65\x1b\xc6\xad\x70\xf8\xbd\x6c\x83\x3a\x2f\xae\xb2\xbc\x60\x15\xa6\x49\x32\x0e\xd3\x13\x62\x9a\x96\x1b\x93\x8e\x6e\xe6\x37\xcd\x39\x2c\xd3\x45\xb5\x64\xbd\xb5\x60\x99\xe6\x70\xc9\x5e\xe2\xd5\x91\x65\x15\xe8\x71\xbe\x37\xcb\xf0\x1b\x8b\x88\xaf\xcc\xcd\x24\x5e\xd2\x65\x8e\xc6\xeb\x55\x7b\x58\x4c\x66\xa7\x93\x64\xa2\x16\x75\xb6\x01\x87\x84\x24\x51\xaa\xcc\x21\x92\x87\x32\xcf\xb3\x24\x2e\xcb\x24\x43\x02\x46\xc6\x01\xc7\x33\x80\xe0\x69\x06\x32\x2a\xaf\x00\xc4\x03\x84\x78\xc0\x2a\x2c\x03\x20\xc3\xe2\x1c\x85\xcb\xb2\x9b\x6d\x20\x23\xca\x36\x30\xf7\xb2\x0d\x80\x60\xc8\xeb\x67\x6e\xef\xef\x9e\xd5\xe7\xbd\x9a\x6d\xf0\x9b\x61\xa4\xd9\x86\x15\xe3\x39\xbb\x0f\xcc\x36\x38\x39\x7c\xff\x75\xb2\x9e\x2c\xe4\x62\x73\x46\x93\x2b\x45\xbd\xd1\xdf\xb6\x1a\xad\xbc\x10\xb3\xf0\xd4\xa8\x18\x2b\x35\x53\x05\x81\x44\x9d\x15\xa2\xf1\x4c\x35\xab\xae\x0d\x09\x22\x24\x33\xdd\xe4\x54\xc6\xd1\xa4\x61\xe3\xc4\x6c\xdd\xa0\xca\xc5\xa9\xba\x55\x9b\x99\xfe\x8c\x53\xea\xf5\x7e\x72\x58\x6b\x91\x42\xcd\xbf\x9e\xdc\x0c\x8a\x2e\xca\xbb\xdf\x78\x97\xaf\x8f\x98\xcd\x86\x9a\x4d\x46\x88\x5f\x7c\x12\xbf\x10\xbd\x97\x0d\xeb\xe5\x84\x88\xbc\xec\x68\x1d\x0e\xbf\xe7\x65\xdf\x4b\x59\xaf\x79\xd9\x7d\x0d\xfb\x93\x6e\x96\x23\x19\x85\x62\x14\x85\x84\x80\xa1\x68\x1a\x97\x81\xa4\x50\x38\xce\xca\x04\x8e\x43\x5c\xe6\x69\x89\x26\x65\xc4\x72\x0c\x83\xb3\x08\x52\x0c\x4f\xc8\x04\xc4\x39\x9a\x06\x2a\x87\x08\x08\xdd\x53\xe3\x89\x57\x76\xba\x3d\x93\xd4\x25\x39\x8e\xbb\xfe\xb6\x8f\xfd\xdd\xb3\xea\x65\xef\x45\x04\xcf\x05\xaa\x8f\x25\x75\x4f\x26\xf9\xef\x3d\x91\x3d\x04\xa2\x09\x61\xb4\xad\x31\x22\xbe\xe2\xc5\xaa\x50\x96\x87\xd5\x1e\xb4\x39\x3c\x5d\x99\xe9\x52\xbf\x91\x6c\x67\xa7\xcb\x45\xbd\x5e\x05\x68\x53\xd3\xe3\x8b\x5e\x43\x98\xa2\x61\x6c\xab\x53\x2a\xce\x8d\x93\xf9\x64\xa1\x47\xf7\xa9\x4a\xa2\xd8\x7e\x13\x09\x2b\x1f\xcb\xd2\x1d\xb2\x43\x76\xd6\xda\xa5\x1b\x0c\x4c\xb8\xfa\x65\x21\x84\x91\xad\x7b\x7d\x4c\x12\xe0\xaa\xab\x3e\x61\xef\xd9\x24\xed\xce\x55\xba\x82\x38\x49\x3c\x5e\xd4\x41\xdd\x71\xd5\xd1\xe1\x4f\x85\xc7\x1f\x75\xe2\xb1\x24\x04\x94\xb9\xdd\x73\xd3\x51\xe3\xbf\xd4\xd1\xc0\xc4\xe7\xf1\x0a\x4c\x7c\x3a\xd7\x2f\x94\xe8\x5a\x1f\x18\xfd\x44\xa5\x17\xfe\x3e\xf8\x9c\xa5\x21\xc9\xd8\xea\x52\x67\xdd\xeb\xce\x52\x75\x18\x7d\x3d\x9d\x3c\x06\x96\x85\xbe\xb3\xbd\x9c\x86\x55\xcf\xe0\xf7\xc2\x9a\xf7\x1a\x7c\xa2\x9d\x3c\x12\x2c\x64\x15\x8a\x91\x15\x92\x73\x0e\xa5\x93\x10\x52\xa1\x44\xc8\x80\xa0\x59\x40\x00\x59\xa2\x00\x8f\x23\x40\x31\x00\x92\x0c\xc5\xa9\x38\x4e\x49\x14\x2f\x93\x90\x25\x59\x06\x32\x5e\x54\x03\x22\x8a\x6a\xee\x4e\x1e\x49\x1e\xe7\xaf\xbf\xc6\x66\x7f\xf7\x6c\x2b\xd5\xab\x51\xcd\x8d\xc9\xa3\xa3\xe5\x1f\x93\xfe\x3c\x89\x6a\xb4\x6e\xf6\x2d\xc7\x98\x63\x12\xc4\xfb\xca\xb2\x92\xd7\x73\x23\x2e\xd6\xc9\x34\xca\x45\x6b\x3e\xcf\x13\xa0\x3a\x8e\xa3\x89\x3d\x03\x78\x3b\x91\x62\x27\xf8\xa6\x33\xe6\x41\x12\xbd\x29\x0d\x73\x28\xd0\x2c\xe8\xd6\xc8\x51\xab\xdb\xe9\xb5\x8c\x2a\x5b\xcd\xac\x26\xdb\x6e\xaa\xf7\x96\x5c\x7f\x74\x54\xf3\x31\xa9\xe3\x0f\x88\x6a\xdc\x8f\x6b\x3f\x66\x9f\xda\x5c\x78\x0a\x5c\x66\x83\x9f\x89\x70\x94\xaf\x09\x91\x8d\xf2\xc7\x51\x29\x6a\xf9\xb9\x82\xfa\xbc\xf2\xbb\x0c\x0f\xc3\x2c\x0f\x3b\xd7\x2f\xb4\xdc\xf2\x6a\x94\xf4\x6a\x72\xeb\xbd\xa3\xa4\x77\xa1\xef\x42\x55\x2a\xcd\xd1\x99\x92\x06\x45\x49\x3f\x29\x4a\x11\x22\xb2\x97\xd3\xe4\x4f\x88\x28\xe9\xbd\x06\xb3\x68\xa3\x24\x86\x61\x18\x9a\x81\x0c\x82\x0a\x02\x38\x07\x64\x9a\xe5\x70\x9a\x25\x00\xc3\x2a\x3c\xa2\x28\x9a\x44\x08\xd1\x2c\x47\xc8\x90\x87\x34\x07\x21\x49\xf0\x48\xc2\x55\xc4\x91\x14\x4d\xab\xca\xe1\x1c\x83\xf0\xe7\x5a\xb8\x67\x20\xdc\x0c\x8e\x58\x86\xe3\xae\xbe\x14\xff\x70\xf7\x74\x4f\xa8\x17\x1b\x15\xb9\x6c\x6d\x55\x9b\x48\x05\x90\x15\xc8\x4e\x7b\x5c\x37\x0b\xd3\x71\x17\xc7\xd5\x0c\x67\x15\x73\xec\x14\x17\xeb\xeb\x7c\x27\x2e\x74\x49\xe1\xfc\xed\xd8\x81\xc5\xb4\xa7\x57\xa8\x19\xc8\x09\xbc\xf6\x6a\x9d\xe6\x77\x1a\x26\x26\x94\x54\x17\x01\xb2\x45\x21\x3e\x09\x1a\x9b\x79\xa2\xd8\xaf\x6f\x08\x33\xff\xd6\x48\x17\xf3\xf8\x26\x95\xc2\x97\x85\xcc\x7c\xba\x90\x54\x3d\xd5\x8c\x75\xbb\xb9\x05\xd3\xd2\x52\x89\xb7\x69\x7a\x63\xc7\x32\x95\x58\x77\x91\x36\x6a\x55\xc5\xec\x36\xd9\x39\x61\x14\xfb\xb9\xec\xa2\x59\xaa\x3e\x10\xf3\x9c\x29\xed\x79\x3c\x71\xc2\xb3\x63\x05\xfe\x59\x7d\x42\x8b\x27\xf0\x22\x9e\xcf\x6c\xed\xd1\xba\x4c\xe8\x3d\x1c\x6e\xe7\x06\xc1\x97\xb3\x9b\x55\x31\xb9\xad\xd0\x76\x42\x94\x93\x2e\x8f\xe4\xd0\x36\x2b\xb3\x5e\x9c\x3a\x49\x95\x05\xbe\x74\xf9\x9e\x3d\xbf\x80\xbf\x6c\x6e\x9b\xb5\x17\xf0\x0b\x3e\xfc\x4f\x2f\xa6\x38\x05\xdb\xce\x75\x91\xa5\xb9\x87\x3f\x70\xf9\x32\x11\x5e\x16\x95\xd9\xc5\x5b\xe0\x9f\x92\xc5\xab\x7d\xb1\xd3\x85\x98\xec\x83\xf7\x94\x2c\xfe\xdd\xad\x11\xa4\x6d\x13\x95\xec\xaa\x66\x4f\x2c\x58\x6b\x80\x96\xac\xc0\xad\x8c\x8f\x1a\x5b\xa5\x54\x5b\xf3\x45\x6d\xb4\xe8\x2f\xa6\x24\x5d\xc3\xe3\x3a\xb1\x2d\x2c\xf5\xdc\x70\x2d\xd3\x23\x59\x52\x47\xe3\x95\xce\x8c\xa0\x98\x22\x21\x81\xc7\x18\x05\x26\x41\x23\xc1\x4c\xde\x52\x91\xfb\x56\x55\x42\x8c\xc2\xaa\x14\x2f\x03\x00\x69\x1c\x97\x54\x12\x01\x1c\x67\x09\x96\xe2\x65\x48\x00\x92\xc5\x09\x00\x15\x59\xa2\x29\x55\x91\x65\x9a\x42\x32\x54\x54\x16\x97\x55\xc8\x21\x8e\xf6\xde\xed\x4b\x46\x34\x03\x65\xef\xcf\x40\x01\x7b\x6b\x06\xea\xde\x3d\x3b\x83\xe3\xd5\x19\xa8\xbf\x40\x31\xc2\x19\xe8\x2b\xc5\xbb\x7c\xdc\x8b\x2a\x1d\x8f\x9d\x0a\xd4\xc4\xf4\x81\x9f\x9a\x60\x65\x14\xca\x90\xd9\x15\xd3\x5d\x97\x99\xa1\x2a\xab\xc5\x6e\x1c\xf4\x72\xeb\x71\x3d\x95\x46\x55\xa1\xf4\x56\x69\xd5\xe4\x58\x62\x9a\x6b\xa3\x76\x83\x25\xd6\x4b\x9a\xb3\x98\x62\x86\xd5\x7a\x2d\x35\x53\x13\x34\xe6\xad\x95\x63\x0c\x53\x9c\xca\x40\xc8\x8e\x85\x6d\xf2\x2d\x59\x7b\xa8\xf8\x39\xc2\x59\xeb\x67\x96\xf7\x8d\xe2\xe1\x88\x67\x6b\x97\xeb\x7b\x81\xb3\xb5\x22\xc3\x79\xc5\x2a\x1f\x32\x5b\x6b\x05\x10\xf2\x4a\x31\xaf\xfc\x1e\xf2\x4b\x7f\x72\xf9\x45\x53\x0c\xfd\xea\xf6\xc6\x9f\x33\x3b\x13\xce\xd7\x7c\x3e\xbc\xf8\xed\xfa\x76\x35\xbf\xad\x27\xc8\x72\x3f\x38\xf2\xf8\x6f\xdf\x1e\x9c\x7a\xb5\x7f\x5e\xa0\xef\x5e\xff\x9c\xd8\x6b\xd0\x75\x62\xaf\x1f\x5d\xcc\x7e\x6f\xfb\x69\x42\xed\x8e\xae\x50\x1d\x7d\xc6\x22\x6c\xc6\x40\x78\x07\x9f\x17\x22\x63\x91\x5c\xf7\x49\x6d\xf4\xb6\x8c\xcf\x55\x81\x5c\x24\xf8\x0d\x67\xab\xf1\xfe\x70\x9c\x2c\x8b\xa5\x36\xc5\x09\x6f\x25\xba\x9e\x78\xa3\x32\xbd\x51\x9b\x6e\x17\x57\xdd\x24\x3b\xdb\xbe\x19\x96\xb4\xcc\x8f\xea\x5c\x5f\x48\x16\xcd\x72\x6d\xbc\xd0\xac\x46\xff\xad\x27\xa0\x52\x2a\x57\x2c\xe5\xa3\x2f\x0a\xe4\x29\x95\xe5\x25\x16\xa8\x50\x51\x10\xdc\x45\xb7\x3c\xe0\x21\x2f\xe1\x04\x2b\x13\x32\x4d\x50\x2c\x4d\xa8\x2a\xc4\x21\xab\xa8\xbc\xaa\x48\x90\x95\x11\x47\xc8\x34\xae\xb2\x34\xe4\x00\xfe\xf5\x1b\x46\xed\x0f\x99\x09\xf9\xa6\x88\x93\xa8\x9a\xbc\x17\x55\xd3\x38\x00\xd7\x53\x17\xfb\xbb\x67\xa7\xc8\x7d\x0d\x63\x09\x27\x51\xf5\x8d\xdc\xc5\xcf\xf1\x2c\xc7\x2b\x7b\xa0\xb7\x56\x5a\x00\x71\x5e\xc0\x8b\xdd\x75\x5f\x6b\x98\xeb\xae\x35\x15\x92\x66\x62\x31\xec\xd6\xe3\xb1\x49\x35\x37\xcf\x10\xad\xd2\xb0\x5f\xa5\x62\xb0\x4d\xad\x9a\x4c\x45\x5c\xaf\x84\x61\x3d\x61\x14\x60\xbd\x3a\xce\x2b\x74\xa5\xcb\x0d\x2b\x89\x4a\x7e\x85\xd7\x0b\x55\x54\xab\x48\xfd\x29\x55\x5b\x3f\x12\x35\x07\x6f\x44\xf6\x47\x96\x27\x8d\x42\xe4\x7a\xf2\x95\x63\x7f\x5c\xb9\xee\x54\x67\x44\x87\xff\x32\x28\x7b\x00\xff\xc5\x6a\xf7\x47\x7b\x76\x97\x94\x47\xca\xce\xc5\x9f\x42\xdf\xdd\x83\x57\x02\xf3\x36\x3f\x29\x87\xe4\x93\x55\x68\xfc\xa7\x9b\xec\x9f\xc1\xbf\xdf\xe4\x6e\xf6\x1a\x13\xb3\x66\xab\x89\x69\xbe\xb0\x4a\xa0\x6d\x4f\x28\x58\x99\x45\x42\xc9\xc6\x99\x1a\xa7\x4d\xa4\x76\x6d\x9b\x98\xc4\xc7\xf4\xbc\xab\xf1\x55\x83\x6a\x26\xb9\x64\x42\xcc\x0c\xe7\x73\x31\x56\xd2\xc9\x09\xad\x6e\x05\x4a\xa4\xa6\xf1\xba\x68\xf0\xb4\x40\xdb\x53\x69\x94\x8a\x7c\x93\x3b\xa9\xe2\x9c\xa4\x42\x02\xc9\x92\xca\x93\x12\x81\x48\x9e\x86\x94\xc4\x13\x10\x70\x00\xd1\x14\x29\xab\x12\xa1\x28\xac\x4c\xa8\x14\x83\x58\x1e\xe0\xbb\x76\x80\xe4\x10\x07\x28\x5e\x92\xdd\x11\x06\xbc\xf2\x86\x9b\xe7\x46\x18\x92\xbd\x35\xc2\xb8\x77\xcf\xce\x04\xf5\xca\xce\x9f\xdb\x68\xf1\x9e\x23\xcc\xab\x73\x8b\x13\xfc\x07\x7a\x6b\xa5\x4e\x7c\xa1\xc5\x2a\x49\xb3\xc8\xcd\x67\xf2\xdb\xd2\xcc\x33\x89\xb1\xac\xd7\xa5\x6e\xb2\xb7\x16\xf0\x44\xbe\x0c\xd7\x05\xa9\x23\xbf\xa9\xc2\xba\xbe\x1c\x19\x2b\x00\xa6\x2d\x89\x50\x21\x48\x64\x8a\xba\x96\x55\xb9\xfa\x82\xa9\x6b\x85\x61\xbd\x9a\x28\xae\x88\xac\x59\xc8\xe6\xd6\xd6\xbb\x8c\x30\x21\xe6\x82\x91\x8e\x30\x2f\xe2\xff\x99\x23\xcc\x0b\x9b\xe4\x85\x8f\x18\x61\xde\xe3\x68\x1d\xef\xba\x3b\xc2\x84\xb7\xa5\x68\x46\x98\x10\xf8\x5f\x1c\x61\x36\x52\x6c\x51\xa4\xa8\x82\xb5\xda\x4e\x95\xb7\x0a\x63\xcd\x8c\x4c\x79\xdb\x4e\xdb\x72\x7e\x2c\xa4\x6a\xe2\x84\x30\x85\xb9\xdd\x7f\x2b\x73\xa9\x44\x86\xc9\x68\x71\x09\xf6\xeb\xab\x36\x6f\xf6\xc4\xde\xb2\x93\x53\xe2\x9b\x8c\x39\xcf\xe4\x16\x09\x91\x13\x97\xf1\x16\xb2\x0c\x79\x1c\xfd\xaa\x2b\xcb\xe3\x40\xc2\x29\x45\xc5\x55\x89\x24\x55\x08\x69\x5e\xe2\x48\x95\x27\x38\x49\x25\x20\xcb\x93\x90\x60\x80\xa4\x00\x45\x26\x15\x8a\x92\x78\x9e\xe4\x11\x4b\xb3\xb2\xca\xca\x12\xcb\xb0\x84\x3b\xc2\x90\x11\xcd\x61\xee\x1d\x94\xc9\xd2\x38\xc5\x5d\x5f\x19\xd8\xdf\x3d\x3b\xe1\xf9\xd5\x39\xcc\x8d\x83\x32\x5d\x05\x7b\x72\x73\xcb\xfb\xcc\x61\x92\xc9\xcd\x08\x25\xa8\x64\xdf\xec\x69\x69\xb5\x24\x74\x18\x79\x32\x8e\x8f\x9b\xf9\xb7\xac\x36\x62\x93\x76\x9d\x6b\xa6\xf0\x8c\xbc\x6a\x4b\x4c\x9c\x49\x74\x34\xbe\x0d\x66\x89\xda\x2a\x65\xc7\xb7\x64\x79\x96\xb0\xb7\x96\x94\x16\x2b\x25\x22\xd3\x66\x98\x4d\xda\x5e\x72\xed\x74\x46\xa8\x7d\xc6\x39\x4c\x28\x0f\x1f\x21\xfe\x2b\xd5\xb9\x61\x46\x98\x0f\x3c\xfc\xd0\x25\xe5\xc9\x11\xe6\x33\x1d\x1e\x19\x38\xc2\xfc\xa4\x39\x84\x10\xd1\x1c\xe6\xb4\xfa\xfa\x19\xfc\xde\x08\x93\x2b\x66\xd2\x54\x76\x98\x9f\xda\x5a\xae\xcd\xad\x13\xd2\x7c\xdb\xa8\xc6\xca\xa5\x59\x09\x15\xb2\x56\x81\xc8\x6e\x4a\xd5\x5a\x7f\xcb\xb7\x57\x66\xdc\x48\xc3\x22\xd1\x85\x72\x3a\xc9\x55\xc8\x78\x51\x06\x72\x86\x2c\x6c\xac\x56\x8d\x7a\x6b\xf5\xbb\xa6\x29\x76\x00\xbb\x69\xb5\x7a\xd1\x1f\xd4\x25\x11\x2a\x07\x38\x92\xa3\x64\x9a\x41\x94\x84\x03\x4a\xa5\x00\x4b\xab\x80\x62\x68\x0e\x87\x12\x94\x54\x95\x80\x88\x94\x78\x09\x32\x84\x84\x93\x1c\xcf\x92\x34\x8b\x68\x16\x21\x49\x76\xb2\x64\x60\x5f\xfd\x1c\xba\xae\x07\xdc\xad\xeb\x61\x71\xea\x46\x5d\x8f\x77\xf7\xf4\x64\xf5\x57\xeb\x7a\x6e\x8c\x2b\xee\xf5\xe2\x86\xd5\xb3\xba\x1e\x75\x96\x6e\xbc\xf5\xd1\x88\x60\xdf\x6c\x0e\x18\x25\x65\x81\xa8\x58\x7c\x33\xb3\xe2\x93\x6c\x42\xc9\x74\x55\x3e\x91\x4b\xd4\x7b\x6a\xbb\x4f\xa6\x6a\x4d\x12\xae\xd7\xfd\x19\x5d\x5c\x0c\x73\x19\x3e\xbf\xd0\x57\xa5\x69\x9d\x68\x16\xe0\x46\x36\xf2\xb5\xd4\x72\x91\x91\x93\x0d\xb9\xf4\xb9\xea\x7a\x5e\xad\xab\x79\xb5\x96\xa4\xb4\x2e\x4e\x8d\x28\xeb\x7a\x3e\x30\x62\xbe\x17\xbd\x7f\x64\x5d\x8d\x10\x51\x5d\x0f\x47\x1d\x9f\xbf\x32\x33\xbd\x59\xd7\xd3\xa5\x37\x2d\x0b\x74\x0d\x05\x71\xac\x5a\x5e\xa4\xb2\x70\xb6\xac\xae\xb8\x3e\x5b\xa5\x13\xeb\x6e\x5d\x27\xe3\xb5\x86\xd0\xea\x64\x89\x8e\xb2\xc6\x45\x1e\x58\xa5\x4c\x3f\xd6\x60\x8c\x64\x62\xd5\x80\x73\xe9\x2d\x3f\x51\x5a\xdb\xa9\xd5\x2d\x24\x5b\x02\xbb\x18\xcd\x84\xc9\x2c\xfa\xfc\x90\xcc\x93\x2a\x87\x33\x0c\xab\x92\xac\xa2\xb2\x38\x04\x3c\x92\x71\x05\xf1\x8c\xaa\x92\x24\x47\x30\x14\x05\x65\x0e\x70\x90\x92\x11\x24\x64\x89\x91\x91\x44\x48\x32\x92\x19\x55\x55\x71\x9a\x73\xa3\x77\x2a\xa2\xfc\xd0\x03\xd1\x3b\xcd\x13\x37\xa2\x77\xf7\xee\xd9\xbb\x50\x5e\xcd\x0f\xdd\x8d\xde\x3f\xfa\xa8\xd4\x13\xfc\xc7\xfc\x50\x86\xd2\xd9\x49\x52\x58\xd0\x70\xb1\x6a\x00\x25\x9e\x6d\xda\x3d\x99\x2d\x0a\x90\x9d\x37\x5a\x9a\x56\xa1\x0a\xdb\x42\x5e\x5a\x4c\xad\xd4\x70\x25\x4f\x32\x49\xa0\x48\x23\xd9\x34\x78\x5b\x5e\x25\xfb\x59\x75\xbd\x68\xb6\x63\xda\x64\xc5\x65\xa7\x5c\x5f\x85\x0c\x39\xe9\x55\x27\xb5\xde\x67\xcc\x0f\xbd\x1c\xbd\xbf\x88\x3f\xc2\xe8\xfd\x03\x0f\x96\x71\x49\x79\x32\x7a\xff\x40\xfa\x5e\x8f\xde\x3f\x30\x3f\x23\x44\x94\x1f\x7a\x31\x7a\x97\xb4\xee\xb2\x96\x4b\x9a\xfa\x62\xc1\x17\xfb\x24\xa7\x54\x88\xd1\x9b\x65\x25\xcc\xa5\x9e\x6f\x14\x72\xec\xd0\xcc\x19\xfa\x72\x01\xd7\x95\x24\xbf\xad\xf5\x8a\x7d\x62\x99\xde\x2e\xc7\x80\xd8\x72\xf9\x89\x12\x4f\xce\xcb\x5d\xa6\xd0\x88\xaf\x91\xb4\xd1\x79\xd3\x44\xf5\x61\xac\x9e\x18\x46\x3d\xc2\x70\x04\x41\xf0\x40\x26\x39\x86\x22\x15\x95\x25\x65\x9c\xa0\x21\x0d\x09\x85\x65\x25\x0e\x07\xca\x6e\x18\x51\x28\x95\xc6\x55\x99\x51\x08\x9c\x23\x18\x08\x59\x5a\xc6\x21\x43\xe0\xbc\xca\xc3\xc3\xab\x18\x23\xa9\x1c\xbd\xbb\x02\xc1\xd0\x38\x71\x7d\x84\xd9\xdf\x3d\x7b\x47\xd6\xab\x95\xa3\x37\x56\x20\xdc\xa3\xc9\x42\xe5\x7b\x48\x5f\x75\x95\x73\x9d\x54\x7a\x56\xf5\x21\x9b\x29\x8e\xf2\x43\x7c\xc3\x8e\xe7\xc2\x9a\x10\xd7\x4c\x16\x74\xd3\xcc\xb6\x9e\x9b\xaa\xf9\xdc\x3a\xad\x6e\x70\xbe\xbc\xd4\x68\xc9\xae\xe4\x85\x34\x5a\xa7\x85\xb2\x5a\x81\x42\x82\x4b\xd7\xfa\x3a\x3d\x27\x05\x7a\x48\x4e\x98\x54\x36\xa5\x0d\xd5\x56\xb9\x95\x22\x98\xa1\xfc\xc8\x88\x71\xba\x97\xe9\x91\x98\x3e\xea\x1d\xca\x0f\x5a\x99\xb0\x37\xf0\xa8\xf1\x3f\x71\xf0\x8b\x20\x7c\xde\x35\xeb\xbb\x31\x7f\x08\x59\xbd\x9c\xb1\x7f\xb1\xaf\x2e\x0e\x5e\x7f\x10\xbf\xe7\x91\x63\x9d\x94\xd5\x5b\x8a\xd3\x54\x33\xbb\xac\x4c\x52\xa9\x56\x33\x65\xa8\x7d\xb9\x6b\xe6\x45\xad\xcf\x4d\xc6\x42\x3b\x9e\x6d\xe2\x80\x29\xea\x4b\x9c\x9a\x08\x6d\x56\x68\x09\x04\x47\x1b\x42\x76\xdd\x4e\x4c\xbb\xd3\x99\x9c\x9a\xa6\x50\xd3\x28\xc9\x95\x42\x82\xaf\x11\xb5\x6a\x77\x91\x88\x3c\x63\x2f\x29\x14\xc7\x28\x92\xa2\xe0\x40\xa1\x18\x9c\x23\x58\x86\x25\x64\x0a\xd2\x90\x45\xbc\xc2\x20\x8e\xa1\x65\x08\x78\x59\xa2\x08\xc4\x00\x85\x85\xd0\x99\x18\xa8\x08\xd1\x12\xc9\x28\xc8\xf5\xc8\x51\x1d\x7c\xfe\x80\x47\x26\x18\xf2\x86\x47\x76\xef\x9e\xbd\x6b\xf0\xd5\xa3\xc8\x3e\xd0\x23\x9f\x1c\x3c\x9e\xe0\x27\xd3\x42\x07\x2c\xc8\x15\x5b\x53\xb7\x5c\xb5\x84\x26\xa2\x44\x34\x9b\x39\x5a\xdb\x2c\x26\x39\x3c\x61\x0c\xbb\x66\xc5\x66\x87\x15\x82\x01\x35\x69\x32\x02\x4a\xa3\xd9\x52\x51\xca\x58\xc9\x78\x55\x80\xea\x28\xd5\xdd\xd8\xa3\xb6\xa0\x5b\xc5\xe5\x58\x4f\x4c\xb7\xe3\x84\xf0\x50\x0c\xff\x82\x47\x8e\xe4\xf5\x06\x0f\x5a\x99\x10\x60\xe5\x1f\xfd\x7a\x05\x41\xf8\xbc\x19\xf8\xbb\x6b\xa8\x21\x64\x15\xa5\x47\xfe\x48\x5d\xf1\x3c\x72\x16\x34\x7a\x73\x09\x9a\x28\x6e\x27\xe2\xc5\x35\xb7\x61\x6a\xf5\x55\xbb\x5c\x1a\x4f\x8b\x99\x45\x6d\x5c\xcb\x68\x09\x64\x31\xe4\x52\x60\xbb\x66\x3f\xb1\x6c\x64\xfb\x44\xbe\x5c\xe7\xa9\x8a\xc6\xbf\xd5\xb8\xc4\x3c\x26\x96\xd5\x0c\x48\xb7\x92\x9d\xf5\x92\xa9\xb4\x32\x52\xa1\x24\x46\x1f\x23\x4b\xb4\x0c\x15\x19\xe1\xb4\x2a\xe3\x50\xa1\x15\x46\x45\x38\xce\x4b\x9c\x84\x2b\x48\x92\x71\x85\x54\x54\x85\x04\x08\x52\x40\xe2\x90\x04\x49\xc4\x23\xc8\x70\x32\x60\x29\x06\x51\x04\xae\xba\x1e\xd9\x59\x43\x0d\xf9\xa2\xfc\x27\x3d\x32\xe0\xae\xbf\x8a\x62\x7f\xf7\xec\x9d\xad\xae\x56\x3e\x79\xf8\xe2\x33\x1e\x39\x54\x56\xa5\x1b\xe4\x91\xc5\x03\xfe\x9a\x50\xae\x35\xde\x56\x73\x31\x91\x14\xba\x2b\x8b\xa8\x0e\xa7\xd9\x78\x2b\x2d\xa9\x42\xcf\x26\x2b\xc2\x70\xd8\xab\xb6\x9b\x0a\x3e\x1f\xb7\xe5\x3c\x6c\x93\x7a\x4a\x8c\x8f\x2b\xfd\xd2\xac\x98\xee\x97\x26\x69\x71\x34\xa4\x14\x7d\xd9\xae\x6d\x50\xaa\x2f\xac\x9b\x85\x56\x15\xce\x14\x6b\x3d\x7c\x67\x8f\xfc\xec\xac\x3d\x6a\x8f\x1c\x09\xfe\x17\x3c\xf2\x67\xca\xaa\xdc\xf3\xc8\x61\x64\x15\xa5\x47\xfe\x48\x5d\xd9\x1f\x24\x49\x24\x8a\x95\xd8\xa4\x26\xe6\x12\x28\xf6\xd6\x8a\x25\x7b\x2a\x5f\x6b\xdb\x5c\x42\x23\x65\x2a\x99\x4c\x0c\xf9\x76\x99\x6c\x4c\xcb\xed\xb5\x3e\xef\xa2\x56\xa9\x19\x2b\xd1\x93\xad\x6c\xb5\x27\xdb\x5a\xab\x91\x49\x8d\x40\x87\x6e\xa7\xd2\x54\x79\x92\x4a\x94\xe6\x35\x7e\xa1\x80\xb7\x64\xf4\x75\x93\x00\x51\x12\x24\x54\x40\x70\x12\x03\x21\xa0\x00\x2e\x51\x3c\x4b\xd1\x0c\x24\x24\x9c\xc7\x79\x1c\x91\x1c\xc9\x22\x86\x91\x48\x8a\xa7\x71\x12\x57\x28\xa4\x28\x0c\xae\xe0\x2a\x4e\xb3\xb8\xeb\x91\xa9\x88\xb2\x16\x77\xf3\xe2\x0c\x4d\xf2\xd7\xcf\x91\xdc\xdf\x3d\x7b\xf7\xf5\xab\x59\x8b\x1b\x79\xf1\xa8\x3d\xf2\x49\xd6\xa2\x94\x9f\xae\x62\xfa\x28\x4d\xd7\xfa\xfa\x50\xc9\x2d\x12\xdd\x54\x43\x19\x89\xf6\xd0\x84\x4d\xb3\xde\x58\xb7\x4d\x5a\x89\x27\xcc\x72\x12\x70\x48\xcd\x96\x8c\x4d\xaf\x0c\x63\x60\xc9\xdb\x0d\x51\xd9\xb4\x62\xa3\x4c\x97\xc9\xd7\x3b\xec\x5a\x48\x93\x52\x65\x2e\x70\xe6\x66\xb3\x11\xc4\x5f\x21\x6b\xf1\xec\x71\xb1\x3f\xf1\x5c\x37\x41\xf8\xbc\x75\x90\x81\x1e\xf9\x27\x65\x0d\x84\xf7\xea\xab\x07\xf1\x7b\x1e\x79\x3d\x85\x71\xa6\x23\x76\xf5\xc4\xb4\x93\xc0\x35\x23\x2d\x97\xf3\x40\x6c\x80\xa4\x3d\xaf\xd8\xe9\x62\xa2\xb3\xd2\x49\x2e\x63\xe1\x45\x69\x43\x73\xf2\x76\x9c\x1e\x12\x26\x0b\x59\x40\xe4\xea\x64\xba\xc9\x88\x7d\xd5\xd0\xd3\xd2\x4a\x10\xba\x8a\xc5\x4c\x52\xdb\x55\x36\x2b\x46\x7f\x06\x1e\x90\x00\xe2\x80\x22\x41\x49\xc2\x01\x25\x01\x16\xe2\x32\x49\x50\xb8\x0c\x59\x42\xe1\xa0\xcc\x4b\x32\x4b\x70\x24\xa1\xf2\x2a\x0d\x49\x49\x61\x78\x24\x43\x52\xe1\x38\x55\xc2\x91\x4c\xcb\x6e\x0d\x07\xf9\x5a\x15\xc8\xdd\xd0\x98\x65\x09\xe6\x7a\x79\xe1\xfe\xee\xe9\xdb\xec\x5f\xad\x02\xb9\x71\x9e\xaf\x7b\x85\xd8\x0b\x7d\xa5\x0a\x24\x95\x5f\xea\x84\x5d\xcc\x14\xd3\x54\x7b\xb3\xb6\x71\x25\x95\x6c\x8b\x2a\x63\x4b\xb4\x4e\x49\xdb\x92\x99\x19\x26\xe7\x31\xbd\xdd\x2f\x4d\x37\xb2\x4d\x53\x5a\x59\x05\xd3\x8d\x3d\xde\x30\x25\x85\xee\xe7\x29\x91\x4a\xe9\xb2\xa5\x52\x8c\x28\x8c\x12\x99\x46\xab\x6a\xcd\x38\xb5\x97\xfa\x5c\x55\x20\xaf\x56\x61\xbc\x5a\x79\x50\xc4\x27\x8c\x10\x61\x15\xc8\x47\x66\x61\xdf\xa3\x0a\x24\x6c\x15\x86\x10\x51\x15\x08\x7b\xd2\x01\x57\x5e\x82\x75\x73\x97\x90\x34\x57\xa4\xc6\x46\xdb\xa0\xb4\x2c\x17\x95\x6c\x6d\xad\xd7\xb3\x31\xb3\x13\xeb\xa3\x0c\x37\x2e\x6c\x0c\x61\xa1\xce\xdb\x9d\x66\xde\xea\x16\x11\xca\x8d\xbb\xfc\xdc\x92\x7a\x1c\x1a\x67\x51\xa7\x81\x12\x15\x81\xee\x16\xb3\xb1\xca\x48\xc8\xd5\xea\x13\x3d\xc5\xe6\xe3\x59\x20\x44\x9e\x11\x46\x04\x2b\x41\x44\xd3\x40\x81\x38\x81\xd3\x50\x21\x81\x8a\x4b\x3c\x84\x8a\xaa\xe0\x2a\x03\x48\xa4\x92\x2c\x92\x28\x8e\x91\x08\x5c\xc2\x29\x4a\x26\x78\x40\x72\x24\x83\x23\x8a\xa6\x15\xd6\xf5\xad\xd4\x6b\xbe\xf5\x6e\x90\xcb\xb2\x80\xbd\xfe\x4e\x8a\xfd\x5d\xc7\xb7\xd2\x38\x7f\x72\x56\x7a\x68\xdf\x7a\xe3\x54\x51\xf7\x7a\xb2\xf6\xe3\x96\x6f\xed\xf5\xd4\x6d\xc5\x9c\x56\x47\xea\x44\x63\x74\xb3\x1a\x33\x92\xea\x72\x96\x9f\xd6\x97\x60\xaa\x6e\x74\x0a\x37\xe8\x45\xa7\xce\x6e\x89\xde\xb4\xca\xcd\x8d\x4c\x8c\xe9\x2e\x86\x14\x31\x2e\x24\x3b\xe5\x75\xdb\xa8\xb2\x04\x9b\x6c\x8b\x55\xc4\xe2\x39\xdc\x46\x9d\x55\x13\x8d\x27\xf9\xcf\xe5\x5b\x5f\xf5\x6d\xaf\xda\x73\x81\x8a\x95\x7b\x11\xfa\xd6\x8f\x9c\xbd\xbf\x87\x6f\x0d\xeb\xdb\x84\x88\x7c\x2b\xbd\xbe\x8b\xe8\x96\x6f\x05\x99\x2c\x37\x5e\xd0\x63\xaa\x4b\xe7\x96\x73\xf8\x16\x5f\x08\x33\x76\xbe\xed\x4f\x24\x7b\x3e\xe3\xfa\xa8\x5c\xa8\x40\x7d\x82\x38\xbb\x93\x1f\xc7\x0b\x30\xb1\x5a\xea\x8c\x51\x29\xf7\xb6\x43\x7d\x2c\xa7\x61\x2a\xc6\xa3\xb5\x5e\x4f\x91\x4b\x3e\x59\x2e\x76\x75\x13\x27\x0d\x3a\x19\x79\xdc\x2a\xab\x0a\xc7\x11\x0c\x52\x68\x8e\x95\x69\xa4\x70\x9c\x82\x20\x8e\x24\x1c\xe7\x08\x4e\x86\x2a\xc9\xc9\x38\x4b\xe3\x88\x65\x29\x1c\xe1\xb4\x82\x48\x19\xb0\x04\xcb\x20\x1e\x22\xc4\x21\xe4\xfa\x56\xfa\x35\xdf\x7a\xf7\x45\x14\xce\x66\xca\x1b\xbe\xd5\xbd\xeb\xfa\x56\x1a\x3f\xc9\x1f\x84\xf6\xad\x37\xce\xcb\x72\xaf\x10\xaf\x7c\xb9\xe6\x5b\xcb\xd3\xda\x48\xa9\xa1\x6d\x49\xee\xa4\x3b\x55\x4e\x69\xd7\x27\x29\x3b\xdd\xa0\xec\x6c\x2e\xb9\x2d\x28\xb0\x3a\xa9\x33\xb1\x78\x91\x8d\xd9\xa5\xb7\x42\xc7\x68\x8d\xa5\x94\xd0\xb5\xe4\x7a\x2f\x17\x1b\x33\x69\x25\xde\x4e\xb7\x60\xea\x4d\xe9\x59\x9d\xa4\x60\x65\x49\xbc\xb3\x1c\xe7\x8a\x9f\xcb\xb7\xbe\xea\xdb\x5e\xb5\xe7\x3c\xdf\x1d\xae\xa3\xac\x5e\xfe\xc0\xb5\xaa\xf7\xf0\xad\x61\x7d\x9b\x10\x91\x6f\x0d\x7b\x42\xa5\xe7\x5b\xdf\xfa\x93\x5c\xb7\x95\xb5\xc6\xd9\xf4\xa8\x3d\x8e\x67\xdb\xad\xbe\xc0\xd6\x5b\xcb\x62\x7d\x2b\x58\xda\xac\x33\xa6\x45\xb4\x5a\x6d\x63\x71\xb3\x59\xda\xea\x8b\x74\x0e\xac\xd7\x69\x36\x2b\x76\x92\x55\x23\x36\xea\xaa\x44\xbd\x9d\x19\x72\x64\xa7\x98\x1e\x0e\x8b\x09\x9e\x4f\x9b\xc6\xf6\xd1\xbd\x87\xbf\xfd\xf6\xfd\xfb\x6f\xdf\xbf\x63\x29\x68\x43\x4c\x35\x4c\xac\x0c\xa7\xe8\x07\x36\x41\xdb\xc1\x0a\xea\x4b\x34\xd8\xb9\x5b\xf4\x17\xd6\xdc\xce\xd1\x0f\xac\x29\x24\x8a\x22\x96\x12\x9a\xc2\x5f\x58\x43\x1e\xa1\x29\xfc\x81\xcd\x97\x92\xae\xc9\x7f\x61\x95\xf5\x0c\x99\x3f\xb0\x1d\xb4\xdf\xce\x5c\xb6\x0f\xd6\x49\x24\xbc\x99\x0f\xb4\xd9\x10\x59\xf6\x40\x87\xbb\x3f\x48\x19\x22\x73\x47\x34\xfe\xf5\x3a\x69\x86\xaa\x22\xd3\x7a\x9a\xa2\x3d\x34\x17\x08\x94\x65\x63\x39\xb3\xad\x81\xa5\x0d\x67\xc8\xb4\x2e\x7e\x18\xcc\x27\x68\xbb\x47\x92\xac\x94\x1b\xcd\xba\x90\x2b\x37\xef\x20\x11\x8a\x4d\xb1\xee\xd1\x54\x29\x17\x7b\x17\x60\x7f\xc3\x30\x0c\x13\x52\xa9\x13\x90\xc1\xa8\xb1\x6a\x3d\x57\x12\xea\x3d\xac\x20\xf6\xb0\xdf\xdd\x3b\xdf\xf6\x4d\x4f\x84\xe3\xb1\x63\x59\xc8\x1e\x58\x36\xb4\xad\xd3\xcf\x51\x31\x71\x84\x18\x48\xbf\x0f\xe1\x39\xe9\x9a\x72\x41\xed\xd0\x30\xe7\x83\xa9\x36\x34\xa1\x3b\x7c\xfb\xbe\x47\x44\xb5\x0f\x6a\x10\xe5\x41\x88\xef\x52\xbf\x8f\x40\x1c\xb6\x2d\xdf\x57\xf7\x3f\x03\xd9\x50\x90\xf7\xd1\xde\xce\xf7\x1f\x35\xcb\x5a\x22\x73\x10\x09\x77\xe7\x68\x83\x98\x0b\x45\x18\xd6\x2a\xe7\x6a\x2d\x11\xfb\xfd\xd8\xfc\x1b\x76\x6c\xbf\xff\xec\x3e\xf0\xa4\x68\xa2\xe9\xd6\xa7\x19\x7f\xaa\x53\x8d\x39\x72\x95\x61\x30\x87\xa6\xad\xc9\xda\x1c\xce\x4e\x38\x09\xbe\x1d\x31\x67\xc1\x48\x6e\x71\x7a\x83\xac\x87\x39\x3f\x09\xa8\x83\x79\xbf\xd6\x20\x62\xee\xaf\xa1\xb9\xc5\xff\x4d\xd2\xee\x4a\xc0\x3f\x3e\xf9\xbe\x47\xc4\x9f\x0f\x6a\x10\x3b\x41\x88\xcf\xa9\x9f\xa0\xed\x05\xf9\xee\x78\xe8\xfd\x27\x22\x62\x5d\x60\x41\x34\x9e\xa0\x39\x27\xcd\xb9\x11\x20\x5d\xd7\x61\x48\x5b\xc7\x97\xec\x29\xcb\x95\x53\x62\xf7\x0e\x51\xc9\xba\x28\x34\x45\xb7\xe9\x39\x14\xac\x52\xf6\xbb\x9a\x56\x23\x57\xce\x60\x92\x6d\x22\x74\xea\xbb\xae\x53\xe3\x7a\xb0\xd7\xe9\x71\xe1\x3c\x46\xd1\x15\xaf\x29\x6d\x07\xde\xb8\x1e\x9a\x9c\x23\x88\x53\x4a\xce\xe6\xc8\xe7\xf4\xb8\x8d\x0f\x01\xc5\xc0\x42\x8b\x25\x9a\xc9\x97\x02\x93\xb6\x83\x11\xb4\x46\xaf\x50\xb6\x7b\xfe\x31\xb2\x4e\xed\x78\xf7\x54\x10\x35\x6e\x90\xf8\x0a\x3d\x2e\x84\xc7\x28\x72\xdb\x1e\xc4\xf3\x0d\x83\xf3\xb9\xae\xc9\xae\xb3\x35\x4c\xe5\xca\x20\x38\x40\x3b\xdd\x70\xee\x87\xa0\xd4\x1b\x83\x5d\x82\x7d\xe0\x4e\xc9\x46\xaa\x8a\x64\xbf\xaa\x5d\x8e\x09\x9a\xf2\x0d\xfb\xe2\x3c\xfc\xe5\x1a\xb1\x9a\x12\x11\x99\x9a\xf2\x30\x81\x7b\xd5\xdb\x91\x17\x82\x68\x63\x3e\x98\x47\x45\xb7\x07\xeb\x94\xf4\x2b\x81\x40\x28\x4e\x82\x19\xb0\x37\xd1\x31\xe0\xc1\xba\xa2\xd3\x21\x59\x38\x85\x10\xc4\x84\x31\xdf\x69\xe5\xc8\x08\xc5\x83\x47\xfc\x11\x46\x58\xe1\xdf\x16\xb4\xe5\x59\xbb\xe3\xaa\x5f\x97\xf5\x39\xb8\x53\x92\xdd\xdf\x7d\x34\x06\x53\x74\x2a\xd7\xa8\xc8\xba\x80\xf9\x98\x7b\x0b\x22\xd0\x76\xbb\xc4\x7e\xa5\x5b\x8f\x30\xc2\xab\xe4\x3d\xf5\xb3\x4d\x65\x87\x44\x82\x16\x7a\x79\xfc\x0c\x02\xe6\xa3\x5c\x41\x3e\x3a\x4f\xdb\xde\x25\xd0\x89\x8e\xa2\x21\xcf\x01\xf5\x10\x71\x4e\xcb\x5b\xa4\x39\xb4\x23\x33\x32\xf1\xf9\xe0\xdd\x23\xd2\xd7\xfc\x11\x4a\xa3\x91\xe3\x19\xb4\x47\xa9\xbc\x2b\xcd\x68\x68\x7b\x88\xa6\xdb\xb4\xec\x29\xd6\x0d\x63\xb2\x9c\xbf\x46\xd1\x39\xac\x87\x7b\xd4\x8d\x77\xaf\xd0\x37\x87\x9a\x39\xb0\xb5\x29\x8a\x84\x42\x3f\xb4\xc7\xec\xd6\x23\xf0\x1b\xe6\x27\xf9\x1b\xe6\xb9\x78\x59\x37\x2c\xa4\x0c\xe0\x65\xb6\xcd\x45\x1b\x81\xdf\xf6\xe0\xdc\xa3\xf8\xc9\xe8\x68\x07\x35\x32\xe9\x3e\x21\xd8\xbb\x72\xd3\x66\x0a\xda\x0c\x7c\x21\x87\x35\x30\x66\x03\xa8\x28\x26\xb2\xac\x57\x05\x7a\x17\xc1\xd9\x3c\xcd\xbb\xed\x9b\x19\xb9\x0d\x9f\xa0\xfd\x75\x3d\xb8\x05\xfb\x3e\xc5\x01\x56\x76\x0e\xd0\x8b\xc2\x77\xf0\xec\xed\x3c\xfc\x1c\xfc\x26\xd4\xbb\x61\xff\xae\xd1\x1d\x42\xbd\x18\x6a\x07\xf2\xa0\x44\x11\x51\x1b\x04\xfa\x6e\xf8\xf6\xa8\x26\x9f\x00\x8f\x5a\x19\xce\x40\x87\x89\x37\xaf\x83\x9b\xce\x0d\x73\xe7\xf8\x56\xc8\xb4\x34\x63\x16\xbd\xa0\xfd\x18\xee\x93\xef\x7b\xe0\x71\x66\x3c\xd7\x13\x32\x53\xf1\x98\xfc\x4f\x70\xdc\xe5\xe4\xa4\xed\xe3\x4c\xcc\x4d\xb4\xd2\x8c\xa5\xf5\x21\xdc\x04\x21\xbb\xcb\x56\xd0\x43\x8f\xf3\xb7\x4f\xa2\xbc\x1b\x4f\x7b\x04\x77\xf9\xb8\x9a\xed\x3a\x07\x7d\x18\x6f\xdf\xc5\xb4\xfd\xd0\x03\x27\xc0\xcf\x1a\xf8\x39\xd0\xf3\x29\x54\x44\x16\x7e\x0b\xc5\x23\x3c\xdc\x99\xd7\xdd\x44\x16\xdd\xf0\x75\x09\xf8\x21\xda\xef\x0f\x62\xa7\x93\xed\xf7\x50\x9b\x4b\xf8\xa1\xa7\xfa\x5e\x2e\x7f\x37\xb1\x5c\x6e\xb5\xd9\xd0\x8d\x81\x43\x0b\x38\x18\xdc\x8e\x3a\x6f\x89\xe2\x3c\x0c\x77\xda\x38\x4d\x6e\x10\xe6\xd4\x05\x4c\x0d\x45\x53\x35\xa4\xbc\x9a\xfb\xbd\x0d\xf6\x1a\xa1\x41\x6d\x6f\x50\x6c\x21\x5d\x8f\x84\x46\x17\xd0\x35\xaa\xdc\xbb\x37\x3b\x75\xd7\x24\xca\x5e\x3d\x83\x77\x8b\xae\xab\xfd\xba\x2f\x70\x88\x60\xc5\xe3\x12\xd4\x8e\xa2\x8b\xb2\x8e\xa0\x55\x8f\x0b\xb2\x9c\xc9\xcc\x21\xa0\xdd\x67\xda\x07\x92\x61\x4c\x42\xd3\x77\x03\xe6\xdd\x50\xf9\xf7\xdf\x15\x64\x43\x4d\xb7\xb0\xef\xff\xf7\x7f\xd8\x57\xcb\xd0\x95\x93\x35\xfb\xaf\x3f\x7e\xd8\x68\x63\xff\xf1\xc7\x37\xec\x7a\x43\xd9\x50\x1e\x6b\xe8\xae\x49\x5d\x6f\x2a\x19\xcb\xe1\xc8\x7e\x08\xfd\x59\xd3\xdb\x04\x9c\x35\xf5\x91\xf0\x07\xd6\xc9\x8a\x75\xd1\x75\xb6\xd8\xdf\x18\x49\x3e\x5c\xee\xa2\x29\x03\xf5\x64\xfd\x33\x5d\xf8\x98\xa2\x17\x0f\x2d\x96\xae\xd4\xc5\x5c\xa6\x7c\x58\x68\xc6\xea\x62\x5a\xac\x8b\xe5\xa4\xd8\xf0\xad\x0e\x3a\x77\x2b\x65\xac\x55\x4d\xed\x54\xa6\x2e\x36\x9a\xf5\x5c\xb2\xb9\xfb\x29\x25\x16\xc5\xa6\x88\x25\x85\x46\x52\x48\x89\x37\x56\xeb\x77\xf3\xef\xf3\xaf\x03\x5f\x4a\x32\x3a\x61\x9c\xe3\xb9\xb3\x14\x7f\x8d\x92\x73\xf9\xf8\xd3\xa7\x81\xc2\xf2\xcc\xf9\x4e\xdd\xc2\x55\x49\x78\x29\x9d\x9f\x2e\x87\x53\x3a\x82\xa4\xb0\xcf\x96\xdd\x56\x98\xe7\x24\x70\x99\x5c\xfd\x89\x62\xb8\x42\xcc\xb9\x2c\x02\xd2\xc1\xd1\x2a\x85\x3f\xd5\xf7\x19\x04\x72\x5d\x35\x2e\x72\xa9\x77\xb5\xe3\xfb\x77\x0c\x2a\x0a\x52\xb0\x29\x9c\x2d\xa1\xae\x6f\xcf\x08\x0d\x0c\x11\x77\x54\xee\xe5\x3d\x5d\x6e\x90\x82\xad\xa0\x29\x8f\xa0\xf9\x3b\xc3\xff\xe1\x95\x8b\xee\xda\xa8\xe8\x68\xac\xc1\xed\xfe\x0a\x44\x76\x12\x48\xef\xc0\x58\xc6\xd2\x94\xc3\x41\xda\x8f\x94\x0e\xc5\x6e\x92\xee\xea\xf3\x9e\x4e\x54\x0d\xcb\x1e\x9a\xa8\x51\x2b\x62\x0a\xb4\xe1\xce\xd6\x30\x65\x39\x9d\x63\xb2\x31\x9d\xeb\xc8\x46\x4e\x67\xfe\x7f\x01\x00\x00\xff\xff\xab\x33\xed\x40\x28\x6b\x01\x00") func paths_strict_sendHorizonSqlBytes() ([]byte, error) { return bindataRead( @@ -1206,127 +528,7 @@ func paths_strict_sendHorizonSql() (*asset, error) { } info := bindataFileInfo{name: "paths_strict_send-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc6, 0x39, 0xf7, 0xd0, 0xfe, 0x22, 0xd, 0xc9, 0x77, 0xc0, 0x49, 0x6f, 0xac, 0xa5, 0x16, 0x16, 0x65, 0xb6, 0xc1, 0xfc, 0xec, 0x50, 0x4b, 0x21, 0x53, 0x51, 0x64, 0xfc, 0x1c, 0x61, 0x14, 0x18}} - return a, nil -} - -var _self_sendCoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x69\x93\x9b\xca\x92\xf6\x77\xff\x0a\xc2\x5f\xda\x0e\xb5\x4f\x03\xc5\x6a\xbf\xbe\x11\x5a\x5b\x2b\xda\xd7\x37\x26\x3a\x0a\x28\x24\x24\x36\xb1\x68\x9b\xb8\xff\x7d\x02\xd0\x02\x08\xa9\xd5\x52\x9f\x7b\xef\xc4\x98\x0f\x3e\x36\x95\x7a\xea\xa9\xac\xcc\xac\xaa\x04\xf2\xfc\xf8\xf1\xe5\xc7\x0f\xac\x65\x3a\xee\xd4\x46\xdd\x76\x1d\x93\xa1\x0b\x45\xe8\x20\x4c\xf6\x74\xeb\xcb\x8f\x1f\x5f\xfc\xf6\x82\xa7\x5b\x48\xc6\x14\xdb\xd4\x4f\x02\x2b\x64\x3b\xaa\x69\x60\xfc\x5f\xcc\x5f\x44\x44\x4a\xdc\x62\xd6\xf4\xcd\xff\x79\x42\xe4\x4b\xb7\xd8\xc3\x1c\x17\xba\x48\x47\x86\xfb\xe6\xaa\x3a\x32\x3d\x17\xfb\x8d\xe1\xbf\x82\x26\xcd\x94\x16\xe7\x77\x55\x59\x43\x6f\xaa\xf1\xe6\xda\xd0\x70\xa0\xe4\xaa\xa6\xf1\xe6\x20\xc7\xc7\x3d\x17\x96\x34\xd5\x87\x46\x86\x64\xca\xaa\x31\xc5\x7e\x63\x4f\xfd\x5e\x89\x7b\xfa\x75\xe8\xdb\x90\xa1\x2d\xbf\x49\xa6\xa1\x98\xb6\xae\x1a\xd3\x37\xc7\xb5\x55\x63\xea\x60\xbf\x31\xd3\xd8\x63\xcc\x90\xb4\x78\x53\x3c\x23\xec\x4b\x34\x65\x15\xf9\xed\x0a\xd4\x1c\x14\xeb\x46\x57\x8d\x37\x1d\x39\x0e\x9c\x06\x02\x6b\x68\x1b\xaa\x31\x0d\x45\x6c\x73\xfd\xe6\x20\xc9\xb3\x55\x77\xeb\x83\x2b\xca\xaf\xbd\x02\x10\xb4\xa5\xd9\x9b\x05\xdd\x19\xf6\x1b\xb3\x3c\x51\x53\xa5\x67\x5f\x63\x12\x74\xa1\x66\x4e\x7f\x7d\xf9\x52\xe8\x34\x5b\x58\x45\x28\x14\x47\x58\xa5\x84\x15\x47\x95\x6e\xaf\xbb\x97\xfc\xcb\xb3\xa6\x36\x94\xd1\x4c\x75\x5c\x71\xeb\xa0\xe5\xaf\xab\xd2\x8e\x64\x2d\x3d\xd3\xf6\x74\xe7\x36\x61\x64\xac\x6e\x91\xd4\x90\x3c\x45\xf6\x2d\x92\x3e\x4f\x05\xa1\x1b\x25\x6f\x10\x13\x91\xe3\x9a\x8a\x82\x6c\xd5\x90\xd1\xe6\xba\x2c\x94\x24\xd3\x33\x5c\x11\x6a\xd0\x90\x90\xf3\xeb\x4b\xb6\xde\x2b\x76\xb0\x5e\x36\x57\x2f\x46\xa4\x9b\x42\x7d\x9c\xa2\x5e\xd3\xde\x62\x01\x7a\xbe\x29\x74\x7b\x9d\x6c\x45\xe8\x45\x7e\x14\x17\x7c\xb3\x16\x68\x7b\x0b\xbe\xbb\x79\x1f\xfa\x28\xf3\x01\x54\x05\xdd\xc0\x39\x2a\x76\x3b\xb6\xed\x39\xae\xa6\x1a\xc8\xb9\x86\x7c\x14\xba\x19\xd7\x67\x81\x82\x68\x70\x05\xf7\x24\x74\x3b\xee\xd1\xe4\xaf\xe1\x1e\x85\x6e\xc6\x0d\xe5\x55\x43\x31\xaf\xe0\x9e\x84\x6e\xc6\xb5\x3c\xd1\xf1\xc4\x2b\x98\xa1\xc0\x47\xf0\x34\xd5\x99\x2d\x3d\xe4\x5d\xd3\x6c\x54\xec\x76\x6c\x84\xec\x6b\x6a\x0d\xda\x6f\x46\x0b\xdc\xf8\x1a\x5c\x28\x70\x33\x5e\x18\x95\x66\x08\xca\xd7\x61\x63\x72\x7f\x33\xfa\x3e\x52\xa2\xe5\xdb\x8d\xdd\x88\xd0\xb8\x02\x2e\x42\xe3\x66\xc2\xfb\xe8\x77\x8d\xeb\x41\xe4\xa3\x98\xfe\x1e\xe0\x7d\x58\x5f\x6a\x8f\x1c\xc8\x26\x81\x53\x43\xee\x75\xd9\x63\x68\x7c\x4f\xec\x14\xe8\xde\x91\x3c\x06\xae\xeb\x72\xa7\x40\xf4\x8e\xdc\x31\xb0\xbc\x2b\x77\x13\xbf\x53\x40\xb9\x2e\x17\x06\x89\x77\x65\x8e\x2e\xff\x8e\xa4\xef\xc7\xd7\x45\x42\xdf\xbc\x2e\x13\x73\x85\xeb\xa2\x22\x34\xae\x0b\x1c\x4c\xf5\x26\x29\xdf\xf2\xf6\x82\xc5\x51\xaf\x28\x74\x2b\x4d\x21\x2a\xac\x59\x53\x67\xa9\xed\x25\xba\xf9\x72\xb1\x91\x3d\xc3\xfa\xf5\x25\xdc\x1b\x0b\x50\x47\x3f\x0f\xf7\xb0\xde\xd6\x42\x3f\xf7\x3f\xf9\x85\x75\xa5\x19\xd2\xe1\x4f\xec\xc7\x2f\xac\xb9\x36\x90\xfd\x13\xfb\x11\x6c\x99\xf3\x9d\x62\xb6\x57\x3c\x20\x1f\xf0\xbe\xc4\x10\xe3\x8d\x7b\xe0\x7c\xb3\xd1\x28\x0a\xbd\x2b\xc8\xa1\x00\xd6\x14\xe2\x00\x58\xa5\x8b\x3d\x1d\xf6\xb7\x87\x7b\x4e\x00\xf2\x94\xec\xf9\x30\xfc\x7d\x9f\x47\x0d\xbd\x3b\x9e\x98\x2e\x85\x66\x2f\xa1\x4f\x6c\x58\xe9\x95\x8f\xb4\xa2\x1b\xda\x58\xf7\x27\x94\x04\x91\x8f\x0c\xfe\x0c\x24\x50\x40\xab\xfe\x62\x4d\xfd\x53\x8c\x65\x9b\x12\x92\x3d\x1b\x6a\x98\x06\x8d\xa9\x07\xa7\x28\x50\xc3\x8d\x1b\x70\x5f\x4c\x46\x0a\xf4\x34\xf7\xcd\x85\xa2\x86\x1c\x0b\x4a\xc8\x3f\x4d\x3c\x25\x5a\xd7\xaa\x3b\x7b\x33\x55\x39\x72\x40\x88\x0d\x36\x6a\x90\xfb\x61\x06\xa6\x7b\x1a\xe4\xc1\x00\xd2\x14\x1e\x5a\x79\x34\xe8\x7e\xfb\x82\x61\xd8\xe1\x8e\x2a\x63\xd2\x0c\xda\x50\x72\x91\x8d\xad\xa0\xbd\x55\x8d\xe9\x37\x9a\xf9\x1e\xcc\x8d\xd0\xaf\xd7\x9f\x03\x69\xff\x87\x06\xd4\x51\x8a\x30\xc7\xa5\x09\xaf\xa0\xe6\xa5\x49\x13\x04\x99\x14\xd7\xa0\xe3\xea\xa6\xac\x2a\x2a\x92\x31\xd5\x70\xd1\x14\xd9\x47\x91\x2f\xdf\x93\x73\x7f\xf4\xe2\x07\x75\xe1\xdc\xa5\x88\xfd\x41\x00\x13\xd5\xa9\x6a\xb8\x89\x46\x07\x2d\x0d\x4f\x4f\x6f\x33\x3c\xdd\xf1\x44\x64\xb8\xb6\x7f\x14\x4c\x0e\x33\x94\x51\x0d\x45\x83\xfe\x89\x51\x46\x8e\x9b\x4e\x27\x14\x9c\x99\x3a\x92\x4d\x1d\xaa\x46\x8a\x14\x45\x25\x49\xbb\x33\x1b\x39\x33\x53\x93\x1d\xcc\x45\x9b\x24\x33\x45\x83\xd3\x4b\x8c\xae\xce\xcd\x5e\x23\x9e\xdf\xab\xa6\x42\x51\xd5\x54\xd7\x1f\x5c\x38\xfe\x83\x4a\x34\xed\x5a\xb3\x3a\x35\xfc\xbd\x90\x4f\x2b\xbc\x13\xd9\x0d\x1c\xb7\x16\x7b\xa5\xbf\x05\xc7\x6a\x2c\x5f\x2e\xe6\x6b\xd8\xb7\x6f\x87\xa9\xf8\xc7\x6f\x0c\xff\xfe\xfd\xca\xaf\x93\x04\x93\x38\x67\x03\x78\x0f\x31\x36\x97\x09\xb4\xf8\x3c\xbf\x87\x74\xae\x9e\x04\x5c\x8a\xfe\x42\xcc\x73\xc7\xf0\xd7\xbf\x7b\x7d\xc2\xdf\x32\x86\xee\x60\x98\x32\x8a\xfa\x42\xcc\x07\xce\x3b\x8d\xaf\xcf\xf7\x76\x1f\xdf\x18\x87\x44\xf6\xf7\xa0\x33\x8b\x90\x61\xce\x6c\xdb\xb2\xd1\xea\x5d\x21\xd1\x93\x16\xc8\xd5\x54\xc7\x7d\x57\xf4\xb8\xdb\x3e\x98\x7b\x78\x5b\xd2\x4c\x07\xb9\xaa\x7e\xc1\xf3\x83\xc0\x9a\xe2\x5b\x91\x39\x8f\x6f\xea\x8f\x78\x89\xf9\x3e\xf5\x73\xc1\x74\x2e\x9d\x0d\xe2\x30\xa7\x51\x5c\xb2\x96\xfd\xe6\xeb\xde\x19\xdb\x1f\xbc\xbe\x1d\x9d\x1c\xd9\x37\x46\xd0\x30\xf3\x22\x5f\x8a\xa0\x81\xb9\x43\xc7\x41\x6e\x9a\x3e\x43\x5f\xbd\xd8\x0c\x75\xdf\xad\xd2\xa1\x2d\x5b\x95\x90\x71\x21\x88\x05\x8d\x97\x22\x5c\xd0\x88\xc9\xa6\x27\x6a\xc8\xb7\x37\x49\x0d\x32\x92\x9f\x1a\x45\x23\x33\xbc\x3f\xb2\x86\x63\x49\xcc\xeb\x7e\x80\x17\x6c\x63\xff\xcb\xbd\x86\x13\x3f\x3d\xe8\xfd\x92\x41\x84\x1b\xf6\x7b\xed\x21\x3c\xd6\x87\xe6\xa0\x5a\x69\x0b\x3f\x7d\xe6\xb9\xa6\xed\x1e\xb5\x51\x28\x96\xb2\xfd\x7a\x0f\xc3\x93\xcb\x26\xda\xb8\xd0\x75\x91\x6e\xb9\x98\xef\x16\x8e\x0b\x75\x0b\xf3\xb7\x4c\xa6\x17\xde\xc1\x76\xa6\x81\xce\x17\x5b\x05\xaa\x9a\x67\x47\x96\xda\x4b\x3d\xb8\x5b\x0b\xbd\x3f\x29\x61\x5a\x22\x82\x7b\x1e\xf6\x8f\x3d\x5e\x98\x9d\x7d\x66\xc3\xb4\x93\x93\xfa\x2d\xd0\xc4\x3f\x30\xfc\x3b\x96\x15\x0a\x58\xf8\xcf\xff\xf7\x1b\x63\x68\x1a\xd0\xdf\x53\xe7\x2a\x7a\x0c\xbb\x7b\xca\xa2\x59\x9e\x68\xcc\xbd\xa0\x8d\x30\xd1\xe6\x7b\x5d\x2a\x21\xff\xec\xf8\x00\x15\xc7\x13\xf7\x24\x6c\xe4\xc4\x16\x20\x90\xba\x63\xb4\x11\x3c\xfa\xd2\x39\x9f\xc8\x99\xf7\x5e\x4e\x91\x64\xdd\x0d\x2b\x63\x48\x6c\xe9\xa0\x6b\x2b\xcc\x39\xcf\xc8\x19\xfe\x5e\x9e\x27\x88\xdb\x79\x9e\x2d\x72\x89\x76\x64\xac\x90\x66\x5a\xe8\x9d\x25\xed\xd4\xf5\x03\x0b\x51\x24\xdd\xf1\x80\x0a\x0e\xf9\xda\x6f\xb7\xcc\xc3\xc9\x8a\xde\x53\xc4\xf2\xc2\x42\x13\x57\xc2\x21\x0f\x1c\x43\x4c\x2a\x22\xd6\xdb\x45\x65\x9c\x72\x44\x77\x2b\xe3\x94\x14\xff\x76\xf2\xdb\xf8\xe1\x2d\xc5\xa7\xae\x79\x77\x24\xc3\x75\x2f\xab\xc8\x23\x80\x7b\x8e\x5d\xc1\x8a\x7f\x25\x52\xab\x8e\xe3\x21\xfb\x76\x28\xc9\x94\x53\x4f\xa7\x67\x6a\x71\x35\x55\x57\x2f\xec\x28\xae\x9e\x05\xff\x9d\xa7\xaa\x88\x75\x46\x9e\xaa\xdc\x75\x8a\x8a\xfe\xfe\xb3\xce\x51\x11\xcc\xfb\xcf\x3f\xd7\x50\xc3\x49\x4b\x20\xed\x67\xf2\x1f\xe9\x8e\x17\x4b\xf7\xde\x6d\xe4\xd1\x67\x68\xa1\x99\xbb\x9b\x58\x28\xbe\xe1\xbc\x91\x34\xc0\x4d\xf0\x94\xf2\x62\xab\x34\x83\xc6\x14\xa5\x1e\xec\xa3\xca\x89\x3e\xb6\xbb\x3f\x56\x9f\x72\xe7\xf7\xab\xe8\x5f\xac\x1f\xd1\x94\xb7\x69\xca\x71\x37\x36\x72\x3c\x2d\x35\xba\xbb\x1b\x1d\xbd\x7b\x9e\x3b\x3d\x62\xbd\x5f\x9f\x89\xe7\x16\xf7\x2a\x35\xf1\xc4\xf9\xdb\x4d\x8a\xdb\xff\xe8\x9a\xf6\xf6\x22\x69\x8a\xb8\xcd\xec\x12\x4f\xb8\xef\x51\x54\xc1\x3f\x59\x2b\xa6\xfd\x4e\x32\x14\x2b\x64\x7b\xd9\x77\x74\x76\x1d\xd2\xf9\x30\x5e\x45\xe8\x16\x3b\x3d\xac\x22\xf4\x9a\xa7\xa4\xe2\x20\x5b\xef\x17\xbb\xd8\xb7\xa7\xd7\x5c\xa7\x35\x2e\x57\xea\x64\xbe\x02\x4a\x42\x9b\xca\x8d\xea\xa5\x86\x50\xa8\x97\xaa\x7d\xa1\xd5\x27\xcb\x63\x30\x69\x94\xba\xe5\xa6\xd0\xcf\x17\x9b\xd9\xee\x90\x6d\xe7\xd9\xe6\x88\x2c\x3f\x3d\x63\xfc\xfe\xe2\xf6\xff\xc5\xf1\x67\x8c\x78\xc6\xf0\xe7\x50\xcb\xd8\xd3\xd3\x33\xf6\x94\x6d\x67\xb3\xd9\xec\xef\xdf\x4f\x41\x03\x79\x68\x3b\xfd\xf9\xfd\xd7\x7b\x0c\xf3\xa3\xda\x2b\xd3\x11\xa8\xa6\x50\x29\xb6\xf2\x0d\xa1\x94\x63\x01\x99\xa5\x00\x33\xa1\x5b\x42\xa1\xdb\xa9\xbf\x0e\x6b\xec\x6b\xae\x9e\x6f\xb4\xeb\x95\x52\x93\xea\xb2\xc5\xf1\x70\xd0\x3f\x31\xf4\x89\x71\x34\xc7\xf3\x80\xa2\x79\x70\x9d\x21\x48\x65\x78\x61\x4e\x92\xb9\xac\x07\xa6\xf7\x72\x86\xea\xa3\x73\x1c\xcf\x52\x1d\xd5\xc8\x00\x99\xe7\x14\x1a\x30\x08\x31\x9c\x4c\x88\x24\x2b\xd2\x22\xc7\x2b\x24\x80\x0a\x0d\x08\x42\x64\x69\x86\x87\x24\xa5\x40\x85\xa0\x70\x00\x65\x5c\xa4\x49\x91\x01\x40\xc4\x59\x11\xf1\xbc\xaf\x2a\xfc\xc1\xcb\xc7\xa0\x59\x12\x92\x08\x90\x8a\x42\x52\x1c\xc4\x59\x11\x47\x2c\xae\xc8\x84\xc2\xc8\x80\xe0\x24\x42\x81\x92\x4c\xe2\x22\x23\x49\x38\x27\x01\x20\xd3\x2c\x4b\x93\x34\xcf\x31\x1c\x41\xd2\x90\x60\x9e\x0e\x46\xf6\x94\xfd\x8f\xbd\x72\xa3\x9a\x4a\x6d\x5f\xb6\xdd\x5a\x8e\x2d\x18\x05\xbe\x4c\xe2\x9b\x79\x2e\xe3\xe0\x53\xd7\x59\x57\xd6\x3b\x62\x24\x77\x87\x63\x98\xab\xc2\xd2\xd4\x97\x2f\x0a\x54\x1d\xee\x2c\xb2\xfd\x2e\xf2\x24\x3b\x22\xa8\x40\x2c\xb7\xf8\x17\x0c\xe4\x53\xaf\xa7\x84\xab\x5f\x30\x54\x16\xa7\x19\x5a\x12\x25\x59\xc4\x59\x08\x28\x96\x82\x8a\x88\x8b\x32\x8d\x4b\x12\xaf\xd0\x80\xa5\x78\xc8\x40\x11\xa7\x29\x51\x52\x14\xc0\x41\x24\x2a\x94\x48\x40\x06\x67\x18\x46\x42\xd0\x37\x90\x4f\x31\x76\x99\x16\x45\x1a\xd2\xbc\x84\x10\xc3\x2a\x14\x2b\x43\x9e\x17\x29\x20\x01\x19\x00\xc0\xd2\x84\x0c\x24\x0e\xb0\x04\xc7\x52\x24\x87\x68\x4e\xe2\x78\x1a\x2a\x38\xc1\x70\x32\x4e\xb2\x08\xf7\x79\x90\xcf\x18\x41\xd3\x3c\xcd\xf2\x2c\xcd\xed\x2d\x36\x4f\xb6\x26\x73\x42\xf0\x68\x13\x17\xab\xec\x90\x32\xb6\xcd\x55\x7f\xf3\x0a\x06\x96\xb9\xc8\xac\x4a\xd9\xa6\x9b\x27\x6a\x64\x83\xcd\xb1\xcc\xc4\x2c\xf7\xfb\xcb\x56\x93\xe8\x9a\xa3\x61\xae\x3d\x54\xdb\x06\x62\x32\xd9\xb2\xd4\xc0\xf3\x83\x9a\x3b\x15\x5e\x76\x45\x7d\x05\x0b\x45\x9c\x0a\x35\x3c\x6a\x0d\x1a\x62\x60\x51\x95\xe3\x1f\x61\x78\x73\x4e\xff\x5e\x67\x5b\xed\xbd\xed\x14\xdd\xe9\x56\x35\x8c\x8a\xe3\x0c\x69\x37\x87\x44\xf2\xc5\x15\x26\x39\x8b\xb0\xdd\xbc\x58\x59\xc9\x26\xe4\x17\xf9\x97\x02\xaf\x4f\xeb\xbb\x81\x47\x58\x93\x9d\x37\x79\xe9\xf0\xcb\x89\x5b\x58\xf3\x8d\x9d\xdc\xc1\xb9\x29\x78\x2d\xb7\x4d\x7a\xbc\xad\x0e\x57\xd9\xe1\xbc\x5d\xcd\xe4\xc2\xfe\x53\x2c\x3a\xdd\x62\x0f\x16\x5d\xc0\xab\x7f\x9f\xe9\xfd\x4d\xd7\x8d\x16\x0d\x00\xe2\x38\x5a\x66\x14\x8e\x43\x24\x41\x20\x11\xe7\x39\x59\x94\x70\x5a\xa6\x24\x05\x40\x9a\x91\x78\x52\xe1\x68\x06\x00\x05\x87\x34\x81\x58\x91\xe0\x64\x11\x00\x85\x96\x69\x0e\x01\xca\xb7\xc6\xcf\xf0\x0a\x8e\x25\x64\x9c\x21\x38\x24\x92\x8c\x4c\xf0\x34\xe2\x15\x46\xc2\x01\x20\x79\x82\x06\x32\x47\xe2\x12\x4e\xd2\x50\x92\x64\x89\x40\x90\x63\x24\x8a\xe2\x08\x12\x70\x04\x4e\x8b\x0a\x23\xb1\x3e\x06\x88\x58\x34\x7f\xb0\x68\x90\x1b\x8e\xea\x3b\x31\xc7\x08\xe5\xee\xca\xa9\x13\xed\x5d\x95\xef\xc9\x55\x6b\xe9\x94\xba\xdc\xcb\x4e\xf5\x56\xb8\x03\xc7\xaf\x13\x87\xd1\x19\xb6\xa5\xcc\xd7\x99\x62\x8d\x6a\x36\x46\x7d\x6e\xdd\xd0\x4c\x73\xd3\xf7\xe6\x8b\x8a\x55\x52\x95\xbc\x69\x6a\xb9\xdd\xa4\xb6\xf3\x18\xae\x18\x68\x38\xb0\xe8\xf5\x49\xe3\xe5\x75\x59\x70\xf4\xce\x38\x33\xc0\xe9\x0e\xd7\x96\x36\xbb\x3a\xb3\xe5\x5a\x53\x5a\xe4\x6a\xf4\xa8\x95\x77\x1d\xce\x54\x18\xd0\x2e\x15\x96\xe5\x72\x7b\x3c\x66\xb6\x62\x47\x43\x06\xb9\x2e\x34\xac\x52\x8f\xcc\x17\xb2\x55\xb8\x13\xd6\x68\xf9\xba\x29\x4e\xbb\xcd\x5c\x4e\xe4\x1d\x39\xb0\xd8\x46\x8a\xc5\x16\x2a\x69\xb3\xfe\xbf\xdd\x62\x2f\xec\x40\x52\x1e\xb5\x3c\xb0\x9f\x39\xcf\xd3\x3f\x02\x76\x29\x91\xfc\x18\x66\x32\x17\xfc\x00\xda\x85\x4c\xee\x03\x88\x17\x72\xae\x1f\xdd\x0d\x46\xf2\xae\xa7\x1d\x75\x96\x9d\xf4\x9a\xad\x5c\x17\x54\xea\x85\x8a\xc0\x8c\xf2\x25\x50\x9c\x74\xf3\x35\x50\xad\x0d\x26\xe5\x71\x65\xd4\x1d\x91\xbd\x6c\x93\xec\x76\xd9\xdc\x6b\x7b\x54\x63\x4b\xbd\x7a\xad\x4f\x86\x2b\x5a\xb8\xef\x2a\x64\x26\x1e\x7a\x1d\xe2\xf5\xd7\xd9\xca\x56\xeb\x8e\x3e\xc9\x0f\xdc\xda\x92\x6e\xcd\x4a\xf4\x88\x68\x14\xdc\xae\xc6\x55\xcd\xd1\x80\x73\x88\x93\xf5\x05\xee\x94\x0f\xfe\xea\xbb\x59\x51\x9d\xca\x9d\xae\xc9\xb1\x83\xda\x4c\x1e\x97\x72\xb0\x9a\x97\x59\x9b\xca\xca\xeb\x5d\xbb\xda\x5f\x92\x59\xf0\xd2\xe8\x42\xde\x6c\xf4\x7a\x81\x8b\x66\x73\x12\xdf\xdf\x78\xc1\x5f\xa7\xc7\x3f\x72\x01\xe8\xfa\xf8\xef\x42\x36\xcb\xe7\x23\x5e\x9c\x33\x36\xd2\x4e\xdd\x2d\x5c\x55\x28\x54\xeb\xc4\xd2\xae\x4f\xe7\xbd\x9d\x3d\x51\x1a\x46\xd3\xe1\x54\x75\xec\xbe\x36\xf3\x72\x7d\x2c\xa9\x35\x33\x80\x43\x68\x3e\x77\x3d\x43\xa3\xa0\x85\x76\x8d\xb9\xd3\x5b\x14\x87\x93\xd2\xae\x93\x29\x97\x72\x85\x8e\x51\xb0\x1d\x65\x94\x53\x96\xb5\x96\x30\x91\xe5\x8c\x93\x19\x40\x73\xb4\x18\x55\xf0\x4e\xd6\x6b\xb7\xf8\x75\xa9\x37\xd6\xb7\xea\xcc\xb4\x9a\xe5\x72\xbf\xdd\x72\x71\xb6\x2d\x31\x39\xff\x80\x91\x58\x2d\x3e\x79\x6a\xc0\x43\x53\xd3\x88\x4f\x4d\xa1\x60\x3b\x7c\xa6\x55\xa0\xda\xf6\x94\xda\xc8\xbd\x5d\x76\x3b\x54\xe7\xa5\x2e\xd3\x6c\xab\x8b\x61\x95\xab\xa9\x6a\xbf\x2c\x2c\xec\x26\x6b\xaf\xdb\xc7\xa9\x59\x25\xa2\xcd\x87\x55\xdf\x2d\x53\x45\xb9\xda\x2e\xeb\x7d\x6f\x5b\xa5\x96\x23\xdd\xe2\x65\xc9\xf3\xaa\x95\x4c\x33\xa3\x0e\x55\x7a\xc1\xb6\xeb\x1d\x95\x35\x6b\x6d\xd2\x66\x73\x23\x1a\xad\xcb\xa6\xf1\x3a\xd8\xce\x7b\x33\x55\x13\xd9\xca\x24\x53\xc6\x1b\x4b\x8b\xf7\x1c\xbb\x6c\xd5\x3b\x65\x45\xee\x6e\x0b\xeb\x50\xf5\x97\xfd\x2c\x2d\xb1\x7f\x87\x9f\x1d\x92\xfb\xc7\xc9\xe4\x15\x82\x05\x80\x13\x01\x4f\xca\x1c\x27\xe3\xfe\x32\x4f\x43\x28\x92\x08\xe7\x64\x20\x21\x91\xa1\x15\x40\xb2\x00\x4a\x0a\x49\x72\x3c\x27\x52\x0c\xe0\x48\x96\x12\x19\x42\xe2\x38\x08\xa3\x93\x1a\x28\x39\x5c\x13\x5b\xb4\x4e\x53\x13\xb1\xed\xc0\xd7\x8c\x57\xf1\xb6\x93\x45\x75\x88\x2f\xed\x45\xa6\x38\xd2\x94\xfe\xba\x49\xd4\x46\x6b\x7d\x26\x8f\xb6\xbb\xfe\x7b\x31\xff\x42\x22\xff\xc3\x83\x3f\x25\xf3\x8f\x83\x3f\x7c\x3d\x13\xbe\x9a\x87\x9d\x5d\xfe\x86\x84\xc0\xcf\x7c\x22\x05\xc9\x40\xee\xda\xb4\x17\x16\x74\x1c\x6b\x66\x43\x07\xa5\x20\xf5\x90\xe3\x62\xdd\x42\x09\x13\x42\x61\xec\x17\xd6\x45\x96\x8b\x74\x11\xd9\x18\x89\x13\xf4\x2d\x1d\x29\xa6\x2d\x21\x47\xb2\x4c\xc3\x40\x1b\x57\x83\x9e\x21\xcd\x92\x1d\x05\xaf\xbe\xdd\x02\x16\xee\x05\xf7\xa9\x25\x27\x7d\xfc\xff\x1d\x64\xa2\xbe\xba\xaa\x8e\xbe\xfe\xc4\xf0\x30\x31\xf5\x75\xff\x2d\xd1\xd7\x9f\x58\xd8\x1e\xdc\x9c\x41\xe7\xeb\xcf\xf0\xc5\xbb\xe0\xe6\x3f\xf7\xc2\x0a\x42\xb7\x09\xea\x70\xe3\x6e\x1c\x75\x77\xa3\xb8\x8d\x1c\x64\xaf\xde\x13\xfe\xf2\xcf\x9b\x54\x01\x1d\x37\x78\x63\x44\xde\x3f\xb9\x4d\x51\xc5\xc3\x7b\xe4\x1b\x78\xec\xa3\x2d\xb4\xa5\x99\xba\xda\x37\x5e\x98\x92\xd3\x1c\x10\x7b\x85\x04\xea\xb0\xbf\xfe\xc4\xbe\xae\x08\xe2\x2f\xe2\x2f\xfc\xeb\xbe\x41\xf2\x6c\x1b\x19\x6e\x3d\x18\xda\xd7\x9f\x18\x88\xdf\xcf\x05\x2f\xf5\xf8\x7a\xfb\xff\x47\x45\x9e\x54\x7a\x94\xf4\x81\x49\x8a\x60\x39\x8a\x10\x71\x56\x02\x24\x0b\x69\x9c\x53\x10\x47\xc9\x8a\x7f\xb8\x54\x28\x28\xe2\x0c\x90\x28\x56\x81\x40\x51\x10\xe2\x70\x9c\xa3\x09\x9c\xa3\x70\xce\xbf\x0d\x78\x91\xde\x33\x3a\xe2\xfa\x56\x1c\x9b\xc0\x63\x4b\x30\x76\xdf\xe4\x62\x4d\xff\x4c\xfc\xde\x31\xa0\xe5\xf3\x42\x0a\x20\x20\x89\x43\xc0\x73\x08\xb1\x40\x42\x24\x49\xb2\x34\x82\x1c\xc1\xb2\x2c\xc7\x88\x50\xa2\x29\x86\x66\x14\x00\x64\x49\xa2\x14\xa0\x20\x89\xc1\x65\x9a\x96\x65\x85\xf0\x4f\xe2\x5f\xbf\xa4\xf4\x70\x41\x07\x8f\xa6\x98\x3e\xae\x03\xe2\xf9\xbc\xcd\xf4\x5c\xcb\x73\x3f\x77\xec\xd7\x34\xfc\xf0\xa8\xff\xa3\x35\x7c\x9b\x95\xfd\xd1\xc1\x1f\x1d\xfc\xd1\xc1\x1f\x1d\xfc\xd1\xc1\x1f\x1d\xfc\xd1\xc1\x1f\x1d\xfc\x8d\x3a\x08\xfe\xf6\x5f\xb7\x1f\x5e\x1c\xc9\x0a\x5e\x9d\x4f\xbb\x9e\x0e\x27\xf4\x30\x45\xf5\xa2\x8b\xc6\x4c\x73\xf3\x1b\x53\x64\x28\x95\xad\xea\x6d\x4d\xec\x2e\xbd\x1e\xd5\x41\x03\xbe\x97\x65\xfb\x96\x92\x87\x25\x42\xa9\x0b\xa7\x14\x55\x21\xf8\x93\xe6\x46\x0d\xca\xa1\xeb\xe3\x79\x7b\xdb\xe5\xe1\x72\x4b\x55\x70\x8e\x21\x47\xbb\xea\xce\x6e\x55\x4c\xbd\xde\x99\x4f\x8d\x2e\x59\xae\xa8\xcb\x63\x46\xa0\x3a\x7f\x30\x4d\x73\x4f\x46\x21\x97\xdd\xf5\xe7\xaf\x55\xbb\xc9\x17\x07\x78\xdd\xc6\x97\x93\xfe\x4c\xee\x52\xee\xa8\xd5\x78\xad\x58\x5d\x34\x93\xac\x02\x35\xe4\x97\x0d\xa9\x4f\xeb\x8e\x6d\xf6\x6c\xa6\x33\x6d\x14\xe5\x52\x77\x55\x45\xbc\x02\xd5\xf5\x90\xcd\x3a\x0d\x50\xe8\x6f\xb6\x7a\x9d\x83\x82\x31\x29\xbd\x54\x4f\x19\x8e\xfc\xf8\xc1\xa7\x04\xb9\x7b\xd2\x60\xed\x06\x51\xd9\xa8\x70\xb7\xea\x94\xe4\x3c\xc3\xd7\xf4\x41\x65\xd4\xf7\xea\x83\xdd\x2e\xa7\xd6\xfa\x86\x39\xaa\xb5\x33\xa5\x15\x9c\x97\x4b\xcd\x89\x5d\x63\x8a\x4c\x66\x31\x2e\xe4\xca\x9d\xbe\xbd\x1d\xad\x46\xa4\xe9\x94\xbc\x75\xbd\x20\xac\x89\x86\x64\xa9\x2f\xaf\xf3\x09\xd9\x51\xb6\xed\x62\x40\x27\xaf\x28\x74\x41\x69\x73\x2b\xc1\x79\x15\xc4\x81\xb7\x54\xa4\x62\xb3\x5a\x74\x5d\x19\x5a\x40\xe4\x54\x79\x6a\x21\x46\xb1\x4a\xf3\x96\xe0\x74\xc4\xae\x4c\xac\xc9\xbe\x3e\xc8\xeb\x85\x65\x6f\x4d\xf5\xed\xaa\x4c\x95\x41\x77\x5b\x9e\x12\xd9\x26\x14\x04\x0a\xcd\xc7\x16\x08\x8d\xe6\x01\x7b\x9b\x1e\xe7\x7f\xfd\xe8\x53\x99\xe0\x9a\x7c\xcc\x7e\xdb\xc5\x59\x26\x57\xee\xf6\x73\xb4\x56\x77\x54\x54\xd3\xe8\xa5\x32\x1a\xd5\x6d\xb5\xdb\x9a\xaf\x4c\xcd\xf4\x26\x4d\x3c\x8f\x8f\x3d\x26\xbf\x10\x96\x99\xf5\x20\x33\x72\x72\x4c\x75\xa3\x49\x26\x4e\x8d\xad\x61\x66\xfb\xaa\xcc\xf8\x42\x6d\xa9\x88\x76\x6d\xc3\x74\xf1\x0e\x00\x7d\x67\xca\x85\x46\x5e\x9a\x48\x2b\xc1\x29\x9b\xb8\x5c\xcb\xac\x57\x83\x42\xc3\x20\x04\x5c\xd7\x97\xeb\x41\x7d\xf7\xd2\xac\x31\x2f\xdd\x8d\x35\x9d\xe8\xbb\xe5\xf8\x64\x2f\x35\x66\x8e\x54\x30\xd7\xcd\x0a\xd7\x7b\xd5\x0a\x2f\x68\x2a\x01\xb6\x35\x72\xcb\xb5\xda\x6e\x38\xe0\xd6\x03\x75\x92\x83\x79\x8f\xae\xd3\x41\xae\x74\x72\xca\x68\xe7\x92\x69\xcf\xa4\x7f\xd9\x4b\x81\xa9\xa3\x26\x9c\xce\x37\x0d\xd8\x6f\xf1\x4c\x6e\xa7\x38\x3c\xc2\x25\xd3\x16\x26\xa3\x5d\x6e\x58\x5d\x94\xcc\x1a\xbb\x58\x2d\xa2\x4a\xad\x33\x5c\xf4\xf9\x13\x3c\xb4\xe7\xb2\xce\xd0\xd6\x19\xc8\xbd\xb6\x1d\x75\x30\x2c\x21\xa0\x39\xeb\x62\x85\xe3\xf2\x4b\x9a\x51\xe7\xe4\xce\xd5\xca\xc6\xb2\xa2\x76\xd6\xc3\x99\x90\xeb\x10\xe3\xc6\xa8\xac\x09\x6b\xc9\xab\xe4\x47\xbb\x6a\x86\xec\x7a\x1b\xa6\xde\xb6\xe6\x56\x1d\x8a\xde\xba\xd0\x1f\xce\xca\xc3\xca\x24\xc2\x37\x77\xca\x38\x7e\xd8\xbe\xae\xa5\x5a\x2f\xbc\xa0\xfb\xc0\x43\x92\x8b\xef\x43\x7e\x34\x83\x19\x7b\x27\xf2\x18\xfb\x49\xc0\x52\x88\xe7\x01\xc5\x8b\x3c\x52\x58\x59\x84\x3c\xa4\x65\x11\x00\xc0\x8b\x2c\xa7\xc8\x90\x53\x00\xc5\xb2\xac\x48\x40\x05\x00\x11\x52\x0c\x07\x65\x5a\xc2\x65\x85\xa7\x18\x99\x92\xf7\xaf\x00\xc4\x56\x88\x46\xc2\x42\x72\xea\x4b\x0e\xaf\xe3\xd5\xd7\xad\x3b\x5b\x0b\x84\x36\xc6\xe1\xd6\x32\x09\x5e\x28\x6f\x56\xf5\xfc\xb6\x49\xbb\xb9\xa2\x94\x1f\xac\xd6\x25\x7e\x0d\xa6\xae\xdd\x34\x26\xd9\x1b\xae\x8b\xaf\x92\x04\x33\x9c\x7f\xa4\xff\xf1\x4b\x46\x4a\x5a\xf8\x6d\xfd\x9f\x3f\x03\x49\xd7\xbb\x42\xf3\x2c\x21\x23\x05\x28\x0a\xce\x49\x38\x1d\x64\x5d\x10\x2b\xb3\x84\xa8\x50\x80\xc5\x81\x28\xf2\x1c\x82\x84\xc2\xb2\x0c\x82\x2c\xc0\x39\x9a\x64\x68\x19\xd0\xb2\x22\x53\x24\x14\xf7\x0f\xaa\xcf\xf5\x1e\x19\x77\xde\x33\x81\xe9\x52\xf4\x32\xdf\x2a\x6e\xac\xf6\x0b\x30\xcb\x42\x66\x47\xb0\x9d\xad\xea\x10\x9a\xd2\x28\x8d\xf5\xf6\x70\x6a\x7b\xdd\x4c\x2f\xfc\x01\xab\x3b\x66\xf6\x84\x77\x97\xde\x0b\x8f\xf5\xaf\x4b\xf7\xf5\x7f\xf5\x01\x48\xfa\xdb\xb2\x1f\x77\xa0\xbf\xdb\x7b\x5e\xeb\x5c\xb9\xbd\x6a\x2f\xc4\x1a\x59\xce\x82\xe1\x60\xde\xb1\x6b\xfa\x7c\x84\xe3\xca\x2b\xe7\xd4\x2b\xac\x8e\x17\x3b\xeb\xea\xf0\x25\x3b\x02\xd9\x63\x7c\x0e\xae\x2b\xf1\x39\xbc\x3e\x1a\x9f\x9b\xb4\x5d\x8b\xe2\x85\xde\xe1\x4f\x72\xbe\xb0\x5b\xae\x16\xed\x5c\xdb\x14\xb2\x55\x55\x69\x75\x46\x05\xb3\x3e\x5b\xb9\x5b\xa9\x07\xb4\x52\x2b\xdf\xa6\x89\xe9\x42\x76\x4a\x65\x98\x13\x86\x6b\x9c\xee\xbe\x0c\x66\x43\x7c\x34\x5d\xd8\x78\x3e\xd7\x2a\x52\x02\x2c\x0d\xc8\x9a\x2e\x39\x60\xb2\xae\xeb\xaa\x48\xf5\x3a\x76\xa3\xee\xef\x31\x2b\xa0\x67\x2d\x70\x9d\x66\x01\xc9\xe8\x1a\xb9\x6b\xd0\x2e\xf5\x02\xe7\xbb\x0e\x40\x1b\x7b\xd7\x64\x3a\xa6\x3d\x58\x0b\x99\xbe\xd8\xc7\x8f\xc4\xae\xe8\xe0\x64\x19\xb1\x27\x4c\x11\xd9\x60\xa8\x49\xaf\xf9\x57\x46\x8b\xec\x27\x44\x2b\xc1\xde\xf6\x86\x0f\xf4\x9f\xcd\xfe\xfb\xa2\x46\x5a\xb4\xfc\xbb\x43\xe5\xff\xf9\x4d\x50\xe8\x10\xfc\x44\x92\xd9\xdd\xcb\x7a\x9e\x1d\x35\x2b\x2a\xcd\x4b\x22\x5f\x90\x0a\x1e\x3d\x5f\x96\x81\xec\x59\xbb\x7c\xa9\xaa\xe1\x04\xe0\xdb\x4b\xe7\x48\x2d\xdd\xd9\x8a\xf1\x09\x8d\x39\x5b\x30\xb0\x70\x49\x88\x0c\xf9\x8e\x60\x54\x35\x4e\xf3\x70\xe1\xba\x60\xf8\x31\x67\xff\x94\xfe\x2f\x04\x9a\x77\xfa\xbf\xbe\x44\x5d\xf9\x00\xe1\xa3\xeb\x54\xe2\x23\x84\x83\x1f\x45\x17\x9a\xf0\x85\xc9\xd3\x5c\xa5\x38\xe2\x65\x94\xe3\x0b\x32\xe1\x6b\x96\x67\x28\x17\x8b\xa6\x9c\xd7\x92\x3a\x16\x8b\x39\x7c\xa8\xf0\xce\x30\xa3\x45\xad\x82\x52\x56\x11\xc4\x20\xe3\x91\x2d\x14\x52\xca\x3b\x1c\x3b\xc4\x5a\x9d\x4a\x23\xdb\x19\x63\xb5\xe2\x18\xfb\x76\xfc\xf2\xed\xf9\x58\x56\xe5\x62\x91\x93\x44\x79\xad\xcf\x22\xee\x5c\x61\xed\x5c\xa3\x9c\x56\x74\xe2\x54\x51\xec\x61\x7a\x22\x34\xd2\x98\x1d\x3a\x88\x93\x0a\xbf\x73\xbd\x5e\x91\xe2\x6a\x29\xb5\x87\xe9\xc6\xc0\xd3\x88\x5f\xe9\x1d\xeb\x0b\x95\x76\xbf\x88\x9d\x3e\x7e\xf9\xd0\x48\x3e\x47\xdf\x1f\x1c\xc0\xf9\x1c\x9c\x8a\x74\x5c\x28\x30\x11\x2b\xc0\xf7\x30\xdf\x10\x2c\x8d\x68\xa4\x9b\x38\xc3\x7d\xd9\x83\xf4\x72\x07\xd1\x6a\x83\x0f\x93\x0b\xb0\xd2\xb8\x9d\x3a\x89\x53\x53\xad\xe7\xa0\x08\xc2\xd5\xcf\xfb\x53\xaa\x2c\x3e\xce\x34\x02\x99\x4a\x38\xd9\x65\xda\xa4\x5f\xa8\x01\x10\xab\x35\xf9\x19\x4c\x1d\x4f\xbc\xc0\xf1\xd0\x4d\x9c\x5d\x50\x3e\xe0\x4a\x41\x80\xb3\x02\x9b\x0f\x93\x3c\x01\xa6\x11\x4d\x74\x77\x53\x0c\x8b\xbc\xf3\x96\x2c\x33\xfa\x30\xdb\x13\x60\x1a\xdb\x44\x77\x71\xb6\x87\xcf\xea\xaf\x7c\xb6\x7e\x56\x6e\xf5\x71\xbe\x47\xc0\x54\xbe\xf1\xee\xe2\x7c\x8f\x5f\xbe\x5f\xf9\xa2\xfd\xac\xee\xec\xc3\x84\x4f\x80\x69\x84\x13\xdd\x5d\xdc\x1a\x84\x5f\xb4\x3f\x9f\x3e\x57\xbf\xfa\xc9\x72\x4a\x5d\xde\xc7\xc7\x11\x81\x4c\x1d\x49\xb2\xcb\xb4\x28\xe1\xa0\xe5\xf3\xe1\x1b\xdd\xcb\x9f\x13\x27\xeb\x15\x7f\x02\xf7\xab\xc4\x1f\x62\x9d\xd8\xa2\xa6\x55\x71\x7e\x98\x7f\x1c\x34\x6d\x10\x29\xdd\x5e\x1c\x49\xf4\x53\xdf\x4b\x5b\xcd\x63\x85\xeb\x3d\xf7\xa0\x1e\xf6\x6d\x1f\x21\x87\xa5\xb3\x13\x38\x58\x53\x38\xed\x62\xfb\xdd\x8a\xf0\x8a\x89\xae\x8d\x10\x76\xa8\x38\xf0\x1d\x1b\x96\x8b\x9d\x22\x16\xad\x40\x40\x1c\x9f\x29\x9e\x6f\x34\xe3\x45\xbb\xef\x65\x19\x87\xf1\x49\xee\xf7\x29\x31\x8a\xd1\x32\x54\xcf\xd1\xa2\x53\xcf\x61\x31\xa8\x33\x76\xa7\xca\xe3\xf7\x12\x3b\x22\xf8\x9c\x4e\x8e\x11\xa3\x75\x79\xab\x18\xab\x91\xfe\x08\x85\x03\x48\xc8\x22\x12\x60\x6e\x24\x12\x2b\xeb\x7e\x2f\x91\x28\x88\x4f\x24\xbe\x11\xbe\x91\x49\xac\x14\xfd\xbd\x4c\xa2\x20\x3e\x93\xc8\x97\x05\xb7\xd3\x88\x95\xcf\x7f\x80\x49\x14\x67\x4f\xe6\xb0\x4b\x88\x93\x89\x96\x9a\xb9\x16\xbe\x1e\x63\x94\x04\xf2\x29\x25\x62\xe3\xbb\x3a\xba\xf4\x7f\x8d\xc0\x24\x53\xb7\x34\xe4\xa2\xa0\xdb\xff\x09\x00\x00\xff\xff\x01\x0b\x77\xd1\x62\x62\x00\x00") - -func self_sendCoreSqlBytes() ([]byte, error) { - return bindataRead( - _self_sendCoreSql, - "self_send-core.sql", - ) -} - -func self_sendCoreSql() (*asset, error) { - bytes, err := self_sendCoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "self_send-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xab, 0x7b, 0x4c, 0x24, 0x3, 0x92, 0x60, 0xd9, 0xe, 0xd0, 0x74, 0x4c, 0xbd, 0x67, 0x8, 0x95, 0xf, 0xe7, 0x68, 0x62, 0x8e, 0x1d, 0xaf, 0x36, 0x99, 0x67, 0x72, 0x10, 0xfe, 0x47, 0xcd, 0xc3}} - return a, nil -} - -var _self_sendHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5d\x79\x6f\xe2\x48\xd3\xff\x7f\x3e\x45\x6b\xb4\x52\x12\x0d\x99\xf8\xc0\xc6\xce\x3c\xb3\x92\x01\x13\x48\x88\x09\x57\x48\xb2\x5a\x59\x6d\xbb\x4d\x9c\x80\x4d\x6c\x13\x42\x56\xcf\x77\x7f\xe5\x0b\x6c\xe3\x13\x98\xd9\x47\x7a\xd1\x68\x14\x70\x75\xd5\xaf\xaa\xab\xbb\xaa\x0f\x77\x9f\x9f\x7f\x39\x3f\x07\x77\x86\x65\x4f\x4d\x34\xec\x77\x81\x02\x6d\x28\x41\x0b\x01\x65\x39\x5f\x7c\x39\x3f\xff\xe2\x3c\x6f\x2e\xe7\x0b\xa4\x00\xd5\x34\xe6\x5b\x82\x77\x64\x5a\x9a\xa1\x03\xf6\x3b\xfd\x1d\x0f\x51\x49\x6b\xb0\x98\x8a\x4e\xf1\x18\xc9\x97\x21\x3f\x02\x96\x0d\x6d\x34\x47\xba\x2d\xda\xda\x1c\x19\x4b\x1b\xfc\x04\xd8\x0f\xf7\xd1\xcc\x90\x5f\x77\x7f\x95\x67\x9a\x43\x8d\x74\xd9\x50\x34\x7d\x0a\x7e\x82\x93\xf1\xa8\xc5\x9c\xfc\x08\xd8\xe9\x0a\x34\x15\x51\x36\x74\xd5\x30\xe7\x9a\x3e\x15\x2d\xdb\xd4\xf4\xa9\x05\x7e\x02\x43\xf7\x79\x3c\x23\xf9\x55\x54\x97\xba\x6c\x6b\x86\x2e\x4a\x86\xa2\x21\xe7\xb9\x0a\x67\x16\x8a\x88\x99\x6b\xba\x38\x47\x96\x05\xa7\x2e\xc1\x0a\x9a\xba\xa6\x4f\x7f\xf8\xd8\x11\x34\xe5\x67\x71\x01\xed\x67\xf0\x13\x2c\x96\xd2\x4c\x93\x2b\x8e\xb2\x32\xb4\xe1\xcc\x70\xc8\xb8\xee\x88\x1f\x80\x11\x57\xef\xf2\xa0\xd3\x02\xfc\x43\x67\x38\x1a\x82\x9e\xd0\x7d\xf4\xe9\xbf\x3f\x6b\x96\x6d\x98\x6b\xd1\x36\xa1\x82\x2c\xd0\x1c\xf4\xee\x40\xa3\x27\x0c\x47\x03\xae\x23\x8c\x42\x85\xa2\x84\xa2\x6c\x2c\x75\x1b\x99\x22\xb4\x2c\x64\x8b\x9a\x22\xaa\xaf\x68\xfd\xe3\x77\x08\x94\xdd\xbf\x7e\x87\x48\xc7\xaf\x7e\x9f\x82\x9e\xb4\xf2\xda\x79\x00\x1d\x47\xce\x12\x16\xa2\xda\x32\x77\xc9\x3b\x42\x93\x7f\x08\x51\xfa\x6c\x5d\x54\x22\x52\x55\x24\xdb\x96\x28\xad\x45\xc3\x54\x90\x29\x4a\x86\xf1\x9a\x5d\x50\xd3\x15\xf4\x21\x86\x94\xd3\x2d\xe8\x3a\xba\x25\x1a\xba\xa8\x29\x65\x4a\x1b\x0b\x64\xc2\x4d\x59\x7b\xbd\x40\x07\x94\xde\x22\x39\x08\x45\xb9\xb2\x33\xa4\x4c\x91\xe9\x16\xb4\xd0\xdb\x12\xe9\x72\x29\x15\x42\xc5\x17\x26\x7a\xd7\x8c\xa5\xe5\xff\x26\x3e\x43\xeb\x79\x4f\x56\x87\x73\xd0\xe6\x0b\xc3\x74\x9a\xa3\xdf\xa7\xee\xcb\x66\x5f\x5b\xca\x33\xc3\x42\x8a\x08\xed\x32\xe5\x03\x67\xde\xc3\x95\xfc\x76\xb9\x07\xe8\x70\x49\xa8\x28\x26\xb2\xac\xec\xe2\xcf\xb6\xa9\xb8\x71\x47\x9c\x19\xc6\xeb\x72\x51\x80\x7a\x91\x07\xc9\xa3\x82\x9a\x59\x92\x71\xd0\xe9\x16\x2e\xe0\xf4\x13\xaa\x8a\xcc\x62\xa4\x01\xfb\x3d\x8a\xf8\x66\x2d\x56\xc8\xed\x5a\x4b\x08\x09\x77\xc5\x79\x25\x16\x4e\x81\x67\x3b\xb7\x06\xac\x48\x07\x24\xad\x73\xdd\xe8\x79\xd3\xd2\x8b\x10\x1b\x1e\x0e\x23\x97\x50\xb3\x6c\xd1\xfe\x10\x17\xf9\x2c\x1d\x4a\x63\x51\x94\x12\x15\x25\x0b\x42\x49\x36\xb1\x14\x34\xf7\x5c\xb2\xfc\x5e\x4c\x5a\x17\xab\x4c\x2f\x46\x3a\xd6\xb6\xac\x65\x9e\xe4\x0d\xb1\x6c\x28\xa8\x64\x5e\xb0\x71\x83\x05\x34\x6d\x4d\xd6\x16\x50\xcf\x0c\xde\x79\x45\xc5\x45\xc9\xdc\x64\x13\xd1\xca\x22\x48\x2e\x58\x5a\xbe\x6b\xbc\x22\xf2\x3c\xc2\x5f\xce\xdf\xab\x4c\xa7\x26\xfd\x3f\x9d\xf8\x10\xa4\x7e\xae\x33\x88\x05\x11\x4c\x0d\x73\x21\xce\xb5\xa9\x9f\x30\x64\x40\x88\x51\x16\xd6\xb1\x7c\xbe\x97\xc5\xb9\xa8\x73\x7a\xa5\x1b\xbd\xee\xf8\x56\x00\x9a\xe2\x49\x6e\xf2\x2d\x6e\xdc\x1d\x15\xe4\x9d\xe2\x74\x47\xe0\xec\x57\x77\x36\x27\xf7\x5b\x71\xf5\x83\x28\x3d\xe4\xfb\x63\x5e\x68\xec\x61\x33\x27\xcf\xb6\xd0\x5b\x69\xc9\x11\x26\x85\x4b\x2b\xa8\x20\xed\x36\x9b\x2d\xac\x61\x4a\xab\x2f\xa3\x5f\x32\x8b\x62\x65\xfd\xbc\xaf\x18\xb1\x9f\xe4\x15\xd6\xcd\xef\x01\xca\xe8\xe2\x15\x29\x48\xeb\xa7\x7f\xc5\xf1\x04\xf9\x62\x11\x44\xb1\x3e\x24\x9b\x38\xd4\x25\xf8\x84\xdc\xd5\xd5\x80\xbf\xe2\x46\x09\xc4\x73\xcd\x19\x71\x68\x32\x3a\xd5\x97\x73\x64\x6a\xf2\x5f\x7f\x9f\x15\x28\x05\x3f\xf6\x28\x35\x83\x96\x7d\x0a\xf5\x35\x9a\xb9\x53\x31\x05\x4a\xa8\x9a\x99\x58\xa4\x35\x16\x1a\xa3\x4e\x4f\xc8\xd0\x47\x84\xd3\xe9\x16\x5d\x05\xec\x00\xcd\xe0\x11\x68\x77\x00\x0f\x47\x57\xb7\xf8\x16\x7c\x05\x94\x51\xc4\x55\xbd\x00\x07\xfe\x61\xc4\x0b\xc3\x18\x8b\xd9\x62\x6a\xbd\xcd\x02\x5f\x6c\xb4\xf9\x5b\x6e\x47\xc2\x8f\x2f\xde\x2c\x9c\x00\xe7\xe8\x32\xf8\x0d\x8c\xd6\x0b\x74\xe9\x17\xf9\x01\x86\xf2\x33\x9a\xc3\x4b\x70\xfe\x03\xf4\x56\x3a\x32\x2f\xc1\xb9\x3b\x39\xd7\x18\xf0\x4e\x7d\xf9\x9c\x03\x7e\x5f\x22\x1c\xa3\x0f\x7d\xc6\x8d\xde\xed\x2d\x2f\x8c\x32\x38\x7b\x04\xa0\x27\x44\x19\x80\xce\x10\x9c\x04\xd3\x6e\xc1\x6f\x96\xcb\xe4\x24\x2e\x39\x50\xdf\x97\xb9\xb1\x50\xae\x3e\x11\x5b\x0a\xbd\x51\xcc\x9e\x60\xd2\x19\xb5\x37\xb0\xc2\xf3\x6f\x11\xf1\x5b\x2e\x31\x20\x65\x94\xdf\x61\xe2\x1a\xe0\xae\x7b\xb1\x98\x0e\xfb\x5d\xb0\x30\x0d\x19\x29\x4b\x13\xce\xc0\x0c\xea\xd3\x25\x9c\x22\xd7\x0c\x05\xe7\x0b\xc3\x70\xf3\x1d\xcd\x87\x1f\xf8\xea\x16\x7f\x50\xb7\x49\xb6\xdc\x78\x76\x2e\x7f\x30\xe0\x47\xe3\x81\x30\x0c\xfd\xf6\x05\x00\x00\xba\x9c\x70\x35\xe6\xae\x78\xe0\x6a\x7f\x7b\x3b\xf6\xfa\xbb\xe1\x68\xd0\x69\x8c\x5c\x0a\x6e\x08\xfe\x10\xff\x00\x43\xbe\xcb\x37\x46\xe0\x0f\xdc\xf9\x16\xaf\x8d\xdc\x86\x78\x98\x76\x79\xec\x8f\xa6\x1c\x91\xa4\x5c\x91\x9e\xea\x30\xfd\x0a\x48\xd8\xa8\xb8\xf9\x69\x2f\x0d\x4f\xbf\x00\xd0\xe0\x86\x3c\x98\xb4\x79\x01\xfc\x81\xff\x85\xff\x7d\xf1\x07\xfe\x17\xf1\xf7\x9f\x7f\x10\xee\xdf\xc4\x5f\xc4\xdf\x60\xe4\x3d\x04\x7c\x77\xc8\x3b\x46\xe1\x85\xe6\x59\xa2\x65\x0a\xc4\x81\x03\x2d\x93\x2f\xe1\x57\x5b\xe6\x3f\xfb\x58\x66\x37\xa6\xfa\x76\xd8\xc4\xe1\x62\x86\xd8\x86\xed\x1d\x8e\x2e\x62\x00\x86\x8e\xad\xc0\xcf\x6d\x0f\x50\xf1\x7e\x1e\x3d\xde\xf1\xe0\x67\xb8\x45\x9c\x25\xb5\xda\xa3\x62\x8c\x33\x8c\x41\x0c\x9a\x71\x71\x84\x89\x29\xd0\xa1\x28\x93\x98\xc6\x90\x46\x1a\x64\x14\xee\xd6\xcb\x76\xd1\x26\xa5\x79\x07\xa3\x4d\x60\x1a\x47\x1b\x6e\x24\x99\x68\x9d\xc8\xa5\x20\x15\x2e\x67\xb6\x68\x43\x69\x86\xac\x05\x94\x11\xf8\x09\x4e\x4e\x7e\x44\x9f\xae\x34\xfb\x59\x34\x34\x25\xb4\x94\x16\xd1\x35\x9c\xff\xfa\x2a\xba\x0d\xac\x98\x7a\x5e\x5b\x0c\x0f\xbe\x3d\x8d\x34\x05\x48\xda\x54\xd3\x6d\x37\x31\x10\xc6\xdd\xae\xa7\x0e\x9c\x3b\x69\x3c\x90\x9f\xa1\x09\x65\x1b\x99\xe0\x1d\x9a\x6b\x4d\x9f\xc6\xc8\xf4\xe5\x7c\x93\xf2\x03\x4d\xb7\xd1\x14\x99\x31\x12\x75\x06\xa7\x16\xb0\xe6\x70\x36\xdb\x15\x63\x1b\xf3\xd9\xae\x90\x53\x82\xa2\xce\x36\x94\xbb\xd5\x1e\x1f\x37\xec\x6b\x8e\xf8\x6c\xc7\xc6\x24\x36\xfa\xd8\x31\xc8\x62\x31\xd3\xdc\x39\x7b\x60\x6b\x73\x64\xd9\x70\xbe\x00\x4e\x9d\xb9\x5f\xc1\xa7\xa1\xa3\x5d\xa0\x69\xa3\xa2\x20\x1f\xf5\x87\x53\xc5\x30\x6f\x06\x5f\x29\x5c\x7d\x37\xe4\x06\x23\x2f\xa3\xc3\xdd\x1f\x3a\x42\x63\xc0\xbb\xe9\x57\xfd\xd1\xff\x49\xe8\x81\xdb\x8e\x70\xcf\x75\xc7\xfc\xe6\x3b\xf7\xb0\xfd\xde\xe0\x1a\x6d\x1e\xe0\x79\xca\xec\x6d\xf6\x38\xa3\x1d\x57\xf4\x27\x3d\x80\x8e\x3e\xec\x77\x38\x3b\x3d\x49\xd1\xf8\xe4\xf2\xd2\x44\x53\x79\x06\x2d\xeb\x2c\x5e\x5d\xde\x5a\x45\x82\x6f\xd1\xd5\xb3\x8c\x8a\xf2\xc6\xc6\x07\x6b\xe6\xcd\xe8\x6c\xf4\x4a\x6e\x19\xdb\xb9\xba\x64\x98\x89\xe4\xb2\xa1\x24\x91\xe3\x44\x32\xb9\x37\xfd\x97\x50\x80\xa2\xb3\x5a\x58\xf2\xf4\xc2\x91\xdc\x36\xcc\xf3\xb7\x39\x6d\x96\x22\xa0\x37\x11\xf8\x26\xa8\x3f\xe6\x68\xe4\xcd\xd0\x65\x2b\xb4\xe1\x15\x7b\xfc\x5d\x53\xd2\xb0\x05\x73\x3e\x87\x7a\x9d\xcf\xc7\x77\xbb\x58\x9b\x11\xd3\x7a\xfa\xdd\x29\xae\x34\xca\xaf\xee\xc2\xc7\xd7\x14\x6f\x76\xfd\x38\xf9\x91\x82\x6c\xa8\xcd\x2c\xf0\x62\x19\xba\x94\xee\x6c\xc1\x44\xd9\xa1\x76\xf0\xf9\xf8\x76\x08\xd6\xad\x53\xb0\x85\x16\x93\x0b\xb5\xc2\xa4\x75\xec\xe4\x82\xbe\x59\x42\x33\xa3\x6e\x45\x6c\x70\x04\xbd\x1c\x16\x93\xb0\xad\x88\x62\xf4\x9b\xc5\xe4\x58\x60\x32\x96\xf6\x36\x36\xc5\xcb\x98\x08\xda\xb9\x85\x3c\xda\xe5\x42\x29\x4c\xbb\x71\x1d\xff\x6b\x6c\x9d\x7d\x47\x17\x7c\x27\x1f\xb0\xe1\x4c\x94\x0d\x4d\xb7\x92\x7d\x50\x45\x48\x5c\x18\xc6\x2c\xf9\xa9\xbb\xf2\xa9\xa2\xb4\xba\x76\x1f\x9b\xc8\x42\xe6\x7b\x1a\x89\x93\x87\xda\x1f\xa2\x9b\x26\x69\x9f\x69\x54\x0b\xd3\xb0\x0d\xd9\x98\xa5\xea\x15\xaf\xa3\xc0\x59\x10\x54\x90\xe9\xa6\x17\xde\xef\xd6\x52\x96\x91\x65\xa9\xcb\x99\x98\xea\x28\xbe\xe2\x50\x9b\x21\x25\x9d\x2a\xbd\x59\xa5\xcc\x5d\x1f\xda\xca\x52\xd6\x43\x72\x62\x5e\xf1\xde\x26\xbf\xff\x2a\xab\xf2\x71\xc3\x58\xa6\x8c\xdf\x15\xd6\x4a\x29\x7a\x60\x98\xcb\x94\xb5\x1b\xf6\x92\xc9\x33\xc2\x60\x68\x65\xe7\x68\xbe\x99\x37\xcc\x89\xee\xaa\x4a\x19\x0a\x39\x99\xbf\xec\xa9\xe2\x46\xc0\x03\x03\xa0\xdf\xf2\x8d\xa5\x29\x6f\xb6\x69\xa4\x84\x9e\xa0\x3b\x39\x39\xb9\xbc\x4c\x1f\x8a\xa5\xb7\x03\x7f\x61\xed\x50\x73\xfa\x7b\x01\x4f\x8f\x9a\x2f\xf8\x5d\xe2\x3e\xd1\xcb\xdd\x0b\x93\x2a\x36\xb6\x13\x31\x8b\xc8\xdf\x1c\x99\x45\xe2\x8d\x83\x13\x09\x76\xf7\x74\xe6\xd0\x65\x8a\xdb\x50\x65\x48\x74\x21\x69\x96\x68\xa1\xd9\x0c\x99\x40\x32\x8c\x19\x82\x7a\x10\x93\x34\x19\x89\x7a\x24\xfe\x7a\xbf\x45\x63\xf2\x76\x37\x91\x18\x8b\xd6\x91\xfd\x4c\xf1\x87\xa1\x65\xfa\xc4\x9d\x9f\x2e\x6a\xd1\xdd\x1b\x0c\x1a\x6d\xbe\x71\x03\x4e\x4f\xc3\x16\xfc\x13\x60\x67\x67\x79\xac\x92\x8a\x07\x46\xfb\xcf\x8e\x1d\x0b\xf0\x8b\xd8\x34\xc6\x3e\x66\x70\x17\x60\x66\x53\x4a\x5e\xe1\x3e\x42\xe3\x4a\xde\xb3\x50\x30\x92\x16\xe9\xc2\x0e\x89\xa5\x79\xfb\x03\x8e\x13\x4d\x73\xa4\xfc\xae\x78\x5a\x52\xd9\x03\x23\x6a\x8e\xb4\xdd\x98\x9a\x56\x20\x23\xaa\x46\xf6\x84\x1c\xd1\x57\x03\xff\x0c\x43\x2a\x3c\x88\xf2\xfb\xfe\x9c\xa1\x59\xd1\xc0\x9b\x1d\x43\x13\x69\xb7\xa2\x13\xdb\x8b\x33\x0a\x48\x1f\x46\xa4\x0d\xd0\xfe\x95\x21\x96\xfd\x21\x22\xfd\x1d\xcd\x8c\x05\x4a\x9a\xb6\xb4\x3f\x9c\x01\xcf\x72\x66\xa7\x3c\x9c\x23\x1b\xa6\x3c\x72\x86\x5a\x69\x8f\x2d\x6d\xaa\x43\x7b\x69\xa2\xa4\x19\x36\x96\x3e\xfb\xeb\xef\x6d\xee\xf2\xcf\x7f\x93\xb2\x97\xbf\xfe\x8e\xdb\x1c\xcd\x8d\x94\xc9\xb0\x2d\x2f\xdd\xd0\x51\x66\x2e\xb4\xe5\xb5\xcb\xc6\xd7\x4c\x9b\x23\x51\x32\x96\xba\xe2\xce\x58\x33\x26\xd4\xa7\x28\x3e\x1a\x8b\x86\x56\xc7\x12\x0e\xb7\x29\x52\xf2\x87\x5b\xfe\xdc\x9f\xa6\x04\xad\x2d\xd8\xc2\x55\xa4\x8b\xf0\x9a\x9b\xbb\x5f\x2e\x67\x77\xd8\x90\x1f\x65\xcc\x93\x86\x67\xa4\xc2\xb3\xa4\xe5\xc6\x11\xc7\x53\xa2\xe0\xe6\xb9\x4c\xa5\x32\xc7\x1f\x45\x94\x4c\x8d\xb4\x47\x53\xb3\xf0\xfe\xc3\x4c\x45\x73\xc2\x42\xb2\xaa\x4d\x68\x43\xa0\x1a\x66\xce\x6a\x11\x68\x72\x23\x2e\x47\xbd\x14\x96\x59\xab\x2e\x45\xd8\x76\x84\x21\x3f\x18\x81\x8e\x30\xea\xed\xac\xbc\xb8\x01\x7a\x08\x4e\x4f\x70\x51\xd3\x35\x5b\x83\x33\xd1\xdb\x05\xf3\xdd\x7a\x9b\x9d\x54\xc0\x09\x81\xe1\xec\x39\x46\x9f\x63\x24\xc0\x99\x4b\x82\xb9\xac\xd6\xbe\x63\x24\x51\x65\xe9\x6f\x18\x71\x72\xf6\xa3\x18\x77\x42\xf4\xde\x6e\x88\x58\x55\x5a\x8b\xb6\xa1\x29\xd9\x92\x58\x9a\xaa\x95\x91\x44\x8a\x4b\x0b\x6d\xa2\x8c\xa8\xe9\x3b\x6f\x54\x64\xca\xab\x56\xb1\x2a\x53\x46\x5e\x55\x84\x8a\x22\xc6\xe7\xa5\x32\x65\x50\x55\x8a\x24\xca\xc8\xa0\x44\x2f\xa6\x05\xd9\xb5\xbb\x9e\x99\x29\x82\x26\x31\xa2\x94\x1a\x74\x20\xc2\xef\xc1\x0a\x88\x60\xaa\x38\x55\x46\x44\x4d\x9c\x1b\x8a\xa6\xae\x8b\x6b\xc1\xe0\x34\x51\x4a\x04\x13\xd1\xc2\xdf\xc6\x5c\x40\x4e\xad\x4a\x93\xe5\xe4\x38\x95\x0e\xa7\x53\x13\x4d\xa1\x6d\x98\xd9\x3e\xc5\x62\x38\xc6\x96\x61\xcf\xba\xec\xbd\x39\x4b\xf1\x43\x31\xb3\xb9\x13\x35\xbc\x54\x55\xe3\x98\xcb\xde\xaf\x05\x77\xa4\x9a\x2d\x80\x62\x6b\xa5\xac\x83\xe3\x61\x01\x9b\xa1\x8f\xd3\x01\x64\x0b\x62\x69\xb6\x9c\x26\x44\xa4\xa2\xfd\xc1\xa6\xf7\xe2\x6c\x96\x24\x1c\xab\x51\xd5\x52\x35\x82\x93\x9e\x3a\x9b\x21\x7a\x66\x8d\xe3\x38\x51\xa3\xcb\x69\x52\x15\x55\xed\x23\x78\x89\xc0\x98\xcf\x44\x55\x43\xb3\xcc\xae\x11\xc7\x29\x1c\x2f\xd5\x09\xe3\x54\xb0\x76\x12\xcc\x69\x7f\xe4\xa8\x41\xd7\xca\x75\xf3\x38\x2d\x6a\xfa\x14\x59\xb6\xb8\x3b\x6b\x9e\x23\xaa\xc6\x32\xe5\x6a\xa4\x16\x09\xd7\xee\xf2\x04\xcc\x0e\x26\x38\x81\x61\x64\xd5\x17\x92\x12\x6b\x33\xd7\xda\xcb\x06\xdb\x9d\xf5\xf6\x00\x3d\x5e\x01\x27\x57\x8d\x87\x9b\x2b\x7a\x20\x54\x7b\x42\x87\xbf\x6b\xdc\x0a\xad\x7a\x8d\x24\xb8\x2a\x49\x3f\x51\x77\x42\x73\x38\xe8\x5e\x4d\x6e\x6a\x57\xf5\x6e\xe3\xb6\xdf\xed\xb4\x7a\xd5\x61\x8d\x7f\x9c\xdc\x8f\xe3\x16\x4a\x15\x42\x38\x42\xea\x83\xbb\xc7\x76\xa7\x4b\x34\x3a\x64\x4b\xe8\x57\xeb\x0f\xdd\xd6\xad\xd0\xec\xb6\xae\xc7\xc2\xdd\x98\x68\x3f\x92\x4f\xb7\xad\x61\xbb\x27\x8c\x1b\x7c\x8f\x1b\x4e\x6a\xfd\x46\xad\xf7\x40\xb4\x4f\xf6\xdd\x51\xe1\x24\x58\x39\x16\xf2\x77\xa1\x6d\x37\x90\x7e\xb7\x50\xf6\x6e\x83\x0a\x20\x2a\xc0\x36\x97\xa8\x40\xbd\xed\xee\x23\x28\x93\x79\x95\x59\xbb\x3e\x8a\xa6\x91\xf1\x42\x05\xe0\x15\x6f\x0b\x52\xbe\xa2\x49\x6b\xd7\xfb\xfa\x67\xb0\x7e\x1d\x72\x4f\x9c\x60\x98\x2a\x8b\x51\x2c\x43\xb9\xa8\x1c\x67\xfa\xe7\xab\xd7\xc3\x7e\xbd\x04\x5f\xa9\xef\x98\xf7\xf9\x5a\x01\x5f\xb7\xfb\x29\x9c\x47\x3a\xb4\xb5\x77\xf4\xf5\xbf\x69\x8e\x9a\x27\x8d\xa8\x00\xf2\x97\x4a\x63\x28\x86\x65\x49\x86\x66\x58\x57\x35\xcc\x15\x66\xd9\x4e\x6a\xaa\x4f\x45\x09\xce\xa0\x2e\xbb\xbc\x71\x0c\xdb\x08\x2e\x2c\x80\x88\x0a\x48\xd0\x26\xcc\xf6\xd8\xfa\x90\x15\x80\x7b\x0a\xad\x90\x36\x7d\x76\xe4\xe1\x15\xf0\xd5\x73\x05\xf1\x15\xad\x1d\x19\xfb\x76\x3d\x1e\xaa\x1c\xc7\x4c\xda\x4c\xb0\xaf\x63\x06\x1b\x0a\x02\x65\x1d\x4b\x92\x24\x62\x18\x4a\xa1\x55\x86\x41\x04\x8e\x23\x09\x63\x19\x45\x92\x31\x4a\xa9\xca\x2a\x09\x29\x5a\x66\x09\x95\xa1\x68\x92\x54\x31\x48\xe1\xa8\x26\xe1\x8c\x22\x91\xa4\x4a\x29\x14\x83\xc8\xaa\x13\x1d\x6a\x18\x45\x53\xb2\x24\x2b\x12\x56\x83\x64\xb5\x56\x85\xaa\x84\x49\x0a\x85\xc9\x32\xab\x52\x64\xad\xca\x42\x1a\x4a\x18\x55\x95\x64\x55\x25\x19\x88\x24\xb5\x2a\xe1\x90\xc6\x68\x9a\x96\x11\xa4\xbd\x96\x8a\xc7\xe2\x0c\x7d\x49\x52\x97\x14\x1b\x0f\x3f\xf4\x25\x49\x5f\x62\xf8\x77\x8c\x61\x08\x92\xc8\x7d\xea\xb7\x05\x9c\x61\x98\x0a\xc0\x69\xa7\x3e\x77\x3e\x15\x40\x38\xff\xe1\xfe\x7f\xc1\x8f\xf8\xe6\x0f\x07\x1a\xc7\x71\x5c\x83\xac\x4f\x1e\xba\x9f\x52\x9d\x16\xda\xc3\x77\xab\x8b\xf7\x3f\xaf\xd9\x91\x72\xbd\x78\xb3\x5a\x43\xe6\xe2\x53\x5b\xbe\x63\x16\x7c\xbc\x7a\xb2\xe8\x39\x5d\xbb\x53\x5f\x56\xdf\xf8\x9b\x6a\xef\xf6\x61\xcc\xac\x6e\x67\x86\xf1\x31\x5e\xbe\xbc\x76\x16\x2d\x4d\x6d\x18\xc6\xac\xfe\xf9\x74\xf3\xb9\xa4\x19\xde\x61\xcd\x3d\xdc\xdd\xdf\x4a\x2b\x6e\xf3\x69\xaf\xda\x82\x35\x1f\x3c\x7e\xbb\xc7\xa8\x01\xd3\x97\x3f\x3e\xbb\xf4\x9a\xb9\x9b\x52\x12\x73\x43\x3d\xdc\x35\x6c\x8b\x31\x54\x9a\xec\xb7\x9a\x6f\xed\x76\xff\xf1\x91\x5e\x4b\x83\x19\xd2\x89\x55\xf3\x76\xd1\x1a\x11\x8d\x26\x77\x0d\x3f\x85\x15\x7a\xbb\xfa\xe0\xa7\xc3\x5e\xbd\x2e\xb1\x96\x32\x75\x38\xdf\x0a\xd5\x2e\xfc\x5c\x10\xfd\xad\x30\xae\xd9\xe1\x12\x3e\x4f\xdc\x03\x5e\xed\x73\x5c\x13\xbb\x4e\x7a\xfc\x3f\xfd\xf1\x9c\x0a\x4b\x69\xf7\xf1\xa6\x40\x1c\xc7\x8d\x4f\x68\x52\x61\x19\x95\x22\x69\x84\x68\x46\xc1\x25\xa2\x26\x51\x12\xc3\xaa\x04\x09\x55\x8a\xc4\x71\xa9\x46\xd1\x2c\x24\xaa\x2a\x54\xf1\x2a\x46\x42\x05\x93\x28\x42\xa2\x49\x52\xc2\x6a\x12\x62\xd9\xac\xa6\xc0\xa4\x39\x3b\x8e\xe3\x18\x91\xda\x50\x36\x4f\xbd\x8e\xad\x4a\xb1\x44\x46\x4b\xc0\x0b\xb6\x04\xe2\xee\xe9\x05\x17\x96\x94\x81\x49\xd7\xb5\x49\x55\x5f\xf7\xde\xc7\x1f\x57\xe4\xfd\xc2\x78\xfd\xf6\xde\xe2\x7a\x76\x03\xbf\x21\x6e\x6b\xf5\x1a\xfd\x64\xb4\xc7\xe3\xb7\xbb\x1e\x3e\x34\x1e\x26\xf5\xfe\x44\xeb\xeb\x88\xfe\xc6\xb5\xe5\x5b\xac\x71\x7f\x63\x4f\x85\x8b\x4f\x7e\xfe\x0e\x9b\x3c\x56\xf5\x6a\xce\x6d\x09\xae\xa7\x76\x36\xff\x71\xae\xb3\x5a\xdb\xef\x2b\xee\xae\xff\xea\xd1\xf3\xf6\x74\xad\xe9\x7a\xc7\xb2\x26\x94\x5d\x47\x12\x71\x61\x0b\x4f\xf5\x05\x6e\xda\x0d\xa9\xf3\xae\x18\x90\x7d\x6d\x5c\x34\xd9\xf9\xb4\xfb\x79\xbf\xc4\x17\x4f\x9f\xcb\xa7\x8b\x01\xfb\xf6\x64\x37\x57\xec\xed\xa7\x32\xc0\x98\x29\x79\xd5\xee\x1b\xd4\xe3\xfa\x7a\xf2\xce\x4d\x5e\xfa\xd7\xdf\xea\x9e\xfc\x84\x96\x52\x7f\x4d\xf2\xb6\xff\x3f\x2d\x05\x3f\x8e\x97\xbb\x93\xdc\x4e\xb2\xe0\x84\x57\x9c\xad\x61\xe7\x18\x7e\x8e\xe1\x00\xc3\x2e\xdd\x7f\xa9\xde\x4c\x10\x34\x59\xcb\x7d\x5a\x25\xd8\x2a\x4b\xd7\x08\x96\xce\xf0\xf5\x64\x4f\xf7\x20\xfd\xdb\x95\x92\xfe\xa9\x3f\xdc\x68\xd5\xf5\xc5\x7a\x78\x53\xaf\x35\xf5\x26\xdb\x26\xb0\x8f\x97\xfa\x37\x0b\x9b\xda\xd6\xaa\xb3\xfa\xc4\x1f\x94\xe1\xe4\x11\xd6\xaf\x61\xcb\x75\x62\x3e\xc1\x89\x93\x3f\x81\x13\xa7\x39\xf9\xff\xf2\xe7\xc4\x73\xa6\xfc\x84\xaa\xc0\x36\xb2\x7d\xf3\xab\x94\xd5\x81\xd4\x71\x40\x4a\x8b\xcb\x61\x13\xcf\x88\xf7\xe3\x42\xc6\x12\xf7\xe3\xec\x41\x3b\xca\x28\x2e\x7b\x81\xc4\x4d\xca\x8b\x8d\x5e\x53\x76\x62\x1d\x5c\xbd\xa1\x2a\x8d\xd4\xe7\xe6\x4b\x75\x13\xc5\xff\xf9\x6a\x1b\x07\x8d\x11\x2a\xe0\xab\x6a\x1a\xf3\x43\x79\x94\x1b\xfc\xfd\x82\xf9\x94\x04\xe3\x85\xfd\x6f\xf3\x37\x13\x1a\x44\xaa\x4b\x5d\x41\xa6\xab\xfa\x9e\x13\x2f\xae\x8e\xde\xf4\xc7\xa1\x16\xcc\x1f\xd1\x1e\x69\x82\x28\xc5\x99\x13\xf6\xc0\x1d\xb0\x08\x56\x6a\x3b\xd0\xbe\x0d\x26\x75\x19\x31\xb1\x47\xac\xa6\xf7\x88\xb9\x8c\x88\xa8\x07\xa5\xf5\x89\xb9\x7c\xc8\x98\x27\x1e\x6b\x37\xd1\x51\xfa\xc5\xbc\xf5\xd4\x12\x3d\x63\xea\x6e\x9a\x23\x54\x75\x68\x56\x59\xa5\xd8\x1a\xae\x20\x95\x54\x55\x8c\x91\x31\x4a\x46\x04\x41\xa0\x9a\x52\xc3\x25\xb5\x4a\xd6\x30\x52\x92\x58\x06\x41\x5c\xad\xd5\x68\x04\x6b\x24\xc6\x50\x04\x4d\x29\x24\xa5\xa8\x4a\x95\x80\x92\xa7\xd2\x41\xd3\xbb\xa1\x61\x0f\x19\xa4\x7b\xe9\x73\x06\x24\x93\x35\xa3\xe0\x3d\x8d\x78\xac\x97\x27\xde\xd0\x2f\x48\x23\x5f\xe6\x46\x87\x19\x5d\xcd\x9a\x17\x68\x2a\x93\xb5\xbb\x07\xbb\x7d\x73\xf3\x39\xb9\x67\x56\xf7\xda\x53\x1d\x36\x96\x54\x97\xba\xe5\xdc\x3c\x8b\x0b\xc6\x31\xf5\x58\x1a\x13\xfa\xee\x4d\x0b\x98\x6f\x02\xdd\x45\x3d\x38\x7d\xf9\xb8\x85\xe3\x3b\x96\xae\x7f\xaa\x16\x8b\x30\xd9\x30\x85\xa7\x87\xcf\xfa\xe4\xfa\xb5\x65\xdc\xd4\x5e\xdf\x5f\x43\x73\x07\x5c\x97\x66\xc2\x03\x7a\x18\x3c\xaf\x73\xd6\xc4\x9c\xd3\x90\xb9\xea\x5b\xda\xfd\xa4\x85\xc8\x99\xb5\xe2\x3b\x0c\xd3\x78\xa3\x68\xed\x85\xf8\xb4\x67\x6d\xfd\xad\xa3\x0d\x56\x93\x67\xa1\x3e\xc0\x1f\x6f\x1f\xda\x33\x61\x25\x2f\x3b\x8d\x87\xcf\xeb\x6f\xc4\x70\xf9\x41\x77\xfb\x8b\x97\x45\x17\x4a\xcb\x55\x73\x3c\x79\x6e\x4f\x3a\x4f\x1c\xf7\xf3\xe7\x49\x38\x67\xbe\x0a\xe5\x9a\xfd\x24\xdd\xb8\x2d\x7d\x7f\x63\x8b\xa6\xfb\x3d\xa4\x46\x59\xdd\x7b\x94\x79\xad\x6f\x6d\x9b\xf2\xe1\xd3\x1e\xd4\x8f\x2c\x3f\x5e\xb7\xc5\xe4\x87\x6d\xe9\x4d\xd7\x38\xff\x35\xb6\x64\x8d\xa5\x41\x1a\x76\x95\x7a\x6b\xdc\xf1\x1f\x8b\xfe\x05\x69\xb4\x85\x6f\x9f\x78\x6d\xb0\xd6\x2c\x7c\xa6\xde\xb6\x1e\xe7\xfd\xc9\xd4\x5c\x0e\xbf\x8d\xbc\x02\xb5\xb9\x65\x70\x5b\x7e\x29\x9f\xd4\xe1\x81\x8b\xb7\x79\x98\xfc\xb9\xbc\x9f\x7c\xcf\x16\xff\xfc\x2a\xa7\x75\x63\xb6\xbb\x17\x2b\x18\x90\x7a\xff\x3b\x9d\xa8\xdb\x59\xe4\xc7\x91\xf0\xae\x0c\xb2\x56\x45\x4e\x57\xc3\x4a\x2c\x52\x6b\x8a\x04\x59\x48\x29\x12\x49\x92\xac\x54\x63\x54\x05\x32\x2a\x59\xad\xd5\x6a\x12\x0e\x55\x92\x94\x60\x95\x66\xa0\x42\xc9\x98\xa2\xb2\x55\x5a\xa9\x2a\xde\xc2\x0c\x7e\x48\x1a\xe1\xe5\x9d\x59\x9d\x1c\x8e\xe3\x04\x49\x66\xcc\x15\x79\x4f\xc3\x51\xd0\xf3\xc5\xab\x2e\xd3\xee\xbf\xf7\x5f\xa5\x1b\xa2\xcd\x91\x93\xfb\x97\x81\x79\x33\x7f\x79\xc0\x30\xf5\x8a\xb1\xba\x9d\xda\x1c\xe3\x07\xab\xeb\xc9\x05\xf7\x40\x72\x9b\x3e\xce\xfd\x64\xf4\x71\xde\x67\x8f\x76\x76\x13\xe6\x77\xff\xbe\x6a\xb1\xce\x23\xbe\xd1\xfc\x7c\x7b\x7f\xed\xd7\xfb\x86\xc0\x5d\x6b\xea\xdd\xe0\xa1\x69\x74\x9f\xdf\xed\xb5\x3c\x22\x67\xad\xbb\x46\x9f\xc2\xa7\xaf\x8a\xd5\x6a\xc3\xba\x30\x59\x61\xd4\xf0\xe2\xfe\x79\x82\x3d\x4c\x5f\x4d\xac\x51\xbf\xe3\xab\x02\x6c\xdd\x13\x37\x73\xd9\x22\x9f\x56\xdd\xb9\x26\x55\x47\x03\xf3\xb6\x5b\xa0\x6f\x8b\x38\x6d\xb4\x6f\x0b\xe9\xec\xc2\x8f\xb7\xe7\xba\x76\x51\xc7\xba\xd8\xf5\xd5\xda\x7e\x5e\x09\xf8\xec\x11\x83\xeb\x85\x81\xb3\x42\xfb\xe3\xbd\xdb\x58\xf7\x28\xbb\xce\xcb\x0d\x4f\x47\x72\x6a\x9b\x3d\xfd\xf1\xe2\x9b\xbc\x2d\x9f\xd2\x9f\x64\xb7\xe7\x03\xe4\x0b\xe6\x7a\x34\x39\x40\x3e\xc7\xfd\x7b\xfd\x59\x62\xdf\x5a\xdf\xdf\x16\x3d\xfd\x29\x53\xcd\x3c\x5b\x1c\x5a\x17\x87\xf8\x82\xdf\xb7\x4e\x19\xda\xa4\x78\x6e\x7c\xd3\xec\x37\x1e\xf5\x4f\xec\x7e\x45\x37\xaa\x52\x4d\xd6\x79\x96\x1a\x8c\x56\xaf\x3d\xe5\xf1\xba\x2d\xd5\x07\xc4\x74\x74\x6f\x09\xbd\xf1\x3b\xfe\x78\x6f\xb7\xaa\xd7\x37\x2c\x37\x1d\x7d\xf4\x9a\x93\xe7\x7b\x45\x5b\xe8\x5d\x81\x90\x1b\x94\x31\xff\xc6\x63\xf0\xb3\xb1\x2a\xd6\xb7\xa6\x9e\x0c\xb1\x7b\x70\xe2\xe6\x90\xa6\xe0\x1d\x89\xb2\x7b\x1b\x43\x1c\xbd\x43\x5c\x9a\xcd\xf0\x1b\x17\x71\x81\xe0\x6e\xd0\xb9\xe5\x06\x8f\xe0\x86\x7f\x04\xa7\x9a\x92\x77\x78\x43\xf2\x41\x92\x07\xa3\x8e\x71\x4d\x42\x9e\x24\x38\x17\x7d\x6c\x57\xee\x7e\x07\x71\x1e\xac\x5d\x54\x6c\x92\x72\x7b\x01\x03\x63\xa1\xd3\x1f\xf3\xe0\x74\x4b\x5e\x09\x9d\x52\x50\x89\x9c\x29\x50\xd2\x34\xc7\xa9\xd6\xd2\x8a\x97\xaa\xd4\x94\xa9\xbf\x22\xa7\xc7\x1e\x4d\xb3\x64\x21\x59\x9a\x66\xc0\x2a\xac\x79\xea\x00\x3f\x77\x0c\x7d\x5c\xed\xd3\xc4\x64\xe9\x9f\x09\x2d\xd7\x02\xd1\x83\x90\x7d\x45\xdc\x43\x93\x8b\xbd\x20\xe3\x9d\xaf\x1c\xe1\x02\x7a\x42\xbc\x31\x8c\x87\x1d\xe1\x0a\x48\xb6\x89\x50\xb8\x75\xa5\xa3\xf1\xcf\x70\x3e\x18\x8f\x7f\xfe\x47\x21\x44\x29\xed\x3a\x74\xfe\xf4\xbe\x70\xb6\x2c\xc2\x48\x22\xa3\x81\x28\x1e\x8f\xb8\xb2\xf3\xba\x4e\x12\x38\xf7\x04\xed\x03\x90\xb9\x6f\x2d\x15\x82\x15\x7f\xd7\x29\x09\x8d\x7f\xec\xf7\x01\x78\x3c\x0e\xc5\x10\xc5\x5e\xa4\xaa\xec\xbe\x33\x95\xd8\xe4\xc3\xe7\x98\x97\x47\xea\x47\x09\x0f\x70\x8c\x5d\x18\x76\xb0\x47\x28\x82\x38\xe9\xf5\xe1\x4a\xf0\xaa\x70\x1a\xd8\xed\x0b\x1a\x07\xc2\xd4\x94\xc2\x00\xb7\xef\x4a\x56\x12\xdf\x79\xce\x01\x1d\x1c\x3d\x7f\x0c\xdc\x3e\xaf\x30\xf4\x94\x50\xb5\x97\x26\xc9\x0a\x04\xa7\xec\x1f\x43\x01\x9f\x57\x8a\x4f\xef\xa9\x42\xf4\xc5\xd7\x5d\x25\x42\x77\x0a\xec\xdb\x1a\x43\x3c\xf6\x35\x7e\xb6\xa1\x63\x97\x24\x1c\x6a\xeb\x28\xbb\x30\xe4\x60\x37\x42\x04\x63\x32\xa2\xdd\x8b\x1e\x0e\x87\xb5\xc3\xb3\x58\xf7\x96\x04\x30\x74\x65\xc5\xde\xd5\xba\xe5\xb1\xbf\x4b\xe6\xb9\x5f\xd2\x65\x1c\xfb\x03\xde\x65\x16\x43\xae\xa0\x18\xce\xd8\x31\x08\xd9\x00\xbd\xdb\x45\x8e\x02\xcf\x65\x55\x08\x5c\xf0\x12\x43\x2a\xb4\xf8\x6d\x29\x87\xe2\x8b\xf1\xcb\x03\xb9\x7b\xbe\x43\x2e\xd2\xe3\xd8\x31\xc2\xad\x28\xca\x5c\x6b\x1e\x07\x5b\x21\x4c\xd9\x58\x62\xd7\xf2\x1c\x84\x28\xca\xab\x70\x8d\x06\x27\x48\x24\xe2\xdb\xb9\x69\xe8\x20\x84\x71\x6e\xc5\xda\xad\x0f\xb0\xb2\x73\xe8\x45\x65\xe7\xe0\x94\x14\x25\x8e\xd0\x6f\xfb\x7c\xf2\x10\x97\xcc\x8e\xe2\x17\x44\x1d\x64\xdd\x12\x86\xcd\xb5\x5b\xfe\xcd\x57\x07\x1a\x34\x57\x40\x64\x9c\x16\xbc\x48\x13\x1d\x19\x79\x84\x25\xb0\x1f\xee\x07\x59\xbc\xf3\x11\x27\xb4\xb2\xec\x7b\xcd\xf6\xf5\x87\x4c\xae\xb9\x69\xbf\x43\x94\x03\x34\xf1\x02\xb7\xe3\xa0\x4d\x62\x9d\x9b\xbe\x15\xf5\xe4\xe8\x8d\x75\x47\x75\x86\x08\xeb\x7d\xf2\xcd\xe2\x57\xf4\x1d\xdd\xd0\x3b\x87\x13\xe6\xc2\x8f\x15\x28\xae\x4c\xf8\xc6\xc2\x5f\x65\xff\xf0\x79\x94\x79\x9a\x84\x68\x8b\x2b\x91\x78\x83\xe3\xaf\xd2\x26\xf1\x98\xcd\x3c\xb5\x92\x0a\x15\xd7\x6f\x73\xc1\xe5\xaf\xd2\x69\x73\xe6\x4c\x9e\x1e\xa9\xb3\x5d\x39\x17\x7b\x1e\x15\x78\x9c\x7b\xe2\x00\xb8\x6c\x03\xcf\xbc\xd3\xf4\x38\x2d\x3c\x4b\x44\x11\x1d\x72\xc6\x75\xb9\x37\xbc\xfe\x12\x2d\x62\x11\x2c\x15\x7b\x7e\x10\x4b\xb8\xd1\xf6\xa8\x6e\xb3\xcb\x7f\xef\xa1\x7e\xd6\x1d\xbe\xfb\x5a\x39\x83\x67\x6e\x8a\x70\x7a\x1a\x9c\xe3\x78\xfe\xe7\x9f\xe0\xc4\x32\x66\x4a\x68\x35\xed\xe4\xf2\xd2\x46\x1f\xf6\xd9\x59\x05\xa4\x13\xca\x86\x52\x8c\xd0\x9b\x8b\x4f\x27\x95\x8c\xe5\xf4\xd9\x2e\x24\x3e\x42\x9a\x0d\x20\x42\x1a\x83\x70\x06\x26\x6d\x7e\xc0\x7b\x4e\x06\x7e\x02\x92\x2c\xbc\x10\x1d\xdc\xd8\x1c\xdc\x4c\x72\xf3\x7b\x96\xa3\x7d\xb1\xa0\xd5\x1b\xf0\x9d\x2b\x61\xb3\x04\x04\x06\x7c\x8b\x1f\xf0\x42\x83\x8f\xdf\xa4\xe8\x3e\xed\x09\x60\x7c\xd7\x74\x5c\x66\xc0\x7b\x97\x97\x38\x3f\x35\xf9\x2e\x3f\xe2\x41\x83\x1b\x36\xb8\x26\x9f\x7d\xe0\x66\xf2\x09\x89\xb1\xbb\xb1\x8f\x61\x8c\xa8\x9c\x9c\x45\xb2\x34\x24\x51\xfb\xc4\xa7\x8d\x12\x8d\xe5\x27\xfa\x39\x2b\x8a\xa9\x96\x88\xdc\x49\xfe\x2f\xda\x21\x8c\x23\xc9\x0a\xc1\x2c\x41\xb6\xc3\x94\xb3\x40\xda\x45\xf0\xff\x8a\x19\x52\xc0\x44\x6d\x91\x30\x0d\x76\x5c\xa7\x48\xbe\x8c\xff\xdf\x35\x48\xba\x6b\xec\xcc\x21\x15\xf5\x8e\x3b\xc3\xb2\xa7\x26\x1a\xf6\xbb\x40\x81\x36\x74\x5c\x0c\x28\xcb\xf9\x02\xc8\xc6\x7c\x31\x43\x36\x72\x75\xf8\xbf\x00\x00\x00\xff\xff\x39\x58\xe3\x11\x44\x82\x00\x00") - -func self_sendHorizonSqlBytes() ([]byte, error) { - return bindataRead( - _self_sendHorizonSql, - "self_send-horizon.sql", - ) -} - -func self_sendHorizonSql() (*asset, error) { - bytes, err := self_sendHorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "self_send-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcd, 0xcb, 0x5a, 0xd2, 0xdf, 0x14, 0xa8, 0xc3, 0x58, 0xcc, 0x9, 0xe2, 0x38, 0xf2, 0xc6, 0xe7, 0x3f, 0xb2, 0xfb, 0xa0, 0x1a, 0x21, 0xb4, 0x13, 0x5e, 0xee, 0xb1, 0xbc, 0x8, 0xcc, 0xe2, 0xb1}} - return a, nil -} - -var _send_to_issuerCoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x59\x93\xe2\xb8\xf6\xe7\x7b\x7d\x0a\x47\xbd\x64\x75\x90\x7d\x53\xb6\x2c\x2f\x5d\x53\x37\xc2\x60\xf6\x7d\x5f\x26\x26\x2a\x64\x49\x06\x03\xb6\xc1\x0b\xdb\xc4\xfd\xee\x13\x18\x92\x2d\x81\x24\x21\xab\xfb\x4e\xfc\xcb\x0f\xd9\x5d\xf8\xf8\x9c\x9f\x7e\x3a\xe7\x68\xb3\xa5\x3f\xff\xfc\xf2\xe7\x9f\x5c\xc5\xf5\x83\xbe\xc7\xea\xd5\x02\x47\x71\x80\x0d\xec\x33\x8e\x86\xf6\xe4\xcb\x9f\x7f\x7e\x59\xdf\xd7\x43\x7b\xc2\x28\x67\x7a\xae\xbd\x17\x98\x31\xcf\xb7\x5c\x87\x53\xff\x25\xfd\x8b\x3f\x90\x32\x96\xdc\xa4\xff\x73\xfd\xf8\x89\xc8\x97\x7a\xb2\xc1\xf9\x01\x0e\x98\xcd\x9c\xe0\x67\x60\xd9\xcc\x0d\x03\xee\x07\x07\xbe\x47\xb7\xc6\x2e\x19\xbd\xfd\xd5\xa2\x63\xf6\xd3\x72\x7e\x06\x1e\x76\x7c\x4c\x02\xcb\x75\x7e\xfa\xcc\x5f\xeb\x7d\x2b\x4c\xc6\xd6\x5a\x35\x73\x88\x4b\x2d\xa7\xcf\xfd\xe0\x9e\x9a\x8d\x94\xf2\xf4\xfd\xd5\xb6\x43\xb1\x47\x7f\x12\xd7\x31\x5d\xcf\xb6\x9c\xfe\x4f\x3f\xf0\x2c\xa7\xef\x73\x3f\x38\xd7\xd9\xea\x18\x30\x32\xfa\x69\x86\xce\xc6\x96\xe1\x52\x8b\xad\xef\x9b\x78\xec\xb3\x23\x33\xb6\xe5\xfc\xb4\x99\xef\xe3\x7e\x24\x30\xc7\x9e\x63\x39\xfd\x8d\x88\xe7\xce\x7f\xfa\x8c\x84\x9e\x15\x2c\xd7\xca\x4d\xf3\xfb\x96\x00\x86\x3d\x32\xf8\x39\xc1\xc1\x80\xfb\xc1\x4d\x42\x63\x6c\x91\xe7\x35\x63\x04\x07\x78\xec\xf6\xbf\x7f\xf9\xa2\xd7\xca\x15\x2e\x5b\xd2\x93\x1d\x2e\x9b\xe2\x92\x9d\x6c\xbd\x51\xdf\x4a\xfe\x2b\x9c\xf4\x3d\x4c\xd9\xc0\xf2\x03\x63\xe9\xb3\xe9\xf7\xab\xd2\x3e\x99\x4c\x43\xd7\x0b\x6d\xff\x36\x61\xe6\xcc\x6e\x91\x1c\x33\xda\x67\xde\x2d\x92\x6b\x9c\x26\x63\x37\x4a\xde\x20\x66\x30\x3f\x70\x4d\x93\x79\x96\x43\xd9\xe2\xba\x2c\x26\xc4\x0d\x9d\xc0\xc0\x63\xec\x10\xe6\x7f\xff\xa2\x15\x1a\xc9\x1a\xd7\xd0\xe2\x85\xe4\x81\x74\xb9\x54\xe8\x9e\xa1\xd7\xf5\x96\x5c\xa4\x3d\x51\x2e\xd5\x1b\x35\x2d\x5b\x6a\x1c\x3c\x74\x2c\xf8\x73\x32\x62\xcb\x5b\xf4\x07\x8b\xf7\x55\xef\x64\x3e\xa0\xd5\x64\x37\x60\x3e\x14\xbb\x5d\xb7\x17\xfa\xc1\xd8\x72\x98\x7f\x4d\xf3\x4e\xe8\x66\xbd\x6b\x14\x2c\xca\x06\x57\xf4\xee\x85\x6e\xd7\xbb\x73\xf9\x6b\x7a\x77\x42\x37\xeb\xdd\xc8\x5b\x8e\xe9\x5e\xd1\xbb\x17\xba\x59\xef\x24\x34\xfc\xd0\xb8\xa2\x73\x23\xf0\x11\x7d\x63\xcb\x1f\x4c\x43\x16\x5e\x63\xf6\x50\xec\x76\xdd\x8c\x79\xd7\x68\x8d\xee\xdf\xac\x2d\x0a\xe3\x6b\xea\x36\x02\x37\xeb\xdb\x64\xa5\x01\xc3\xf4\xba\xda\x23\xb9\x5f\xac\x7d\x9b\x29\xd9\xf4\xe7\x8d\x66\x0c\xec\x5c\x51\x6e\x60\xe7\x66\xc0\xdb\xec\x77\x0d\xeb\xab\xc8\x47\x75\xae\xfb\x00\xef\xab\x5d\x4b\x6d\x35\x47\xb2\xa7\x8a\xcf\xa6\xdc\xeb\xb2\xbb\xd4\xf8\x9e\xd8\x3e\xd1\xbd\x23\xb9\x4b\x5c\xd7\xe5\xf6\x89\xe8\x1d\xb9\x5d\x62\x79\x57\xee\x26\x7c\xfb\x84\x72\x5d\x6e\x93\x24\xde\x95\xd9\x85\xfc\x3b\x92\xeb\x38\xbe\x2e\xb2\x89\xcd\xeb\x32\x47\xa1\x70\x5d\xd4\xc0\xce\x75\x81\x57\x57\xbd\x49\x6a\xed\x79\x5b\xc1\x64\xa7\x91\x2c\xd5\xb3\xe5\xd2\xa1\xf0\x78\xd2\xf7\xa7\xe3\xad\x44\x3d\x91\x49\x16\xb5\x37\xba\xbe\x7f\xd9\xf4\x8d\x4b\xd8\x66\x7f\xbd\xfe\xc6\x35\x96\x13\xf6\xd7\xf6\x91\xef\x5c\x9d\x0c\x98\x8d\xff\xe2\xfe\xfc\xce\x95\xe7\x0e\xf3\xfe\xe2\xfe\x8c\xba\xcc\x89\x5a\x52\x6b\x24\x5f\x35\xbf\xea\xfb\x72\xa4\xf1\xf8\xe6\x56\x71\xa2\x5c\x2c\x26\x4b\x8d\x2b\x9a\x37\x02\x5c\xb9\x74\xac\x80\xcb\xd6\xb9\xa7\xd7\xfe\xed\xeb\x6f\x7e\xa4\xe4\xe9\xd4\xf2\x6b\xf1\xb7\x36\x77\x0c\xbd\x5b\x9e\x23\x2e\x4b\xe5\xc6\x09\x9f\x5c\x3b\xdb\xc8\xec\x60\x1d\x76\x68\x8f\xcc\xef\xb5\x9c\x00\xf9\x48\xe1\xdf\x28\x89\x08\xa8\x14\x5e\x26\xfd\xf5\x28\x66\xe2\xb9\x84\xd1\xd0\xc3\x63\x6e\x8c\x9d\x7e\x88\xfb\x2c\xa2\xe1\xc6\x0e\xf8\x5a\x8c\x32\x13\x87\xe3\xe0\x67\x80\x8d\x31\xf3\x27\x98\xb0\xf5\x68\xe2\xe9\xe4\xee\xdc\x0a\x06\x3f\x5d\x8b\x1e\x0c\x10\x8e\x0a\x7b\xe8\x90\xdb\x62\x46\xae\xbb\x2f\xe4\xab\x03\x9c\x23\x7c\xe3\xe5\x87\x49\xf7\xdb\x17\x8e\xe3\x5e\x7f\xb1\x28\x47\x06\xd8\xc3\x24\x60\x1e\x37\xc3\xde\xd2\x72\xfa\xdf\x90\xf4\x47\x54\x37\xa5\x66\xa1\xf0\x1c\x49\xaf\x1f\x74\xb0\xcd\xce\x08\x2b\xca\x39\xe1\x19\x1e\x87\xe7\xa4\x79\x5e\x38\x15\x1f\x63\x3f\xb0\x5d\x6a\x99\x16\xa3\x9c\xe5\x04\xac\xcf\xbc\x9d\xc8\x97\x3f\x4e\xeb\x7e\x17\xc5\x0f\x72\xe1\xdf\x45\xc4\x76\x20\xc0\x19\x56\xdf\x72\x82\x93\x9b\x3e\x9b\x3a\xa1\x7d\xfe\x9e\x13\xda\x7e\x68\x30\x27\xf0\xd6\x43\xc1\xd3\x62\x6e\x64\x2c\xc7\x1c\xe3\xf5\x88\x91\x32\x3f\x38\x0f\x67\x23\x38\x70\x6d\x46\x5d\x1b\x5b\xce\x19\x29\x51\x3c\x05\x1d\x0c\x3c\xe6\x0f\xdc\x31\xf5\xb9\x80\x2d\x4e\x91\x99\x63\xdc\xbf\x84\xe8\x6a\xdd\x6c\x19\x09\xd7\x56\xc7\x16\x36\xac\xb1\x15\xac\x0b\xb7\x29\xff\x2b\x25\xe3\xf1\xb5\xdb\x56\xdf\x59\xf7\x85\xd6\xb0\x36\xbf\x1c\xf4\x06\x76\x5d\x8b\x2d\xe9\x3f\xa3\x61\x35\x97\xc8\x24\x13\x79\xee\xdb\xb7\xd7\xaa\xf8\xf7\x0f\x0e\xfc\xf1\xc7\x95\xa7\x4f\x01\x9e\xea\x79\x53\x80\xf7\x34\x1e\xd5\xe5\x89\xb6\xe3\x7a\x7e\x4f\xd3\x5b\x7a\x4e\xd4\x9d\xe1\x6f\xa3\xf3\x6d\x60\xac\xdb\xbf\x7b\x63\x62\xdd\x65\xdc\x84\x83\xe3\x52\x76\x18\x0b\x47\x31\xf0\xd6\xe8\x71\xfb\x7c\xaf\xf9\xe3\x8e\xf1\x06\xc8\xf6\x37\xec\x0f\x0e\xc0\x48\x6f\x7c\x7b\xe2\xb1\xd9\xbb\x42\x46\x48\x46\x2c\x18\x5b\x7e\xf0\xae\xe8\xae\xb7\xfd\xea\xee\x9b\x9f\xc9\xd8\xf5\x59\x60\xd9\x17\x22\x3f\x4a\xac\x67\x62\xeb\xa0\xce\x8f\x3b\xf5\x3b\x7d\x27\xf5\xbd\xb7\x73\xc1\x75\x2e\x8d\x0d\x8e\xd5\xec\x4b\x71\xc9\x5b\xb6\x9d\xaf\x7b\x6b\x6c\x3b\xf0\xfa\xb6\x0b\x72\xe6\xdd\x98\x41\x37\x33\x2f\xf4\x52\x06\x8d\xdc\x1d\xfb\x3e\x0b\xce\xf1\xb9\x89\xd5\x8b\xb7\xb1\xbd\x0e\xab\xf3\xaa\x27\x9e\x45\x98\x73\x21\x89\x45\x37\x2f\x65\xb8\xe8\x26\x47\xdd\xd0\x18\xb3\xb5\xbf\x11\x2b\x9a\x91\xfc\xd4\x2c\x7a\x50\xc3\xdb\x21\xeb\xa6\x2c\x27\xf5\xba\x2d\xe0\x05\xdf\xd8\x3e\xb9\x65\xf8\xe4\xd1\x57\xde\x2f\x39\xc4\xa6\xc3\x7e\xaf\x3f\x6c\x86\xf5\x1b\x77\xb0\x26\xe7\x1a\x7e\xf4\x26\x72\x5d\x2f\xd8\xb1\xa1\x27\x53\x5a\xb3\xd0\xe0\xc0\x69\xb3\xc9\x16\x01\x0e\x02\x66\x4f\x02\x6e\x1d\x16\x7e\x80\xed\x09\xb7\xee\x32\xb9\xe1\xe6\x17\x6e\xe5\x3a\xec\x6d\x63\x6b\x62\x6b\x1c\x7a\x07\x4d\xed\x25\x0b\xc1\x72\xc2\xde\xaf\x94\xcd\xb4\xc4\x81\xde\xb7\x69\x7f\x67\xf1\x42\xed\x6c\x67\x36\x5c\xef\xb4\x52\xbf\x45\x4c\xfc\x9b\x03\x7f\x70\x5a\x49\xe7\x36\xff\xfc\x5f\x3f\x38\x09\x21\x88\xfe\x38\x5b\x57\x87\xc3\xb0\xbb\xab\xec\x70\x96\xe7\x30\xe7\x5e\x60\x63\x33\xd1\xb6\x8e\xba\xb3\x80\xd6\x63\xc7\x07\xa0\xf8\xa1\xb1\x05\xe1\x31\xff\xa8\x01\x82\x67\x7b\x8c\x1e\xc3\xbb\x58\x7a\x8b\xe7\x60\xcc\x7b\x2f\xa6\x83\xc9\xba\x1b\x5a\xc6\x0d\xb0\xa9\xcf\xae\xb5\x30\x6f\x71\x1e\x8c\xe1\xef\xc5\xb9\x57\x71\x3b\xce\x37\x8d\xdc\xc9\x7d\xe6\xcc\xd8\xd8\x9d\xb0\x77\x9a\xb4\xbd\xe9\x07\x1a\xa2\x83\xe9\x8e\x07\x28\x78\x9d\xaf\xfd\x76\x4b\x3d\xec\xbd\xe8\x3d\x22\xa6\x17\x1a\x9a\x63\x12\x5e\xe7\x81\x8f\x34\x9e\x12\x71\x64\xed\x22\x19\xfb\x39\xa2\xbb\xc9\xd8\x4f\x8a\x7f\xdb\xc7\xed\xf1\xe0\xed\x4c\x4c\x5d\x8b\xee\x83\x19\xae\x7b\x51\x1d\x2c\x01\xdc\x33\xec\x8a\x5a\xfc\x2b\x99\xda\xf2\xfd\x90\x79\xb7\xab\x22\x2e\x3d\x3b\x3a\x7d\x43\x4b\x30\xb6\x6c\xeb\x42\x8f\xe2\xea\x58\xf0\x9f\x1c\x55\x1d\x78\xe7\xc1\xaa\xca\x5d\xa3\xa8\xc3\xe7\x3f\x6b\x1c\x75\xa0\xf3\xfe\xf1\xcf\x35\xad\x9b\x4a\x3b\xd1\xb4\xad\xc9\x7f\x9f\x0f\xbc\xa3\xe9\xde\xbb\x9d\xfc\x70\x0d\x6d\xe3\xe6\xc1\xe2\x28\x15\xdf\x30\xde\x38\x75\xc0\x45\xb4\x4a\x79\xf1\x2e\x19\x60\xa7\xcf\xce\x0e\xec\x0f\xc9\x39\x5c\xb6\xbb\x3f\x57\xef\xe7\xce\xef\xa7\xe8\x6f\xe6\xc7\x70\xe9\xf2\x1c\x39\xc1\xc2\x63\x7e\x38\x3e\x9b\xdd\x83\x85\xcd\xde\x1d\xcf\xed\x97\x58\xef\xe7\xf3\x64\xdd\xe2\x5e\x52\x4f\x56\x9c\xbf\xdd\x44\xdc\xf6\xa1\x6b\xec\x6d\x45\xce\x11\x71\x9b\xdb\x9d\xac\x70\xdf\x43\x94\xbe\x1e\x59\x9b\xae\xf7\xce\x64\x28\xa7\x6b\x0d\xed\x1d\xce\xae\xab\xf4\x3f\xac\x2f\x5b\xaa\x27\x6b\x0d\x2e\x5b\x6a\x94\xf7\x93\x8a\x2d\xad\xd0\x4c\xd6\xb9\x6f\x4f\xe9\x78\xad\xd2\xcd\x64\x0b\x42\x22\x0b\x53\xa5\xaa\x18\xef\x14\x52\xc5\x92\x5e\x48\xe5\x9a\xa5\x4a\x53\xc8\x74\x61\xaf\x98\xaa\x67\xca\xa5\x66\x22\x59\xd6\xea\x6d\xb9\x9a\x90\xcb\x1d\x21\xf3\xf4\xcc\xa9\xdb\x4b\xde\xfc\x47\x01\xe0\x99\x13\x9e\x39\xf0\xbc\x61\x99\x7b\x7a\x7a\xe6\x9e\xb4\xaa\xa6\x69\xda\x8f\x1f\x4f\xd1\x0d\xe1\xf5\xde\xfe\xef\x1f\xdf\xdf\x43\x98\x10\x60\x35\x25\x64\x9a\x49\x24\x68\xc5\x4e\x33\xd5\xcc\x40\xad\x9b\xd3\x3a\x9d\x74\xa7\xd3\x12\x5a\x99\x4e\xb7\x5b\x93\x92\xdd\x4e\xb2\x51\xc9\xeb\x9d\x5e\x5d\x6b\x4b\x72\xa7\x2c\xee\x11\xae\x81\x29\x48\x51\x55\x28\x22\x15\x5e\x47\x28\xde\x85\xb0\x93\x4f\x4b\xb5\x92\x58\x2e\x65\x93\x95\x44\xb1\x94\x8a\xcb\x50\xd0\x44\x28\xf5\x50\xa5\xa4\xd7\x6b\x85\x74\x3b\x2f\xa7\xe3\x85\x44\xb1\x5a\xc8\xa6\xca\x62\x5d\x4e\x76\xdb\xad\xe6\x0e\xa1\x72\x84\x50\x7c\xe6\xf8\x2b\x08\xd1\x59\x84\x17\xbc\xe6\x74\xb6\xed\x01\x07\xbc\x3c\x87\xf6\x51\x2f\x3c\x9e\x47\xdb\xd1\x28\x41\xaa\x2a\x26\x82\x12\x63\x92\x42\x79\x43\x90\x0d\x64\x28\xaa\x29\x40\x6c\x22\xc8\xf3\x86\x8c\x24\x15\x0b\xa2\x89\x4d\x5e\x04\x10\x53\x60\x20\xc1\x90\x20\x34\x80\x6c\x30\x55\x5d\x53\x05\x1e\xbc\xd6\x3a\x90\x2c\x60\x81\x41\xc1\x34\x05\x51\xc1\x40\x36\x00\x93\x81\x49\x79\x53\xa2\x90\x57\x08\x6f\x62\x42\x05\x60\x48\x84\x00\x85\x40\x48\x91\x2c\x23\x01\xa9\x8a\xa4\xf0\x02\xc2\xbc\xf4\x14\xd5\x1f\x58\x57\xdc\x7f\xed\x15\xef\xe4\x2d\x71\xf9\xb2\xac\xe7\xe3\xb2\xee\xe8\x6a\x46\x00\x8b\x61\x3c\xe6\x83\x7e\xe0\xcf\xb3\xf3\x15\xdf\xa1\xf5\x76\x17\xc7\x73\x38\xd5\x5f\xcb\x27\x4b\x62\x01\xaf\x26\x42\xf5\x5d\xcd\x3d\xad\xc3\x8b\x91\x58\x7c\xf4\x37\x14\xe4\x53\xaf\xa7\x93\x50\xbf\xe0\xa8\x40\x02\x10\x98\x92\xa9\x40\x49\x81\x94\x98\xaa\x41\x0d\x09\x22\x49\x04\xd4\x64\xb2\x22\x0b\x02\x10\x44\x43\x02\x50\x95\x81\x44\x65\xd5\x60\x54\x26\x88\x29\x8a\x09\x4c\x59\xdd\x38\xd9\xa7\x38\xbb\x00\x15\x81\xf2\x88\x67\xa6\x82\x05\x9e\xa9\x82\xa1\x52\xca\x43\x89\x42\xc1\x80\x82\xac\x98\x3c\x12\x98\x44\x00\x05\x8a\xa8\xa8\x32\x84\x44\xe1\xb1\x2c\x28\x94\x32\x43\x8a\x70\x08\xcf\x1c\x8f\x90\x8a\x64\x55\x52\xd0\xd6\x63\x13\x42\xa5\x37\xe4\x4b\x21\x72\x81\x91\x93\xdb\xa2\xb3\x2c\xcf\x9a\x8b\x34\x6c\x4d\xdc\x51\x6c\x96\xd2\xca\x41\x82\xcf\x0b\x45\x39\x2e\x4b\xbd\x66\x8e\xa9\x65\x34\xd2\x56\xa5\x55\xf8\x22\x4d\x40\x2f\xe7\xf6\x14\x65\x00\x1a\x7a\x68\xc0\xb0\xeb\x8f\x7b\x39\x99\xd4\xfd\x5a\xbb\xbf\x61\xb8\x53\x69\x15\x73\x91\x77\x64\x77\x7f\x36\xe9\xcd\xdf\xff\x7b\xae\x55\xaa\xaf\xbe\xe3\x54\xb3\x79\x6b\x5e\x95\x97\xfc\xb2\x2f\xa9\xc9\x1a\xf0\x92\x31\x25\x08\xda\x8b\x21\xad\xab\x74\x32\xf0\xb2\xb2\x41\x1d\xa9\x5b\x17\x13\xe5\x04\x68\x65\x66\x96\x95\x99\xe4\x11\xac\x95\x82\xa2\x57\x74\x86\x8b\x66\x68\x68\x20\x5b\xcf\x91\xd5\x32\x3e\x59\x0e\xa9\x24\x6c\x14\x67\xcf\x78\xb4\x9e\x3d\xe7\x15\xaf\x1e\xad\x83\xdc\x2f\xf2\xbb\x5f\x77\xdd\xe8\xd1\x02\x0f\x79\x22\x4a\x14\x22\xc2\x44\x85\x10\x84\x20\x30\x31\xe6\x89\x40\x08\x46\x94\x61\x45\xe2\xb1\x49\x4d\x20\x43\x80\x24\x62\x00\x93\x97\x15\x64\x40\x03\x08\x04\x8b\x32\x8e\xbc\xf1\x13\xa2\x02\xf2\x92\x22\x18\x8a\xca\x63\x24\x23\x48\x55\x2c\x2a\xa2\x21\x18\x06\x4f\x65\x45\xc1\xc8\x90\xa9\x00\x45\x51\x15\x09\xc0\xcc\x80\x82\x21\x88\x22\x93\x24\x44\x4d\x20\x28\x48\x34\xe1\xd3\x33\x07\x0f\x3c\x5a\x7a\xf5\xe8\x79\x57\xd7\x85\x98\x8e\x75\x58\xb1\xd5\x60\xd8\x1a\xe9\x26\x12\x89\xa5\x8d\x82\x7e\xb9\x13\x0f\x98\x21\x77\x16\xcc\xaa\xe8\x70\xa4\x99\x79\xab\x3f\xf0\x46\x70\x5a\xcc\x36\x6a\xd9\x31\xce\xc5\xfc\xca\xb2\xd4\xc9\x25\x9a\x45\xa9\x57\xa7\x2b\x34\xb3\xba\x15\x39\xbd\x98\x17\x37\x9e\x13\x79\x74\x7f\xcf\x78\xa1\x90\xaf\x18\x45\x77\x98\x89\xd5\x6a\xb1\x46\x3d\xae\xe7\xd3\xf1\x97\x20\x34\x33\x82\x5d\xe0\x05\x42\x12\x19\x8f\xcf\x39\x82\xbc\xac\x68\x0b\x9c\x08\x73\xe9\x31\x6d\x08\xb8\x9e\xf4\x3d\x9f\xb2\xec\xc4\x30\xeb\xa5\xe4\xb8\x98\x08\xfd\xa5\x3f\x6a\xd8\x3d\xaa\x24\x06\x4d\x65\xbe\xd6\x5c\x3c\xe3\xb1\x49\xff\x5c\xad\xff\x0f\xf0\x58\x5e\x45\x48\x50\x19\xcf\x10\x61\x12\x22\x58\xe5\xa9\x4a\x0c\x11\x11\xc6\x4c\x1e\x10\x93\x28\x2a\xe0\x01\x84\x8a\x44\x20\x10\x45\x01\x2a\x0a\xe3\x11\x25\x84\x49\x92\x4a\x0d\xb4\xf6\xb6\xcf\xf0\x7a\xc8\x90\x89\x19\x84\x90\x62\xc6\x20\x01\x92\x2a\x32\x13\x2b\xd0\x30\x54\x03\xc8\xc4\x90\x18\x02\x84\xf2\x92\x24\x53\x6c\x88\x00\x60\x03\x48\x44\x42\x22\x35\x14\xb6\xf6\xe9\xa7\xa8\xcb\xb9\xf3\x58\xf9\xd5\x63\x97\xc9\xc5\x22\x0d\xf8\xd5\x68\x58\x6c\x35\x74\xc9\x25\x85\xe2\x84\x4a\x6e\x17\xbf\x98\xf1\x55\xbc\xbd\x9c\x2b\x9d\x81\x51\x9e\x17\xf2\x35\x09\x98\x2a\xd3\x2b\x18\x27\x5b\x09\x4f\xad\x96\x3a\xcd\x26\x23\xd0\x6b\xa4\x0c\x63\xe0\xc1\x82\xde\x68\xe5\xf9\x3e\x5a\x56\x8d\x99\xbc\x49\x6f\x91\xc7\xce\xf7\x8c\x97\x66\x6e\x15\x99\x60\x20\x76\xca\xa1\xb0\x5a\xd1\xd2\x24\x26\xe0\x6e\xca\x5a\xb5\x8b\x2f\x0d\x2b\xef\x27\x52\x5e\x7f\x1a\xcb\x78\x2d\x29\x1b\xeb\x48\xe2\xaa\x82\xe5\xe1\x3c\x3d\x2e\xc7\xdc\xb2\x6c\xcf\xcd\x82\x31\xd6\x4b\x29\xdb\xc4\x81\x96\xf0\xe2\x7e\xaf\x29\x88\x48\xb4\xa2\x88\xa8\x9e\xf1\xd8\xf4\xd9\x2e\xc4\xff\x00\x8f\x25\x82\x0c\x25\x99\x27\x2a\x0f\xa0\x09\x44\x40\x18\x8f\x64\x2c\x20\x48\xa1\x4a\x14\xc2\x63\x0c\x44\x26\x52\xc4\x24\x4c\x88\x84\x05\xc8\xf3\x0a\x83\x50\x12\xb1\x89\x44\x40\xd6\xe3\x99\x4f\xf1\x7a\x09\x42\x81\x11\x24\x29\x58\x15\x25\x55\x22\x6c\x9d\x54\x81\xa2\xaa\x82\x21\x52\x9e\x60\x6c\x20\xc6\x08\xe2\x25\x11\x29\xaa\x62\x42\x51\xc6\xaa\xa2\x20\x51\x92\x15\xc1\x90\x29\x79\x8a\x86\x20\x3b\x8f\x55\x5e\x3d\x76\x31\x6e\xe5\x59\x66\xbc\xb2\x3b\xf9\x11\x75\x0a\x35\x22\xcf\x92\xc5\x97\xec\x28\xae\xad\x06\x7e\x31\x59\x1d\x5a\xe5\x14\x5d\x95\x7b\x13\x81\x9f\x56\x31\xcf\xd7\x52\x66\xd2\xf7\x71\xd0\x68\x94\xb5\x8c\x9a\x61\x33\xad\x8e\x70\xa5\x35\xd6\xd2\x76\x3b\xd9\x13\x96\x93\x6a\x91\x80\x4d\x62\x5d\x7b\x6c\xfe\x80\xf1\xe9\xbc\xbe\xf0\x52\x86\xc2\x82\xa9\xd8\xaf\xd3\x45\xd9\x52\x53\x7c\x7e\x68\x14\x8b\x46\x7c\xa0\xe7\x68\xbe\xb3\xcc\xd7\xa6\xcb\x54\x23\x17\x0c\x8b\xe1\xa2\x6d\x4d\x6a\x13\xa3\x6c\xd6\x8b\x59\xbb\x1e\x94\x32\xf9\x29\x2f\xfb\xcd\x76\xad\x6b\x57\x4a\x99\x69\x77\xd0\xec\x89\x79\x08\x23\xcd\xcd\x33\x1e\x9b\x01\xe7\x6a\xfd\xff\x77\x8f\xbd\x30\xca\x3b\xb3\xe0\xfe\xc0\x98\xf1\xed\x6a\xed\x23\xca\x2e\x2d\x27\x3e\xa6\xf3\x74\x45\xf0\x01\x6d\x17\xd6\xf3\x1e\xd0\x78\x61\xe5\xed\xa3\x23\xee\x83\xd5\xb7\xfd\xac\x85\x16\x2f\xb7\x3a\x7a\x5a\x17\x0a\x7a\x2f\x2d\x0a\x99\x8a\xd4\xd1\x4a\xcd\x78\xb1\xda\xe9\x66\x2a\xa5\x6a\x0d\x49\x42\xbd\x21\x75\x2a\xe9\x9c\xde\x44\xf9\x74\x21\x9f\x10\xd3\x35\xb9\xb7\x19\x35\x6c\xc7\xb6\x85\x29\x4c\x77\xd9\x78\xb8\x34\xec\xe1\x4c\x25\x3a\x8e\xf7\x12\x31\x7d\x66\x24\x2a\x26\x1e\x57\x78\x68\xd7\xcb\x4e\x2b\xdd\x76\x3b\xfa\xde\xfb\xa2\x56\x28\x11\xfd\xef\x3a\xcc\x92\x83\xea\x58\x06\xb2\x5d\xd5\x8b\xb0\x2c\xbf\x4c\x9d\xda\xc8\x1e\x38\xab\x65\xa6\x56\x2c\xa3\x19\x43\xd6\xb2\x35\x72\x82\x45\x7e\x91\xc2\x9b\xe7\xe3\x44\x6d\xce\xc7\xd1\xff\xf6\x77\x7f\xe2\x91\xd2\xf9\xee\xdf\xba\xa6\xa9\x89\x83\x28\x8e\x0f\xb5\x96\xe6\xd4\x04\xaa\xf9\x56\x4a\x29\x1a\x29\x37\x59\x80\x8b\x31\x29\xf4\x99\xd4\xcf\xe5\x8d\xea\x00\x37\x83\xfc\x4b\x35\x61\x15\xfd\x48\x5d\x6c\x39\x2c\x66\x6d\x3c\x1d\x36\x4a\x72\xdf\x58\x24\xcd\x76\x37\xaf\x09\x7d\x51\x6b\xdb\x9e\xae\x57\x27\xb6\xd5\xaf\x9a\xb9\x56\x38\xcf\x67\xdc\x6a\x1b\x2f\x4b\x53\xbf\x98\x29\x16\xe6\x16\xc9\x4c\xdb\x6e\x22\x36\x9a\xc2\x52\x9b\x4f\x91\xa5\x43\x94\x60\x31\x72\x9a\x42\x00\xf4\xf9\x8f\x1f\xa7\xad\xc5\x27\x57\x0d\x7c\xa8\x6a\x8a\xc7\x55\xa3\xc7\x95\x69\x3e\x91\x0e\x1b\xcc\x9d\x0f\x4a\x49\xab\xe5\x3a\xd2\xfc\x25\xcb\x93\x51\xae\xba\x9a\x8c\x73\xb0\x62\xc7\x72\xfd\x17\xdf\xc8\x68\x8b\x7d\xd5\xd8\x27\xd9\xe6\xc3\xd4\xeb\xb2\x18\x6f\x25\x03\x5a\xf6\x97\x4b\x63\x1a\x4c\xd5\x12\xb5\x6a\xcb\x58\xc7\xa9\xcc\x96\x46\xae\x51\x1a\x96\x06\x99\x62\x02\xf4\x87\x46\xab\x3a\x9f\xe5\x60\xa1\xae\x55\x02\xb3\x9b\x99\xb7\x94\xec\x0b\x15\x5b\x66\x3e\xdd\x8a\xa7\x8b\x7e\xd5\xee\x98\x5a\xbd\xd1\x42\x19\xaa\x24\x7e\x3d\xf5\xe2\x43\xd4\x57\x4f\xa8\xd7\x6b\x2f\xbc\x58\x54\x27\x6e\xad\x99\x9f\xf1\x1a\x4f\x6b\x35\xb4\x62\x41\xb1\x15\x84\xe9\x19\xf1\x4b\xa5\xa6\xd7\xd6\x9d\x5c\x3c\x7c\xf1\xfb\x3b\xea\x9d\x47\xa9\x5f\x38\x63\x6c\xc5\x12\x7d\x29\xe4\xcd\xb1\xed\xd5\xad\x4a\x6c\xe9\x66\x63\xa9\x79\x3c\x65\x79\x45\x33\x80\xd5\x7e\x58\x5c\x25\xc7\x26\xee\xdb\x79\xa1\x5b\x9a\x78\x29\x3e\x13\x1f\xf5\xe6\x95\x7c\xb1\xe6\x26\x56\x5e\x19\x37\x63\x35\x1d\x01\x34\x36\x4c\x47\x7b\x49\x16\xe0\x34\xde\xff\xe5\xd4\xa3\x87\xa8\x6f\x9e\x50\x9f\x98\xc4\xbd\x4e\x2b\xd9\x52\xea\xcb\xc5\x94\x2f\x15\x45\xcd\x04\x54\x52\xe2\x85\xb1\xab\xb6\x9b\x1a\xee\x75\x6b\x8e\x91\x1f\x6b\x8b\x55\x7d\xef\xf5\xee\xa3\xd4\x57\x97\xd4\x4e\x1b\x6a\xbf\xde\x21\xd6\x6c\x8a\x86\x4e\xbe\x94\x94\x08\x5a\x86\x33\x00\xf4\x58\xa9\x36\xad\x2f\x33\xe5\xb4\x34\x2d\xf5\xc6\xb6\xd5\xa8\x14\xdd\x7e\x6a\x31\xea\x4e\x45\x29\xae\x36\xcc\x61\x6d\x96\x50\xfb\x45\x49\x49\xce\x13\xe6\xbc\x55\x21\x49\x0a\x3d\x3d\xa6\x57\x37\xd4\x5f\x6e\x5d\xce\xbd\xd4\x70\x47\xeb\xf2\xfa\x62\xc3\xae\x32\x15\x02\x90\x08\x54\xca\x53\x95\x02\x81\x28\x0a\x32\x01\x91\x08\xc2\x40\x14\x4c\x99\x48\x48\x06\x86\xc2\x33\x86\x81\x20\x62\x89\x02\x05\x61\x24\x50\xc1\x30\x45\x20\x28\x0a\x31\x0e\x2b\x35\x0a\x8d\xe4\x86\xd6\xd0\x23\xbd\x81\xd4\xae\xe4\x42\x5c\x7e\xe1\xe7\x25\x37\x35\x2a\x88\x65\xd5\xcf\xaa\xea\xb4\xf9\xd2\x61\xbd\xac\x44\x9b\x3d\x3c\x20\xc5\xf7\x7a\x3a\x17\x5e\x62\xf8\x70\xe1\xf7\x2f\x32\xec\x0a\xff\xfa\xe5\xf0\xe6\xb3\x04\xee\xcd\x15\x75\xe5\xc1\x9b\x98\x38\xa3\xc9\x61\xc1\xdc\xf5\x46\x13\xec\xfb\x93\x81\x87\x7d\x76\x46\x53\x83\xf9\x01\x57\xd7\x53\x5c\x69\x23\xcc\x7d\xe7\xea\x6c\x12\x30\xdb\x60\x1e\x27\x00\x1e\xdd\x62\xc8\x74\x3d\xc2\x7c\x32\x71\x1d\x87\x2d\x82\x31\x0e\x1d\x32\x38\x35\x14\xbd\xf6\x7f\x8b\xb2\xcd\x08\x68\xbb\xac\xe6\x9f\x2f\xff\xff\x8d\x56\xe1\xbe\x06\x96\xcd\xbe\xfe\xc5\x81\xcd\xa2\xdc\xd7\xed\x77\xd4\x5f\xff\xe2\x36\xf7\xa3\x1f\x07\xd8\xff\xfa\xd7\xe6\xa3\x83\xe8\xc7\xff\x6c\x85\x4d\xc6\x6e\x13\xb4\xf1\x22\x58\xf8\xd6\xea\x46\x71\x8f\xf9\xcc\x9b\xbd\x27\xfc\xe5\x3f\x37\x51\x81\xfd\x20\x7a\x5b\x96\x6e\xdf\x5a\x3b\x43\xc5\xc3\x23\xc3\x1b\x70\x6c\xb3\x2d\xf6\xc8\xc0\x9a\x6d\x6f\x5e\xa8\x92\x7d\x1d\xf0\x5b\x42\x22\x3a\xbc\xaf\x7f\x71\x5f\x67\x3c\xff\x2f\xfe\x5f\xe0\xeb\xf6\x06\x09\x3d\x8f\x39\x41\x21\x2a\xda\xd7\xbf\x38\x74\xfc\x7b\x3c\x7a\xa1\x79\xcd\xdb\xff\xde\x11\xb9\xa7\x74\x27\xb9\x56\xac\x98\xa6\xac\xf2\x82\x28\x02\x01\x63\x43\xc2\x58\x82\x44\xa0\xaa\x21\x1b\x14\x2b\xd0\x20\xc8\x00\xd0\x30\x45\x06\x25\x95\x61\x2c\x61\x44\x19\x04\x58\x35\x80\x20\x30\xd5\x60\xc2\x16\xd1\x4e\xef\xda\x8b\x8f\x2a\x70\x77\x27\x2a\xfb\xda\xe5\x8e\x6e\xfd\xe7\xe4\x79\xdf\xc1\x93\x35\x2e\x49\x82\x26\x00\x00\x62\x66\x40\x99\xa8\x86\xcc\x98\x60\x8a\x54\x60\x04\x43\x91\xf0\x22\xe4\x99\x88\x64\x42\x4d\x2c\x00\x11\x00\x13\x03\x1e\x48\x54\x61\x06\x12\x10\xe1\x55\xf2\xf5\xcb\x19\x0b\x17\x38\x60\x26\xe4\xb1\x00\x30\x54\x15\xc6\x64\x48\x98\x20\x08\x32\x62\x58\xe1\x65\x59\x56\x24\x03\x13\x24\x4a\x48\x32\x21\xa4\x84\x88\x26\x34\x19\x91\x00\x45\x88\x52\x93\x97\x20\x55\x3f\xce\x01\xff\xfc\xf6\x9e\x1b\x06\x93\x30\xf8\xdc\xb2\x5f\x63\xf8\xd1\x25\xbb\x8f\x30\xfc\xb0\xad\x5f\xe4\x65\xbf\x39\xf8\xcd\xc1\x6f\x0e\x7e\x73\xf0\x9b\x83\xdf\x1c\xfc\xe6\xe0\x37\x07\xbf\x90\x83\xe8\xff\xfe\xcf\xed\x83\x17\x9f\x4c\xa2\xcf\x06\xcf\x5d\x4f\xaf\x23\xf4\xcd\x32\x4d\x42\x0a\x16\x76\x66\xd2\x55\x6c\xe4\xca\x2f\x1d\x4d\xe8\xb7\xab\xb3\xbe\x2c\xcc\x87\x50\x98\x34\x54\x8a\x46\xc3\x09\x5f\x1b\x4f\x53\xf3\xfd\xea\x63\x2a\xfa\x2b\xce\x53\xd5\x1c\xa0\x4e\xb5\x90\x1d\x98\x7a\x7a\x81\xe3\x09\x55\xe9\x75\x12\x62\x26\x74\x13\x75\x1b\x64\xdb\xe3\x42\x7d\x06\x34\x77\x58\xd8\xcd\x08\xe4\xac\x07\xa7\x69\xee\x99\x51\x88\x6b\x2f\xb5\xf8\x62\x51\x75\x9b\xd9\x81\xc5\x96\x98\x37\x1d\x9c\xd1\x49\x73\x31\xc8\x4d\xa0\x39\xec\x6b\xed\x46\x63\xec\xf9\xb9\xac\x31\xd3\x85\xb4\xad\x25\x96\xbe\x8f\x6d\xb3\x67\xe4\x72\xe3\x56\x35\x36\xb7\x67\xc5\x40\x9e\x78\xfe\xb2\x98\x51\xf8\x92\xc9\xfa\xdd\x92\x2b\x75\xf6\x33\x1c\x89\xee\x83\x6b\x63\xf1\x7b\xa6\xc1\xaa\x15\x50\x25\xa4\x99\x4f\x25\xb2\x5d\xc7\xb7\x83\x0e\x12\x06\x73\x98\x2a\x76\xeb\x98\x42\x51\xd4\x52\x23\x80\xb0\x9c\xa8\xa7\xe5\xb9\x3a\x98\xf4\x35\xdf\x2b\xa4\x27\x8e\xd0\x5e\xd6\x7b\xad\x66\xc5\xcf\x79\xab\x02\x93\xb0\x5c\x1c\xc6\x5f\x4a\x8d\x0e\x74\xd3\x3a\x2e\x8f\xe7\xc9\x08\x8e\x31\x9b\xe8\x69\xc0\xbb\x1d\xde\x0c\x82\x7c\xa3\xa1\xa8\x2b\x33\x01\x95\x66\x77\x25\x38\x23\x29\x08\xcc\x15\x69\x0c\xe2\x49\xd1\xcd\x8e\x58\x4e\x2a\x34\x16\x42\x4c\xa9\x18\xa3\x82\x9c\x0e\xcc\xf4\xa4\x03\xac\x29\xea\xc1\xc4\xc4\x00\xb5\x1c\x8a\x49\xb1\x98\x9a\xc3\xb3\x87\xfd\xad\xbf\xab\xff\xf9\xa3\x6b\x91\xd1\xd5\xfd\x98\xff\x56\x93\x45\xa7\x37\xb0\x5f\xba\xc9\x31\xcc\x7a\x52\xd8\x45\xcb\x61\xad\xec\x94\x89\xe7\xa9\x25\xed\x65\xd8\xc4\x23\x7f\xb0\x1a\x84\xd3\x61\xbb\xd7\x73\x47\xab\x55\x3e\x1b\x27\xbd\x74\x3e\x2c\xf7\xcd\x26\x14\x81\x31\x9f\x75\xf5\xf2\x2c\x5e\xd4\x1c\x25\xd5\x80\xf1\x0c\x95\xe6\x2f\xfd\x68\x99\x32\x9e\x6e\x35\x27\x22\xeb\x94\x7b\x64\x5a\x13\x48\x90\x5a\x85\x4a\x75\xa5\x58\xd5\xa4\x5e\x4e\xcf\xe7\xb5\x44\x39\x2b\xb6\x60\x11\xd9\x8e\xd1\xdc\xfb\x4b\x5e\x1a\x32\x0b\x0e\x6d\x37\xab\x34\xd2\x63\xfd\x85\xf5\x09\x94\x2b\x9d\x20\x93\xcf\xaf\xda\x2d\x65\xde\xb2\x7a\x71\x9c\x08\x51\x01\x45\xd3\x6a\xbd\xe8\xa1\x83\x75\x9c\x37\xfe\xb7\x8f\xaf\xc0\xe8\x77\x6a\x52\x52\x76\xf5\x02\x28\x54\x63\xf3\x6e\x3d\xa1\xae\x3a\xb3\x4e\xab\x01\x17\x56\xc5\xea\x86\x75\x83\xd7\x67\x76\xb5\xc0\x94\xe8\xf9\x56\xab\xb4\x0d\xcc\x04\x1f\xc6\x69\xc6\x6d\x84\xfd\xe2\xac\x1a\xe8\x72\x7c\x90\x2d\xc0\x12\x53\x69\xab\x62\xa6\xb3\xb1\x9c\x85\x72\xb3\x66\x39\xd6\xd3\x02\x79\x5d\xbf\x71\x9a\xa5\xe1\xc1\x8b\x38\x5a\x7a\x87\xb7\x9a\x93\xcd\x82\x94\x2f\x06\x43\x5d\x62\xe3\x66\x5f\x2a\x27\x29\x70\x67\xb3\x81\x61\x3b\xbd\xd2\xaa\x28\x4c\x8b\x5a\x53\xd1\xdb\x4b\x79\x3a\x1c\x8f\x9c\x5a\xb2\x91\xe5\x89\xba\xc4\xad\x41\xdd\x2b\x8c\x43\x63\x69\xb9\x28\xb9\x68\x63\x51\x30\xe3\xc9\x62\xb1\x33\x2d\x6b\xbc\x55\xed\xee\xcb\xfb\x6b\x66\x28\x2f\x7c\xd0\xf4\xd1\x19\xca\x83\x8f\x9a\x3e\xe3\x95\x65\xfe\x99\x7b\xe4\x9d\xec\xa7\x66\x5d\x7f\x7a\xe6\x54\x41\x80\x50\x16\x00\x94\x14\x24\xca\x32\x52\x80\x1c\xbd\x0d\x7d\xd0\x68\x45\xa6\xd0\x6d\xef\x39\x5f\xfc\x30\xe6\xc3\x64\x1d\x7e\x1c\xb3\x7f\x35\x59\x92\x24\x24\x61\x89\x61\xca\x04\xa0\x08\x04\xc9\x0a\x40\x32\x2f\x48\x32\x55\x99\x28\x22\xc8\x18\x43\xb2\xc2\x13\xac\x62\xa4\x60\x0c\x79\x95\x19\xc0\x64\x0a\x14\x11\x32\xe9\xf6\x4d\xcb\xa3\xe6\xb2\x78\x12\x2e\x71\xeb\x25\x0e\x0a\x20\x97\x5e\x06\x83\x79\x89\x1f\x77\x01\x5e\x4e\x5c\x5e\x2d\x65\x16\xb3\x42\x62\x59\x46\x41\x3c\x49\x12\xad\xd9\x3c\xa5\xce\x61\x3f\xf0\xca\x4e\xef\x34\x0d\x9d\xbb\x2e\xbe\xb1\x9b\x3c\x09\xdf\x8f\xdb\xef\xbe\xc4\xc8\x69\xb8\xdf\x66\xff\xed\x82\xd0\x79\xde\x01\x63\x3c\x4f\xa9\x21\x2a\xbc\x8c\x25\x5e\x42\x26\x90\x04\x22\x28\x82\x0c\x0d\x13\x09\x3c\x55\x0d\x93\x51\x82\x45\x86\x21\x10\x4d\xd9\xa0\x8c\x0a\xc4\x50\x18\x15\x05\xc1\x90\xd9\x86\x77\xe1\x2d\xef\xff\x50\xb9\x3f\x8b\x77\x45\xdc\x3f\x7f\xf6\x9d\xd5\x07\x79\x37\xa8\xa8\x48\xd4\xa0\x14\x08\x54\x94\x80\xc2\xcb\x92\xcc\x13\x11\x23\x2c\x33\x95\x4a\x4c\x91\x10\xc1\x82\x4a\x0c\x91\x67\x92\x40\x65\x8c\x4d\x19\x60\xc1\x64\x0c\x19\x50\xa2\x6c\xfb\x1e\xe6\x55\xde\x13\xa1\x0b\xdd\x40\x44\xd3\x44\x25\xb9\x98\x54\x5f\xa0\x9b\x29\xc5\x56\xbc\x5c\x5b\x5a\x3e\x3f\x36\x8b\xa9\xae\x5d\x6d\xf7\xbd\xb0\x1e\x6b\x6c\x1e\x90\x6d\x7f\xdb\x7b\xeb\x5f\xe2\xf6\x5d\xde\xf5\xc7\xec\xdb\xe4\x3e\xfb\xb7\xf2\xbe\xce\x27\xd0\xa0\x08\x61\x49\x05\x82\x24\x88\x14\x40\x13\x2a\x2a\x32\x88\xca\x1b\xa6\xa2\x12\x03\x40\x59\x35\x64\x44\xa1\xca\x90\xa1\xca\x94\x40\x2a\x8a\x0a\x96\x18\x43\xd1\xaa\x99\xf8\x2e\xef\x1f\x6b\x56\x3f\x87\xf7\xe4\x63\xf6\x7f\x39\xef\x10\xc8\x3c\x05\x82\xaa\x40\x4c\x15\x43\x06\x32\x84\x86\xc2\x18\x12\x30\xaf\xca\x22\xc2\x50\x92\xa8\xcc\x13\xde\x94\x45\x84\x78\x55\x95\x65\xc8\x64\x49\x81\x94\x62\x0c\x20\xda\xbe\x13\xf7\x96\xf7\x4f\xf4\xb7\x88\xc2\xf8\x07\x79\x4f\x3d\x66\x7f\x24\xde\x67\xff\xea\xaa\xf3\xf9\xcf\x33\x3f\xde\x50\xff\xea\x56\x3a\x5d\x50\x32\xd5\x59\x75\x64\xe4\x85\x8c\x06\xdb\xad\x61\xcd\xcb\xdb\xc3\x0e\x00\x66\x5a\xf1\x0b\x59\xd9\x06\xc9\xda\x3c\xd7\x7e\xd1\x3a\xd1\xbb\x83\x07\xad\xf1\x29\x4b\x6f\x58\xfb\x60\xa7\x58\x2b\x23\xef\x70\xcc\x11\xdf\xb4\x06\xeb\x4a\x89\x53\xbd\xc3\x04\xd8\x14\x99\x9a\x10\xea\x8b\x49\xbc\xd0\xab\x2d\x78\x2f\xb7\xaa\xa7\x0a\x39\xb0\xd0\x75\x10\xe6\xd3\x13\x7b\x6a\x98\x63\xbd\x11\xeb\x74\xb2\x53\xa9\x69\xe9\xf1\x95\x9d\x5a\x04\xb1\x74\x39\xd6\x99\xa6\xdc\x6a\x85\x7a\x9d\x86\x3c\xe1\xdd\x42\x2f\x9b\x99\x36\x8a\x95\x75\x3f\xad\x67\xf7\xda\x93\xd0\x63\xd9\x6c\x21\xc5\xb4\xd6\x22\xe7\x08\xac\x96\xaa\x84\xa8\xd3\x27\x53\xdc\xce\xbb\x0b\xc7\xd3\x63\x7d\xd0\x32\xf7\xef\x47\x5e\xe1\x60\xef\x19\x47\xcb\xfa\x07\xb2\x9b\x97\xdc\xb5\x7f\xae\x75\xd4\x3e\xa1\x75\x2e\x79\xcb\x46\xf3\x01\xfb\x9a\xf6\xcf\x65\xeb\x73\xd9\xf2\x57\x77\xc9\xee\x0f\xb2\x2b\x23\xcf\xcd\xe5\x4d\x4b\x52\x81\x95\x71\x7f\xb8\x28\xe2\x66\x45\x95\xe2\x2b\xd3\x57\x19\x20\xae\x57\xea\x75\x56\xf1\x76\x6e\x94\x72\xf3\xf2\x68\x36\xda\x30\x77\x39\xc8\xb4\x5e\xa2\x5e\x4f\x19\xcd\x7c\xd6\xca\x36\x06\x71\x18\xcf\x66\x4c\x3e\x44\x7d\x30\xd3\xeb\xbd\x2a\x48\xe8\xa2\x19\xd7\x62\x93\xca\xb4\x59\x7d\x51\xe9\xbc\x5e\xae\x17\x62\xa5\x74\xb1\xd7\x9b\x8d\x05\x96\x6b\x03\x81\x95\x6b\xc9\x61\x59\xac\xb6\x6a\x22\xc9\x12\xbb\x66\xc7\x69\xb7\xb4\x0e\x04\x3d\x4c\x52\x01\xf4\x3b\x93\x41\xcf\x8c\x5b\x73\x37\xb7\x9a\xf1\x59\x6a\xbf\xc8\x64\x52\x76\xe7\x0d\x38\x63\xc0\x0f\xcb\x7c\x22\x0f\xf7\x3e\xf5\xcf\x07\xd9\xa3\x4e\xfe\x68\x90\x15\xe7\x05\xdb\xff\xcc\x20\xfb\x1b\xbb\xa2\x37\x05\xd9\x27\xf7\xbf\xef\x9f\xde\xb9\xd2\x92\x6d\xa6\x3f\xee\x9a\xae\x81\x2f\xbb\x6b\xaf\xef\x60\xba\x26\xae\x8e\xec\x7c\x5b\x98\xc2\x99\x5c\x35\x97\x4a\xa5\xc8\x46\x49\x83\x6f\x34\xb2\xc8\x5a\x4c\x47\x59\x10\x77\xfb\x1d\xaf\x1c\xc8\xfd\x32\x2f\x09\x55\x63\x34\x10\x68\xbd\xd1\x34\x99\xee\xce\x08\xa8\x68\xd8\x1c\xe8\x9d\x45\x30\x68\x69\x63\xbf\x10\x0e\xc7\x71\x7b\x39\x8c\x6b\xdd\x28\x28\x66\xcd\x41\x30\xa3\x5a\x50\xeb\xf7\x3b\xbd\xc5\x22\xdf\x76\x24\x6a\xb8\x3d\xe2\x4e\x96\x20\x63\x17\x3a\xd3\x19\xc9\x17\x62\xc8\x28\x05\xef\x05\x5c\xf7\xb8\x52\x8f\x02\x2e\xe2\x6e\xd3\xf7\x3b\xf8\xd0\xe6\x8e\x84\x94\x73\xf6\x75\x71\xe1\xba\x30\xfe\x3c\x0a\xf8\x4f\xb1\x7f\x21\xd9\xdc\x62\xff\x97\xf4\x85\xdf\x5e\x7f\xdb\xd8\xef\xa3\x7d\x71\x6d\x6f\xbf\x7a\x8f\xfd\x54\xab\x09\xb6\xca\x0b\x6d\x31\x05\xd8\xa0\x2c\x69\x4b\x35\x01\x2a\x7e\x3a\xd9\x9f\x11\x5e\xe6\xf9\xa6\xaa\x74\x87\xa2\x5d\x18\xd9\x6a\x55\x46\xa3\x04\x9c\x1d\x54\xc5\x3e\xe0\xe6\xa7\xfc\xdd\x94\x90\x3e\x79\x60\xfa\xc1\x42\xdc\x96\x90\x36\x85\xfa\xa0\x93\xdf\x3d\xdf\xdc\x9e\x15\xab\xec\xe8\x0b\xf7\xcc\x0e\x6f\xb5\x38\x5b\x0d\xdb\xa4\xc9\x94\x04\x9d\x77\x5e\xc8\x18\x4d\x16\x42\x63\xd4\x0d\x24\x59\xa8\x75\xca\xa9\x59\xae\xdc\xc8\x23\x33\x2f\xd5\x87\xf1\x49\x25\x93\x1e\xa2\x64\x36\xb5\x48\xd4\x3a\xb4\xa0\xa5\x96\x42\x9e\x77\xea\xa3\x4c\xdd\xc9\x8e\xd4\x92\x30\x9d\xcf\xab\xf9\x79\x9e\xf7\xe7\xf3\x28\xc9\xe4\x1c\x20\xf3\xad\xc9\x44\xb3\x73\x25\xed\xa5\x9c\x6b\x2b\x23\x23\x96\x5b\xce\x4b\x28\xe0\x01\x42\xc6\x58\x9d\xab\xb5\xec\x24\x44\x64\xff\x69\xe8\xf9\x04\x76\xe2\x04\x17\x12\xd8\x21\xe1\x77\x0c\x5b\x1e\x4e\x60\x9f\x68\xff\xbe\x04\x76\x3a\x98\xff\xaf\x0b\x60\xed\x78\x92\xe5\x6f\xc5\x17\xc7\xca\x22\x2e\x55\x3f\x21\xc1\x7c\xee\x0c\xcc\xef\x05\xad\x7b\x16\xb4\xa2\x24\x90\x9d\x13\xaa\x4d\xfa\x92\x50\x20\x99\xa2\x3c\x0c\x9b\xd3\x74\xa7\x86\x4b\x36\xbf\x98\x9b\x34\xd5\xec\x8d\x61\xc5\xc1\x3a\xc4\xae\xde\xdc\x21\x7b\x28\xc1\x1c\xb4\x9a\xf7\xf4\x50\xca\xfb\xba\x3b\x58\x8c\x7b\x13\x1c\xe7\xae\xf8\x27\xdb\x4f\xdc\x63\xff\x20\xc1\xfc\x97\x06\xb0\x76\x3c\x9b\xf8\x37\xe3\x13\x94\xbe\xde\xbe\x21\xc1\x5c\x98\x6d\xbc\xb2\x79\xd9\x47\xa7\x1c\x4f\x36\x30\x7b\xcd\x5d\x87\x73\x86\x9b\xad\x4c\xf6\xbe\x7e\x26\xf9\x5d\xd6\xb2\x9b\x14\xd9\x6c\x80\xf2\x46\xcb\xc5\x03\x17\xde\x9e\x43\xb3\x3b\x68\xe2\x75\x93\xb3\x77\x8a\x79\x78\x20\x4e\x74\x0c\xce\x81\xc6\xe8\x8d\x21\x4d\xd7\xcf\x6c\x0d\xbf\x33\xc8\x55\x6a\xd9\xa2\x56\xeb\x72\xf9\x64\x97\xfb\xb6\xdb\x35\xf3\x79\x77\x24\xc3\xc5\x03\x12\x4e\x8e\xe6\xf9\x2c\xe0\xfe\x15\xd4\xfe\x35\xc8\xe7\x36\xac\xdf\x9f\x46\xf4\x30\x3c\x03\x3b\xe7\x90\xbd\x1a\x38\x06\xb5\xd9\x23\xf7\xfa\x6e\xf6\x57\x8f\x61\x7a\x18\xee\x91\xf2\x73\xc0\xaf\x58\xe7\x9a\xa5\x6c\xb5\x99\xe4\xf6\x1b\xe7\x7d\xa8\x24\x9f\xc3\xf7\x07\x0b\xf0\xb6\x0e\xf6\x1b\xfc\x5f\xd8\x9c\xfe\xe8\xf0\xae\x87\xf1\x6e\x94\x9d\x03\x7a\x60\xe6\x18\xe1\x76\xcb\xf4\xf3\x5b\xa5\x1f\x9e\x54\xf6\x30\xb8\x48\xd7\x39\x6c\x7b\x23\xc7\xd0\xac\xc9\x73\xb4\x81\xfa\xd5\xad\xc1\xcf\x9c\xd0\xf6\x38\xd2\x03\x95\x67\x01\x9f\x9a\x3c\x57\xe9\x17\xf6\x0f\x3f\x3a\xa7\xee\x33\x90\xfa\xa1\x71\x01\xe3\xab\x99\x63\x74\xd1\xd6\xe3\x57\x36\x13\x7f\x73\x38\xdf\xc3\x20\xf7\x0a\xcf\x01\x3d\x31\x77\x53\x0e\x3b\xf8\x66\xf4\xf4\x88\xc2\x87\xd1\xee\x15\x9e\x43\x7b\x62\xee\x18\xed\xeb\x96\xdc\x57\xb6\xbc\x7e\x73\x54\xe3\xe3\x78\x77\x0a\xcf\xe2\x3d\x36\x77\x8c\x77\xb7\x6b\xf6\x95\xdd\xb0\xdf\x9c\x59\xf9\x30\xe0\xbd\xc2\x73\x80\x4f\xcc\x5d\xec\x1a\x6c\x76\xc3\x7e\xde\x6f\x75\x7d\x75\xbb\xe3\x33\x67\x7a\x3e\x5e\x8e\x03\x95\x67\x4b\x72\x6a\xf2\x5c\x96\xf0\xd9\xf4\xf9\x75\x7f\xdf\xcb\x5b\x11\x9f\x9e\x75\xfa\x09\xd8\xaf\x02\x7f\x08\xf5\x49\x17\xf5\xdc\x09\xb0\x0f\xe3\x3f\x56\x7a\xae\x10\x67\xcc\x5e\x2c\xc9\xe1\x36\xc1\x97\xba\x9a\xbb\xd3\x71\xb7\xd8\xa3\xb3\x74\x6f\xdb\xc0\x78\x73\xec\xee\x89\x1e\xae\x5c\xda\xf7\x62\x9b\xf5\x6c\x29\xcd\x19\x81\xc7\x18\xf7\xba\x5b\xf9\x1f\x5c\x3b\x93\xac\x25\xb9\xc3\xdd\xcb\xf9\xdd\xeb\x8d\x6f\x3b\x9a\xc7\x07\xfe\xde\x8b\xf2\x58\xcd\x1a\xe4\xb6\x9f\x72\x04\xf1\xf0\x08\x9b\xe7\xc3\x03\x6b\x9e\x37\x07\xc9\xbc\x41\xb7\x3f\xb5\xf8\x5e\x60\x3b\x0d\x6b\x4c\xfb\xc0\x38\x82\x75\xb9\xab\x78\x74\xbe\xf2\x23\x10\x5e\x95\x6c\x50\x1c\x24\x98\x1b\x81\x1c\x1d\x09\x7d\x2f\x90\x43\x25\x6b\x20\xc7\x1d\xe1\x1b\x91\x1c\x1d\x63\x7d\x2f\x92\x43\x25\x6b\x24\x07\x3b\x73\xdc\x0e\xe3\xe8\xe8\xed\x07\x90\x1c\xea\xd9\x82\x79\xed\x25\x1c\x83\x39\x3c\xa6\xe2\x5a\xfa\x7a\x0c\xd1\xa9\xa2\x35\xa4\x93\xdc\xf8\x2e\x47\x97\x4e\x9c\xe7\x88\x6b\x4f\xc6\x2c\x60\x91\xd9\xff\x17\x00\x00\xff\xff\xf9\x46\x3d\x7b\x9e\x7e\x00\x00") - -func send_to_issuerCoreSqlBytes() ([]byte, error) { - return bindataRead( - _send_to_issuerCoreSql, - "send_to_issuer-core.sql", - ) -} - -func send_to_issuerCoreSql() (*asset, error) { - bytes, err := send_to_issuerCoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "send_to_issuer-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xbe, 0xaf, 0xb3, 0x2c, 0xce, 0x7d, 0x4e, 0x8d, 0x65, 0xcf, 0x7c, 0xb8, 0xd4, 0xf1, 0xfe, 0xaf, 0xe3, 0x5b, 0x7b, 0xde, 0x1e, 0x2f, 0x45, 0xd7, 0x36, 0x89, 0x88, 0xf7, 0xeb, 0xee, 0x13, 0x1b}} - return a, nil -} - -var _send_to_issuerHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x7d\x79\x8f\xda\xc8\xd3\xf0\xff\xfb\x29\xac\x68\xa5\x49\x34\x93\x8c\xef\x23\xfb\xe4\x27\x19\x30\xc7\x00\xe6\x30\x0c\x0c\xab\x15\x6a\xdb\x6d\x30\x97\x19\xdb\x5c\xb3\x7a\xbe\xfb\x2b\x1f\x80\x31\xbe\x38\x92\xdd\xdf\xfb\x58\x51\x34\xd8\xd5\x75\x75\x55\x57\x75\x75\xdb\xfd\xf5\xeb\x6f\x5f\xbf\x22\x4d\xc3\xb2\x47\x26\x94\x5a\x35\x44\x05\x36\x90\x81\x05\x11\x75\x35\x5f\xfe\xf6\xf5\xeb\x6f\xce\xf3\xc2\x6a\xbe\x84\x2a\xa2\x99\xc6\xfc\x08\xb0\x86\xa6\xa5\x1b\x0b\x84\xfb\x46\x7f\xc3\x02\x50\xf2\x0e\x59\x8e\x86\x4e\xf3\x10\xc8\x6f\x92\xd0\x41\x2c\x1b\xd8\x70\x0e\x17\xf6\xd0\xd6\xe7\xd0\x58\xd9\xc8\x0f\x04\xfd\xc3\x7d\x34\x33\x94\xe9\xf9\x5d\x65\xa6\x3b\xd0\x70\xa1\x18\xaa\xbe\x18\x21\x3f\x90\x87\x6e\xa7\xc8\x3e\xfc\xb1\x47\xb7\x50\x81\xa9\x0e\x15\x63\xa1\x19\xe6\x5c\x5f\x8c\x86\x96\x6d\xea\x8b\x91\x85\xfc\x40\x8c\x85\x8f\x63\x0c\x95\xe9\x50\x5b\x2d\x14\x5b\x37\x16\x43\xd9\x50\x75\xe8\x3c\xd7\xc0\xcc\x82\x27\x64\xe6\xfa\x62\x38\x87\x96\x05\x46\x2e\xc0\x06\x98\x0b\x7d\x31\xfa\xc3\xe7\x1d\x02\x53\x19\x0f\x97\xc0\x1e\x23\x3f\x90\xe5\x4a\x9e\xe9\xca\x93\x23\xac\x02\x6c\x30\x33\x1c\x30\xbe\xd6\x11\xda\x48\x87\xcf\xd5\x04\xa4\x52\x44\x84\x7e\x45\xea\x48\x48\x43\xac\xbd\xf9\xf0\xdf\xc6\xba\x65\x1b\xe6\x6e\x68\x9b\x40\x85\x16\x52\x68\x37\x9a\x48\xbe\x21\x4a\x9d\x36\x5f\x11\x3b\x81\x46\xa7\x80\x43\xc5\x58\x2d\x6c\x68\x0e\x81\x65\x41\x7b\xa8\xab\x43\x6d\x0a\x77\x7f\xfc\x0a\x82\x8a\xfb\xd7\xaf\x20\xe9\xd8\xd5\xaf\x13\xd0\xa3\x76\xb9\x74\x1e\x83\x8e\x21\x27\x11\x0b\x40\x1d\x91\xbb\xe0\x15\xb1\x20\xf4\x03\x90\x3e\x5a\x97\xab\x21\xd4\x34\xa8\xd8\xd6\x50\xde\x0d\x0d\x53\x85\xe6\x50\x36\x8c\x69\x72\x43\x7d\xa1\xc2\xed\x30\x20\xdc\xc2\x02\xae\xa1\x5b\x43\x63\x31\xd4\xd5\x4b\x5a\x1b\x4b\x68\x82\x43\x5b\x7b\xb7\x84\x37\xb4\x3e\x72\x72\x13\x17\x97\xb5\x9d\x41\x75\x04\x4d\xb7\xa1\x05\xdf\x57\x70\xa1\x5c\x24\x42\xa0\xf9\xd2\x84\x6b\xdd\x58\x59\xfe\xbd\xe1\x18\x58\xe3\x2b\x51\xdd\x8e\x41\x9f\x2f\x0d\xd3\x71\x47\x7f\x4c\xbd\x16\xcd\xb5\xba\x54\x66\x86\x05\xd5\x21\xb0\x2f\x69\xbf\x37\xe6\x2b\x4c\xc9\xf7\xcb\x2b\x98\x0e\xb6\x04\xaa\x6a\x42\xcb\x4a\x6e\x3e\xb6\x4d\xd5\x8d\x3b\xc3\x99\x61\x4c\x57\xcb\x0c\xd0\xcb\x34\x96\x3c\x28\xa0\x9b\x17\x22\xde\x0f\xba\x99\x1b\x38\xe3\x84\xa6\x41\x33\x1b\xe8\x1e\xfd\x15\x4d\x7c\xb5\x66\x6b\xe4\x0e\xad\x17\x10\x09\x0e\xc5\x69\x2d\x96\x4e\x83\xb1\x9d\xda\x03\xd6\xc9\x00\x24\xef\x52\xcd\x68\x7c\xf0\xf4\x2c\xc0\x86\xc7\x87\x91\x0a\xa8\x5b\xf6\xd0\xde\x0e\x97\xe9\x28\x1d\x48\x63\x99\x15\x12\x66\x05\xdb\x87\x92\x64\x60\x79\xef\xee\xa9\x60\xe9\xa3\x98\xbc\xcb\xd6\x99\x5e\x8c\x74\xb4\x6d\x59\xab\x34\xca\x07\x60\xc5\x50\xe1\x85\x79\xc1\xc1\x0c\x96\xc0\xb4\x75\x45\x5f\x82\x45\x62\xf0\x4e\x6b\x3a\x5c\x5e\x98\x9b\x1c\x22\xda\xa5\x1c\x44\x37\xbc\x98\xbe\xab\xbc\x2c\xf4\x3c\xc0\x9f\x8e\xdf\xeb\x4c\xa7\x27\xfd\x3f\x9d\xf8\xb0\x4f\xfd\x5c\x63\x18\x66\xe4\x60\x64\x98\xcb\xe1\x5c\x1f\xf9\x09\x43\x02\x0b\x21\xc8\xcc\x32\x5e\x9e\xef\x25\x61\xce\x6a\x9c\x5e\xeb\x7c\xa3\xd6\xad\x8b\x88\xae\x7a\x94\x0b\x42\x91\xef\xd6\x3a\x19\x71\xc7\x18\xdd\x1d\x30\xfb\xdd\x9d\x8c\xc9\xfd\x95\x5d\xfc\x7d\x94\x96\x84\x56\x57\x10\xf3\x57\xe8\xcc\xc9\xb3\x2d\xf8\x7e\x31\xe5\x13\x24\x99\x5b\xab\x30\x23\xec\x31\x9b\xcd\x2c\x61\x8c\xd7\x5f\x22\x5f\x34\x8a\x6c\x6d\xfd\xbc\x2f\x1b\xb0\x9f\xe4\x65\x96\xcd\x1f\x01\x2e\x91\xc5\x6b\x92\x11\xd6\x4f\xff\xb2\xf3\xb3\xcf\x17\xb3\x70\x14\x1a\x43\x92\x81\x03\x43\x82\x0f\xc8\x97\x4a\x6d\xa1\xc4\x77\x22\x80\xe7\xba\x33\xe3\xd0\x15\xf8\x79\xb1\x9a\x43\x53\x57\xfe\xfc\xeb\x4b\x86\x56\x60\x7b\x45\xab\x19\xb0\xec\xcf\x60\xb1\x83\x33\xb7\x14\x93\xa1\x85\xa6\x9b\x91\x4d\x8a\x5d\x31\xdf\xa9\x34\xc4\x04\x79\x86\x60\x34\x3a\x72\xf7\x84\x9c\x31\x9a\x80\x63\x2f\xdd\x0d\x38\x1c\x59\xdd\xe6\x47\xe6\x9f\x90\x4b\x04\x71\x45\xcf\x80\x41\xe8\x77\x04\x51\x0a\xa1\x98\x2d\x47\xd6\xfb\x6c\x6f\x8b\xf9\xb2\x50\xe7\xcf\x28\xfc\xf1\x9b\x57\x85\x13\xc1\x1c\x7e\xdf\xdf\x43\x3a\xbb\x25\xfc\xee\x37\xf9\x03\x91\x94\x31\x9c\x83\xef\xc8\xd7\x3f\x90\xc6\x66\x01\xcd\xef\xc8\x57\xb7\x38\x97\x6f\x0b\x4e\x7f\xf9\x98\xf7\xf8\x7e\x3b\xc1\x78\xfa\xd0\x47\x9c\x6f\xd4\xeb\x82\xd8\x49\xc0\xec\x01\x20\x0d\xf1\x14\x01\x52\x91\x90\x87\x7d\xd9\x6d\x7f\xcf\x72\x91\x3c\x84\x29\xef\xc5\xf7\x69\x1e\x34\x94\x2a\xcf\x89\x2e\xc5\x46\x27\xa4\x4f\xa4\x57\xe9\x94\x0f\x6c\x05\xeb\x6f\x27\xe4\x8f\x58\x42\x8c\x5c\x22\xfc\x19\x12\x57\x01\xcd\xda\xf3\x72\x24\xb5\x6a\xc8\xd2\x34\x14\xa8\xae\x4c\x30\x43\x66\x60\x31\x5a\x81\x11\x74\xd5\x90\xb1\x5e\x18\x64\x37\xdd\xd0\x7c\xf6\xf7\xb6\x7a\xe4\x7f\xdf\xb7\x51\xba\x3c\x58\x76\x2a\x7e\xa4\x2d\x74\xba\x6d\x51\x0a\xdc\xfb\x0d\x41\x10\xa4\xc6\x8b\xa5\x2e\x5f\x12\x10\x57\xfa\x7a\xbd\xeb\x8d\x77\x52\xa7\x5d\xc9\x77\x5c\x08\x5e\x42\x7e\x1f\xfe\x8e\x48\x42\x4d\xc8\x77\x90\xdf\x31\xe7\x57\xb8\x37\x52\x1d\xf1\x36\xe9\xd2\xd0\xdf\x4d\x38\x3c\x4a\xb8\x2c\x23\xd5\x6d\xf2\x65\xa0\x70\x10\xf1\x70\xeb\x2a\x09\x3f\xff\x86\x20\x79\x5e\x12\x90\x5e\x59\x10\x91\xdf\xb1\x3f\xb1\xbf\x9e\x7f\xc7\xfe\xc4\xff\xfa\xcf\xef\xb8\xfb\x37\xfe\x27\xfe\x17\xd2\xf1\x1e\x22\x42\x4d\x12\x1c\xa5\x08\x62\xe1\x4b\xa4\x66\x32\xc4\x81\x1b\x35\x93\x4e\xe1\x67\x6b\xe6\x7f\xae\xd1\xcc\x79\x4c\xf5\xf5\x70\x88\xc3\xd9\x14\x71\x0c\xdb\x67\x18\x5d\x8e\x11\x44\x72\x74\x85\xfc\x38\x8e\x00\x4f\xde\xed\xce\x5b\x53\x40\x7e\x04\x3d\xe2\x4b\x94\xd7\xde\x95\xc7\x30\xc2\x10\x8b\x7b\x37\xce\xce\x61\x64\x0a\x74\x2b\x97\x51\x48\x43\x9c\x9e\x38\xe4\x29\xbb\x47\x2b\x3b\xe7\x36\x2a\xcd\xbb\x99\xdb\x08\xa4\x61\x6e\x83\x4e\x92\xc8\xad\x13\xb9\x54\xa8\x81\xd5\xcc\x1e\xda\x40\x9e\x41\x6b\x09\x14\x88\xfc\x40\x1e\x1e\xfe\x38\x7d\xba\xd1\xed\xf1\xd0\xd0\xd5\xc0\x52\xda\x89\xac\xc1\xfc\xd7\x17\xd1\x75\xb0\x6c\xe2\x79\xbe\x18\x9c\x7c\x7b\x12\xe9\x2a\x22\xeb\x23\x7d\x61\xbb\x89\x81\xd8\xad\xd5\x3c\x71\xc0\xdc\x49\xe3\x11\x65\x0c\x4c\xa0\xd8\xd0\x44\xd6\xc0\xdc\xe9\x8b\x51\x08\x6c\xb1\x9a\x1f\x52\x7e\x44\x5f\xd8\x70\x04\xcd\x10\x88\x36\x03\x23\x0b\xb1\xe6\x60\x36\x3b\x27\x63\x1b\xf3\xd9\x39\x91\xcf\x38\x45\x7d\x39\x40\x9e\x77\x7b\x78\xde\x70\xad\x3a\xc2\xd5\x8e\x83\x4a\x6c\xb8\x3d\x53\xc8\x72\x39\xd3\xdd\x9a\x3d\x62\xeb\x73\x68\xd9\x60\xbe\x44\x9c\x3e\x73\x7f\x22\x1f\xc6\x02\x9e\x33\x1a\x37\x2b\xda\xe7\xa3\xfe\x74\x2a\x1b\xcf\x87\xc9\x57\x0c\x56\xdf\x0c\xf9\x76\xc7\xcb\xe8\x30\xf7\x46\x45\xcc\xb7\x05\x37\xfd\xca\xbd\xf9\xb7\xc4\x06\x52\xaf\x88\xaf\x7c\xad\x2b\x1c\x7e\xf3\xfd\xe3\xef\x3c\x9f\x2f\x0b\x08\x96\x26\xcc\xd5\x6a\x0f\x23\x3a\x33\x45\xbf\xe8\x81\x2c\xe0\xd6\x5e\x83\xd9\xe7\x87\x18\x89\x1f\xbe\x7f\x37\xe1\x48\x99\x01\xcb\xfa\x12\xee\x2e\x6f\xad\x22\xc2\xb6\x68\xf2\x4b\x42\x47\x79\x73\xe3\x9b\x25\xf3\x2a\x3a\x07\xb9\xa2\x3d\xe3\x58\xab\x8b\x66\x33\x12\x5c\x31\xd4\x28\x70\x0c\x8f\x06\xf7\xca\x7f\x11\x0d\x28\x3a\xc9\xc3\xa2\xcb\x0b\x77\x32\xdb\x20\xce\x5f\x66\xb4\x49\x82\x20\x8d\x9e\x28\x14\x90\xdc\x5b\x8a\x44\x5e\x85\x2e\x59\xa0\x03\xae\xd0\xe3\x6f\xba\x1a\xc7\xdb\xbe\xe6\x73\xab\xd5\xf9\x78\x7c\xb3\x0b\xf9\xcc\x30\x6e\xa4\x3f\x2f\x71\xc5\x41\x7e\x72\x17\x3e\x3e\xc5\x58\xb3\x6b\xc7\xd1\x8f\x54\x68\x03\x7d\x66\x21\x13\xcb\x58\xc8\xf1\xc6\xb6\x2f\x94\xdd\xaa\x07\x1f\x8f\xaf\x87\xfd\xba\x75\x0c\x6f\x81\xc5\xe4\x4c\x5e\x18\xb5\x8e\x1d\xdd\xd0\x57\x4b\xa0\x32\xea\x76\xc4\x81\x8f\xfd\x28\x87\x86\x28\x1c\x3b\x22\x1b\xfc\x61\x31\x39\x14\x98\x8c\x95\x7d\x8c\x4d\xe1\x36\x26\x04\x76\x6a\x23\x0f\x76\xb5\x54\x33\xc3\x1e\x4c\xc7\xff\x19\x5a\x67\x3f\x93\x05\x3b\xcb\x07\x6c\x30\x1b\x2a\x86\xbe\xb0\xa2\x6d\x50\x83\x70\xb8\x34\x8c\x59\xf4\x53\x77\xe5\x53\x83\x71\x7d\xed\x3e\x36\xa1\x05\xcd\x75\x1c\x88\x93\x87\xda\xdb\xa1\x9b\x26\xe9\x1f\x71\x50\x4b\xd3\xb0\x0d\xc5\x98\xc5\xca\x15\xee\xa3\xbd\xb1\x40\xa0\x42\xd3\x4d\x2f\xbc\xfb\xd6\x4a\x51\xa0\x65\x69\xab\xd9\x30\xd6\x50\x7c\xc1\x81\x3e\x83\x6a\x3c\x54\xbc\x5b\xc5\xd4\xae\x6f\xf5\xb2\x98\xf5\x90\x94\x98\x97\x7d\xb4\x49\x1f\xbf\x2e\x15\xf9\xbe\x61\x2c\x91\xc6\xaf\x0a\x6b\x17\x09\x7a\x63\x98\x4b\xa4\x75\x1e\xf6\xa2\xc1\x13\xc2\x60\x60\x65\xe7\x6e\xb6\x99\x36\xcd\x39\xdd\x55\x15\x33\x15\x72\x32\x7f\xc5\x13\xc5\x8d\x80\x37\x06\x40\xdf\xf3\x8d\x95\xa9\x1c\xb6\x69\xc4\x84\x9e\xfd\x70\xf2\xf0\xf0\xfd\x7b\xfc\x54\x2c\xde\x0f\xfc\x85\xb5\x5b\xd5\xe9\xef\x05\xfc\x7c\xd7\x7c\xc1\x1f\x12\xaf\x89\x5e\xee\x5e\x98\x58\xb2\xa1\x9d\x88\x49\x40\xfe\xe6\xc8\x24\x10\x6f\x1e\x1c\x09\x70\xbe\xa7\x33\x05\x2e\x91\xdc\x01\x2a\x81\xa2\xcb\x92\x6e\x0d\x2d\x38\x9b\x41\x13\x91\x0d\x63\x06\xc1\x62\x1f\x93\x74\x05\x0e\x17\x27\xf1\xd7\xbb\x77\x1a\x93\x8f\xbb\x89\x86\xa1\x68\x7d\xb2\x9f\x29\xfc\x30\xb0\x4c\x1f\xb9\xf3\xd3\xe5\x7a\xe8\xee\x0d\x46\xf2\x65\x21\x5f\x45\x3e\x7f\x0e\x6a\xf0\x3f\x08\xfa\xe5\x4b\x1a\xaa\xa8\xe6\x7b\xa5\xfd\xcf\x99\x1e\x33\xe0\x3b\xd1\x69\x08\x7d\x48\xe1\x2e\x83\x89\xae\x14\xbd\xc2\x7d\x07\xe7\x8a\xde\xb3\x90\x31\x92\x66\x19\xc2\x6e\x89\xa5\x69\xfb\x03\xee\x13\x4d\x53\xa8\xfc\xaa\x78\x7a\xa1\xb0\x37\x46\xd4\x14\x6a\xe7\x31\x35\xae\x41\x42\x54\x3d\xd9\x13\x72\x47\x5b\xdd\xdb\x67\x90\xa5\xcc\x93\x28\x7f\xec\x4f\x99\x9a\x65\x0d\xbc\xc9\x31\x34\x12\xf6\x48\x3a\xd2\x5f\x9c\x59\x40\xfc\x34\x22\x6e\x82\xf6\x8f\x4c\xb1\xec\xed\x10\x2e\xd6\x70\x66\x2c\x61\x54\xd9\xd2\xde\x3a\x13\x9e\xd5\xcc\x8e\x79\x38\x87\x36\x88\x79\xe4\x4c\xb5\xe2\x1e\x5b\xfa\x68\x01\xec\x95\x09\xa3\x2a\x6c\x1c\xfd\xe5\xcf\xbf\x8e\xb9\xcb\xdf\xff\x1b\x95\xbd\xfc\xf9\x57\x58\xe7\x70\x6e\xc4\x14\xc3\x8e\xb8\x16\xc6\x02\x26\xe6\x42\x47\x5c\xe7\x68\x7c\xc9\xf4\x39\x1c\xca\xc6\x6a\xa1\xba\x15\x6b\xd6\x04\x8b\x11\x0c\xcf\xc6\x4e\x43\xab\xa3\x09\x07\xdb\x08\xaa\xe9\xd3\x2d\xbf\xf6\xa7\xab\x7b\x6f\xdb\x6f\xe1\xca\x32\x44\x78\xee\xe6\xee\x97\x4b\xd9\x1d\x26\x09\x9d\x84\x3a\x69\xb0\x22\x15\xac\x92\x5e\x36\x8f\xb8\x9f\x10\x19\x37\xcf\x25\x0a\x95\x38\xff\xc8\x22\x64\x6c\xa4\xbd\x9b\x98\x99\xf7\x1f\x26\x0a\x9a\x12\x16\xa2\x45\x2d\x00\x1b\x20\x9a\x61\xa6\xac\x16\x21\x05\xbe\xc3\xa7\x88\x57\x11\x25\xa1\xdd\x41\x2a\x62\xa7\x71\xb2\x62\xe4\x46\x51\x09\xf9\x8c\x3d\x21\x0f\x1c\xc7\xa1\xc7\xeb\xe1\x09\xc1\x9e\x10\xf4\x09\x79\x78\x88\x67\x29\x69\xd5\xe6\x52\xb6\xc2\x2b\x37\x7b\xd6\x1e\xb0\xa1\xbe\xd0\x6d\x1d\xcc\x86\xde\x2e\x9a\x6f\xd6\xfb\xec\xe1\x09\x79\xc0\x51\x8c\xfb\x8a\xd2\x5f\x51\x02\xc1\xd8\xef\x38\xfb\x9d\x64\xbe\xa1\x04\x4e\x72\xf4\x23\x8a\x3b\x4c\x67\xc2\x8e\x0f\xbd\xb7\x23\x4e\x7a\x45\xde\x0d\x6d\x43\x57\x93\x29\x71\x34\xc5\x5c\x42\x89\x18\xae\x2c\x78\x88\x52\x43\x7d\x71\xf6\x46\x46\x22\x3d\x92\x44\x49\xf6\x12\x7a\xe4\x10\xa8\xea\x30\x5c\xd7\x4a\xa4\x41\x91\x14\x81\x5f\x42\x83\x1a\x7a\x31\x71\x9f\x9d\xbb\xeb\xa1\x89\x24\x68\x02\xc5\x2f\x12\x83\xde\x93\xf0\x47\xc0\x0c\x24\x58\x12\xa3\x2e\x21\xc1\x0c\xe7\x86\xaa\x6b\xbb\xec\x52\xb0\x18\x8d\x5f\x44\x82\x3d\x91\xc2\xdf\x06\x9d\x81\x0e\x43\xd2\xc4\x65\x74\x9c\x4e\x07\xa3\x91\x09\x47\xc0\x36\xcc\x64\x9b\xe2\x50\x0c\xe5\x2e\x41\xcf\xb9\xe8\xbd\x9a\xe7\x70\xab\x9a\xc9\xd8\x71\x06\xbb\xa8\xab\x31\xd4\x45\xef\xf7\x82\x3b\xd3\x4d\x26\x40\x71\xcc\x45\xda\xc1\xb0\x20\x81\xc3\xd4\xc9\x19\x00\x92\x09\x71\x34\x77\x99\x24\xf8\x49\x47\xfb\x93\x55\xef\xc5\xdb\x24\x4a\x18\xca\x50\xe4\x45\x3d\x82\x11\x9e\x38\x87\x29\x7e\x62\x8f\x63\x18\xce\xd0\x97\x49\x42\x0e\x35\x7d\xbb\x7f\x09\xc1\x98\xcf\x86\x9a\x0e\x67\x89\x43\x23\x86\x51\x18\x76\xd1\x20\x8c\x51\xfb\xb5\x97\x7d\x4d\x7c\x9b\x22\x06\xcd\x5c\x36\xcc\x63\xf4\x50\x5f\x8c\xa0\x65\x0f\xcf\xab\xee\x29\xa4\x18\x8e\xbd\xac\x47\x98\x93\x70\xef\x2e\x6f\x80\xe4\x60\x82\xe1\x28\x4a\x90\x3e\x91\x98\x58\x9b\xb8\x56\x7f\x69\xb0\x3d\x5b\xaf\x0f\x26\x02\xa5\x3c\x4e\xb4\x8a\x78\xb9\x2b\x50\x38\x5f\xef\x77\x8b\xdd\x32\xc1\xbf\xbd\xf0\xfd\x7e\xa9\xdf\x7f\xc5\x5f\xcb\xfd\xb7\xb7\x36\x2d\xbc\xf5\x85\x4e\xb3\x5a\xe8\x0f\x24\xbe\x47\x33\xfd\x06\x19\xd6\x50\x2c\x11\xdc\x25\xd2\xaf\x96\xe8\xb6\x48\x36\xc4\x8a\xd0\xcc\xd7\xc5\x62\x8e\x21\x70\x9e\x24\xe8\x01\xd5\x14\x0b\x52\xbb\x56\xea\x55\x99\x52\xae\x96\xaf\xb7\x6a\x95\x62\x83\x94\x18\xe1\xad\xf7\xda\xcd\x4c\x84\x70\x88\xe4\xda\xcd\xb7\x72\xa5\x86\xe7\x2b\x44\x51\x6c\x91\xb9\x7e\xad\x58\x17\x0b\xb5\xe2\x4b\x57\x6c\x76\xf1\xf2\x1b\x31\xa8\x17\xa5\x72\x43\xec\xe6\x85\x06\x2f\xf5\x98\x56\x9e\x69\xf4\xf1\xf2\xc3\xb5\xdb\x3e\x9c\x2c\x30\xa5\x1b\xfc\xad\x72\xc7\x5d\xae\xdf\x2c\x98\xbc\x25\xe2\x09\x21\x9e\x10\xdb\x5c\xc1\x0c\xc6\x71\xbe\xd9\xe1\x6a\xd3\xf0\x26\x29\x41\xc3\x50\x4c\xa8\xea\xf6\x10\xcc\x96\x63\xb0\x58\xcd\x49\xc7\x9c\xbb\x52\xe1\xe1\x46\x9b\xb9\x66\x79\xff\x2e\x7a\x3e\x99\x52\xb9\xf9\x6e\x36\x2d\x47\xad\xee\x5f\xab\xe6\xfd\x0a\x7f\x40\xcf\x38\x46\x32\x24\x4b\xa2\x14\xc3\xb8\x4c\x39\xee\xf2\xf7\x27\x2f\x86\x7c\xfa\x8e\x7c\xc2\x9c\xfc\xfc\x9b\x9f\xa7\x7f\x7a\x42\x3e\x1d\xb7\x91\x38\x8f\xbb\x52\xe1\x78\xd3\x99\x7d\x3b\x37\xc3\x5d\x77\x84\xf0\xb6\x93\x38\x30\xd7\xf6\xe1\xa7\xff\x8d\x73\xca\xb0\x70\x78\x48\x38\xdc\x35\xed\xff\x7f\x84\xc3\x18\x27\x5a\x30\x04\xce\x62\xf1\x3d\xf7\xdf\x2a\x1f\x16\x92\x2f\xae\xf3\xfe\x5b\xe5\x73\xfa\x0f\x67\x59\x92\x43\x29\x8e\xa5\xbc\xfe\x43\x5d\x01\x67\xfa\x5c\x77\xe5\xe3\x70\x9c\x20\x18\x1c\x25\x68\x96\xfa\x46\x32\x0c\xc5\xa2\xcc\x7f\x95\x8c\xd8\x13\xc2\x52\x2c\xc7\x11\x2c\xcd\x72\x87\x19\xfe\xdf\x9f\x2c\xdb\x99\xfe\x2e\x46\x43\x19\xcc\xc0\x42\x81\x7e\x67\x1e\xfa\x31\x33\x01\xe2\x94\x40\xb4\x8d\x9c\x9b\xc7\x5e\x4b\x0b\x60\xeb\x6b\x78\xb5\x3c\xc4\x13\x82\x79\x02\x6d\xa0\x3e\x1a\x3b\xf4\xb0\x27\xe4\x93\x37\x18\x0f\xa7\x70\xf7\xcb\x2c\xc9\xe5\x8a\xc4\x19\xdf\x90\x7e\x92\x96\x7d\x02\x3f\x5b\xcb\x21\x79\x32\x6a\xf9\xba\xfc\xce\xe3\x2a\x25\x00\x47\x6d\x2b\xbb\x36\x00\xef\xb7\x96\xed\x85\xa5\x9c\x44\x07\x67\x08\x9a\xc1\x14\x0e\x43\x09\x0d\x25\x51\x05\x62\x14\x03\x70\x8a\x50\x09\x4e\x61\x15\x0c\x00\x94\x84\xa4\x4a\x41\x1a\x28\x0a\x0d\x70\x02\xc3\x58\x48\x10\x34\x09\x34\x8a\x44\x15\x37\x31\xc2\x38\x8a\xc2\x39\x88\x41\x4a\x81\x34\xa5\x00\x0e\x53\x39\x45\x26\x29\x05\x42\x0d\x43\x15\x4d\x61\x9d\xd9\x37\x41\xb0\xb4\x42\xa0\x24\x89\x13\x2c\x0b\x31\x4a\x55\x14\x48\xd3\x9c\x2a\x53\x5e\x42\x82\x85\x66\x0c\xf4\x77\x82\xfc\x4e\xb2\xe1\x89\x84\x7f\xfb\x1b\x4a\x90\x24\xcd\xa5\x3e\xf5\x82\x30\x41\x93\x2c\xfa\x84\x60\xb4\xd3\x9f\x67\xd7\x13\x42\x39\xff\x61\xfe\x7f\xfb\x9b\xd8\xe1\x0f\x87\x35\x9e\xe7\xf9\xfc\x76\xf6\x5a\x85\xe5\xd9\xc7\xbc\x5f\x9d\xaa\x8b\x5a\x5b\x61\xd6\x42\xfd\xb9\x32\xcd\xf1\x1f\x63\xab\x2e\xb4\x26\x7a\xa3\xa8\x7e\x34\x06\x4b\x1c\x7b\x6f\x01\x0c\x6b\x17\x35\xc1\xb2\x80\xdd\xe9\x34\xf8\x32\x57\x86\x6b\x5e\xa2\x40\xf3\x75\xc6\x97\xe6\x3d\x61\x80\xef\x96\xad\xba\x82\x8e\x1c\xd4\x7c\xbf\xf9\x5a\xaf\xf2\xc7\xeb\x7d\x23\x6d\xcd\xa2\xcc\x42\xfb\x9d\x1c\x49\xea\xb6\xa1\x73\x45\xac\x3a\x91\xeb\x75\x39\x37\x2e\xbc\xa8\xd5\xfe\xae\xda\x7e\xdf\x15\x3b\x2f\xf6\xa4\xbe\xda\xf6\xf4\x65\x7b\x29\x37\x34\xa9\x5e\x99\x4b\xb6\x58\xae\xbe\x63\x8c\xd5\xed\xb5\xdf\xe6\x4d\xb1\xfc\xfe\x36\xee\x0e\xc8\x2a\x41\xb8\x98\xbb\x22\x59\x03\x1f\x4b\xbc\x15\xa0\x56\x46\xf9\x88\x6b\xc0\xf7\x31\xb2\xc5\xf3\x05\xf4\x25\xea\xf1\xbf\xfa\xf2\xab\xba\x31\x7e\x1f\x76\x05\xf2\x3e\x66\xfc\x80\x63\x04\xa6\x90\xb4\x4a\x50\x0a\x24\x59\x45\xa1\x28\x02\xd5\x00\xc0\x14\x5c\x51\x00\xa5\x42\xc0\xd2\x18\xd0\x54\x0d\x65\x08\x94\xa2\x15\x19\xd5\x30\x86\xa5\x64\x42\x46\x71\x05\x90\x0c\x48\x72\x05\x26\xd6\xd8\x29\x16\xc7\xe2\x5d\x61\xff\xd4\x4b\x69\x68\x0e\x63\xc9\x04\x57\x20\x33\xba\xc2\x4e\xd8\x6e\x4b\x28\xf6\x31\x9d\xd4\x5f\x3b\x05\xda\x50\x6a\xf5\xa5\x4a\x1b\x6f\xe0\x59\xcb\x7d\xe4\x7a\xbb\x0d\xdb\x1f\xcb\x8d\x4d\xad\xda\xa6\x51\x8d\x83\x85\x26\x00\xc2\x6b\xde\xe4\x5a\x62\xbf\xdb\x85\x0a\x61\x76\x8a\xb2\x3c\x36\x89\x5a\xa1\xf3\x5a\xc5\x46\xd4\xae\x25\xaf\x99\x8a\xdb\x75\x8e\x2b\xbc\x6c\x8e\x5d\x29\xae\x8d\x16\xa5\xa1\x63\xb2\xdf\x58\xe1\x1f\x1f\xaa\xb8\x7c\xc4\xc1\x5b\x51\xff\xe8\xd5\x9f\x3b\x7a\xd5\xca\x17\xcd\xd1\xfb\x63\xd9\x7c\xa5\x2b\x8f\x7d\x9a\xfc\x68\x02\x66\xb2\x29\xcd\x1a\x8f\x46\x83\x99\x6f\xb4\x9a\x3c\x2b\x88\xc5\xb9\x06\x6c\x3e\x6f\xe6\xac\x41\x17\x27\x29\x52\x77\xbd\xae\x15\xe1\x0a\xa5\x56\x94\x39\xfd\xdf\x71\x05\xe2\x3e\x66\xfc\x80\xd2\x28\x81\x6a\xb4\xc6\x12\x34\x4b\xa8\x8a\xc6\xc9\xaa\x4c\x13\x14\x4d\xa2\xaa\x06\x19\x96\xc1\x71\x14\x27\x65\x1a\x25\x38\x06\xa5\x55\x86\x93\xa1\xca\x28\x14\x64\x59\x0d\xd5\x18\x6e\xbf\x2c\x13\xed\x0a\x74\xac\xb1\x33\x18\x89\xa6\x3f\xf5\xb3\x5f\x8c\x65\xd9\x04\x57\x20\x32\xba\xc2\xe6\xad\x50\xc0\x1f\x0b\xa0\x40\x34\xe7\x9c\x3d\x79\x9d\x16\x34\x8a\x54\x74\x7e\x6a\x8f\x1a\xfd\x9c\x0d\x65\xa6\xbf\x85\x7a\xb3\x40\x4c\x79\xad\xaa\x8f\xc6\xe6\x94\x78\xaf\x57\x3a\xed\xca\x0c\xbc\x3c\x5a\xcd\x9d\xd8\x7f\xc9\x77\xeb\xf4\x40\x52\x3f\xa8\xb5\xfe\xd6\x64\x4a\xdb\x4d\xdd\xb3\x42\xd7\x15\x46\xc7\xae\xac\xd5\xaa\x4d\xb9\x6e\x4c\xca\x8f\xed\xf6\x63\x47\xca\x15\xaa\xa5\xdc\xb3\xbd\xd2\xca\xf8\xbc\x86\xe1\x8a\x92\x2f\x9b\xd8\xcb\x02\x67\x76\x4d\x7e\x0b\xf2\xab\x97\xd2\x4c\xed\xe0\x40\x12\x2c\xd3\x52\x61\x65\x29\x6b\x92\x28\xcc\xea\xf9\x95\xb5\xb3\xa6\x9d\xf9\x40\x65\xf3\xe3\x2e\xeb\xba\x5a\x3d\xc2\x15\x04\x2b\xca\x9c\xfe\xef\xb8\x02\x7e\x1f\x33\x7e\xa0\x09\x95\x63\x35\x8a\xa0\x21\xa4\x59\x15\x93\x71\x46\xa6\x64\x96\xd3\x70\x02\x68\x14\x81\x61\x32\x43\xd1\x1c\xc0\x49\x0d\x68\x18\x89\x12\x40\x45\x65\x0a\x97\x69\x82\x90\x51\x46\x86\x9c\x9b\xc7\x78\x53\xec\x73\xab\xa6\x62\x8d\x9d\x25\x09\x06\x4f\x7c\x4a\x3c\xec\x27\x15\x24\xc5\xe1\x09\x9e\x80\x67\xf4\x04\xbc\x39\x98\x60\xe2\x8a\x32\x50\xf9\x85\xe9\x91\x8b\x5d\x63\xdd\xdd\x96\x88\xd7\xa5\x31\x7d\x5c\x17\xf9\x86\x9d\xc7\xaa\x78\x9d\xc9\x31\xf4\xa0\xfb\x02\xb9\x06\x35\xe5\x3f\xc4\x8f\xd5\x33\xbd\x44\x07\x2f\xc6\x80\x65\xc7\x68\xa7\xb0\x92\x89\xd5\x9b\x35\x1b\xbc\x30\x8a\x64\xb5\x7b\xbe\xf5\xbb\x9e\xe0\x1a\x67\xe5\xf0\x1f\xef\xfe\xb6\x8e\xbf\x37\x7c\xb3\x35\xf5\xbb\x7a\xd1\xaa\x54\xf5\x4d\x8b\xd9\x61\xbb\x11\xcd\x09\x6d\xd4\x14\x1e\x59\xdb\xee\x6d\x27\xaa\xc4\xa9\xcb\xb1\x59\x61\x64\x75\x41\xbf\x49\x64\xbe\x91\x47\x5f\xcb\x6b\x5d\x2f\x2f\xab\x14\xd1\x16\xed\xba\x59\x5f\x4c\xb6\xdd\x95\xcc\xa3\x15\xe9\x45\xf9\xd8\xe5\x96\xbb\x89\x4a\xe3\x1e\xe2\x4a\x84\xa7\x14\x2a\x51\xd6\xf6\x5f\xee\x29\x78\x76\x4f\xc1\xee\x63\xe5\xee\x26\x18\x67\x0a\x89\xba\xf9\x18\x83\x7e\x45\xb1\xaf\x28\x86\xa0\xe8\x77\xf7\x5f\xac\x35\x73\x0c\xc3\xc5\x4f\x15\xf6\x4f\x49\x9c\x23\x39\x9a\xc1\x39\x3a\xc1\xd6\xa3\x2d\xdd\x63\xe9\x9f\xee\x94\xf8\x2b\xd7\xaf\xea\xe4\xee\x79\x27\x55\x73\x4c\x61\x51\xe0\xca\x38\xba\x9d\xe4\x1e\x2d\x74\x64\x5b\x9b\xca\xe6\x03\xeb\xab\x52\xef\x0d\xe4\x5e\x40\xd1\x75\x28\x21\xc2\x88\xa3\xaf\xbd\x11\xf3\x7c\x6e\xfa\x0b\x04\xb9\xeb\xf5\xe0\x19\x53\xfa\x34\x3b\xc3\x6b\x26\xd7\xce\xba\x63\x76\x0f\xc5\x56\xc1\x63\x3c\x2e\x05\xcd\x59\xbd\xf9\x3a\x34\x44\xb8\xb2\x7b\x1d\x1a\x32\x5c\x40\xbd\x0e\x0d\x15\xaa\x53\x5e\x89\x86\x0e\x95\x02\xaf\xc3\xc2\x84\x0a\x70\xd7\x61\x61\x43\xf5\xac\xeb\xb0\x70\xa1\x32\xd5\x7d\xde\x25\xba\xcb\x52\x53\xf2\x46\xb7\x27\x84\xcb\xba\xf4\x14\xf3\x46\xcd\xcd\x6e\x18\xf0\x99\x13\x87\x39\xfc\xa0\x0f\x13\x8f\xbf\x3f\xd9\xc6\x4d\x75\xd4\x27\xe4\x93\x66\x1a\xf3\x9b\xaa\x84\x4f\xc8\xbf\x7b\xcd\xe8\x27\xac\x70\x47\xf4\xd5\xe9\xa8\x74\xf8\x81\x46\xf4\xd5\xf5\x7a\x3e\xf6\xd5\xf5\xfd\xfd\x6f\x5f\x22\xfa\x09\xbb\x1e\xa2\xba\xeb\x64\x79\xe9\xf0\x83\x74\xfb\x8a\xce\xb6\xd4\x64\x9b\x2b\xcb\x86\xf0\xd6\x0e\x71\xd1\x18\xe6\xcd\x3e\xf8\xef\xe8\xb9\x9f\xee\x68\xc1\x18\x77\xf8\x9b\x0d\x2c\xed\x68\xab\x85\xea\xcb\x72\xe5\x9e\x13\x57\x2f\xde\xce\x8f\x5b\x3b\x37\x7d\x9d\xe9\xc6\xbd\x31\x97\x68\xcd\x8f\xc6\x87\xbf\xc9\x9f\xab\xb5\xeb\x6d\xf9\xa7\x6b\x2d\x25\xb4\x47\xbc\xd9\x99\x25\xac\xa7\x63\x4d\x7f\xc9\xed\xda\xf4\x21\x76\x73\x7c\x64\x1e\x4f\xc7\x67\x76\xa9\x88\xf0\x70\x2e\x72\x2d\x22\x22\x1c\x28\xaf\x45\x44\x86\x10\x5d\x2d\x5a\x38\x16\x5c\x8d\x88\x3e\x1d\x9b\xe2\x72\xf1\x54\x3c\x4c\x68\x8c\xbb\x16\x0f\x7b\xea\xf5\x57\xf3\xc3\x9d\xe2\xc1\xef\xf5\x5e\xe3\x5d\x32\xfb\xb4\x37\x3b\x2e\xc8\xed\x63\xdf\xeb\xbb\x83\x7b\x06\xdf\x78\x20\x50\x06\x53\x51\x9c\x63\x09\xa0\xb2\x32\x83\x32\x04\x21\xb3\x10\x52\x38\xc0\x38\x86\xa4\x00\x41\xd3\x2a\x83\x29\x98\xc6\x90\x14\x85\x71\x1c\xc3\x10\x90\xa1\x59\x42\x55\x01\x40\x09\xea\xe1\x09\xf1\x36\x35\x5c\x1f\x78\x03\x05\x56\x72\x5f\x58\x8a\x5f\xb3\xa6\xe3\xd7\xf8\xfc\x87\x27\x43\x83\x57\x8f\xaa\xd2\x13\xa8\x13\x93\xb9\x51\x61\x3b\xa5\x59\xe1\x19\x8e\x14\x82\x69\xf6\xed\x72\xb5\xfa\xd1\x7b\x65\x37\xaf\xfa\x20\x07\xf2\x2b\xaa\x46\xd5\x79\xb7\x9e\xc3\xef\xeb\xa5\xf9\x50\xb9\x24\x77\xfc\x53\x70\xff\xb7\xe5\x51\xbf\x4d\x0b\x8c\x51\xa8\xa1\xb5\xd6\xe3\xe6\x4d\xca\x73\x1f\xfd\x75\xff\xb5\x43\x6c\xf5\xa6\xfe\xb6\x92\x64\xac\xb0\x9e\xb7\x6a\x90\x75\xdb\xbf\xbe\x8a\x5e\x43\x3e\x8f\xad\x72\x6a\xd9\xe8\xac\x46\xf5\x75\xcb\x2e\x30\xb9\x71\xa5\x46\x88\x90\x53\x5f\x9b\x5a\xa9\xf2\xf8\xa2\x53\x2f\xeb\x6e\xe3\x71\xc0\xdb\xcc\xc6\x69\xa9\x56\xd4\x55\x60\x9d\x83\x2f\x1d\xf8\x6d\xbd\x30\x5a\x8d\xae\xd6\xed\x49\x81\x86\xb3\xee\x88\x6e\x08\x2a\x6a\xac\xd7\x63\x79\xbe\x18\x88\x1f\x75\xfc\xbd\xce\x77\xd9\x42\x6f\xc7\xbc\x4f\x66\xd3\x45\x5b\xe8\x54\x30\x85\xdb\x81\xd7\xb1\x64\xd6\x66\x2b\x79\xa7\x1b\x94\xb0\xed\x01\x12\xd7\x72\x42\xbd\xde\x7f\x6f\xf0\x98\xde\x7a\xfb\xf1\x10\xac\xe7\x05\x17\xfd\x5a\x51\xfa\xe0\x8f\xf0\xc7\x22\x74\xc1\x05\x0a\x34\x35\xdf\x45\xba\x06\x1b\x60\x34\xd9\xd6\x41\xb7\xc9\xd1\xb9\x0f\xcd\xe2\x20\xaa\x18\xa6\x38\xe8\x7f\xe4\x7a\x2f\xd3\xa2\x51\x65\xa6\xeb\xa9\xb7\xbc\xd9\xa0\xcc\x97\xc6\xb1\x3f\x72\x21\xfa\x27\x7d\x11\x71\xe5\xee\x4c\x3f\x7f\x0d\x7d\xde\xed\xb6\xfa\x11\xd0\x6d\x9f\x5f\x19\x84\x61\x93\xd4\x7b\xbe\x29\x6c\x97\xad\x67\xc2\x28\x8b\x8f\x1f\x18\xd3\xde\xe9\x16\x36\xd3\xea\xc5\xb7\x79\xab\x37\x32\x57\xd2\x63\xc7\x6d\x54\x7c\xed\xa2\x3e\xe1\x5a\x8f\x2c\xa2\x70\xdc\xa0\xf9\x1d\x97\x47\x9b\x56\x49\x18\xad\x15\x8c\xc1\xb0\x2e\xc7\xbe\x4d\xc8\x79\x6d\x3a\xe7\x5a\x0c\x35\xcd\x13\x6b\x9e\xcf\x01\x76\x9b\xa3\x5b\x7c\xee\xf9\x70\x6d\xa2\x78\x76\x7f\x17\xff\x09\xfe\x70\x76\x54\xe8\x25\xf2\xf7\xe3\x68\x5b\x47\x5d\x16\x8e\xcf\x2f\xe5\x95\x67\xe6\xd6\x5c\x39\xe2\x13\xf8\x90\x2d\xf3\xd1\xfd\x1c\xa1\xab\xab\xe9\x4f\xc9\xeb\xe8\x7b\xba\xf8\x7b\x61\xb3\x6b\xc3\xd8\xe1\xf5\xe6\x92\x7e\x95\x0a\x06\xd9\x26\x24\xfd\xf1\xb1\xb8\x02\xea\x94\xa8\x7f\x00\x63\x93\xeb\x6c\x44\xb9\xb6\x7a\x6f\xf4\x24\x55\x68\xd7\x27\xaf\x1f\xc4\xcb\xb2\x57\xac\x5a\xab\x1e\xb5\xae\x56\x27\xd3\x4e\x71\x60\x4e\x06\xac\xd0\xda\x6c\xa1\x41\x16\x7a\x2f\xb9\xd1\x8f\x1f\x6e\x66\xeb\xbe\x87\xbb\x5f\x6c\xf0\xfe\x77\xc2\x96\x3b\x3c\xa7\x47\xee\x60\x7c\xa1\x19\x95\x90\x55\x8a\x02\x34\x87\xe2\x34\x4e\xaa\x28\xa1\x11\x2c\x47\xc9\x0a\x87\xc9\x1a\xcb\x29\x32\x4a\x30\x9c\xcc\x50\x2a\xc1\x41\x4a\xe6\x18\x55\x21\x54\x92\x64\x01\x0d\x21\xa5\xc8\x0f\x4f\x08\xb9\x8f\x2f\x57\x4e\xc9\x03\xf1\x85\x48\x8b\x2f\x14\x4b\x30\x49\x9b\x48\xbc\xa7\x27\xa9\xde\xc3\xe5\x16\x7f\x12\x61\xc2\xbd\x7e\x16\x61\x2e\x1c\xb1\xae\x8e\x30\xbd\x75\xbd\x05\x4f\xd6\x2f\xca\x07\x7e\x5b\xf5\xf5\xc7\xa4\xa7\x74\x21\x9b\x57\x37\xfd\x67\x65\x46\x2d\xb7\x78\x67\xfa\x66\xd3\x0c\xde\xee\x37\x8a\xeb\x97\x46\xa7\x4a\x69\x55\x5a\x9a\xe4\x96\xcd\x72\x69\x42\x09\x95\xe2\x36\xdf\xee\xab\x35\xbe\xb8\xc3\xab\xd8\x42\x9a\x96\xa5\x45\x65\xca\x89\xf8\xfb\x66\xd3\xaa\x6e\xaa\x98\xb5\xd9\xdc\x2f\xc2\x04\x80\x2e\x8c\xc8\xee\x08\xbf\x38\xf6\x47\xcc\x95\x12\x61\xee\x47\xff\x7c\x14\xc8\x40\xff\x6c\x54\xfc\xa5\x23\xf8\x81\x95\x2c\x11\xe6\x5f\x1a\x01\x23\x23\x4c\x20\xfb\xbb\x30\x5b\x73\x47\x78\x83\x3f\xe2\x8b\xb9\x92\x23\x8c\x70\x1b\xfd\x60\x84\xbb\x84\xbe\x1f\x61\x76\xcf\x0d\x71\xb0\x6d\x33\x9b\x17\x22\xa7\x71\xbb\xfe\x7c\x51\x1e\x34\xda\x3a\x61\xae\x07\x45\x85\xec\xb1\x53\xaa\x6e\xce\x58\x73\x59\xad\x97\xa6\xac\x02\x9a\xd3\xd6\xa8\x2f\xbc\x14\x55\xd4\xe2\xfb\xb5\x37\xb3\xa7\x56\x5b\x6a\x55\xd1\x3b\x28\x01\xcc\x42\x8e\x37\x79\xb3\xf7\x51\xe0\xef\x1d\x61\x64\x95\x64\x69\x55\x56\x55\x14\x57\x49\x1a\x65\x31\x86\x66\x30\x85\x04\x14\x60\x20\xa7\xd2\x90\xa5\x29\x05\xe0\x9c\x22\x93\x18\xa4\x71\x95\x01\x40\x63\x50\x80\x6b\x10\x52\x32\x41\xab\xd0\x7b\xa3\xea\x5e\x33\x98\xd4\x08\xc3\x60\x54\x7c\x80\xf1\x1f\x9e\x54\x00\x6e\x9d\xc1\x24\xc4\x97\x37\xfe\xea\x78\x41\x1c\x5d\xe9\x88\x2f\x30\x23\xc9\x71\xd3\x79\xb5\x87\xbf\x13\x6b\xa6\xa5\xed\xd8\x66\x1d\x4e\x05\x19\xeb\x74\x2a\x94\xbe\x7d\x9f\x56\xd0\x9c\x31\xea\x9b\x0d\x9b\x19\x35\x30\x1a\x6f\xc9\xd3\x31\xae\x4a\x9d\xae\x06\x0b\xc6\x5a\x41\x9b\x3c\xd0\xc6\x85\xfe\xd6\x1e\xbf\xf2\x33\xab\xb6\x9a\xcc\x72\xf3\xdd\x24\xc7\x67\x9a\x91\x94\x82\x86\x1c\x17\x2f\xf8\xc0\xde\xc9\x6b\x66\x04\xb7\xc6\x8b\x3b\xd2\xbf\x2e\x5e\x78\x1b\xda\xf8\x9f\x90\x45\x9f\x5f\xc9\x63\xdc\x3f\x98\xc5\xf3\xfc\xbf\x37\x5e\xa6\xc6\xa3\x2b\x74\x75\x73\x3c\xba\x63\x5f\x5d\x42\xdf\x8f\x47\x65\x5c\x7a\x5b\xca\xc0\x84\xcf\x76\xee\xb9\xb6\x61\xb7\x74\xab\xbd\x7e\x15\xeb\x93\x79\xad\xf4\xde\x9a\xb4\x4a\x7a\x0e\x5a\x34\xb1\xe2\x99\xbe\x39\xc8\xad\xa4\xf2\x00\x7b\x11\xdb\x1c\xd9\xd0\xb9\x8f\x16\x9b\x5b\x3e\x0a\xa2\x56\xc2\x8b\xdd\x7c\x6f\xb3\xa2\x1b\xdd\x92\x5c\xad\x0b\xf7\x9f\xf1\xd0\x34\x4d\x53\x34\xa0\x21\x50\x21\x8e\xb2\xb8\x42\x31\x2c\x4a\x31\x98\x33\x13\xe2\x20\x49\x52\x04\x84\x90\x62\x58\x4c\x01\x1c\xa0\x58\x00\x08\x8c\x83\x32\xaa\x41\x96\x20\x29\x4a\x53\xbd\x5d\x65\xd8\x2d\xcb\x0b\xde\x8a\x6f\x62\x18\x62\x49\x9a\x4d\xda\xf9\xe8\x3d\x0d\x56\x7e\x3d\x5b\x2c\xd5\xd8\x72\x6b\xdd\x9a\xca\x55\xbc\xcc\x13\xbd\xd7\x49\xdb\xac\xce\x27\x7d\x14\xd5\x4a\xac\x55\xab\x30\x73\x54\x68\x6f\x5e\x7a\xcf\x7c\xdf\x7d\x93\x62\x70\xec\xc4\x84\x38\xe4\x5d\x57\xe4\xcd\xc1\xb7\x41\x72\xaf\xeb\x4d\x91\x73\xfc\x48\xc8\xa9\x85\x3e\xc4\x89\x2e\x09\xb9\x3c\x2e\x6d\x97\xb9\xda\xa0\xbd\xc5\xcc\x97\x0f\xa9\x58\x7b\x41\xb7\x85\x02\xba\xaa\x96\x96\xf3\x77\x59\x9b\x15\x3a\x8f\xfd\x7e\xe5\x9d\xee\xea\x85\xdc\xc7\xbc\xb8\xb5\x1f\x4b\x8d\xc7\xfe\x7b\xd1\x68\x35\x55\xb3\xdf\x61\x96\x98\x51\x1b\x54\xca\xef\x9d\x7a\x33\x43\xec\x39\x31\xda\xd3\xd8\x13\x90\xf9\x38\xf6\x06\xfc\x39\xa7\x3f\xe7\xd0\x1a\xfa\x52\xda\xd9\xe3\x8d\x88\xcd\xde\x50\xb0\x5b\x1a\x18\x27\x96\xb7\xeb\x5a\x7e\xd7\xa0\xec\x9c\xa0\xe4\x3d\x19\x89\x91\x6d\x36\x16\x6f\xcf\x2c\x79\x6c\x1f\x13\x8b\x92\xfd\xf9\x06\xfa\xa2\xb9\xeb\x74\x6f\xa0\xcf\xf3\xff\x5c\x7e\x1d\x39\xb6\xe6\xae\xd7\x45\x63\x31\x48\x14\x33\x4d\x17\xb7\xf6\x85\x63\x0b\x8f\x4a\x08\xdf\x45\xba\xf8\xbb\xdf\xc2\x08\xdb\xc6\x1a\xe5\x75\xcb\x9e\x5a\xa0\x25\xe1\x5d\x45\x05\x3b\x05\x1d\x4b\x3b\xb5\xde\xda\x70\x35\x7d\xfc\x3e\x78\x9f\x13\x54\x0b\x7d\x9e\x61\xbb\xea\x6a\x56\x19\x6d\x14\x6a\xac\xc8\xda\x78\xb2\x9e\xd1\x63\x20\x14\x08\x80\xa1\x8f\xb4\x0a\xf2\xb8\x94\xa3\xa7\x1f\x85\xcd\xbd\xc7\x56\x14\x42\x0c\x53\x55\x99\x64\x31\x06\xd0\x18\x4d\x69\x28\x8d\x2b\x38\x8b\x33\x84\xac\x51\x38\xa6\x72\xb2\x06\x55\x05\x90\x10\x10\x28\xa9\x31\xb2\x0a\x55\x5c\x91\x59\xa8\x92\x38\x2e\x33\xf0\xb8\x4b\xfc\x86\xb1\x15\x4f\x1d\x5b\x29\x14\x4d\x18\x5b\x29\x14\x3d\xec\x2a\xf7\x57\xb1\x6e\x1d\x5b\x13\x56\x29\xbc\xeb\x8a\x1c\x33\x66\x6c\xe5\x07\x79\x49\x2a\xca\xdd\x6a\x45\xaf\x74\xc6\x39\x22\x57\x29\x6b\xd8\x8a\x1a\xa1\xeb\x82\x34\x68\xa1\xf9\x02\xa9\xe5\xf8\xc7\x65\xf3\xbd\xdb\x7a\xe6\xd4\x8d\xd4\x90\x6a\x8f\x62\xa9\x3e\x18\xac\x67\x38\x7c\xe9\xa1\x38\x6c\xb4\x85\x49\x83\x6c\xbd\xb6\x49\xa5\xa2\xcc\xdb\xf3\x9c\xfa\x26\xfe\xbb\xc6\xd6\x5b\xc7\xb6\x5b\xfd\xb9\xbe\xa9\xcd\xad\x7b\x8e\xad\xbf\x30\x57\x4c\xcb\x5b\x7f\xe5\xd8\xc6\xdf\x69\x6c\xbd\x36\xce\xfa\x63\x6b\xa9\x35\x9d\x8e\x7b\x58\x5e\xaf\xe8\x02\xd9\x52\x37\x52\x8e\xe0\xe4\xd5\x9b\x58\xdb\xa0\xf3\xae\xc8\x8f\x1e\xcb\x9b\x56\xf3\xbd\x43\xcf\x84\xe6\x73\x5f\x11\x26\x53\xfd\x79\xd2\x9e\x94\x7a\x32\xa5\x2e\xf4\x57\x5b\x5c\x4c\xa6\xed\xca\xc7\x4a\x28\x76\x61\x39\x5f\x7e\x99\x0e\x46\xfd\x5e\xa1\x95\x6d\x6c\x8d\x3d\x63\xea\xfc\x08\xe6\xc3\x71\x8f\xfb\xaf\x2d\x5f\xfa\x95\xc4\x00\x46\xef\x38\xb8\x42\x21\xf8\xed\xe6\x30\x41\xa4\xd9\xae\xd4\xf9\xf6\x1b\x52\x15\xde\x90\xcf\xba\x9a\x76\x0c\x54\xf4\x91\xd4\x37\x73\x1d\xc2\x1a\xc5\x79\x14\xe1\x54\xee\x43\x9f\xce\x09\x7d\x67\x26\xe3\x91\xde\x37\x4b\x77\x4a\x36\x4a\xb8\xab\x18\x43\xba\x62\xa5\xd5\x15\x90\xcf\x47\xf0\xa7\xc0\x79\x47\x4f\x27\xa7\x13\x5d\xa8\x9a\xfb\x74\xeb\xc5\x82\x5f\xd4\xa9\x31\x9b\xcf\x53\x76\x78\xdf\x57\xb2\x68\x22\x49\x92\x26\xb0\x95\x59\xf2\xd8\x0d\x3a\xa9\x7b\x60\xee\x2b\x7d\x1c\x99\x24\xf9\x13\x59\x4b\xd5\x80\x67\xd2\xf2\xce\xb5\xf6\xbd\x20\x15\xb1\x20\xf4\xb3\x7d\x6a\xdb\x05\x3d\xc5\x82\x34\xc4\xb0\x33\x74\xa5\x8a\x58\x42\x64\xdb\x84\x30\xe8\x5d\xf1\xdc\x78\x3e\x76\x3b\x3f\xfe\x49\x62\x99\x38\x8a\xf1\x6b\xf9\xf0\xb9\xb2\xab\xd9\x39\xa2\x08\x72\x72\x32\x1b\x38\xe5\xc7\x03\x7e\x3a\xfb\xf0\x77\x14\x73\x63\x60\x8d\x6f\xe1\xcc\xfd\xfe\x79\x26\xb6\xc2\x5f\x4d\x8f\xe2\xc6\x7b\x41\xf0\x16\x7e\x3c\x0c\xd9\x38\x0a\x7d\x92\xfd\xe9\xfc\xeb\xeb\x91\x2e\x3f\x84\x8e\x6d\xb8\xcf\xaf\xe0\xd4\x8f\x12\x1e\xc3\x21\x74\x41\xb6\xf7\xdf\x98\x39\xe1\x38\xea\x20\x92\xa7\xfd\xa1\x23\x71\xcc\x1e\x3f\xf5\x7c\x23\x9b\xba\x9a\x99\xc1\xe3\xa9\x0b\x4f\x91\xa7\xa7\xa4\x30\x6d\x2c\x87\xcb\x7b\xf1\xed\xe3\x0a\xb2\x1e\x13\xaa\xae\x92\x24\x5a\x00\x7b\x7b\x3f\x01\x7c\x5c\x31\x36\x7d\xa5\x08\xa7\x47\x68\x9c\x0b\x61\x2c\x1d\xab\x1c\x1b\x57\xc9\xe0\x33\x7f\xc4\x71\xad\xf2\x93\x15\x7d\x38\x90\xce\x19\xaa\x6f\xd7\xf5\x29\xba\x20\xcb\xfb\xf7\x96\x4f\x78\x8c\xe6\x28\xa8\xd7\x7b\xb1\x75\x86\x33\xdb\xf0\x16\xc5\xa0\xed\x75\x89\x7d\x4b\xb7\x1e\x71\x5c\x6f\x92\x69\xe6\x67\x9b\xaa\x43\x24\x78\xae\xd1\x0d\x0c\x9f\x23\x0b\x71\xae\xc2\x10\x9f\xa1\x03\x95\x92\x19\x74\xbf\x2c\x7c\x1f\xf6\x5c\x54\x99\x98\xdb\x7f\xce\x38\x96\xb5\xd0\x51\x4d\x37\xf3\x17\xc2\x97\xc6\xe4\xf9\x49\x51\xa9\x9c\xde\x47\x8f\x27\xd8\xb2\x72\x99\xaa\xcd\xfb\xf0\x96\x89\xa7\x64\x5e\xf6\x1c\xcf\x0c\x63\xba\x5a\xde\xc6\xd1\x29\xae\xcc\x3d\xba\x3f\x8b\x2a\x92\xbf\x25\xd0\xcd\xa1\x7b\xe0\xc8\x3d\x38\x0c\x63\xcb\xe6\xb7\x3e\x83\x4f\x67\xc7\x67\x3d\x9d\x1d\xc1\x16\x23\xc4\x1d\xc6\x6d\x1f\x4f\x1a\xc7\x17\x66\x47\x0e\xd6\xbb\x69\xf7\x02\xc5\xa6\xea\xcd\x3b\x25\xe2\xec\x13\xcd\xc6\x62\xe8\x9f\x4b\x7d\xab\x42\x53\x09\x9c\xcc\xd3\xf6\x5f\xbb\x3e\x9d\x19\x79\x80\x17\xf0\x7e\xbb\x1d\x24\xe1\x4e\xe7\x38\xc2\xcb\x4e\x11\xfa\x59\xb8\x83\xcf\xde\x2d\xaf\x9f\x83\x27\x62\x4d\x4d\xfb\x1d\xa0\x14\x46\xfd\x1c\xca\x41\x79\x30\xa2\x3b\x71\x1b\x85\x3a\x35\x7d\xcb\x6a\xc9\x01\xe4\xf7\x36\x86\x13\xd4\xd7\xe4\x9b\xf1\xe8\x42\x87\x10\xdf\x5f\xd1\x67\xc7\x1c\xa7\xb2\x1f\x6a\x90\x5d\x98\xc0\xa9\xd3\x3f\x4d\xff\xc1\x93\xad\xd3\x24\x09\xc0\x66\x17\x22\xea\x0c\xed\x9f\x26\x4d\xe4\x81\xdd\x69\x62\x45\x35\xca\x2e\xdf\xbe\x88\xf2\xd3\x64\x3a\x9c\x5e\x97\x26\x47\x6c\xb5\xeb\x14\xf5\xf1\x75\xec\x9f\xe1\xda\x61\xec\x91\x13\xe0\x4b\x1d\xfc\x14\xe9\xe9\x14\xea\x4e\x1e\x9e\x44\x22\x8b\x0c\x29\xf3\xba\x44\x62\xf7\x0b\x5f\xe7\x88\x33\xf1\x9e\x1e\xc4\x82\x93\xed\x9f\x61\x36\xe7\xf8\xaf\x9e\xea\x7b\x87\xde\xec\x03\xf9\xbe\xc2\x38\x94\x0d\x63\x7a\xb5\x96\x13\x70\xa6\xa6\x08\x9f\x3f\xef\x4f\x84\xfe\xfa\x9f\xff\x20\x0f\x96\x31\x53\x03\xab\x69\x0f\xdf\xbf\xdb\x70\x6b\x7f\xf9\xf2\x84\xc4\x03\x2a\x86\x9a\x0d\xd0\xab\xc5\xc7\x83\xca\xc6\x6a\x34\xb6\x33\x91\x3f\x01\x4d\x66\xe0\x04\x34\xc4\xc2\x17\xa4\x57\x16\xda\x82\x67\x64\xc8\x0f\x84\x38\xff\xf8\x52\xdc\x42\xb4\xae\x0e\xb5\xc0\x32\x51\xb1\xfa\x6b\x96\xa3\x7d\xb2\x48\xb1\xd1\x16\x2a\x25\xf1\xb0\x04\x84\xb4\x85\xa2\xd0\x16\xc4\xbc\x20\x85\x56\x45\xdc\xa7\x0d\x11\xe9\x36\x0b\x8e\xc9\xb4\x05\xa9\xd3\xae\xe4\x3b\xce\xad\x82\x50\x13\x3a\x02\x92\xe7\xa5\x3c\x5f\x10\x92\x8f\xee\x0e\xfd\x1c\x86\x4a\x31\xf7\x53\xc6\x29\x9d\x94\x45\xb2\x38\x4e\x4e\xf5\x13\x2e\x1b\x45\x2a\xcb\x4f\xf4\x53\x56\x14\x63\x35\xe1\x4f\x65\xff\x71\x3d\x04\xf9\x88\xd2\xc2\xbe\x4a\x90\x6c\x30\x97\x69\xe0\xbc\xa8\xf4\x0f\xaa\x21\x86\x99\x53\x5d\x44\x94\xc1\xee\x6b\x14\xe1\x12\xc7\xbf\x41\x21\xf1\xa6\x71\x56\x43\xca\x6a\x1d\x4d\xc3\xb2\x47\x26\x94\x5a\x35\x44\x05\x36\x70\x4c\x0c\x51\x57\xf3\x25\xa2\x18\xf3\xe5\x0c\xda\xd0\x95\xe1\xff\x05\x00\x00\xff\xff\xc9\x3b\x71\x13\x8e\xaa\x00\x00") - -func send_to_issuerHorizonSqlBytes() ([]byte, error) { - return bindataRead( - _send_to_issuerHorizonSql, - "send_to_issuer-horizon.sql", - ) -} - -func send_to_issuerHorizonSql() (*asset, error) { - bytes, err := send_to_issuerHorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "send_to_issuer-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6f, 0xa7, 0x64, 0x8, 0x60, 0xa3, 0x5a, 0x14, 0x35, 0xbe, 0x64, 0x93, 0xa1, 0x42, 0x4f, 0x1b, 0xf9, 0x41, 0xb2, 0x24, 0x56, 0x46, 0xa6, 0x5c, 0x5e, 0x45, 0xb0, 0xaa, 0x85, 0xb3, 0x3b, 0x2b}} - return a, nil -} - -var _set_optionsCoreSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x69\x93\xe2\xb8\xd6\xe6\xf7\xfe\x15\x44\x7f\xa9\xee\xa0\xfa\x22\x59\x96\x6c\x75\x4f\xdf\x08\x03\x66\xdf\x77\x98\x98\xa8\x90\x25\x19\x0c\x5e\xc0\x36\xeb\xc4\xfd\xef\x13\x2c\x99\x90\x24\x99\x95\x95\x64\xd5\xed\x77\xba\x1d\x51\x59\x60\x1d\x1f\x1d\x3d\xe7\xd1\xd1\x6a\xf1\xdb\x6f\x3f\xfd\xf6\x5b\xa2\x11\x44\xf1\x38\x94\xed\x66\x25\x21\x58\xcc\x2c\x16\xc9\x84\x58\x7a\xf3\x9f\x7e\xfb\xed\xa7\x7d\x7a\x76\xe9\xcd\xa5\x48\xd8\x61\xe0\x9d\x05\x56\x32\x8c\x9c\xc0\x4f\xd0\x7f\x91\x7f\xc1\x0b\x29\x6b\x9b\x98\x8f\xbf\xec\x1f\xbf\x12\xf9\xa9\x6d\x76\x12\x51\xcc\x62\xe9\x49\x3f\xfe\x12\x3b\x9e\x0c\x96\x71\xe2\xcf\x04\xf8\xe3\x90\xe4\x06\x7c\xf6\xfc\xae\x23\x5c\xf9\xc5\xf1\xbf\xc4\x21\xf3\x23\xc6\x63\x27\xf0\xbf\x44\x32\xda\xeb\x7d\x2e\xcc\x5d\x67\xaf\x5a\xfa\x3c\x10\x8e\x3f\x4e\xfc\x99\xf8\xd4\xed\xe4\xf4\x4f\x7f\x3c\xe4\xed\x0b\x16\x8a\x2f\x3c\xf0\xed\x20\xf4\x1c\x7f\xfc\x25\x8a\x43\xc7\x1f\x47\x89\x3f\x13\x81\x7f\xd2\x31\x91\x7c\xf6\xc5\x5e\xfa\xc7\xbc\xac\x40\x38\x72\x9f\x6e\x33\x37\x92\x4f\xb2\xf1\x1c\xff\x8b\x27\xa3\x88\x8d\x0f\x02\x6b\x16\xfa\x8e\x3f\x3e\x8a\x84\xc1\xfa\x4b\x24\xf9\x32\x74\xe2\xed\x5e\xb9\x6d\xff\x71\x02\x40\xb2\x90\x4f\xbe\xcc\x59\x3c\x49\xfc\x99\x98\x2f\x2d\xd7\xe1\x9f\xf7\x88\x71\x16\x33\x37\x18\xff\xf1\xd3\x4f\xd9\x56\xbd\x91\x28\xd6\xb2\xe6\x20\x51\xcc\x25\xcc\x41\xb1\xdd\x69\x9f\x24\xff\xb5\x9c\x8f\x43\x26\xe4\xc4\x89\x62\x6b\x1b\xc9\xc5\x1f\xaf\x4a\x47\x7c\xbe\x58\x06\xe1\xd2\x8b\xde\x26\x2c\xfd\xd5\x5b\x24\x5d\x29\xc6\x32\x7c\x8b\xe4\xde\x4e\x5b\xca\x37\x4a\xbe\x41\xcc\x92\x51\x1c\xd8\xb6\x0c\x1d\x5f\xc8\xcd\xeb\xb2\x8c\xf3\x60\xe9\xc7\x16\x73\x99\xcf\x65\xf4\xc7\x4f\x46\xa5\x63\xb6\x12\x1d\x23\x5d\x31\x2f\xa4\xeb\xb5\xca\xf0\x06\xbc\x41\xb8\x4d\x1c\xb4\x67\xea\xb5\x76\xa7\x65\x14\x6b\x9d\x8b\x87\x9e\x0a\x7e\x99\xcf\xe4\xf6\x2d\xfa\xe3\xcd\xd7\x55\x3f\xca\x7c\x83\x56\x5b\xbe\xc1\xe6\x4b\xb1\xb7\xeb\x0e\x97\x51\xec\x3a\xbe\x8c\x5e\xd3\xfc\x28\xf4\x66\xbd\x7b\x2b\xe4\x21\x1a\xbc\xa2\xf7\x2c\xf4\x76\xbd\x8f\x94\x7f\x4d\xef\xa3\xd0\x9b\xf5\x1e\xe5\x1d\xdf\x0e\x5e\xd1\x7b\x16\x7a\xb3\xde\xf9\xd2\x8a\x96\xd6\x2b\x3a\x8f\x02\xdf\xa2\xcf\x75\xa2\xc9\x62\x29\x97\xaf\x21\x7b\x29\xf6\x76\xdd\x52\x86\xaf\xc1\x7a\x48\x7f\xb3\xb6\x43\x35\x7e\x4d\xdd\x51\xe0\xcd\xfa\x8e\x51\x69\x22\x99\x78\x5d\xed\x13\xb9\xef\xac\xfd\x14\x29\xe5\xe2\xcb\x1b\xb3\xb1\x98\xff\x8a\x72\x8b\xf9\x6f\x36\xf8\x14\xfd\x5e\xb3\xf5\x41\xe4\x5b\x75\xee\xfb\x00\x5f\x57\xbb\x97\x3a\x69\x3e\xc8\x5e\x2b\xbe\x19\x72\x5f\x97\x7d\x0c\x8d\x5f\x13\x3b\x07\xba\xaf\x48\x3e\x06\xae\xd7\xe5\xce\x81\xe8\x2b\x72\x8f\x81\xe5\xab\x72\x6f\xb2\xef\x1c\x50\x5e\x97\x3b\x06\x89\xaf\xca\x3c\x56\xf9\xaf\x48\xee\xeb\xf1\xeb\x22\xc7\xba\xf9\xba\xcc\x93\xaa\xf0\xba\xa8\xc5\xfc\xd7\x05\x1e\xa8\xfa\x26\xa9\x3d\xf3\x4e\x82\xe6\xa0\x63\xd6\xda\xc5\x7a\xed\x52\xd8\x9d\x8f\xa3\x85\x7b\x92\x68\x67\x0a\x66\xd5\x78\xa6\xeb\x8f\x9f\x8e\x7d\xe3\x1a\xf3\xe4\xef\x0f\xf7\x12\x9d\xed\x5c\xfe\x7e\x7a\xe4\x8f\x44\x9b\x4f\xa4\xc7\x7e\x4f\xfc\xf6\x47\xa2\xbe\xf6\x65\xf8\x7b\xe2\xb7\x43\x97\x39\xd3\x32\x8d\x8e\xf9\xa0\xf9\x41\xdf\x4f\x4f\x34\x3e\x4d\x3c\x29\xce\xd4\xab\x55\xb3\xd6\x79\x45\xf3\x51\x20\x51\xaf\x3d\x55\x90\x28\xb6\x13\x9f\x1e\xfa\xb7\x0f\xf7\xa2\x83\x92\x4f\xd7\x39\x3f\x14\xff\x94\xe7\x23\x42\x5f\x2d\xcf\x13\x2c\x6b\xf5\xce\x15\x9e\x89\x7e\xb1\x53\x78\x34\xeb\xb2\x43\xfb\x24\xfb\xb3\x96\x2b\x43\xbe\xa5\xf0\xcf\x94\x1c\x00\x68\x54\x52\xf3\xf1\x7e\x14\x33\x0f\x03\x2e\xc5\x32\x64\x6e\xc2\x65\xfe\x78\xc9\xc6\xf2\x00\xc3\x1b\x3b\xe0\x7b\x31\x21\x6d\xb6\x74\xe3\x2f\x31\xb3\x5c\x19\xcd\x19\x97\xfb\xd1\xc4\xa7\xab\xd4\xb5\x13\x4f\xbe\x04\x8e\xb8\x18\x20\x3c\x29\xec\x25\x21\x4f\xc5\x3c\x50\xf7\x5c\xc8\x07\x02\xdc\x02\xfc\xc8\xf2\xcb\xa0\xfb\xcb\x4f\x89\x44\xe2\xe1\x8e\x23\x12\x7c\xc2\x42\xc6\x63\x19\x26\x56\x2c\xdc\x3a\xfe\xf8\x17\x4c\x7e\x3d\xf8\xa6\xd6\xad\x54\x3e\x1f\xa4\xf7\x0f\xfa\xcc\x93\x37\x84\x75\xfd\x96\xf0\x8a\xb9\xcb\x5b\xd2\x10\x2a\xd7\xe2\x2e\x8b\x62\x2f\x10\x8e\xed\x48\x91\x70\xfc\x58\x8e\x65\xf8\x28\xf2\xd3\xaf\xd7\xbe\x7f\xac\xc5\x77\x62\x11\xbd\x0b\x88\xd3\x40\x20\x61\x39\x63\xc7\x8f\xaf\x12\x23\xb9\xf0\x97\xde\xed\x34\x7f\xe9\x45\x4b\x4b\xfa\x71\xb8\x1f\x0a\x5e\x17\xf3\x28\xe3\xf8\xb6\xcb\xf6\x23\x46\x21\xa3\xf8\xb6\x39\x47\xc1\x49\xe0\x49\x11\x78\xcc\xf1\x6f\x48\xa9\xea\xb5\xd1\xf1\x24\x94\xd1\x24\x70\x45\x94\x88\xe5\xe6\xda\x32\xdb\x65\xe3\x97\x2c\x7a\xd5\x37\x27\x44\x96\xfb\x5c\x5d\x87\x59\x8e\xeb\xc4\xfb\xc2\x1d\xcb\xff\x00\x89\xeb\xbe\x96\xec\x8c\xfd\x7d\x5f\x68\x6f\xd6\xf1\xce\x45\x6f\xe0\xb1\x6b\x71\x02\xfd\xcb\x61\x58\x9d\xc8\x14\xcc\x4c\x39\xf1\xcb\x2f\x0f\xae\xf8\xf7\x9f\x09\xf0\xeb\xaf\xaf\x3c\x7d\x6d\xe0\xb5\x9e\x67\x05\xf8\x9a\xc6\x27\xbe\xbc\xd2\xf6\xd4\xcf\x5f\xd3\xf4\x1c\x9e\x2b\x75\x37\xf0\x3b\xea\x7c\x5e\x31\xf6\xed\xdf\x7b\xeb\xc4\xbe\xcb\x78\xac\x0e\x7e\x20\xe4\x65\x5d\x78\x52\x07\x9e\x67\xfa\xb4\x7d\x7e\x6f\xf6\x4f\x3b\xc6\x47\x43\x4e\xf7\x58\x34\xb9\x30\x86\x3c\xe3\xf6\x3c\x94\xab\xaf\x0a\x59\x4b\x3e\x93\xb1\xeb\x44\xf1\x57\x45\x1f\x7b\xdb\x0f\x74\x3f\xde\xe6\x6e\x10\xc9\xd8\xf1\x5e\xa8\xf9\x87\xc0\x7a\xa3\x6e\x5d\xf8\xfc\x69\xa7\xfe\x51\xdf\x95\xbf\xcf\xf9\xbc\x40\x9d\x97\xc6\x06\x4f\xd5\x9c\x4b\xf1\x12\x5b\x4e\x9d\xaf\xf7\x7a\xec\x34\xf0\xfa\xe5\xb1\x92\xcb\xf0\x8d\x11\xf4\x38\xf3\x22\x5e\x8a\xa0\x07\xba\xb3\x28\x92\xf1\x2d\x3c\x8f\x75\xf5\xc5\x64\xe6\xed\xab\xd5\x6d\xd5\xf3\xd0\xe1\xd2\x7f\x21\x88\x1d\x12\x5f\x8a\x70\x87\xc4\x84\x08\x96\x96\x2b\xf7\x7c\xe3\xce\x61\x46\xf2\x43\xa3\xe8\x85\x87\x4f\x43\xd6\x63\x59\xae\xfc\x7a\x2a\xe0\x0b\xdc\x38\x3d\x79\x42\xf8\xea\xd1\x07\xdc\x5f\x22\xc4\xb1\xc3\xfe\x5e\x3e\x1c\x87\xf5\x47\x3a\x38\xf3\x5b\x0d\x3f\x7e\x56\x73\x83\x30\x7e\x44\x23\x6b\xe6\x8c\x6e\xa5\x93\x00\xd7\xcd\xa6\xdc\xc4\x2c\x8e\xa5\x37\x8f\x13\xfb\x6a\x11\xc5\xcc\x9b\x27\xf6\x5d\xa6\x60\x79\xbc\x93\xd8\x05\xbe\x7c\xde\xd8\xda\xcc\x71\x97\xe1\x45\x53\xfb\x52\x0e\xf1\x76\x2e\xbf\xee\x94\xe3\xb4\xc4\x85\xde\xe7\x61\xff\x31\xc7\x17\xbc\x73\x9a\xd9\x08\xc2\x6b\xa7\xfe\x72\x40\xe2\xdf\x09\xf0\x6b\xc2\xa8\x65\x13\xc7\xaf\xff\xeb\xcf\x04\xc1\x18\xe1\x5f\x6f\xfa\xea\x72\x18\xf6\x6e\x97\x5d\xce\xf2\x5c\xc6\xdc\x17\xd0\x38\x4e\xb4\xed\x6b\xdd\x4d\x83\xf6\x63\xc7\x3b\x4c\x89\x96\xd6\xc9\x88\x50\x46\x4f\x1a\x20\x74\xb3\xc7\x18\x4a\xf6\x58\x97\x9e\xdb\x73\x31\xe6\x7d\xaf\x4d\x17\x93\x75\x6f\x68\x19\x8f\x86\x2d\x22\xf9\x5a\x0b\xf3\xdc\xce\x8b\x31\xfc\x7b\xed\x3c\xab\x78\xbb\x9d\xcf\x1a\xb9\xab\x74\xe9\xaf\xa4\x1b\xcc\xe5\x57\x9a\xb4\x73\xd6\x77\x34\x44\x17\xd3\x1d\x77\x40\xf0\x30\x5f\xfb\xcb\x5b\xfc\x70\x66\xd1\xd7\x80\x58\xbc\xd0\xd0\x3c\x05\xe1\x61\x1e\xf8\x89\xc6\x6b\x20\x9e\xe4\xf6\x22\x18\xe7\x39\xa2\x77\x83\x71\x9e\x14\xff\xe5\x5c\x6f\x9f\x0e\xde\x6e\xd4\xa9\xd7\x6a\xf7\xc5\x0c\xd7\x7b\xad\xba\x58\x02\x78\xcf\xb0\xeb\xd0\xe2\xbf\x12\xa9\x9d\x28\x5a\xca\xf0\xed\xaa\x78\x20\x6e\x8e\x4e\x9f\xc1\x12\xbb\x8e\xe7\xbc\xd0\xa3\x78\x75\x2c\xf8\xdf\x1c\x55\x5d\xb0\xf3\x62\x55\xe5\x5d\xa3\xa8\xcb\xe7\x3f\x6a\x1c\x75\xa1\xf3\xfd\xe3\x9f\xd7\xb4\x1e\x9d\x76\xa5\xe9\xe4\xc9\x7f\xdf\xae\x78\x4f\xa6\x7b\xdf\x4d\xf2\xcb\x35\xb4\x23\xcd\xe3\xcd\x93\x50\xfc\x86\xf1\xc6\x35\x01\x37\x87\x55\xca\x17\x53\xf9\x84\xf9\x63\x79\x73\x60\x7f\x09\xce\xe5\xb2\xdd\xfb\x63\xf5\x79\xee\xfc\xfd\x10\xfd\x60\x7c\xac\x40\x6c\x6f\x81\x13\x6f\x42\x19\x2d\xdd\x9b\xd1\x3d\xde\x78\xf2\xab\xe3\xb9\xf3\x12\xeb\xfb\xf1\xbc\x5a\xb7\x78\x2f\xa8\x57\x2b\xce\xbf\xbc\x09\xb8\xd3\x43\xaf\xa1\x77\x12\xb9\x05\xc4\xdb\x68\x77\xb5\xc2\xfd\x1e\xa0\xb2\xfb\x91\xb5\x1d\x84\x5f\x99\x0c\x4d\x64\x8d\x8e\xf1\x15\xcc\x5e\x57\x19\x7d\xb3\xbe\x62\xad\x6d\xb6\x3a\x89\x62\xad\x53\x3f\x4f\x2a\xf6\x8c\x4a\xd7\x6c\x27\x7e\xf9\x94\x4f\xb7\x1a\xc3\x42\xb1\xa2\x64\x8a\x28\x57\x6b\xaa\xe9\x41\x25\x57\xad\x65\x2b\xb9\x52\xb7\xd6\xe8\x2a\x85\x21\x1a\x55\x73\xed\x42\xbd\xd6\xcd\x98\x75\xa3\xdd\xd7\x9a\x19\xad\x3e\x50\x0a\x9f\x3e\x27\xe8\xf1\xd2\x4e\xff\xeb\x00\x7c\x4e\x28\x9f\x13\xe0\xf3\x11\xe5\xc4\xa7\x4f\x9f\x13\x9f\x8c\xa6\x61\x18\xc6\x9f\x7f\x7e\x3a\x24\x28\x0f\x69\xe7\xbf\xbf\xfe\xf1\x35\x0b\x0d\xdc\x4f\x37\x86\x06\x1e\xaa\x7d\xc3\x2c\x0c\xfa\x2d\xa5\x5b\xae\x2b\xdd\xba\x9a\xee\xe6\x0b\xdd\xa6\xa6\x9a\xdd\x46\xb9\x5e\x53\x9a\x85\x9e\xda\x6f\x15\xea\xc5\x56\xad\x5c\x2e\x28\x9f\x3e\x27\x20\x78\xbc\x3e\x27\x74\xac\x53\x8a\x54\x4c\xbf\x87\x8d\x99\x41\x39\x4f\x5a\x35\xb5\x5e\x2b\x9a\x8d\x4c\xb5\x96\x4b\x6b\x48\x31\x54\x44\x46\xb8\x51\xcb\xb6\x5b\x95\x7c\xbf\xac\xe5\xd3\x95\x4c\xb5\x59\x29\xe6\xea\x6a\x5b\x33\x87\xfd\x5e\xf7\x8c\x22\xbc\x30\x91\x00\x78\xb0\xe4\x9e\xa2\x7f\xb2\xfc\x5e\x64\x15\x6a\x40\xf6\x37\x6e\xc5\xab\xad\xac\xe6\xa1\x80\x9f\x8c\xb1\x91\x31\xc6\x0f\x85\x85\xf0\x66\x69\x5f\xe0\xe0\xf5\xdc\xdd\x1d\x74\x7e\x79\x46\xee\x5b\x39\xfd\x74\x56\xee\xd1\x25\x04\x09\xaa\xdb\x18\x11\x29\x89\x2e\xa0\xa5\x68\x16\xb6\x74\x6a\x2b\x88\xd9\x18\x41\x68\x69\x98\x50\xa6\xa8\x36\xb3\xa1\x0a\x10\x13\xc0\xc2\x8a\x45\x10\xb2\x80\x66\x49\x4a\xf7\x58\x81\x3b\xaf\xbd\x0e\xac\x29\x4c\x91\x48\xb1\x6d\x45\xd5\x19\xd0\x2c\x20\x35\x60\x0b\x68\x13\x81\xa0\xce\xa1\xcd\xb8\x50\x80\x45\x38\x07\x3a\x47\x48\x60\x4d\xc3\x0a\xa6\x3a\xd1\xa1\x82\x19\x24\x7b\x1a\x1f\xd9\x60\xfc\x65\xaf\xf4\xa0\xec\xa8\xdb\xd4\xb6\x5d\x4e\x6b\x59\x3f\x4b\x0b\x0a\xd8\x4c\xd3\xc9\x08\x8c\xe3\x68\x5d\x5c\xef\xe0\x40\xb4\xfb\x43\x96\x2e\xb1\xdc\x78\x2f\x6f\xd6\xd4\x0a\xdb\xcd\x95\xe6\x57\x35\x8f\x8c\x01\x54\x0f\x62\xe9\xd9\x0f\x28\xc8\x87\x5e\x9f\xae\xc2\xc6\x0b\x44\x85\x4c\x83\x54\x05\xb6\xd4\x99\xd4\x55\x89\x6d\x42\x88\x65\xd9\x10\x08\x0b\x48\xac\x13\x4e\x30\xa5\xaa\xa4\x14\x41\x48\x6c\x1b\x53\xa9\x42\x45\x57\x75\x8a\x98\x54\x84\x38\x54\xf6\x8f\x20\xbb\x2a\x04\x45\xc8\x22\x0a\xc7\x00\x09\x55\x6a\x90\xd9\x16\x56\xb0\x8d\x30\xd6\x10\x27\x16\x50\x15\x5d\xe8\x36\x92\x3a\xd3\x74\xae\xab\x14\xe9\x80\x62\x86\x05\xd1\x34\xdd\xb2\x3f\x1d\x42\x27\xc4\x98\x62\x8d\x12\x4c\x4f\x8c\xcd\x28\x8d\xd1\x14\xd6\x96\x38\x00\x56\x49\xeb\xab\xfe\xb6\xbe\xea\x6e\xf2\xa8\x37\x0f\x66\xc9\x55\xce\xa8\xc7\x19\x58\x56\xaa\x5a\x5a\x23\xa3\xae\xcc\xf5\x27\x28\x59\x19\xa2\x61\xa7\x30\x9b\x58\x24\x4e\x0e\x9c\x59\x47\xd5\x8d\x72\xaf\x1b\x4e\x92\xc5\x9a\x8b\xaa\x43\x5a\xab\xc5\xdd\x03\xc2\x83\x46\xaf\x9a\x59\xef\x3f\x15\x1f\xff\x1c\x83\x79\x74\xfe\xbe\x36\x1a\xcd\x13\x77\xd6\xfd\xda\xc8\x2e\xe2\xfe\x36\xd7\xdf\x28\x9e\xd6\x09\x6a\xcd\xcc\x64\x38\xc2\xbb\x45\x2e\x5c\x07\x63\x65\x0a\x66\x83\x45\xb3\x56\x31\xc2\xb8\xa6\x74\xea\x4a\x25\x67\xd0\x8e\x9f\x5f\xc5\xed\xc1\xae\x37\x68\xe4\x23\xb3\x5c\x9b\xee\x48\x59\x56\x27\xa5\xba\xe1\xb2\x41\x5f\xa8\xab\x63\xfe\x37\x18\x9d\x2d\xde\x62\xc5\x03\xa3\xb3\xa0\xf4\x1d\xb9\xf7\x7d\xae\x37\x32\xda\xb2\x2d\xce\x25\x67\x0a\xd0\x14\xac\xa9\x42\x65\x8a\xa2\x50\xa8\x0a\x40\x2c\x4d\x68\x0a\x43\x1c\x4b\x69\x2b\x44\xd3\x91\x4e\x6c\x2e\x15\x4c\xa5\x8e\x74\x80\x6c\x66\x03\x29\xf6\x6c\xfc\x88\x5a\xa1\xda\x96\xa5\x29\x58\xe1\x6c\xff\x98\x2e\x38\xb6\x81\x26\x24\x53\x6c\x4d\x48\xae\x4a\x45\xc1\x92\x58\x2a\x81\x02\xd8\x58\x53\x04\xb0\x38\xa0\x0a\xd0\x21\x04\x40\x13\x4c\x7e\xfa\x9c\x40\x67\x46\x93\x87\x18\x9c\xd9\xcc\x37\xae\x91\x0a\xc2\xa0\xe3\x52\x8f\x69\x7a\x53\x59\xe3\xa1\x95\xef\x8f\x3a\xf3\xd9\x26\xb7\xa2\x23\x9c\x2e\x9b\x4e\x27\x74\x50\x5b\xab\x15\x76\xd5\x71\x98\x76\x56\x8e\x1b\xe2\xc9\xb2\x99\xb1\xdd\xba\xb6\xf1\x52\xab\x71\x9d\x4e\xc7\x4e\xc3\x63\x9d\xcc\xb8\xb1\xc8\xad\xce\x8c\xce\x5e\x20\xde\xdf\xc6\x8d\x4d\xb0\x14\xb9\x38\x6d\x24\x07\x8d\x71\x30\x20\x7a\xdd\x6f\xcf\xb7\x0b\x90\xd9\xd6\x4a\x1b\x2b\x35\x9e\x55\xf5\xdd\xc4\x59\x94\x1a\x4b\x54\x6a\x6f\x27\x59\x6b\xca\x07\x6b\x5b\x06\x2b\x5b\x6e\xea\x45\x17\x87\xad\x09\x68\xf4\xb6\xa0\xb2\x2e\x15\x8b\x66\x33\x4d\xc3\x43\x0c\xae\xde\x60\xac\x19\xdd\xf2\xfa\xdf\x80\xb1\x90\x29\x94\xda\x48\x00\x26\x30\xe0\x4c\x07\x08\x22\x42\x84\x46\x74\x4c\x34\x1d\x12\x0d\x29\x2a\xd6\x2d\xa4\x72\xa4\xdb\xba\xad\x71\x05\x31\x0a\x19\x83\x44\xa1\x58\x20\xfb\xd0\xe1\xfa\x00\xd6\x73\x5d\x45\xb6\xd0\x18\x11\x18\x42\x8c\xa8\x0a\x21\x55\x10\xd6\xb1\x50\x75\xa1\x53\x26\x28\xd0\x04\x17\x50\x45\x3a\x51\x38\x91\x9a\xaa\x02\x0a\x35\x9d\x11\x62\x5b\xba\xa2\x7f\xfa\x9c\x50\x2f\x18\x0b\x1f\x18\xab\x25\xf5\x5d\x14\x8c\xb9\x2b\x6a\x6d\xa7\x38\xcf\xd5\xd2\xa1\x3d\x28\x4f\x37\x52\xdb\x8e\xd4\x7a\x3e\x55\x2f\x8d\x48\x76\x9c\x4d\xae\xb2\x71\x6a\x5b\x16\xd9\x5a\x0a\xba\xf9\xae\x9d\xab\xc7\x4a\xb2\x33\xe2\x9d\xf6\xbc\x5c\x18\x6d\x56\x92\x8d\xbb\x44\xc4\xc6\x78\x2d\x9a\xf9\xf8\x48\x96\x03\x63\x2f\x48\xc4\xa0\x83\xc4\xb4\xa2\x96\xf2\x4a\x17\x2c\xb6\x9e\x92\xa9\x06\x32\xbd\x71\xc3\xe4\xca\x93\x4b\x6b\xa4\xad\xf2\x19\xd5\x1f\x4f\x54\x5a\x29\x36\x53\x90\x58\x3d\xb3\x57\xef\x9a\xa3\x22\x9c\x88\x76\xcd\x61\x4a\xd3\xe6\xa0\x5b\xcf\x57\xf2\x18\x34\x4b\x39\x75\xee\x25\xd5\xf2\x41\x73\xf3\x06\x63\xf3\x37\xbb\x10\x7f\x07\xc6\xaa\x8a\x2a\x55\x9b\x0a\x64\xab\x44\xe3\xaa\x8d\x99\xaa\x60\xa8\xef\xbb\x01\x00\x00\x29\x34\x0e\x38\xa4\x2a\x56\x88\xa5\x62\xa0\x70\xa2\x03\xac\x6b\x36\xb1\xa1\x64\x94\x92\x63\x8c\xbd\x9f\xf5\x8c\x42\xdd\x62\x1a\x52\x35\xa9\x41\x1b\x20\x04\xf6\xe1\xd9\x02\x42\xdf\xdf\x20\x94\x2a\x2a\xc5\x12\x41\xaa\x6b\x42\x68\x36\x50\x84\xaa\x22\x80\x98\x82\x6d\x21\x31\x83\x9f\x3e\x27\xf0\x05\x63\x95\xc7\x18\x1b\xcc\xfd\x1d\x28\xc3\xe6\x36\x30\x36\x35\x0f\x2a\x93\xbe\x4c\x8f\x76\xa5\x9c\xb3\xeb\x64\xa7\x2a\xd5\x8b\x64\xc6\x82\x7e\xb9\x07\x52\x93\x92\x5e\x17\xa8\xd5\xb3\x3b\xdd\xa2\xbd\x58\xb9\x99\x38\xb9\x6c\xe3\xfc\x24\xce\x36\xb6\xc1\x62\x8b\xd7\xcd\xa5\x08\xad\x64\xbd\x40\x0e\x81\xef\xc8\xd8\xf1\x19\x71\xab\x94\xa9\xb3\xb2\xa7\x64\x98\x59\x9a\x65\x57\x33\xda\xcf\x8d\x79\xd3\x40\xa5\x79\x4d\x41\x99\x4d\xb6\x88\xa7\x9d\x6d\xdf\xf6\x63\xee\xcc\xf3\x95\xf9\xae\x95\xe4\xb6\xb1\x33\xea\xfd\x4a\x76\x68\xfb\xb9\xf9\x6c\xe6\xca\xea\x68\x42\x61\xca\x88\x5b\x59\x83\x94\x6c\xe4\x06\x07\x5e\x76\x6f\x30\xb6\x00\x6e\x79\xfd\x6f\xc0\x58\x44\x04\xc1\x92\xe9\x2a\x57\x88\x8a\x24\x55\xb0\xb0\x85\x0d\xb9\x94\xb6\x10\xba\xca\xd1\x7e\xd8\x43\x01\x91\xba\xc5\x00\xb3\x54\x1d\x50\x26\xf7\xcf\x10\x26\xb1\xad\xe9\x07\xc6\x7e\x00\xeb\xb9\xcd\xb1\x54\x09\x50\x05\x57\xb9\x46\x2d\xaa\x51\xa4\x40\x26\x09\x15\x3a\xb4\x31\x10\x8c\x58\x50\x42\x5d\xa5\x3a\x56\x35\x4d\x41\x4c\xa7\x0c\xdb\xcc\x52\x2c\x20\x2c\x75\xcf\x7a\x72\xc1\x58\xf4\xc8\xd8\xe6\x0c\x37\xfc\x0e\xcd\xdb\x26\x65\x4d\x37\x5f\x9a\x42\xc3\xd0\x06\xeb\x6a\xbe\xdb\xf5\xe2\x9c\x11\x31\xa3\x5f\xa0\xab\xc2\xc2\xeb\x67\x69\x36\x5f\xc2\x49\x81\xa3\xb6\x57\xa4\xd6\xb4\x36\xce\x77\x06\x32\x5c\x25\xfb\x59\x75\xd3\x40\xe9\x7a\xa3\x6a\x9a\x99\x4c\xe0\xea\xc7\x8e\xeb\x81\xb1\xeb\x33\xe2\xcd\x72\xde\xa6\xa0\x96\xca\x48\x6b\xc9\x06\xfd\x8d\x3b\x6f\x58\x7c\xe7\xb0\x74\xd7\x54\xd7\xdb\x20\xe9\xd7\xbd\x6e\x1f\x11\x23\x1b\xaf\x1a\x1b\xd9\x1a\x77\x78\xa7\xe0\x61\xd9\x29\x32\x3c\x57\xd2\xb4\xa9\x78\x91\xcc\x9b\x5e\xae\x85\x8a\xc4\x61\x03\x12\x85\x59\xab\x73\xd0\x3f\xbc\xc1\xd8\xd2\xf0\x96\xd7\xff\x06\x8c\x55\x85\x0d\x35\xc9\xa8\x00\x9c\x53\x26\x85\xe0\x10\x71\x48\x84\x00\x44\x57\x35\x22\x39\x84\x44\x45\x00\xda\x96\xad\x12\x5b\x95\x92\x10\xc8\xb8\x26\x05\x01\x98\x51\xae\xee\xd9\xf6\x11\xac\xb7\x34\x4d\x81\x18\x42\xcd\x66\xaa\x85\x55\x1d\xab\xba\x4d\x15\x4a\x55\x8e\x19\x65\x84\x71\x4b\x51\x88\x22\x29\x43\x04\x62\x1d\xee\x43\x2f\x65\x8a\x4d\x08\x50\x35\x8c\x75\xf6\xe9\x73\x42\xbb\x60\xac\xfa\xc0\xd8\x9d\xd5\x1f\x2c\x26\xd5\xd2\xac\x31\x2f\x89\x94\x5d\xa8\x6b\x54\x31\xd7\xb0\x34\x9a\xe5\x49\x25\x28\xc7\xc5\x0c\xc3\xf1\xa8\x1f\xba\x54\x45\x96\x95\xca\x19\x4b\x7d\x42\xb6\xda\x8c\xe1\x8e\x8a\x86\xdc\x0e\xbb\x15\x0e\x6a\xa9\x1c\x9c\x4e\x92\x0b\x6c\xac\x17\xae\x25\xcd\x73\x3f\xd6\xbc\x40\x5c\x27\x73\x84\x43\x82\xbc\xea\x76\x5b\x14\xeb\xdc\x36\x55\xef\x15\x9b\xfe\x90\x4d\x2a\x3d\x6b\x93\xdc\xb4\xb5\x56\x57\x69\xe5\xfb\xcd\x71\x06\xf1\x49\xb7\x65\x93\x36\x6c\xe7\xda\x8d\xd9\xdc\xad\xf6\xe7\xf3\xc5\x76\x5b\x72\x08\xab\x4d\xfa\x69\xa5\x40\x58\x45\x19\x9a\xa2\xe7\x1c\x62\x38\xbf\xc1\xd8\xb2\x7e\xcb\xeb\x7f\x03\xc6\x72\x15\x0b\x55\xd1\x00\xd5\xb9\xce\x14\x5b\x05\x94\x50\x26\x19\x11\x84\x69\x02\x21\x9d\x73\x44\x08\x94\x94\x31\x5b\xc5\x1a\x27\x08\x2b\x10\x49\x00\x55\x86\xa0\x7a\x6c\x8d\x3f\x84\xf5\x8a\x80\x48\xb3\x55\x55\x07\x92\x40\xaa\x22\x00\x84\xd4\x91\x0a\x6c\xae\x09\xcb\x86\x1c\x5a\x4c\x85\x0a\xd7\xb0\x6e\x23\xaa\x53\x29\x01\x84\x68\xdf\xe7\x45\x48\x32\x1d\xa3\x4f\x9f\x13\xfa\x05\x63\xf1\x03\x63\x01\xda\xd8\x0b\xbf\xb9\x2b\x85\x31\x4a\x37\xd2\x96\x48\x07\x2d\x45\x4b\xe7\x66\xd5\x74\x32\xd5\x5a\x75\x96\xa3\x49\x58\xd0\xfa\x69\xe6\x9b\x95\x72\xbb\x14\x14\x32\x7d\x3c\xb3\x58\x1a\x68\xeb\x8c\xab\xf7\x2a\xab\xc1\x32\x39\x9b\x2e\x66\x19\x32\x5e\x19\x6b\x62\x87\x85\x62\x75\x53\x3d\x20\x7c\x60\xec\x05\x89\x4a\x20\x8e\xd4\xd4\x60\xd8\x8c\x99\x92\x69\xa4\x7d\x3c\x9e\x4f\x33\x9e\xc7\x58\x87\xb8\x2b\xb3\x3b\x89\xc2\x08\x6d\xb7\xc3\x7e\xa0\xcf\x62\x13\x51\x73\x5c\x1f\x8e\x9a\xeb\xac\x1c\x83\xac\x6e\x5b\x3a\xcf\x93\x66\x7b\x03\xa7\x3b\xaf\xa4\x8d\xcd\x0e\x6c\x99\x3b\x12\x74\x0f\x31\x76\x7c\x83\xb1\xd5\xf1\x2d\xaf\xff\x0d\x18\xab\xe8\x4c\x93\x5c\x25\x3a\xd2\x05\x40\x4c\xb7\xa5\x6a\x51\xa0\x28\x08\xda\x9c\x31\xa6\x43\xcc\x28\x54\x75\x1d\x21\xae\x30\x08\xa5\x20\x50\xea\x78\xdf\x7d\xb4\xb1\xaa\xa0\x03\x63\x3f\x82\xf5\x52\x40\xcb\x66\xd0\x62\x98\x2a\x94\x10\x4a\x11\x67\x8a\xc5\x6d\xa4\xd9\x1a\xc7\xba\x2d\x08\xb5\x90\x6a\x13\x8b\x72\xb9\x67\xa4\xaa\xdb\x04\xe9\x5c\x52\xac\x03\x86\xe9\x3e\xc6\xd2\x0b\xc6\x92\x07\xc6\xea\x2d\xd1\xf4\x33\xc3\x6d\xb9\x02\x32\x7d\x6f\x39\x8f\x99\x0f\x76\xd3\x6a\xcd\x2b\xcc\x17\xab\xd6\x60\x33\xed\x4e\x1a\xe3\x5c\xb9\xda\xed\x4f\x16\x8d\x42\xaa\xaa\x25\x0b\x5d\xba\x8d\x75\x4a\xf3\x79\x32\x64\xb8\x36\x4c\xa5\x36\xdd\x55\xc4\x03\xd4\x19\x8d\xab\x6d\xb3\x9f\x4b\xd7\xf8\x01\xe1\x03\x63\x2f\x78\xd3\xa8\x4f\x36\x39\xb3\xac\xd3\x7a\x9f\xed\xba\xe1\xc2\xa9\xf9\xf9\xbc\x59\x98\x74\x57\x4e\x23\x5a\xe4\x96\x05\x24\x17\xd3\x76\x96\x6f\xdd\x5d\x9c\x4f\x05\xd6\x7c\x54\xee\xb3\x51\xa3\x5c\xd6\x75\x44\xf5\x7e\x03\xce\x23\x40\x43\xbf\xee\x7a\xbd\x22\x9d\x4e\xeb\xee\x30\xe3\x7a\x07\xfd\xb3\x1b\x8c\xad\x9b\xb7\xbc\xfe\x37\x60\xac\xad\x61\x95\x23\x00\xa9\xa5\x0b\xc8\x38\x94\x16\x97\xd2\x82\x87\x08\x89\x25\x25\xb6\xa6\x5a\x84\x0b\x8c\x6d\x04\x74\x02\x91\x02\x15\x5d\x95\x14\x73\x22\x11\xe1\x87\x59\xa5\x0f\x61\x3d\xb6\x2c\x6c\xd9\x9a\x0d\x55\x1b\xed\x7b\xb4\x82\xeb\x80\x59\x48\xa7\x5c\xe5\x84\xeb\xba\x02\x75\xa6\x68\x2a\x53\x84\x0e\x38\x07\x9c\x42\x8d\x69\x9a\xd8\x07\x64\x62\x51\x48\x0f\xeb\x63\x17\x94\xd5\x1e\x28\xbb\x75\x7c\xcd\x64\xd9\x69\xb3\x1e\xa4\x66\xcb\x66\x71\x5a\xd0\x17\x8b\x71\x6f\xd1\x6a\x17\xab\x7a\x79\x52\x88\x87\x72\xc2\x4a\x36\xed\x16\x37\xfe\xc8\x5b\xdb\xb3\x51\x54\x59\x90\x6c\xc6\x68\x0e\xb3\xbb\x5c\xa4\x6a\xc8\x47\xca\xae\x8b\x87\xdc\xcb\xa5\x8b\x49\xdf\x13\xd5\x28\x77\x11\x64\x2f\x3a\xb2\xc4\x6d\x99\x60\x3e\x61\x13\xb6\x58\xe4\xbc\x2d\x68\x3a\x85\x36\x6f\x63\xdb\x29\xf4\x23\xbb\x1d\x2d\x46\x25\xe0\xce\x1c\xad\x04\x93\x39\x2b\xb6\x68\x2a\xd7\x68\xe4\x70\x6d\x6b\x2c\x76\x0e\xef\xe4\xb7\xc5\xe2\x30\xf0\xdb\x8e\x62\xec\x8c\x6d\x4b\xfa\xb6\x1c\x8e\x18\x3e\x4e\x09\x04\x37\x28\xdb\x08\x6e\xb9\xfd\x6f\x40\x59\x44\x34\x6a\x73\xcc\x04\xc3\x50\x08\xa2\x51\xc1\x04\xd0\x2c\x95\x2a\x9a\x66\xa9\x18\x21\xc8\xa9\x42\x75\x15\x11\x55\x93\xfb\xb1\x3e\xa0\xd4\xe2\x44\xd5\x35\x4b\x15\xd8\xd6\xf6\x74\xfb\x08\xda\x23\x4d\xda\x58\xea\x10\x20\x42\x88\x2d\x74\x41\x74\x9d\xdb\x12\xd9\x16\xe6\x16\x04\x40\x05\x98\xa9\x10\x00\x69\x23\x70\x08\xb8\x42\xe5\x0a\xd5\xb0\xae\x52\x8d\x69\x1c\x7c\x3a\x2e\x58\x3e\x52\x56\x7f\xa0\x6c\x4a\x74\xd7\xeb\xbc\x35\x6d\x85\x69\xa2\x6b\xa1\xd9\x47\xcd\xc1\xdc\x42\x6d\x65\xd7\x1b\xec\x32\x79\x73\x6b\x06\x9d\xf9\x20\xaf\x2a\xdb\x65\x30\x6e\x85\x35\xa3\x5c\x1c\x79\xae\xd9\xb7\x7a\xed\x42\x32\x98\xad\xeb\x2e\x20\xad\x76\xa0\x04\x7c\x06\x45\xbb\x90\xaa\x56\x0c\x1f\xab\x07\x88\xf7\x94\xcd\x5d\x40\xee\xe5\xd6\x75\x37\xb7\xe0\x3d\xb1\x95\xb1\x8b\x56\xd3\xb9\x33\xa8\x58\xed\xea\x6e\xd8\x73\x98\xaa\xae\xda\x20\xb6\x5a\x33\xac\x0f\x77\x6b\xa4\x41\x92\x36\x94\xd1\x4a\xa9\xb1\xe2\x2e\xd9\xd0\x06\x15\xd3\x68\xe6\xe6\x69\xa3\xae\xaf\xe1\x3c\xa2\x9d\x8c\x0b\x27\x25\xe9\x1f\x6b\x44\x74\x83\xb2\xad\xea\x2d\xb7\xff\x0d\x28\x4b\x29\xa5\x82\x42\x1b\x59\xc8\x96\x04\x5a\x18\xd8\x96\x2e\x04\x86\x1a\x24\x42\x21\xba\xb4\x2d\x05\x50\x28\x01\x55\x29\xb2\x6c\xa8\x23\x24\x74\x85\xa8\xd8\xd6\x81\xcd\x29\x3c\x8e\xbd\xee\xa7\x3d\x25\x4c\xd3\x99\x46\x54\x45\x85\x48\x40\x0b\x10\x22\x91\x46\xa8\xad\x31\x9d\x20\x84\xa9\xaa\x01\x84\x01\xb1\xa0\x00\x2a\x46\x0a\x12\x84\xa8\x4c\x30\x9b\x21\xc0\x09\xdf\xf7\x64\xe1\xc5\xb2\x18\x79\x5c\x16\xdb\x8d\x70\x2a\x17\xb2\xae\x80\xbe\xcf\x40\x21\x2e\x95\x50\x9c\xab\x6e\xb6\x6d\xcf\xac\xcd\xec\xe9\x54\xcd\x8c\x56\xf9\x76\x21\xae\x0d\xd0\xaa\x44\x2a\x39\x99\x6a\xa4\x2c\xda\x9a\xae\xc6\xb1\xdb\xd9\x98\x5e\x63\xd8\xad\xa5\xb2\xab\x00\x56\x52\x0d\x6b\x24\x18\x56\x2a\xd5\xe0\x1c\x65\x73\x17\x2c\x42\x3b\x3a\xf1\x8c\xf6\xbc\x42\x63\xa3\xb7\x99\xc5\x9b\x2c\x1a\xb4\xeb\x73\xe4\xc4\x9b\xf6\xca\xf4\xaa\xc4\xe8\xce\xd6\xe9\xb6\x6a\xb6\xbc\xfe\x5c\x9d\x2b\xcd\x99\x49\xf3\xeb\xd1\xb2\xa6\xf8\x68\x91\xaf\x42\xb7\x60\xc0\x74\x58\x68\xb6\x3a\x45\x3a\x9a\x85\x2c\x39\xcd\xe6\xd7\x07\xce\xae\xff\x36\x94\x7d\x61\x1b\xc3\x8d\xf7\x53\xee\xd8\x14\xf1\xfc\xe5\x86\x7b\x94\xbd\xb4\xfb\xfe\x3e\x9d\xd7\x1b\xe8\xef\xd0\xf6\xc2\xf6\xf7\x3b\x34\xbe\xb0\x51\xfd\x5b\xb7\x94\x5c\x6c\x56\xbf\xd8\xe2\xd3\x50\x9a\xb5\x7e\xa3\x5d\x6c\xd7\x6b\xb5\x4a\x35\x9d\xcd\x22\x35\x9f\x6b\x90\x7a\x16\x8d\xfa\xcd\x81\xda\xc5\x5a\x05\x77\x87\xc5\xb2\x99\x19\xf4\xeb\xa8\x5c\xad\x8c\xaa\x79\xb3\x72\x5c\x16\x3f\x6e\xde\x28\x25\x83\x5a\x94\x6c\x97\xea\x0c\x5a\xc6\xb4\xb0\x9a\x38\x2b\x5d\x95\xba\x32\xb1\xdd\x7a\x6a\xa0\x78\x66\xb9\x58\xa6\xbe\xd5\xdd\xc8\xfe\x99\x7d\x87\x55\xe4\xcc\xe1\xe3\xbe\x9a\x99\x93\x96\xda\x63\x05\x5b\x8d\xa7\x62\x52\x95\xed\xdc\x6a\x81\xb0\x2c\xb7\x1a\xd3\xb5\x31\xef\xb5\x97\x05\x75\xac\x0c\xf8\x66\x0a\x80\x02\x8f\x1b\x27\x38\xed\xae\x2b\x87\xe7\xc7\x8f\x7f\xd2\x07\xa5\xeb\xc7\xef\x59\xc3\xa0\x99\x8b\x5a\x9c\xce\x39\x0d\x5b\xf3\x5d\xdf\xca\xc0\xb0\xe6\x0f\x6d\xae\xf7\x5b\x15\x47\xb7\xdb\x53\x52\x56\xbb\x8b\xf4\xa4\x35\x76\x3b\x8b\x0e\xf6\x27\xcd\x83\xba\x7a\x7f\x16\xf4\xdd\x4c\xba\x6d\x96\x0d\x6b\xb2\xb4\xfa\xe3\xa5\x33\x9c\x7a\x2e\xdc\xee\xf0\x30\x4f\x54\xbb\xd9\x1a\xc3\x7a\x53\xef\xad\x7c\xd9\x0a\x0a\xe3\x7e\x3a\x99\xa1\xbe\x9e\x76\xa6\x6e\x5a\xcf\xc2\xd4\xbc\xed\xb7\x9a\x7e\x52\x4d\xf5\x4a\xdb\xf9\x3a\xa3\x5a\xd9\x66\xe1\xb0\x27\xeb\xaa\xb9\xf8\x60\xd7\xa0\xbb\x5c\x53\x7d\xea\x9a\x6c\x36\x02\x76\x75\x9b\x89\xf2\xe5\x64\xb9\xbf\xf2\xf2\xd8\x28\x25\xbb\xda\x2a\x6f\x25\x93\x86\xa6\xd4\x33\xc5\xe4\x68\x5e\x2d\x1b\xc9\xa0\x4f\xcf\xae\xb9\x0e\x97\xdf\x0c\xbd\x66\xab\x63\xd3\x1a\x3b\xee\x50\xd4\x87\x7e\xb7\xe0\x6a\x43\xa1\x15\xf3\x20\x54\x90\x9d\xcc\xc7\x8d\xce\xcc\xc8\xb7\xb7\xcb\x82\xde\x58\xaf\x86\xca\xd0\x68\x97\x37\xf1\xbc\x33\x5a\x51\x10\xa4\x72\xbb\x41\xae\xec\x6f\x94\xe6\x5a\x4d\x8d\x06\x9b\x36\xab\xd7\x45\xba\x43\xac\xec\xf7\x87\x5e\xbd\x0b\xfa\xe6\x35\xf4\xa9\xe2\x1c\x54\x51\xaa\xdf\x1d\xb5\xf4\x2e\x41\x16\xae\xb9\x9b\x5a\x79\x16\x08\x3f\x4f\xf1\x22\xdd\x99\x2b\x20\x93\x4d\x43\x83\x29\xeb\x47\xe8\x6b\xf7\x42\xbf\xab\x77\x1a\xfd\xc9\x88\x58\xbd\x52\x7e\xd5\x64\xf3\xf2\x00\x6f\xc2\x7a\x33\x8d\x0b\xb3\x11\x60\x35\x6d\xec\x84\xc3\xea\xa0\xb7\xec\x77\x47\xb3\x15\xf7\xf4\xcc\x6a\x6d\x2c\x67\xf5\x58\xba\xda\xbc\xa3\x6e\xe5\xb6\x6a\x0e\xf5\xf4\x76\x55\xef\x69\xd9\xc5\xa8\x8b\x0a\xbb\xd1\x20\xd3\xfc\xee\xd0\xe3\xbb\xa0\xef\x5e\x41\x9f\x31\xfd\x35\x46\x22\xd7\xa3\xb5\xe6\x24\xb9\x48\x76\xcb\x88\xe0\xca\x8c\xe5\x41\x35\x55\x76\xc2\x8a\x9f\xce\x60\x25\x5e\xa9\xaa\xbd\x30\x1e\xa1\xaf\xdf\x0b\xbd\xa0\x45\x96\x6b\xb3\x62\xc6\x4c\x37\x76\x93\xdd\x68\xd6\x53\x36\x45\x11\xc5\xda\x96\x0d\xaa\xb4\xac\xda\x63\xaf\xde\x1e\xb6\x07\x29\xd2\xac\xe5\xda\x28\x1a\xb7\x96\x3a\x2a\x4c\x52\xb6\x55\xea\x35\xa7\xe3\xb8\x30\x63\x95\x55\x6b\xca\x52\xa4\xa8\x23\xd8\xab\x66\xb2\xc3\xa2\xf1\xfd\xa1\x27\x77\x41\x3f\xbc\x82\xde\x68\x80\xea\xd0\xf7\x31\xf2\x36\xe5\xe1\x14\x2e\xab\x8a\x31\xaa\x09\xb2\x4c\xe1\x61\x63\x6a\xa6\xb8\xa9\xea\xeb\x66\xb3\x58\x76\x06\xdb\x73\xc0\x69\xdc\x0b\x3d\xaa\xcf\xcd\x72\xd1\xc0\xd8\xca\xf5\x06\x5b\x33\xbf\xe9\x86\xcb\xb5\xf4\x4a\x61\x4b\xd6\x8a\x73\xb2\x1d\x87\xa9\x51\x18\xf4\x72\xaa\x18\x04\x61\x50\x9f\x2f\xa7\x5e\xa6\x53\x9d\xcd\x79\x27\x68\x35\xd2\xed\xea\xb4\xe2\x83\xa2\xe3\x65\xfa\xab\x71\xad\x0d\xf4\x8e\x3f\x73\x87\x99\xef\x1f\x70\xb4\xbb\xa0\xe7\xd7\x01\x47\xc4\x2b\xbd\x9b\xd1\xb6\x85\xb0\xb2\x6c\x85\x6e\x63\x2a\x26\x9b\x64\xdc\x8c\x77\x4d\xa4\x0f\xfa\xf5\x02\x09\x67\xd9\xcc\xa2\x17\xab\xad\x33\xf4\xd7\xbb\x15\xbe\x19\xfa\xdc\xa4\x6b\xb6\x5d\x56\x48\x7a\xa3\x4a\x36\x8d\x49\x98\x77\x57\x40\x01\x8d\xaa\x5e\xaa\xef\xd0\xac\xe4\x6a\x75\x52\x5f\xc2\xa2\x3e\xa8\x7a\xc0\x5f\x0c\x53\x30\x76\x5a\x45\xd9\x53\xca\x03\x48\xbd\x4a\xcb\xd3\xe2\x91\x35\xc8\x74\x2b\x4e\xa1\x17\x5b\x41\xdc\xd7\xe6\x66\x7a\xfd\xdd\xa1\xd7\xef\x82\x7e\x7c\xcd\xfa\x68\x5e\xf4\xc6\xbc\x64\x79\xad\x38\x28\x74\x56\x46\x79\xb0\xe9\x2e\xa9\xd4\x48\xbb\xbe\x68\x56\x16\x19\x3d\x9b\x9d\x27\x23\x3e\xde\x99\xe7\x58\xdf\xba\x17\xfa\x96\x18\x6b\xc5\x79\x12\x4f\x80\xa0\xf1\xae\xd7\x9e\x17\x63\xdd\x5c\xf7\x9b\xb8\x57\xaa\x00\x60\x29\x49\x1a\x8f\xc2\x86\xb5\x2d\xed\xc0\xa2\xa4\xeb\xb3\x29\x36\x1b\xd8\xef\xcf\xea\x48\xb4\x67\x35\x27\xdf\xf6\x79\x18\xc5\x56\xb1\x5f\x46\x43\x7d\xc9\xe6\x91\x56\x9f\xfc\x00\xe8\xe9\x5d\xd0\xcf\xae\x63\x7d\xa0\xdb\xfa\x6e\xa5\x8a\x0e\x2a\xa3\x1d\x02\x43\x6b\x3e\x09\x67\x70\x9a\x4a\xe5\xda\xc9\xcd\x76\x2a\x6a\x9e\xb1\x29\xb6\x86\x5d\x13\x9e\xa1\x6f\xdf\x0b\xbd\xd6\x6d\x27\x49\xd8\x8e\x1a\x76\x18\x17\x64\x77\xd7\xdd\x48\xb9\x71\x17\x36\x69\x6c\x56\xdb\x1e\x68\xae\x76\x96\x97\x93\x6c\xcd\x93\x75\x00\x61\x2a\x2c\xcf\xb7\x65\x1d\xc4\x6e\xb7\x1c\x7a\x23\x63\x62\x2e\xab\x1b\x45\xda\x52\xd3\xfa\x22\x6b\x98\x6c\xaa\x40\x25\xfe\x01\xb1\x1e\x82\xbb\xb0\x0f\xae\xb1\x17\x9e\x95\x4e\xb6\xbc\xf5\x32\x0c\xaa\xc5\x74\x7a\xdc\xa8\xf6\x77\xd3\x95\xb4\x6d\xab\xd6\x71\x27\xdb\x61\xd7\x9c\x12\x39\x02\xdb\x75\xf7\x8c\x7d\xe7\x5e\xec\x0d\x23\x0e\x1c\x5b\x6c\x71\x72\xa2\x5a\xe9\xe4\x72\x13\xc4\x93\xc8\xe4\xa5\x62\xb8\xf0\x60\x0e\x82\x55\x2d\x57\xc9\x76\x32\xae\xcf\x73\xca\x3c\x3b\xb4\x7b\x7e\x77\xb8\xee\xb1\x09\xdf\xb5\xea\x2d\x85\x8e\x86\x6e\x6a\x95\xe9\xae\xd2\xed\xad\x56\x5c\x28\x83\x8a\xe1\x69\x66\xe6\xfb\xd3\x1e\xc2\xbb\xb0\x8f\xae\xb1\x77\xd2\xf9\x08\x18\xc1\xc4\x63\xdd\xd6\x28\xee\x15\x6d\xe2\x74\x0c\x32\xe8\xcc\x73\xe5\x29\x9b\x6c\x3b\x3d\x58\xb4\xf5\x75\x94\xb1\xfd\xf1\x23\xf6\xdd\x7b\xb1\xaf\x97\x1b\xbd\x4d\xbe\x15\xef\xa4\x1c\x2e\x0b\xea\x72\xbc\x5a\xad\x5a\x2b\xd7\xf7\x10\x6d\x0f\x8d\xc5\x1c\x16\x5a\x83\x4a\xab\x38\x88\x4c\x0e\x53\x46\x6b\xbd\x59\xe6\x45\xc7\x60\x1d\x65\x46\xb7\xf3\xde\xd6\x28\xe1\x20\x6b\x27\xab\xf6\xdc\x98\xdb\x71\x61\x67\xe7\xa3\x66\xfa\x07\x74\x2f\xe1\x7d\x03\xde\xf5\x35\xf6\xba\x1f\x44\x3d\x4d\x4f\xd1\x15\xcc\xd7\x93\x19\xa5\xd7\x30\xdb\x43\x3a\x69\x22\xbd\x9e\x9c\x76\x57\x3a\x8d\x5d\x18\xfa\xc3\x68\x3b\x3e\xf3\xbe\x77\x2f\xf6\xa3\x54\x9c\x21\x2b\x1b\x85\xbd\x49\x86\xc2\xb2\x57\xda\x66\x81\x9f\x6a\x14\xf3\x5e\xe0\xe4\xb4\x65\x1e\x2b\x26\x29\x14\x33\xb8\xbf\x4d\x61\x3f\xea\xb6\x15\x52\xe8\x05\xe1\x34\x70\x1b\xd9\x7c\xb3\x5d\xc4\x21\x5a\x66\x46\x05\xd7\x4b\xe6\x53\xc5\x6c\x73\xb3\x8a\x26\x69\x2f\x3b\x3e\x62\xff\xf2\xec\xc5\xad\x77\xcc\xdf\x31\x7b\xf1\xf0\x9e\xf9\x79\xbb\x20\x51\x90\xb0\xa5\xd4\x28\xd1\x08\x57\x04\xb1\x10\xd1\x08\xb4\x35\xc4\x31\x85\x8a\x54\x6c\x68\xab\x0c\x49\x9d\x49\xa8\x32\x1d\xea\x18\xea\x0a\x56\x25\x53\x6d\x4a\x25\x54\x9f\x78\xf5\xd0\x8b\x39\x2e\xff\xf9\x64\xac\xec\x70\x71\x86\xc3\x5e\x94\xa9\xca\x64\xbe\x9c\xda\x4d\xb4\x1d\xcb\x25\xbb\x1a\xb5\xd9\xb0\x19\x8c\x43\x45\xc4\x9d\x1c\x3e\x6e\x22\x7a\xad\xf4\xb7\x5f\x2a\xff\xe6\xd2\x9f\x5f\x2c\x7f\x2c\xfd\xc3\x49\xce\xc7\x63\xe2\x12\xcf\xae\xc3\xd6\x32\xf0\xac\x56\xdc\xd0\xe4\xcb\x78\x1d\x84\xb3\x39\x8b\xa2\xf9\x24\x64\x91\xbc\xa1\xa9\x23\xa3\x38\xd1\xce\xe6\x12\xb5\xa3\x70\xe2\x8f\x44\x5b\xce\x63\xe9\x59\x32\x4c\x28\x00\xe2\xb7\x64\x64\x07\x21\x97\x11\x9f\x07\xbe\x2f\x37\xb1\xcb\x96\x3e\x9f\x5c\x67\x74\x38\x86\xed\x2d\xca\x8e\x73\xec\xa7\xd7\x1c\xa3\xdb\xe5\xff\xbf\x87\xb7\x22\x7f\x8e\x1d\x4f\xfe\xfc\x7b\x02\x1c\x5f\x92\xfc\xf9\x74\xae\xf5\xcf\xbf\x27\x8e\xe9\x87\x9b\x13\x16\xfd\xfc\xfb\xf1\x10\xb8\xc3\xcd\xff\x9c\x84\x6d\x29\xdf\x26\xe8\xb1\x4d\xbc\x89\x9c\xdd\x1b\xc5\x43\x19\xc9\x70\xf5\x35\xe1\x9f\xfe\xf3\x26\x28\x58\x14\x1f\x4e\x2f\x12\xa7\x53\x44\x6e\x40\x71\xf7\xda\xc3\x1b\xec\x38\xc5\x5b\x16\xf2\x89\xb3\x3a\x25\xbe\xe0\x92\xb3\x0f\xe0\x09\x90\x03\x1c\xe1\xcf\xbf\x27\x7e\x5e\x41\xf8\x2f\xf8\x2f\xf0\xf3\x29\x81\x2f\xc3\x50\xfa\x71\xe5\x50\xb4\xfd\x03\xca\xd3\x84\xf4\xe1\x84\xa9\x3d\x70\xff\xfb\x11\xc9\x33\xa6\x8f\x92\x7b\xcd\x00\x13\x2e\x00\xb5\x99\xa2\x13\x4b\x11\x12\xda\x36\x52\xa8\xa5\x28\xaa\x82\xa9\xa5\x63\xdd\xa6\xaa\xe4\x50\x70\x4e\x91\x0d\x24\xc0\x50\xb1\x14\x9b\xe8\x90\x22\x55\xa7\x18\x9e\x4c\x7a\xd4\xbb\xa7\xf1\x13\x0f\x3e\xa6\x1c\x0a\xbf\xe7\xdc\x93\xa4\xff\x5c\x3d\x1f\xf9\x6c\xbe\xb7\x0b\x2b\x80\x20\x4d\xd1\x55\x45\x42\x8a\x2c\x0a\x00\x67\xba\x26\x15\x21\x38\x13\x4c\xd5\x14\x0d\x28\xd2\x26\x3a\xc1\x0a\x62\x0a\xd5\x15\x81\x19\x21\x16\x26\xc4\x66\xd8\xd6\xf1\xcf\x3f\xdd\xc8\xe1\x05\x0c\xa8\x8a\x09\xa0\xc4\xc6\x02\x49\x02\xb9\xce\x15\x55\xe8\x44\xb3\xb0\xad\x33\x55\xa1\x98\x2b\xd0\xb2\x81\x4e\x05\x80\x3a\x87\x96\x25\x09\x55\x55\x95\x72\xaa\x08\x66\x53\x0c\xbe\x1d\x03\xf8\xf9\x79\x5a\xb0\x8c\xe7\xcb\xf8\x63\xcb\xfe\x1a\xc2\x1a\x66\x54\x55\xa1\xa5\x03\x09\x74\x55\xc5\x1c\x52\x0e\x39\xb6\x88\xc4\x36\xd7\xa5\x65\x5b\xaa\x25\x35\xae\xea\xdc\x06\x42\x48\x01\x99\x80\xaa\x26\x6c\x42\xa9\xa5\x48\xac\x7d\x0b\xc2\xf7\xbe\x61\xf9\xd1\x08\x7f\x5c\xd9\x5f\x43\xf8\xee\x52\xff\xa5\x11\x7e\x5b\x3d\xfe\x07\x83\x7f\x30\xf8\x07\x83\x7f\x30\xf8\x07\x83\x7f\x30\xf8\x07\x83\xef\x86\xc1\xe1\xd3\xff\x79\xfb\xd8\x28\xe2\xf3\xc3\x29\xb1\xb7\xae\x4f\x0f\x13\x00\xc7\x09\x79\x7b\x91\xb5\x1a\x33\xa7\xe3\xc5\xfd\x75\x71\xa3\xa9\xc3\x30\x55\x2f\xac\x6a\xc1\x00\x77\x56\x90\xce\x27\x19\x27\xb3\x1a\x29\xb0\x3a\x70\xcf\x9b\x94\x8f\x8b\xdd\x9b\xe1\x14\x25\x31\x1e\x29\xeb\x98\xed\x46\x4a\x01\x35\x72\xb3\xb6\xba\x2a\x80\x20\xe9\x2c\x73\xe5\xf1\xb0\x3b\x2c\x75\xc9\x2c\x39\x52\xbb\x8f\x13\x0e\x25\xe7\xce\x69\xa0\xf7\x4c\x58\xa4\x8d\x7c\x85\xad\xea\x24\x92\xcd\xfa\x28\x03\xf2\xfe\xa0\x1b\xa7\xe3\x42\x73\xab\x4f\x76\x13\x34\xb4\x26\xdb\x5a\x67\xeb\x16\x5a\x03\x0b\x45\xe5\x9d\x82\x8b\x3a\x9b\x0e\x78\x67\x90\x81\x93\x31\x33\xe6\x73\x16\xd6\x46\xc3\x54\xd7\x23\x90\xaf\xb5\x8a\xd7\xe9\x0e\x9a\xc3\x96\x7a\xb6\x27\x33\xbc\x73\x6f\x57\xfa\x3d\xd3\x6c\xcd\xb4\xa3\x84\xbb\x65\x58\x98\x65\xbd\x66\x9c\x9e\x43\x58\x69\x5a\x2d\x50\x5d\x15\xb9\x2a\x94\xbc\xca\xa7\x5d\x7d\xde\x02\x3d\x85\x6a\x99\x88\x2e\xdb\x8d\x7c\x00\x91\x09\xd7\xf1\x70\x98\x1f\x97\x59\x7f\xb1\xeb\xf7\x1b\xb0\xb4\x8c\x07\xd5\xfa\x16\xcf\x60\x0e\xe4\x4d\x79\x32\xa7\x0f\xcb\x9a\xb4\x8a\xcb\xac\xaf\xf6\xcb\x71\x7d\xa6\xc5\x69\x6f\x54\x95\xa1\xdd\x6b\xd5\x8d\x5e\xcf\x05\x2b\x6b\xd2\x4e\x17\x44\x63\xdb\x1a\x56\x66\xad\xe1\x3a\xdc\xe2\x79\x3f\x5e\xce\x73\xa3\x34\x5c\x6f\x53\xbb\x79\x2f\x5f\x50\x3a\xbd\xee\x70\x5a\x6a\xf1\x42\x73\x0d\xd5\xf8\x38\x17\x78\x07\xdf\xc6\x8f\xfe\x5f\xdf\xbb\x97\xee\x70\xb5\xbe\x8d\xbf\xcd\xbc\xad\x35\x97\x21\xa2\x04\x0e\x9b\x2b\xd1\x9e\x3b\x7c\x4c\x4b\xa9\xdd\x36\x3d\x5f\x14\x27\x52\x9b\x2c\xc5\xa4\x3e\xd9\x1a\xcb\x5e\xb4\x4a\x8e\xb4\x9c\x19\x2f\x27\x90\x95\x55\x52\xea\xac\x37\x33\xd3\xa9\x33\xaa\x8d\xbd\x16\x1e\xad\x26\xab\xad\x01\xaa\x96\x56\x6c\x8e\xc6\x07\x1a\xa5\x6b\xbe\xaf\xf7\xe3\x79\x0b\xf5\xa5\x08\x9b\x12\xcc\x7c\x09\xba\xbb\x42\xa9\x3c\x6c\x2a\xad\x64\xbd\x31\x2e\x79\xfa\xa8\x28\x01\xb4\xf9\xd9\xfe\xf3\x04\xde\xbb\xf8\xf3\xb0\x2f\xe7\x85\x89\xbc\x17\xce\x61\xbc\x63\x5b\xd7\x8b\xc7\xde\x7d\xeb\xe4\xe0\x93\xa3\xef\xce\xe7\x55\x28\x4c\x51\x34\x8e\x28\x27\x2a\x53\x55\x9b\x6b\xcc\x12\x2a\xa7\x44\x87\x54\xc5\xc4\x06\x88\x52\x0a\x88\x80\x0a\x57\x35\x22\x34\x60\xa9\x40\xb1\x6c\x61\x29\x94\x08\xc2\xd0\xe9\xe4\x93\x27\xd1\xb1\x7a\x46\xf7\x58\x33\x9c\x54\x1a\x54\x40\x29\xbf\x8d\x27\xeb\x1a\x74\x87\x80\x6d\xe7\x01\xa4\xb5\xc2\x66\x55\xc9\x6c\xeb\x38\x4e\x9b\x3c\xd3\x5b\xad\x73\x74\x8d\xc6\x71\x58\xf7\x47\xc6\x1b\xae\x17\x4f\xd0\x39\x78\x37\x73\x4f\xfe\xc3\x54\x92\x5f\xe9\x7b\x63\xfe\xcf\x17\x18\x6e\xe3\x8e\x88\x25\x35\x60\x5b\x9a\xa6\x2b\x36\xd5\x01\xe4\x82\x4b\xc1\xa1\x02\x88\x54\xa0\x4d\xa9\x42\x11\xa7\x54\x27\x80\x41\x2c\x55\x15\xda\xaa\xa6\x52\x4d\xd5\x18\x60\x48\x63\xd6\x11\x77\xe5\x39\xee\xff\xa5\x72\x7f\x14\xee\xba\x7a\x7e\xfe\xe6\x19\x32\x77\xe2\xce\x35\x62\xeb\x2a\x12\x42\xa1\x92\x2a\x16\xe3\x96\xad\x40\x82\xa9\xc0\x40\xc5\x2a\x03\x2a\x92\x4c\x12\x86\xa5\xad\x43\xa9\x48\x5d\x70\xaa\x59\x40\x02\x80\x05\x02\x94\x28\xa7\x73\x51\x5e\xc5\x3d\xb3\x0c\x50\x10\xab\x78\x91\x69\x98\x9b\x79\x33\x85\x82\x42\x2d\xb9\x83\x5a\x6b\xeb\x44\xd0\xb5\xab\xb9\xa1\xd7\xec\x8f\xc3\x65\x3b\x79\x5c\xa1\x2c\x75\x33\xc9\x53\xa1\x6e\xbe\x0a\xf7\x26\xdc\xb3\xf7\xe5\x5f\xe7\xef\xcb\xff\xad\xb8\xeb\x14\x5b\x50\x22\x26\x11\xd6\x80\xcd\x38\x56\xa9\x14\x36\xe7\x0a\x01\x50\x51\x98\x62\x53\x04\x2c\x84\x2d\xaa\x5a\x50\xd8\x36\xa3\xb6\xce\x15\x06\x74\x1d\x12\xc6\x91\x46\x4e\xa7\x7b\x3c\xc7\xfd\x03\xcb\x6d\x5e\x97\x55\x1b\x56\x74\x43\x9b\xba\x63\xb3\x21\x81\xe8\x76\xb5\x5e\x81\x67\x9b\x1b\xd2\x4c\xad\xdd\xc2\x82\xa3\x6e\x16\x62\x56\x42\x45\x07\x36\xdf\xec\x27\xf3\x3e\x7b\xab\xea\x8f\xb1\xf7\xad\x7e\xb5\x80\x65\x29\xc4\xb2\x38\xd1\x38\x87\x5c\x51\xc8\x3e\x70\x49\xa8\xdb\x54\xb5\xa9\x46\x88\xa5\x4a\xcc\x89\x0e\x91\xc2\x15\xce\x6c\x5b\xa3\x40\xd3\x28\x14\x50\x53\x90\xad\x68\xa7\x33\x30\x9e\xfb\xf5\x03\x71\x2a\xde\x89\x93\xf9\x16\xbf\xe6\xee\xb3\xb7\xd2\xfd\x31\xf6\xbe\xd5\xaf\x4c\x53\xa0\x25\x99\x0a\x35\x82\xf7\x9d\x03\x29\x30\x51\xb9\x64\xb6\xa5\x01\x5d\x65\x08\x72\x2c\x24\xb3\x25\xd4\xb8\x04\x16\x56\x84\x22\x15\x0d\x2b\xb6\x64\x52\xd5\x84\xa5\x9d\x4e\x8a\x78\xee\xd7\x0f\xc4\xa9\xfa\x31\x38\xbd\x18\xf3\x0e\xe9\xf9\xfb\xec\x2d\xad\x7f\x8c\xbd\x6f\x6e\xff\x18\xe6\x42\xa7\x0a\x11\x18\x08\x6c\x53\x95\x71\x0e\x0e\xaf\xaf\x51\x42\x24\x55\x34\x48\x31\xd6\x20\xb7\x54\xaa\x69\x12\x72\x4b\x23\x14\x08\x5b\x57\xb1\x42\x6d\x78\xa8\xaf\xda\x4d\xbf\x7e\x20\x4e\xcd\x8f\xc2\x29\x73\x1b\xab\x43\x7a\xe1\x3e\x7b\x8b\xd5\x1f\x63\xef\x5b\xfd\x2a\x2d\x55\x20\x8c\x00\xc5\x14\x62\x55\xb3\xa4\x66\x4b\xc5\xb6\x28\x57\x55\x1d\xa9\x42\x01\x52\x15\x98\x50\x85\xaa\x40\xd7\x19\x87\x0c\x09\x05\xa8\x02\x12\x49\x19\xd0\x30\x3c\x9d\x3a\xf0\xdc\xaf\x1f\x88\x53\xf7\x23\x70\xaa\x3d\x3f\xdc\xd5\x38\xc6\xcc\xf1\xcd\xfe\xe2\xf1\x6d\x8f\x8b\x1b\xe1\xa2\x46\x2a\xb2\xce\xc6\xd3\x4d\x95\x75\x1b\x94\xa4\x77\x76\x44\x25\xe0\x41\x58\x1b\x0d\x76\xe9\x7e\x69\x96\x0b\xca\xda\x6c\x35\x3b\x6e\xc6\xe9\x19\xab\xc9\x71\xf3\xf6\x41\x7f\xee\x8a\x47\x46\x5d\xc9\xa4\x8c\xba\x8a\x87\xe9\x2c\x8a\x0b\xbd\x5c\x1d\xb6\x90\x01\xaa\x72\xd6\xd0\x4b\x2d\xe2\xd7\xa0\x41\x65\xdf\x11\xdb\xe2\xf1\xe0\xc6\x83\x3d\xd9\x3e\x86\x56\x7e\xb3\x13\x05\x37\x1a\xb5\xf1\xd4\x52\xc0\xc9\xcc\x62\xe6\xba\x00\x6f\x6c\x87\xa5\x8e\x2d\x2c\xa1\x2a\xb8\x45\x6d\x49\x35\xc2\x34\xc4\x39\xe7\xba\x65\x33\x4e\xa8\x25\x35\xc9\x25\x57\xa0\x42\x2c\x5b\x62\xc9\x39\xc6\x90\x13\x1d\x59\x2a\x12\x5c\x68\xa7\x77\xf8\x9f\xfb\xbf\x78\x9f\xff\xf3\xc1\x59\xdf\xf0\xb1\xfc\xdf\xd1\xff\x47\xfd\x95\xbe\x9a\x03\x72\x52\x27\xc6\x96\x66\x40\x23\xca\x9b\xe3\x15\x87\x1a\x84\x5d\xaa\x0f\xa7\xaa\x57\x99\x79\xb4\xa9\xe1\x59\x06\xad\x2e\xec\xb9\xe2\xe7\xc5\xa9\xab\x65\x32\x95\x0e\x9a\x7a\x41\x51\xef\xe4\xdd\x6c\x4a\x8e\x39\xd2\x1a\x83\xb8\x50\x2e\xef\xfa\x3d\x7d\xdd\x73\x46\x69\x96\x59\xe2\x0a\x3e\xf2\xdd\x6d\x56\xd4\xee\xf9\x3d\x8d\xf4\xb9\xbf\x76\xb4\x2f\x1b\x8f\x57\xeb\xec\xb2\xde\x37\x9a\x54\x6b\xc1\x56\x27\xee\x8a\x75\x2d\x5b\x98\x67\x53\x99\xae\x9c\xef\x44\xb3\x31\x70\x03\x9f\x3b\x95\xde\xd9\x1e\xb8\x14\xfd\x4d\xc4\x51\x0b\x5b\xf9\xee\x72\xa8\xd0\xf8\x84\x6d\xe6\xb2\x3f\x18\x5b\xe3\x41\x8b\x98\x5a\x90\xad\x80\x4a\x33\xb9\x1e\xb6\x33\x74\x37\x58\x0d\x7a\x1d\xb4\x71\x1a\xce\x70\xd9\xb6\x60\x76\xe5\x35\x2b\x52\x37\x9e\x8e\xd3\x8d\x37\xc6\x1a\x15\x30\xdd\xd6\x04\x91\xaa\xae\x28\x96\x4d\x54\xac\x13\x2c\x34\x8d\x52\x45\x11\x5c\x88\x3d\xa7\x30\xd2\x2c\x4a\x91\xd4\xb0\xd4\x20\xc1\x9c\xeb\x2a\xe3\x40\x95\x40\x58\xec\xe1\xed\xfb\xe7\x64\x2b\xdd\x47\xb6\x9c\x79\xd6\xc7\xff\xb2\x64\x4b\xdf\x24\x5b\x70\x1f\xd9\x8e\xef\x94\x1c\xc9\xb6\xfe\xcb\x92\x2d\xf7\xed\x64\x03\x1a\x42\xc2\xa2\x98\x4a\x5b\xd7\xa0\xd4\x00\x10\x52\x85\x9c\x2b\x40\x53\xb9\x85\x74\x20\x98\x66\x41\xa0\x10\x45\x20\x0c\x04\xb0\x24\x80\x1a\x50\x75\x1d\x63\x95\x51\xa2\x3f\xbc\x37\xff\x9c\x6c\xe5\xfb\xc8\x76\x3a\x46\xef\xea\xbd\xc2\x3b\x46\x62\x3f\x90\x6c\xd1\x7d\x64\x2b\x9c\xb7\xa9\x1e\x9b\xab\x3b\xc8\x66\xfc\x38\xb2\xbd\x38\xc3\xfa\x31\xd3\xab\xdf\x7b\x6e\x35\x5f\xd1\x0b\xcd\x55\x73\x66\x95\x95\x82\x81\xfa\xbd\x69\x2b\x2c\x7b\xd3\x01\x00\x76\x5e\x8f\x2a\x45\xcd\x03\x66\x6b\x5d\xea\xa7\x8c\x01\x32\x0e\x6f\x9d\x3f\x5e\xe9\x2b\x0e\x5c\x7f\x7f\x4f\x9f\xe8\xf2\x48\xf2\xf4\x71\x0e\x6f\xef\xa8\x6c\x8c\xca\x6b\x8f\x35\x96\x0d\x91\x6b\x77\x37\xc2\xc8\x49\x8b\xd4\x9b\x32\xde\x36\xcb\xc5\x3e\xdb\xb9\x56\xbb\x5a\x9d\x78\x85\x72\xad\x92\x55\xa3\xc5\xc4\x5c\x74\x47\xbc\xd9\x00\x6e\x72\x90\xaa\xcf\x93\x41\xd4\xf7\x6a\x24\x99\xeb\x0e\xad\x68\xa7\xe1\xa6\x32\xcd\xab\xab\x6a\xf5\xd3\xe7\xc4\xa7\x68\x51\xf4\xd7\x78\x33\x9b\x9b\xa9\xc2\x82\x76\x4a\x2c\xed\xe6\xac\x75\x7d\x34\xcb\x83\xf6\xa6\x60\x0d\x32\xc0\x08\x53\x56\xb9\x0f\x17\xe7\x71\xd6\x2b\x18\x3c\x10\xe3\xcf\x4f\x4f\xb6\xf6\x5e\xc8\x1e\x8a\xfa\x11\x73\xaa\xef\x9d\xd3\x34\x3e\x60\x4e\x35\xd7\xe9\xa7\xa3\x3b\xf2\x37\x8c\xff\xde\xdc\xe6\xad\xb1\xcf\xf7\x9e\x48\x7f\x7f\x25\xbb\xee\xb8\x3f\x23\xdc\x37\x0e\x14\x5e\xa9\x64\x06\xda\xf4\xad\x4d\xa3\x6e\xf9\xa3\xaa\x93\xce\xe7\xca\x95\x52\x73\x69\x97\x2a\xe3\x65\x27\x2a\x94\x36\x5b\x23\x6a\x34\x70\x8e\x8e\xa6\x98\x40\x36\xf0\x57\xb5\x54\xa1\xd7\x2a\x59\xb9\xc8\xe4\x4e\x9c\xb7\xc6\x0e\x15\xfd\x9e\x28\xb7\x86\x2b\xaf\xd7\xcf\x38\xbb\xa2\xf0\x2a\xc5\xec\xbe\x22\xd4\x42\xbc\x4e\x22\x99\x49\x0e\x0d\x8e\xea\x28\x5d\xcc\xab\x93\xe4\xa8\xdc\xd9\x8e\x26\xe3\xa0\x87\xcd\x02\x10\x25\x51\x08\xca\x35\x72\x6e\x42\xfe\xfb\x95\xec\x5e\x92\xdf\x59\xc9\x16\x5a\xaa\x93\xe5\x1f\x58\xc9\xbe\xb5\xfb\xf0\xdd\x2b\xd9\x07\xaf\x9a\x7c\x63\x9f\x63\x74\x06\xf5\x95\x96\xec\x3c\xba\x7e\x5f\x87\xf7\x5a\xdf\x9b\xae\xf4\x63\xa4\x33\x33\xba\xb6\x2d\xb9\x65\xbc\x1b\xac\x97\x33\x97\x37\x36\x13\xaf\x11\xd3\x42\x9a\x0e\xeb\x56\x12\x14\x0a\xbc\xa6\xb4\x63\xd9\xee\x55\xa2\xa9\xbf\x65\x76\x6d\x99\xc2\x04\x54\xa7\x7a\xaa\x59\xda\xd9\x6d\xbf\xec\x21\x16\xb6\x7a\xa5\xb8\x30\xce\x8d\x59\x3b\x57\x72\xb6\xeb\x56\x90\xdb\x57\x9c\x8d\x92\x34\x1b\xa2\x2c\x67\x61\x58\xd1\x27\xa3\x11\x6c\xb6\xba\x81\xd9\x58\xe0\xc5\x60\x35\x96\x95\x00\x95\xe4\x5a\x35\x06\x9d\x4c\xff\x4c\xbc\xdb\x95\xb2\xfb\xd4\xf1\x4f\x2a\xe5\xe1\xd9\xe3\x6a\xca\xc5\x29\x65\xef\xe8\x19\x4c\xfd\xb3\xbf\x5e\xb8\x5e\x58\x59\x7c\x12\x14\x3e\x24\xff\x17\xfc\xf9\x95\xfc\xbf\xf7\xea\xd2\xe5\xf5\xc3\x56\xf5\x7e\xf4\x6a\xd1\xf7\x5e\x02\x7c\x7f\x10\x79\xa5\xa5\x7e\x36\x45\x69\x5c\x0d\xec\xde\x72\x5d\x04\x05\xa3\xd2\xf5\x8b\xa2\x3f\x98\x66\xcb\x39\xc7\xd5\x93\x28\xdb\xe0\xc5\x6d\x2c\xaa\x3c\x48\xa5\xab\x7d\x3f\x5c\x6c\x57\xb4\xc0\x53\xd9\x66\x94\x37\xea\x95\x42\x4b\x4c\x84\xd1\xab\xa4\xa2\x5e\x7b\xd3\xd7\x8a\x9d\xdd\x7c\x33\x44\xd6\x0a\xc2\x46\xb6\xe7\x86\xa9\x2e\xce\x8a\x70\x9c\xde\x57\x5c\xa7\x17\xc9\xfa\xb2\x36\xc8\x92\x4d\xd7\x8f\x53\xd5\xd2\xd8\x74\x82\xd5\x6c\x1d\xc1\x65\x37\x12\x29\xe2\xab\xeb\x45\xa6\x98\x5b\xac\xd1\xf9\x08\xeb\x7b\x82\xc2\x65\x4d\x7a\x4f\xa5\xac\x9f\xf1\xbf\x50\xf5\xae\x29\xd4\x27\xcf\xde\xc2\xff\x83\xed\xcd\xfc\x08\x7b\xff\x9a\x4b\x9f\x4f\x9e\xbd\x71\x7d\xf4\x92\xf6\x8f\x5e\xfa\xfc\xde\xeb\xd9\xef\x0f\x52\xd9\x9b\x24\x39\x5c\xaf\x04\xa9\xb3\x53\x9e\xad\x23\xdc\xbc\xd8\x03\xe9\xd3\x06\xf5\x26\xf9\x56\x3a\x18\x49\x24\x59\x23\xbb\x30\x49\x6a\xd1\x33\xe7\xd8\xc9\xa5\xcd\xf2\xd4\x0c\x87\x56\x77\xd7\x73\xc3\x38\x24\x3c\x8b\xe3\xd8\x07\xcb\xfc\xae\xd2\x8c\x7a\x55\xd7\x1c\x37\xe6\x69\x5d\x19\xf4\x99\x36\xde\x75\x5a\x63\x50\xdf\xce\xf8\xd0\xd4\x83\x38\x38\xfd\xd8\xde\xa7\xa8\x12\x79\x4b\x7d\xa4\xaf\x79\xd1\x2b\x77\x76\x93\x29\xee\x60\xe1\xc5\xf5\x41\x7e\xdc\xa9\x64\xb6\x2b\x8a\xd3\x68\x26\x72\xdb\xc6\xf6\xbc\xfd\xe8\xae\x60\x75\x41\x80\x77\x54\x7e\x07\x9e\xfd\x70\x6f\xe5\x4f\x5f\x3e\x7b\xe3\x4a\x7f\xb0\xbd\xd9\x1f\x61\xef\x5f\x7a\x3d\xff\x87\xed\xd3\xf8\xd1\xeb\xf9\xdf\x7b\x93\xc6\xfb\x83\xd5\x35\x5b\xbe\x21\x58\x5d\x7f\xbf\x08\x5e\xe7\x4a\x7d\x7d\x5d\xf4\xb0\xd2\x26\x29\xac\x48\x5a\x26\xdb\x3e\x0d\x7a\xdb\x82\x97\x6c\x4a\xd1\x18\x34\xd7\x91\x99\xea\x52\x3b\x94\xfd\x69\xa9\xd3\xd2\xd3\x35\x7d\xe1\xaf\x7c\xd2\xeb\xd6\x77\x82\x83\x2e\x69\x64\x9b\x99\x6d\x18\x54\x32\xc6\x7a\x02\x2b\x5e\x19\x39\x75\xcf\x1f\x2f\xf8\xce\x86\xad\x61\x7e\x1f\x58\xe6\xdb\x7c\x72\x9e\x16\x6e\x9d\x5b\x71\x6f\xb6\x5b\x24\x51\xc6\x0c\x36\x1b\x41\x56\xea\x60\x37\x8e\xdb\x60\x59\x82\x95\x64\x38\xb3\xad\x0f\x0a\x5a\x17\x44\x78\x4f\x10\xe0\x86\xf1\xc1\x41\xe0\xc5\x21\x5c\xfa\x83\xed\x35\x7f\x84\xbd\x7f\xf1\xcd\x2a\x2f\x5c\x1f\xbd\x09\xe9\x47\x6f\x56\xf9\xde\x3b\x90\xde\x1f\xb4\x72\x37\x49\x72\xb8\xde\x14\xb4\xae\xaf\xd7\x76\x76\x5c\x5d\xf9\x47\x7b\x9a\x75\x1c\xba\x8c\xd2\x2d\xf2\xc8\xd2\x6b\xa5\xfd\xb8\x92\x9e\xc0\xf6\x5c\xf8\xd0\xd8\xed\x8a\xce\xb4\x99\x4c\x9a\x68\x30\xd3\x33\xa1\x31\x59\x86\x66\x89\x64\x57\x4a\x55\x96\x75\x77\x4d\xca\x99\x7e\x7d\x5d\xaf\xe6\x87\xcd\x80\xe0\x42\xd1\x89\x8c\x5a\xbb\xbe\x5c\xb1\xb4\xc1\x0f\x41\x66\xeb\xee\x86\x33\x0f\x36\xa1\xed\x96\x77\x86\xa8\x58\xa5\xd1\x72\xe6\xe7\x7b\xbd\xcd\x16\xb8\x48\xe5\xb1\x32\xab\x25\xcd\xee\x5c\x6f\x7f\x50\x00\xbb\x6f\xde\xc6\xc9\x9e\x7d\xf3\x71\x01\xe1\x95\x5d\x41\x1f\x68\xef\x87\xec\x0a\xfa\x9a\xbd\x7f\xe1\x5d\x59\x3f\x70\xb7\xdd\x0f\xdf\x45\xf6\x96\xa0\xf6\xc1\xdb\xef\xde\x1f\xd4\xf2\x37\x89\x63\xdc\x04\xce\x78\xf3\x84\xf7\x71\x27\x13\x5c\xa6\x45\x21\xe8\x2c\xc7\xd5\x55\x33\xce\x6a\xe9\x49\xb1\x82\x6a\x92\x8a\x5e\xc3\xce\x17\x93\x25\x07\x97\x56\xdd\x7a\x72\x64\xc4\xda\x79\x07\xca\xf1\xba\x18\x66\x6e\x3b\x51\xae\x94\x82\x33\x31\xf5\xeb\xb3\x6a\xae\x31\x59\xf7\xca\x56\xd9\x1a\xd7\xba\xd5\x5e\xbc\xf5\x52\xb3\x49\x01\xf7\x88\xa6\xcd\x2b\x60\x36\xec\xd6\x33\x51\xbd\xdf\x4f\xa7\x37\x46\xb2\xb0\x40\xac\xb0\x75\x45\x64\x8b\xde\x2a\x2f\x3c\xbd\xbe\x2d\x57\x6d\x37\x27\x72\x61\xf6\x34\xcc\x24\x00\xc0\x6a\xa9\xdf\xea\x15\x56\x7e\xca\x49\xe2\x8d\x39\x06\x60\x8c\x6b\xbd\x79\xb9\x9b\x29\x86\xe9\x80\x16\x4d\xd0\x27\x2c\x0d\xcf\xb6\xdd\x13\xf0\xfe\x27\x6f\x2b\x3c\x97\xe7\xa2\xd6\xbe\x67\x33\x08\x3b\x1f\x51\x79\xd1\x23\xfc\x8e\x3b\x8f\xae\xaf\x8b\x11\xc3\xfa\xff\x9b\xf2\xfc\xed\xb6\x5d\xbe\x65\x6e\xee\x63\xf7\xb8\xbe\x3f\xc8\x16\xae\x3c\xf6\x5f\x0c\xb2\x17\xf9\x5d\x04\xd9\x54\x32\x0e\x86\xda\x24\x5f\x60\xdd\x5d\x48\x34\xa8\x8f\xa6\x6d\xde\xee\x24\xfb\xd3\xdc\x78\x58\xeb\xd2\x66\x24\xe1\xba\xb1\xe8\xd5\x49\x37\x95\xa9\xf6\x46\x8d\x2d\x19\xed\x1c\x6f\xe6\x0c\x72\x1b\x9e\xe6\x68\xbe\x85\x69\x39\xf4\x50\xc6\x48\x0e\x33\x8b\x72\x58\x68\xed\x8c\x74\xf3\x18\x08\x57\x41\x1f\xaa\x5d\x54\xf1\x93\xae\x32\xdf\xed\xaa\xdb\x4a\x32\x62\x16\x4e\xee\xa2\x62\x9b\xa5\xb0\xdc\xe5\xba\x9c\x65\xe3\x2c\xaa\x7d\x4c\xaf\x32\x73\xdf\xdc\xd8\xa4\x75\xf6\x5b\xfe\xac\xff\x3b\x06\xd9\x7b\x1b\x4b\xe3\xf1\xfb\xdf\x62\x3b\xec\xed\xbd\xd7\xdf\xc5\xff\x85\x7f\xfc\xff\xd7\xf3\x7f\xfa\xdb\x1a\x81\x8f\xde\x7c\xfe\xfe\x56\xe0\x7a\xa0\xf0\x4a\x2b\x60\x1a\xf7\xed\x2d\x49\xd3\x72\xb5\x5c\x36\xda\x4e\x6d\x9a\x9b\xe4\x18\x9b\x6c\x1c\x7f\xcb\x15\xde\x6c\xae\x34\xd3\x70\x9a\x71\xba\x43\xc0\xb0\xd5\x1e\xef\xd4\x94\x22\x8c\x1a\x1f\x04\x3c\x33\x4b\x23\xb3\x99\x9b\xcb\xc1\x2a\x18\x4c\x37\x9b\x92\x59\x8d\xcd\x45\x4f\xa9\x0d\x1a\x22\xbd\xdd\xac\x8a\xf5\x7d\xc4\x6d\x96\xa7\x08\x2e\xdb\x99\x72\x6a\x94\x9b\xb8\x10\x79\xed\x0a\x47\x9d\x38\xdb\x45\xcb\x51\xc3\x1f\xf8\x39\x77\x57\x6c\x47\xe9\x7a\xd6\x3a\x6f\x50\xbf\x2b\x9a\xdf\x37\x69\x78\x3c\xf9\xe1\x2f\x5f\x9b\xaf\x4f\x3f\x3e\xd8\xf7\x17\xda\x6f\xfe\xa3\x5f\x6e\xf8\x2e\xfe\x2f\xfe\xe3\xff\xbf\xf6\xfb\x06\x6f\x88\xe6\x1f\xfd\x76\xc7\xfb\xa3\xf9\xf5\x4f\xb3\xfd\x17\xfb\xf4\x17\xd7\x45\x9f\x1e\xa6\xcc\x3e\x33\x1a\x75\x77\xa9\xb6\xf2\x3a\xed\xba\xd5\xf9\xa0\xd2\x2c\xb8\x33\x2a\xd6\xd5\x6d\xaa\x53\xf1\x4a\x5a\x1c\x67\x3a\x5a\x77\x53\xa2\xb3\x76\x57\xcd\x58\x83\x5e\x37\x9f\x72\xb4\x6d\x7e\xd3\x0e\x23\xba\xd2\xc7\xbd\x72\x25\xb7\x89\x3b\x45\x77\xe0\xd6\xac\x82\x05\x8c\x53\x9f\x3e\xbd\x6b\x58\xee\x48\x53\xb9\xe4\x06\x9a\x15\xaa\xc5\x42\xa7\x52\x37\x14\x3f\x6a\x96\x1c\x00\xb3\xcd\xd5\x38\xb7\x6e\x17\x7b\xdd\x45\xff\x5c\x7d\xef\x6a\x05\xee\x9b\x79\x1d\xdb\x67\xbf\xdd\x1b\x05\x0e\xd7\x0f\x8c\x02\x95\xf3\xf7\xf7\x44\x81\xf4\xf1\xe7\xdd\x8f\x3f\x4d\x6c\xfc\x4f\x88\x02\xdf\xd9\xff\xa5\xbf\xb9\xff\x8d\xef\xec\xff\xcb\xeb\xb5\xb7\xa8\x4e\x27\xac\x7f\xc4\xab\x54\x4f\x55\x3d\x36\x16\x97\xef\x42\x1d\xdf\x62\x3b\xc7\x97\x1b\x4b\x8f\x2f\x6b\x79\x7c\xd9\x63\x6d\x34\x9a\x33\xe3\x99\x96\x87\x12\x1e\x0b\xc6\x38\x0f\x96\x7e\x7c\x38\x19\xf0\xe2\xf3\x97\xf9\x4c\x3e\x16\x33\x53\xaf\xb5\x3b\x2d\xa3\x58\xeb\x7c\xa5\x98\x46\xa5\x63\xb6\x4e\xa8\xd4\x6b\x95\xe1\xa5\xc6\xc3\x71\x85\x46\x36\x7b\xa1\xed\x59\x86\x89\x46\xab\x58\x35\x5a\xc3\x44\xd9\x1c\x26\x7e\x39\xa5\x3a\xe2\x73\x62\x2f\xe1\x33\x4f\xbe\x64\x7e\xf4\xf8\xe1\x63\x0d\x8f\x5e\xb1\x3a\x7a\xcd\xe4\x67\x86\x5a\xcc\xdf\xff\xfb\x20\xf3\x2c\xe6\xdf\xb2\xec\x21\x83\xa7\x46\xf9\x81\x90\x37\x2c\x7a\xfa\xf3\xbc\x4f\xbe\x7d\x39\x7e\x8b\xe4\xe2\xcb\x87\x98\xfb\x44\xf9\x2d\xc3\x5f\xc9\x3d\xd1\xad\x15\x9b\x5d\x33\xf1\xcb\xe3\xdd\x6f\x2a\xc9\xc7\xe0\xfd\x8d\x05\x78\xee\x83\x53\x3a\x8b\x26\xcf\xac\x3f\xfe\xd0\xec\xe9\xbf\x0f\xb2\xf7\xa8\xec\x96\xa1\x17\xd9\x3c\xb5\xf0\x90\x70\x83\x26\x87\x5f\xae\x3d\xfe\xfd\x20\xe3\x0e\xba\x6e\xd9\x76\xce\xe4\xa9\x69\xce\xfc\x73\x62\x1e\x84\xf1\x73\xdb\x2e\x7e\x08\xf7\xc9\x97\x8f\xb2\xf4\x42\xe5\x4d\x83\xaf\xb3\xbc\xe5\xf4\x5b\x56\x47\x4b\xeb\xf4\xdf\xc7\x59\x1a\x2d\xad\x17\x6c\x7c\xc8\xe6\xa9\x75\xa1\x8c\x6e\xb8\xfb\xfc\xcb\xbd\x17\x1f\x3f\xc8\xc8\xb3\xc2\x5b\x86\x5e\x65\xf7\xa6\x18\x76\xf1\x83\x38\xe7\x8f\x1f\x64\xed\x59\xe1\x2d\x6b\xaf\xb2\x7b\x6a\xed\x22\x92\xf1\xcd\xba\x7e\x71\x36\xef\xf9\xe3\x47\xd9\xfb\xa8\xf0\xa6\xbd\x4f\xb3\x7b\x6a\xef\xe1\xfe\xcd\xf6\xf5\x7c\xe2\xe7\xc5\xc7\x0f\x32\xf8\xac\xf0\x96\xc1\x57\xd9\xbd\xd8\x35\x70\xa2\x68\x29\xc3\xcf\x09\x16\x45\x32\xe6\x81\xb8\x51\x86\xcb\x93\x17\x2e\xbf\x7c\x54\x39\x2e\x54\xde\x2c\xc9\x75\x96\xb7\xa2\x44\x24\x17\x9f\x13\xf1\xc6\xf1\x85\xdc\xdc\x28\xc1\xd9\xfc\x8f\xb6\xfd\x55\xc3\xef\xb2\xfa\xaa\x8b\xfa\xf4\xeb\x07\xd9\xff\x54\xe9\xad\x42\xdc\xc8\xf6\xc5\x92\x9c\x64\x6f\x17\xe7\xc4\x39\x8b\xb9\xcc\xe7\xe7\x13\x70\x8b\xb5\xac\x39\xf8\x8a\xd9\x99\x96\x69\x74\xcc\xa3\xe8\xb5\x9e\x44\xbd\x76\xee\xc5\x76\xdb\xc5\x5a\x3e\x61\xc5\xa1\x94\x89\x5f\x4e\x12\xbf\x26\xfa\x05\xb3\x65\x3e\x7e\x4f\xfc\xfb\xcf\x04\x7c\x3c\x10\xfc\x79\x47\x53\x46\xf1\xb1\x2d\xdf\x97\xe2\xdd\x56\x3e\x55\xb3\x37\xf2\xd4\x4f\x79\x62\x62\x24\x5d\xd7\xf1\xc7\x87\xba\xf7\x39\x61\x2d\xb7\xe7\x2f\xf3\xd0\xe1\xcf\xeb\xe2\xde\x0d\xd6\x36\x92\x8b\x77\x1b\xf6\xa8\x61\x6f\xd3\xb9\x62\x3c\x31\xeb\xe5\xae\xe2\x5e\xdc\x96\xf2\x7e\x13\x1e\x94\x1c\xad\xb8\x08\x30\x6f\x34\xe4\x94\x72\x9f\x21\x97\x4a\xf6\x86\x3c\xed\x08\xbf\xd1\x92\x88\xcf\xa5\xbf\xba\xd3\x92\x4b\x25\x7b\x4b\x2e\x7e\x77\xf0\xed\x66\x9c\x1a\xd4\xbb\x2d\xb9\xd4\x73\x32\xe6\xa1\x97\xf0\xd4\x18\x16\xc5\x2f\x1b\x74\x11\x38\xee\xb3\xe8\x5a\xd1\xde\xa4\xab\xd8\xf8\x55\x8c\x1a\x41\x14\x8f\x43\xd9\x6e\x56\x12\x0f\x3f\x79\x97\x10\x4b\x6f\x9e\xe0\x81\x37\x77\x65\x2c\x0f\xd9\xfe\xbf\x00\x00\x00\xff\xff\x8b\x07\x72\x9b\x0a\xc9\x00\x00") - -func set_optionsCoreSqlBytes() ([]byte, error) { - return bindataRead( - _set_optionsCoreSql, - "set_options-core.sql", - ) -} - -func set_optionsCoreSql() (*asset, error) { - bytes, err := set_optionsCoreSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "set_options-core.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5b, 0x96, 0x60, 0x12, 0xa4, 0xa1, 0x5b, 0xe1, 0x7a, 0xc1, 0xe1, 0x79, 0x85, 0xe8, 0x98, 0x66, 0xba, 0x68, 0xd6, 0x80, 0x17, 0x32, 0xb3, 0x15, 0x45, 0x16, 0xb3, 0xf2, 0xc5, 0xfd, 0xb, 0xc0}} - return a, nil -} - -var _set_optionsHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\xbd\x79\xaf\xa2\xc8\xfa\x38\xfe\xff\xbc\x0a\xd2\xb9\xc9\x99\x89\xdd\x23\xc5\x52\x50\x3d\xdf\xb9\x09\x2a\xee\xfb\xae\x93\x89\x29\xa0\x50\x14\x41\x01\xd7\x9b\xcf\x7b\xff\x45\xd4\x23\x72\xdc\xb5\x7b\x7a\x7e\x4d\x3a\xa7\xc5\xaa\x7a\xb6\x7a\xb6\xaa\x7a\xc0\x2f\x5f\x7e\xf9\xf2\x85\x2a\xdb\xae\xd7\x77\x48\xad\x92\xa7\x34\xec\x61\x05\xbb\x84\xd2\x66\xe3\xc9\x2f\x5f\xbe\xfc\xb2\x69\x4f\xcc\xc6\x13\xa2\x51\xba\x63\x8f\x0f\x1d\xe6\xc4\x71\x0d\xdb\xa2\xd0\xef\xf0\x77\x10\xe8\xa5\xac\xa8\x49\xbf\xb7\x19\x1e\xea\xf2\x4b\x4d\xae\x53\xae\x87\x3d\x32\x26\x96\xd7\xf3\x8c\x31\xb1\x67\x1e\xf5\x27\x45\xff\xe1\x37\x99\xb6\x3a\xfa\xf8\xad\x6a\x1a\x9b\xde\xc4\x52\x6d\xcd\xb0\xfa\xd4\x9f\xd4\x5b\xa3\x9e\x14\xdf\xfe\xd8\x83\xb3\x34\xec\x68\x3d\xd5\xb6\x74\xdb\x19\x1b\x56\xbf\xe7\x7a\x8e\x61\xf5\x5d\xea\x4f\xca\xb6\x76\x30\x06\x44\x1d\xf5\xf4\x99\xa5\x7a\x86\x6d\xf5\x14\x5b\x33\xc8\xa6\x5d\xc7\xa6\x4b\x8e\xd0\x8c\x0d\xab\x37\x26\xae\x8b\xfb\x7e\x87\x05\x76\x2c\xc3\xea\xff\xb1\xa3\x9d\x60\x47\x1d\xf4\x26\xd8\x1b\x50\x7f\x52\x93\x99\x62\x1a\xea\xe7\x0d\xb3\x2a\xf6\xb0\x69\x6f\xba\x49\xf9\xba\x5c\xa5\xea\x52\x2c\x2f\x53\x99\x24\x25\xb7\x33\xb5\x7a\x8d\x2a\x15\xf3\x9d\x5d\xff\xdf\x07\x86\xeb\xd9\xce\xaa\xe7\x39\x58\x23\x2e\x95\xa8\x96\xca\x54\xbc\x54\xac\xd5\xab\x52\xa6\x58\x0f\x0c\x3a\xee\xd8\x53\xed\x99\xe5\x11\xa7\x87\x5d\x97\x78\x3d\x43\xeb\xe9\x23\xb2\xfa\xe3\x7b\x20\x54\xfd\x4f\xdf\x03\xe5\x46\xaf\xbe\x1f\x83\x5b\x6c\xf7\x73\xb7\x25\x70\xa3\xc8\x97\x90\x05\x7a\x1d\x80\xfb\xdd\x33\xc5\x84\xdc\x0e\xf4\xdc\x81\xf5\xa9\xea\x11\x5d\x27\xaa\xe7\xf6\x94\x55\xcf\x76\x34\xe2\xf4\x14\xdb\x1e\x5d\x1e\x68\x58\x1a\x59\xf6\x02\xcc\x59\x2e\xf6\x15\xdd\xed\xd9\x56\xcf\xd0\xee\x19\x6d\x4f\x88\x83\xdf\xc7\x7a\xab\x09\x79\x62\xf4\x81\x92\xa7\xa8\xb8\x6f\xac\x49\xb4\x3e\x71\xfc\x81\x2e\x99\xce\x88\xa5\xde\xc5\x42\x60\xf8\xc4\x21\x73\xc3\x9e\xb9\xbb\xef\x7a\x03\xec\x0e\x1e\x04\xf5\x3c\x04\x63\x3c\xb1\x9d\x8d\x39\xee\x7c\xea\xa3\x60\x1e\x95\xa5\x6a\xda\x2e\xd1\x7a\xd8\xbb\x67\xfc\x5e\x99\x1f\x50\xa5\x9d\x5d\x3e\x40\x74\x70\x24\xd6\x34\x87\xb8\xee\xe5\xe1\x03\xcf\xd1\xfc\xb8\xd3\x33\x6d\x7b\x34\x9b\xdc\xd0\x7b\x72\x8d\xa4\x6d\x2f\x6c\x38\x77\x02\xde\x3b\xdd\x9b\x07\x6c\xfc\x84\xae\x13\xe7\xb6\xae\x7b\xf0\x0f\x0c\xd9\x89\xf5\xb6\x41\xbe\x6b\xbd\x03\x49\xd0\x15\x5f\x1b\x31\xd9\x0c\x18\x78\x57\x67\xc0\x3d\x72\x40\xca\xea\xaa\x1a\x0d\xde\x2d\xfd\x96\xce\xf6\x96\x0e\xfb\x6a\x47\xc3\xf5\x7a\xde\xb2\x37\xb9\x0e\x72\xd3\xd3\x9e\xdc\xda\x93\xdc\xda\x6d\x1f\x4a\x2e\x77\x56\xf6\xe6\x7e\xb5\xdb\x75\x2f\xa6\xac\x6e\x9b\xcc\x6d\x8c\xdc\x48\xdb\x75\x67\xd7\x30\xbf\x77\x56\x6d\x8d\xdc\x99\x17\xbc\xab\xc1\x04\x3b\x9e\xa1\x1a\x13\x6c\x5d\x0c\xde\xd7\x86\xf6\x26\x77\xe6\x26\xef\x11\xed\x5e\x0a\x4e\x0f\xbc\x1b\xbf\x2f\xbc\x5b\xf0\x6d\x3b\x7e\x73\xf8\xdb\xc9\xdc\xcc\xe4\xee\xe3\x26\x3e\xec\x53\x3f\x5f\x19\x7a\x37\x52\xd0\xb7\x9d\x49\x6f\x6c\xf4\x77\x09\xc3\x05\x12\x42\x3d\x6f\xe6\xf1\xfe\x7c\xef\x12\xe4\x5b\x95\x73\x3b\x3a\x5e\xca\x37\x0a\x45\xca\xd0\xb6\x98\x13\x72\x52\x6a\xe4\xeb\x37\xc2\x3e\xa3\x74\x2f\x80\xbc\x9b\xee\xcb\x90\xfc\xbb\xdb\xd9\xdf\x47\xe9\x9a\x5c\x69\xc8\xc5\xf8\x03\x32\xdb\xe4\xd9\x2e\x99\xde\x8d\xf9\x08\xc8\xcd\xa3\x35\x72\x63\xdf\x43\x36\x7b\x33\x87\x67\xac\xfe\x1e\xfe\x4e\x83\xb8\x6d\xec\x2e\xef\xbb\xad\xf3\x2e\xc9\xbb\x99\xb7\x9d\x07\xb8\x87\x97\xed\x90\x1b\xfb\xee\xd2\xbf\xdb\xe9\xd9\xe7\x8b\xb7\x50\x14\xf2\x21\x97\x3b\x07\x5c\xc2\xae\xa3\x94\x4a\x55\xe5\x94\x54\x3f\xd1\x79\x6c\x6c\x56\x1c\x86\x4a\x7e\xb5\x66\x63\xe2\x18\xea\x5f\x7f\xff\x76\xc3\x28\xbc\x7c\x60\x94\x89\x5d\xef\x57\x6c\xad\x88\xe9\x6f\xc5\xdc\x30\x42\x37\x9c\x93\x43\x92\x8d\x62\xbc\x9e\x29\x15\x2f\xf0\xd3\xc3\xfd\xfe\x81\xba\xcf\xd4\x07\x42\x2f\xc0\xd8\x73\xf7\x04\x8c\x0d\xaf\xfe\xf0\x03\xf1\x9f\xa9\x7b\x18\xf1\x59\xbf\x01\x82\xdc\xae\xcb\xc5\x5a\x08\x84\x39\xe9\xbb\x53\x73\xaf\x8b\xf1\xb4\x5c\x90\x3e\x60\xf8\xe3\x97\xed\x2e\x5c\x11\x8f\xc9\xd7\xfd\x77\x54\x7d\x35\x21\x5f\x77\x43\xfe\xa0\x6a\xea\x80\x8c\xf1\x57\xea\xcb\x1f\x54\x69\x61\x11\xe7\x2b\xf5\xc5\xdf\x9c\x8b\x57\xe5\xcd\x7c\xed\x20\xef\xe1\xfd\x72\x04\xf1\xb8\x71\x07\x38\x5e\x2a\x14\xe4\x62\xfd\x02\xe4\x6d\x07\xaa\x54\x3c\x06\x40\x65\x6a\xd4\xdb\x7e\xdb\x6d\xff\x9d\xeb\x03\x79\x0b\x63\xde\xb3\xbf\xc3\xf9\x2e\xa1\xab\xfc\x1c\xc9\xb2\x58\xaa\x87\xe4\x49\xb5\x32\xf5\xf4\x3b\x59\xc1\xfd\xb7\x23\xf4\x07\x28\x21\x42\xee\x61\xfe\x03\x10\x5f\x00\xe5\x7c\x74\xd2\xaf\x55\xf2\xd4\xc4\xb1\x55\xa2\xcd\x1c\x6c\x52\x26\xb6\xfa\x33\xdc\x27\xbe\x18\x6e\xdc\x2f\x0c\x92\x7b\x5d\xd1\x76\xe4\xef\x75\xf5\x40\xff\x7e\x6e\x4f\xc9\xf2\x5d\xb3\xaf\xc2\xa7\xaa\x72\xbd\x51\x2d\xd6\x02\xdf\xfd\x42\x51\x14\x95\x97\x8a\xa9\x86\x94\x92\x29\x9f\xfb\x42\xa1\xb1\xf5\x77\xb5\x7a\x35\x13\xaf\xfb\x3d\xa4\x1a\xf5\x9f\xde\x7f\xa8\x9a\x9c\x97\xe3\x75\xea\x3f\x60\x73\x17\x9e\x8d\xab\x86\xf8\x1c\x77\xd7\xc0\xbf\x8c\x39\xe6\x14\x73\xb7\x78\xaa\xe7\xf8\xbb\x01\xc3\x3b\x8b\xef\x5f\x3d\xc4\xe1\xaf\xbf\x50\x54\x5c\xaa\xc9\x54\x2b\x2d\x17\xa9\xff\x80\xbf\xc0\xdf\xd1\xff\x80\xbf\x98\xbf\xff\xfb\x1f\xc6\xff\xcc\xfc\xc5\xfc\x4d\xd5\xb7\x8d\x94\x9c\xaf\xc9\x1b\xa1\xc8\xc5\xc4\x6f\x27\x25\x73\x43\x1c\x78\x52\x32\xd7\x31\x7c\x6b\xc9\xfc\xbf\x47\x24\xf3\x31\xa6\xee\xe4\xf0\x1e\x87\x6f\x13\xc4\x21\x6c\x7f\x80\xe8\x53\x4c\x51\xb5\x8d\xac\xa8\x3f\x0f\x1e\xe0\xf3\xf6\xeb\x7a\xa7\x2c\x53\x7f\x06\x2d\xe2\xb7\x53\x56\xfb\x52\x1a\xc3\x00\x43\x24\xee\xcd\xf8\x76\x0a\x4f\xa6\x40\xcf\x52\x79\x0a\x68\x88\xd2\x23\x83\x3c\x26\xf7\xa0\x65\x1f\xa9\x3d\x95\xe6\x3d\x4d\xed\x09\xa0\x61\x6a\x83\x46\x72\x91\xda\x4d\xe4\xd2\x88\x8e\x67\xa6\xd7\xf3\xb0\x62\x12\x77\x82\x55\x42\xfd\x49\xbd\xbd\xfd\x71\xdc\xba\x30\xbc\x41\xcf\x36\xb4\xc0\x51\xda\x11\xaf\xc1\xfc\x77\xc7\xa2\x6f\x60\xb7\xb1\xb7\xb5\xc5\xe0\xe2\x7b\xcb\x91\xa1\x51\x8a\xd1\x37\x2c\xcf\x4f\x0c\x8a\x8d\x7c\x7e\xcb\x0e\x1e\x6f\xd2\x78\x4a\x1d\x60\x07\xab\x1e\x71\xa8\x39\x76\x56\x86\xd5\x0f\x75\xb3\x66\xe3\xf7\x94\x9f\x32\x2c\x8f\xf4\x89\x13\xea\xa2\x9b\xb8\xef\x52\xee\x18\x9b\xe6\x47\x34\x9e\x3d\x36\x3f\x22\xf9\x95\xe1\xf9\xdf\xde\x7b\x7e\x9c\xf6\xf0\xba\xe1\x51\x71\x84\x77\x3b\xde\x45\xe2\x91\xe5\x07\x81\x4c\x26\xa6\xe1\xef\xd9\x53\x9e\x31\x26\xae\x87\xc7\x13\x6a\x33\x67\xfe\x2d\xb5\xb6\x2d\xf2\x91\xd0\x73\xab\xa2\x7d\x3e\xba\x5b\x4e\xdd\x46\xf3\xfb\xe2\xeb\x0c\xd4\x9d\x1a\x4a\xd5\xfa\x36\xa3\x03\xfe\x17\x99\x62\xbc\x2a\xfb\xe9\x57\xac\xb3\xfb\xaa\x58\xa2\x0a\x99\x62\x53\xca\x37\xe4\xf7\x7b\xa9\x7d\xb8\x8f\x4b\xf1\xb4\x4c\x81\x6b\xcc\x3c\x2c\xf6\x30\xa0\x0f\xaa\xb8\xdb\xf4\xa0\x2c\xb2\xf4\xe6\xd8\xfc\xf5\xed\x0c\xc7\x6f\x5f\xbf\x3a\xa4\xaf\x9a\xd8\x75\x7f\x0b\x4f\xd7\xf6\xac\xe2\x84\x6e\x41\xee\xb7\x0b\x13\xb5\x5d\x1b\x3f\xcd\xd9\x76\x47\xe7\x9d\xaf\xd3\x96\x71\xd8\xab\x3b\x4d\xe6\xc9\xee\xaa\xad\x9d\xea\x0e\x98\xd3\xdd\xb7\xdb\x7f\x27\x06\xf0\xf0\x92\x85\x9d\xde\x5e\x78\x91\xda\x06\x61\x7e\x37\xa5\xbd\xc4\x08\x55\x6a\x15\xe5\x04\x15\xeb\x5c\xe1\x68\xbb\x43\x77\x99\xa1\x77\x58\xa1\xe6\xdf\x0d\xed\x1c\x6d\xfb\x3d\x9f\x67\xb5\x6e\x07\x67\xa7\x76\x21\x9b\xe9\x9d\xf3\xf4\x1f\xb7\xb8\xce\xf5\xfc\xe4\x1f\x7c\x7c\x3a\xa3\xcd\xbe\x1e\x9f\x6e\xd2\x88\x87\x0d\xd3\xa5\x86\xae\x6d\x29\xe7\x95\x6d\xbf\x51\xf6\xac\x1c\x76\x70\x76\x72\xd8\x9f\x5b\x9f\xa1\x2d\x70\x98\x7c\x93\x15\x9e\x3a\xc7\x3e\x3d\x70\x27\x96\xc0\xce\xa8\x3f\x11\xef\x74\xec\xbd\x1c\x1d\xc2\x70\x98\x88\xdb\xfa\xbf\x1f\x26\x87\x02\x93\x3d\xf3\x0e\xb1\x29\x3c\xc6\x21\xd8\xbb\x3a\x68\xdb\x77\x36\xd1\x6e\xee\xfb\xae\x3a\xbb\xdb\xd0\x39\xfb\x07\x5e\xc0\x87\x7c\xc0\xc3\x66\x4f\xb5\x0d\xcb\x3d\xad\x83\x3a\x21\xbd\x89\x6d\x9b\xa7\x5b\xfd\x93\x4f\x9d\x9c\x9b\x6b\xbf\xd9\x21\x2e\x71\xe6\xe7\xba\x6c\xf2\x50\x6f\xd9\xf3\xd3\x24\x63\x7d\xae\xd7\xc4\xb1\x3d\x5b\xb5\xcd\xb3\x7c\x85\xe7\x68\xaf\x2c\x04\x6b\xc4\xf1\xd3\x8b\xed\xf7\xee\x4c\x55\x89\xeb\xea\x33\xb3\x77\x56\x51\x76\x8c\x63\xc3\x24\xda\xf9\x5e\xe7\xcd\xea\xcc\xde\xf5\xb3\x56\x76\xe6\x3c\xe4\x4a\xcc\xbb\xdd\xdb\x5c\xf7\x5f\xf7\xb2\xfc\xda\x30\x76\x11\xc7\xf7\x0a\x6b\x77\x31\xfa\x64\x98\xbb\x88\xeb\x63\xd8\x3b\xdd\xfd\x42\x18\x0c\x9c\xec\xbc\x4c\x37\xaf\x2d\x73\x8e\xab\xaa\xce\x2c\x85\x36\x99\xbf\xba\x65\xc5\x8f\x80\x4f\x06\xc0\x9d\xe5\xdb\x33\x47\x7d\x2f\xd3\x38\x13\x7a\xf6\xee\xe4\xed\xed\xeb\xd7\xf3\x4b\xb1\xf3\x76\xb0\x3b\x58\x7b\x56\x9c\xbb\x5a\xc0\x5f\x5f\x9a\x2f\xec\x5c\xe2\x23\xd1\xcb\xaf\x85\x39\x8b\x36\x54\x89\x78\xa9\xd3\xae\x38\xf2\x52\x97\xed\x3a\xf8\x64\x87\x8f\x35\x9d\x57\xfa\x5d\x44\xf7\xde\xeb\x02\x46\x9f\x24\xc3\xed\xb9\xc4\x34\x89\x43\x29\xb6\x6d\x12\x6c\xed\x63\x92\xa1\x92\x9e\x75\x14\x7f\xb7\xdf\x1d\xc7\xe4\x43\x35\x51\x2f\x14\xad\x8f\xea\x99\xc2\x8d\x81\x63\xfa\x93\x95\x9f\x3e\xd5\x3d\xbf\x36\x98\x8a\xa7\xe5\x78\x8e\xfa\xf5\xd7\xa0\x04\xff\x4b\xd1\xbf\xfd\x76\x0d\xd4\xa9\xe1\x7b\xa1\xfd\xbf\x0f\x72\xbc\x01\xde\x91\x4c\x43\xe0\x43\x02\xf7\x09\xbc\x68\x4a\xa7\x4f\xb8\x5f\x60\x5c\xa7\x6b\x16\x6e\x8c\xa4\xb7\xb8\xb0\x67\x62\xe9\xb5\xfa\x80\xd7\x44\xd3\x2b\x58\xbe\x57\x3c\xbd\x93\xd9\x27\x23\xea\x15\x6c\x1f\x63\xea\xb9\x01\x17\xa2\xea\x51\x4d\xc8\x0b\x75\x75\xaf\x9f\x41\x92\x6e\x5e\x44\xed\x7c\xff\x95\xa5\xd9\xad\x81\xf7\x72\x0c\x3d\xd9\xf7\x80\xfa\xa4\xbd\x6c\x56\x01\xe7\x97\x11\xe7\x16\x68\xff\xc8\x12\xcb\x5b\xf6\x88\x35\x27\xa6\x3d\x21\xa7\xb6\x2d\xbd\xe5\x66\xc1\x33\x33\xbd\x33\x8d\x63\xe2\xe1\x33\x4d\x9b\xa5\xd6\xb9\x66\xd7\xe8\x5b\xd8\x9b\x39\xe4\xd4\x0e\x1b\x82\xbf\xfd\xf5\xf7\x21\x77\xf9\xdf\xff\x9d\xca\x5e\xfe\xfa\x3b\x2c\x73\x32\xb6\xcf\x6c\x86\x1d\x60\x59\xb6\x45\x2e\xe6\x42\x07\x58\x1f\xc1\xec\x38\x33\xc6\xa4\xa7\xd8\x33\x4b\xf3\x77\xac\x45\x07\x5b\x7d\x12\x5e\x8d\x1d\x87\xd6\x8d\x24\x36\xd0\xfa\x44\xbb\xbe\xdc\xda\xed\xfd\x19\xda\xde\xda\xf6\x25\x5c\xb7\xb8\x88\xad\xb9\xf9\xf5\x72\x57\xaa\xc3\x6a\x72\xfd\xc2\x3e\x69\x70\x47\x2a\xb8\x4b\x7a\xdf\x3a\xe2\x75\x4c\xdc\x58\x3c\x77\x91\xa9\x8b\xeb\x8f\x5b\x98\x3c\x1b\x69\x5f\xc6\xe6\xcd\xf5\x87\x17\x19\xbd\x12\x16\x4e\xb3\x9a\xc0\x1e\xa6\x74\xdb\xb9\x72\x5a\x44\x25\xa4\xba\x74\x85\xbd\x33\x20\x2f\x9d\xba\xdc\x02\x36\x53\xac\xc9\xd5\x3a\x95\x29\xd6\x4b\x1f\x4e\x5e\xfc\x00\x5d\xa3\x7e\x7d\x03\x3d\xc3\x32\x3c\x03\x9b\xbd\x6d\x15\xcc\xef\xee\xd4\x7c\xfb\x4c\xbd\x31\x34\x40\x5f\x68\xf8\x85\x66\x29\x20\x7e\x65\xc4\xaf\x9c\xf0\x3b\xcd\x32\x1c\x82\x11\x9a\x79\xfb\xed\x8f\xdb\xa0\x33\xbd\xed\xd3\x0d\x47\x52\x55\x56\x3d\xcf\x36\xb4\xcb\x98\x10\xe4\x85\x7b\x30\xb1\xbd\x99\x4b\xde\xa3\x4c\xcf\xb0\x3e\x3c\x51\x71\x11\x1f\xc7\xd1\x9c\x78\x0f\x3e\xae\x87\x35\xad\x17\xde\x97\xba\x88\x83\xe7\x78\x96\xb9\x07\x07\xdf\xdb\xc6\xb4\x7d\x76\xed\x9f\x67\x5e\x44\x01\x59\x9a\xb9\x8b\x0d\xb8\x47\xb1\xf3\x60\x37\xa0\x10\x39\xc0\xdf\x83\x42\xe8\x8d\x6d\xcd\xd0\x57\xb7\x73\x21\x02\xc8\xdc\x85\x42\x3c\xe2\x62\x57\xc6\x7c\x03\x1e\x81\x83\xec\x7d\x78\x36\x93\x8e\xfb\x7d\x87\xf4\xb1\x67\x3b\x97\x75\x0a\xd1\x80\x46\xf7\x80\x47\x3e\xf8\xed\x9e\x65\x6f\xa9\x39\x97\xa1\x33\x02\xb8\x6b\xaa\x01\xed\x83\xdf\xcd\x82\xbf\x52\xbd\x8c\x80\x47\xc2\x5d\xd2\x01\x20\x88\xe0\x7d\xe9\xb3\x71\x00\x97\x11\x21\x88\xee\xe3\x84\x39\x9a\xe8\xdd\x62\x73\xfb\xe0\xec\x25\x4c\x80\x16\x78\xee\xae\x19\x01\xec\x96\x9d\xf7\x25\xfa\xc5\x19\x07\x80\x11\xe0\x7d\x9c\x70\x3d\xdd\x58\xee\x1f\x22\xb0\xc7\x66\x4f\x37\x88\x79\xd1\x35\x02\xc0\x03\x70\x97\x13\x06\xfc\xfe\xec\x64\xbf\xa7\xbd\xbc\xc2\x06\x14\xee\x73\xf3\x00\xf6\x0c\xab\x4f\x5c\xaf\xf7\x71\xd7\xfc\x0a\x2a\x01\x89\xf7\xcd\x88\x70\x14\xae\xfd\xe3\x09\x7c\x39\x98\x00\x86\xa6\x59\x6e\x87\xe4\x4c\xac\xbd\x78\xd6\x7e\x6f\xb0\xfd\x70\xde\xbe\xa7\x1e\x7c\xa6\xde\x52\xf1\x76\x2e\x05\xab\x45\xae\x54\xcc\xc8\xe5\x78\xa1\x98\x8c\x09\x2c\x23\x71\x2c\xec\xf2\xe5\x62\xa2\x56\xcd\xa7\x5a\x39\x21\x15\xcb\xc7\x0b\x95\x7c\x26\x59\xe2\x6a\x82\xdc\x69\x35\x1b\x61\x09\x9d\x45\xc2\x6c\x90\xc4\xaa\xe5\x4e\x3a\x93\x67\xe2\x19\x36\x59\xac\x70\xb1\x76\x3e\x59\x28\x26\xf2\xc9\x6c\xa3\x58\x6e\x30\xe9\x0e\xdb\x2d\x24\x6b\xe9\x52\xb1\x11\x97\x4b\x52\xad\x25\x54\xe2\x42\xa9\xcd\xa4\x6f\x46\xc2\x6e\x90\x48\x7c\x2b\x56\xee\x48\x7c\x87\x6b\x49\x72\xba\xdd\xaa\x32\x8d\x5c\x89\x69\x94\xb8\x58\x23\x95\x6e\x54\x04\x4e\x6e\x94\x73\xa5\x22\x53\x49\x37\xb9\x56\x35\x5d\xca\x54\x8b\xb9\x5c\xfa\x68\x1a\xee\x2a\xdb\xd8\x64\x71\x57\xa6\x61\x57\xea\x76\xa8\x52\xfd\xdd\x25\x97\x4b\x1a\x3e\x53\xec\x67\xca\x73\x66\xe4\x06\xe5\xf8\x58\xac\x70\x4f\x7a\x77\xcf\x01\xf9\x4b\x38\x3d\x5a\x94\x7c\xa6\xc0\xe7\x6d\x9d\xd3\x75\x46\x4f\x1d\x90\x3f\x6a\x04\xfb\x43\xf2\x80\x0d\x70\x02\xc3\x71\x90\xe3\x58\x9e\xf5\xa9\x02\x1b\x95\xfd\xdf\xa7\x05\x31\xfa\x03\xef\xd3\x57\x8a\xf9\x4c\x7d\xda\xc2\xef\x8d\xc8\xea\xd3\x57\xea\xd3\xa3\x46\xf3\xe9\xff\xce\x69\xf4\x35\xb2\x98\xcf\x14\x00\x3e\x59\x61\x4a\x18\xb6\x92\x64\xd2\x0d\x99\x67\xa4\x42\xbb\x91\x6c\xa4\x59\xa9\x93\x95\xda\xed\x54\xbb\xdd\x64\x9a\xe9\x76\xa7\x53\x85\x72\xa7\x2d\xd7\xcb\xb9\x44\xbb\x5b\x93\x5a\x50\x68\x97\xb8\xfb\x28\x61\x10\x87\xa0\x20\xd0\xbc\xe0\x0b\x08\xfa\x84\xe0\x99\x37\xe8\x39\x64\x3a\x33\x1c\xa2\xf5\x74\x13\xf7\x3f\x7d\xdd\xce\xe8\x3d\xb0\x59\x11\xf2\x9c\x40\x23\x01\x82\x1f\x49\xf8\x47\x64\x31\x1f\xc9\xe2\x4f\x90\xf5\x1d\x66\x82\xe5\x58\x1e\x09\x1c\xc3\x41\xfe\x87\x92\x56\x90\xac\x8d\xb4\xe8\x63\xb2\xc0\x3f\x24\x2d\x9a\x86\x9c\x20\xf0\x00\x22\x5f\x5a\xbc\x4f\xd5\xc0\x1e\x93\x9e\x66\x8f\xb1\x61\x6d\x28\xb1\x66\xa6\xe9\x7a\x2b\x93\xfc\xae\xda\xe3\xbb\xc0\x33\xbc\x00\x91\x48\x0b\xa2\xb0\xf5\x1b\x9c\x0f\xde\xb4\x17\x3d\x6f\xe0\x10\x77\x60\x9b\xda\xa7\xaf\x14\xfd\x99\xfa\x34\xde\xe4\x20\x81\xef\x36\xd3\x34\x30\xfa\x83\xe3\x2f\xef\xc2\x0d\x38\x81\x13\x39\x9a\x17\x84\x1f\x49\x11\x80\xb0\xc9\xa0\x04\x96\x11\xc1\x35\x4f\xb1\x89\x71\x77\x81\x66\x44\x91\x43\x34\x8f\xc4\xad\xea\x0b\x3e\x68\xc3\xd2\xcd\xed\xa6\x90\x46\x5c\xcf\xb0\xfc\xcf\x3e\xbb\x0f\x66\x03\x77\xb1\x2b\xf2\x22\x42\xac\x08\xc5\xad\x7e\x6d\xb5\xde\xf5\xb0\xe3\x19\x56\xbf\xa7\x60\x13\x5b\x2a\xd9\x50\x03\x68\x9a\xfe\x9d\xde\x5e\xb7\x63\x60\x8e\x31\x30\x7e\x6e\xb0\x91\xa7\xbf\xc2\xf8\x00\xf7\x33\xf5\xe9\x50\x52\xe8\xab\x36\xf6\x8c\x39\x79\x98\x23\xf6\x36\x43\xfe\xd6\x6a\xc5\xee\xa8\xe2\x18\x61\x37\xf5\xdf\x4a\xce\x3b\x0c\xdf\x5c\xce\x21\x8e\x6e\x93\xf3\x53\xfa\x7c\x25\xc1\x3a\x55\x79\xf7\x68\x82\xb5\xaf\xbe\x7b\x57\xaa\x8d\x67\x42\x08\x21\x0d\x01\x9d\x55\x58\x9d\x40\xa0\xf0\xb4\xae\x88\x9a\xc6\x03\x01\x40\x8d\x81\x22\xd1\x15\x86\x46\x80\xd0\x88\x43\xac\xa2\x03\x91\x65\x35\x91\x81\x1c\xaf\x8b\xb4\xae\x22\xb0\x59\x4b\xb1\x50\x40\xba\xca\x63\x0d\xf3\x40\xd3\xa0\x80\x34\xac\xd1\x82\xc2\x21\x46\x10\x14\x8e\x67\x59\xa0\x22\x06\x89\x1c\x0b\x39\x81\xb0\xa2\x2e\xd2\x08\x29\x2a\xe4\x44\x41\xe1\x34\x5e\x17\xde\x7c\xc5\xa1\x43\xab\x32\xf8\x95\xe5\xbe\x32\x28\xbc\x58\xdb\x7e\xcd\xfc\x0e\x18\x11\x22\xf1\x6a\x2b\x0f\x78\x16\x41\x5a\xe0\xf9\x4d\xf4\x83\x9b\x09\xfd\x70\x6d\x32\x38\xff\xef\xee\xcf\xfb\xb7\x87\xe6\xcf\xd4\x9b\x24\x49\x52\x7c\xdd\xe5\xa3\x49\x07\x37\x34\x60\x59\x98\x4e\x7b\xd9\x2c\xeb\x25\x0b\xcb\x55\x6d\x2c\x17\x47\xfa\x70\xc8\xc5\xbb\xf3\x54\x2d\xed\x15\xdb\xec\x3c\x0b\xf3\x49\x12\x2d\x47\x15\x54\x1d\xce\xfb\x9e\x59\x5f\xca\xe3\x72\xa7\x51\x8c\x26\xe6\x36\xc8\x47\xcb\x4a\x57\xc3\x3c\x93\x2f\xd8\x85\x0d\x68\xa9\x5d\x6e\x16\x92\x15\xe9\xfd\x62\xd7\x68\x30\x96\x6a\x93\x3c\xf2\xa4\xe6\x72\xe4\x2d\x13\x6c\xbb\x56\x9a\xb0\x86\xb7\xac\xcd\xe5\x71\x01\x4a\x8d\xd1\x22\x56\xe3\xe4\xea\xb8\x35\xe1\x26\x4c\x65\x24\xa3\xd4\xa2\x3b\x2b\x32\x16\x3b\x4d\x15\x80\x99\x96\x40\xcc\x49\x57\xaa\xf5\x0c\xea\x8e\x1c\x1c\x19\x26\x52\x8b\xc5\x06\xf2\xa2\xc8\xe5\xf1\x7a\xc2\x04\x90\x49\xd5\x82\x74\xe2\xea\x4a\x6d\xc0\x55\x24\x29\x41\x67\x4f\x35\xff\xd0\xd7\x4e\xab\xce\x58\xfe\x07\x63\x00\xaf\x51\xe4\x37\x5d\xe0\x39\x95\xa5\x01\x52\x44\x0d\x60\x15\x10\x45\x25\x44\x01\x00\x6a\x1a\xcd\x13\x04\x75\x81\x53\xa0\xaa\xf1\xbc\xce\xd2\x22\x04\x2c\x03\x18\x91\x23\x88\x57\x21\x61\xa1\x8a\xc9\x76\xfd\x05\x4e\xea\xf5\x79\x75\x67\x85\x6b\x6d\xbb\x45\x0b\xcd\xf0\xf0\x15\x86\x10\xd5\x1a\x8b\x45\x4a\x19\x56\x9d\x18\x14\x05\x47\x6e\xb1\x95\xf6\x44\x61\x6b\xcc\xba\xd9\x5e\xc7\x53\xf2\x4a\xb6\xeb\x93\x76\x8a\x63\x56\x33\xbb\x5f\x75\x8a\x52\x2e\xd3\x1d\x9b\x72\x4b\x69\xd6\xd2\x11\x7b\xb4\x28\x99\x34\xac\xd6\x6c\xc6\x56\x47\x40\xab\xa5\xa3\x85\xbc\x64\xf1\x9c\x3f\x71\xbe\x21\x04\x26\x72\x9c\x5c\x94\xcc\xe4\x54\x6d\x6a\x2b\xe2\x99\xec\x7c\x38\x31\xda\x79\xa5\x56\x58\x77\x9a\x06\xe6\xb8\x79\x8d\xf6\x94\xea\x88\x17\x3b\xeb\x05\x2b\x00\x18\x93\x98\xee\x9c\x29\xe2\xcc\x3a\x52\x16\xda\x79\x59\xaa\x24\x27\x31\xa9\x24\x2e\xc0\xc4\x45\xf5\xb8\x09\x06\x59\x62\xf9\x76\x20\xb9\x3f\x8b\x21\x80\x3b\x0c\x81\x7e\x8d\x12\xbf\x31\x22\x16\x88\xca\x41\x91\x15\x35\x9a\xc5\xa2\x4e\x38\x05\xd1\x0c\xc3\x02\x5d\xc5\x18\x8b\x80\xc7\x08\x70\xa2\xc8\xb2\x2a\x83\x01\x20\x1a\x04\x44\xe4\x31\xc3\xeb\x3a\xcf\x31\x2c\xb8\x64\x08\xc2\x59\x65\xe7\x59\x56\xb8\xdc\xea\x1b\xc3\x76\xdd\xcc\x20\x48\x5f\x32\x06\xfa\x46\x63\x58\x19\x96\x20\xe3\xc4\xb0\x52\xb2\xa3\xa3\x59\x25\x33\x4c\x8b\xd3\x69\xbf\x39\xad\xd6\x32\x05\x31\x37\x48\x7b\x1d\x32\xc0\x59\x1d\x35\x32\x4b\xab\x3b\x5e\xe8\xa3\xae\x9b\x9f\xc2\x44\x5c\xaa\x74\x12\xeb\xa4\xcb\x09\xac\xc5\x32\xeb\x06\xdf\x51\xc7\xc9\x58\x26\x62\x8d\xb5\x82\x9b\x3c\x44\x05\x79\x71\x98\x4c\x68\x56\x65\x7a\x32\xc0\x03\x3c\x9d\x26\xc7\x2b\xba\x62\xa4\x6b\x6a\x8d\xd7\x8d\x74\xcb\xd5\x6b\xee\xb4\x9b\xa5\xcd\x91\x21\x64\x41\x24\xa9\x78\x0a\x8a\x26\xcb\xe5\x24\x5f\x5c\x49\xd3\xb5\xa1\xd6\x53\xab\x4c\xa6\x63\x5b\x35\x83\x91\xd6\xd2\xaa\x4a\x2c\x9d\x74\xba\x98\x4f\xf9\xfa\x6f\x9f\x30\x86\xb2\x7d\x4a\xa1\x7e\x1e\x63\x40\xaf\xd1\xe3\x37\x95\xe3\x35\x8e\x11\x68\x24\xaa\x22\x66\x74\x8e\x46\x10\x61\x82\xa1\x06\xb1\xa0\xb1\xac\xa8\xaa\x2c\x84\x80\x20\x8c\x75\x8e\x17\x54\xc8\xf2\x0c\x60\x09\x0d\x38\xcc\x02\x8e\xc7\x17\x6d\x01\x9e\xd5\x76\x28\xb0\x88\xbd\xda\xba\xdb\x50\xe1\x21\xe4\x2e\xd8\x02\xba\xd1\x14\xc4\xaa\x56\xb1\xe2\x9d\x55\x2e\x4f\xc7\x5b\xe3\xd9\xc4\xc3\x16\xbd\x1e\x16\x8a\xe3\xf4\x64\x3a\xaf\xb6\x97\xc3\xc6\xa0\xdc\x4f\xe6\x0a\x8d\xd6\x60\x5a\x4e\x47\x0b\x42\x24\xdd\x40\x2b\x4f\x44\x28\x95\x82\x1d\xcc\x17\x3b\xd1\xe8\xb2\x31\x77\x55\x9b\xad\x77\xfb\x85\x9a\xdc\x4a\xc6\x8a\xaa\x3f\x75\xbe\x29\xf4\x0f\x53\x59\x2e\x0d\x96\x49\x39\x27\xa2\x52\x0b\xaf\x1b\xce\xd4\x28\x5a\xa9\x94\x9c\x1e\x34\xe6\x46\xd9\x9d\x26\x67\x69\x96\x4c\x87\xb5\x84\xba\x32\xd7\x5e\x2a\x6a\x2b\x93\x6e\xae\x85\xbb\xe5\x5c\x4e\x14\x59\x24\xb6\xca\x60\xe2\xd2\xc8\xb1\x4a\xe6\xb8\x99\x41\xc3\x61\xc9\xec\xc4\xcd\xb1\x0f\x7f\x74\xc2\x14\x4a\xf2\x29\x75\xfa\x79\x4c\x41\x7c\x8d\x1a\xbf\x71\x9a\x0e\x04\x82\x91\x46\xab\x2a\xc2\x44\xd3\x54\xc0\xaa\x7e\x60\x81\x22\x27\x40\xa2\x02\x00\x39\x96\x06\xba\xa2\x73\x50\xe7\x08\x81\x10\x60\x55\x20\x1a\xa4\x79\x8c\x54\xee\x92\x29\xf0\x67\x95\x5d\x40\xa2\x70\xbd\x75\xbb\x5b\xc6\x8a\x2c\x14\x2f\x98\x82\x78\xa3\x29\xd0\xec\x52\x9f\x5a\x95\x75\xd6\xf1\xd8\x58\x39\xa6\x68\x31\xbb\xca\x08\xb1\xe4\xa8\x10\x8b\x44\xab\xf3\xfa\xac\x3b\x70\xd2\x42\x2b\x86\x2d\x39\x9f\xab\x65\xed\x74\xbc\xc5\x8f\x14\x1c\xa3\x85\x45\xdc\x14\x9b\xf9\x79\x7b\x16\x19\x0d\xa7\xa3\x38\xec\xcf\xa5\x05\xd4\x9d\x74\xa6\xb0\x0c\x44\x85\x80\x76\x66\x69\xcf\xe5\xa2\xed\x4e\xc5\xc3\x4c\xbc\x1c\xb3\xf8\xfe\x64\x18\x1f\x8f\x31\xae\x43\x73\x2e\x37\x06\xae\xe3\xb2\xab\x55\xa7\x65\x8b\x23\x4f\x66\x91\xdc\x2f\x75\xba\x95\x45\x82\xf4\xe9\x84\xa8\x2b\xa2\x9a\x82\x95\xda\x12\x0c\xd7\xe3\xac\xd0\x97\xeb\xa0\x2a\xaf\xa1\xdd\xf0\xa3\x4e\xff\x84\x29\x14\xfa\xa7\xd4\xe9\xe7\x31\x05\xe1\x35\x6a\xfc\xc6\x42\x0d\xf2\x04\x8b\x9c\xca\x40\x8e\x25\x88\xe1\x35\x5d\xd3\x81\x4a\x88\xae\x69\x22\xa7\xb2\x3c\xc3\x23\x44\x43\x22\x2a\x98\xc6\x0a\x27\xd2\x08\x93\xcd\x18\x88\x09\xaf\xfb\x89\xcc\x59\x53\xe0\xce\x2a\x3b\xa2\x05\xee\xfc\x62\x61\xdf\xba\xdb\xa1\x05\xb4\x70\x69\xdd\x2c\xdc\xba\x6c\x56\x5a\xed\xe9\xa0\x90\x1d\x95\x27\x59\x2d\xaa\xa7\x4b\x02\x62\xe4\x05\xc8\x76\x47\x29\x98\xb7\x73\x5e\x26\x8e\x79\xaf\xdb\x72\x4c\xc4\xb1\x8a\x12\x4d\x4a\x33\x71\x00\x57\xc2\x08\xf3\x75\x8e\xed\xa8\xba\xd3\xc8\xab\x74\x31\x9a\x04\xc3\x41\x64\xca\x4b\x8b\xa9\xa9\x10\xb9\xe1\x4f\x9d\x6f\x0a\x81\xa9\x14\xe1\x84\xe5\x1d\xc8\x8e\x0b\xab\x55\x46\x5b\x24\x57\xd1\x52\x33\x53\xb1\x3a\x78\x90\x6f\x2a\xcb\xc8\xb2\x26\x54\x1b\x4c\x35\xd5\xaa\xf4\xe3\xac\x3a\x68\x54\x75\x58\x03\xb5\x64\xad\x3c\x9a\x98\x85\xd6\x64\x32\x5d\xad\xb2\x06\xc4\xc5\x41\x2b\xc6\xa4\x21\xce\x33\x1d\x59\x6b\x1a\xbe\xc2\xab\x27\x4c\x21\x27\x9e\x52\xa7\x9f\xc7\x14\xe0\x6b\xd4\xf8\x0d\x70\x0c\x47\x38\x1d\x69\xac\xce\x41\x41\xe5\x74\x1e\x73\x0c\x0f\x44\x24\xea\x3c\x4d\xd3\x44\x13\x54\x5a\x05\x88\xe3\x19\xa8\x70\x3c\xcd\xa8\x50\xa4\x79\x51\xd0\xa1\x0e\x08\x46\x08\x5e\x32\x85\xb3\x29\x10\x43\xf3\x1c\xc3\x5c\x6d\xdd\x9d\x26\xb0\x82\x70\x69\xe5\x0c\x6f\x34\x85\x65\x65\xc4\x97\xad\x3a\x4a\xe9\x32\xc2\x15\x33\x95\x1d\x02\x49\x12\xda\x8b\x42\xaa\xd1\x18\x7b\x49\xc9\xc5\x52\x2b\x8d\xe6\xe9\xe9\xb8\x95\x40\x89\x54\x96\x8f\x68\xbc\x5b\x1b\x67\x90\x32\x2c\xf6\x53\xf5\x36\x71\xe6\x91\x56\x82\x5b\x96\xd9\x58\xa9\x5c\x90\xe5\x78\xdc\x36\xc5\x91\x3f\x75\x1b\x53\x48\x04\xd6\x0a\x95\x5c\x4a\x47\x74\x31\x1a\x27\xca\x0c\xb7\x5b\x4b\x73\x52\x56\xd4\xb5\x81\x63\x0d\x99\x5b\xac\xec\x88\x55\x1a\x37\x5a\x2c\x94\x12\xde\xbc\xbc\x24\xd5\x7e\x5d\xad\xa7\xc7\x3c\xa9\x67\x30\x3f\x61\x62\xa8\xc2\x8c\x5d\x92\x92\xc7\xc9\x2a\x9b\x81\x06\x6e\x43\xd7\x49\x28\x75\x1f\x7e\xe7\x84\x29\x64\x3b\xa7\xd4\xe9\xe7\x31\x05\xfe\x35\x6a\xfc\x06\x30\x83\x90\xce\x6a\x34\xd6\x78\x5a\xc5\x22\xcd\x02\x16\x42\x4d\x80\x22\x0f\x05\x71\x93\xb6\x33\x1c\x2f\x2a\x2c\xa7\xb2\xa2\x2e\xea\x82\xca\xb0\x18\x01\x8c\x01\x64\x10\xaf\xb1\xfa\x25\x53\x38\xaf\xec\x0c\x2d\xf0\xe0\x6a\xeb\xf6\x70\x8b\x85\x9c\x78\x69\xdd\xcc\xdf\x6a\x0a\xf6\xc4\x5a\xd3\x39\x50\x59\xd9\xd2\xb2\x38\x06\xcc\xa0\x45\x62\xdd\x75\x36\x69\xac\xeb\x89\x21\x87\xc4\x0c\x1c\x61\xbb\x95\x6b\xd2\xd1\x41\x56\x2c\x69\x6c\xb5\xa9\xd7\x1b\x19\x7d\x3a\x37\xe3\x5e\x64\x56\xe3\x53\x03\x2f\x51\x5e\xd9\xd3\x15\xbf\xa8\xcc\x34\x47\x89\x94\xd2\x70\x9b\x9b\xf8\xa6\x10\x48\x53\x94\x6c\xbc\x84\x73\x63\x26\x8e\xe5\xec\x28\x31\x1f\xa1\x56\xb2\xaf\x56\x24\x36\x3b\x29\x32\x6c\x7c\x99\xc8\xf0\xc3\xfa\xaa\xa5\x5b\x9e\x6a\x4c\x52\xf9\xc9\xba\x1a\x51\x75\x69\x2d\x95\x5a\xf9\x44\x47\xb7\x92\x93\xd1\xc8\x24\x85\xee\x00\x81\xa8\xe4\x55\x13\x12\xcc\xea\xac\x69\xfb\xda\xdf\x38\x61\x0a\x69\xfa\x94\x3a\xfd\x3c\xa6\xc0\xbd\x46\x8d\xdf\x14\x5d\x51\x55\xa2\x62\x86\x16\x18\x5e\xe0\x34\x0e\x33\x0c\x83\x00\xa7\xd1\x50\x11\x34\x81\xc1\xac\xca\x13\xa2\x33\x50\x10\x59\x11\xea\x2a\x61\x78\x44\x44\x56\xa4\x59\x1d\xeb\x34\xd1\x2e\x99\xc2\x79\x65\x67\x39\x44\x9f\x5d\x54\xbf\xb7\x6e\x0f\x54\x21\x02\xe2\xa5\x65\x33\x77\xa3\x29\x08\x11\x71\xed\xda\x7d\xd5\xd4\x8a\x35\x23\x33\x49\x16\x63\x8e\xde\xce\x0d\x97\x44\x58\x75\xb9\x52\x2a\x5a\xca\x76\x61\xa2\x9f\x88\xcc\x13\x5e\x74\x95\xd3\x12\xc5\x28\x30\x53\x0d\x3d\x59\xf2\x98\x48\xbd\xab\xd6\x6b\x93\x5c\xba\xbb\x9c\x13\xdc\x6f\x40\xcd\x93\xfa\x0b\xad\x92\xf2\x5c\x7f\xea\x7c\x53\x08\x68\x27\x06\x06\xab\x0d\xf3\x5c\x36\xc5\x34\xe8\xe9\x6a\xcc\xc4\x0b\x36\x89\x2d\x4d\x27\x32\x1f\x93\x99\xd2\x15\xe6\xa9\x38\x67\xf5\x07\x1c\xca\x67\x2a\x51\x00\x95\xa6\xdc\x2c\x35\xe4\x6e\x06\x0c\xb4\x5a\xd1\xc0\x4c\x45\x57\xe9\x46\x29\x95\x4f\xf1\x74\x25\x9b\xe4\x26\xe3\x08\x97\xf3\x21\x57\x4e\x98\x42\xaa\x72\x4a\x9d\x7e\x1e\x53\x60\x5f\xa3\xc6\x6f\x00\x0b\x00\x71\xb4\x4e\x44\x4c\x44\x8e\xf0\x3a\x84\x50\x51\x74\x40\x6b\x0a\x4d\x78\x11\xaa\x90\x47\x88\x23\x08\xb1\x00\x40\x5d\xe7\x11\xe1\x00\x23\x72\x22\x62\x31\x61\x34\x8d\xb9\x64\x0a\xf4\x59\x65\xe7\x44\xfe\xfc\xfe\x92\xdf\x2a\xbc\xbd\x17\x00\x00\x51\xbc\xb4\x6c\x66\x6f\x8d\x0a\x93\xa5\x29\x45\x6d\xc7\xae\x9b\x68\x8c\x05\xb1\xc2\x2c\xf8\x8e\x92\x6a\x75\xeb\x93\xd1\x32\x39\x47\x5d\x3e\x96\x93\x8d\xba\x63\xb0\x35\xa1\x98\x5e\x17\xfa\x4e\xcc\x98\x1b\xa6\xc3\x0f\x66\x95\xb8\x6e\x96\x84\xe5\x38\x3a\xef\x97\xd0\xb0\x6f\x94\xc7\xb8\x1e\xef\x97\xa7\xc9\xf9\x61\xad\x90\x08\x4c\x65\x6b\xe5\x95\x97\xf6\x4c\x4b\x7a\x31\x29\xd2\x2e\xf7\xed\x36\x14\x4b\x56\x6d\xb2\x9a\xd2\xf1\x55\x31\xbb\x54\xa2\xfd\x51\x41\x5c\x0f\x8c\x69\xb6\x3c\x63\xb3\xb5\xd5\x20\xa1\x0c\xd5\xf6\x42\x27\xf6\x5c\x27\xcb\x52\xc6\xe4\x9d\xea\x80\x2e\x37\x57\x74\x7e\x91\xcd\x64\xe4\x4a\x0c\x39\x7e\xd4\x29\x9c\x30\x05\xd9\x3d\xa5\x4e\x3f\x8f\x29\x30\xaf\x51\xe3\x37\xc8\x6a\x9b\x7c\x8a\x85\x84\x40\x51\x03\x0a\x23\x28\xbc\x22\x22\x9d\x61\xb1\xce\xb3\x00\x28\x02\x0f\x11\x66\x38\x1d\xeb\x80\xa3\x59\xac\xd1\x0a\xcf\x28\x90\x65\x15\x5a\x50\x08\x42\x6f\x7e\x21\x01\x73\x4a\xab\xc1\xd9\xe3\x66\x86\x47\x9c\x70\x3e\x7d\xda\xb7\x6e\xab\x34\x38\x1e\x5d\x5a\x35\x33\x37\x5a\x02\x53\xee\x0e\x41\x71\xc6\xdb\xb4\x92\x15\x5a\x9c\xb5\x2a\xcd\x1b\xcb\x14\xdb\x9c\xd8\xa3\xc8\x3c\x29\x95\xbc\x38\xc8\x31\x05\x21\x26\xc0\x6e\x83\x24\x5b\x03\x36\x92\xef\xb0\x9d\x7a\x7a\x34\x50\xa0\x17\x69\x1b\xa3\x3a\x27\x4a\xb9\x66\xc3\x19\x44\x32\x45\x93\x2d\x74\x50\xb1\xe8\x1d\x2c\x21\xee\xa7\xf2\x99\xf7\x3f\x92\xaf\xac\xee\xe1\x7e\x21\x95\x2b\xdb\x95\x85\xb4\x68\x15\xbb\x7a\x86\x6f\xad\x92\xad\x25\x33\x16\xea\x76\xb1\x12\x1f\x74\xba\xfc\x7a\x9a\x74\x16\x76\x9f\x19\xd2\xa3\xf6\xb4\x52\xcc\x4b\x8e\x57\x64\xea\x25\x26\x9f\x94\x50\xdd\x4a\xcd\xbd\x5a\x7b\xdd\x6c\x97\x53\xae\x9c\x2b\x0e\xd7\x30\x47\x0a\x83\x6c\x49\x32\x71\xbb\xa5\x71\xf3\x2d\xfe\x13\x96\x92\xc8\x9c\xd2\xb6\x7f\xb9\xa5\x30\x77\x9c\xc1\xbd\x46\xcb\xfd\xc7\x2e\xf7\xa5\x15\x00\x09\xf4\x17\x1a\x7c\xa1\x01\x45\xd3\x5f\xfd\x7f\x67\xb5\x59\x60\x18\x74\xde\x12\xf6\xad\x87\x43\xb4\x0b\xba\x7e\x5a\xd3\xb7\x24\xfd\xd3\x93\x72\xfe\x8a\xb5\x73\x06\xb7\x8a\xae\x6a\xb9\x98\x90\xb0\x12\x28\xcd\xd0\xcb\x61\x2c\xe2\xd2\x7d\xcf\x5d\x64\x16\x6b\xd0\xd6\x6a\xad\x0e\x8e\x65\x71\xd2\x77\xf7\xf2\x09\x25\x3e\x7d\xed\x95\x58\x92\x62\xa3\xef\xc0\xc8\x4b\xaf\x43\x45\xc5\x95\xaa\xa5\x1b\x5e\x6c\xf4\x68\x11\xd3\x99\xe7\x55\xcf\x16\x8d\x9f\xb1\xb8\x2b\x60\x98\x70\x69\xf5\x63\x60\xd8\x70\x15\xf5\x63\x60\xb8\x70\x79\xf1\x63\x60\xf8\x70\xdd\xed\x63\x60\x60\xb8\xbe\xf6\x31\x30\x42\xb8\x54\xf6\x31\x30\x62\xb8\xb4\xf5\x31\x30\x28\x5c\xc6\xfa\x18\x18\x40\x87\x0a\x43\x1f\x04\x13\xae\x60\x7d\x10\x4c\xa8\x7c\x92\x7d\x10\x4c\xa8\x2a\x92\x79\xcd\xdb\xbd\x5e\xf2\xe8\xca\xe5\x47\xcf\x3f\x53\xe0\xe6\x67\x76\xce\xbc\xe4\xea\x69\x3f\x15\x30\xe3\xa0\x63\x3a\xdc\x30\x81\x0a\x78\xd7\xe8\x5b\xdb\xdf\x04\x7a\xaa\x14\xff\x33\xb5\x87\xf4\x5e\xb7\x4a\xff\xdf\xdb\x37\x78\xa6\xec\x14\x97\x41\xbf\x79\xb8\x81\x01\x2e\x55\x93\x60\xc7\xaf\x36\x77\x3f\x7d\xa5\xfe\x02\x7f\x7f\xa6\x82\xdf\xf5\xfc\x6f\x8f\x6b\xd3\x3f\xfd\xfd\xbd\xe8\x3f\x72\xd8\x87\x1b\xfa\xbb\xcc\x12\xff\xdd\xb8\x0c\xc6\x93\xc3\x0d\xf7\x5d\xb8\x04\xdf\x8d\xcb\x60\xb8\x3b\xdc\x88\xb7\x3f\x73\xf2\x7d\xe8\x3c\x8a\xa7\x87\x9b\xa0\x67\x78\xe6\xe1\x95\xef\xc4\x44\x30\x9a\x1f\x6e\x82\x86\x3f\xc6\xae\xb7\x55\xa9\x83\x32\x7c\x37\xfa\x8e\xd3\x84\xf7\x9b\x23\xc3\x26\x5e\xc8\x2d\xbd\x7f\xf3\xcf\x3a\xa5\xe3\xdc\xe4\xfd\x26\x68\xae\xc7\xcf\xdb\x3c\xf9\x60\xc2\xf7\xe1\x2a\x98\xe2\xbc\x7f\x16\x03\x0f\x92\xe8\x33\x4b\x23\x8e\xcf\xcb\x83\xcf\x29\xfb\x8f\x84\x6c\x1f\xe4\x7d\xea\x99\x98\x8d\x2a\x5c\x7f\xaa\xe5\x1b\x3c\x50\x7d\x4e\x6c\xbb\x5c\xec\xfd\x33\xf7\x4d\xc5\xf6\xa8\x26\x7d\x17\xb1\x5d\x49\xec\x4e\xbc\x6a\xf3\x89\x77\xed\xdc\xf5\xd6\xc1\x47\x93\xc7\xb3\x6f\x2b\x3a\xb9\xcc\x65\xce\x2f\x10\xae\x02\x62\xc2\x39\xda\xa3\x80\xd8\x70\xb2\xf4\x28\x20\x2e\x9c\x8f\x3c\x0a\x88\x0f\x87\xfc\x47\x01\xc1\x70\x4c\x7e\x14\xd0\x87\xb8\xf8\x28\x20\x31\x1c\xc0\x1e\x05\x84\xc2\xd1\xe4\x51\x40\x47\x0b\x5f\xf1\xfc\xc2\xf7\x3a\x20\x10\x8a\x05\x0f\x03\x62\x8e\xbd\xe3\xe3\x14\xb1\xc7\x80\xd8\x57\xbd\x90\xf3\x25\x0b\xe0\x6b\xaf\x24\xbb\x67\x09\x7c\xf6\x8d\x94\x2f\xf0\x63\x81\x37\xb3\xd0\x02\xcb\x6a\x0a\xe2\x11\xd1\x45\x01\x10\x81\xa6\x35\xc2\x01\x55\x65\x68\x81\x53\x15\x56\xa4\x35\x2c\x28\x80\x66\x20\xa3\xb1\x3c\xad\xd1\x0a\xa1\x81\x40\x73\xa2\xc8\xf3\x1c\x46\xd0\x2f\x7b\xdc\x9d\x65\x3e\x9c\xa4\xbc\x9f\xd4\x40\x1a\xec\x77\xa8\xcf\x3f\x3f\x85\xc4\xb3\x27\x3f\xef\xad\x47\xfe\x78\xbb\xb5\x9d\x83\x43\x62\xb0\xc3\xb1\x9d\x11\xeb\x29\x33\x11\x25\x7d\x95\x15\xca\x6d\x2f\x9d\xcb\xad\x5b\x4d\x71\xd1\x34\xba\x31\x1c\x9f\xf1\x79\xde\xaf\xea\xed\xfa\x83\xfc\xa3\x8f\xf0\x01\x47\xec\xf0\xb1\x71\xf8\x58\x39\xd5\x7e\xe1\xf2\xfb\xc7\xc1\x2c\xa6\xa5\xed\xfa\xac\x5f\x98\x57\xbc\x84\x10\x1b\x64\xf2\x6c\x91\x20\xad\x59\xd6\x53\x99\x48\xd6\xe0\xb3\xf3\x46\x29\xd2\x95\x3c\x61\x11\x1a\x8f\x85\xd1\x7c\xb4\xf0\xd1\x81\xa8\xdc\xc2\x52\xb9\x64\xce\xb8\x6a\x4a\x44\x0d\xb3\x30\x69\xe7\x2b\x69\x73\x84\xb4\x45\x61\x15\xad\xe7\xc7\x59\xc1\xf3\xe2\x75\xa1\xb1\xcc\xa2\x51\xad\xc1\xc5\x95\x76\xb3\x91\x8a\x1a\xc2\x2a\xb5\xac\x39\x2e\x9a\x8b\xfd\x66\x2e\x9f\x5c\x7a\xf5\x8c\xd9\x36\x8b\x4a\x5a\xa1\xa5\xca\x9f\x7f\xbe\x05\x8f\x05\x82\xb5\x03\x87\x8f\xc1\x47\xc3\x0e\xfd\x2b\xef\xb2\xf3\x0f\x78\xe3\x01\xda\x9d\x69\x11\xe6\x49\x09\xf7\x87\xcb\x02\x6e\x94\x11\x8c\xad\x75\x17\x11\x5a\xb5\x9d\x62\xb7\xbd\x8e\xb5\xb2\xa3\xa4\x9d\xdb\xf3\x26\xc5\x9b\xd2\xbc\xaf\x1f\xe6\x22\x70\x36\xb6\xad\x33\x2d\x31\xf1\xa8\x54\xe2\xf8\x4e\x2c\xc1\x7a\xe9\x66\xb2\x04\xaa\xac\x44\x17\xc8\xa8\x2c\x66\xab\xd0\x2a\x02\x09\x91\x96\xa1\xad\x32\xde\x61\xae\x12\x2d\x1e\x28\xa9\xe5\x5a\x4b\x9b\x6e\xb7\xc6\x0f\x15\xc6\x2f\x11\x8a\x4b\x52\x26\xfe\xf8\xdc\x34\x42\x13\xe4\xd3\x97\x3f\xdc\xc7\x67\x36\x6b\x7b\x1c\x3f\x8d\x97\xe5\xe5\xa4\x12\x65\xed\x74\x31\xb2\x06\x42\x75\x65\xb8\xc0\xd4\x0b\xc9\xce\xb8\xd2\xea\x3b\xb3\x5a\xa4\xee\xf7\xcf\x36\xe2\x91\xd8\xb6\xa2\x75\xfb\x1c\x84\xf4\xae\x5b\x5b\xf9\x0b\x9d\xbc\x28\x09\x43\xb3\x2f\x97\x09\xad\x35\x1a\x42\x33\xad\x26\x2a\x4b\x58\x89\x2e\xcc\xf4\x54\x65\x1b\x09\xc0\xe3\x2c\x9b\x31\xc0\x61\xbe\x8a\x8a\xd5\x74\x95\x74\x91\x26\xad\xa5\x99\x1f\x17\xe7\xca\x7e\xae\xfa\x99\x03\xfc\x7c\x8b\x4b\xd2\x64\x50\x82\xd2\x0a\xc5\xe9\xb2\x9b\x92\xfb\x73\x15\x08\x00\x34\x90\xd8\x19\x72\xe3\xfc\x68\x8c\x2a\x02\x3f\x8a\xb3\x73\x7f\x50\xf8\xa4\xe5\xdb\xcd\x7f\xf6\x27\x9f\x7f\xe9\x1b\xcf\x7f\xf0\x3a\xd8\xf3\xb6\x8a\x62\xf3\x27\xf7\x1c\x3f\xbb\x2a\xc0\xfe\xfb\x9f\x7f\x91\x3e\x07\x0a\x46\xee\x8c\x25\x92\x59\xc9\x73\xe9\xc5\x4e\xc7\x76\x7f\xb6\xfa\xb1\xa5\x2f\xe1\xf5\xe7\x8b\xc4\xac\xd4\x92\x2a\x48\xa8\x82\x6a\xdd\x6b\x68\x8b\x62\x22\x3d\x49\x44\xe3\x0d\x32\x59\x6b\x95\x72\xdb\xb4\x2d\xd5\xc8\x37\x0f\x44\x80\x99\xd6\x5a\xba\x2a\x5b\xe5\x95\x54\x63\xd6\x61\x90\xb7\x93\x6d\x7c\x2b\xda\xad\x7d\x78\x4a\xbf\x5d\x85\xb2\x60\x27\xf2\x74\xbe\x12\x59\x74\x6a\x71\xb4\x6e\xcf\xdb\xcd\x3a\xbb\x34\xca\x46\x67\x56\x53\x40\x62\x3e\xae\xe4\x89\xaf\x6a\x1f\xfc\xf9\xff\xbe\x55\x70\xf1\x57\x9a\xfe\x8b\x8a\xf7\x67\xe3\xdb\xbf\x9b\xec\xc8\x4f\x02\xae\xa7\x88\xc1\x17\x7b\xd2\x58\xd4\x05\x0d\x12\x4e\x64\x18\x45\x87\x1c\x2f\x42\x5e\x13\x04\x84\x18\x46\x53\x35\x8d\x55\x38\x96\x67\x05\x05\x21\x96\x08\x3c\x11\x00\xe4\x55\x55\xe4\xb0\x4a\x73\x84\xd6\x14\xfc\xb6\x7d\xb9\xc4\xab\xd2\x18\xfa\x5a\x1a\xc3\xb3\xfc\x85\x07\xc8\xf7\xad\x47\xab\xc1\x67\xd3\x98\xb0\x7d\x5f\x48\x63\x64\xe9\xe6\x34\x26\x00\xef\xdd\xd4\xe5\x18\xca\x15\x72\x39\xa9\x66\x14\x87\xc9\x41\x12\xe3\xc1\xd2\xb0\x56\x2a\xa3\x56\x2a\x73\x41\x96\x8c\x8a\x17\xab\x43\xba\x53\xad\xf5\xd7\x5c\x94\xd1\xa4\xa2\xda\xb6\xd5\xf8\x28\xc6\xca\x95\xe4\x84\xb4\xe7\x76\x7b\xb8\x5c\x66\xe5\x82\x27\x4f\x9b\x4c\xb1\x5d\xd6\x62\xab\xe5\x3c\x53\x7a\x59\x3a\x12\x28\x45\x7e\x24\x1c\x71\x07\x99\xa6\x43\x32\xbb\x37\x1c\xf9\x32\xfe\x8e\xe1\xe8\x07\x72\xdf\x3e\x3d\xff\x4c\x3a\xf2\xba\xf9\x7f\x36\x1d\xfd\x89\xe7\x5f\xfa\x2e\xf3\x7f\x22\x85\xc9\x3e\x27\x83\xa4\x7c\x80\xa7\xfe\xcb\x6c\x20\xf0\x02\x81\x47\x52\x98\x92\x24\xed\xb3\x97\xd8\x42\x7a\x2e\x85\xf1\xe9\xf9\x4e\x29\x8c\x5e\x1b\xc6\x8d\xbe\x6c\x0f\x3b\xcb\x4e\xb5\x35\xb6\xd5\xce\x44\xb4\x8a\x96\x2c\xe7\x23\x4b\x29\x33\xca\x57\x1a\x11\x2f\x25\x37\xec\x42\xa4\x8c\xac\x4a\xa2\x9d\x84\x69\x69\x22\x69\x4b\x39\x86\xdb\xa6\x00\x93\x9c\xa8\xd6\xaa\x89\x7c\x35\x67\x6a\xc3\xe6\x9a\xad\xa8\xae\xb2\x4a\xf4\x5f\x9d\xc2\x28\x44\xe4\x15\x9e\x00\x4e\x53\x15\xa4\x13\x24\x40\x2c\xb0\xaa\xaa\xaa\xa2\xa2\x63\x15\x22\x85\x08\x44\x25\x2a\x03\x18\xa8\xe8\x84\x27\xaa\xca\xf3\x40\x85\xe2\x26\xb5\xd1\x54\x4d\x78\xfb\x4c\xa1\x57\x65\x30\x3c\x42\xd7\x32\x18\x28\x40\xf6\xfc\x43\xdc\xfb\xd6\xa3\x6d\xe8\x67\x33\x98\x74\x48\xa7\xff\xc1\x8d\x98\x00\xbe\xc0\x46\x4c\x34\xe2\xd9\x1d\x61\x90\x4a\xe3\xc6\xda\x81\x02\x10\xbb\xc3\x9a\x5a\xab\x47\x5a\xc3\x64\xbf\x53\x6c\xa0\x8a\x4b\xc0\xa2\x3c\x6d\x96\x60\x23\x1a\x2f\x34\xbb\xe5\x15\xec\xae\x8d\xf1\xc8\x68\x27\x97\x6a\x4c\x65\x27\x2b\x10\x23\x9d\x31\x1b\x97\x22\x9d\xf8\x34\xe7\xa4\xab\x6b\x29\xf6\xca\x8d\x98\xc0\xd0\x07\x22\xdf\xa0\x7a\x98\x8b\xd4\x01\xfe\x8f\x16\xf9\xc2\xef\x86\xf0\xef\x7f\x0a\xaf\x2f\x5d\xcb\x7c\x5e\x37\xff\x3f\x70\xe6\xfb\xf3\xce\xff\x95\xcc\x27\xf3\x9c\x0c\x52\xf6\x01\x5e\xe7\x87\x95\xc1\x69\x1b\x08\x6c\x9e\x3d\x92\xf9\x34\x2a\xd2\x7b\xe6\x73\xc8\x4c\x7e\xb4\xcc\x27\x18\xef\xb6\x99\xcf\xb7\x0a\x48\xaf\xcd\x7c\x88\xc2\x69\x2c\xcf\xd2\x88\x47\x80\xe7\x04\x85\x08\x3a\x61\x74\x05\xa9\x1c\x27\xb2\x9c\xc6\xd0\x84\xd3\x78\x88\x18\xc4\xd1\xa2\x88\x55\x80\x59\x8d\xa1\x39\x0d\x40\x82\xf0\xee\x59\x68\xf1\x75\x99\x8f\x78\x2d\xf3\x11\x69\xe6\xfc\x03\xab\xef\xad\x47\xe7\xe6\xcf\x66\x3e\xa9\x90\x4e\xff\x83\x99\x4f\xc0\xbb\x06\x32\x9f\x55\xdd\x4d\x66\xa3\x60\xa4\x0d\xad\xd2\xa8\x90\x2c\x0f\x16\xcd\x9c\x92\x53\xfa\xc5\x46\xa1\xe9\xad\xc6\xd1\xd1\x20\xcd\x37\xa1\x20\x4c\xf2\xf4\xa8\xd3\x28\xc5\xdd\x52\xab\x15\x8b\x2d\xa5\x48\x7a\xca\xe2\xf4\xca\xd4\x5c\x5d\x6b\xce\x53\xda\x58\x2c\xad\x72\x05\xdd\x4c\x6a\x49\x67\x93\x62\xbf\x2c\xf3\x09\x74\x7a\x24\xf2\x4d\x0f\x73\x11\xc0\xf7\x0d\x23\xdf\xc9\xb9\x0a\x6c\x5c\x3c\xe2\xc5\x70\x5f\x3a\xf6\x62\x92\xf4\x6d\xbd\x58\xf8\x92\x0f\x53\xb1\xf8\xff\x0d\x3f\x3f\x5d\x54\x3d\x91\x59\xa4\x9f\x93\x41\xa6\x70\x80\xf7\xc1\x9f\x7d\x0b\x19\x84\xaf\x98\xf4\x2f\xf7\x11\x7e\xb4\xff\x56\x4e\xf8\xb5\xd1\x5e\xc5\xbc\xaa\x89\x88\x81\x1a\x4f\x6b\xbc\x8e\x38\xac\xaa\xb4\xff\x0a\x53\x04\x21\x41\x8c\x00\x10\xcf\x0b\x40\x55\x38\x24\x08\x04\xa8\x8a\x00\x11\xad\xe9\x22\xc7\x33\x48\x07\xfe\x33\xee\xc2\xeb\xa2\xbd\x70\x2d\xda\x23\x1a\xf1\xe7\xdf\xdb\xb8\x69\xe5\xde\x42\xc5\x6d\xcf\x46\xfb\xe4\x29\xed\xdc\x5e\x0f\x45\xfb\x4b\xda\x14\xba\x52\xef\xf4\x54\x4a\xbc\x63\x62\x84\x56\xec\x18\xce\xc6\xd5\x98\xe5\xe5\x63\x03\x50\x9b\x68\x16\x90\xd6\xeb\x8c\x31\xac\x44\x22\x32\xdb\x1e\x89\x71\x47\x1a\xcc\x1c\x39\x0b\x13\x73\xa6\x40\x72\xa2\xb9\x80\xb9\x78\xab\xb4\x28\x15\x52\x9d\x8a\x0d\xf9\x74\xc6\x70\xa5\x62\xad\x34\x9b\xe3\x98\xa4\xbe\x2c\xa2\xc7\x9e\x2b\x2a\x30\x12\x07\x79\x07\x52\x9a\xc7\xad\xf5\x9a\x77\x79\x21\xbd\x2f\xf1\x2e\xd7\xe8\xfd\x81\xbd\xfb\xb5\x88\xfc\xa3\xd1\xfb\x6c\xd1\x45\xea\x39\x7e\xb2\x8b\x03\xbc\x0f\xf6\xf6\x83\xcb\xff\x5b\xd2\xbb\x5d\x5d\xfc\x4f\x18\xcf\x9a\x0e\xcb\xe6\x89\x32\x85\x5d\x39\x45\x68\x37\x95\x6e\xe6\x4c\x46\x6f\x24\xca\x05\x23\x57\x4c\x08\x5c\x5d\x23\xf5\x45\xce\x8d\xa7\xa0\x5b\xb1\xec\x52\xb4\xb3\xe4\x9c\x55\x3b\x61\xdb\xd9\x8e\x20\x71\x8b\xee\x20\x3e\x74\x46\xaa\x91\x5b\x48\x20\x03\x21\xb2\xe5\xd8\xe2\xd5\x51\x13\x0b\x0c\x50\x08\xe6\x80\x00\x79\x16\xa9\x90\x68\x3c\xe4\x54\x82\x75\x45\xa0\x45\x0e\xb3\x40\xe5\x35\x82\x75\x02\x04\x95\xd0\x0a\xcf\x68\x0c\x61\x04\x9e\xd1\x09\x26\x9c\xa0\x29\x9b\xa8\x09\x5f\x17\x35\xe1\x95\xa8\xc9\xd0\xbc\x40\x9f\x7f\xa9\xd3\xbe\xf5\xa8\x92\xfb\xd9\xa8\x19\xde\xf6\xbb\x37\x6a\xc6\x42\x5a\x1c\xd8\x81\x3c\xed\x25\x03\xf5\x0e\x32\x4c\xcf\x61\x8c\x44\x6a\x16\xb2\x9b\xab\xf4\x38\x52\x21\x5a\xb9\x5d\x59\xb8\x72\xb4\x81\x74\x87\xb4\x86\xd9\x7a\x55\x8c\x15\xc5\xa9\x35\xb7\x60\xb3\x51\x5a\x6b\x2a\xdd\x80\xe5\x44\x25\xbe\x72\xec\x7c\x5c\x5a\x0c\x40\x7e\x9c\x63\x8d\xd2\xd8\xea\x4f\xd5\xb5\x0e\xaa\x9d\xd4\xcb\x22\xe5\x73\xe7\xdd\x86\x2a\x1d\xc3\x0b\xc8\xe8\xf1\xc8\x73\xfa\x8a\xbd\x98\xde\xd7\x45\xf6\x0b\xf4\xfe\xe0\x9e\xfa\xcc\x25\xff\xa8\xf4\x9e\xf5\xd4\x21\x59\x27\x9f\xa3\x3d\xdf\x08\xc1\xfb\x17\xc9\xfa\x5b\xd2\xbb\x8b\x8a\xd5\xd2\x40\x88\xf4\xdb\xf3\xd1\x24\x8a\x93\xea\x80\x9f\x8f\xd2\x56\x1d\xd0\x85\x7c\xac\x0c\xca\x6d\xc8\x9a\xf6\xaa\x41\xeb\x52\x5d\xcf\x4d\x04\x3e\x62\x36\x13\x2e\xdb\x2e\x26\x4b\xc3\x05\x2d\xb9\x53\x18\x5f\xf4\x0b\x19\xad\xc6\x1b\x1e\x37\x9c\x4c\xb8\x9c\x55\x60\x51\xa3\x15\x7b\xfd\x99\x39\xad\x28\x0c\x54\x14\x15\x0a\xaa\x0a\x54\x86\x81\x0c\x62\x55\x02\x44\x1d\x71\x3a\x12\x20\x54\x38\xc2\xab\x50\x04\x2c\xa3\x32\x2a\xd6\x75\x01\xd1\x82\x80\x80\x06\x04\x86\xd5\xfd\xb5\x24\xff\xba\xa8\xc8\x5f\x8b\x8a\x0c\x8d\xe8\xb3\x55\x7f\xef\xad\x47\x8f\x25\x3d\x1b\x15\x13\xa1\xe9\xbd\x23\x2a\x06\xa2\xe0\xb5\x2b\xb0\x13\x8c\xc6\x83\x54\x35\x66\x77\x09\x4b\x70\x39\x31\x95\x61\x74\xda\x94\x27\xbc\x91\x8c\xc9\xb9\xa1\xec\x74\x94\xc6\xba\x69\x3a\x9e\x03\xd5\x04\xef\x79\x16\x3d\x4b\xad\xf3\x15\xb7\x59\x30\xe5\x7e\x79\x12\x13\x99\x76\x0b\x0b\xfd\x75\xbd\xda\xa7\x4b\xab\x91\xda\x91\x45\xdb\xb3\xa5\x17\xee\x04\xc7\x9e\x3b\x03\x35\xc0\x41\xb6\xf1\x90\xac\x1e\x8c\x2e\x27\x7f\xcb\xe0\xbd\xfd\x85\xf4\xbe\x28\x7a\x5f\xa6\xf7\x87\xf6\xd0\x67\x5f\x09\x25\xff\x98\xf4\x5e\xf0\xd0\x21\x5c\xf2\x73\xb4\x17\xb8\x03\xbc\xcc\xbf\x4c\xd6\xdf\x92\xde\x5d\x34\xfc\x56\x4e\xed\xb5\xd1\x50\x44\xbc\x02\x08\x8b\x09\xcb\x0b\xb4\x8e\x55\x9e\x43\x44\xd3\x55\x95\x81\x34\x60\x18\xcc\xe8\x88\xa5\x15\x96\x57\x10\xa7\x00\x4d\xd7\x31\xd2\x45\x95\xc1\xb4\x28\x02\x88\x55\x56\x80\x6f\xfe\x8f\xb3\xbe\x2a\x1a\x72\xd7\xa2\x21\xcb\x83\x0b\xef\x33\xdd\xb7\x1e\x3d\x5b\xfb\x6c\x34\x0c\x47\xb3\xdb\xa2\xe1\x59\x4d\xfe\x70\x05\xd6\x84\x52\xbe\x61\x65\xb4\x56\x7b\x98\xc8\x25\x0d\x53\x8c\xb0\x89\xb2\x9a\x59\x79\x5a\x41\xb5\xa3\xb1\x42\xcb\x72\xa6\xab\x39\x4a\xab\xd1\x44\xc5\x4d\x49\xa5\x7c\xba\xaa\x0d\x34\xa9\x99\x8f\xba\xcd\xda\xb2\x25\x64\xea\xeb\xc9\xb2\xc3\x2a\x73\x00\xca\x89\xa6\xe9\x44\x1b\x7c\x42\x73\xfa\xb1\x97\x45\xc1\x40\xa7\x07\xa2\xca\xb0\x74\x90\x69\x38\x63\x78\xe8\x91\xac\xab\x51\xf0\x75\xf4\x3e\x1b\xb5\x6f\xa2\xf7\xc7\xf4\xcc\x47\x63\x4f\x5c\xf2\x0f\x46\xef\x75\xcf\x1c\x92\x75\xe2\x39\xda\x4b\xea\x01\x9e\xfc\x2f\x93\xf5\xb7\xa4\x77\x17\x05\xe3\x20\xbb\x4a\x37\x4d\x6e\xb1\x1a\x74\x26\x7a\xd9\x5b\xac\xd9\x78\xc1\x69\xd7\xd3\xb9\xf2\xa2\x9e\x9c\x40\xe8\x3a\xd1\x2a\x5b\x5e\xd0\xf9\x58\x3f\x61\x2c\xe9\x76\xa7\x5d\x49\xd6\xa2\x42\xb2\xe1\x36\x67\x2b\x59\x84\x6a\xab\xc8\x08\x48\xab\x2f\x40\x17\x47\x41\xa9\xc2\x62\xee\xf5\x8f\x82\xa9\x02\xd4\x45\x8e\xd5\x34\x06\x11\xc4\x28\x58\x55\x74\x06\x40\x1e\x69\x3c\xcd\xf1\x1c\xa6\x39\x96\x60\x02\x31\x4f\x74\x11\x10\x86\x88\x9a\x8a\x04\x85\x26\x34\xcd\x6b\x2c\x8d\x20\xf3\xb6\xfd\xa9\xe1\x17\x45\x41\xf6\x5a\x14\xe4\x44\xe1\xc2\xab\x8c\xf7\xad\x47\x2f\x86\x78\x36\x0a\x5e\xd8\xf9\x0c\xe4\xf9\x0f\x55\x50\x84\xe1\xdd\x74\x05\xa2\x66\x5c\x14\x56\x59\x33\xc7\xaf\xdb\x8b\xd9\xc8\x54\xcb\xcb\xc1\xb8\xec\xa1\x74\x0c\x75\x4a\x4a\x84\x4e\xa7\xd5\x22\x53\xf3\x48\xad\x99\x77\x87\xd6\x0a\xeb\xc5\x59\x94\x87\x74\x61\x28\x46\x2b\xd9\xb5\x5e\xb3\x72\x63\x16\x3b\xd5\x66\xd6\x4b\xf7\x93\x7d\x5c\x4b\x66\x8d\xd5\xa2\x6a\x27\x5f\x15\x35\xa5\xe7\xce\xf0\x86\xd6\x61\x0e\xce\x5c\x57\xa2\xca\xeb\xf0\x9f\x99\xa3\x9b\xa3\xda\xb7\xf1\xb4\xc1\xeb\xb2\xe7\xfc\x97\x78\xfa\x93\x51\x2a\xfe\x1c\xed\x3b\x44\x67\x77\x1b\xbf\xa7\xec\xee\xc1\xbf\x8b\x22\xf3\x92\x68\x74\x6b\x33\x15\x88\xf9\x49\xb6\x9d\x10\x3b\xdd\xa1\xa0\x57\x17\x7a\x2b\x31\x8e\x7a\xb1\x25\x9b\xd0\x46\x4e\x7b\x64\xd6\x84\x0c\x2f\x8e\xad\xb5\x32\x8f\x10\x2f\x91\x89\x96\xe9\xb8\xca\xd2\x93\xd5\xc4\x63\xa6\x74\xb3\xa6\x54\xb9\x58\x27\x35\x1a\xd4\x3a\xae\x2b\xe3\xd7\xd7\xa4\x2a\x0c\x66\x18\x41\x65\x91\x0a\x39\xcc\x71\xba\x2a\x60\x45\xe3\x54\x04\x45\x80\x38\x1e\xea\x34\x8b\x10\xa2\xa1\x06\x18\x95\x13\xa0\x26\xd0\x0a\x47\x33\x8a\xae\x29\x0c\x82\x1a\xc4\xec\xf6\x1d\xe3\xe0\x99\xb7\x69\x6d\x7f\x24\xe2\x62\xf0\xe0\x11\xa4\xcf\xff\xa2\xd6\xbe\x35\xf8\x0a\x9f\xad\x2e\xa6\xf2\x62\xba\x32\xaf\x8c\x94\x1c\x93\x96\xd8\x56\x73\x58\x75\x72\xe3\x61\x9b\xa6\xf5\x94\xe8\xe6\x33\xc2\x98\x96\xab\x8b\x6c\x2b\x2a\xb5\x59\xe9\x3d\x76\xf8\xd7\x85\xd8\xb1\xbd\x1e\xf0\x4b\xc1\x77\x6f\xc7\x9a\xf3\x45\x12\x6d\x9a\xe4\x84\xc7\xe6\x16\x63\x5c\x9e\x95\xb5\x64\xad\xb1\xd4\xa4\x24\x51\x60\xa9\x42\xbc\x55\x25\x97\x69\xe1\xb5\xa9\xd4\x0a\x85\xc1\x38\x9d\x2b\xe6\x13\x9c\x3b\x1d\xc8\xd3\x46\x57\xad\x94\x69\x33\xd2\x8e\x96\x26\x11\xdb\x6d\x8d\x8b\x30\x92\x6c\x74\x14\x77\x2d\xf0\x15\x66\x98\xe2\xe6\x85\xc2\x0d\xb1\xe0\x48\x69\x8f\x63\x41\x80\x67\x9f\xfc\xb0\x3d\xc7\x8c\x68\x8c\xce\xd3\xd9\xd4\xca\x1b\x2c\x8a\xc0\xec\xd0\x78\x35\xb1\x01\x2a\xa6\x97\xf3\x7c\x7c\x55\xe2\xbd\x98\xac\xc6\xb7\x3c\xb2\x7d\xcf\x29\x59\x9d\xa8\xc8\x1d\xc6\x9f\x89\x0d\x97\xed\xf9\x09\xfc\xc9\x7a\x2b\xe6\x3e\x81\x5f\x92\xfe\x39\x7f\x76\xd2\xb7\xc6\x1e\x97\x45\xc9\xea\x5e\x64\xf3\x9a\x2c\x9e\x9d\x8b\x8d\x2e\x44\xd4\x10\xbc\xbb\x64\xf1\x3f\x41\x5b\xb9\xd9\xf1\x50\x18\xb2\xd5\x86\x59\x68\x57\x62\xed\x71\x64\x38\x4a\x3b\xea\x28\x6e\x24\xc7\x2e\xdf\xa2\x87\x89\x4c\x77\xb0\x1a\xd6\x16\x91\x7c\xce\xae\xe6\xcc\x54\x5b\x4e\xa0\xac\x6e\x46\xd7\x53\x7d\x9a\x4f\x4e\x86\x64\x3e\x68\xa6\x52\x42\x21\x12\x69\x14\xed\xe5\x2c\xbf\x4e\x48\xaf\xf6\xad\x2c\x54\x88\x40\xeb\x8a\x20\x88\x8c\x8e\x44\x1a\xa8\x9a\x4a\x34\x15\x30\x34\x24\x0c\xd0\x11\x62\x10\xab\x22\x24\x42\x1a\x03\x9e\x70\x1c\xd0\x39\x81\x43\x02\x27\x60\x1a\xb3\x02\x56\x0e\xbf\x19\xf2\x84\x6f\x65\xae\xfb\x56\x01\x9d\x2f\x61\xd8\xb4\xbe\xff\xc6\xc8\xee\x65\x64\xcf\xfa\xd6\x0b\xbb\x53\xdb\xeb\xce\x9d\x8a\x0b\xbe\x55\x62\x97\x2d\x65\x59\x2e\x29\x56\xb7\x60\xc4\x52\xc9\x5c\x3e\x5b\x99\xe9\xd9\x7c\x7f\x56\x77\xd3\xd9\xe5\x4a\x72\xcb\x65\x3e\x89\xba\x43\x1e\x02\xdc\xb6\xe6\xc5\x68\xba\x59\xcd\x2a\x49\x57\x56\x0d\x2f\xa5\xf4\x0d\xa4\xb5\x9a\x5a\xae\xda\x99\x8f\x9b\xad\xb8\xb1\xce\x68\xe3\x7c\x26\xf1\x63\xf9\xd6\x67\x7d\xdb\x93\xf6\x3c\x15\xa2\xf5\x84\xfa\x42\xdf\x7a\x6f\x5e\xfa\x72\xdf\xfa\x0f\xf9\x36\xe9\x45\xbe\xf5\xd1\x38\xbb\xf3\xad\x45\xb1\x39\x16\xeb\xeb\x31\xcf\xd4\x33\xfd\xea\xa0\x66\xac\x1a\x79\x6b\x55\xe3\xf2\x23\x21\xb6\x52\xd5\x7e\x3e\xb1\x8e\x54\xf5\x56\x27\x42\xbc\x96\xc9\x0b\x6b\x7d\x09\x1a\xb5\xd6\x52\x89\xa5\x33\x4e\x75\xcc\x65\xe6\xed\xa6\xd9\xae\x8d\x5a\x79\xde\x6c\xf6\x6d\x77\x95\xee\x1a\x2b\xe9\xc6\x3a\xb1\xe3\x57\x1c\x62\xd7\x25\x5e\xcf\xf5\xb0\xe7\x06\x3f\xf7\x26\x23\xb2\xda\xbf\x2a\x30\x5e\x2a\xd6\xea\x55\x29\x53\xbc\xf6\x56\x43\x29\x5f\x97\xab\xbb\x37\x0b\x96\x8a\xf9\x4e\x10\xe2\x2f\x14\x45\x51\x52\x22\x11\x80\xf6\x01\x21\x55\xae\x66\x0a\x52\xb5\x43\xe5\xe4\x0e\xf5\xab\xa1\x7d\xa0\xb6\x6f\x3b\x93\xde\xd8\xe8\xef\xdf\x9c\x1b\xba\x7f\x11\xd5\x21\xa8\xa7\x28\x3f\x85\xf8\x2a\xf5\xfb\x48\xe6\xb3\xed\x86\x6e\xb7\xff\xf5\x54\x5b\x23\xbb\x8f\xde\x6a\xb2\xff\x68\xb8\xee\x6c\xfb\x7e\xed\xe7\xb9\x3b\x46\x7b\x8a\xb9\x87\x08\xa3\x1a\xc5\x4c\xa5\x21\x53\xbf\x1e\xba\x7f\xa6\x0e\xfd\xf7\x9f\xb7\x03\xee\x14\xcd\x6b\xa6\xf5\x6e\xc6\xef\x9a\xd4\x33\xbf\xb5\x71\xe5\xf7\x2c\x5e\xcb\xd9\x69\x24\x97\x38\xbd\x40\xd6\xcd\x9c\x9f\x7d\xd1\xea\xd5\x57\x99\xbe\x96\xfb\x73\x68\x2e\xf1\x7f\x91\xb4\xab\x12\xd8\xaa\xb4\xb2\xf2\xb5\x7d\xcf\x48\xa6\x98\x90\xdb\x57\x78\x88\x57\x65\xa9\x2e\x6f\xbb\x1e\x43\xa1\x4a\xc5\xb0\x31\x34\x6a\x99\x62\x8a\x52\x3c\x87\x90\xa0\x75\x9d\xa7\x66\x6b\x63\xcf\xd3\xb3\x85\x73\x1b\x45\x67\xec\x5a\x59\xf5\x76\xaf\x1b\x7f\x98\x9c\x03\x88\x20\x25\x47\xab\x81\x63\x7a\xb6\x9d\x3f\x53\xbb\x0f\x3d\x97\x4c\x67\xc4\x52\x3f\x0a\x4c\x59\xf5\x06\xd8\x1d\x3c\x43\xd9\x66\xfc\x6d\x64\x05\x35\x6d\x33\xea\x14\x35\xdb\x9f\x8b\x7b\x86\x9e\x2d\x84\xdb\x28\xda\xf6\x7d\x17\xcf\x67\x0a\x4f\x26\xa6\xa1\x6e\xdd\x81\xed\x68\x67\xdc\x74\x8f\x6c\x74\xc3\x6f\x7f\x80\xd2\x5d\x94\xd8\x12\x1c\x02\x17\x24\x9b\xe8\x3a\x51\xc3\xaa\xf6\xd1\x6b\x19\xda\x67\xea\x93\x3f\xf8\xd3\x39\x62\x0d\xed\x45\x64\x1a\xda\xcd\x04\xee\x55\x6f\x43\xde\x03\x44\xdb\x93\xde\xe4\x55\x74\xef\x60\x05\x49\x3f\x13\xaa\x1e\xe2\xe4\x34\x03\xde\xf2\x75\x0c\xec\x60\x9d\xd1\xe9\x07\x59\x08\x42\x38\xc5\x84\x3d\xd9\x68\xe5\xc0\x7e\x88\x87\x1d\xf1\x07\x18\x8f\x0a\xff\xb2\xa0\xdd\x9d\xb5\xfb\xae\xfa\x79\x59\x1f\x83\x0b\x92\xbc\xff\x15\xcb\x23\x1a\x4f\x53\x14\x94\xeb\xab\xc8\xfa\x00\xf3\x36\xf7\x76\x8a\x40\x6f\x3b\x25\xde\x33\xd3\x7a\x80\xf1\xb8\x4a\x5e\x53\x3f\xcf\xd1\x36\x48\x14\xec\x92\xa7\xe3\xe7\x29\x60\x21\xca\x35\x12\xa2\x33\xd8\xf7\x2a\x81\xb6\xae\x3f\x11\xb4\x3e\x82\xba\x89\x38\xbf\xe7\x25\xd2\x7c\xda\x89\xf3\x32\xf1\x85\xe0\x5d\x23\x32\xd4\xfd\x16\x4a\x5f\x23\xc7\x23\x68\xb7\x52\x79\x55\x9a\xaf\xa1\xed\x26\x9a\x2e\xd3\xb2\xa7\xd8\xb4\xed\xd1\x6c\xf2\x1c\x45\xc7\xb0\x6e\x9e\xd1\x6d\xbe\x7b\x86\xbe\x09\x36\x9c\x9e\x67\x8c\xc9\x4b\x28\x0c\x43\xbb\xcd\x6e\x77\x04\x7e\xa6\xc2\x24\x7f\xa6\x76\x2e\x5e\x35\x6d\x97\x68\x3d\xec\x9d\x61\xe2\x05\x7e\x7b\x07\xe7\x1a\xc5\x77\x66\x47\x1b\xa8\x2f\x93\xee\x1d\x82\xbd\x2a\x37\xc3\xd2\xc8\xb2\x17\x4a\x39\xdc\x9e\x6d\xf5\xb0\xa6\x39\xc4\x75\x9f\x15\xe8\x55\x04\x47\xeb\xb4\x5d\x73\x68\x65\xb4\xed\x78\x07\xed\xcf\xeb\xc1\x25\xd8\xd7\x29\x3e\x61\x65\xc7\x00\x77\x59\xf8\x06\x9e\xb7\x9a\x3c\xbe\x06\xbf\x08\xf5\x6a\xda\xbf\xe9\x74\x85\xd0\x5d\x0e\xb5\x01\xf9\xae\x44\x2f\xa2\xf6\x14\xe8\xab\xe9\xdb\xad\x9a\x1c\x00\xfe\x6a\x65\x38\x02\xfd\x48\xbe\x79\x1e\xdc\x78\x62\x3b\x1b\xc7\x37\x27\x8e\x6b\xd8\xd6\xeb\x05\x1d\xc6\x70\x9d\xfc\xd0\x80\xdb\x99\xd9\xb9\x9e\x07\x77\x2a\x6e\x93\x7f\x00\xc7\x55\x4e\x02\x7d\x6f\x67\x62\xe2\x90\xb9\x61\xcf\xdc\xef\xc2\xcd\x29\x64\x57\xd9\x3a\x35\xe8\x76\xfe\xf6\x9b\x28\xdf\x8c\xa7\x3d\x82\xab\x7c\x9c\xdd\xed\x3a\x06\x7d\xf8\xf9\xc1\x6f\x61\xda\x61\xe8\x27\x17\xc0\xf7\x1a\xf8\x31\xd0\xe3\x25\xd4\x8b\x2c\xfc\x12\x8a\x5b\x78\xb8\xb2\xae\xbb\x88\xec\x75\xe1\xeb\x23\xe0\x9b\x68\xbf\x1e\xc4\x82\x8b\xed\x6f\xa1\x36\x1f\xe1\x3f\xbc\xd4\xf7\x93\xb8\xf7\x40\xbe\xdf\x61\xec\x29\xb6\x3d\x7a\x58\xca\x17\x60\x5e\x4d\x11\x7e\xfd\x55\x23\x1e\x36\x4c\x97\xfa\xf2\xdf\xff\x52\x6f\xae\x6d\x6a\x81\xd3\xb4\xb7\xaf\x5f\x3d\xb2\xf4\x7e\xfb\xed\x33\x75\xbe\xa3\x6a\x6b\xb7\x75\xdc\xee\xc5\x9f\xef\xaa\xd8\xb3\xfe\xc0\xbb\x09\xfd\x51\xd7\xcb\x04\x1c\x75\x0d\x91\xf0\x1b\xd5\x4a\xcb\x55\x79\xab\x64\xd4\x9f\x14\xfb\xf1\xb7\xf6\xce\x1d\x44\x1b\x5a\x4f\x0f\x1c\x13\x25\x73\xdf\xe7\x38\x7a\x87\x96\x4a\x96\xaa\x72\x26\x55\x7c\x3f\x02\xa2\xaa\x72\x52\xae\xca\xc5\xb8\x5c\x0b\x9d\x8a\xf8\xad\xa5\x22\xd5\x28\x27\x36\x2a\x53\x95\x6b\xf5\x6a\x26\x5e\xdf\x7c\x95\x90\xf3\x72\x5d\xa6\xe2\x52\x2d\x2e\x25\xe4\x0b\xe7\x68\x9b\x75\xc7\xf1\x6d\x2f\xb4\x15\xf3\x3a\x61\x1c\xe3\xb9\x72\x48\x76\x8e\x92\x63\xf9\x84\xb7\x8d\x4e\x0a\x6b\x97\xe8\x5f\x39\x51\x3c\x2b\x89\xdd\x52\xf6\x1f\x97\x43\x90\x8e\x53\x52\xd8\xef\x12\x5c\x56\x98\xfb\x24\xf0\x71\x53\xe9\x1f\x14\xc3\x19\x62\x8e\x65\x71\x62\x1b\xec\xb5\x4a\x11\xde\xe2\xf8\x11\x04\x72\x5e\x35\x3e\xec\x21\xdd\xaa\x1d\x65\xdb\xf5\xfa\x0e\xa9\x55\xf2\x94\x86\x3d\xbc\x51\x31\x4a\x9b\x8d\x27\x94\x6a\x8f\x27\x26\xf1\x88\xcf\xc3\xff\x17\x00\x00\xff\xff\x1c\xf6\x5b\xce\x0e\xf7\x00\x00") - -func set_optionsHorizonSqlBytes() ([]byte, error) { - return bindataRead( - _set_optionsHorizonSql, - "set_options-horizon.sql", - ) -} - -func set_optionsHorizonSql() (*asset, error) { - bytes, err := set_optionsHorizonSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "set_options-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x93, 0xbe, 0xeb, 0x77, 0xf6, 0xc, 0x4c, 0x7b, 0x2d, 0x28, 0x31, 0x9f, 0xc2, 0xf1, 0x51, 0xab, 0x3d, 0xec, 0xc, 0x49, 0xb7, 0x95, 0x9d, 0x4d, 0x2, 0xec, 0x27, 0xd3, 0xb2, 0xaf, 0x6, 0xd4}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb9, 0xbf, 0xdf, 0x6a, 0xd7, 0xf4, 0xc5, 0x71, 0xa6, 0xd9, 0x3c, 0x39, 0xf1, 0x43, 0x96, 0xea, 0x34, 0x84, 0xb3, 0xee, 0x11, 0x2e, 0xd1, 0x42, 0x26, 0xa3, 0x10, 0x7d, 0x88, 0x47, 0xf6, 0xce}} return a, nil } @@ -1350,7 +552,7 @@ func tradesCoreSql() (*asset, error) { return a, nil } -var _tradesHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x79\x8f\xab\xb8\xb2\xf8\xff\xf3\x29\xd0\xe8\x4a\x3d\xa3\xf4\x99\x60\xb3\x9f\xf9\xcd\x93\x48\x42\xf6\x7d\x4f\x5f\x5d\x45\x06\x0c\x21\x21\x90\x06\xb2\x5e\xbd\xef\xfe\x53\x20\x2b\x9d\x95\xa4\xfb\x9c\x79\xf7\xa2\x33\x3d\x49\x30\xb5\xb9\xca\x55\x2e\x97\xcd\xb7\x6f\xbf\x7c\xfb\x46\x54\x6d\xd7\xd3\x1d\xdc\xa8\x15\x09\x15\x79\x48\x46\x2e\x26\xd4\xe9\x78\xf2\xcb\xb7\x6f\xbf\xac\xef\xa7\xa6\xe3\x09\x56\x09\xcd\xb1\xc7\xfb\x06\x33\xec\xb8\x86\x6d\x11\xc2\x1f\xec\x1f\xe0\xa0\x95\xbc\x24\x26\x7a\x7f\xfd\x78\xa8\xc9\x2f\x0d\xa9\x49\xb8\x1e\xf2\xf0\x18\x5b\x5e\xdf\x33\xc6\xd8\x9e\x7a\xc4\x5f\x04\xf9\xa7\x7f\xcb\xb4\x95\xd1\xc7\x5f\x15\xd3\x58\xb7\xc6\x96\x62\xab\x86\xa5\x13\x7f\x11\x2f\xad\x66\x9a\x7f\xf9\x73\x0b\xce\x52\x91\xa3\xf6\x15\xdb\xd2\x6c\x67\x6c\x58\x7a\xdf\xf5\x1c\xc3\xd2\x5d\xe2\x2f\xc2\xb6\x36\x30\x06\x58\x19\xf5\xb5\xa9\xa5\x78\x86\x6d\xf5\x65\x5b\x35\xf0\xfa\xbe\x86\x4c\x17\x1f\xa1\x19\x1b\x56\x7f\x8c\x5d\x17\xe9\x7e\x83\x39\x72\x2c\xc3\xd2\xff\xdc\xd0\x8e\x91\xa3\x0c\xfa\x13\xe4\x0d\x88\xbf\x88\xc9\x54\x36\x0d\xe5\x75\xcd\xac\x82\x3c\x64\xda\xeb\x66\x62\xb1\x29\xd5\x89\xa6\x98\x28\x4a\x44\x2e\x4d\x48\xdd\x5c\xa3\xd9\x20\x2a\xe5\x62\x6f\xd3\xfe\x8f\x81\xe1\x7a\xb6\xb3\xec\x7b\x0e\x52\xb1\x4b\xa4\xea\x95\x2a\x91\xac\x94\x1b\xcd\xba\x98\x2b\x37\x0f\x1e\x3a\x6e\xd8\x57\xec\xa9\xe5\x61\xa7\x8f\x5c\x17\x7b\x7d\x43\xed\x6b\x23\xbc\xfc\xf3\x2b\x10\x2a\xfe\xa7\xaf\x40\xb9\xd6\xab\xaf\x63\x30\xc0\x76\x3f\x77\x01\x81\x6b\x45\xbe\x84\xec\xa0\xd5\x1e\xb8\xdf\x3c\x57\x4e\x49\xdd\x83\x96\x1b\xb0\x3e\x55\x7d\xac\x69\x58\xf1\xdc\xbe\xbc\xec\xdb\x8e\x8a\x9d\xbe\x6c\xdb\xa3\xcb\x0f\x1a\x96\x8a\x17\xfd\x03\xe6\x2c\x17\xf9\x8a\xee\xf6\x6d\xab\x6f\xa8\xf7\x3c\x6d\x4f\xb0\x83\x76\xcf\x7a\xcb\x09\x7e\xe0\xe9\x3d\x25\x0f\x51\x71\xdf\xb3\x26\x56\x75\xec\xf8\x0f\xba\xf8\x7d\x8a\x2d\xe5\x2e\x16\x0e\x1e\x9f\x38\x78\x66\xd8\x53\x77\xf3\x5b\x7f\x80\xdc\x41\x44\x50\x8f\x43\x30\xc6\x13\xdb\x59\x9b\xe3\x66\x4c\x8d\x0a\x26\xaa\x2c\x15\xd3\x76\xb1\xda\x47\xde\x3d\xcf\x6f\x95\x39\x82\x2a\x6d\xec\x32\x02\xd1\x87\x4f\x22\x55\x75\xb0\xeb\x5e\x7e\x7c\xe0\x39\xaa\xef\x77\xfa\xa6\x6d\x8f\xa6\x93\x1b\x5a\x4f\xae\x91\x14\xb4\x42\x86\x73\x27\xe0\xed\xa0\x7b\xf3\x03\xeb\x71\x42\xd3\xb0\x73\x5b\xd3\x2d\xf8\x08\x8f\x6c\xc4\x7a\xdb\x43\xfe\xd0\x7a\x07\x92\xc3\xa1\xf8\xda\x13\x93\xf5\x03\x03\xef\x6a\x0f\xb8\x47\x03\x90\xbc\xbc\xaa\x46\x83\x9d\xa5\xdf\xd2\xd8\x0e\xe8\xb0\xaf\x36\x34\x5c\xaf\xef\x2d\xfa\x93\xeb\x20\xd7\x2d\xed\xc9\xad\x2d\xf1\xad\xcd\xb6\xae\xe4\x72\x63\x79\x6b\xee\x57\x9b\x5d\x1f\xc5\xe4\xe5\x6d\x9d\x19\xf8\xc8\xb5\xb4\x5d\x77\x7a\x0d\xf3\xae\xb1\x62\xab\xf8\xce\xb8\x60\xa7\x06\x13\xe4\x78\x86\x62\x4c\x90\x75\xd1\x79\x5f\x7b\xb4\x3f\xb9\x33\x36\xd9\x79\xb4\x7b\x29\x38\xfd\xe0\xdd\xf8\x7d\xe1\xdd\x82\x2f\x68\xf8\xe9\xf0\x83\xce\x5c\xf7\xe4\xe6\xe3\xda\x3f\x6c\x43\x3f\x5f\x19\xfa\x37\x52\xa0\xdb\xce\xa4\x3f\x36\xf4\x4d\xc0\x70\x81\x84\x50\xcb\x9b\x79\xbc\x3f\xde\xbb\x04\xf9\x56\xe5\x0c\x9e\x4e\x56\x8a\xad\x52\x99\x30\xd4\x00\x73\x4a\x4a\x8b\xad\x62\xf3\x46\xd8\x67\x94\xee\x09\x90\x37\xdd\x7d\x19\x92\xff\xed\x76\xf6\xb7\x5e\xba\x21\xd5\x5a\x52\x39\x19\x41\x66\xeb\x38\xdb\xc5\xef\x77\x63\x3e\x02\x72\xf3\xd3\x2a\xbe\xb1\xed\x3e\x9a\xbd\x99\xc3\x33\x56\x7f\x0f\x7f\xa7\x41\xdc\xf6\xec\x26\xee\xbb\xad\xf1\x26\xc8\xbb\x99\xb7\xcd\x08\x70\x0f\x2f\xc1\x23\x37\xb6\xdd\x84\x7f\xb7\xd3\xb3\x8d\x17\x6f\xa1\x28\x34\x86\x5c\x6e\x7c\x30\x24\x6c\x1a\x8a\x99\x4c\x5d\xca\x88\xcd\x13\x8d\xc7\xc6\x7a\xc6\x61\x28\xf8\x37\x6b\x3a\xc6\x8e\xa1\xfc\xf3\x5f\xbf\xdf\xf0\x14\x5a\x44\x78\xca\x44\xae\xf7\x1b\xb2\x96\xd8\xf4\x53\x31\x37\x3c\xa1\x19\xce\xc9\x47\xd2\xad\x72\xb2\x99\xab\x94\x2f\xf0\xd3\x47\xba\xbe\xa7\xee\x95\xf8\x40\xe8\x05\x18\x5b\xee\x1e\x80\xb1\xe6\xd5\x7f\x7c\x4f\xfc\x2b\x71\x0f\x23\x3e\xeb\x37\x40\x90\xba\x4d\xa9\xdc\x08\x81\x30\x27\xba\xfb\x6e\x6e\x75\x31\x99\x95\x4a\xe2\x07\x0c\x7f\xfe\x12\x64\xe1\xca\x68\x8c\xbf\x6f\x7f\x23\x9a\xcb\x09\xfe\xbe\x79\xe4\x4f\xa2\xa1\x0c\xf0\x18\x7d\x27\xbe\xfd\x49\x54\xe6\x16\x76\xbe\x13\xdf\xfc\xe4\x5c\xb2\x2e\xad\xfb\x6b\x03\x79\x0b\xef\x97\x23\x88\xc7\x37\x37\x80\x93\x95\x52\x49\x2a\x37\x2f\x40\x0e\x1a\x10\x95\xf2\x31\x00\x22\xd7\x20\x5e\xb6\x69\xb7\xed\x6f\xae\x0f\xe4\x25\x8c\x79\xcb\xfe\x06\xe7\x4e\x42\x57\xf9\x39\x92\x65\xb9\xd2\x0c\xc9\x93\xe8\xe4\x9a\xd9\x1d\x59\x87\xf9\xb7\x23\xf4\x7b\x28\x21\x42\xee\x61\xfe\x03\x10\x5f\x00\xd5\x62\x7c\xa2\x37\x6a\x45\x62\xe2\xd8\x0a\x56\xa7\x0e\x32\x09\x13\x59\xfa\x14\xe9\xd8\x17\xc3\x8d\xf9\xc2\x43\x72\xaf\x2b\xda\x86\xfc\xad\xae\xee\xe9\xdf\xf6\xed\x29\x59\xee\x34\xfb\x2a\x7c\xa2\x2e\x35\x5b\xf5\x72\xe3\xe0\xb7\x5f\x08\x82\x20\x8a\x62\x39\xd3\x12\x33\x12\xe1\x73\x5f\x2a\xb5\x82\xf1\xae\xd1\xac\xe7\x92\x4d\xbf\x85\xd8\x20\xfe\xd1\xff\x07\xd1\x90\x8a\x52\xb2\x49\xfc\x03\xac\xbf\x85\x7b\xe3\xaa\x21\x3e\xc6\xdd\x35\xf0\x4f\x63\x0e\x9e\x62\xee\x96\x91\xea\x31\xfe\x6e\xc0\xb0\x63\x71\xf7\x53\x24\x0e\x7f\xfb\x85\x20\x92\x62\x43\x22\x3a\x59\xa9\x4c\xfc\x03\xfc\x13\xfc\x2b\xfe\x0f\xf0\x4f\xf8\xaf\xff\xf9\x07\xf4\x3f\xc3\x7f\xc2\x7f\x11\xcd\xe0\x26\x21\x15\x1b\xd2\x5a\x28\x52\x39\xf5\xfb\x49\xc9\xdc\xe0\x07\x1e\x94\xcc\x75\x0c\x9f\x2d\x99\xff\x17\x45\x32\x1f\x7d\xea\x46\x0e\x3b\x3f\x7c\x9b\x20\xf6\x6e\xfb\x03\x44\x9f\x62\x82\x68\xac\x65\x45\xfc\xb5\x1f\x01\x5e\x83\x9f\x9b\xbd\xaa\x44\xfc\x75\x68\x11\xbf\x9f\xb2\xda\xa7\xd2\x18\x06\x18\x22\x71\x6b\xc6\xb7\x53\x78\x32\x04\x7a\x94\xca\x53\x40\x43\x94\x1e\x19\xe4\x31\xb9\x7b\x2d\xfb\x48\xed\xa9\x30\xef\x61\x6a\x4f\x00\x0d\x53\x7b\x68\x24\x17\xa9\x5d\x7b\x2e\x15\x6b\x68\x6a\x7a\x7d\x0f\xc9\x26\x76\x27\x48\xc1\xc4\x5f\xc4\xcb\xcb\x9f\xc7\x77\xe7\x86\x37\xe8\xdb\x86\x7a\xb0\x94\x76\xc4\xeb\x61\xfc\xbb\x61\xd1\x37\xb0\xdb\xd8\x0b\x6c\xf1\x70\xf2\x1d\x70\x64\xa8\x84\x6c\xe8\x86\xe5\xf9\x81\x41\xb9\x55\x2c\x06\xec\xa0\xf1\x3a\x8c\x27\x94\x01\x72\x90\xe2\x61\x87\x98\x21\x67\x69\x58\x7a\xa8\x99\x35\x1d\xef\x42\x7e\xc2\xb0\x3c\xac\x63\x27\xd4\x44\x33\x91\xee\x12\xee\x18\x99\xe6\x47\x34\x9e\x3d\x36\x3f\x22\xf9\x0d\x32\xcc\xef\xbb\x96\x1f\xbb\x3d\x3c\x6f\x88\x2a\x8e\x70\xb6\x63\x27\x12\x0f\x2f\x3e\x08\x64\x32\x31\x0d\x3f\x67\x4f\x78\xc6\x18\xbb\x1e\x1a\x4f\x88\x75\x9f\xf9\x5f\x89\x95\x6d\xe1\x8f\x84\x9e\x9b\x15\x6d\xe3\xd1\xcd\x74\xea\x36\x9a\x77\x93\xaf\x33\x50\x37\x6a\x28\xd6\x9b\x41\x44\x07\xfc\x1f\x72\xe5\x64\x5d\xf2\xc3\xaf\x44\x6f\xf3\x53\xb9\x42\x94\x72\xe5\xb6\x58\x6c\x49\xbb\xef\x62\x77\xff\x3d\x29\x26\xb3\x12\x01\xae\x31\x13\x59\xec\x61\x40\x1f\x54\x71\x93\xf4\x20\x2c\xbc\xf0\x66\xc8\xfc\xed\xe5\x0c\xc7\x2f\xdf\xbf\x3b\x58\x57\x4c\xe4\xba\xbf\x87\xbb\x2b\x58\xab\x38\xa1\x5b\x2c\xfd\xfb\x85\x8e\x0a\xe6\xc6\x0f\x73\x16\x64\x74\x76\x7c\x9d\xb6\x8c\x7d\xae\xee\x34\x99\x27\x9b\x2b\xb6\x7a\xaa\x39\x80\xa7\x9b\x07\xe9\xbf\x13\x0f\x30\xec\x25\x0b\x3b\x9d\x5e\x78\x92\xda\x1e\xc2\xfc\x32\xa5\xbd\xc4\x08\x51\xe9\x94\xa5\x14\x91\xe8\x5d\xe1\x28\xc8\xd0\x5d\x66\x68\x07\x2b\x74\xfb\x0f\x43\x3d\x47\xdb\x36\xe7\xf3\xa8\xd6\x6d\xe0\x6c\xd4\x2e\x64\x33\xfd\x73\x23\xfd\xc7\x14\xd7\xb9\x96\xbf\xfa\x0b\x1f\xbf\x9e\xd1\x66\x5f\x8f\x4f\xdf\x52\xb1\x87\x0c\xd3\x25\x86\xae\x6d\xc9\xe7\x95\x6d\x9b\x28\x7b\x54\x0e\x1b\x38\x1b\x39\x6c\xd7\xad\xcf\xd0\x76\xb0\x98\x7c\x93\x15\x9e\x5a\xc7\x3e\xfd\xe0\x46\x2c\x07\x99\x51\xbf\x23\x76\x74\x6c\x47\x39\x32\x84\x61\xdf\x11\xb7\xb5\xdf\x2d\x26\x87\x1c\x93\x3d\xf5\xf6\xbe\x29\xfc\x8c\x83\x91\x77\xf5\xa1\xa0\xed\x74\xa2\xde\xdc\x76\xa7\x3a\x9b\xaf\xa1\x75\xf6\x0f\xbc\x80\x0f\xf1\x80\x87\xcc\xbe\x62\x1b\x96\x7b\x5a\x07\x35\x8c\xfb\x13\xdb\x36\x4f\xdf\xf5\x57\x3e\x35\x7c\xae\xaf\xfd\xdb\x0e\x76\xb1\x33\x3b\xd7\x64\x1d\x87\x7a\x8b\xbe\x1f\x26\x19\xab\x73\xad\x26\x8e\xed\xd9\x8a\x6d\x9e\xe5\x2b\xdc\x47\x5b\x65\xc1\x48\xc5\x8e\x1f\x5e\x04\xbf\xbb\x53\x45\xc1\xae\xab\x4d\xcd\xfe\x59\x45\xd9\x30\x8e\x0c\x13\xab\xd7\x5a\x6d\x48\x3f\xa3\x42\xe7\x4d\xef\x4c\x7e\xfb\x51\x4b\x3c\xb3\x66\x72\xc5\x2f\xde\x3e\x22\x5d\x1f\xe3\xee\x65\xf9\xb9\xae\xee\x22\x8e\xaf\x72\x7d\x77\x31\xfa\xa0\x2b\xbc\x88\xeb\xa3\x6b\x3c\xdd\xfc\x82\xab\x3c\x58\xfd\x79\x9a\x6e\x5e\x9b\x0a\x1d\x57\x5e\x9d\x99\x2e\xad\x67\x07\x4a\xc0\x8a\xef\x25\x1f\x74\x92\x9b\xd1\xc1\x9e\x3a\xca\xae\x94\xe3\x8c\x7b\xda\x0e\x39\x2f\x2f\xdf\xbf\x9f\x9f\xae\x9d\xb7\x83\xcd\xe2\xdb\xa3\xe2\xdc\xd4\x0b\xfe\xf6\xd4\x98\x62\x33\x6c\x46\xf1\x70\x7e\xbd\xcc\x59\xb4\xa1\x6a\xc5\x4b\x8d\x36\x05\x94\x97\x9a\x04\x73\xe5\x93\x0d\x3e\xd6\x7d\x5e\x69\x77\x11\xdd\xae\xd5\x05\x8c\x3e\x49\x86\xdb\x77\xb1\x69\x62\x87\x90\x6d\xdb\xc4\xc8\xda\xfa\x2d\x43\xc1\x7d\xeb\xc8\x47\x07\xbf\x1d\xfb\xed\x7d\xc5\x51\x3f\xe4\xd1\x8f\x6a\x9e\xc2\x37\x0f\x96\xf2\x4f\x56\x87\xfa\x54\xf7\xfd\xfa\x61\x22\x99\x95\x92\x05\xe2\xb7\xdf\x0e\x25\xf8\x3f\x04\xf9\xfb\xef\xd7\x40\x9d\x7a\x7c\x2b\xb4\xff\xf7\x41\x8e\x37\xc0\x3b\x92\x69\x08\x7c\x48\xe0\x3e\x81\x17\x4d\xe9\xf4\x2a\xf8\x13\x8c\xeb\x74\x5d\xc3\x8d\x9e\xf4\x96\x21\xec\x11\x5f\x7a\xad\x86\xe0\x39\xde\xf4\x0a\x96\xaf\xf2\xa7\x77\x32\xfb\xa0\x47\xbd\x82\xed\xa3\x4f\x3d\xf7\xc0\x05\xaf\x7a\x54\x37\xf2\x44\x5d\xdd\xea\xe7\x21\x49\x37\x4f\xb4\x36\x63\xff\x95\xe9\xdb\xad\x8e\xf7\xb2\x0f\x3d\xd9\x76\x8f\xfa\xa4\xbd\xac\x67\x0a\xe7\xa7\x1a\xe7\x26\x71\x3f\x64\x1a\xe6\x2d\xfa\xd8\x9a\x61\xd3\x9e\xe0\x53\xa9\x4d\x6f\xb1\x9e\x14\x4d\x4d\xef\xcc\xcd\x31\xf6\xd0\x99\x5b\xeb\xe9\xd8\xb9\xdb\xae\xa1\x5b\xc8\x9b\x3a\xf8\x54\x16\x4e\x60\x7f\xff\xe7\xbf\xf6\xb1\xcb\xbf\xff\xf7\x54\xf4\xf2\xcf\x7f\x85\x65\x8e\xc7\xf6\x99\x84\xd9\x1e\x96\x65\x5b\xf8\x62\x2c\xb4\x87\xf5\x11\xcc\x86\x33\x63\x8c\xfb\xb2\x3d\xb5\x54\x3f\xab\xcd\x3b\xc8\xd2\x71\x78\xc6\x76\xec\x5a\xd7\x92\x58\x43\xd3\xb1\x7a\x7d\xba\xb5\xc9\x0f\x1a\xea\xd6\xda\xb6\x65\x5e\xb7\x0c\x11\x81\xb9\xf9\x35\x75\x57\x2a\xc8\x1a\x52\xf3\x42\x2e\xf5\x30\x6b\x75\x98\x49\xbd\x6f\x1e\xf1\x3c\x26\x6e\x2c\xb0\xbb\xc8\xd4\xc5\xf9\xc7\x2d\x4c\x9e\xf5\xb4\x4f\x63\xf3\xe6\x1a\xc5\x8b\x8c\x5e\x71\x0b\xa7\x59\x4d\x21\x0f\x11\x9a\xed\x5c\x59\x51\x22\x52\x62\x53\xbc\xc2\x5e\xae\xdc\x90\xea\x4d\x22\x57\x6e\x56\x8e\x56\x95\x7c\x2f\xda\x20\x7e\x03\xaf\xc4\x0b\x43\x6e\xaf\x97\x57\x02\xbe\x12\xe4\x2b\xf1\xf2\xf2\xfb\x9f\x57\x9f\x85\x17\x9e\x3d\xc3\xca\xa5\x15\xa1\x7b\xd9\x09\xaf\x0a\x6d\xc9\x7a\x01\x7d\xc3\x32\x3c\x03\x99\xfd\xa0\x42\xe7\x0f\xf7\xdd\x7c\x79\x25\x5e\x20\x09\x84\x6f\x24\xfb\x8d\xa4\x08\xc0\x7f\x87\xfc\x77\x9a\xfb\x83\xa4\x20\x2d\xb0\x31\x12\x86\x19\x3e\x0b\x1d\xf6\x83\x9d\x17\x47\xbd\x29\x2f\xfb\x9e\x6d\xa8\x97\x31\x09\x2c\xc3\xdd\x83\x89\xea\x4f\x5d\xbc\xf3\x6e\x7d\xc3\xfa\xb0\xdb\xe3\x22\x3e\x9a\x26\x69\xfe\x1e\x7c\x74\x1f\xa9\x6a\x3f\x9c\x33\xbb\x88\x83\xa1\x19\x0a\xde\x83\x83\xe9\x07\xbe\x74\x1b\xd5\xfb\x6b\xad\x17\x51\xb0\x14\x09\xef\x62\x83\xdd\xa2\xd8\x8c\x9c\x37\xa0\xe0\x69\xc0\xdc\x83\x82\xeb\x8f\x6d\xd5\xd0\x96\xb7\x73\xc1\x03\x16\xde\x85\x82\x3f\xe2\x62\x53\x62\x7d\x03\x1e\x8e\x66\xa9\xfb\xf0\xac\x3b\x1d\xe9\xba\x83\x75\xe4\xd9\xce\x65\x9d\x12\x48\x40\x0a\xf7\x80\x17\x7c\xf0\x41\x3e\xb5\xbf\x50\x9d\xcb\xd0\x21\x07\xee\xea\x6a\x40\xfa\xe0\x37\xbd\xe0\xcf\x90\x2f\x23\x60\x04\xee\x2e\xe9\x00\x70\x88\x60\x37\xe5\x5a\x0f\x00\x97\x11\x09\xac\x70\x1f\x27\xf0\xa8\xa3\x37\x93\xdc\x60\x53\xef\x25\x4c\x80\xe4\x18\xfa\xae\x1e\x01\x54\xc0\xce\x2e\x35\x70\xb1\xc7\x01\x80\x1c\x7b\x1f\x27\x74\x5f\x33\x16\xdb\x0d\x0e\xf6\xd8\xec\x6b\x06\x36\x2f\x0e\x8d\x00\x30\x00\xdc\x35\x08\x03\x66\xbb\xae\xb3\xcd\xb7\x2f\xae\xb0\xc1\x72\xf7\x0d\xf3\x80\xed\x1b\x96\x8e\x5d\xaf\xff\x31\xa3\x7f\x05\x15\x27\xf0\xf7\xf5\x08\x77\x14\x26\xf8\x4b\x27\xe8\xb2\x33\x01\x90\x24\x29\xfa\x2e\x24\xfc\x4e\x7d\x35\xdb\xe9\xaf\x83\x7e\x1c\x32\x76\x40\x7e\xa3\x00\x01\xe8\xef\x40\xf8\x4e\x0b\x7f\x00\x48\xf1\x14\x13\x23\xc1\x05\x7f\x7e\xb1\xd6\xe0\x5e\x87\xfe\xa1\xde\xe0\x30\x48\xc9\x88\x4c\x27\x51\xed\x89\x4c\x8f\xee\x88\x52\xb6\xdb\xa9\xc3\x56\xa1\x02\x5b\x15\x3a\xd1\xca\x64\x5b\x35\x8e\x96\x5a\xd5\x42\xa5\x0c\x6b\xd9\x36\xdd\xa9\x67\x2b\xb9\x7a\xb9\x50\xc8\x7e\x10\xd0\x59\x24\xeb\x68\x26\x93\xec\x16\x32\x6c\xbd\x4c\x57\xca\x39\xa9\x9a\x2c\x95\xd3\x09\x8e\x82\x22\x4d\xb1\x6f\x4c\xb5\x9c\x6a\xd4\x8b\x99\x4e\x81\xcb\x24\x8a\xc9\x52\xad\x98\x4b\x57\xe8\x06\x27\xf5\x3a\xed\xd6\xcd\x48\x28\x1f\x49\xad\xda\xcb\x64\xe9\x02\xc3\x75\x13\x29\xa9\x5c\x28\x74\x19\xa6\x90\x6a\x76\x2a\xcd\x02\xd3\x49\x75\xea\xb5\x4a\x16\x16\xb3\x52\xaa\x4b\x49\x85\x76\xae\x56\x2f\x96\xa4\x46\x26\x91\xb9\x19\x09\xed\x23\x81\x54\x2d\x0d\xb3\x2d\x89\x81\x62\xa9\xdb\x4a\xb7\xb2\x94\xd8\xcb\x8b\xdd\x6e\xa6\xdb\x6d\xc3\x76\xb6\xdb\xeb\xd5\x59\xa9\xd7\x95\x9a\xd5\x42\xaa\xfb\xd6\x10\x3b\x2c\xd7\xad\xd0\x37\x23\x61\xd6\x48\x12\xf5\x6a\x2f\x9b\x2b\xc2\x64\x8e\x4a\x97\x6b\x74\xa2\x5b\x4c\x97\xca\xa9\x62\x3a\xdf\x2a\x57\x5b\x30\xdb\xa3\xde\x4a\xe9\x46\xb6\x52\x6e\x25\xa5\x8a\xd8\xe8\x70\xb5\x24\x57\xe9\xc2\xec\x4b\xd4\x02\x9c\x75\xac\x7d\x45\xa1\x36\x45\x8b\xfb\x7a\xe3\x3f\x5c\x7c\xb9\x38\xe5\x95\x60\x5e\x09\xcf\x99\xe2\x1b\xd4\xfc\x63\xd9\x49\x64\x25\x0f\xa6\x82\x87\x2a\xae\x38\x58\x35\xbc\x3e\x32\x27\x03\x64\x4d\xc7\xf4\xda\x30\x5b\x8d\xd4\xcb\x67\x74\xe7\x31\x76\x78\x06\xbb\xd4\xaa\xbf\x7c\x86\xc6\x1e\x63\xa7\xce\x60\x6f\x48\x85\x47\xb1\x47\xa8\x31\x79\x8a\x8a\x1d\xcd\xd9\xfd\x89\xd1\x6d\x0a\x76\xaa\xc4\x24\xaa\x86\x6d\xcb\x4c\x0e\x3a\x99\xe6\x20\x4d\xb3\x34\x4d\x31\xd4\x2b\x01\x5e\x09\x6a\x2d\xfa\x7f\xff\x1a\x2c\x41\xfc\xfa\x9d\xf8\x35\xea\x28\xfb\xeb\x2b\xf1\xeb\x36\x9e\xf8\xf5\xfb\x1a\xf4\xaf\xae\x6d\xaa\x9b\x38\x66\x0d\x19\x92\x7f\x6c\x26\x8a\xeb\xb6\xb2\x3d\xd5\x07\xde\xd9\xdb\xc1\xb3\xbb\x3a\xaa\x75\x83\x56\x23\x15\xba\xe3\x2d\x27\xfe\x9d\xb0\xea\x1c\xc2\x3f\x02\x21\xb5\xea\x1f\xee\x5d\x02\x72\x80\x2b\x28\xcf\xf2\x25\x14\xd1\x12\x3f\x60\x3e\x04\x19\x4d\xc1\x7f\xfd\xdf\x73\x06\x16\xee\x7a\x10\xea\x7a\x78\xaa\xeb\x23\xfa\xbe\xcf\xef\xfa\x4d\xbf\x3d\xd2\xf5\x1b\xed\x79\xb4\xeb\x23\xf6\xd3\xa5\xae\x8f\xa8\x4d\x37\x77\xfd\xba\xab\x79\x96\xa1\x39\x52\xe0\x58\xf0\xd5\x56\xcf\x5c\xee\x7a\xe6\xbf\x56\xff\xb9\x56\x7f\xd4\xf5\x5f\x6b\xf5\x8f\x76\xfd\x7f\xad\xfe\x01\xab\x5f\xf7\x36\xa0\x39\x9a\xa7\x49\x86\xe3\x7c\xab\x87\x7e\xcf\x1f\x76\xc0\x51\x0f\x9c\x14\xfe\x75\x91\x7d\xbd\x56\x53\x21\xd6\xd6\x5a\xfd\x7f\x84\x35\xf8\x4a\x00\x0e\x70\x02\xcf\x51\x90\x07\xf7\xf7\xda\x46\xdf\xa3\xb0\xf6\xd9\x0a\x49\x87\x58\xbb\xb7\xd7\x7e\x62\xd6\xd6\x1d\x05\x79\x9e\x16\x48\x46\xe0\x99\xa0\xd7\x48\x9f\x37\xd3\x18\x1b\x3e\x6b\x02\x84\x14\xc5\x41\x92\x62\x79\xe6\x0f\x9a\xe3\x18\x9e\xe4\xfe\x56\x3c\xc2\x2d\x8f\x80\x24\xb7\x9a\xf9\x7f\x97\x47\x1a\x6c\xc7\xcc\x48\x3c\xfe\xc4\x23\xcc\x4e\x57\x01\x0f\x39\xea\xff\x26\x8f\xf0\x95\xe0\x19\x5e\x10\x28\x9e\xe5\x05\x9f\xc5\x80\x43\xd7\x43\x8e\x67\x58\x7a\x5f\x46\x26\xb2\x14\x9f\x62\x70\x30\xe6\xdc\x8c\x80\x39\x46\x70\x62\x28\x03\xa7\x86\xb2\xad\x94\x2c\xe4\x19\x33\x1c\x99\x9f\x75\xaf\x05\x0c\xcd\xb1\xa1\x0f\xbc\x4d\xf4\x15\xa4\x05\xfa\x23\xbc\x7c\x28\xac\xbb\x47\x93\x7c\xaa\x68\xc8\x6d\x06\xbd\x4f\x92\xf2\x06\xc1\x67\x4b\x39\xc4\xcf\x6d\x52\x8e\x3a\x6f\xba\xc7\x6d\x06\x54\xb1\xfc\x66\xd8\xfd\x2c\x29\x07\x08\x3e\x5b\xca\x21\x7e\x6e\xd4\xe5\xcf\x1e\xf9\xa9\x0d\x55\x0c\x29\x6c\x06\xfe\x4f\x92\xf2\x06\xc1\x67\x4b\x39\xc4\xcf\x8d\x52\x7e\x64\x5c\xbe\x92\xd6\x3c\xb5\x63\x2c\x6a\x5a\x73\xbb\x6b\x6c\x67\xb8\xe0\x95\x78\x61\x69\x4c\x2a\x02\x49\x42\x2c\xd0\x1c\xc7\xd3\x94\x40\x29\x24\xaf\xf2\x18\x32\x0c\xc5\xcb\x08\x09\x98\x23\x59\x9a\x57\x14\x84\x30\xab\xd1\x08\x32\x9a\xc2\x50\x1c\xcf\x03\x41\x05\x0a\xfb\xf2\x4a\xbc\xd0\x00\x00\x12\x63\x85\x84\x80\xe7\x69\x48\xca\x88\xa5\x69\x5a\x61\x14\x4d\x53\x79\x15\x40\x95\x14\x48\x5e\x81\x24\x92\x35\x0e\x29\x8a\xc0\xb2\x02\x0f\x20\xa9\xc8\x24\xa4\x35\xc0\x70\x2f\xbe\xe6\x80\xd0\x8a\x1d\xfb\x9d\x62\xbf\x43\x3a\xbc\x90\xe7\xff\x0c\xf8\x3f\x18\x8e\x67\x39\xe6\xea\xdd\x4d\xf6\x8e\x84\x0c\xfb\x4a\x80\xf5\x7f\xe4\x87\x6b\x7d\xc3\xff\xbb\xf9\xb3\xfb\x75\xf7\x61\x4d\x9b\x28\x8a\x62\x92\x94\xea\xa9\xe9\x3c\x99\xc9\xd5\xf4\xe9\xb8\x2e\x2d\x94\xb8\x30\xac\x17\x6b\xa3\xdc\x5c\x7f\x8f\x63\x77\xd9\x41\x3d\x49\x5f\xce\xf3\xd5\x74\xf7\x9d\x66\x67\x8d\x86\xcd\xd9\x0d\xb7\x31\x36\xdf\x46\x9d\x59\x37\xd1\x84\xd8\x59\x0e\x56\x42\x16\xe7\xd8\x0c\x50\xd5\xfc\xdc\xb4\x27\x76\x6b\x0d\x5a\xec\x56\xdb\x25\x43\xdc\x5f\xcb\xa6\xdd\xee\x8d\xe1\xa0\x57\xa7\x72\xad\x34\xc5\x4f\xc6\xef\x5c\xb9\x9d\x1a\xa6\x4b\xab\xba\x93\xaf\xe5\xd2\x4b\x57\x9e\xf2\xc9\x7c\x71\x65\xa7\x06\x3d\x27\xc6\xba\x76\xac\x59\xee\xc6\x56\x71\xbb\xb7\xa2\x33\x1c\x22\x75\x59\xcf\x25\x6a\xca\x68\xea\x4d\x7a\x92\xce\x8b\x15\xbe\xa9\xaf\x21\xbb\x65\xba\x88\x56\x13\x58\x3b\xc0\xf6\x26\x86\x2e\x29\xf8\xb5\x0b\xe8\x9a\x28\xa6\xc8\x7c\xf8\xfe\x4f\x7f\xbd\x6c\xc7\xa3\x72\xab\x58\x3c\x63\xff\x1f\x4c\x82\x7c\x8e\x3a\xbf\x60\x12\xcb\x50\x40\x98\x57\x14\x86\x57\xa1\xaa\xa9\xac\xac\x21\x96\x23\x15\x8a\xa7\x34\x45\x86\x1c\x56\x38\x06\x31\x2a\x87\x58\x92\x62\x00\x05\x54\x8c\x21\xa9\x41\x92\xc2\x2c\x04\xfc\x25\x93\xa0\xce\x29\x3d\x0b\x78\x81\x62\xaf\xde\xa5\xa1\x40\x0b\x2c\x07\x05\x96\xbc\x64\x12\xcc\x8d\x26\x11\x4b\x39\x05\xc4\x96\x16\x3d\xd2\x8b\x77\x66\xec\xdb\x7c\x4e\x57\x79\xd7\xe2\xb2\x1d\x13\xb0\xbd\x54\xab\x99\xc5\xb4\xce\xeb\xd5\x71\xae\xd7\x19\x61\xde\x1c\xc9\xa5\xf4\x9b\x1b\xab\x64\xda\xcd\xb7\x54\xd3\xa4\xbd\x74\xb7\x3c\x54\xe2\x93\x4c\x4d\x9d\x8e\x2a\x6f\xbd\x11\x80\xb2\x41\xfa\x5d\xb8\x36\x89\xc1\x7c\xdf\xa5\x3c\x2b\x59\xca\xaa\x51\x57\x2b\xb4\x93\xcc\x55\xc6\x0d\x1e\x2d\xb3\x83\x99\xfb\x9e\xb5\xca\xf1\x42\xda\x1b\xc9\x7a\xb9\x63\xc6\xe7\xa5\x3c\x5e\x8d\xdd\x41\x8e\xed\xbd\x19\x2a\x30\x49\x7a\xc4\x64\xea\x34\x53\xcf\x35\x8b\x6a\x9a\x6d\xdb\x85\xc9\x28\x67\xcf\x63\xc9\x6a\xaa\x9d\x8c\xfb\x26\x61\x9f\x30\x89\xae\x12\xd2\xa8\xff\x48\x93\x10\x9e\xa3\xcd\x2f\x00\x51\x82\x02\x10\x54\x35\x4e\xe3\x38\x2c\x00\x4d\x41\x02\xc7\xb3\x14\x60\x15\xcc\x91\x80\xe1\x59\x1e\x91\x88\x04\x32\xe4\x55\x86\x25\x35\x59\x81\x14\xcd\x03\x59\xa3\x90\x46\xd3\xf4\x25\x8b\x80\x67\x75\x9e\x02\xec\x05\x7b\xd9\xde\xdd\x24\x7b\x19\x96\xa5\x2f\x59\x04\x7d\xa3\x45\x2c\x6c\x66\x8e\x8a\x9a\x46\x69\x93\x2c\xff\xde\x1d\x0c\xd3\x2e\x33\x4f\xf7\x50\x21\xa9\x67\x96\xc3\x76\xaf\x3a\x4b\x96\x73\x99\x78\x65\x56\x97\xe4\xe2\xdb\x8c\x12\x2b\xb5\x37\xad\x3c\x4a\x69\xea\x32\x96\x5f\xf4\x1a\x3c\x3b\x30\x39\x98\x4a\x4c\x57\x63\x88\x86\xfc\x2c\x6b\x58\x29\x79\xe4\xf7\xa0\x6f\x11\xfa\xbe\x47\x05\x73\x92\x88\xd9\x63\xb5\x67\x17\x57\x92\xd9\x8e\xf3\x66\xc7\xf4\x4c\xcc\xc5\x27\x19\xc5\xb5\xe2\x7c\xb7\x09\x54\x3d\x07\x62\x59\xb5\xb2\x5c\x8a\xd3\x18\x45\x71\x99\x7a\x3e\xbd\x34\xca\x6d\x95\x34\x26\xa2\x99\xe3\xc6\xea\x68\xbc\x54\xa4\xce\x5b\x8c\x77\xde\x57\x6f\x43\xba\xe8\x5b\xdc\xe8\x84\x45\xb4\xe9\x90\x42\xa5\xc4\xff\x40\x8b\xe0\x9f\xa3\xcd\x2f\x0c\x56\x15\x9e\x92\x01\xa6\x30\x27\x90\x82\x4a\xaa\x8a\x2c\xcb\x02\xe6\x14\x4e\x50\x00\xa9\xf2\x0c\xa0\x20\x07\x18\x44\x22\x4e\x86\x2a\x84\x18\xf1\x24\x2f\xb3\x88\x26\x49\x5e\x15\xe4\x4b\x16\x01\xce\xea\x3c\x4d\xf3\xfc\xd9\xa0\x6a\x77\x97\xa2\x29\x46\xe0\x28\x9e\x62\xf9\x4b\x16\x41\xdd\x68\x11\x80\x53\x74\x2e\x3b\x64\x98\xa4\x9a\x52\xa6\x9c\x65\x2d\x98\x79\x0d\xa6\xa5\xa5\xd2\xb6\x0b\x78\x49\x1a\xac\x9d\x2c\xa2\x91\x98\x83\xf2\xfb\xd4\x1c\x17\x4a\x1c\x33\xcf\x66\x29\x77\x36\x29\x4c\x87\x54\x21\xcb\x0d\x93\x83\x84\x55\x87\xc0\xce\xbe\xd9\xaa\x1d\xef\xea\x29\xbc\x72\xfd\x1e\xf4\x2d\xe2\x40\x49\x79\x12\x80\x1c\xaf\xcc\xb1\xd1\x6e\x15\xeb\x23\x4e\x8f\xe5\x28\xdc\x29\xc5\x47\xb1\x56\xcc\x9d\x15\x8b\xb3\x7c\x91\xef\x0a\x52\x39\x01\x9c\x02\xaa\x5b\x66\x69\xc9\x4b\xab\xba\xa3\x55\x57\xc6\x08\xe5\xd9\x52\xd2\x68\x77\x63\x99\x3c\x2b\x31\x09\x0f\x52\x9d\xd9\xa2\x97\x1d\xa5\x7d\xc8\xfa\x09\x8b\x68\xb5\x42\x0a\xf5\x1f\x69\x11\xdc\x73\xb4\xf9\x05\x23\x85\x52\x05\x8d\x65\x59\xc4\x70\x9a\xcc\x40\x12\x6b\x00\x70\x18\x0b\x3c\xa5\xca\x32\xc5\xb3\x32\x24\x55\x96\x66\x49\x16\xc9\x2a\x4f\x02\x1a\x50\x2c\x45\x41\x56\x90\x15\x45\xe1\xc8\x4b\x16\x41\x9e\xd5\x79\x86\xa3\x2e\x78\x90\xf5\x5d\xdf\x47\x90\x24\x4b\x73\x1c\x20\x39\x78\xc9\x22\xe0\xad\x51\x93\x93\x82\xda\xdb\x78\xd2\x8d\x81\x5c\x85\xaf\x6b\xd3\x71\x0a\x72\x95\x8c\xab\x83\x51\x2f\xf3\x2e\xe8\x89\x5a\xb3\xb7\xca\x4f\x66\xa5\xc5\xbc\x3e\x88\xcd\xd1\xac\x92\xf3\x52\xa0\xa9\xc6\x15\x2c\xf7\x32\x66\x59\x1e\xe7\x53\xde\x38\xae\xc6\xbc\x56\x41\xb5\x2b\x2c\x5c\xa4\xe6\x5e\xce\xef\x41\xdf\x22\x0e\x7a\x74\x5a\x73\xaa\x35\x07\xbe\x9b\xe5\xf6\x24\x99\x7b\x1f\xd4\x10\xae\x95\xdc\x94\x90\xef\x74\xca\x68\x91\x6b\x54\x72\xf3\x92\xbb\x98\x19\x66\xae\xdd\xe0\x2a\xb3\x32\xdb\x4a\x17\x45\x8d\xd7\x92\xf2\x54\x1c\x51\x3d\xc4\xce\x6b\xcc\x3b\x5b\x62\x9d\x85\x44\x56\xaa\xa5\xf2\x40\x17\x27\x6d\xdf\x08\x94\x13\x16\xd1\x98\x87\x14\x2a\x29\xfe\x07\x5a\x04\xfb\x1c\x6d\x7e\x11\x30\xcf\x28\x0a\x62\x48\x9e\xa6\x54\x81\x46\x34\xaf\xb2\x80\x26\x05\x5e\x50\x18\x41\x96\x01\xc9\x0b\x32\xc7\x6a\x90\x54\x35\x52\x65\x49\x1a\xd1\x02\x0d\x58\xcc\x51\x0c\xad\x30\x80\x64\x2e\x58\x04\x10\xce\xea\x3c\xcb\x32\x24\x77\xf1\xee\x3a\xa4\x83\x0c\xc7\x0a\x3c\x49\x71\xdc\xc5\xa9\x35\xb8\xd1\x22\x18\x36\xbd\x2a\xb4\x72\x35\xc1\x2c\x34\xca\xbd\x56\xb2\x67\xa5\xc7\x9c\x94\x1b\x53\xf2\x32\xa5\xa5\x3a\x89\x42\xa3\x95\x9e\x2a\xa0\x99\x96\xd2\xc9\x7a\x3a\xa6\xe2\x69\x37\x95\x4f\xcb\x09\xee\xbd\xa7\x0e\x46\x8d\x4e\xb1\x95\x73\xf9\xd8\x4c\xa4\x5b\xf6\x28\x5b\xc4\xb3\x76\x6b\x0c\xb2\x7e\xc8\xee\x5b\x84\x7e\xa0\x97\x8c\x97\x46\xa3\xb8\x36\xe0\x4a\x52\xc5\xf0\x06\x43\x73\xa9\x4a\x4e\xa2\x45\xc6\x4b\xa4\x61\x22\xac\x4d\x41\x4b\x26\x93\x73\xa0\xc8\xb5\x4e\x9e\xcc\xa2\xbc\x35\x16\x07\x93\x98\x98\x34\x5c\xa3\xd8\x26\x27\x1c\x65\xa6\x1a\x2d\x99\xcf\xb6\x0a\xae\xb5\xa8\x57\x32\x62\xa6\x59\xf6\x8d\xa0\x77\xc2\x22\xea\xa5\x90\x42\x25\xc4\xff\x40\x8b\x60\x9e\xa3\xcd\x2f\x34\x56\x28\x45\x11\x64\x44\x43\x16\x50\x2a\xc5\x00\x4e\x81\x2a\xe2\x39\x86\x17\x48\x84\x79\x00\x68\x92\xa7\x65\x0e\x42\x86\x53\x79\x5a\xd1\x04\x5e\xe1\x59\x12\xa9\xaa\x2a\x33\x0a\x02\x97\x2c\x82\x3f\xab\xf3\xeb\xd0\xee\xfc\xcc\x7a\x7b\x37\x58\x5e\xa7\x58\x9a\xbf\x38\xb3\x26\x6f\x4d\x36\x71\xa9\x55\x7e\x3a\xca\x0f\xaa\xcd\x56\x77\xee\xbd\x67\x3b\xf9\xe4\x54\xaf\xd7\x72\x0d\x2a\x67\x6a\xbd\x66\x75\x5c\x1a\xe8\x8e\x0a\xc1\x72\xe0\x64\x9d\xd9\x6a\xd1\xab\xea\xca\xd2\x49\xc6\x2b\x2a\xab\x56\x3b\x42\xe9\xcd\x62\x99\x22\xcf\x36\x34\x43\x9d\x70\xc3\x64\x8d\xa9\x35\xf4\x40\x19\x7d\x8b\x38\x98\x47\x98\x42\x02\x8d\x33\x1e\x9f\x5e\xe9\xed\x14\x39\x6b\x95\x52\x7c\x86\xcf\xe2\x91\x32\x37\x2c\x15\x50\x55\x47\x8f\x57\x32\xd5\xfc\xa2\x95\x1c\x25\x97\x4d\x7d\xd9\x8a\x17\x72\x73\x92\x7d\xab\x42\xcf\x02\x7a\xad\xe3\xb8\xf8\xad\xa8\x82\x78\xa7\xd3\xd0\x04\x2f\x56\xec\x98\x6c\x9c\xf7\x8d\xa0\x75\xc2\x22\xaa\xf6\x29\xad\xfa\x4f\xb3\x08\xfa\x39\xda\xfc\x82\x10\x2b\x2b\x1a\x86\x34\x8d\x69\x4d\x20\x11\x90\x31\x23\xf3\x88\x04\x24\x27\x43\x48\x29\x48\xe6\x19\x85\xa4\x18\x8e\x13\x54\xc4\xf1\x48\x01\x0a\x8b\x14\x41\x51\x65\x5e\x60\x49\xea\xa2\x45\x9c\xf7\x02\x02\x60\xce\x1b\xc4\xe6\x66\x50\xb8\xc0\x0a\x80\xbf\x34\xaf\x16\x6e\x34\x07\x76\xe2\xac\x62\x79\x89\xa9\x8e\x0a\x99\x58\x87\xb6\x13\x09\x2e\x37\x5c\x3a\x03\x45\x04\x2a\x03\x2d\xc3\xcd\x66\x9c\xfc\x4a\x36\x3a\xe2\x02\x64\xdb\x64\x6f\x36\x6f\x60\x2d\x2f\xa9\xa2\xd2\x7b\x4f\x4d\xe8\x44\x8f\x2a\xb2\x85\xa6\xd0\x53\x1d\x6a\x8a\x10\xe7\x26\x73\xba\xdd\xd9\x27\x9a\xf4\x03\x0d\xad\x83\xf8\x20\x3f\x8c\x6b\xac\x81\x2a\xf9\x58\xdd\x2c\xaa\xdd\xa4\x58\x98\x76\xb4\xfa\xbc\x33\x04\x65\x93\xc4\x8c\xe2\xd5\x54\x76\xd4\x7e\x4b\x02\x2d\x57\x45\xe5\x46\x2e\xcd\x75\x8b\xbd\xf1\x7b\xc2\x98\xb6\xba\x5e\x07\x91\x95\xec\x6a\x52\x03\x9d\x98\xad\x24\x69\x65\x39\x2e\xbe\xfb\x90\x6b\x27\xcc\xa1\x22\x9d\x52\xa9\xff\x34\x73\xa0\x9e\xa3\xca\x2f\x0a\x56\x79\x52\x20\x69\x59\x53\x58\x52\x40\x94\x46\xc9\x3c\xa3\x91\x1c\x40\x1c\x0b\x59\x19\x61\x85\xe3\x90\x86\x30\x4d\x01\x15\x70\x1a\x0f\x29\x01\xf1\x14\x25\x73\x1c\xc7\x6b\x14\xb7\x8e\x8a\x68\xff\xdf\x09\xd5\x3e\xab\xf1\x1c\xc9\x91\xe4\xd9\xd5\x88\xdd\xdd\x4d\xb9\x0b\xe0\xf9\x4b\xd3\x6a\xfe\x46\x83\xe0\xb9\x5e\xb2\xd6\x88\x2f\xf4\xf1\x90\xe7\x06\x5a\x62\x31\x81\x79\xc7\x71\x55\x36\x36\xad\x2d\xc8\x6e\x2c\x59\x41\xfa\xca\xa3\x70\xb5\xcc\x2c\x9c\x74\xb3\x51\x29\x69\x74\x47\x6e\x4c\xa6\x42\xb7\x32\x54\xf2\xba\x51\x1c\x3a\x2d\x13\xa2\x0c\xd4\xc4\xf8\xdc\x6e\x2e\xdc\xa9\xa3\x04\x8a\xe9\x1b\xc4\x41\x87\xca\xa9\x79\x5c\xaf\x36\xa7\xbc\xe4\x8c\xbb\xc9\xa6\xc3\x36\xb8\xa2\xc4\x96\xbb\x70\x55\xab\x94\x73\x39\x0c\x07\xa3\x4a\x41\x2a\xd0\x8c\x9b\x2c\xd7\x8b\x46\x37\xc1\xa0\xac\x56\x10\x33\x1d\x87\xca\x2e\x6c\xb3\x56\x5b\xe8\xcb\x45\x37\xa9\x0e\xab\x4b\xc4\xbe\xb5\x57\xa8\xdd\x48\x37\xfd\x88\xac\x74\xc2\x20\x8e\x50\xef\xae\xbf\xb9\x41\xd0\xf7\x1a\x04\x7c\x8e\x32\xbf\xb0\x94\x2a\xf0\x1a\x43\xb1\x18\xb3\xbc\x0a\x64\xc8\xc9\x8c\xcc\x0b\x1a\xa4\x90\xc6\x50\x00\xc8\x1c\xc3\x0a\x08\xd2\x1a\xd2\x00\x4d\x52\x48\x25\x65\x06\xca\x2c\x45\xc9\x24\x27\x63\xe1\xa2\x41\x9c\x57\x79\x08\x2e\x2c\xcf\xed\xee\x06\xf5\x19\x34\x23\x5c\x9a\x54\xdf\x9a\x77\x85\xd5\xb7\x21\x28\x4f\x19\x9b\x94\xf3\x5c\x87\xb6\x96\x95\x59\x6b\x91\xa1\xda\x13\x7b\x14\x9b\xa5\xc5\x8a\x97\x04\x05\x58\xe2\x12\x1c\xfb\x36\xe0\x61\x4d\x77\xa7\x62\x63\xdc\x20\x17\x7a\x7a\x02\xb4\xa1\xd1\x84\xf3\xb2\x3e\x6b\x77\xea\x49\xb3\xd1\x61\xa6\xa5\x2a\x45\xd3\x8d\x52\x10\xaa\xac\xed\x41\xf3\xf5\x35\xb7\xfb\x23\xfa\x2a\xeb\xee\xbf\xcf\xc5\x6a\x2d\x48\xd3\x8a\x03\xce\xc9\x66\x29\x3c\x78\x9f\xb5\xdc\x8e\x54\xd5\x44\x73\xd6\x76\x27\xa2\x08\xe3\x6f\x75\x32\x3f\xac\x8a\xe9\x9c\x9a\x95\x6b\xd0\x6d\x18\xd3\xfc\xc2\x6a\x71\xe6\x32\xb6\xc2\x8b\xb7\xa9\xdb\x5d\x90\xe5\x62\x77\x69\x17\x98\x59\xbb\x96\x9b\xa5\x56\x29\x2b\x96\x1e\xf7\xd2\x15\x1c\xe4\x7d\x73\x27\xec\x25\x53\x3b\xa5\x73\xff\x69\xf6\x02\x9e\xa3\xeb\xfe\x01\x2a\x6b\xd4\xe4\x2b\xf1\x02\x04\x8e\xfc\x46\x82\x6f\x24\x20\x48\xf2\xbb\xff\xef\xac\x4e\x53\x34\xcd\x9e\x77\x10\xdb\xbb\xfb\xd5\xb7\x0b\x1a\x7f\x5a\xdf\x03\x92\x7e\x74\xd7\x9c\xbf\x12\xdd\x82\x41\x2f\xe3\xcb\x46\x21\xc1\xa5\xac\x94\x90\x85\xe4\x62\x98\x88\xb9\xa4\xee\xb9\xf3\xdc\x7c\x05\xba\x6a\xa3\xd3\x43\x89\x3c\x4a\xfb\xaa\x2c\x9d\x50\xe5\xd3\xd7\x56\x95\x45\x31\x31\xfa\x02\x46\x9e\x7a\xbd\x6c\x95\x69\xa3\xca\x57\x2a\x3e\x6e\x38\xa8\x34\x6a\x01\xc8\x99\xf3\x67\xce\xee\x75\x3a\x63\x77\x57\xc0\xc0\x9d\x8e\x73\x24\xc3\x45\x06\x43\x85\xf7\x60\x44\x03\x43\x6f\xd7\x32\x68\x48\xb3\xcc\x2b\x01\xa2\x81\x61\x76\x09\x60\x06\xb0\x42\x64\x30\xec\x2e\x6b\xc6\xf1\x7e\x15\x69\x34\x30\x5c\xa8\x92\x9f\x8a\x06\x86\x0f\xef\x75\x88\x06\x46\x08\x55\xa8\xd3\xd1\xc0\x00\x32\x5c\xe9\x1e\x11\xce\x87\xb2\xf2\x88\x70\xc2\xa5\xdb\x51\xe9\xa1\x42\xe5\xd1\x51\xe1\xd0\xe1\x12\xe4\x88\x70\x42\x55\xb8\x4c\x44\x30\x6c\xa8\x98\x37\x22\x18\xee\xb8\x7c\x34\x2a\x35\x7c\xa8\xaa\x36\x22\x18\xe1\xb8\xcc\x32\xa2\x2a\x43\xf2\x18\x4c\x44\xa6\x20\x38\x2e\x47\x8c\x0a\x06\x86\xaa\x1a\x9f\x73\x62\xf4\x53\xf6\x7b\x5f\x3e\xce\xec\x95\x80\x37\x6f\x00\x3f\x73\x70\xf2\xc3\xbe\xf2\xc0\x95\x1c\x3a\xc7\xfd\x17\x18\x6c\x0d\xf5\xcb\x44\xfd\x83\x74\xfc\xaa\xd4\xa3\x9a\xd4\x33\x3b\x76\x83\x83\x69\x9d\x5f\xbf\x13\xff\xfe\x75\xbb\x17\xd0\x5a\xff\xff\x7f\x8f\xf7\x08\x92\xaf\xc4\xaf\xf2\x74\x69\x58\xfa\x99\x1d\x9a\x87\xf7\x2e\x6e\xd3\xc3\xa6\xf9\x11\xca\x76\xab\xe8\xd1\xcd\x8b\x5b\x06\x0f\xf1\x3d\x67\xbf\xdf\x31\xf2\xa7\x6c\x5e\xf9\x84\x53\x49\x4e\x29\xc5\x61\xa8\xb3\xff\xc2\xde\xa1\x14\xcc\x73\x94\x22\x54\xf3\xfc\xbc\xee\xfe\xdb\xf6\xcd\x51\xfc\xb8\xff\x42\x7e\x7d\xdf\xfc\xd7\x60\x7f\x1e\xa5\x38\x9c\x0d\xec\xbf\xd0\xa7\x95\x02\x32\x27\x94\x82\xbf\xa8\x14\xf4\x46\x29\x98\x5b\x95\x62\xbb\xd9\xfa\x31\xa5\xd8\xee\xfa\x7e\x5c\x29\xa2\x6f\xd8\x3f\xaf\x14\x91\xb7\x48\x7c\xc2\x01\x56\xa7\x94\xe2\x70\x6e\xb7\xff\xc2\x9f\x56\x0a\x10\x5c\xc7\x4a\x21\x5c\x1e\x29\x0e\x92\x3b\xc1\x90\xb1\xbb\xfe\xab\x26\x7f\x1b\x35\x39\x9a\xbb\xef\xbf\xdc\x13\x01\x86\xb6\x2b\x3d\xec\x51\xfe\xab\x15\x3f\x5e\x2b\x8e\x0e\x55\xd8\x7d\x61\x77\xcb\xea\xff\xfe\xd5\xb3\x1f\x3d\x2d\x46\x73\xec\xf1\xa3\x3e\xfb\x27\x3e\xe7\xe1\x13\xce\x4a\x3b\xd1\x53\xc7\x67\x44\xec\xbe\x90\x1f\x7b\xea\x81\xc3\x5d\xf6\x3d\x15\xdd\x16\x7e\xe2\xb3\x1d\x3e\xe1\x4c\xbd\x53\x3d\x75\x94\xc0\xdb\x7d\x09\xa2\x34\xf6\xb6\x7d\xf7\x9e\x33\x75\x3d\x8c\x1f\xed\x0b\x1f\x8c\xfd\xf0\x71\x4f\x3f\x47\xcf\x7d\xfe\x68\x78\x7c\xda\xc5\xee\x0b\xf9\x83\x7b\xee\x01\x83\xfe\x39\x7a\xee\xf3\x67\x46\xc7\x67\x78\xec\xbe\xb0\x91\x7b\x2e\xba\xa7\xfa\x94\x9e\xfb\x61\x7e\xed\xab\x7a\x6e\xb3\x2c\xb0\xfb\x02\x7f\x70\xcf\x3d\x6d\xb4\xfc\x51\x3d\xf7\xf9\xa3\xe5\xe1\x0a\xca\xee\x33\x7f\x70\x92\x82\x36\xb5\xd4\x0d\x2f\x11\xcf\x0c\xf6\xe5\x12\x9c\xdc\xfb\xa8\x3d\x5d\x3f\xd6\xe1\xc1\xb3\x8d\xef\x91\xda\x66\xa5\x67\xf7\x99\xfe\x54\xa9\x3d\xa0\xcb\x3f\x97\xd4\x82\x15\xa9\xdd\x67\xf2\x73\x75\xed\x81\xe9\xe0\xcf\x24\xb5\xcd\xca\xd9\xee\x33\xfb\xb9\x52\x7b\x20\x2d\xfb\xd9\x52\xbb\xb2\x0a\x77\xe2\x5d\x9b\x51\x57\xe0\x36\xef\xdb\x3c\xb9\xfa\x46\x9e\x3d\x2b\x24\x38\x8a\xc7\x3f\x9d\x6b\x5f\x3a\xe5\xff\x76\xf0\x83\x86\x4c\x17\x6f\x27\x7d\x34\x0b\x00\xcb\xb3\x24\xcb\xb0\x6b\xb7\x08\x21\x73\xa1\x14\x22\x44\xd4\xd1\x0a\xc3\x69\xa2\xe0\x21\x51\x4c\x98\x28\xe6\x0a\x51\x0c\x47\xf2\x70\x0d\x7f\x5b\xbb\x72\x5d\xfe\xd7\x5f\xd0\xf8\x40\x8f\x9c\x7e\xb1\xd3\xc9\x0a\x22\x78\xbe\x26\xe0\x2a\x20\x18\x5a\x4b\x8b\x0c\x88\x0a\x2d\xfc\x44\x06\x44\x87\x17\x0b\xa2\x02\x62\xc2\x09\xe6\xa8\x80\xd8\x70\x0a\x32\x2a\xa0\x0f\x59\xab\xa8\x80\xf8\x10\xa0\x73\x65\x49\x57\x01\x09\xa1\xec\xcc\xb9\x32\x8c\xeb\x0a\x49\x86\x20\x45\xee\xff\xe3\xaa\xa2\x47\x14\xe0\xb8\xae\xe8\x21\x9a\xa8\xd0\x3c\x2d\x3a\x24\x3a\x3c\x6f\x88\x0c\x89\x39\x0e\x64\xcf\xd5\xac\x5c\x07\xc4\x1e\x03\x8a\xce\x1b\x77\x1c\x24\x46\xa7\x88\x0f\x45\x9b\x91\x01\x09\xc7\x01\x58\x64\x8a\x8e\xea\x8c\x1e\xb1\x93\xa3\x4a\x23\xf6\x11\x8a\xe0\x31\xa0\xf3\xb5\x46\xf7\xbe\x64\xf6\x19\xd5\x46\xd7\xde\x29\x78\x4f\xbd\xd1\xd9\x57\xca\x3e\xc1\xbb\x1e\xbc\x7d\x08\xd1\x58\x45\x0c\x4d\x21\xac\xf1\x14\x07\x65\x9a\x42\x2c\x46\x48\x50\x30\x54\x05\x5e\xe0\x00\x0f\x69\x19\x29\x40\xe1\x35\x88\x49\x15\xa8\x90\xa3\x34\x99\x92\x19\x06\x42\x08\xfc\x73\x40\xc0\x26\xb9\x1d\x39\x11\x71\xb0\x4d\x83\xdb\x16\xa6\x9f\x3d\x77\x4d\x20\xe9\xb3\x07\xee\xec\xee\x1e\x45\x09\x41\x45\x7b\x81\x1d\x62\x83\x1a\x8e\xed\x1c\xdf\xcc\x98\xa9\x38\xd6\x15\x8a\xab\x76\xbd\x6c\xa1\xb0\xea\xb4\xf9\x79\xdb\x78\x4b\xa0\xe4\x94\x29\x32\xfe\x0e\xd6\xe0\xbc\x32\x7f\xdf\x45\x3a\x54\x70\x9d\xd8\x7f\xf4\x9b\x26\xda\xed\xf2\x66\x87\x5d\x12\x4c\x13\x6a\xd6\x6e\x4e\xf5\xd2\xac\xe6\xa5\xb8\xc4\x20\x57\xa4\xca\x58\x50\xdb\x55\x2d\x93\x8b\xe5\x0d\x26\x3f\x6b\x55\x62\x6f\xa2\xc7\xf9\x9b\x3d\xd2\xe9\x76\x3b\xd8\xdb\x21\x16\x52\x7c\xa6\xba\xe8\x6a\x54\xb2\x34\x6c\x17\x66\xd4\xfb\x60\xe5\xb2\x68\x0a\xb3\xa8\x94\xcd\x92\x2e\x93\xa0\x60\xbd\xdd\xaa\x19\xde\x60\xb3\xdb\x62\xe6\xcc\xf5\x03\x7a\x4e\x16\xb9\x67\x76\xfc\xd4\xa4\xb7\x56\x42\x78\x37\xf0\x68\x55\x72\x27\xf1\xb7\x22\xe5\x25\x33\x09\x41\x5b\x94\xac\xb7\x19\x4a\xa4\x26\x83\x65\x0d\x73\xaa\xe5\x26\x73\xd9\x82\x59\x6e\xc7\x17\x39\x9a\xe5\xf4\x59\xa5\xdb\xb0\xe4\x34\x69\xd3\xe3\xa4\xa2\x56\x34\x4f\x48\x58\x0b\x35\xc7\xbe\x99\x6f\xe6\x40\x9f\xf7\xfe\x7a\x39\xdc\x31\x70\xb8\x4f\x64\xff\x31\xb5\xff\x31\x10\x53\x05\x26\xe3\x62\x85\x66\x7a\x89\x14\xe5\x65\xdb\xe9\x0a\xa8\x53\x22\x59\xc2\xa3\x2a\x9f\xaf\xb3\x56\x19\x88\x02\xee\x18\xea\x32\xe7\xb5\x42\xf0\x9e\x23\xaf\xe8\xfd\x25\x16\x59\x7e\x83\x3f\x80\xb5\xe7\xbf\xb6\xd3\x17\x9f\xdf\xe4\xc1\x71\x00\xce\x7b\x99\x2d\xe2\x0a\xd2\x87\x8b\x12\x6a\x55\x05\x36\xb1\xd2\x5c\x01\x93\x8a\xed\x94\xdf\xba\xab\x44\x27\x3f\x4a\xdb\x05\x6e\x34\x1b\x05\x0f\x55\x18\x27\x97\xda\xeb\x5f\x40\x6b\xf8\xd8\x0b\x31\xb4\xa9\x33\x90\xb7\xba\xea\x84\x4f\x8c\xf9\xf0\x4c\x71\xff\x3d\x39\xb5\x29\xdb\xa3\x99\xf7\x64\x55\x5a\x4c\x6a\x71\xca\xce\x96\x63\x2b\xc0\xd5\x97\x86\x0b\x4c\xad\x94\xee\x8d\x6b\x1d\xdd\x99\x36\x62\xcd\xe0\x01\x6e\xec\x6e\x76\x78\xfb\xfc\xb7\x42\xfd\x7b\x44\xcb\xf6\x0a\xf4\x33\x41\x95\xdf\x2e\x6d\xc4\xf0\xef\xd9\x3b\x78\xc9\x9a\x18\x55\x5f\x1e\xe9\x5f\x5f\x7e\x5a\x7c\x7b\xf1\xe2\xb1\x7d\x25\xdb\xe2\x6c\x18\xbf\x49\xbe\x01\xaf\x5c\xaf\xc8\x8b\xdc\xd0\xd4\xa5\x2a\x26\xd5\x56\x8b\x6b\x67\x95\x54\x6d\xc1\xd6\xe2\x73\x33\xfb\xae\x50\xad\x14\x60\x50\x9e\xca\x19\x20\xd0\xef\x76\x8b\xdc\x08\xa9\xd8\xa1\xd3\x24\x1e\x54\x58\x71\x29\x24\xc9\xaa\x9b\x91\xf4\x99\x02\x38\x00\x5a\x02\xdf\x1b\xd2\xe3\xe2\x68\x2c\xd4\x38\x66\x94\xa4\x66\x01\xab\x63\x26\x3f\x4f\xec\x28\x8f\xcf\x77\xf4\x04\xf4\xe7\x46\xdd\xf2\x8c\x3f\x4f\x7a\x70\x28\x97\xb8\x3d\x50\x45\x4c\x79\xfa\x6c\x9e\x9a\x56\x3a\x62\x4d\xe0\xea\xa0\xde\xf4\x5a\xea\xbc\x9c\xca\x4e\x52\xf1\x64\x0b\x4f\x56\x6a\xad\xda\x35\x6d\x4b\x31\x8a\xed\x10\xff\x89\x7a\xbb\xdd\xd8\xc8\x5f\x8f\x27\x86\x7c\x9b\x12\xe6\xc3\x1c\x68\x38\x02\x6b\x2b\x5c\x65\xec\x78\x03\x38\x4c\x2c\x84\x62\xa5\xa6\x0a\xa3\x76\x5b\xca\x39\xbd\xc6\xa3\xfc\xef\xf5\xeb\xc2\x78\x78\xd0\x3f\x7a\x94\xfe\x39\x80\xdf\x6a\xb7\x5b\x9b\x6d\xa4\x76\x75\xde\x8b\xa7\xd5\xb8\x92\x5b\x96\x5b\xef\x71\xfc\x9e\xad\xac\x26\xef\x5c\x4f\xb5\xe7\x8a\xd6\x58\x8d\xb2\xda\x5b\xba\x5d\x4f\x16\xa0\xe4\xcb\xf7\x11\xfd\xac\xd3\x68\x73\xda\xc7\x81\x7d\x84\xae\x87\xed\x27\x7a\xff\x49\xa5\x4a\x8e\xbc\x60\x3f\x07\x57\xae\x34\x68\x7f\xd8\x86\xfb\xb0\xfd\x44\xf7\x0f\xb5\x44\x69\x79\xc9\x7e\x0e\xae\x93\x83\xec\xde\x7e\x82\xf6\x77\xc6\x1b\x0f\xe8\x93\x98\x55\x80\x29\x66\xf7\xa4\x9f\x94\xf7\x7e\x33\xe9\x97\xd3\x57\x90\x47\xd6\x55\xfa\x7c\xf9\xd9\xd1\xe9\x6b\xb7\x9b\xf5\x0d\x28\x4f\xd6\xbb\x75\x56\xe2\xec\x54\x91\x2c\xd6\x62\xf3\x5e\x23\x29\xac\xba\xb3\x6e\xbb\x49\x2d\x8c\xaa\xd1\x9b\x36\x64\x90\x9a\x8d\x6b\x45\x1c\xe8\x67\x2a\x65\x94\x4f\xd3\xf7\xc1\xbe\x4e\x75\xbd\x4f\x6f\x72\xaf\x2f\xf7\xfa\xfb\x07\xc6\x03\x49\x6c\x96\xdc\xdb\xec\xed\x83\xff\xfd\x6b\x1f\xbb\xf8\xfd\xea\x8b\xb1\xb0\xbf\x1f\x25\x36\xd8\x1c\xa6\xaa\xef\x08\x78\x62\x6c\xe0\xee\xbf\xdf\xab\x1b\xa9\x29\x5a\x06\x0a\x96\xdc\x23\x0d\x9f\x9a\x14\xb6\xf3\xa0\x4b\x7c\xdb\x3a\x7d\xf9\xf2\xfb\x77\xdd\xac\x65\xe1\x7b\x9e\x6d\x96\x96\x4b\x4b\x18\xcd\x30\x99\xeb\x65\x41\x5c\x5a\xaa\x63\xc1\x96\x2a\xe3\x6c\x3e\xc1\x79\x10\xcf\x73\xba\xf2\xde\x02\xdd\xb8\x34\x1c\x3a\xd3\x24\xcf\xa8\x05\xd5\xed\x36\x86\x46\x2f\xbf\x20\x99\x18\x45\x66\xb4\x34\x39\x9c\x8c\xdb\xe3\x4e\x26\x95\xd0\xff\xfa\xcb\xcf\xa4\x5b\xb6\x85\x77\x5b\x86\x83\xbf\xeb\xd9\xa3\x3f\x49\xba\x3e\x85\x3e\x7c\xdb\xb3\x0c\x20\xab\x40\x48\xab\x18\x50\x3c\x27\x40\x0e\x71\x94\x0a\x59\xc0\x63\x1a\x52\x34\x80\xc1\x69\x92\x1c\xa4\x55\x4a\xa5\x21\xc5\xf3\x0a\x89\x79\x85\xc3\x02\x87\xd4\xcd\xd9\x12\xe4\xf3\xa6\x79\xec\x95\x69\x1e\x0b\x04\x48\x9d\x3f\x1b\x66\x7b\xf7\x28\x87\xfb\xe8\x34\x2f\x6c\xeb\x4f\x9c\xe6\x89\x21\x55\x3a\xed\x56\xfc\x0b\x6d\x87\x85\x84\x08\x48\x0d\x98\xea\xa2\xb0\x64\x66\xde\xac\xf6\xc6\x64\xec\xa4\xab\xb0\xc2\x22\x47\xce\x12\xca\xbc\x22\xa1\xa4\x29\xa4\x3d\x2b\x06\x27\xed\x74\x51\xae\x75\x57\xc9\x56\x6e\xd5\xcc\xa2\xa9\x32\x89\xc7\x20\xa5\x50\x66\x1a\x39\xc2\xa2\xc8\x7b\x28\xeb\x55\x12\xb1\x37\x67\x0e\x52\xfa\x5f\x77\x4e\xd9\x0e\xae\x7b\xcd\x6e\x0f\xf4\xd3\x65\x77\x76\x1a\x76\x10\x62\x44\x99\x86\x05\x47\x34\xef\xe1\x89\xa7\x43\x96\x53\x57\xe2\xc9\xf8\xa5\x28\xf8\x13\xbe\x3c\x3e\x65\x68\x4f\x7e\xc0\x78\x76\x08\x97\x3e\x03\xff\x73\x5c\x8b\x7f\xd9\x7b\x7e\x7e\x62\x1d\xf7\xaf\x47\xc3\xcc\x4f\x09\x93\xc2\x7d\xf0\xb7\x0b\xe3\x4e\x85\x42\x07\x87\x9a\x44\xd1\xd7\x61\x2b\x04\xef\x07\xda\xcb\x3d\xf8\x03\xff\xf0\xef\xcf\x72\x3e\xcf\x0d\x6b\x48\x59\x83\x24\x09\x68\x80\x38\x4e\xc3\x32\x42\x82\x00\x69\x8d\x86\x14\x56\x19\x9e\xa3\x05\x41\x86\x9c\x82\x05\x92\x56\x04\x28\xb0\x1c\x22\x69\x04\xa0\x06\x79\x99\x42\x8c\x8c\x19\xfe\xe5\x95\x10\x9e\x17\xd5\x30\xd7\xa2\x1a\x0a\x08\xe4\xf9\x93\xb3\xb7\x77\x8f\x16\x94\x1f\x8d\x6a\xc2\xa3\xe4\xcf\x91\xbc\xbe\x29\x59\x73\x90\xbc\x2e\x0e\xd4\x19\xdb\xab\xaf\x74\x2f\x3f\xe1\x72\xb0\x50\x5e\xb6\x2a\x65\xa9\x69\xb3\x63\x56\x89\xd7\x55\xa7\x9b\xf6\x2c\xa9\x21\xd7\xa8\x78\xa5\x54\xee\xe2\xd1\x28\x4e\x61\x9b\xec\x29\x14\xc9\xb8\x05\x26\xb6\x1c\x34\x8b\xa5\x65\xd2\xa8\xe5\x2c\x2b\x55\xf2\xba\x93\x72\x3b\x2f\xe8\x7f\xa3\xe4\xf5\x81\xbc\x1e\x4d\x6e\xfa\xd7\xb5\xe4\xf5\x81\x28\xa2\x44\x2d\x60\xaf\x7f\xc9\x03\x7c\x62\x58\x96\x27\xae\xc4\x93\xf1\x3f\x10\xb5\x95\xc4\xe3\x93\xb8\xbe\x30\x99\x1b\x90\x72\x3e\x19\x55\x2c\xd6\xba\xda\x85\x64\xae\x8f\xf6\x20\x4a\xb8\x37\x99\x1b\xdd\x0b\x5f\x48\x46\x05\x32\x37\x6b\x45\x3a\xfe\x61\x31\x63\x77\xf9\xfd\x95\xd0\xf7\xa2\xff\x21\xf6\xf6\x00\xff\x15\xc6\xd9\x78\xee\x0b\x51\xdc\xbe\x7f\xfe\x0f\x27\xdb\x1f\xb6\x9f\xe8\xfd\xd7\xb0\xd3\xbc\x7e\x5b\x32\xd7\xae\xb0\xdc\x85\xfe\x89\x66\x3f\x0f\x2c\x0e\xdc\x1e\xc5\x26\x53\xb9\x76\x2f\x4c\x79\x30\xde\x3d\x90\x8c\x8c\xae\x4f\xc1\x75\x32\x19\xb9\xbf\x0e\xc6\xf7\x2f\xa7\xef\xfc\xe2\x5e\x48\x7e\xc1\x8f\x5f\x9e\xcc\x7d\x4f\x68\xb9\x4f\x97\xdf\x03\xf4\x9d\x5f\xdc\x09\xae\x53\xb3\xa8\x83\xf8\x29\xca\x2c\x66\x44\xef\xe1\x1d\xc4\x13\x87\xd7\xe5\x59\xd4\x13\x67\x71\xf7\xe0\xdf\xcc\xa2\xa6\x69\x18\x9f\x0c\xb2\x95\x24\x39\xb6\xdc\x61\xcf\xa6\xf2\x35\x9a\xac\x57\x86\xef\xf2\x64\x25\xa4\xa1\xa7\x74\xa0\x52\xcf\x7b\x29\x8d\xa7\xe7\x40\x65\x1b\xcd\xb8\xca\x0e\xeb\x83\x95\xd6\x1c\xcf\x1d\x8b\x2b\xa4\x4b\xee\x2a\x57\xc8\x8b\x06\x56\x4a\x4b\x80\x47\xa0\x65\xc1\xe7\x27\x87\x69\x44\x22\x05\xb0\x58\xa0\x79\x0e\x90\x40\x10\x58\x46\x90\x49\xcc\x03\x0a\xc8\x98\x64\x55\x8d\x11\x68\x1a\x33\x1c\x4f\xb2\x0a\xa9\xca\x1c\x84\x3c\x23\x60\x1a\xf3\x08\xa9\x00\xfb\x2f\x1b\xe2\x37\xb3\xa8\xa8\x3b\x5a\xee\x28\x01\x62\x69\x06\x9c\x7f\xe5\xd6\xfa\x26\x78\x09\x15\xd3\x06\x4a\x79\xe7\x20\x7e\x4f\x05\xd0\x0f\x71\xc2\xc9\xd8\x6c\xa3\x8d\x69\xf1\x6c\xa4\x21\xed\xf8\xa9\x65\x92\xb3\x62\xbd\x32\xcf\x7a\x99\x0c\x3b\x86\xd5\x3c\x99\xcb\xad\xa8\x74\x3d\x9b\x69\x2d\x84\xce\x52\x7f\x2f\x77\xb3\xe5\x5a\xb5\x4c\xf6\x26\xa3\xb8\xdd\x2c\x9b\x5e\x5e\x9c\x56\x2d\x06\xa6\xdf\x62\x15\x4e\xcb\x8d\x67\x4a\x56\xd3\x4a\xc5\x76\x29\x99\x4e\x95\x53\x4d\x3d\x6d\x39\xb9\x5a\x29\x7a\x3a\x39\x52\xd0\xf3\x33\xcb\xfb\xaf\xf3\x13\xaa\x83\x56\xf7\x06\xb4\xa7\xaa\x81\x3e\xe2\xbe\x32\xa1\x79\x1e\xfe\x33\xbc\x5f\x49\x43\xef\x03\xfe\x20\xa2\x8b\x5e\x7d\x11\x90\xf2\x63\xaa\x2f\xf6\x25\x64\x3e\x3d\x27\x47\xfe\xd4\x9e\xdf\x2f\xaf\x5e\xf2\xaf\xf3\xab\xc1\xeb\xa8\xbd\x7a\xad\x7a\xe9\xef\x39\xe1\x9d\x8b\xc7\xb3\xfc\x7b\xc7\x96\xf0\x0a\xf1\xe9\xfe\x3d\x3d\xc4\xee\x9a\x3e\x1b\xff\xe9\x4a\x83\xf3\xfc\x2b\xe2\x8f\x98\xb0\x14\xf4\xee\xf2\xb6\x09\x4b\x62\x51\xe5\x4e\xaf\xba\x07\xe3\xd3\x97\x57\x2b\x9d\x0f\xb8\xc3\x5d\x5f\x48\x4d\xa7\x47\x49\x8b\x93\xd5\x13\xd9\x83\x06\xf7\x8e\x6d\xa7\x96\xb8\x3e\x0e\xaa\x97\x83\xdd\xdc\x63\xf8\x0f\x2b\x3b\xef\xc1\xbf\x09\x76\x7b\x05\xde\x93\x38\x11\x93\x3d\xf9\x5d\xee\xf1\x56\x4d\x1f\x56\x95\xb6\xa4\xbc\x35\xb3\x40\x2e\x24\x6d\xa0\x28\x40\xe4\xa9\xba\x31\x6e\xc6\x06\x25\xd8\x21\x47\x49\x3a\xa6\x59\xbd\xb6\x45\x73\x1e\x6f\x20\x61\xae\x0a\xfc\xdc\x6b\xcd\x73\xad\x12\x59\xae\x88\x1d\xec\x0e\xc4\xf9\xb3\x83\x5d\xc0\xd2\x88\x21\x59\x1a\xcb\x88\xa5\x35\xa8\xa8\x32\x52\x65\x9e\x61\x65\x8d\xa2\x69\x9e\xe6\x19\x4d\x61\x21\x0b\x69\x0e\xa9\x88\xc2\x2a\x25\x28\xaa\xaa\x91\x1a\x2b\x90\x10\x50\x94\xec\xbf\x86\xc9\xff\x17\x7d\x9b\x63\xb0\x5b\xef\x52\x8c\xcb\x41\x78\xfe\x05\x69\xfe\x4d\xf0\x72\xbc\x59\x24\x50\xc5\x4c\x91\xcf\xd6\x66\xb5\x91\x5c\x80\x59\x91\xea\xb4\x87\x75\xa7\x30\x1e\x76\x49\x52\xcb\xf0\x6e\x31\xc7\x8d\x49\xa9\x3e\xcf\x77\xe2\x62\x97\x12\x8f\x5f\xca\x1d\x9e\xd7\x7c\x18\x6a\x22\x84\x0d\x85\x43\x78\xed\xd9\x3c\x2d\xcc\x7d\xa5\x6a\x48\x6f\xc6\x9b\x8c\xd3\xf3\xa4\xeb\x14\x12\x56\x21\x37\x75\xe3\x24\xd3\xf6\xf2\xa9\x84\xa3\xdb\xee\x74\x50\xac\xc5\x5b\x6c\xb7\x35\xa4\xbd\x79\x67\x39\x70\xb9\x96\xd7\xa0\x93\x25\xbc\xa8\x94\xd8\xfc\xbb\xa2\xbd\xe7\x0b\x80\xec\x98\x89\xd1\x68\x6e\xd1\x3a\x5f\xcd\x69\xc3\x5c\xe6\x86\x30\xf4\x48\x67\x8f\x43\xb5\x03\x9e\x83\xb7\x86\x84\x64\x92\x30\xe2\x09\xb2\x48\xe6\x33\x4b\x6f\x30\x2f\x03\xb3\x47\xa2\xe5\xc4\x06\x42\x39\xbb\x98\x15\x93\xcb\x0a\xe3\x25\x24\x25\x19\xf0\x48\xe9\x9e\x53\x76\x96\xcd\xfa\xfc\x1a\x11\x57\xcc\xf9\x01\xfc\xa5\x79\x71\x3c\x79\x00\xbf\x18\xc2\x1f\x65\x38\xd9\xbc\x84\xeb\xe4\xbb\x56\x2e\xe1\x3f\x39\xb4\x3e\x20\x8b\x8a\xd5\x8b\xc7\x0e\xde\xb5\x7d\x26\x54\xfd\xb4\xbe\x58\xe3\xe7\x0f\xde\x6c\x9c\xbb\x5b\x16\xff\x96\x06\x99\xde\xb8\x43\x0d\x14\xd1\x29\x2c\xf5\xb7\xa5\x51\x74\xaa\x42\xa5\x2d\x37\x6a\x73\x44\x17\x8a\x45\xbb\x41\x56\x41\xc5\x04\xb9\x58\x51\x49\xbb\xb6\x5c\x01\xc5\xd6\x54\x1c\x66\xdd\xe6\xb0\x62\x20\x2b\xcb\x1a\x0d\x4f\x4d\x4f\x6a\x6f\xf9\x52\x3e\x96\xab\xa6\x96\x59\x7a\xf9\xfc\x3c\x02\x54\x49\x15\xb2\xb4\x2a\x60\x88\x29\x8a\xa5\x15\x28\x68\x48\x63\x11\x8b\x15\x1e\x30\x88\x47\x3c\x66\x11\xcd\x62\x48\x91\x02\xab\x22\x40\x03\xa0\x41\x61\xfd\x4d\xe5\x78\x0e\xc0\x97\x57\x82\x7b\x5e\x1e\xe1\x6a\x8d\x19\xc3\x31\xf0\xec\x1b\x64\xfc\xbb\xec\x4b\x68\x33\xed\xa3\x89\x84\xab\x35\x66\x3f\x64\x62\x9b\xea\x8c\xd8\x5a\x22\x59\x19\x76\xb3\xa1\x51\xfb\xd0\x0a\xf6\x89\x84\xac\xad\x61\x4a\xd6\xd5\x61\x42\x65\x59\x5a\x74\xde\x9d\x42\x71\x08\xe3\x06\xa2\xe5\x22\x62\x7a\x66\x26\x5e\x2a\x72\xd3\x74\xbb\x5e\xe8\x34\xe5\x09\x69\x4e\xe4\x42\x12\x91\x72\xba\xce\x88\x92\x95\xcc\xa6\xe2\xe9\x65\x5e\x2f\x0c\xa8\xa6\x51\xae\x4c\x0a\x54\x36\x5d\x1f\x75\x6a\xfc\x17\x27\x12\x72\x3f\xb1\xbc\xcf\x27\x12\x0e\x26\xd2\x91\x26\xf2\x1f\xea\xd9\xae\x6d\x2b\xda\x5f\xe1\x89\xfc\xa3\xf8\x6f\xdb\xd6\x74\x1e\x7f\x10\x6c\x47\x4f\x24\x04\x23\xfa\x8f\x49\x24\x80\x49\x65\x24\xd6\x86\x36\x58\xac\xa6\x68\x79\xda\x43\x1e\xac\x84\xfe\xc4\x13\xa3\xd4\x29\xfa\xa5\x7d\xff\xfc\xc4\x2b\x7f\x4a\x33\xb6\xfa\x20\xf5\xfd\x44\x7a\xc3\x5f\x84\x89\x7c\x76\xaf\x5f\xb7\x95\x9a\x1f\x5c\xb5\xcf\xc0\x7f\x47\x22\xc3\xe7\xbf\x27\xfe\x88\xca\x01\xff\xba\x90\x48\x38\xef\x9b\xf6\x3c\xfd\xfd\x12\x6f\x27\xa3\xdd\xcc\x41\x83\x08\x91\xf7\x87\xda\xc3\x6b\xb5\xb2\x07\xd7\x81\xed\x46\xc6\xff\xa1\xf6\xf0\x46\xfc\x9b\x68\x17\x0f\x04\x4e\x9d\x26\x60\x29\x4d\x39\x8e\x9e\x9c\xbe\xbb\xf6\xb4\x2a\xc7\xf2\xce\xc0\xf5\x1c\xd3\x68\xc9\xfc\x7c\x36\xa5\xdb\x6d\x69\xf2\x56\x9e\x5a\x8d\x8e\xe9\xda\x79\xa7\xee\xb6\xb3\x23\xb1\xa1\xe4\x94\x2a\xdf\xcd\x8d\xc5\xf7\xac\x5a\xc9\x91\xec\xc8\x51\x94\x76\xa6\xfe\x96\x7a\x7a\x22\x81\x62\x58\x8c\x15\xa0\x91\x34\x05\x65\x59\x96\x11\x29\xa8\xaa\xa2\x00\x81\xe2\x30\xe4\x21\x43\x21\x5a\x55\x78\x2c\xf0\x9a\xc6\x71\x2a\x83\x05\x15\x63\x40\x93\x32\x66\x48\x81\x42\xfe\xeb\xd7\xd9\xe7\x45\xbb\x57\x6b\x0f\x59\x96\xbb\xf4\x42\x76\x4e\x00\x2f\xa1\x03\x5f\x1e\x0d\x76\xaf\x96\x1e\xfe\x98\xe0\x6b\xe7\xb0\x2e\xed\x13\xdd\x07\xbb\x12\x2b\x8e\x96\xa9\x58\x97\xaa\xda\x0a\x9b\x1e\xb2\x26\x32\x7b\xb3\x71\xb6\xa5\xca\x65\x8a\x9f\x4e\x2d\x36\xd9\x65\x4a\x4a\x5c\xc9\x5b\xe9\x1a\x7a\xf7\xde\x12\x15\x5b\x9c\xa7\x2c\xaf\x69\x82\xcc\x2a\xae\x71\x0e\xae\x4f\xba\x4a\xbe\xd7\x50\x6b\xb1\x89\xa4\xb4\xac\x38\xac\x8a\xd2\x17\x07\xbb\x3f\xb0\x54\xe8\xaa\xbc\x2f\x04\xbb\x07\x81\x45\x94\x60\xf3\xd1\x32\xc4\x27\xe2\x8f\x54\x86\x78\x10\xec\x66\x0e\x9e\xff\xbb\xed\x59\xde\xa7\x82\xce\x24\x95\x4f\x95\x2d\xfd\x14\xce\xfb\xa4\x3e\xfc\x44\xf4\x85\x53\x6d\x27\xaf\x4f\x09\x28\xee\x2d\xc3\xf9\x81\x01\x8d\xdf\x3e\x7d\xd0\xe6\x67\x98\x8c\x9c\x96\xcf\xcf\x43\xdf\xc7\xf4\x7f\x28\xf8\xbe\x5c\xea\x15\xa5\x8f\x1f\x2e\xf5\x7a\xa2\x8e\x45\x28\xf5\x6a\xda\xc9\x66\xae\xca\x68\x4a\x6c\xb0\xb2\x3b\xd5\xf7\xf6\x7b\xdb\x88\xf5\xd4\x3a\x70\x29\x6d\xc9\xb2\x9a\x9d\xd7\x46\x8b\x95\x30\x1f\x2b\xed\xc4\xfb\x3b\x18\x49\xac\x9e\x12\x2b\x18\x54\xba\x2d\xb9\x2a\xc4\xa7\x1e\x93\x31\xd5\xb9\x39\xc8\x83\x14\x3b\xaa\x2f\x1a\x5a\xbc\xc7\x8b\xb5\x67\x07\xad\x98\xd6\xb0\x2c\xb3\x08\xc9\x8c\xc6\x53\xaa\x46\x2b\x40\x90\x69\x0d\x68\xac\xcc\xb3\x3c\xa7\x01\xc0\xf3\x2c\x60\x05\x2c\x08\x2c\x06\xac\x8c\x10\xc7\x20\xa4\x40\x95\x47\xa4\xa0\xb0\xfc\xcb\x2b\xc1\x6c\x37\xcc\x44\x7c\x9d\xc2\x41\xd0\x4a\x5d\x0b\x5a\x39\x9e\xa7\xf8\xb3\x51\xeb\xfa\xee\x3a\xa6\x3d\x3a\x14\xf0\x25\x8a\x25\x1c\x44\xad\x27\x47\xfe\x03\x2d\xfb\xf2\x34\xcc\x01\xfe\x1d\xbd\x35\x49\x1f\x74\x12\xc5\xd4\x70\x5c\x2e\xae\x94\x6a\x9a\xb5\x79\xf5\xbd\x95\x2d\xb9\x39\xb2\x33\xf0\xbc\x8e\x14\x17\x13\x8d\x02\xca\x96\x95\x18\x99\x7e\x77\xd3\xb1\xa9\xc1\xc4\xf0\x68\x49\x4b\xf5\xe5\x54\x10\x7a\x75\x36\x21\x65\xd3\x74\xd9\xd4\x97\x45\xab\xf1\x4e\xad\x94\x94\x23\xd4\xec\x5b\xa2\xd2\xd3\x05\x9f\xe1\xc8\xed\xe0\xd1\x7b\x4f\x8b\xa8\x30\x4e\xde\xda\xf7\xc7\x99\xeb\x96\x6d\xaf\x4f\xc1\x7f\x26\x55\x72\x19\xff\x87\x51\xf1\xab\x47\xf6\x80\x94\x5b\x3c\xcf\x4f\xea\x19\xaf\x2d\x02\xde\x5d\xfc\xfd\xc0\x82\x64\x48\x56\x91\xf1\x8f\x95\x68\xf8\x37\x1e\xa6\x91\x4c\xf7\x24\xb7\x52\xe9\x91\xb3\xf2\x9c\xef\xbe\x0f\x17\x70\x52\x53\x96\xf3\x61\x1d\x65\x20\xe8\x35\x79\x31\x9d\x9b\xd8\x0a\x58\x71\xb5\xce\xfb\xbc\xcb\xb2\x45\x8b\x61\x9b\x45\xbd\x9e\x2d\x70\x14\x18\x64\x6d\xa9\xa6\x74\x75\xd8\x49\xe5\xa6\x6a\xc1\xd1\xca\xf3\xca\x0c\x24\x9f\xbf\x08\xc8\x53\x1c\x02\x32\xa5\x62\x0d\x2a\x50\x55\x35\x55\x51\x31\x23\xd3\xb4\xac\x91\xbc\xca\x21\x00\x90\x40\x41\x5e\xe5\x39\x52\xd5\x00\xa7\x21\x28\xcb\x2c\xab\xd2\x0a\x4f\x41\x96\x54\xb8\xe0\xcd\xfc\xe0\x91\xd7\xc0\xdc\xe3\x61\x04\x70\x21\x2d\xb2\xbe\xe9\x9f\x70\x78\x78\xc4\x6b\xa0\x94\x77\x4e\x83\xef\x71\x30\x5f\xbd\xe3\x60\x7f\x65\x77\xf4\xd6\x32\x76\xad\x6a\xa4\xc8\xac\x94\x30\xc8\x16\xaf\x64\xcb\xac\x65\xbe\x51\xf6\x48\xd2\xd4\xb1\xc7\x8d\xdf\x47\xb5\x6c\xce\x83\xde\xb4\x5e\x44\x6f\x6f\xc0\x28\xd5\xe6\x2d\x9a\x2a\xf1\xb3\x98\xe5\xe5\x6b\xae\x48\x2b\x10\x27\xba\x9e\x90\xe9\x4d\xe2\x50\x48\x17\x87\x96\x8c\x40\x6d\xfe\x3c\x07\x73\xd0\x28\xc2\x0e\xad\xc7\x1d\xcc\xf3\xf0\x3f\xd1\xc1\xdc\xbb\xc3\xe1\x53\x0a\x36\xc3\x3c\x48\x3f\x84\xbe\xc7\x1d\x4c\xf4\x34\x47\x74\x07\x23\x3d\x86\xff\x41\x07\x83\x06\x62\x2c\x57\xad\x29\xb5\x4c\xb1\xde\x5c\xcc\x15\xea\x1d\xb7\x2d\x6c\xd4\xea\x02\x44\xd4\x14\xbd\xd7\x45\xc5\xa0\x10\x64\x24\x6f\x62\x5a\x9d\xdc\x22\x95\x68\x0e\x95\xd5\x32\xce\x62\xd2\x4c\xce\x53\x83\xd5\x1b\x9d\xc6\x14\xf9\x66\x58\x71\x99\x6c\x4d\x2b\xaa\xe7\xb4\x53\xe2\xf3\xab\x4c\x28\x96\x51\x28\x85\x16\x34\x8a\x63\x99\xb5\x1b\xe1\x19\x56\x56\x10\x0b\x19\x92\x12\x58\x56\x23\x31\x64\x05\x04\x35\x06\x28\xaa\xcc\xf2\x0a\x86\x18\x03\x01\x71\x1a\x0f\x69\x06\x05\xe5\x77\xd4\x63\x05\x7c\xd7\xfc\x0a\x07\xaf\x54\xf0\x41\x92\x7f\x39\x3e\x5c\xf9\xd1\x0a\xbe\x0b\xe9\xf6\xe0\x8a\xbe\x93\x35\x80\xb7\xaf\xe0\x4b\xc4\xf3\x09\x7d\x96\x2b\x71\x40\x2f\x26\x72\x03\xb2\x59\x29\x0b\x72\xcc\x8c\x89\x93\xb7\x15\x48\x16\x52\x35\xa3\x95\x6e\xb4\x49\x57\xa9\xeb\xd3\x04\x40\xd6\xb2\x34\x2f\xd5\x59\x97\x69\x18\x28\x39\xf7\x52\xd6\xc2\xad\x5a\x08\xc0\xba\xda\xaa\x15\xcc\x2c\x44\xb8\x24\x2e\xf9\xec\xcf\x55\xc1\xf7\x68\x05\xdd\xa3\x55\x63\x45\x72\xc4\x26\x9e\x58\xc1\xf7\x95\xe3\xd9\x67\x54\xf0\x45\xad\xa0\x13\x9f\x54\xc1\xc7\x1d\x54\xe3\x7f\x58\xcf\xbf\x2a\x8b\x7f\x6b\xcb\x5a\xaf\xb8\x4c\x55\x84\x5e\x72\xde\xc8\xa9\xd2\x6a\xa8\x75\xe2\x13\x4d\x2f\x74\x14\xa1\x66\xe8\x64\xce\x4c\xb4\x4c\xb5\x98\x95\x7a\x45\x5d\xed\x4c\xf8\x61\x29\x25\x61\xa7\xd2\xb2\xc7\xba\x5b\xac\x31\xbc\x9c\x62\xa0\xa7\x8e\xba\x6d\x29\x39\xa9\x0b\x63\x6b\x28\x96\x66\x89\xa7\xaf\x69\x92\x24\x92\x05\x45\x53\x30\x94\x69\x85\x06\x34\x50\x79\x59\x66\x39\x96\x57\x55\x52\xa0\x65\x55\x96\x81\xc2\xd1\x24\xcb\x01\x52\x95\x65\x4a\x46\x24\xd6\x04\x9e\xe7\x48\x8d\xa5\x10\xe5\xef\x04\xa4\x9e\xb7\xa6\x79\x75\x90\x25\x39\x8a\x66\xcf\x0e\xb2\xdb\xbb\x47\xaf\x55\x78\x74\x51\xf3\x42\xf4\x1e\x54\x4d\x44\x8a\xc6\xa9\x50\xd5\x43\xa0\xb5\xfb\x45\xc8\x62\x5b\xce\xe5\x62\xa0\x88\x8d\xd5\x42\xb7\x94\x54\x8e\x66\x0b\xd9\x65\xc2\x23\x99\x58\x56\x80\x16\x88\xd5\x29\xc8\xe7\x85\x55\xd9\x84\x9a\x9e\xef\x40\x4b\xb3\xa8\x74\xce\x2e\xb6\x5d\xf8\xde\x06\xb1\x64\x6b\xe2\x00\x08\x10\x4c\x70\x62\x89\xcd\x16\x1c\xda\x4a\x14\xc5\xdc\x2d\xd1\xf8\x61\x52\xf5\x6c\x34\x2e\x3e\x56\x15\x96\xaf\xec\xe5\x7b\xe6\xba\x12\x0d\x3f\x0f\x7f\xb4\x68\x7c\xef\x71\x9e\x98\x04\x8f\x54\xa7\xfc\x6c\xfc\x1f\xe5\x71\xd9\xe3\x3c\x92\xee\xfa\xc4\xd9\xc8\x35\x8f\xf4\x95\xf5\xed\xe2\x93\xfa\xea\xc1\x68\xdf\x6b\xbb\xfa\x90\x6b\x79\x6c\xb1\x9a\x49\xaa\xf3\xd2\x70\x68\xdb\x5a\x2e\x43\x35\x2d\x5a\xa3\x90\xd6\x65\xb2\x9a\x3c\xb7\xa8\x12\xec\xbe\xc5\x44\x53\x46\x6a\x4c\x53\x5a\x86\xee\x75\x56\x68\xd2\xed\xd2\xf9\xc6\x78\xd6\x95\xdb\x4e\x2f\xeb\x8a\x2b\x5b\x79\x9f\x19\x8a\xe4\x8a\x4f\x4f\x27\xc9\x2a\xcd\xb3\xaa\xac\xaa\x24\x54\x69\x96\xe4\x01\xc7\x72\x40\xa1\x11\x83\x38\x2c\xa8\x2c\xe6\x59\x46\x41\x50\x50\x64\x1a\x60\x16\xaa\x1c\x42\x1a\x47\x22\xa8\x61\xcc\xc8\x14\xab\xe2\xc0\x23\xc1\x27\x9d\xf0\x75\x83\x47\x12\x38\x78\xc1\x23\x09\x1c\xf5\x12\x7a\x3d\xcf\xa3\x27\x7c\x7d\xa1\x47\x3a\x38\x91\x2b\x21\x8c\xc6\x85\x0e\x7c\xa7\x66\x5c\x4d\x5b\xf2\xd5\x12\x1e\x49\x32\x68\x36\x73\x8c\xb1\x78\x1f\xe5\xc8\x84\xad\x77\x9d\x8a\xc7\xe9\x15\xc0\xc2\x9a\x3c\x1a\x40\xb5\xd1\x6c\x69\x38\x65\xcf\x14\xb2\x2a\x22\x6d\x90\xea\x2e\xbc\x41\x5b\x34\xdd\xe2\x74\x68\x26\xc6\xcb\x61\x42\xbc\xe9\x44\xae\xbb\x3d\x52\x84\x13\xa4\x9e\xea\x91\x1e\xc4\xff\x44\x8f\xf4\xe8\x09\x1c\x8f\x7a\xa4\xa7\xe0\x7f\xc0\x23\xfd\x4c\xf9\xb1\xab\xf9\xa7\x08\xb2\x7a\xa6\x47\x8a\x82\xff\x41\x8f\x94\x85\x8d\xde\x44\x46\x0e\x8e\x7b\x89\x78\x71\xce\x2f\xd8\x5a\x7d\xd6\x2e\x97\x86\xe3\x62\xe6\xbd\x36\xac\x65\x8c\x04\x76\x59\x6a\x2a\x72\x5d\xe7\x2d\x31\x6d\x64\xdf\x40\xbe\x5c\x17\xe8\x8a\x21\xac\x6a\x7c\x62\x12\x93\xca\x5a\x06\xa6\x5b\xc9\xce\x7c\xca\x56\x5a\x19\xb9\x50\x92\x9e\xbf\xcb\x49\xe1\x90\x4c\xf1\x34\xa5\x91\x88\x54\x68\x0d\x73\x82\x8a\x15\x4c\x6a\x1a\x90\x79\x4a\x00\x1a\x87\x04\x95\xa2\x15\x9a\x53\x64\x95\xc3\x14\x43\x52\xb4\xc6\xc9\x90\xd7\x58\x52\xd5\x14\x92\x0c\x3c\x12\xf5\x24\x8f\x44\x5f\xf5\x48\x3c\xbc\xe4\x91\x78\x78\xe8\x91\x82\xd7\xbc\x3d\xea\x91\x2e\xec\x25\x0d\x3c\x52\xa4\x25\xf1\xee\x15\x8f\x54\x89\x5b\xb2\x69\xf3\x05\x71\xd4\xa8\x68\xbc\x52\xab\x54\x0c\x31\xd5\x5d\xea\x8b\x58\x8e\x7c\x53\x3b\x76\x89\x6e\xeb\xb4\x54\xa8\x8a\x62\xbe\x9b\xb6\x3c\xc5\x1b\x26\x73\xcb\x1a\xad\xb8\xed\xd6\x72\x8e\x3a\x14\xcc\xc7\x47\xb8\xd6\xe9\xc9\x4b\x06\x26\x86\x46\x79\xd0\x8c\xb3\xb7\x2d\x89\x7f\xb5\x47\x3a\x53\x48\xf9\x65\x1e\x29\x19\x1d\xff\xa7\x9c\x09\x75\x87\x47\x78\xb6\x47\xba\xb7\x50\x49\x14\x1f\xf4\x48\x9f\x58\x12\x70\xd2\x23\xfd\x20\x8f\x20\x7e\x42\x5f\xdd\x83\x7f\xe3\x91\xb8\x98\x3a\xed\x0c\xe7\x76\xb2\x9e\x63\xe2\x8b\x85\x48\xb3\x39\xb1\xac\x15\x52\x59\x7a\x58\x37\x01\xd2\x57\x83\x4e\x4a\xaf\xd9\xbc\x28\x9a\x4a\x07\x83\x25\x2c\xe5\x86\xf9\xd4\x60\xb9\x68\x37\x8b\x89\x89\xac\xf5\xac\x58\x9d\x49\xbc\x0d\x66\x45\xab\x97\xa9\xe4\x60\xba\x1a\x9f\x3c\x7f\xc9\x9d\xc1\x9a\xa0\x90\xac\x2c\xb3\x90\x51\xa1\x8a\x20\xe4\x01\x00\xbc\xac\x6a\x80\x56\x79\x92\xe7\x58\x9e\x62\x28\x8c\xa1\xa6\x20\x8e\x66\x38\x85\xc7\x0c\xc9\x6a\x32\x96\x05\xa0\x29\x0c\x13\x78\x24\xfa\x49\x59\xbb\x1b\x3c\x12\x4d\x9f\x5d\x73\xdf\xdd\x3d\x7a\x5d\xe8\xa3\x59\xbb\x2f\xf4\x48\x07\x59\xbb\x4a\x06\x66\x0a\x15\xc1\x60\x49\xa5\x04\x6a\x05\xd8\x2a\x03\xbd\xeb\x64\xa5\xde\x10\x67\x8a\xf5\x6e\xba\xc9\xb8\x56\xf2\xbd\xc2\xa4\xad\xaa\xd4\x64\x94\xb6\x4b\x91\x65\x2e\xd7\xac\xbe\xb1\xd9\x2c\x5b\x53\xde\x60\x4e\x4d\x02\x85\x65\xe7\x45\x1d\xd3\x99\x65\x9d\x9f\x4d\xe6\x73\xf2\x67\xcc\xda\x3d\xec\x91\x1e\xc4\xff\x44\x8f\xf4\x94\xd2\xd5\x07\x3c\xd2\x57\x97\xce\x8a\xe2\xcf\x5b\xa4\x76\xcd\x23\x7d\x65\xd6\x4c\xfc\x84\xbe\xba\x07\xff\xc6\x23\xd1\x72\xaf\x67\x73\xb0\xe8\xd4\xe7\xab\xb6\xe8\xbc\xd5\xa8\x4e\x02\xbb\x4a\xdd\x28\xd3\x3d\x2f\xad\xb4\xab\xe3\xa5\x52\xb0\xb9\x51\x47\xe1\xeb\x55\x73\xd1\x59\x69\x35\xca\x1d\x94\x04\xcb\x56\xb4\x49\x62\x61\xf5\x06\x64\xb1\xbd\x72\x1c\x71\x9a\xe0\x74\x39\x9f\x5d\xc6\xac\x54\xea\xe9\x65\xc6\x90\xe2\x68\xbc\x76\x07\x82\x2c\x60\x8d\x53\x65\x24\x20\x46\x95\x29\x8a\x12\x64\x8e\xd7\x54\xc4\x6b\x14\xcd\x71\x9c\x0c\x90\x46\x51\x32\xa2\x59\x1e\xa9\x8c\x42\xaa\x9a\x40\xb3\x2a\xad\xbe\x6c\x5f\x68\xff\xc8\x1a\x3d\xb8\xba\x46\x0f\x78\xfe\xfc\xf2\xd1\xf6\xee\xe1\x4b\xa2\x1f\x5d\xa3\xbf\x90\xab\x0b\xae\x08\x91\xf9\x99\x35\xfa\x64\x6a\xf5\x3e\x1b\xd5\x12\x35\xbb\x2c\xe6\x0d\xad\x5a\xef\xa6\xec\xe2\x60\xe6\x2d\x95\x26\x65\xa6\xab\xc9\x1a\x03\xf4\x91\xea\xa6\xb3\x28\x51\xee\xcc\x49\xa6\x11\x6f\x0f\x3a\x64\x57\x1f\x39\x64\x32\x51\x95\xe8\x32\x4a\xb7\x61\x61\xac\xb8\xd4\xdb\xbc\x38\x36\x64\xba\x59\x77\x4a\xc5\x9f\x6b\x8d\xbe\x62\xf5\xe2\xcc\x0f\x5c\xa3\x7f\xf4\x94\x1f\x51\xfc\x71\x39\x9f\x93\x63\x6b\x22\xba\x2c\x2a\xd6\xdb\x45\x36\xaf\xc9\xe2\x19\x6b\xf4\x51\x4f\xf9\xd9\x8c\xad\x3a\xcf\x3a\x8c\x24\xb6\x0a\xa9\x5a\xb2\x67\xad\xc8\xf6\x9c\x4d\xd2\x32\xa7\x58\x92\xc0\xd4\x9b\xf3\x51\x45\xed\xe5\xb3\x72\xa2\x0e\xf5\x66\xdb\x2d\x57\x5a\x33\xd0\x6b\x7b\x69\x3a\x5f\x10\x44\xbd\xb9\xa8\xa4\x3a\x83\xb6\x6a\x4c\xac\x62\x19\x2a\x49\xc6\x1e\xc7\x24\x12\xad\x92\x9f\xb0\x46\x4f\x61\x01\x00\x12\xa8\x40\x40\x48\x96\xfd\x97\xa0\x01\x81\xa1\x78\x92\xe5\x79\x56\xe5\x38\x4e\x81\x2c\x09\x29\x4a\x61\x69\x8e\xd7\x80\x22\x40\x1e\x71\x02\x56\x68\x0c\x39\xff\xf5\xd8\x70\x13\xed\x47\x1f\x5b\xaf\x06\xf9\x10\x52\xdc\xd9\x53\x7a\xfd\xbb\xbb\x3a\xdd\xcd\xab\xdc\x1f\x1d\x5b\x2f\x9c\xad\x13\x5c\x11\x36\x02\x9c\x19\x5b\x53\xb9\xca\x54\x5d\x4d\x87\x9a\x1d\x53\x1b\xb9\x7c\xb7\x2b\x93\x6c\x63\x58\x4c\x14\x8b\x5d\x37\xbd\xb0\xda\x56\x1d\x64\xf3\x78\xa8\xbd\xc3\xb2\x9e\x6e\x79\xc5\x69\x17\x16\x9c\x76\xb9\xf1\xb6\xac\x27\x32\xb1\xce\x4c\x53\xed\xee\x3c\x59\x55\x26\x3c\x33\x48\xd5\xe5\xe4\x78\x28\x57\x7b\xa5\x9f\x6b\x6c\x7d\xb4\xfe\xe8\x51\x7b\x2e\xd0\xb1\xf2\xdb\x33\xc7\xd6\x2f\xdc\x30\xf0\x19\xf5\x4f\x51\xeb\x8f\xc4\x27\x8d\xad\x51\xfd\xec\x66\x6c\x5d\xa6\x1c\x4b\xe1\x6c\x8a\xad\x5a\x2d\x23\xd9\x06\x50\xa8\x8c\xec\xe5\xbc\xb1\x04\x5c\x42\x79\x03\x6f\xa4\x5a\x5f\x76\x6d\x8a\xf5\x86\xbd\x44\xbb\xd8\xe0\x4c\xc1\x78\x07\xcd\xd6\x58\x19\xd5\xea\x33\xd3\xa1\x28\x94\xe6\xc5\x21\x55\xd0\x2a\xbd\x1a\xd9\x99\x4f\x6c\xb8\x82\xb7\xd6\x96\xfe\xf2\xcb\xb7\x6f\xbf\x7c\xfb\x46\x94\xd1\x18\x7f\x27\x90\xeb\x62\xaf\xef\x7a\xc8\x73\x0f\x3f\xf7\x27\x23\xbc\xfc\x93\x68\x2e\x27\xf8\x3b\x91\xac\x94\x1b\xcd\xba\x98\x2b\x37\xff\x24\x1a\xca\x00\x8f\xd1\x77\x62\x32\x95\x4d\x43\xf9\x93\xa8\xcc\x2d\xec\x7c\x27\xd6\x10\x7f\xf9\x45\x2c\x36\xa5\x3a\xd1\x14\x13\x45\x89\xa8\x94\x8b\xbd\x43\x88\xbf\x10\x04\x41\x88\xa9\xd4\x01\xb4\x0f\x08\x89\x6a\x3d\x57\x12\xeb\x3d\xa2\x20\xf5\x88\xdf\x0c\xf5\x03\xb5\xba\xed\x4c\xfa\x63\x43\x77\x50\xe0\x06\x42\xdf\x9f\x44\x75\x08\xea\x29\xca\x4f\x21\xbe\x4a\xfd\xd6\x93\xf9\x6c\xbb\xa1\xaf\xc1\xff\xfa\x8a\xad\xe2\xcd\x47\x6f\x39\xd9\x7e\x34\x5c\x77\x8a\x9d\xfe\x53\xb8\x3b\x46\x7b\x8a\xb9\x48\x84\x11\xad\x72\xae\xd6\x92\x88\xdf\xf6\xcd\x5f\x89\x7d\xfb\xed\xe7\xe0\x81\x3b\x45\xf3\x9c\x6e\xbd\x9b\xf1\xbb\x3a\xd5\x9e\xe0\x40\x19\xfa\x13\xe4\x78\x86\x62\x4c\x90\x75\xc0\xc9\xe9\xdb\x4f\xe6\xec\x34\x92\x4b\x9c\x5e\x20\xeb\x66\xce\x0f\x02\xb3\xd3\xbc\x9f\x6b\xf0\x64\xee\xcf\xa1\xb9\xc4\xff\x45\xd2\xae\x4a\x20\x50\x69\x79\xe9\x6b\xfb\x96\x91\x5c\x39\x25\x75\xaf\xf0\x90\xac\x4b\x62\x53\x0a\x9a\x1e\x43\x21\x2a\xe5\xb0\x31\xb4\x1a\xb9\x72\x86\x90\x3d\x07\xe3\x43\xeb\x3a\x4f\x4d\x60\x63\x8f\xd3\x13\xc0\xb9\x8d\xa2\x33\x76\x2d\x2f\xfb\x48\x51\xec\xa9\xe5\x45\x26\x67\x0f\xe2\x90\x92\xa3\xd9\xc0\x31\x3d\x41\xe3\x57\x62\xf3\xa1\xef\xe2\xf7\x29\xb6\x94\x8f\x02\x93\x97\xfd\x01\x72\x07\x8f\x50\xb6\x7e\xfe\x36\xb2\x0e\x35\x6d\xfd\xd4\x29\x6a\x4c\xac\xea\x0f\x74\xdc\x0e\xc2\x6d\x14\x05\x6d\x77\xe2\x79\x25\xd0\x64\x62\x1a\x4a\x30\x1c\xd8\x8e\x7a\x66\x98\xee\xe3\xb5\x6e\xf8\xf7\x23\x50\xba\xf1\x12\x01\xc1\x21\x70\x87\x64\x63\x4d\xc3\x4a\x58\xd5\x3e\x8e\x5a\x86\xfa\x4a\xfc\xea\x3f\xfc\xeb\x39\x62\x0d\xf5\x49\x64\x1a\xea\xcd\x04\x6e\x55\x6f\x4d\x5e\x04\xa2\xed\x49\x7f\xf2\x2c\xba\x37\xb0\x0e\x49\x3f\xe3\xaa\x22\x71\x72\x9a\x01\x6f\xf1\x3c\x06\x36\xb0\xce\xe8\x74\x44\x16\x0e\x21\x9c\x62\xc2\x9e\xac\xb5\x72\x60\x47\xe2\x61\x43\xfc\x1e\x46\x54\xe1\x5f\x16\xb4\xbb\xb1\x76\x7f\xa8\x7e\x5c\xd6\xc7\xe0\x0e\x49\x0e\x7e\x0f\xd1\x78\x9a\xa2\x43\xb9\x3e\x8b\xac\x0f\x30\x6f\x1b\xde\x4e\x11\xe8\x05\x5d\xe2\x3d\xd2\xad\x7b\x18\xd1\x55\xf2\x9a\xfa\x79\x8e\xba\x46\x22\x23\x17\x3f\xec\x3f\x4f\x01\x0b\x51\xae\xe2\x10\x9d\x87\x6d\xaf\x12\x68\x6b\xda\x03\x4e\xeb\x23\xa8\x9b\x88\xf3\x5b\x5e\x22\xcd\xa7\x1d\x3b\x4f\x13\x5f\x08\xde\x35\x22\x43\xcd\x6f\xa1\xf4\x39\x72\x3c\x82\x76\x2b\x95\x57\xa5\xf9\x1c\xda\x6e\xa2\xe9\x32\x2d\x5b\x8a\x4d\xdb\x1e\x4d\x27\x8f\x51\x74\x0c\xeb\xe6\x1e\x0d\xe2\xdd\x33\xf4\x4d\x90\xe1\xf4\x3d\x63\x8c\x9f\x42\x61\x18\xda\x6d\x76\xbb\x21\xf0\x95\x08\x93\xfc\x4a\x6c\x86\x78\xc5\xb4\x5d\xac\xf6\x91\x77\x86\x89\x27\x8c\xdb\x1b\x38\xd7\x28\xbe\x33\x3a\x5a\x43\x7d\x9a\x74\xef\x10\xec\x55\xb9\x19\x96\x8a\x17\xfd\x50\xc8\xe1\xf6\x6d\xab\x8f\x54\xd5\xc1\xae\xfb\xa8\x40\xaf\x22\x38\x9a\xa7\x6d\x6e\x87\x66\x46\x41\xc3\x3b\x68\x7f\x5c\x0f\x2e\xc1\xbe\x4e\xf1\x09\x2b\x3b\x06\xb8\x89\xc2\xd7\xf0\xbc\xe5\x24\xfa\x1c\xfc\x22\xd4\xab\x61\xff\xba\xd1\x15\x42\x37\x31\xd4\x1a\xe4\x4e\x89\x9e\x44\xed\x29\xd0\x57\xc3\xb7\x5b\x35\xf9\x00\xf8\xb3\x95\xe1\x08\x74\x94\x78\xf3\x3c\xb8\xf1\xc4\x76\xd6\x03\xdf\x0c\x3b\xae\x61\x5b\xcf\x17\x74\x18\xc3\x75\xf2\x43\x0f\xdc\xce\xcc\x66\xe8\x89\x98\xa9\xb8\x4d\xfe\x07\x38\xae\x72\x72\xd0\xf6\x76\x26\x26\x0e\x9e\x19\xf6\xd4\xfd\x12\x6e\x4e\x21\xbb\xca\xd6\xa9\x87\x6e\xe7\x6f\x9b\x44\xf9\x34\x9e\xb6\x08\xae\xf2\x71\x36\xdb\x75\x0c\x7a\xe7\x6f\x3f\xc5\xb4\xc3\xd0\x4f\x4e\x80\xef\x35\xf0\x63\xa0\xc7\x53\xa8\x27\x59\xf8\x25\x14\xb7\xf0\x70\x65\x5e\x77\x11\xd9\xf3\xdc\xd7\x47\xc0\x37\xd1\x7e\xdd\x89\x1d\x4e\xb6\x3f\x43\x6d\x3e\xc2\x8f\x3c\xd5\xf7\x83\xb8\x9d\x23\xdf\x66\x18\xfb\xb2\x6d\x8f\x22\x4b\xf9\x02\xcc\xab\x21\xc2\x6f\xbf\xa9\xd8\x43\x86\xe9\x12\xdf\xfe\xe7\x7f\x88\x17\xd7\x36\xd5\x83\xd5\xb4\x97\xef\xdf\x3d\xbc\xf0\x7e\xff\xfd\x95\x38\xdf\x50\xb1\xd5\xdb\x1a\x06\xb9\xf8\xf3\x4d\x65\x7b\xaa\x0f\xbc\x9b\xd0\x1f\x35\xbd\x4c\xc0\x51\xd3\x10\x09\xbf\x13\x9d\xac\x54\x97\x02\x25\x23\xfe\x22\x28\xea\xe6\x85\x68\x43\xed\x6b\x07\xcb\x44\xe9\xc2\xd7\x2c\x47\x6f\xd0\x12\xe9\x4a\x5d\xca\x65\xca\xbb\x25\x20\xa2\x2e\xa5\xa5\xba\x54\x4e\x4a\x8d\xd0\xaa\x88\x7f\xb7\x52\x26\x5a\xd5\xd4\x5a\x65\xea\x52\xa3\x59\xcf\x25\x9b\xeb\x9f\x52\x52\x51\x6a\x4a\x44\x52\x6c\x24\xc5\x94\x74\x61\x1d\x6d\x3d\xef\x38\xfe\xda\x0f\xa5\x62\x9e\x27\x8c\x63\x3c\x57\x16\xc9\xce\x51\x72\x2c\x9f\x70\xda\xe8\xa4\xb0\x36\x81\xfe\x95\x15\xc5\xb3\x92\xd8\x4c\x65\x7f\xb8\x1c\x0e\xe9\x38\x25\x85\x6d\x96\xe0\xb2\xc2\xdc\x27\x81\x8f\x49\xa5\x1f\x28\x86\x33\xc4\x1c\xcb\xe2\x44\x1a\xec\xb9\x4a\x11\x4e\x71\xfc\x0c\x02\x39\xaf\x1a\x1f\x72\x48\xb7\x68\x07\x81\x54\x15\xab\xc4\x18\x59\x53\x64\x9a\xcb\x23\x4a\x73\x69\x42\xea\xe6\x1a\xcd\x46\x40\x73\xc0\xd9\x1f\x23\xbc\xec\xcf\x90\x39\xc5\xfd\x35\x44\x4c\xa4\xea\x95\xea\x21\xe1\xfb\xa7\x42\x2d\x83\x15\xf9\x5f\xfc\xf6\x61\x04\xa7\x61\xff\xb9\x75\x91\x41\xf3\x30\xe6\xdf\x7c\xb9\x5d\xbc\xd6\x42\x52\x06\xc8\x41\x8a\x87\x1d\x62\x86\x9c\xa5\x61\xe9\xbf\x41\x86\xf9\x9d\x28\x57\x9a\x41\x01\xd3\x75\x28\x3e\xd2\x6b\x70\x7e\x09\x95\x96\x86\xa9\xdd\x1f\x0c\xbe\x98\xf4\x0d\x4b\xc7\xae\xd7\x37\xd1\xfa\x8f\x1f\x69\xbf\xbc\x12\x2f\xe4\xcb\xef\x7f\x7e\xd4\x95\x10\xa0\x53\xca\x72\x4a\xd2\xc7\x05\x06\x23\xbc\x5c\xf7\xf8\x91\x3c\x77\x09\x13\xd7\xd0\xad\x75\xac\x7f\x83\x40\xb7\x0f\x9d\x90\x06\x4b\xff\x7e\x83\x2c\x89\x00\x59\xf4\xe7\xe7\xd8\xd0\x07\x1e\x61\x58\x1e\xd6\xb1\x13\xea\xc6\x6f\xdf\x88\x39\x26\xe6\x86\x69\x12\xef\x53\xec\x2c\x09\x79\xb9\x45\xe8\xda\x84\x37\x40\x1e\x61\xb8\xc4\x7c\xb0\xfb\xd5\x70\x09\x6f\x80\x09\xcd\x70\x5c\x8f\x30\x3c\x3c\x26\x0c\xcb\xff\x45\xb1\xc7\x13\xdb\x35\x3c\xbc\x16\xee\x0d\x64\x1d\x49\x3b\x00\xbe\xab\x12\xf8\x7d\xad\x1b\x9b\x71\xa7\x6a\xbb\x9e\xee\xe0\x46\xad\x48\xa8\xc8\x43\xeb\xf1\x9c\x50\xa7\xe3\x89\x8f\xd0\xc4\x1e\xf6\x07\x8c\xff\x1f\x00\x00\xff\xff\xcb\x54\x43\x61\x9e\x4f\x01\x00") +var _tradesHorizonSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x79\x8f\xa3\x48\xb2\xf8\xff\xfd\x29\xd0\x68\xa5\x9a\x96\xbb\xc7\x64\x72\xf7\xfc\xe6\x49\xd8\xc6\xf7\x7d\xbb\x56\x2b\x2b\x81\x04\x63\x63\x70\x01\x3e\x57\xef\xbb\xff\x64\xf0\x49\xf9\xc4\xae\xea\x9e\xb7\x8b\x7a\x6a\x6c\x93\xc4\x95\x11\x19\x91\x91\x91\xc9\xf7\xef\x5f\xbe\x7f\x27\xaa\xb6\xeb\xe9\x0e\x6e\xd4\x8a\x84\x8a\x3c\x24\x23\x17\x13\xea\x74\x3c\xf9\xf2\xfd\xfb\x97\xf5\xfd\xd4\x74\x3c\xc1\x2a\xa1\x39\xf6\x78\xdf\x60\x86\x1d\xd7\xb0\x2d\x42\xf8\x83\xfd\x03\x1c\xb4\x92\x97\xc4\x44\xef\xaf\x1f\x0f\x35\xf9\xd2\x90\x9a\x84\xeb\x21\x0f\x8f\xb1\xe5\xf5\x3d\x63\x8c\xed\xa9\x47\xfc\x45\x90\x7f\xfa\xb7\x4c\x5b\x19\xbd\xff\x55\x31\x8d\x75\x6b\x6c\x29\xb6\x6a\x58\x3a\xf1\x17\xf1\xd2\x6a\xa6\xf9\x97\x3f\xb7\xe0\x2c\x15\x39\x6a\x5f\xb1\x2d\xcd\x76\xc6\x86\xa5\xf7\x5d\xcf\x31\x2c\xdd\x25\xfe\x22\x6c\x6b\x03\x63\x80\x95\x51\x5f\x9b\x5a\x8a\x67\xd8\x56\x5f\xb6\x55\x03\xaf\xef\x6b\xc8\x74\xf1\x11\x9a\xb1\x61\xf5\xc7\xd8\x75\x91\xee\x37\x98\x23\xc7\x32\x2c\xfd\xcf\x0d\xed\x18\x39\xca\xa0\x3f\x41\xde\x80\xf8\x8b\x98\x4c\x65\xd3\x50\xbe\xad\x99\x55\x90\x87\x4c\x7b\xdd\x4c\x2c\x36\xa5\x3a\xd1\x14\x13\x45\x89\xc8\xa5\x09\xa9\x9b\x6b\x34\x1b\x44\xa5\x5c\xec\x6d\xda\xff\x31\x30\x5c\xcf\x76\x96\x7d\xcf\x41\x2a\x76\x89\x54\xbd\x52\x25\x92\x95\x72\xa3\x59\x17\x73\xe5\xe6\xc1\x43\xc7\x0d\xfb\x8a\x3d\xb5\x3c\xec\xf4\x91\xeb\x62\xaf\x6f\xa8\x7d\x6d\x84\x97\x7f\x7e\x06\x42\xc5\xff\xf4\x19\x28\xd7\x7a\xf5\x79\x0c\x06\xd8\xee\xe7\x2e\x20\x70\xad\xc8\x97\x90\x1d\xb4\xda\x03\xf7\x9b\xe7\xca\x29\xa9\x7b\xd0\x72\x03\xd6\xa7\xaa\x8f\x35\x0d\x2b\x9e\xdb\x97\x97\x7d\xdb\x51\xb1\xd3\x97\x6d\x7b\x74\xf9\x41\xc3\x52\xf1\xa2\x7f\xc0\x9c\xe5\x22\x5f\xd1\xdd\xbe\x6d\xf5\x0d\xf5\x9e\xa7\xed\x09\x76\xd0\xee\x59\x6f\x39\xc1\x0f\x3c\xbd\xa7\xe4\x21\x2a\xee\x7b\xd6\xc4\xaa\x8e\x1d\xff\x41\x17\xbf\x4d\xb1\xa5\xdc\xc5\xc2\xc1\xe3\x13\x07\xcf\x0c\x7b\xea\x6e\x7e\xeb\x0f\x90\x3b\x88\x08\xea\x71\x08\xc6\x78\x62\x3b\x6b\x73\xdc\x8c\xa9\x51\xc1\x44\x95\xa5\x62\xda\x2e\x56\xfb\xc8\xbb\xe7\xf9\xad\x32\x47\x50\xa5\x8d\x5d\x46\x20\xfa\xf0\x49\xa4\xaa\x0e\x76\xdd\xcb\x8f\x0f\x3c\x47\xf5\xfd\x4e\xdf\xb4\xed\xd1\x74\x72\x43\xeb\xc9\x35\x92\x82\x56\xc8\x70\xee\x04\xbc\x1d\x74\x6f\x7e\x60\x3d\x4e\x68\x1a\x76\x6e\x6b\xba\x05\x1f\xe1\x91\x8d\x58\x6f\x7b\xc8\x1f\x5a\xef\x40\x72\x38\x14\x5f\x7b\x62\xb2\x7e\x60\xe0\x5d\xed\x01\xf7\x68\x00\x92\x97\x57\xd5\x68\xb0\xb3\xf4\x5b\x1a\xdb\x01\x1d\xf6\xd5\x86\x86\xeb\xf5\xbd\x45\x7f\x72\x1d\xe4\xba\xa5\x3d\xb9\xb5\x25\xbe\xb5\xd9\xd6\x95\x5c\x6e\x2c\x6f\xcd\xfd\x6a\xb3\xeb\xa3\x98\xbc\xbc\xad\x33\x03\x1f\xb9\x96\xb6\xeb\x4e\xaf\x61\xde\x35\x56\x6c\x15\xdf\x19\x17\xec\xd4\x60\x82\x1c\xcf\x50\x8c\x09\xb2\x2e\x3a\xef\x6b\x8f\xf6\x27\x77\xc6\x26\x3b\x8f\x76\x2f\x05\xa7\x1f\xbc\x1b\xbf\x2f\xbc\x5b\xf0\x05\x0d\x3f\x1c\x7e\xd0\x99\xeb\x9e\xdc\x7c\x5c\xfb\x87\x6d\xe8\xe7\x2b\x43\xff\x46\x0a\x74\xdb\x99\xf4\xc7\x86\xbe\x09\x18\x2e\x90\x10\x6a\x79\x33\x8f\xf7\xc7\x7b\x97\x20\xdf\xaa\x9c\xc1\xd3\xc9\x4a\xb1\x55\x2a\x13\x86\x1a\x60\x4e\x49\x69\xb1\x55\x6c\xde\x08\xfb\x8c\xd2\x3d\x01\xf2\xa6\xbb\x2f\x43\xf2\xbf\xdd\xce\xfe\xd6\x4b\x37\xa4\x5a\x4b\x2a\x27\x23\xc8\x6c\x1d\x67\xbb\xf8\xed\x6e\xcc\x47\x40\x6e\x7e\x5a\xc5\x37\xb6\xdd\x47\xb3\x37\x73\x78\xc6\xea\xef\xe1\xef\x34\x88\xdb\x9e\xdd\xc4\x7d\xb7\x35\xde\x04\x79\x37\xf3\xb6\x19\x01\xee\xe1\x25\x78\xe4\xc6\xb6\x9b\xf0\xef\x76\x7a\xb6\xf1\xe2\x2d\x14\x85\xc6\x90\xcb\x8d\x0f\x86\x84\x4d\x43\x31\x93\xa9\x4b\x19\xb1\x79\xa2\xf1\xd8\x58\xcf\x38\x0c\x05\xff\x6e\x4d\xc7\xd8\x31\x94\x7f\xfe\xeb\xeb\x0d\x4f\xa1\x45\x84\xa7\x4c\xe4\x7a\xbf\x23\x6b\x89\x4d\x3f\x15\x73\xc3\x13\x9a\xe1\x9c\x7c\x24\xdd\x2a\x27\x9b\xb9\x4a\xf9\x02\x3f\x7d\xa4\xeb\x7b\xea\xbe\x11\xef\x08\xbd\x00\x63\xcb\xdd\x03\x30\xd6\xbc\xfa\x8f\xef\x89\xff\x46\xdc\xc3\x88\xcf\xfa\x0d\x10\xa4\x6e\x53\x2a\x37\x42\x20\xcc\x89\xee\xbe\x99\x5b\x5d\x4c\x66\xa5\x92\xf8\x0e\xc3\x9f\x5f\x82\x2c\x5c\x19\x8d\xf1\x8f\xed\x6f\x44\x73\x39\xc1\x3f\x36\x8f\xfc\x49\x34\x94\x01\x1e\xa3\x1f\xc4\xf7\x3f\x89\xca\xdc\xc2\xce\x0f\xe2\xbb\x9f\x9c\x4b\xd6\xa5\x75\x7f\x6d\x20\x6f\xe1\x7d\x39\x82\x78\x7c\x73\x03\x38\x59\x29\x95\xa4\x72\xf3\x02\xe4\xa0\x01\x51\x29\x1f\x03\x20\x72\x0d\xe2\x65\x9b\x76\xdb\xfe\xe6\xfa\x40\x5e\xc2\x98\xb7\xec\x6f\x70\xee\x24\x74\x95\x9f\x23\x59\x96\x2b\xcd\x90\x3c\x89\x4e\xae\x99\xdd\x91\x75\x98\x7f\x3b\x42\xbf\x87\x12\x22\xe4\x1e\xe6\xdf\x01\xf1\x05\x50\x2d\xc6\x27\x7a\xa3\x56\x24\x26\x8e\xad\x60\x75\xea\x20\x93\x30\x91\xa5\x4f\x91\x8e\x7d\x31\xdc\x98\x2f\x3c\x24\xf7\xba\xa2\x6d\xc8\xdf\xea\xea\x9e\xfe\x6d\xdf\x9e\x92\xe5\x4e\xb3\xaf\xc2\x27\xea\x52\xb3\x55\x2f\x37\x0e\x7e\xfb\x42\x10\x04\x51\x14\xcb\x99\x96\x98\x91\x08\x9f\xfb\x52\xa9\x15\x8c\x77\x8d\x66\x3d\x97\x6c\xfa\x2d\xc4\x06\xf1\x8f\xfe\x3f\x88\x86\x54\x94\x92\x4d\xe2\x1f\x60\xfd\x2d\xdc\x1b\x57\x0d\xf1\x31\xee\xae\x81\x7f\x1a\x73\xf0\x14\x73\xb7\x8c\x54\x8f\xf1\x77\x03\x86\x1d\x8b\xbb\x9f\x22\x71\xf8\xfb\x17\x82\x48\x8a\x0d\x89\xe8\x64\xa5\x32\xf1\x0f\xf0\x4f\xf0\xaf\xf8\x3f\xc0\x3f\xe1\xbf\xfe\xe7\x1f\xd0\xff\x0c\xff\x09\xff\x45\x34\x83\x9b\x84\x54\x6c\x48\x6b\xa1\x48\xe5\xd4\xd7\x93\x92\xb9\xc1\x0f\x3c\x28\x99\xeb\x18\x3e\x5a\x32\xff\x2f\x8a\x64\xde\xfb\xd4\x8d\x1c\x76\x7e\xf8\x36\x41\xec\xdd\xf6\x3b\x88\x3e\xc5\x04\xd1\x58\xcb\x8a\xf8\x6b\x3f\x02\x7c\x0b\x7e\x6e\xf6\xaa\x12\xf1\xd7\xa1\x45\x7c\x3d\x65\xb5\x4f\xa5\x31\x0c\x30\x44\xe2\xd6\x8c\x6f\xa7\xf0\x64\x08\xf4\x28\x95\xa7\x80\x86\x28\x3d\x32\xc8\x63\x72\xf7\x5a\xf6\x9e\xda\x53\x61\xde\xc3\xd4\x9e\x00\x1a\xa6\xf6\xd0\x48\x2e\x52\xbb\xf6\x5c\x2a\xd6\xd0\xd4\xf4\xfa\x1e\x92\x4d\xec\x4e\x90\x82\x89\xbf\x88\x97\x97\x3f\x8f\xef\xce\x0d\x6f\xd0\xb7\x0d\xf5\x60\x29\xed\x88\xd7\xc3\xf8\x77\xc3\xa2\x6f\x60\xb7\xb1\x17\xd8\xe2\xe1\xe4\x3b\xe0\xc8\x50\x09\xd9\xd0\x0d\xcb\xf3\x03\x83\x72\xab\x58\x0c\xd8\x41\xe3\x75\x18\x4f\x28\x03\xe4\x20\xc5\xc3\x0e\x31\x43\xce\xd2\xb0\xf4\x50\x33\x6b\x3a\xde\x85\xfc\x84\x61\x79\x58\xc7\x4e\xa8\x89\x66\x22\xdd\x25\xdc\x31\x32\xcd\xf7\x68\x3c\x7b\x6c\xbe\x47\xf2\x3b\x64\x98\xaf\xbb\x96\xef\xbb\x3d\x3c\x6f\x88\x2a\x8e\x70\xb6\x63\x27\x12\x0f\x2f\xde\x09\x64\x32\x31\x0d\x3f\x67\x4f\x78\xc6\x18\xbb\x1e\x1a\x4f\x88\x75\x9f\xf9\x5f\x89\x95\x6d\xe1\xf7\x84\x9e\x9b\x15\x6d\xe3\xd1\xcd\x74\xea\x36\x9a\x77\x93\xaf\x33\x50\x37\x6a\x28\xd6\x9b\x41\x44\x07\xfc\x1f\x72\xe5\x64\x5d\xf2\xc3\xaf\x44\x6f\xf3\x53\xb9\x42\x94\x72\xe5\xb6\x58\x6c\x49\xbb\xef\x62\x77\xff\x3d\x29\x26\xb3\x12\x01\xae\x31\x13\x59\xec\x61\x40\xef\x54\x71\x93\xf4\x20\x2c\xbc\xf0\x66\xc8\xfc\xfd\xe5\x0c\xc7\x2f\x3f\x7e\x38\x58\x57\x4c\xe4\xba\x5f\xc3\xdd\x15\xac\x55\x9c\xd0\x2d\x96\xfe\x7a\xa1\xa3\x82\xb9\xf1\xc3\x9c\x05\x19\x9d\x1d\x5f\xa7\x2d\x63\x9f\xab\x3b\x4d\xe6\xc9\xe6\x8a\xad\x9e\x6a\x0e\xe0\xe9\xe6\x41\xfa\xef\xc4\x03\x0c\x7b\xc9\xc2\x4e\xa7\x17\x9e\xa4\xb6\x87\x30\x3f\x4d\x69\x2f\x31\x42\x54\x3a\x65\x29\x45\x24\x7a\x57\x38\x0a\x32\x74\x97\x19\xda\xc1\x0a\xdd\xfe\xc3\x50\xcf\xd1\xb6\xcd\xf9\x3c\xaa\x75\x1b\x38\x1b\xb5\x0b\xd9\x4c\xff\xdc\x48\xff\x3e\xc5\x75\xae\xe5\x6f\xfe\xc2\xc7\x6f\x67\xb4\xd9\xd7\xe3\xd3\xb7\x54\xec\x21\xc3\x74\x89\xa1\x6b\x5b\xf2\x79\x65\xdb\x26\xca\x1e\x95\xc3\x06\xce\x46\x0e\xdb\x75\xeb\x33\xb4\x1d\x2c\x26\xdf\x64\x85\xa7\xd6\xb1\x4f\x3f\xb8\x11\xcb\x41\x66\xd4\xef\x88\x1d\x1d\xdb\x51\x8e\x0c\x61\xd8\x77\xc4\x6d\xed\x77\x8b\xc9\x21\xc7\x64\x4f\xbd\xbd\x6f\x0a\x3f\xe3\x60\xe4\x5d\x7d\x28\x68\x3b\x9d\xa8\x37\xb7\xdd\xa9\xce\xe6\x6b\x68\x9d\xfd\x1d\x2f\xe0\x5d\x3c\xe0\x21\xb3\xaf\xd8\x86\xe5\x9e\xd6\x41\x0d\xe3\xfe\xc4\xb6\xcd\xd3\x77\xfd\x95\x4f\x0d\x9f\xeb\x6b\xff\xb6\x83\x5d\xec\xcc\xce\x35\x59\xc7\xa1\xde\xa2\xef\x87\x49\xc6\xea\x5c\xab\x89\x63\x7b\xb6\x62\x9b\x67\xf9\x0a\xf7\xd1\x56\x59\x30\x52\xb1\xe3\x87\x17\xc1\xef\xee\x54\x51\xb0\xeb\x6a\x53\xb3\x7f\x56\x51\x36\x8c\x23\xc3\xc4\xea\xb5\x56\x1b\xd2\xcf\xa8\xd0\x79\xd3\x3b\x93\xdf\x7e\xd4\x12\xcf\xac\x99\x5c\xf1\x8b\xb7\x8f\x48\xd7\xc7\xb8\x7b\x59\x7e\xae\xab\xbb\x88\xe3\xb3\x5c\xdf\x5d\x8c\x3e\xe8\x0a\x2f\xe2\x7a\xef\x1a\x4f\x37\xbf\xe0\x2a\x0f\x56\x7f\x9e\xa6\x9b\xd7\xa6\x42\xc7\x95\x57\x67\xa6\x4b\xeb\xd9\x81\x12\xb0\xe2\x7b\xc9\x07\x9d\xe4\x66\x74\xb0\xa7\x8e\xb2\x2b\xe5\x38\xe3\x9e\xb6\x43\xce\xcb\xcb\x8f\x1f\xe7\xa7\x6b\xe7\xed\x60\xb3\xf8\xf6\xa8\x38\x37\xf5\x82\xbf\x3f\x35\xa6\xd8\x0c\x9b\x51\x3c\x9c\x5f\x2f\x73\x16\x6d\xa8\x5a\xf1\x52\xa3\x4d\x01\xe5\xa5\x26\xc1\x5c\xf9\x64\x83\xf7\x75\x9f\x57\xda\x5d\x44\xb7\x6b\x75\x01\xa3\x4f\x92\xe1\xf6\x5d\x6c\x9a\xd8\x21\x64\xdb\x36\x31\xb2\xb6\x7e\xcb\x50\x70\xdf\x3a\xf2\xd1\xc1\x6f\xc7\x7e\x7b\x5f\x71\xd4\x0f\x79\xf4\xa3\x9a\xa7\xf0\xcd\x83\xa5\xfc\x93\xd5\xa1\x3e\xd5\x7d\xbf\x7e\x98\x48\x66\xa5\x64\x81\xf8\xfd\xf7\x43\x09\xfe\x0f\x41\x7e\xfd\x7a\x0d\xd4\xa9\xc7\xb7\x42\xfb\x7f\xef\xe4\x78\x03\xbc\x23\x99\x86\xc0\x87\x04\xee\x13\x78\xd1\x94\x4e\xaf\x82\x3f\xc1\xb8\x4e\xd7\x35\xdc\xe8\x49\x6f\x19\xc2\x1e\xf1\xa5\xd7\x6a\x08\x9e\xe3\x4d\xaf\x60\xf9\x2c\x7f\x7a\x27\xb3\x0f\x7a\xd4\x2b\xd8\xde\xfb\xd4\x73\x0f\x5c\xf0\xaa\x47\x75\x23\x4f\xd4\xd5\xad\x7e\x1e\x92\x74\xf3\x44\x6b\x33\xf6\x5f\x99\xbe\xdd\xea\x78\x2f\xfb\xd0\x93\x6d\xf7\xa8\x4f\xda\xcb\x7a\xa6\x70\x7e\xaa\x71\x6e\x12\xf7\x53\xa6\x61\xde\xa2\x8f\xad\x19\x36\xed\x09\x3e\x95\xda\xf4\x16\xeb\x49\xd1\xd4\xf4\xce\xdc\x1c\x63\x0f\x9d\xb9\xb5\x9e\x8e\x9d\xbb\xed\x1a\xba\x85\xbc\xa9\x83\x4f\x65\xe1\x04\xf6\xeb\x3f\xff\xb5\x8f\x5d\xfe\xfd\xbf\xa7\xa2\x97\x7f\xfe\x2b\x2c\x73\x3c\xb6\xcf\x24\xcc\xf6\xb0\x2c\xdb\xc2\x17\x63\xa1\x3d\xac\xf7\x60\x36\x9c\x19\x63\xdc\x97\xed\xa9\xa5\xfa\x59\x6d\xde\x41\x96\x8e\xc3\x33\xb6\x63\xd7\xba\x96\xc4\x1a\x9a\x8e\xd5\xeb\xd3\xad\x4d\x7e\xd0\x50\xb7\xd6\xb6\x2d\xf3\xba\x65\x88\x08\xcc\xcd\xaf\xa9\xbb\x52\x41\xd6\x90\x9a\x17\x72\xa9\x87\x59\xab\xc3\x4c\xea\x7d\xf3\x88\xe7\x31\x71\x63\x81\xdd\x45\xa6\x2e\xce\x3f\x6e\x61\xf2\xac\xa7\x7d\x1a\x9b\x37\xd7\x28\x5e\x64\xf4\x8a\x5b\x38\xcd\x6a\x0a\x79\x88\xd0\x6c\xe7\xca\x8a\x12\x91\x12\x9b\xe2\x15\xf6\x72\xe5\x86\x54\x6f\x12\xb9\x72\xb3\x72\xb4\xaa\xe4\x7b\xd1\x06\xf1\x3b\xf8\x46\xbc\x30\xe4\xf6\x7a\xf9\x46\xc0\x6f\x04\xf9\x8d\x78\x79\xf9\xfa\xe7\xd5\x67\xe1\x85\x67\xcf\xb0\x72\x69\x45\xe8\x5e\x76\xc2\xab\x42\x5b\xb2\x5e\x40\xdf\xb0\x0c\xcf\x40\x66\x3f\xa8\xd0\xf9\xc3\x7d\x33\x5f\xbe\x11\x2f\x90\x04\xc2\x77\x92\xfd\x4e\x52\x04\xe0\x7f\x40\xfe\x07\xcd\xfd\x41\x52\x90\x16\xd8\x18\x09\xc3\x0c\x9f\x85\x0e\xfb\xc1\xce\x8b\xa3\xde\x94\x97\x7d\xcf\x36\xd4\xcb\x98\x04\x96\xe1\xee\xc1\x44\xf5\xa7\x2e\xde\x79\xb7\xbe\x61\xbd\xdb\xed\x71\x11\x1f\x4d\x93\x34\x7f\x0f\x3e\xba\x8f\x54\xb5\x1f\xce\x99\x5d\xc4\xc1\xd0\x0c\x05\xef\xc1\xc1\xf4\x03\x5f\xba\x8d\xea\xfd\xb5\xd6\x8b\x28\x58\x8a\x84\x77\xb1\xc1\x6e\x51\x6c\x46\xce\x1b\x50\xf0\x34\x60\xee\x41\xc1\xf5\xc7\xb6\x6a\x68\xcb\xdb\xb9\xe0\x01\x0b\xef\x42\xc1\x1f\x71\xb1\x29\xb1\xbe\x01\x0f\x47\xb3\xd4\x7d\x78\xd6\x9d\x8e\x74\xdd\xc1\x3a\xf2\x6c\xe7\xb2\x4e\x09\x24\x20\x85\x7b\xc0\x0b\x3e\xf8\x20\x9f\xda\x5f\xa8\xce\x65\xe8\x90\x03\x77\x75\x35\x20\x7d\xf0\x9b\x5e\xf0\x67\xc8\x97\x11\x30\x02\x77\x97\x74\x00\x38\x44\xb0\x9b\x72\xad\x07\x80\xcb\x88\x04\x56\xb8\x8f\x13\x78\xd4\xd1\x9b\x49\x6e\xb0\xa9\xf7\x12\x26\x40\x72\x0c\x7d\x57\x8f\x00\x2a\x60\x67\x97\x1a\xb8\xd8\xe3\x00\x40\x8e\xbd\x8f\x13\xba\xaf\x19\x8b\xed\x06\x07\x7b\x6c\xf6\x35\x03\x9b\x17\x87\x46\x00\x18\x00\xee\x1a\x84\x01\xb3\x5d\xd7\xd9\xe6\xdb\x17\x57\xd8\x60\xb9\xfb\x86\x79\xc0\xf6\x0d\x4b\xc7\xae\xd7\x7f\x9f\xd1\xbf\x82\x8a\x13\xf8\xfb\x7a\x84\x3b\x0a\x13\xfc\xa5\x13\x74\xd9\x99\x00\x48\x92\x14\x7d\x17\x12\x7e\xa7\xbe\x9a\xed\xf4\xd7\x41\x3f\x0e\x19\x3b\x20\xbf\x53\x80\x00\xf4\x0f\x20\xfc\xa0\x85\x3f\x00\xa4\x78\x8a\x89\x91\xe0\x82\x3f\xbf\x58\x6b\x70\xaf\x43\x7f\x57\x6f\x70\x18\xa4\x64\x44\xa6\x93\xa8\xf6\x44\xa6\x47\x77\x44\x29\xdb\xed\xd4\x61\xab\x50\x81\xad\x0a\x9d\x68\x65\xb2\xad\x1a\x47\x4b\xad\x6a\xa1\x52\x86\xb5\x6c\x9b\xee\xd4\xb3\x95\x5c\xbd\x5c\x28\x64\xdf\x09\xe8\x2c\x92\x75\x34\x93\x49\x76\x0b\x19\xb6\x5e\xa6\x2b\xe5\x9c\x54\x4d\x96\xca\xe9\x04\x47\x41\x91\xa6\xd8\x57\xa6\x5a\x4e\x35\xea\xc5\x4c\xa7\xc0\x65\x12\xc5\x64\xa9\x56\xcc\xa5\x2b\x74\x83\x93\x7a\x9d\x76\xeb\x66\x24\x94\x8f\xa4\x56\xed\x65\xb2\x74\x81\xe1\xba\x89\x94\x54\x2e\x14\xba\x0c\x53\x48\x35\x3b\x95\x66\x81\xe9\xa4\x3a\xf5\x5a\x25\x0b\x8b\x59\x29\xd5\xa5\xa4\x42\x3b\x57\xab\x17\x4b\x52\x23\x93\xc8\xdc\x8c\x84\xf6\x91\x40\xaa\x96\x86\xd9\x96\xc4\x40\xb1\xd4\x6d\xa5\x5b\x59\x4a\xec\xe5\xc5\x6e\x37\xd3\xed\xb6\x61\x3b\xdb\xed\xf5\xea\xac\xd4\xeb\x4a\xcd\x6a\x21\xd5\x7d\x6d\x88\x1d\x96\xeb\x56\xe8\x9b\x91\x30\x6b\x24\x89\x7a\xb5\x97\xcd\x15\x61\x32\x47\xa5\xcb\x35\x3a\xd1\x2d\xa6\x4b\xe5\x54\x31\x9d\x6f\x95\xab\x2d\x98\xed\x51\xaf\xa5\x74\x23\x5b\x29\xb7\x92\x52\x45\x6c\x74\xb8\x5a\x92\xab\x74\x61\xf6\x25\x6a\x01\xce\x3a\xd6\xbe\xa2\x50\x9b\xa2\xc5\x7d\xbd\xf1\x1f\x2e\xbe\x5c\x9c\xf2\x8d\x60\xbe\x11\x9e\x33\xc5\x37\xa8\xf9\xfb\xb2\x93\xc8\x4a\x1e\x4c\x05\x0f\x55\x5c\x71\xb0\x6a\x78\x7d\x64\x4e\x06\xc8\x9a\x8e\xe9\xb5\x61\xb6\x1a\xa9\x97\x8f\xe8\xce\x63\xec\xf0\x0c\x76\xa9\x55\x7f\xf9\x08\x8d\x3d\xc6\x4e\x9d\xc1\xde\x90\x0a\x8f\x62\x8f\x50\x63\xf2\x14\x15\x3b\x9a\xb3\xfb\x13\xa3\xdb\x14\xec\x54\x89\x49\x54\x0d\xdb\x96\x99\x1c\x74\x32\xcd\x41\x9a\x66\x69\x9a\x62\xa8\x6f\x04\xf8\x46\x50\x6b\xd1\xff\xfb\xb7\x60\x09\xe2\xb7\x1f\xc4\x6f\x51\x47\xd9\xdf\xbe\x11\xbf\x6d\xe3\x89\xdf\x7e\xac\x41\xff\xe6\xda\xa6\xba\x89\x63\xd6\x90\x21\xf9\xc7\x66\xa2\xb8\x6e\x2b\xdb\x53\x7d\xe0\x9d\xbd\x1d\x3c\xbb\xab\xa3\x5a\x37\x68\x35\x52\xa1\x3b\xde\x72\xe2\xdf\x09\xab\xce\x21\xfc\x23\x10\x52\xab\xfe\xee\xde\x25\x20\x07\xb8\x82\xf2\x2c\x5f\x42\x11\x2d\xf1\x1d\xe6\x43\x90\xd1\x14\xfc\xb7\xff\x3d\x67\x60\xe1\xae\x07\xa1\xae\x87\xa7\xba\x3e\xa2\xef\xfb\xf8\xae\xdf\xf4\xdb\x23\x5d\xbf\xd1\x9e\x47\xbb\x3e\x62\x3f\x5d\xea\xfa\x88\xda\x74\x73\xd7\xaf\xbb\x9a\x67\x19\x9a\x23\x05\x8e\x05\x9f\x6d\xf5\xcc\xe5\xae\x67\xfe\x6b\xf5\x1f\x6b\xf5\x47\x5d\xff\xb9\x56\xff\x68\xd7\xff\xd7\xea\x1f\xb0\xfa\x75\x6f\x03\x9a\xa3\x79\x9a\x64\x38\xce\xb7\x7a\xe8\xf7\xfc\x61\x07\x1c\xf5\xc0\x49\xe1\x5f\x17\xd9\xe7\x6b\x35\x15\x62\x6d\xad\xd5\xff\x47\x58\x83\xdf\x08\xc0\x01\x4e\xe0\x39\x0a\xf2\xe0\xfe\x5e\xdb\xe8\x7b\x14\xd6\x3e\x5a\x21\xe9\x10\x6b\xf7\xf6\xda\x2f\xcc\xda\xba\xa3\x20\xcf\xd3\x02\xc9\x08\x3c\x13\xf4\x1a\xe9\xf3\x66\x1a\x63\xc3\x67\x4d\x80\x90\xa2\x38\x48\x52\x2c\xcf\xfc\x41\x73\x1c\xc3\x93\xdc\xdf\x8a\x47\xb8\xe5\x11\x90\xe4\x56\x33\xff\xef\xf2\x48\x83\xed\x98\x19\x89\xc7\x5f\x78\x84\xd9\xe9\x2a\xe0\x21\x47\xfd\xdf\xe4\x11\x7e\x23\x78\x86\x17\x04\x8a\x67\x79\xc1\x67\x31\xe0\xd0\xf5\x90\xe3\x19\x96\xde\x97\x91\x89\x2c\xc5\xa7\x18\x1c\x8c\x39\x37\x23\x60\x8e\x11\x9c\x18\xca\xc0\xa9\xa1\x6c\x2b\x25\x0b\x79\xc6\x0c\x47\xe6\x67\xdd\x6b\x01\x43\x73\x6c\xe8\x03\x6f\x13\x7d\x05\x69\x81\xfe\x08\x2f\x1f\x0a\xeb\xee\xd1\x24\x9f\x2a\x1a\x72\x9b\x41\xef\x83\xa4\xbc\x41\xf0\xd1\x52\x0e\xf1\x73\x9b\x94\xa3\xce\x9b\xee\x71\x9b\x01\x55\x2c\xbf\x19\x76\x3f\x4a\xca\x01\x82\x8f\x96\x72\x88\x9f\x1b\x75\xf9\xa3\x47\x7e\x6a\x43\x15\x43\x0a\x9b\x81\xff\x83\xa4\xbc\x41\xf0\xd1\x52\x0e\xf1\x73\xa3\x94\x1f\x19\x97\xaf\xa4\x35\x4f\xed\x18\x8b\x9a\xd6\xdc\xee\x1a\xdb\x19\x2e\xf8\x46\xbc\xb0\x34\x26\x15\x81\x24\x21\x16\x68\x8e\xe3\x69\x4a\xa0\x14\x92\x57\x79\x0c\x19\x86\xe2\x65\x84\x04\xcc\x91\x2c\xcd\x2b\x0a\x42\x98\xd5\x68\x04\x19\x4d\x61\x28\x8e\xe7\x81\xa0\x02\x85\x7d\xf9\x46\xbc\xd0\x00\x00\x12\x63\x85\x84\x80\xe7\x69\x48\xca\x88\xa5\x69\x5a\x61\x14\x4d\x53\x79\x15\x40\x95\x14\x48\x5e\x81\x24\x92\x35\x0e\x29\x8a\xc0\xb2\x02\x0f\x20\xa9\xc8\x24\xa4\x35\xc0\x70\x2f\xbe\xe6\x80\xd0\x8a\x1d\xfb\x83\x62\x7f\x40\x3a\xbc\x90\xe7\xff\x0c\xf8\x3f\x18\x8e\x67\x39\xe6\xea\xdd\x4d\xf6\x8e\x84\x0c\xfb\x8d\x00\xeb\xff\xc8\x77\xd7\xfa\x86\xff\x77\xf3\x67\xf7\xeb\xee\xc3\x9a\x36\x51\x14\xc5\x24\x29\xd5\x53\xd3\x79\x32\x93\xab\xe9\xd3\x71\x5d\x5a\x28\x71\x61\x58\x2f\xd6\x46\xb9\xb9\xfe\x16\xc7\xee\xb2\x83\x7a\x92\xbe\x9c\xe7\xab\xe9\xee\x1b\xcd\xce\x1a\x0d\x9b\xb3\x1b\x6e\x63\x6c\xbe\x8e\x3a\xb3\x6e\xa2\x09\xb1\xb3\x1c\xac\x84\x2c\xce\xb1\x19\xa0\xaa\xf9\xb9\x69\x4f\xec\xd6\x1a\xb4\xd8\xad\xb6\x4b\x86\xb8\xbf\x96\x4d\xbb\xdd\x1b\xc3\x41\xaf\x4e\xe5\x5a\x69\x8a\x9f\x8c\xdf\xb8\x72\x3b\x35\x4c\x97\x56\x75\x27\x5f\xcb\xa5\x97\xae\x3c\xe5\x93\xf9\xe2\xca\x4e\x0d\x7a\x4e\x8c\x75\xed\x58\xb3\xdc\x8d\xad\xe2\x76\x6f\x45\x67\x38\x44\xea\xb2\x9e\x4b\xd4\x94\xd1\xd4\x9b\xf4\x24\x9d\x17\x2b\x7c\x53\x5f\x43\x76\xcb\x74\x11\xad\x26\xb0\x76\x80\xed\x55\x0c\x5d\x52\xf0\x6b\x17\xd0\x35\x51\x4c\x91\xf9\xf0\xfd\x5f\xfe\x7a\xd9\x8e\x47\xe5\x56\xb1\x78\xc6\xfe\xdf\x99\x04\xf9\x1c\x75\x7e\xc1\x24\x96\xa1\x80\x30\xaf\x28\x0c\xaf\x42\x55\x53\x59\x59\x43\x2c\x47\x2a\x14\x4f\x69\x8a\x0c\x39\xac\x70\x0c\x62\x54\x0e\xb1\x24\xc5\x00\x0a\xa8\x18\x43\x52\x83\x24\x85\x59\x08\xf8\x4b\x26\x41\x9d\x53\x7a\x16\xf0\x02\xc5\x5e\xbd\x4b\x43\x81\x16\x58\x0e\x0a\x2c\x79\xc9\x24\x98\x1b\x4d\x22\x96\x72\x0a\x88\x2d\x2d\x7a\xa4\x17\xef\xcc\xd8\xd7\xf9\x9c\xae\xf2\xae\xc5\x65\x3b\x26\x60\x7b\xa9\x56\x33\x8b\x69\x9d\xd7\xab\xe3\x5c\xaf\x33\xc2\xbc\x39\x92\x4b\xe9\x57\x37\x56\xc9\xb4\x9b\xaf\xa9\xa6\x49\x7b\xe9\x6e\x79\xa8\xc4\x27\x99\x9a\x3a\x1d\x55\x5e\x7b\x23\x00\x65\x83\xf4\xbb\x70\x6d\x12\x83\xf9\xbe\x4b\x79\x56\xb2\x94\x55\xa3\xae\x56\x68\x27\x99\xab\x8c\x1b\x3c\x5a\x66\x07\x33\xf7\x2d\x6b\x95\xe3\x85\xb4\x37\x92\xf5\x72\xc7\x8c\xcf\x4b\x79\xbc\x1a\xbb\x83\x1c\xdb\x7b\x35\x54\x60\x92\xf4\x88\xc9\xd4\x69\xa6\x9e\x6b\x16\xd5\x34\xdb\xb6\x0b\x93\x51\xce\x9e\xc7\x92\xd5\x54\x3b\x19\xf7\x4d\xc2\x3e\x61\x12\x5d\x25\xa4\x51\xff\x91\x26\x21\x3c\x47\x9b\x5f\x00\xa2\x04\x05\x20\xa8\x6a\x9c\xc6\x71\x58\x00\x9a\x82\x04\x8e\x67\x29\xc0\x2a\x98\x23\x01\xc3\xb3\x3c\x22\x11\x09\x64\xc8\xab\x0c\x4b\x6a\xb2\x02\x29\x9a\x07\xb2\x46\x21\x8d\xa6\xe9\x4b\x16\x01\xcf\xea\x3c\x05\xd8\x0b\xf6\xb2\xbd\xbb\x49\xf6\x32\x2c\x4b\x5f\xb2\x08\xfa\x46\x8b\x58\xd8\xcc\x1c\x15\x35\x8d\xd2\x26\x59\xfe\xad\x3b\x18\xa6\x5d\x66\x9e\xee\xa1\x42\x52\xcf\x2c\x87\xed\x5e\x75\x96\x2c\xe7\x32\xf1\xca\xac\x2e\xc9\xc5\xd7\x19\x25\x56\x6a\xaf\x5a\x79\x94\xd2\xd4\x65\x2c\xbf\xe8\x35\x78\x76\x60\x72\x30\x95\x98\xae\xc6\x10\x0d\xf9\x59\xd6\xb0\x52\xf2\xc8\xef\x41\xdf\x22\xf4\x7d\x8f\x0a\xe6\x24\x11\xb3\xc7\x6a\xcf\x2e\xae\x24\xb3\x1d\xe7\xcd\x8e\xe9\x99\x98\x8b\x4f\x32\x8a\x6b\xc5\xf9\x6e\x13\xa8\x7a\x0e\xc4\xb2\x6a\x65\xb9\x14\xa7\x31\x8a\xe2\x32\xf5\x7c\x7a\x69\x94\xdb\x2a\x69\x4c\x44\x33\xc7\x8d\xd5\xd1\x78\xa9\x48\x9d\xd7\x18\xef\xbc\xad\x5e\x87\x74\xd1\xb7\xb8\xd1\x09\x8b\x68\xd3\x21\x85\x4a\x89\xff\x81\x16\xc1\x3f\x47\x9b\x5f\x18\xac\x2a\x3c\x25\x03\x4c\x61\x4e\x20\x05\x95\x54\x15\x59\x96\x05\xcc\x29\x9c\xa0\x00\x52\xe5\x19\x40\x41\x0e\x30\x88\x44\x9c\x0c\x55\x08\x31\xe2\x49\x5e\x66\x11\x4d\x92\xbc\x2a\xc8\x97\x2c\x02\x9c\xd5\x79\x9a\xe6\xf9\xb3\x41\xd5\xee\x2e\x45\x53\x8c\xc0\x51\x3c\xc5\xf2\x97\x2c\x82\xba\xd1\x22\x00\xa7\xe8\x5c\x76\xc8\x30\x49\x35\xa5\x4c\x39\xcb\x5a\x30\xf3\x1a\x4c\x4b\x4b\xa5\x6d\x17\xf0\x92\x34\x58\x3b\x59\x44\x23\x31\x07\xe5\xb7\xa9\x39\x2e\x94\x38\x66\x9e\xcd\x52\xee\x6c\x52\x98\x0e\xa9\x42\x96\x1b\x26\x07\x09\xab\x0e\x81\x9d\x7d\xb5\x55\x3b\xde\xd5\x53\x78\xe5\xfa\x3d\xe8\x5b\xc4\x81\x92\xf2\x24\x00\x39\x5e\x99\x63\xa3\xdd\x2a\xd6\x47\x9c\x1e\xcb\x51\xb8\x53\x8a\x8f\x62\xad\x98\x3b\x2b\x16\x67\xf9\x22\xdf\x15\xa4\x72\x02\x38\x05\x54\xb7\xcc\xd2\x92\x97\x56\x75\x47\xab\xae\x8c\x11\xca\xb3\xa5\xa4\xd1\xee\xc6\x32\x79\x56\x62\x12\x1e\xa4\x3a\xb3\x45\x2f\x3b\x4a\xfb\x90\xf5\x13\x16\xd1\x6a\x85\x14\xea\x3f\xd2\x22\xb8\xe7\x68\xf3\x0b\x46\x0a\xa5\x0a\x1a\xcb\xb2\x88\xe1\x34\x99\x81\x24\xd6\x00\xe0\x30\x16\x78\x4a\x95\x65\x8a\x67\x65\x48\xaa\x2c\xcd\x92\x2c\x92\x55\x9e\x04\x34\xa0\x58\x8a\x82\xac\x20\x2b\x8a\xc2\x91\x97\x2c\x82\x3c\xab\xf3\x0c\x47\x5d\xf0\x20\xeb\xbb\xbe\x8f\x20\x49\x96\xe6\x38\x40\x72\xf0\x92\x45\xc0\x5b\xa3\x26\x27\x05\xb5\xd7\xf1\xa4\x1b\x03\xb9\x0a\x5f\xd7\xa6\xe3\x14\xe4\x2a\x19\x57\x07\xa3\x5e\xe6\x4d\xd0\x13\xb5\x66\x6f\x95\x9f\xcc\x4a\x8b\x79\x7d\x10\x9b\xa3\x59\x25\xe7\xa5\x40\x53\x8d\x2b\x58\xee\x65\xcc\xb2\x3c\xce\xa7\xbc\x71\x5c\x8d\x79\xad\x82\x6a\x57\x58\xb8\x48\xcd\xbd\x9c\xdf\x83\xbe\x45\x1c\xf4\xe8\xb4\xe6\x54\x6b\x0e\x7c\x33\xcb\xed\x49\x32\xf7\x36\xa8\x21\x5c\x2b\xb9\x29\x21\xdf\xe9\x94\xd1\x22\xd7\xa8\xe4\xe6\x25\x77\x31\x33\xcc\x5c\xbb\xc1\x55\x66\x65\xb6\x95\x2e\x8a\x1a\xaf\x25\xe5\xa9\x38\xa2\x7a\x88\x9d\xd7\x98\x37\xb6\xc4\x3a\x0b\x89\xac\x54\x4b\xe5\x81\x2e\x4e\xda\xbe\x11\x28\x27\x2c\xa2\x31\x0f\x29\x54\x52\xfc\x0f\xb4\x08\xf6\x39\xda\xfc\x22\x60\x9e\x51\x14\xc4\x90\x3c\x4d\xa9\x02\x8d\x68\x5e\x65\x01\x4d\x0a\xbc\xa0\x30\x82\x2c\x03\x92\x17\x64\x8e\xd5\x20\xa9\x6a\xa4\xca\x92\x34\xa2\x05\x1a\xb0\x98\xa3\x18\x5a\x61\x00\xc9\x5c\xb0\x08\x20\x9c\xd5\x79\x96\x65\x48\xee\xe2\xdd\x75\x48\x07\x19\x8e\x15\x78\x92\xe2\xb8\x8b\x53\x6b\x70\xa3\x45\x30\x6c\x7a\x55\x68\xe5\x6a\x82\x59\x68\x94\x7b\xad\x64\xcf\x4a\x8f\x39\x29\x37\xa6\xe4\x65\x4a\x4b\x75\x12\x85\x46\x2b\x3d\x55\x40\x33\x2d\xa5\x93\xf5\x74\x4c\xc5\xd3\x6e\x2a\x9f\x96\x13\xdc\x5b\x4f\x1d\x8c\x1a\x9d\x62\x2b\xe7\xf2\xb1\x99\x48\xb7\xec\x51\xb6\x88\x67\xed\xd6\x18\x64\xfd\x90\xdd\xb7\x08\xfd\x40\x2f\x19\x2f\x8d\x46\x71\x6d\xc0\x95\xa4\x8a\xe1\x0d\x86\xe6\x52\x95\x9c\x44\x8b\x8c\x97\x48\xc3\x44\x58\x9b\x82\x96\x4c\x26\xe7\x40\x91\x6b\x9d\x3c\x99\x45\x79\x6b\x2c\x0e\x26\x31\x31\x69\xb8\x46\xb1\x4d\x4e\x38\xca\x4c\x35\x5a\x32\x9f\x6d\x15\x5c\x6b\x51\xaf\x64\xc4\x4c\xb3\xec\x1b\x41\xef\x84\x45\xd4\x4b\x21\x85\x4a\x88\xff\x81\x16\xc1\x3c\x47\x9b\x5f\x68\xac\x50\x8a\x22\xc8\x88\x86\x2c\xa0\x54\x8a\x01\x9c\x02\x55\xc4\x73\x0c\x2f\x90\x08\xf3\x00\xd0\x24\x4f\xcb\x1c\x84\x0c\xa7\xf2\xb4\xa2\x09\xbc\xc2\xb3\x24\x52\x55\x55\x66\x14\x04\x2e\x59\x04\x7f\x56\xe7\xd7\xa1\xdd\xf9\x99\xf5\xf6\x6e\xb0\xbc\x4e\xb1\x34\x7f\x71\x66\x4d\xde\x9a\x6c\xe2\x52\xab\xfc\x74\x94\x1f\x54\x9b\xad\xee\xdc\x7b\xcb\x76\xf2\xc9\xa9\x5e\xaf\xe5\x1a\x54\xce\xd4\x7a\xcd\xea\xb8\x34\xd0\x1d\x15\x82\xe5\xc0\xc9\x3a\xb3\xd5\xa2\x57\xd5\x95\xa5\x93\x8c\x57\x54\x56\xad\x76\x84\xd2\xab\xc5\x32\x45\x9e\x6d\x68\x86\x3a\xe1\x86\xc9\x1a\x53\x6b\xe8\x81\x32\xfa\x16\x71\x30\x8f\x30\x85\x04\x1a\x67\x3c\x3e\xbd\xd2\xdb\x29\x72\xd6\x2a\xa5\xf8\x0c\x9f\xc5\x23\x65\x6e\x58\x2a\xa0\xaa\x8e\x1e\xaf\x64\xaa\xf9\x45\x2b\x39\x4a\x2e\x9b\xfa\xb2\x15\x2f\xe4\xe6\x24\xfb\x5a\x85\x9e\x05\xf4\x5a\xc7\x71\xf1\x6b\x51\x05\xf1\x4e\xa7\xa1\x09\x5e\xac\xd8\x31\xd9\x38\xef\x1b\x41\xeb\x84\x45\x54\xed\x53\x5a\xf5\x9f\x66\x11\xf4\x73\xb4\xf9\x05\x21\x56\x56\x34\x0c\x69\x1a\xd3\x9a\x40\x22\x20\x63\x46\xe6\x11\x09\x48\x4e\x86\x90\x52\x90\xcc\x33\x0a\x49\x31\x1c\x27\xa8\x88\xe3\x91\x02\x14\x16\x29\x82\xa2\xca\xbc\xc0\x92\xd4\x45\x8b\x38\xef\x05\x04\xc0\x9c\x37\x88\xcd\xcd\xa0\x70\x81\x15\x00\x7f\x69\x5e\x2d\xdc\x68\x0e\xec\xc4\x59\xc5\xf2\x12\x53\x1d\x15\x32\xb1\x0e\x6d\x27\x12\x5c\x6e\xb8\x74\x06\x8a\x08\x54\x06\x5a\x86\x9b\xcd\x38\xf9\x95\x6c\x74\xc4\x05\xc8\xb6\xc9\xde\x6c\xde\xc0\x5a\x5e\x52\x45\xa5\xf7\x96\x9a\xd0\x89\x1e\x55\x64\x0b\x4d\xa1\xa7\x3a\xd4\x14\x21\xce\x4d\xe6\x74\xbb\xb3\x4f\x34\xe9\x07\x1a\x5a\x07\xf1\x41\x7e\x18\xd7\x58\x03\x55\xf2\xb1\xba\x59\x54\xbb\x49\xb1\x30\xed\x68\xf5\x79\x67\x08\xca\x26\x89\x19\xc5\xab\xa9\xec\xa8\xfd\x9a\x04\x5a\xae\x8a\xca\x8d\x5c\x9a\xeb\x16\x7b\xe3\xb7\x84\x31\x6d\x75\xbd\x0e\x22\x2b\xd9\xd5\xa4\x06\x3a\x31\x5b\x49\xd2\xca\x72\x5c\x7c\xf3\x21\xd7\x4e\x98\x43\x45\x3a\xa5\x52\xff\x69\xe6\x40\x3d\x47\x95\x5f\x14\xac\xf2\xa4\x40\xd2\xb2\xa6\xb0\xa4\x80\x28\x8d\x92\x79\x46\x23\x39\x80\x38\x16\xb2\x32\xc2\x0a\xc7\x21\x0d\x61\x9a\x02\x2a\xe0\x34\x1e\x52\x02\xe2\x29\x4a\xe6\x38\x8e\xd7\x28\x6e\x1d\x15\xd1\xfe\xbf\x13\xaa\x7d\x56\xe3\x39\x92\x23\xc9\xb3\xab\x11\xbb\xbb\x9b\x72\x17\xc0\xf3\x97\xa6\xd5\xfc\x8d\x06\xc1\x73\xbd\x64\xad\x11\x5f\xe8\xe3\x21\xcf\x0d\xb4\xc4\x62\x02\xf3\x8e\xe3\xaa\x6c\x6c\x5a\x5b\x90\xdd\x58\xb2\x82\xf4\x95\x47\xe1\x6a\x99\x59\x38\xe9\x66\xa3\x52\xd2\xe8\x8e\xdc\x98\x4c\x85\x6e\x65\xa8\xe4\x75\xa3\x38\x74\x5a\x26\x44\x19\xa8\x89\xf1\xb9\xdd\x5c\xb8\x53\x47\x09\x14\xd3\x37\x88\x83\x0e\x95\x53\xf3\xb8\x5e\x6d\x4e\x79\xc9\x19\x77\x93\x4d\x87\x6d\x70\x45\x89\x2d\x77\xe1\xaa\x56\x29\xe7\x72\x18\x0e\x46\x95\x82\x54\xa0\x19\x37\x59\xae\x17\x8d\x6e\x82\x41\x59\xad\x20\x66\x3a\x0e\x95\x5d\xd8\x66\xad\xb6\xd0\x97\x8b\x6e\x52\x1d\x56\x97\x88\x7d\x6d\xaf\x50\xbb\x91\x6e\xfa\x11\x59\xe9\x84\x41\x1c\xa1\xde\x5d\x7f\x73\x83\xa0\xef\x35\x08\xf8\x1c\x65\x7e\x61\x29\x55\xe0\x35\x86\x62\x31\x66\x79\x15\xc8\x90\x93\x19\x99\x17\x34\x48\x21\x8d\xa1\x00\x90\x39\x86\x15\x10\xa4\x35\xa4\x01\x9a\xa4\x90\x4a\xca\x0c\x94\x59\x8a\x92\x49\x4e\xc6\xc2\x45\x83\x38\xaf\xf2\x10\x5c\x58\x9e\xdb\xdd\x0d\xea\x33\x68\x46\xb8\x34\xa9\xbe\x35\xef\x0a\xab\xaf\x43\x50\x9e\x32\x36\x29\xe7\xb9\x0e\x6d\x2d\x2b\xb3\xd6\x22\x43\xb5\x27\xf6\x28\x36\x4b\x8b\x15\x2f\x09\x0a\xb0\xc4\x25\x38\xf6\x75\xc0\xc3\x9a\xee\x4e\xc5\xc6\xb8\x41\x2e\xf4\xf4\x04\x68\x43\xa3\x09\xe7\x65\x7d\xd6\xee\xd4\x93\x66\xa3\xc3\x4c\x4b\x55\x8a\xa6\x1b\xa5\x20\x54\x59\xdb\x83\xe6\xeb\x6b\x6e\xf7\x47\xf4\x55\xd6\xdd\x7f\x9f\x8b\xd5\x5a\x90\xa6\x15\x07\x9c\x93\xcd\x52\x78\xf0\x36\x6b\xb9\x1d\xa9\xaa\x89\xe6\xac\xed\x4e\x44\x11\xc6\x5f\xeb\x64\x7e\x58\x15\xd3\x39\x35\x2b\xd7\xa0\xdb\x30\xa6\xf9\x85\xd5\xe2\xcc\x65\x6c\x85\x17\xaf\x53\xb7\xbb\x20\xcb\xc5\xee\xd2\x2e\x30\xb3\x76\x2d\x37\x4b\xad\x52\x56\x2c\x3d\xee\xa5\x2b\x38\xc8\xfb\xe6\x4e\xd8\x4b\xa6\x76\x4a\xe7\xfe\xd3\xec\x05\x3c\x47\xd7\xfd\x03\x54\xd6\xa8\xc9\x6f\xc4\x0b\x10\x38\xf2\x3b\x09\xbe\x93\x80\x20\xc9\x1f\xfe\xbf\xb3\x3a\x4d\xd1\x34\x7b\xde\x41\x6c\xef\xee\x57\xdf\x2e\x68\xfc\x69\x7d\x0f\x48\xfa\xd9\x5d\x73\xfe\x4a\x74\x0b\x06\xbd\x8c\x2f\x1b\x85\x04\x97\xb2\x52\x42\x16\x92\x8b\x61\x22\xe6\x92\xba\xe7\xce\x73\xf3\x15\xe8\xaa\x8d\x4e\x0f\x25\xf2\x28\xed\xab\xb2\x74\x42\x95\x4f\x5f\x5b\x55\x16\xc5\xc4\xe8\x13\x18\x79\xea\xf5\xb2\x55\xa6\x8d\x2a\x5f\xa9\xf8\xb8\xe1\xa0\xd2\xa8\x05\x20\x67\xce\x9f\x39\xbb\xd7\xe9\x8c\xdd\x5d\x01\x03\x77\x3a\xce\x91\x0c\x17\x19\x0c\x15\xde\x83\x11\x0d\x0c\xbd\x5d\xcb\xa0\x21\xcd\x32\xdf\x08\x10\x0d\x0c\xb3\x4b\x00\x33\x80\x15\x22\x83\x61\x77\x59\x33\x8e\xf7\xab\x48\xa3\x81\xe1\x42\x95\xfc\x54\x34\x30\x7c\x78\xaf\x43\x34\x30\x42\xa8\x42\x9d\x8e\x06\x06\x90\xe1\x4a\xf7\x88\x70\xde\x95\x95\x47\x84\x13\x2e\xdd\x8e\x4a\x0f\x15\x2a\x8f\x8e\x0a\x87\x0e\x97\x20\x47\x84\x13\xaa\xc2\x65\x22\x82\x61\x43\xc5\xbc\x11\xc1\x70\xc7\xe5\xa3\x51\xa9\xe1\x43\x55\xb5\x11\xc1\x08\xc7\x65\x96\x11\x55\x19\x92\xc7\x60\x22\x32\x05\xc1\x71\x39\x62\x54\x30\x30\x54\xd5\xf8\x9c\x13\xa3\x9f\xb2\xdf\xfb\xf2\x71\x66\xdf\x08\x78\xf3\x06\xf0\x33\x07\x27\x3f\xec\x2b\x0f\x5c\xc9\xa1\x73\xdc\x7f\x81\xc1\xd6\x50\xbf\x4c\xd4\x3f\x48\xc7\xaf\x4a\x3d\xaa\x49\x3d\xb3\x63\x37\x38\x98\xd6\xf9\xed\x07\xf1\xef\xdf\xb6\x7b\x01\xad\xf5\xff\xff\xf7\x78\x8f\x20\xf9\x8d\xf8\x4d\x9e\x2e\x0d\x4b\x3f\xb3\x43\xf3\xf0\xde\xc5\x6d\x7a\xd8\x34\xdf\x43\xd9\x6e\x15\x3d\xba\x79\x71\xcb\xe0\x21\xbe\xe7\xec\xf7\x3b\x46\xfe\x94\xcd\x2b\x1f\x70\x2a\xc9\x29\xa5\x38\x0c\x75\xf6\x5f\xd8\x3b\x94\x82\x79\x8e\x52\x84\x6a\x9e\x9f\xd7\xdd\x7f\xdb\xbe\x39\x8a\x1f\xf7\x5f\xc8\xcf\xef\x9b\xff\x1a\xec\xaf\xa3\x14\x87\xb3\x81\xfd\x17\xfa\xb4\x52\x40\xe6\x84\x52\xf0\x17\x95\x82\xde\x28\x05\x73\xab\x52\x6c\x37\x5b\x3f\xa6\x14\xdb\x5d\xdf\x8f\x2b\x45\xf4\x0d\xfb\xe7\x95\x22\xf2\x16\x89\x0f\x38\xc0\xea\x94\x52\x1c\xce\xed\xf6\x5f\xf8\xd3\x4a\x01\x82\xeb\x58\x29\x84\xcb\x23\xc5\x41\x72\x27\x18\x32\x76\xd7\x7f\xd5\xe4\x6f\xa3\x26\x47\x73\xf7\xfd\x97\x7b\x22\xc0\xd0\x76\xa5\x87\x3d\xca\x7f\xb5\xe2\xe7\x6b\xc5\xd1\xa1\x0a\xbb\x2f\xec\x6e\x59\xfd\xdf\xbf\x79\xf6\xa3\xa7\xc5\x68\x8e\x3d\x7e\xd4\x67\xff\xc2\xe7\x3c\x7c\xc0\x59\x69\x27\x7a\xea\xf8\x8c\x88\xdd\x17\xf2\x7d\x4f\x3d\x70\xb8\xcb\xbe\xa7\xa2\xdb\xc2\x2f\x7c\xb6\xc3\x07\x9c\xa9\x77\xaa\xa7\x8e\x12\x78\xbb\x2f\x41\x94\xc6\xde\xb6\xef\xde\x73\xa6\xae\x87\xf1\xa3\x7d\xe1\x83\xb1\x1f\x3e\xee\xe9\xd7\xe8\xb9\x8f\x1f\x0d\x8f\x4f\xbb\xd8\x7d\x21\x7f\x72\xcf\x3d\x60\xd0\xbf\x46\xcf\x7d\xfc\xcc\xe8\xf8\x0c\x8f\xdd\x17\x36\x72\xcf\x45\xf7\x54\x1f\xd2\x73\x3f\xcd\xaf\x7d\x56\xcf\x6d\x96\x05\x76\x5f\xe0\x4f\xee\xb9\xa7\x8d\x96\x3f\xab\xe7\x3e\x7e\xb4\x3c\x5c\x41\xd9\x7d\xe6\x0f\x4e\x52\xd0\xa6\x96\xba\xe1\x25\xe2\x99\xc1\xbe\x5c\x82\x93\x7b\x1f\xb5\xa7\xeb\xc7\x3a\x3c\x78\xb6\xf1\x3d\x52\xdb\xac\xf4\xec\x3e\xd3\x1f\x2a\xb5\x07\x74\xf9\xd7\x92\x5a\xb0\x22\xb5\xfb\x4c\x7e\xac\xae\x3d\x30\x1d\xfc\x95\xa4\xb6\x59\x39\xdb\x7d\x66\x3f\x56\x6a\x0f\xa4\x65\x3f\x5a\x6a\x57\x56\xe1\x4e\xbc\x6b\x33\xea\x0a\xdc\xe6\x7d\x9b\x27\x57\xdf\xc8\xb3\x67\x85\x04\x47\xf1\xf8\xa7\x73\xed\x4b\xa7\xfc\xdf\x0e\x7e\xd0\x90\xe9\xe2\xed\xa4\x8f\x66\x01\x60\x79\x96\x64\x19\x76\xed\x16\x21\x64\x2e\x94\x42\x84\x88\x3a\x5a\x61\x38\x4d\x14\x3c\x24\x8a\x09\x13\xc5\x5c\x21\x8a\xe1\x48\x1e\xae\xe1\x6f\x6b\x57\xae\xcb\xff\xfa\x0b\x1a\x1f\xe8\x91\xd3\x2f\x76\x3a\x59\x41\x04\xcf\xd7\x04\x5c\x05\x04\x43\x6b\x69\x91\x01\x51\xa1\x85\x9f\xc8\x80\xe8\xf0\x62\x41\x54\x40\x4c\x38\xc1\x1c\x15\x10\x1b\x4e\x41\x46\x05\xf4\x2e\x6b\x15\x15\x10\x1f\x02\x74\xae\x2c\xe9\x2a\x20\x21\x94\x9d\x39\x57\x86\x71\x5d\x21\xc9\x10\xa4\xc8\xfd\x7f\x5c\x55\xf4\x88\x02\x1c\xd7\x15\x3d\x44\x13\x15\x9a\xa7\x45\x87\x44\x87\xe7\x0d\x91\x21\x31\xc7\x81\xec\xb9\x9a\x95\xeb\x80\xd8\x63\x40\xd1\x79\xe3\x8e\x83\xc4\xe8\x14\xf1\xa1\x68\x33\x32\x20\xe1\x38\x00\x8b\x4c\xd1\x51\x9d\xd1\x23\x76\x72\x54\x69\xc4\x3e\x42\x11\x3c\x06\x74\xbe\xd6\xe8\xde\x97\xcc\x3e\xa3\xda\xe8\xda\x3b\x05\xef\xa9\x37\x3a\xfb\x4a\xd9\x27\x78\xd7\x83\xb7\x0f\x21\x1a\xab\x88\xa1\x29\x84\x35\x9e\xe2\xa0\x4c\x53\x88\xc5\x08\x09\x0a\x86\xaa\xc0\x0b\x1c\xe0\x21\x2d\x23\x05\x28\xbc\x06\x31\xa9\x02\x15\x72\x94\x26\x53\x32\xc3\x40\x08\x81\x7f\x0e\x08\xd8\x24\xb7\x23\x27\x22\x0e\xb6\x69\x70\xdb\xc2\xf4\xb3\xe7\xae\x09\x24\x7d\xf6\xc0\x9d\xdd\xdd\xa3\x28\x21\xa8\x68\x2f\xb0\x43\x6c\x50\xc3\xb1\x9d\xe3\x9b\x19\x33\x15\xc7\xba\x42\x71\xd5\xae\x97\x2d\x14\x56\x9d\x36\x3f\x6f\x1b\xaf\x09\x94\x9c\x32\x45\xc6\xdf\xc1\x1a\x9c\x57\xe6\xef\xbb\x48\x87\x0a\xae\x13\xfb\x8f\x7e\xd3\x44\xbb\x5d\xde\xec\xb0\x4b\x82\x69\x42\xcd\xda\xcd\xa9\x5e\x9a\xd5\xbc\x14\x97\x18\xe4\x8a\x54\x19\x0b\x6a\xbb\xaa\x65\x72\xb1\xbc\xc1\xe4\x67\xad\x4a\xec\x55\xf4\x38\x7f\xb3\x47\x3a\xdd\x6e\x07\x7b\x3b\xc4\x42\x8a\xcf\x54\x17\x5d\x8d\x4a\x96\x86\xed\xc2\x8c\x7a\x1b\xac\x5c\x16\x4d\x61\x16\x95\xb2\x59\xd2\x65\x12\x14\xac\xb7\x5b\x35\xc3\x1b\x6c\x76\x5b\xcc\x9c\xb9\x7e\x40\xcf\xc9\x22\xf7\xcc\x8e\x9f\x9a\xf4\xda\x4a\x08\x6f\x06\x1e\xad\x4a\xee\x24\xfe\x5a\xa4\xbc\x64\x26\x21\x68\x8b\x92\xf5\x3a\x43\x89\xd4\x64\xb0\xac\x61\x4e\xb5\xdc\x64\x2e\x5b\x30\xcb\xed\xf8\x22\x47\xb3\x9c\x3e\xab\x74\x1b\x96\x9c\x26\x6d\x7a\x9c\x54\xd4\x8a\xe6\x09\x09\x6b\xa1\xe6\xd8\x57\xf3\xd5\x1c\xe8\xf3\xde\x5f\x2f\x87\x3b\x06\x0e\xf7\x89\xec\x3f\xa6\xf6\x3f\x06\x62\xaa\xc0\x64\x5c\xac\xd0\x4c\x2f\x91\xa2\xbc\x6c\x3b\x5d\x01\x75\x4a\x24\x4b\x78\x54\xe5\xf3\x75\xd6\x2a\x03\x51\xc0\x1d\x43\x5d\xe6\xbc\x56\x08\xde\x73\xe4\x15\xbd\xbf\xc4\x22\xcb\x6f\xf0\x07\xb0\xf6\xfc\xd7\x76\xfa\xe2\xf3\x9b\x3c\x38\x0e\xc0\x79\x2b\xb3\x45\x5c\x41\xfa\x70\x51\x42\xad\xaa\xc0\x26\x56\x9a\x2b\x60\x52\xb1\x9d\xf2\x6b\x77\x95\xe8\xe4\x47\x69\xbb\xc0\x8d\x66\xa3\xe0\xa1\x0a\xe3\xe4\x52\x7b\xfd\x0b\x68\x0d\x1f\x7b\x21\x86\x36\x75\x06\xf2\x56\x57\x9d\xf0\x89\x31\xef\x9e\x29\xee\xbf\x27\xa7\x36\x65\x7b\x34\xf3\x96\xac\x4a\x8b\x49\x2d\x4e\xd9\xd9\x72\x6c\x05\xb8\xfa\xd2\x70\x81\xa9\x95\xd2\xbd\x71\xad\xa3\x3b\xd3\x46\xac\x19\x3c\xc0\x8d\xdd\xcd\x0e\x6f\x9f\xff\x56\xa8\x7f\x8f\x68\xd9\x5e\x81\x7e\x26\xa8\xf2\xeb\xa5\x8d\x18\xfe\x3d\x7b\x07\x2f\x59\x13\xa3\xea\xcb\x23\xfd\xeb\xcb\x4f\x8b\x6f\x2f\x5e\x3c\xb6\xaf\x64\x5b\x9c\x0d\xe3\x37\xc9\x37\xe0\x95\xeb\x15\x79\x91\x1b\x9a\xba\x54\xc5\xa4\xda\x6a\x71\xed\xac\x92\xaa\x2d\xd8\x5a\x7c\x6e\x66\xdf\x14\xaa\x95\x02\x0c\xca\x53\x39\x03\x04\xfa\xdd\x6e\x91\x1b\x21\x15\x3b\x74\x9a\xc4\x83\x0a\x2b\x2e\x85\x24\x59\x75\x33\x92\x3e\x53\x00\x07\x40\x4b\xe0\x7b\x43\x7a\x5c\x1c\x8d\x85\x1a\xc7\x8c\x92\xd4\x2c\x60\x75\xcc\xe4\xe7\x89\x1d\xe5\xf1\xf9\x8e\x9e\x80\xfe\xdc\xa8\x5b\x9e\xf1\xe7\x49\x0f\x0e\xe5\x12\xb7\x07\xaa\x88\x29\x4f\x9f\xcd\x53\xd3\x4a\x47\xac\x09\x5c\x1d\xd4\x9b\x5e\x4b\x9d\x97\x53\xd9\x49\x2a\x9e\x6c\xe1\xc9\x4a\xad\x55\xbb\xa6\x6d\x29\x46\xb1\x1d\xe2\x3f\x51\x6f\xb7\x1b\x1b\xf9\xeb\xf1\xc4\x90\x6f\x53\xc2\x7c\x98\x03\x0d\x47\x60\x6d\x85\xab\x8c\x1d\x6f\x00\x87\x89\x85\x50\xac\xd4\x54\x61\xd4\x6e\x4b\x39\xa7\xd7\x78\x94\xff\xbd\x7e\x5d\x18\x0f\x0f\xfa\x47\x8f\xd2\x3f\x07\xf0\x5b\xed\x76\x6b\xb3\x8d\xd4\xae\xce\x7b\xf1\xb4\x1a\x57\x72\xcb\x72\xeb\x2d\x8e\xdf\xb2\x95\xd5\xe4\x8d\xeb\xa9\xf6\x5c\xd1\x1a\xab\x51\x56\x7b\x4d\xb7\xeb\xc9\x02\x94\x7c\xf9\x3e\xa2\x9f\x75\x1a\x6d\x4e\xfb\x38\xb0\x8f\xd0\xf5\xb0\xfd\x44\xef\x3f\xa9\x54\xc9\x91\x17\xec\xe7\xe0\xca\x95\x06\xed\x77\xdb\x70\x1f\xb6\x9f\xe8\xfe\xa1\x96\x28\x2d\x2f\xd9\xcf\xc1\x75\x72\x90\xdd\xdb\x4f\xd0\xfe\xce\x78\xe3\x01\x7d\x12\xb3\x0a\x30\xc5\xec\x9e\xf4\x93\xf2\xde\x6f\x26\xfd\x74\xfa\x0a\xf2\xc8\xba\x4a\x9f\x2f\x3f\x3b\x3a\x7d\xed\x76\xb3\xbe\x01\xe5\xc9\x7a\xb7\xce\x4a\x9c\x9d\x2a\x92\xc5\x5a\x6c\xde\x6b\x24\x85\x55\x77\xd6\x6d\x37\xa9\x85\x51\x35\x7a\xd3\x86\x0c\x52\xb3\x71\xad\x88\x03\xfd\x4c\xa5\x8c\xf2\x69\xfa\xde\xd9\xd7\xa9\xae\xf7\xe9\x4d\xee\xf5\xe5\x5e\x7f\xff\xc0\x78\x20\x89\xcd\x92\x7b\x9b\xbd\xbd\xf3\xbf\x7f\xed\x63\x17\xbf\x5f\x7d\x31\x16\xf6\xf7\xa3\xc4\x06\x9b\xc3\x54\xf5\x1d\x01\x4f\x8c\x0d\xdc\xfd\xf7\x7b\x75\x23\x35\x45\xcb\x40\xc1\x92\x7b\xa4\xe1\x53\x93\xc2\x76\x1e\x74\x89\x6f\x5b\xa7\x2f\x5f\x7e\xff\xae\x9b\xb5\x2c\x7c\xcb\xb3\xcd\xd2\x72\x69\x09\xa3\x19\x26\x73\xbd\x2c\x88\x4b\x4b\x75\x2c\xd8\x52\x65\x9c\xcd\x27\x38\x0f\xe2\x79\x4e\x57\xde\x5a\xa0\x1b\x97\x86\x43\x67\x9a\xe4\x19\xb5\xa0\xba\xdd\xc6\xd0\xe8\xe5\x17\x24\x13\xa3\xc8\x8c\x96\x26\x87\x93\x71\x7b\xdc\xc9\xa4\x12\xfa\x5f\x7f\xf9\x99\x74\xcb\xb6\xf0\x6e\xcb\x70\xf0\x77\x3d\x7b\xf4\x27\x49\xd7\xa7\xd0\x87\x6f\x7b\x96\x01\x64\x15\x08\x69\x15\x03\x8a\xe7\x04\xc8\x21\x8e\x52\x21\x0b\x78\x4c\x43\x8a\x06\x30\x38\x4d\x92\x83\xb4\x4a\xa9\x34\xa4\x78\x5e\x21\x31\xaf\x70\x58\xe0\x90\xba\x39\x5b\x82\x7c\xde\x34\x8f\xbd\x32\xcd\x63\x81\x00\xa9\xf3\x67\xc3\x6c\xef\x1e\xe5\x70\x1f\x9d\xe6\x85\x6d\xfd\x89\xd3\x3c\x31\xa4\x4a\xa7\xdd\x8a\x7f\xa1\xed\xb0\x90\x10\x01\xa9\x01\x53\x5d\x14\x96\xcc\xcc\x9b\xd5\x5e\x99\x8c\x9d\x74\x15\x56\x58\xe4\xc8\x59\x42\x99\x57\x24\x94\x34\x85\xb4\x67\xc5\xe0\xa4\x9d\x2e\xca\xb5\xee\x2a\xd9\xca\xad\x9a\x59\x34\x55\x26\xf1\x18\xa4\x14\xca\x4c\x23\x47\x58\x14\x79\x0f\x65\xbd\x4a\x22\xf6\xea\xcc\x41\x4a\xff\xeb\xce\x29\xdb\xc1\x75\xaf\xd9\xed\x81\x7e\xb8\xec\xce\x4e\xc3\x0e\x42\x8c\x28\xd3\xb0\xe0\x88\xe6\x3d\x3c\xf1\x74\xc8\x72\xea\x4a\x3c\x19\xbf\x14\x05\x7f\xc2\x97\xc7\x87\x0c\xed\xc9\x77\x18\xcf\x0e\xe1\xd2\x47\xe0\x7f\x8e\x6b\xf1\x2f\x7b\xcf\xcf\x2f\xac\xe3\xfe\xf5\x68\x98\xf9\x21\x61\x52\xb8\x0f\xfe\x76\x61\xdc\xa9\x50\xe8\xe0\x50\x93\x28\xfa\x3a\x6c\x85\xe0\xfd\x44\x7b\xb9\x07\x7f\xe0\x1f\xfe\xfd\x51\xce\xe7\xb9\x61\x0d\x29\x6b\x90\x24\x01\x0d\x10\xc7\x69\x58\x46\x48\x10\x20\xad\xd1\x90\xc2\x2a\xc3\x73\xb4\x20\xc8\x90\x53\xb0\x40\xd2\x8a\x00\x05\x96\x43\x24\x8d\x00\xd4\x20\x2f\x53\x88\x91\x31\xc3\xbf\x7c\x23\x84\xe7\x45\x35\xcc\xb5\xa8\x86\x02\x02\x79\xfe\xe4\xec\xed\xdd\xa3\x05\xe5\x47\xa3\x9a\xf0\x28\xf9\x6b\x24\xaf\x6f\x4a\xd6\x1c\x24\xaf\x8b\x03\x75\xc6\xf6\xea\x2b\xdd\xcb\x4f\xb8\x1c\x2c\x94\x97\xad\x4a\x59\x6a\xda\xec\x98\x55\xe2\x75\xd5\xe9\xa6\x3d\x4b\x6a\xc8\x35\x2a\x5e\x29\x95\xbb\x78\x34\x8a\x53\xd8\x26\x7b\x0a\x45\x32\x6e\x81\x89\x2d\x07\xcd\x62\x69\x99\x34\x6a\x39\xcb\x4a\x95\xbc\xee\xa4\xdc\xce\x0b\xfa\xdf\x28\x79\x7d\x20\xaf\x47\x93\x9b\xfe\x75\x2d\x79\x7d\x20\x8a\x28\x51\x0b\xd8\xeb\x5f\xf2\x00\x9f\x18\x96\xe5\x89\x2b\xf1\x64\xfc\x0f\x44\x6d\x25\xf1\xf8\x24\xae\x4f\x4c\xe6\x06\xa4\x9c\x4f\x46\x15\x8b\xb5\xae\x76\x21\x99\xeb\xa3\x3d\x88\x12\xee\x4d\xe6\x46\xf7\xc2\x17\x92\x51\x81\xcc\xcd\x5a\x91\x8e\xbf\x5b\xcc\xd8\x5d\x7e\x7f\x25\xf4\xbd\xe8\x7f\x8a\xbd\x3d\xc0\x7f\x85\x71\x36\x9e\xfb\x42\x14\xb7\xef\x9f\xff\xc3\xc9\xf6\x87\xed\x27\x7a\xff\x35\xec\x34\xaf\xdf\x96\xcc\xb5\x2b\x2c\x77\xa1\x7f\xa2\xd9\xcf\x03\x8b\x03\xb7\x47\xb1\xc9\x54\xae\xdd\x0b\x53\x1e\x8c\x77\x0f\x24\x23\xa3\xeb\x53\x70\x9d\x4c\x46\xee\xaf\x83\xf1\xfd\xd3\xe9\x3b\xbf\xb8\x17\x92\x5f\xf0\xe3\xa7\x27\x73\xdf\x12\x5a\xee\xc3\xe5\xf7\x00\x7d\xe7\x17\x77\x82\xeb\xd4\x2c\xea\x20\x7e\x8a\x32\x8b\x19\xd1\x7b\x78\x07\xf1\xc4\xe1\x75\x79\x16\xf5\xc4\x59\xdc\x3d\xf8\x37\xb3\xa8\x69\x1a\xc6\x27\x83\x6c\x25\x49\x8e\x2d\x77\xd8\xb3\xa9\x7c\x8d\x26\xeb\x95\xe1\x9b\x3c\x59\x09\x69\xe8\x29\x1d\xa8\xd4\xf3\x5e\x4a\xe3\xe9\x39\x50\xd9\x46\x33\xae\xb2\xc3\xfa\x60\xa5\x35\xc7\x73\xc7\xe2\x0a\xe9\x92\xbb\xca\x15\xf2\xa2\x81\x95\xd2\x12\xe0\x11\x68\x59\xf0\xf9\xc9\x61\x1a\x91\x48\x01\x2c\x16\x68\x9e\x03\x24\x10\x04\x96\x11\x64\x12\xf3\x80\x02\x32\x26\x59\x55\x63\x04\x9a\xc6\x0c\xc7\x93\xac\x42\xaa\x32\x07\x21\xcf\x08\x98\xc6\x3c\x42\x2a\xc0\xfe\xcb\x86\xf8\xcd\x2c\x2a\xea\x8e\x96\x3b\x4a\x80\x58\x9a\x01\xe7\x5f\xb9\xb5\xbe\x09\x5e\x42\xc5\xb4\x81\x52\xde\x39\x88\xdf\x53\x01\xf4\x53\x9c\x70\x32\x36\xdb\x68\x63\x5a\x3c\x1b\x69\x48\x3b\x7e\x6a\x99\xe4\xac\x58\xaf\xcc\xb3\x5e\x26\xc3\x8e\x61\x35\x4f\xe6\x72\x2b\x2a\x5d\xcf\x66\x5a\x0b\xa1\xb3\xd4\xdf\xca\xdd\x6c\xb9\x56\x2d\x93\xbd\xc9\x28\x6e\x37\xcb\xa6\x97\x17\xa7\x55\x8b\x81\xe9\xd7\x58\x85\xd3\x72\xe3\x99\x92\xd5\xb4\x52\xb1\x5d\x4a\xa6\x53\xe5\x54\x53\x4f\x5b\x4e\xae\x56\x8a\x9e\x4e\x8e\x14\xf4\xfc\xca\xf2\xfe\xeb\xfc\x84\xea\xa0\xd5\xbd\x01\xed\xa9\x6a\xa0\xf7\xb8\xaf\x4c\x68\x9e\x87\xff\x0c\xef\x57\xd2\xd0\xfb\x80\x3f\x88\xe8\xa2\x57\x5f\x04\xa4\xfc\x9c\xea\x8b\x7d\x09\x99\x4f\xcf\xc9\x91\x3f\xb5\xe7\xf7\xd3\xab\x97\xfc\xeb\xfc\x6a\xf0\x3a\x6a\xaf\x5e\xab\x5e\xfa\x7b\x4e\x78\xe7\xe2\xf1\x2c\xff\xde\xb1\x25\xbc\x42\x7c\xba\x7f\x4f\x0f\xb1\xbb\xa6\xcf\xc6\x7f\xba\xd2\xe0\x3c\xff\x8a\xf8\x33\x26\x2c\x05\xbd\xbb\xbc\x6d\xc2\x92\x58\x54\xb9\xd3\xab\xee\xc1\xf8\xf4\xe9\xd5\x4a\xe7\x03\xee\x70\xd7\x17\x52\xd3\xe9\x51\xd2\xe2\x64\xf5\x44\xf6\xa0\xc1\xbd\x63\xdb\xa9\x25\xae\xf7\x83\xea\xe5\x60\x37\xf7\x18\xfe\xc3\xca\xce\x7b\xf0\x6f\x82\xdd\x5e\x81\xf7\x24\x4e\xc4\x64\x4f\x7e\x93\x7b\xbc\x55\xd3\x87\x55\xa5\x2d\x29\xaf\xcd\x2c\x90\x0b\x49\x1b\x28\x0a\x10\x79\xaa\x6e\x8c\x9b\xb1\x41\x09\x76\xc8\x51\x92\x8e\x69\x56\xaf\x6d\xd1\x9c\xc7\x1b\x48\x98\xab\x02\x3f\xf7\x5a\xf3\x5c\xab\x44\x96\x2b\x62\x07\xbb\x03\x71\xfe\xec\x60\x17\xb0\x34\x62\x48\x96\xc6\x32\x62\x69\x0d\x2a\xaa\x8c\x54\x99\x67\x58\x59\xa3\x68\x9a\xa7\x79\x46\x53\x58\xc8\x42\x9a\x43\x2a\xa2\xb0\x4a\x09\x8a\xaa\x6a\xa4\xc6\x0a\x24\x04\x14\x25\xfb\xaf\x61\xf2\xff\x45\xdf\xe6\x18\xec\xd6\xbb\x14\xe3\x72\x10\x9e\x7f\x41\x9a\x7f\x13\xbc\x1c\x6f\x16\x09\x54\x31\x53\xe4\xb3\xb5\x59\x6d\x24\x17\x60\x56\xa4\x3a\xed\x61\xdd\x29\x8c\x87\x5d\x92\xd4\x32\xbc\x5b\xcc\x71\x63\x52\xaa\xcf\xf3\x9d\xb8\xd8\xa5\xc4\xe3\x97\x72\x87\xe7\x35\xef\x86\x9a\x08\x61\x43\xe1\x10\x5e\x7b\x36\x4f\x0b\x73\x5f\xa9\x1a\xd2\xab\xf1\x2a\xe3\xf4\x3c\xe9\x3a\x85\x84\x55\xc8\x4d\xdd\x38\xc9\xb4\xbd\x7c\x2a\xe1\xe8\xb6\x3b\x1d\x14\x6b\xf1\x16\xdb\x6d\x0d\x69\x6f\xde\x59\x0e\x5c\xae\xe5\x35\xe8\x64\x09\x2f\x2a\x25\x36\xff\xa6\x68\x6f\xf9\x02\x20\x3b\x66\x62\x34\x9a\x5b\xb4\xce\x57\x73\xda\x30\x97\xb9\x21\x0c\x3d\xd2\xd9\xe3\x50\xed\x80\xe7\xe0\xad\x21\x21\x99\x24\x8c\x78\x82\x2c\x92\xf9\xcc\xd2\x1b\xcc\xcb\xc0\xec\x91\x68\x39\xb1\x81\x50\xce\x2e\x66\xc5\xe4\xb2\xc2\x78\x09\x49\x49\x06\x3c\x52\xba\xe7\x94\x9d\x65\xb3\x3e\xbf\x46\xc4\x15\x73\x7e\x00\x7f\x69\x5e\x1c\x4f\x1e\xc0\x2f\x86\xf0\x47\x19\x4e\x36\x2f\xe1\x3a\xf9\xae\x95\x4b\xf8\x4f\x0e\xad\x0f\xc8\xa2\x62\xf5\xe2\xb1\x83\x77\x6d\x9f\x09\x55\x3f\xac\x2f\xd6\xf8\xf9\x83\x37\x1b\xe7\xee\x96\xc5\xbf\xa5\x41\xa6\x37\xee\x50\x03\x45\x74\x0a\x4b\xfd\x75\x69\x14\x9d\xaa\x50\x69\xcb\x8d\xda\x1c\xd1\x85\x62\xd1\x6e\x90\x55\x50\x31\x41\x2e\x56\x54\xd2\xae\x2d\x57\x40\xb1\x35\x15\x87\x59\xb7\x39\xac\x18\xc8\xca\xb2\x46\xc3\x53\xd3\x93\xda\x6b\xbe\x94\x8f\xe5\xaa\xa9\x65\x96\x5e\x3e\x3f\x8f\x00\x55\x52\x85\x2c\xad\x0a\x18\x62\x8a\x62\x69\x05\x0a\x1a\xd2\x58\xc4\x62\x85\x07\x0c\xe2\x11\x8f\x59\x44\xb3\x18\x52\xa4\xc0\xaa\x08\xd0\x00\x68\x50\x58\x7f\x53\x39\x9e\x03\xf0\xe5\x1b\xc1\x3d\x2f\x8f\x70\xb5\xc6\x8c\xe1\x18\x78\xf6\x0d\x32\xfe\x5d\xf6\x25\xb4\x99\xf6\xd1\x44\xc2\xd5\x1a\xb3\x9f\x32\xb1\x4d\x75\x46\x6c\x2d\x91\xac\x0c\xbb\xd9\xd0\xa8\x7d\x68\x05\xfb\x44\x42\xd6\xd6\x30\x25\xeb\xea\x30\xa1\xb2\x2c\x2d\x3a\x6f\x4e\xa1\x38\x84\x71\x03\xd1\x72\x11\x31\x3d\x33\x13\x2f\x15\xb9\x69\xba\x5d\x2f\x74\x9a\xf2\x84\x34\x27\x72\x21\x89\x48\x39\x5d\x67\x44\xc9\x4a\x66\x53\xf1\xf4\x32\xaf\x17\x06\x54\xd3\x28\x57\x26\x05\x2a\x9b\xae\x8f\x3a\x35\xfe\x93\x13\x09\xb9\x5f\x58\xde\xe7\x13\x09\x07\x13\xe9\x48\x13\xf9\x77\xf5\x6c\xd7\xb6\x15\xed\xaf\xf0\x44\xfe\x51\xfc\xb7\x6d\x6b\x3a\x8f\x3f\x08\xb6\xa3\x27\x12\x82\x11\xfd\xe7\x24\x12\xc0\xa4\x32\x12\x6b\x43\x1b\x2c\x56\x53\xb4\x3c\xed\x21\x0f\x56\x42\x7f\xe1\x89\x51\xea\x14\xfd\xd2\xbe\x7f\x7e\xe1\x95\x3f\xa5\x19\x5b\xbd\x93\xfa\x7e\x22\xbd\xe1\x2f\xc2\x44\x3e\xbb\xd7\xaf\xdb\x4a\xcd\x0f\xae\xda\x47\xe0\xbf\x23\x91\xe1\xf3\xdf\x13\x7f\x46\xe5\x80\x7f\x5d\x48\x24\x9c\xf7\x4d\x7b\x9e\xfe\x7e\x89\xb7\x93\xd1\x6e\xe6\xa0\x41\x84\xc8\xfb\x5d\xed\xe1\xb5\x5a\xd9\x83\xeb\xc0\x76\x23\xe3\x7f\x57\x7b\x78\x23\xfe\x4d\xb4\x8b\x07\x02\xa7\x4e\x13\xb0\x94\xa6\x1c\x47\x4f\x4e\xdf\x5c\x7b\x5a\x95\x63\x79\x67\xe0\x7a\x8e\x69\xb4\x64\x7e\x3e\x9b\xd2\xed\xb6\x34\x79\x2d\x4f\xad\x46\xc7\x74\xed\xbc\x53\x77\xdb\xd9\x91\xd8\x50\x72\x4a\x95\xef\xe6\xc6\xe2\x5b\x56\xad\xe4\x48\x76\xe4\x28\x4a\x3b\x53\x7f\x4d\x3d\x3d\x91\x40\x31\x2c\xc6\x0a\xd0\x48\x9a\x82\xb2\x2c\xcb\x88\x14\x54\x55\x51\x80\x40\x71\x18\xf2\x90\xa1\x10\xad\x2a\x3c\x16\x78\x4d\xe3\x38\x95\xc1\x82\x8a\x31\xa0\x49\x19\x33\xa4\x40\x21\xff\xf5\xeb\xec\xf3\xa2\xdd\xab\xb5\x87\x2c\xcb\x5d\x7a\x21\x3b\x27\x80\x97\xd0\x81\x2f\x8f\x06\xbb\x57\x4b\x0f\x7f\x4e\xf0\xb5\x73\x58\x97\xf6\x89\xee\x83\x5d\x89\x15\x47\xcb\x54\xac\x4b\x55\x6d\x85\x4d\x0f\x59\x13\x99\xbd\xd9\x38\xdb\x52\xe5\x32\xc5\x4f\xa7\x16\x9b\xec\x32\x25\x25\xae\xe4\xad\x74\x0d\xbd\x79\xaf\x89\x8a\x2d\xce\x53\x96\xd7\x34\x41\x66\x15\xd7\x38\x07\xd7\x27\x5d\x25\xdf\x6b\xa8\xb5\xd8\x44\x52\x5a\x56\x1c\x56\x45\xe9\x93\x83\xdd\x9f\x58\x2a\x74\x55\xde\x17\x82\xdd\x83\xc0\x22\x4a\xb0\xf9\x68\x19\xe2\x13\xf1\x47\x2a\x43\x3c\x08\x76\x33\x07\xcf\xff\xdd\xf6\x2c\xef\x53\x41\x67\x92\xca\xa7\xca\x96\x7e\x09\xe7\x7d\x52\x1f\x7e\x21\xfa\xc2\xa9\xb6\x93\xd7\x87\x04\x14\xf7\x96\xe1\xfc\xc4\x80\xc6\x6f\x9f\x3e\x68\xf3\x2b\x4c\x46\x4e\xcb\xe7\xd7\xa1\xef\x7d\xfa\x3f\x14\x7c\x5f\x2e\xf5\x8a\xd2\xc7\x0f\x97\x7a\x3d\x51\xc7\x22\x94\x7a\x35\xed\x64\x33\x57\x65\x34\x25\x36\x58\xd9\x9d\xea\x5b\xfb\xad\x6d\xc4\x7a\x6a\x1d\xb8\x94\xb6\x64\x59\xcd\xce\x6b\xa3\xc5\x4a\x98\x8f\x95\x76\xe2\xed\x0d\x8c\x24\x56\x4f\x89\x15\x0c\x2a\xdd\x96\x5c\x15\xe2\x53\x8f\xc9\x98\xea\xdc\x1c\xe4\x41\x8a\x1d\xd5\x17\x0d\x2d\xde\xe3\xc5\xda\xb3\x83\x56\x4c\x6b\x58\x96\x59\x84\x64\x46\xe3\x29\x55\xa3\x15\x20\xc8\xb4\x06\x34\x56\xe6\x59\x9e\xd3\x00\xe0\x79\x16\xb0\x02\x16\x04\x16\x03\x56\x46\x88\x63\x10\x52\xa0\xca\x23\x52\x50\x58\xfe\xe5\x1b\xc1\x6c\x37\xcc\x44\x7c\x9d\xc2\x41\xd0\x4a\x5d\x0b\x5a\x39\x9e\xa7\xf8\xb3\x51\xeb\xfa\xee\x3a\xa6\x3d\x3a\x14\xf0\x25\x8a\x25\x1c\x44\xad\x27\x47\xfe\x03\x2d\xfb\xf4\x34\xcc\x01\xfe\x1d\xbd\x35\x49\x1f\x74\x12\xc5\xd4\x70\x5c\x2e\xae\x94\x6a\x9a\xb5\x79\xf5\xad\x95\x2d\xb9\x39\xb2\x33\xf0\xbc\x8e\x14\x17\x13\x8d\x02\xca\x96\x95\x18\x99\x7e\x73\xd3\xb1\xa9\xc1\xc4\xf0\x68\x49\x4b\xf5\xe5\x54\x10\x7a\x75\x36\x21\x65\xd3\x74\xd9\xd4\x97\x45\xab\xf1\x46\xad\x94\x94\x23\xd4\xec\x5b\xa2\xd2\xd3\x05\x9f\xe1\xc8\xed\xe0\xd1\x7b\x4f\x8b\xa8\x30\x4e\xde\xda\xf7\xc7\x99\xeb\x96\x6d\xaf\x4f\xc1\x7f\x26\x55\x72\x19\xff\xbb\x51\xf1\xb3\x47\xf6\x80\x94\x5b\x3c\xcf\x2f\xea\x19\xaf\x2d\x02\xde\x5d\xfc\xfd\xc0\x82\x64\x48\x56\x91\xf1\x8f\x95\x68\xf8\x37\x1e\xa6\x91\x4c\xf7\x24\xb7\x52\xe9\x91\xb3\xf2\x9c\xef\xbe\x0d\x17\x70\x52\x53\x96\xf3\x61\x1d\x65\x20\xe8\x35\x79\x31\x9d\x9b\xd8\x0a\x58\x71\xb5\xce\xdb\xbc\xcb\xb2\x45\x8b\x61\x9b\x45\xbd\x9e\x2d\x70\x14\x18\x64\x6d\xa9\xa6\x74\x75\xd8\x49\xe5\xa6\x6a\xc1\xd1\xca\xf3\xca\x0c\x24\x9f\xbf\x08\xc8\x53\x1c\x02\x32\xa5\x62\x0d\x2a\x50\x55\x35\x55\x51\x31\x23\xd3\xb4\xac\x91\xbc\xca\x21\x00\x90\x40\x41\x5e\xe5\x39\x52\xd5\x00\xa7\x21\x28\xcb\x2c\xab\xd2\x0a\x4f\x41\x96\x54\xb8\xe0\xcd\xfc\xe0\x91\xd7\xc0\xdc\xe3\x61\x04\x70\x21\x2d\xb2\xbe\xe9\x9f\x70\x78\x78\xc4\x6b\xa0\x94\x77\x4e\x83\xef\x71\x30\x9f\xbd\xe3\x60\x7f\x65\x77\xf4\xd6\x32\x76\xad\x6a\xa4\xc8\xac\x94\x30\xc8\x16\xaf\x64\xcb\xac\x65\xbe\x52\xf6\x48\xd2\xd4\xb1\xc7\x8d\xdf\x46\xb5\x6c\xce\x83\xde\xb4\x5e\x44\xaf\xaf\xc0\x28\xd5\xe6\x2d\x9a\x2a\xf1\xb3\x98\xe5\xe5\x6b\xae\x48\x2b\x10\x27\xba\x9e\x90\xe9\x4d\xe2\x50\x48\x17\x87\x96\x8c\x40\x6d\xfe\x3c\x07\x73\xd0\x28\xc2\x0e\xad\xc7\x1d\xcc\xf3\xf0\x3f\xd1\xc1\xdc\xbb\xc3\xe1\x43\x0a\x36\xc3\x3c\x48\x3f\x85\xbe\xc7\x1d\x4c\xf4\x34\x47\x74\x07\x23\x3d\x86\xff\x41\x07\x83\x06\x62\x2c\x57\xad\x29\xb5\x4c\xb1\xde\x5c\xcc\x15\xea\x0d\xb7\x2d\x6c\xd4\xea\x02\x44\xd4\x14\xbd\xd5\x45\xc5\xa0\x10\x64\x24\x6f\x62\x5a\x9d\xdc\x22\x95\x68\x0e\x95\xd5\x32\xce\x62\xd2\x4c\xce\x53\x83\xd5\x2b\x9d\xc6\x14\xf9\x6a\x58\x71\x99\x6c\x4d\x2b\xaa\xe7\xb4\x53\xe2\xf3\xab\x4c\x28\x96\x51\x28\x85\x16\x34\x8a\x63\x99\xb5\x1b\xe1\x19\x56\x56\x10\x0b\x19\x92\x12\x58\x56\x23\x31\x64\x05\x04\x35\x06\x28\xaa\xcc\xf2\x0a\x86\x18\x03\x01\x71\x1a\x0f\x69\x06\x05\xe5\x77\xd4\x63\x05\x7c\xd7\xfc\x0a\x07\xaf\x54\xf0\x41\x92\x7f\x39\x3e\x5c\xf9\xd1\x0a\xbe\x0b\xe9\xf6\xe0\x8a\xbe\x93\x35\x80\xb7\xaf\xe0\x4b\xc4\xf3\x09\x7d\x96\x2b\x71\x40\x2f\x26\x72\x03\xb2\x59\x29\x0b\x72\xcc\x8c\x89\x93\xd7\x15\x48\x16\x52\x35\xa3\x95\x6e\xb4\x49\x57\xa9\xeb\xd3\x04\x40\xd6\xb2\x34\x2f\xd5\x59\x97\x69\x18\x28\x39\xf7\x52\xd6\xc2\xad\x5a\x08\xc0\xba\xda\xaa\x15\xcc\x2c\x44\xb8\x24\x2e\xf9\xec\xaf\x55\xc1\xf7\x68\x05\xdd\xa3\x55\x63\x45\x72\xc4\x26\x9e\x58\xc1\xf7\x99\xe3\xd9\x47\x54\xf0\x45\xad\xa0\x13\x9f\x54\xc1\xc7\x1d\x54\xe3\xbf\x5b\xcf\xbf\x2a\x8b\x7f\x6b\xcb\x5a\xaf\xb8\x4c\x55\x84\x5e\x72\xde\xc8\xa9\xd2\x6a\xa8\x75\xe2\x13\x4d\x2f\x74\x14\xa1\x66\xe8\x64\xce\x4c\xb4\x4c\xb5\x98\x95\x7a\x45\x5d\xed\x4c\xf8\x61\x29\x25\x61\xa7\xd2\xb2\xc7\xba\x5b\xac\x31\xbc\x9c\x62\xa0\xa7\x8e\xba\x6d\x29\x39\xa9\x0b\x63\x6b\x28\x96\x66\x89\xa7\xaf\x69\x92\x24\x92\x05\x45\x53\x30\x94\x69\x85\x06\x34\x50\x79\x59\x66\x39\x96\x57\x55\x52\xa0\x65\x55\x96\x81\xc2\xd1\x24\xcb\x01\x52\x95\x65\x4a\x46\x24\xd6\x04\x9e\xe7\x48\x8d\xa5\x10\xe5\xef\x04\xa4\x9e\xb7\xa6\x79\x75\x90\x25\x39\x8a\x66\xcf\x0e\xb2\xdb\xbb\x47\xaf\x55\x78\x74\x51\xf3\x42\xf4\x1e\x54\x4d\x44\x8a\xc6\xa9\x50\xd5\x43\xa0\xb5\xfb\x45\xc8\x62\x5b\xce\xe5\x62\xa0\x88\x8d\xd5\x42\xb7\x94\x54\x8e\x66\x0b\xd9\x65\xc2\x23\x99\x58\x56\x80\x16\x88\xd5\x29\xc8\xe7\x85\x55\xd9\x84\x9a\x9e\xef\x40\x4b\xb3\xa8\x74\xce\x2e\xb6\x5d\xf8\xd6\x06\xb1\x64\x6b\xe2\x00\x08\x10\x4c\x70\x62\x89\xcd\x16\x1c\xda\x4a\x14\xc5\xdc\x2d\xd1\xf8\x61\x52\xf5\x6c\x34\x2e\x3e\x56\x15\x96\xaf\xec\xe5\x7b\xe6\xba\x12\x0d\x3f\x0f\x7f\xb4\x68\x7c\xef\x71\x9e\x98\x04\x8f\x54\xa7\xfc\x6c\xfc\xef\xe5\x71\xd9\xe3\x3c\x92\xee\xfa\xc0\xd9\xc8\x35\x8f\xf4\x99\xf5\xed\xe2\x93\xfa\xea\xc1\x68\xdf\x6b\xbb\xfa\x90\x6b\x79\x6c\xb1\x9a\x49\xaa\xf3\xd2\x70\x68\xdb\x5a\x2e\x43\x35\x2d\x5a\xa3\x90\xd6\x65\xb2\x9a\x3c\xb7\xa8\x12\xec\xbe\xc6\x44\x53\x46\x6a\x4c\x53\x5a\x86\xee\x75\x56\x68\xd2\xed\xd2\xf9\xc6\x78\xd6\x95\xdb\x4e\x2f\xeb\x8a\x2b\x5b\x79\x9b\x19\x8a\xe4\x8a\x4f\x4f\x27\xc9\x2a\xcd\xb3\xaa\xac\xaa\x24\x54\x69\x96\xe4\x01\xc7\x72\x40\xa1\x11\x83\x38\x2c\xa8\x2c\xe6\x59\x46\x41\x50\x50\x64\x1a\x60\x16\xaa\x1c\x42\x1a\x47\x22\xa8\x61\xcc\xc8\x14\xab\xe2\xc0\x23\xc1\x27\x9d\xf0\x75\x83\x47\x12\x38\x78\xc1\x23\x09\x1c\xf5\x12\x7a\x3d\xcf\xa3\x27\x7c\x7d\xa2\x47\x3a\x38\x91\x2b\x21\x8c\xc6\x85\x0e\x7c\xa3\x66\x5c\x4d\x5b\xf2\xd5\x12\x1e\x49\x32\x68\x36\x73\x8c\xb1\x78\x1b\xe5\xc8\x84\xad\x77\x9d\x8a\xc7\xe9\x15\xc0\xc2\x9a\x3c\x1a\x40\xb5\xd1\x6c\x69\x38\x65\xcf\x14\xb2\x2a\x22\x6d\x90\xea\x2e\xbc\x41\x5b\x34\xdd\xe2\x74\x68\x26\xc6\xcb\x61\x42\xbc\xe9\x44\xae\xbb\x3d\x52\x84\x13\xa4\x9e\xea\x91\x1e\xc4\xff\x44\x8f\xf4\xe8\x09\x1c\x8f\x7a\xa4\xa7\xe0\x7f\xc0\x23\xfd\x4a\xf9\xb1\xab\xf9\xa7\x08\xb2\x7a\xa6\x47\x8a\x82\xff\x41\x8f\x94\x85\x8d\xde\x44\x46\x0e\x8e\x7b\x89\x78\x71\xce\x2f\xd8\x5a\x7d\xd6\x2e\x97\x86\xe3\x62\xe6\xad\x36\xac\x65\x8c\x04\x76\x59\x6a\x2a\x72\x5d\xe7\x35\x31\x6d\x64\x5f\x41\xbe\x5c\x17\xe8\x8a\x21\xac\x6a\x7c\x62\x12\x93\xca\x5a\x06\xa6\x5b\xc9\xce\x7c\xca\x56\x5a\x19\xb9\x50\x92\x9e\xbf\xcb\x49\xe1\x90\x4c\xf1\x34\xa5\x91\x88\x54\x68\x0d\x73\x82\x8a\x15\x4c\x6a\x1a\x90\x79\x4a\x00\x1a\x87\x04\x95\xa2\x15\x9a\x53\x64\x95\xc3\x14\x43\x52\xb4\xc6\xc9\x90\xd7\x58\x52\xd5\x14\x92\x0c\x3c\x12\xf5\x24\x8f\x44\x5f\xf5\x48\x3c\xbc\xe4\x91\x78\x78\xe8\x91\x82\xd7\xbc\x3d\xea\x91\x2e\xec\x25\x0d\x3c\x52\xa4\x25\xf1\xee\x15\x8f\x54\x89\x5b\xb2\x69\xf3\x05\x71\xd4\xa8\x68\xbc\x52\xab\x54\x0c\x31\xd5\x5d\xea\x8b\x58\x8e\x7c\x55\x3b\x76\x89\x6e\xeb\xb4\x54\xa8\x8a\x62\xbe\x9b\xb6\x3c\xc5\x1b\x26\x73\xcb\x1a\xad\xb8\xed\xd6\x72\x8e\x3a\x14\xcc\xc7\x47\xb8\xd6\xe9\xc9\x4b\x06\x26\x86\x46\x79\xd0\x8c\xb3\xb7\x2d\x89\x7f\xb6\x47\x3a\x53\x48\xf9\x69\x1e\x29\x19\x1d\xff\x87\x9c\x09\x75\x87\x47\x78\xb6\x47\xba\xb7\x50\x49\x14\x1f\xf4\x48\x1f\x58\x12\x70\xd2\x23\xfd\x24\x8f\x20\x7e\x40\x5f\xdd\x83\x7f\xe3\x91\xb8\x98\x3a\xed\x0c\xe7\x76\xb2\x9e\x63\xe2\x8b\x85\x48\xb3\x39\xb1\xac\x15\x52\x59\x7a\x58\x37\x01\xd2\x57\x83\x4e\x4a\xaf\xd9\xbc\x28\x9a\x4a\x07\x83\x25\x2c\xe5\x86\xf9\xd4\x60\xb9\x68\x37\x8b\x89\x89\xac\xf5\xac\x58\x9d\x49\xbc\x0e\x66\x45\xab\x97\xa9\xe4\x60\xba\x1a\x9f\x3c\x7f\xc9\x9d\xc1\x9a\xa0\x90\xac\x2c\xb3\x90\x51\xa1\x8a\x20\xe4\x01\x00\xbc\xac\x6a\x80\x56\x79\x92\xe7\x58\x9e\x62\x28\x8c\xa1\xa6\x20\x8e\x66\x38\x85\xc7\x0c\xc9\x6a\x32\x96\x05\xa0\x29\x0c\x13\x78\x24\xfa\x49\x59\xbb\x1b\x3c\x12\x4d\x9f\x5d\x73\xdf\xdd\x3d\x7a\x5d\xe8\xa3\x59\xbb\x4f\xf4\x48\x07\x59\xbb\x4a\x06\x66\x0a\x15\xc1\x60\x49\xa5\x04\x6a\x05\xd8\x2a\x03\xbd\xeb\x64\xa5\xde\x10\x67\x8a\xf5\x6e\xba\xc9\xb8\x56\xf2\xad\xc2\xa4\xad\xaa\xd4\x64\x94\xb6\x4b\x91\x65\x2e\xd7\xac\xbe\xb2\xd9\x2c\x5b\x53\x5e\x61\x4e\x4d\x02\x85\x65\xe7\x45\x1d\xd3\x99\x65\x9d\x9f\x4d\xe6\x73\xf2\x57\xcc\xda\x3d\xec\x91\x1e\xc4\xff\x44\x8f\xf4\x94\xd2\xd5\x07\x3c\xd2\x67\x97\xce\x8a\xe2\xaf\x5b\xa4\x76\xcd\x23\x7d\x66\xd6\x4c\xfc\x80\xbe\xba\x07\xff\xc6\x23\xd1\x72\xaf\x67\x73\xb0\xe8\xd4\xe7\xab\xb6\xe8\xbc\xd6\xa8\x4e\x02\xbb\x4a\xdd\x28\xd3\x3d\x2f\xad\xb4\xab\xe3\xa5\x52\xb0\xb9\x51\x47\xe1\xeb\x55\x73\xd1\x59\x69\x35\xca\x1d\x94\x04\xcb\x56\xb4\x49\x62\x61\xf5\x06\x64\xb1\xbd\x72\x1c\x71\x9a\xe0\x74\x39\x9f\x5d\xc6\xac\x54\xea\xe9\x65\xc6\x90\xe2\x68\xbc\x76\x07\x82\x2c\x60\x8d\x53\x65\x24\x20\x46\x95\x29\x8a\x12\x64\x8e\xd7\x54\xc4\x6b\x14\xcd\x71\x9c\x0c\x90\x46\x51\x32\xa2\x59\x1e\xa9\x8c\x42\xaa\x9a\x40\xb3\x2a\xad\xbe\x6c\x5f\x68\xff\xc8\x1a\x3d\xb8\xba\x46\x0f\x78\xfe\xfc\xf2\xd1\xf6\xee\xe1\x4b\xa2\x1f\x5d\xa3\xbf\x90\xab\x0b\xae\x08\x91\xf9\x99\x35\xfa\x64\x6a\xf5\x36\x1b\xd5\x12\x35\xbb\x2c\xe6\x0d\xad\x5a\xef\xa6\xec\xe2\x60\xe6\x2d\x95\x26\x65\xa6\xab\xc9\x1a\x03\xf4\x91\xea\xa6\xb3\x28\x51\xee\xcc\x49\xa6\x11\x6f\x0f\x3a\x64\x57\x1f\x39\x64\x32\x51\x95\xe8\x32\x4a\xb7\x61\x61\xac\xb8\xd4\xeb\xbc\x38\x36\x64\xba\x59\x77\x4a\xc5\x5f\x6b\x8d\xbe\x62\xf5\xe2\xcc\x4f\x5c\xa3\x7f\xf4\x94\x1f\x51\xfc\x79\x39\x9f\x93\x63\x6b\x22\xba\x2c\x2a\xd6\xeb\x45\x36\xaf\xc9\xe2\x19\x6b\xf4\x51\x4f\xf9\xd9\x8c\xad\x3a\xcf\x3a\x8c\x24\xb6\x0a\xa9\x5a\xb2\x67\xad\xc8\xf6\x9c\x4d\xd2\x32\xa7\x58\x92\xc0\xd4\x9b\xf3\x51\x45\xed\xe5\xb3\x72\xa2\x0e\xf5\x66\xdb\x2d\x57\x5a\x33\xd0\x6b\x7b\x69\x3a\x5f\x10\x44\xbd\xb9\xa8\xa4\x3a\x83\xb6\x6a\x4c\xac\x62\x19\x2a\x49\xc6\x1e\xc7\x24\x12\xad\x92\x1f\xb0\x46\x4f\x61\x01\x00\x12\xa8\x40\x40\x48\x96\xfd\x97\xa0\x01\x81\xa1\x78\x92\xe5\x79\x56\xe5\x38\x4e\x81\x2c\x09\x29\x4a\x61\x69\x8e\xd7\x80\x22\x40\x1e\x71\x02\x56\x68\x0c\x39\xff\xf5\xd8\x70\x13\xed\x47\x1f\x5b\xaf\x06\xf9\x10\x52\xdc\xd9\x53\x7a\xfd\xbb\xbb\x3a\xdd\xcd\xab\xdc\x1f\x1d\x5b\x2f\x9c\xad\x13\x5c\x11\x36\x02\x9c\x19\x5b\x53\xb9\xca\x54\x5d\x4d\x87\x9a\x1d\x53\x1b\xb9\x7c\xb7\x2b\x93\x6c\x63\x58\x4c\x14\x8b\x5d\x37\xbd\xb0\xda\x56\x1d\x64\xf3\x78\xa8\xbd\xc1\xb2\x9e\x6e\x79\xc5\x69\x17\x16\x9c\x76\xb9\xf1\xba\xac\x27\x32\xb1\xce\x4c\x53\xed\xee\x3c\x59\x55\x26\x3c\x33\x48\xd5\xe5\xe4\x78\x28\x57\x7b\xa5\x5f\x6b\x6c\x7d\xb4\xfe\xe8\x51\x7b\x2e\xd0\xb1\xf2\xeb\x33\xc7\xd6\x4f\xdc\x30\xf0\x11\xf5\x4f\x51\xeb\x8f\xc4\x27\x8d\xad\x51\xfd\xec\x66\x6c\x5d\xa6\x1c\x4b\xe1\x6c\x8a\xad\x5a\x2d\x23\xd9\x06\x50\xa8\x8c\xec\xe5\xbc\xb1\x04\x5c\x42\x79\x05\xaf\xa4\x5a\x5f\x76\x6d\x8a\xf5\x86\xbd\x44\xbb\xd8\xe0\x4c\xc1\x78\x03\xcd\xd6\x58\x19\xd5\xea\x33\xd3\xa1\x28\x94\xe6\xc5\x21\x55\xd0\x2a\xbd\x1a\xd9\x99\x4f\x6c\xb8\x82\xb7\xd6\x96\x7e\xf9\xf2\xfd\xfb\x97\xef\xdf\x89\x32\x1a\xe3\x1f\x04\x72\x5d\xec\xf5\x5d\x0f\x79\xee\xe1\xe7\xfe\x64\x84\x97\x7f\x12\xcd\xe5\x04\xff\x20\x92\x95\x72\xa3\x59\x17\x73\xe5\xe6\x9f\x44\x43\x19\xe0\x31\xfa\x41\x4c\xa6\xb2\x69\x28\x7f\x12\x95\xb9\x85\x9d\x1f\xc4\x1a\xe2\x97\x2f\x62\xb1\x29\xd5\x89\xa6\x98\x28\x4a\x44\xa5\x5c\xec\x1d\x42\xfc\x42\x10\x04\x21\xa6\x52\x07\xd0\xde\x21\x24\xaa\xf5\x5c\x49\xac\xf7\x88\x82\xd4\x23\x7e\x37\xd4\x77\xd4\xea\xb6\x33\xe9\x8f\x0d\xdd\x41\x81\x1b\x08\x7d\x7f\x12\xd5\x21\xa8\xa7\x28\x3f\x85\xf8\x2a\xf5\x5b\x4f\xe6\xb3\xed\x86\xbe\x06\xff\xeb\x2b\xb6\x8a\x37\x1f\xbd\xe5\x64\xfb\xd1\x70\xdd\x29\x76\xfa\x4f\xe1\xee\x18\xed\x29\xe6\x22\x11\x46\xb4\xca\xb9\x5a\x4b\x22\x7e\xdf\x37\xff\x46\xec\xdb\x6f\x3f\x07\x0f\xdc\x29\x9a\xe7\x74\xeb\xdd\x8c\xdf\xd5\xa9\xf6\x04\x07\xca\xd0\x9f\x20\xc7\x33\x14\x63\x82\xac\x03\x4e\x4e\xdf\x7e\x32\x67\xa7\x91\x5c\xe2\xf4\x02\x59\x37\x73\x7e\x10\x98\x9d\xe6\xfd\x5c\x83\x27\x73\x7f\x0e\xcd\x25\xfe\x2f\x92\x76\x55\x02\x81\x4a\xcb\x4b\x5f\xdb\xb7\x8c\xe4\xca\x29\xa9\x7b\x85\x87\x64\x5d\x12\x9b\x52\xd0\xf4\x18\x0a\x51\x29\x87\x8d\xa1\xd5\xc8\x95\x33\x84\xec\x39\x18\x1f\x5a\xd7\x79\x6a\x02\x1b\x7b\x9c\x9e\x00\xce\x6d\x14\x9d\xb1\x6b\x79\xd9\x47\x8a\x62\x4f\x2d\x2f\x32\x39\x7b\x10\x87\x94\x1c\xcd\x06\x8e\xe9\x09\x1a\x7f\x23\x36\x1f\xfa\x2e\x7e\x9b\x62\x4b\x79\x2f\x30\x79\xd9\x1f\x20\x77\xf0\x08\x65\xeb\xe7\x6f\x23\xeb\x50\xd3\xd6\x4f\x9d\xa2\xc6\xc4\xaa\xfe\x40\xc7\xed\x20\xdc\x46\x51\xd0\x76\x27\x9e\x6f\x04\x9a\x4c\x4c\x43\x09\x86\x03\xdb\x51\xcf\x0c\xd3\x7d\xbc\xd6\x0d\xff\x7e\x04\x4a\x37\x5e\x22\x20\x38\x04\xee\x90\x6c\xac\x69\x58\x09\xab\xda\xfb\x51\xcb\x50\xbf\x11\xbf\xf9\x0f\xff\x76\x8e\x58\x43\x7d\x12\x99\x86\x7a\x33\x81\x5b\xd5\x5b\x93\x17\x81\x68\x7b\xd2\x9f\x3c\x8b\xee\x0d\xac\x43\xd2\xcf\xb8\xaa\x48\x9c\x9c\x66\xc0\x5b\x3c\x8f\x81\x0d\xac\x33\x3a\x1d\x91\x85\x43\x08\xa7\x98\xb0\x27\x6b\xad\x1c\xd8\x91\x78\xd8\x10\xbf\x87\x11\x55\xf8\x97\x05\xed\x6e\xac\xdd\x1f\xaa\x1f\x97\xf5\x31\xb8\x43\x92\x83\xdf\x43\x34\x9e\xa6\xe8\x50\xae\xcf\x22\xeb\x1d\xcc\xdb\x86\xb7\x53\x04\x7a\x41\x97\x78\x8f\x74\xeb\x1e\x46\x74\x95\xbc\xa6\x7e\x9e\xa3\xae\x91\xc8\xc8\xc5\x0f\xfb\xcf\x53\xc0\x42\x94\xab\x38\x44\xe7\x61\xdb\xab\x04\xda\x9a\xf6\x80\xd3\x7a\x0f\xea\x26\xe2\xfc\x96\x97\x48\xf3\x69\xc7\xce\xd3\xc4\x17\x82\x77\x8d\xc8\x50\xf3\x5b\x28\x7d\x8e\x1c\x8f\xa0\xdd\x4a\xe5\x55\x69\x3e\x87\xb6\x9b\x68\xba\x4c\xcb\x96\x62\xd3\xb6\x47\xd3\xc9\x63\x14\x1d\xc3\xba\xb9\x47\x83\x78\xf7\x0c\x7d\x13\x64\x38\x7d\xcf\x18\xe3\xa7\x50\x18\x86\x76\x9b\xdd\x6e\x08\xfc\x46\x84\x49\xfe\x46\x6c\x86\x78\xc5\xb4\x5d\xac\xf6\x91\x77\x86\x89\x27\x8c\xdb\x1b\x38\xd7\x28\xbe\x33\x3a\x5a\x43\x7d\x9a\x74\xef\x10\xec\x55\xb9\x19\x96\x8a\x17\xfd\x50\xc8\xe1\xf6\x6d\xab\x8f\x54\xd5\xc1\xae\xfb\xa8\x40\xaf\x22\x38\x9a\xa7\x6d\x6e\x87\x66\x46\x41\xc3\x3b\x68\x7f\x5c\x0f\x2e\xc1\xbe\x4e\xf1\x09\x2b\x3b\x06\xb8\x89\xc2\xd7\xf0\xbc\xe5\x24\xfa\x1c\xfc\x22\xd4\xab\x61\xff\xba\xd1\x15\x42\x37\x31\xd4\x1a\xe4\x4e\x89\x9e\x44\xed\x29\xd0\x57\xc3\xb7\x5b\x35\xf9\x00\xf8\xb3\x95\xe1\x08\x74\x94\x78\xf3\x3c\xb8\xf1\xc4\x76\xd6\x03\xdf\x0c\x3b\xae\x61\x5b\xcf\x17\x74\x18\xc3\x75\xf2\x43\x0f\xdc\xce\xcc\x66\xe8\x89\x98\xa9\xb8\x4d\xfe\x07\x38\xae\x72\x72\xd0\xf6\x76\x26\x26\x0e\x9e\x19\xf6\xd4\xfd\x14\x6e\x4e\x21\xbb\xca\xd6\xa9\x87\x6e\xe7\x6f\x9b\x44\xf9\x30\x9e\xb6\x08\xae\xf2\x71\x36\xdb\x75\x0c\x7a\xe7\x6f\x3f\xc4\xb4\xc3\xd0\x4f\x4e\x80\xef\x35\xf0\x63\xa0\xc7\x53\xa8\x27\x59\xf8\x25\x14\xb7\xf0\x70\x65\x5e\x77\x11\xd9\xf3\xdc\xd7\x7b\xc0\x37\xd1\x7e\xdd\x89\x1d\x4e\xb6\x3f\x42\x6d\xde\xc3\x8f\x3c\xd5\xf7\x83\xb8\x9d\x23\xdf\x66\x18\xfb\xb2\x6d\x8f\x22\x4b\xf9\x02\xcc\xab\x21\xc2\xef\xbf\xab\xd8\x43\x86\xe9\x12\xdf\xff\xe7\x7f\x88\x17\xd7\x36\xd5\x83\xd5\xb4\x97\x1f\x3f\x3c\xbc\xf0\xbe\x7e\xfd\x46\x9c\x6f\xa8\xd8\xea\x6d\x0d\x83\x5c\xfc\xf9\xa6\xb2\x3d\xd5\x07\xde\x4d\xe8\x8f\x9a\x5e\x26\xe0\xa8\x69\x88\x84\xaf\x44\x27\x2b\xd5\xa5\x40\xc9\x88\xbf\x08\x8a\xba\x79\x21\xda\x50\xfb\xda\xc1\x32\x51\xba\xf0\x39\xcb\xd1\x1b\xb4\x44\xba\x52\x97\x72\x99\xf2\x6e\x09\x88\xa8\x4b\x69\xa9\x2e\x95\x93\x52\x23\xb4\x2a\xe2\xdf\xad\x94\x89\x56\x35\xb5\x56\x99\xba\xd4\x68\xd6\x73\xc9\xe6\xfa\xa7\x94\x54\x94\x9a\x12\x91\x14\x1b\x49\x31\x25\x5d\x58\x47\x5b\xcf\x3b\x8e\xbf\xf6\x43\xa9\x98\xe7\x09\xe3\x18\xcf\x95\x45\xb2\x73\x94\x1c\xcb\x27\x9c\x36\x3a\x29\xac\x4d\xa0\x7f\x65\x45\xf1\xac\x24\x36\x53\xd9\x9f\x2e\x87\x43\x3a\x4e\x49\x61\x9b\x25\xb8\xac\x30\xf7\x49\xe0\x7d\x52\xe9\x27\x8a\xe1\x0c\x31\xc7\xb2\x38\x91\x06\x7b\xae\x52\x84\x53\x1c\xbf\x82\x40\xce\xab\xc6\xbb\x1c\xd2\x2d\xda\x41\x20\x55\xc5\x2a\x31\x46\xd6\x14\x99\xe6\xf2\x88\xd2\x5c\x9a\x90\xba\xb9\x46\xb3\x11\xd0\x1c\x70\xf6\xc7\x08\x2f\xfb\x33\x64\x4e\x71\x7f\x0d\x11\x13\xa9\x7a\xa5\x7a\x48\xf8\xfe\xa9\x50\xcb\x60\x45\xfe\x8b\xdf\x3e\x8c\xe0\x34\xec\x3f\xb7\x2e\x32\x68\x1e\xc6\xfc\xbb\x2f\xb7\x8b\xd7\x5a\x48\xca\x00\x39\x48\xf1\xb0\x43\xcc\x90\xb3\x34\x2c\xfd\x77\xc8\x30\x5f\x89\x72\xa5\x19\x14\x30\x5d\x87\xe2\x23\xbd\x06\xe7\x4b\xa8\xb4\x34\x4c\xed\xfe\x60\xf0\xc5\xa4\x6f\x58\x3a\x76\xbd\xbe\x89\xd6\x7f\xfc\x48\xfb\xe5\x1b\xf1\x42\xbe\x7c\xfd\xf3\xbd\xae\x84\x00\x9d\x52\x96\x53\x92\x3e\x2e\x30\x18\xe1\xe5\xba\xc7\x8f\xe4\xb9\x4b\x98\xb8\x86\x6e\xad\x63\xfd\x1b\x04\xba\x7d\xe8\x84\x34\x58\xfa\xeb\x0d\xb2\x24\x02\x64\xd1\x9f\x9f\x63\x43\x1f\x78\x84\x61\x79\x58\xc7\x4e\xa8\x1b\xbf\x7f\x27\xe6\x98\x98\x1b\xa6\x49\xbc\x4d\xb1\xb3\x24\xe4\xe5\x16\xa1\x6b\x13\xde\x00\x79\x84\xe1\x12\xf3\xc1\xee\x57\xc3\x25\xbc\x01\x26\x34\xc3\x71\x3d\xc2\xf0\xf0\x98\x30\x2c\xff\x17\xc5\x1e\x4f\x6c\xd7\xf0\xf0\x5a\xb8\x37\x90\x75\x24\xed\x00\xf8\xae\x4a\xe0\xeb\x97\x50\xbf\x9e\x8c\x3a\xd7\x7d\xba\x1d\xca\xc6\xd3\x05\x56\xd7\x92\x59\x8b\xe9\x77\x56\xf8\xba\xa9\xb5\x5b\xb7\xd1\xf0\xde\x0f\x9e\x6e\x77\x1a\xd9\x41\x6c\xbe\x06\xe3\xda\x53\x47\x89\x06\x69\x1b\x84\xfa\x14\x07\x79\xbf\xb3\xcf\x6f\x86\xdb\xaa\xed\x7a\xba\x83\x1b\xb5\x22\xa1\x22\x0f\xad\xdd\x18\xa1\x4e\xc7\x13\x5f\xce\x26\xf6\xb0\x3f\x4e\xfe\xff\x00\x00\x00\xff\xff\x88\x15\x75\xcc\x95\x50\x01\x00") func tradesHorizonSqlBytes() ([]byte, error) { return bindataRead( @@ -1366,7 +568,7 @@ func tradesHorizonSql() (*asset, error) { } info := bindataFileInfo{name: "trades-horizon.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x76, 0xf2, 0x65, 0x99, 0xb9, 0xff, 0x30, 0x40, 0xa8, 0x5f, 0x49, 0x5c, 0xa2, 0x4c, 0x99, 0xb7, 0x4d, 0xa8, 0xfa, 0x9d, 0xe5, 0x49, 0x86, 0x39, 0x75, 0x17, 0x2a, 0xc2, 0x28, 0xd6, 0x53, 0x54}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa4, 0x34, 0x18, 0x68, 0x8c, 0x5a, 0x30, 0x78, 0xc1, 0x3b, 0xd3, 0x2b, 0x35, 0x55, 0xfb, 0x20, 0xe5, 0x54, 0x8, 0x65, 0xd, 0xee, 0x97, 0x27, 0x8b, 0x59, 0xa4, 0x69, 0x88, 0x30, 0xab, 0xc8}} return a, nil } @@ -1461,68 +663,30 @@ func AssetNames() []string { // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ - "account_merge-core.sql": account_mergeCoreSql, - "account_merge-horizon.sql": account_mergeHorizonSql, - "allow_trust-core.sql": allow_trustCoreSql, - "allow_trust-horizon.sql": allow_trustHorizonSql, - "asset_stat_account-core.sql": asset_stat_accountCoreSql, - "asset_stat_account-horizon.sql": asset_stat_accountHorizonSql, - "asset_stat_operations-core.sql": asset_stat_operationsCoreSql, - "asset_stat_operations-horizon.sql": asset_stat_operationsHorizonSql, - "asset_stat_trustlines_1-core.sql": asset_stat_trustlines_1CoreSql, - "asset_stat_trustlines_1-horizon.sql": asset_stat_trustlines_1HorizonSql, - "asset_stat_trustlines_2-core.sql": asset_stat_trustlines_2CoreSql, - "asset_stat_trustlines_2-horizon.sql": asset_stat_trustlines_2HorizonSql, - "asset_stat_trustlines_3-core.sql": asset_stat_trustlines_3CoreSql, - "asset_stat_trustlines_3-horizon.sql": asset_stat_trustlines_3HorizonSql, - "asset_stat_trustlines_4-core.sql": asset_stat_trustlines_4CoreSql, - "asset_stat_trustlines_4-horizon.sql": asset_stat_trustlines_4HorizonSql, - "asset_stat_trustlines_5-core.sql": asset_stat_trustlines_5CoreSql, - "asset_stat_trustlines_5-horizon.sql": asset_stat_trustlines_5HorizonSql, - "asset_stat_trustlines_6-core.sql": asset_stat_trustlines_6CoreSql, - "asset_stat_trustlines_6-horizon.sql": asset_stat_trustlines_6HorizonSql, - "asset_stat_trustlines_7-core.sql": asset_stat_trustlines_7CoreSql, - "asset_stat_trustlines_7-horizon.sql": asset_stat_trustlines_7HorizonSql, - "base-core.sql": baseCoreSql, - "base-horizon.sql": baseHorizonSql, - "change_trust-core.sql": change_trustCoreSql, - "change_trust-horizon.sql": change_trustHorizonSql, - "core_database_schema_version_8-core.sql": core_database_schema_version_8CoreSql, - "core_database_schema_version_9-core.sql": core_database_schema_version_9CoreSql, - "failed_transactions-core.sql": failed_transactionsCoreSql, - "failed_transactions-horizon.sql": failed_transactionsHorizonSql, - "ingest_asset_stats-core.sql": ingest_asset_statsCoreSql, - "ingest_asset_stats-horizon.sql": ingest_asset_statsHorizonSql, - "kahuna-2-core.sql": kahuna2CoreSql, - "kahuna-2-horizon.sql": kahuna2HorizonSql, - "kahuna-core.sql": kahunaCoreSql, - "kahuna-horizon.sql": kahunaHorizonSql, - "non_native_payment-core.sql": non_native_paymentCoreSql, - "non_native_payment-horizon.sql": non_native_paymentHorizonSql, - "offer_ids-core.sql": offer_idsCoreSql, - "offer_ids-horizon.sql": offer_idsHorizonSql, - "operation_fee_stats_1-core.sql": operation_fee_stats_1CoreSql, - "operation_fee_stats_1-horizon.sql": operation_fee_stats_1HorizonSql, - "operation_fee_stats_2-core.sql": operation_fee_stats_2CoreSql, - "operation_fee_stats_2-horizon.sql": operation_fee_stats_2HorizonSql, - "operation_fee_stats_3-core.sql": operation_fee_stats_3CoreSql, - "operation_fee_stats_3-horizon.sql": operation_fee_stats_3HorizonSql, - "order_books-core.sql": order_booksCoreSql, - "order_books-horizon.sql": order_booksHorizonSql, - "order_books_310-core.sql": order_books_310CoreSql, - "order_books_310-horizon.sql": order_books_310HorizonSql, - "pathed_payment-core.sql": pathed_paymentCoreSql, - "pathed_payment-horizon.sql": pathed_paymentHorizonSql, - "paths_strict_send-core.sql": paths_strict_sendCoreSql, - "paths_strict_send-horizon.sql": paths_strict_sendHorizonSql, - "self_send-core.sql": self_sendCoreSql, - "self_send-horizon.sql": self_sendHorizonSql, - "send_to_issuer-core.sql": send_to_issuerCoreSql, - "send_to_issuer-horizon.sql": send_to_issuerHorizonSql, - "set_options-core.sql": set_optionsCoreSql, - "set_options-horizon.sql": set_optionsHorizonSql, - "trades-core.sql": tradesCoreSql, - "trades-horizon.sql": tradesHorizonSql, + "account_merge-core.sql": account_mergeCoreSql, + "account_merge-horizon.sql": account_mergeHorizonSql, + "base-core.sql": baseCoreSql, + "base-horizon.sql": baseHorizonSql, + "failed_transactions-core.sql": failed_transactionsCoreSql, + "failed_transactions-horizon.sql": failed_transactionsHorizonSql, + "ingest_asset_stats-core.sql": ingest_asset_statsCoreSql, + "ingest_asset_stats-horizon.sql": ingest_asset_statsHorizonSql, + "kahuna-core.sql": kahunaCoreSql, + "kahuna-horizon.sql": kahunaHorizonSql, + "offer_ids-core.sql": offer_idsCoreSql, + "offer_ids-horizon.sql": offer_idsHorizonSql, + "operation_fee_stats_1-core.sql": operation_fee_stats_1CoreSql, + "operation_fee_stats_1-horizon.sql": operation_fee_stats_1HorizonSql, + "operation_fee_stats_2-core.sql": operation_fee_stats_2CoreSql, + "operation_fee_stats_2-horizon.sql": operation_fee_stats_2HorizonSql, + "operation_fee_stats_3-core.sql": operation_fee_stats_3CoreSql, + "operation_fee_stats_3-horizon.sql": operation_fee_stats_3HorizonSql, + "pathed_payment-core.sql": pathed_paymentCoreSql, + "pathed_payment-horizon.sql": pathed_paymentHorizonSql, + "paths_strict_send-core.sql": paths_strict_sendCoreSql, + "paths_strict_send-horizon.sql": paths_strict_sendHorizonSql, + "trades-core.sql": tradesCoreSql, + "trades-horizon.sql": tradesHorizonSql, } // AssetDir returns the file names below a certain @@ -1566,68 +730,30 @@ type bintree struct { } var _bintree = &bintree{nil, map[string]*bintree{ - "account_merge-core.sql": &bintree{account_mergeCoreSql, map[string]*bintree{}}, - "account_merge-horizon.sql": &bintree{account_mergeHorizonSql, map[string]*bintree{}}, - "allow_trust-core.sql": &bintree{allow_trustCoreSql, map[string]*bintree{}}, - "allow_trust-horizon.sql": &bintree{allow_trustHorizonSql, map[string]*bintree{}}, - "asset_stat_account-core.sql": &bintree{asset_stat_accountCoreSql, map[string]*bintree{}}, - "asset_stat_account-horizon.sql": &bintree{asset_stat_accountHorizonSql, map[string]*bintree{}}, - "asset_stat_operations-core.sql": &bintree{asset_stat_operationsCoreSql, map[string]*bintree{}}, - "asset_stat_operations-horizon.sql": &bintree{asset_stat_operationsHorizonSql, map[string]*bintree{}}, - "asset_stat_trustlines_1-core.sql": &bintree{asset_stat_trustlines_1CoreSql, map[string]*bintree{}}, - "asset_stat_trustlines_1-horizon.sql": &bintree{asset_stat_trustlines_1HorizonSql, map[string]*bintree{}}, - "asset_stat_trustlines_2-core.sql": &bintree{asset_stat_trustlines_2CoreSql, map[string]*bintree{}}, - "asset_stat_trustlines_2-horizon.sql": &bintree{asset_stat_trustlines_2HorizonSql, map[string]*bintree{}}, - "asset_stat_trustlines_3-core.sql": &bintree{asset_stat_trustlines_3CoreSql, map[string]*bintree{}}, - "asset_stat_trustlines_3-horizon.sql": &bintree{asset_stat_trustlines_3HorizonSql, map[string]*bintree{}}, - "asset_stat_trustlines_4-core.sql": &bintree{asset_stat_trustlines_4CoreSql, map[string]*bintree{}}, - "asset_stat_trustlines_4-horizon.sql": &bintree{asset_stat_trustlines_4HorizonSql, map[string]*bintree{}}, - "asset_stat_trustlines_5-core.sql": &bintree{asset_stat_trustlines_5CoreSql, map[string]*bintree{}}, - "asset_stat_trustlines_5-horizon.sql": &bintree{asset_stat_trustlines_5HorizonSql, map[string]*bintree{}}, - "asset_stat_trustlines_6-core.sql": &bintree{asset_stat_trustlines_6CoreSql, map[string]*bintree{}}, - "asset_stat_trustlines_6-horizon.sql": &bintree{asset_stat_trustlines_6HorizonSql, map[string]*bintree{}}, - "asset_stat_trustlines_7-core.sql": &bintree{asset_stat_trustlines_7CoreSql, map[string]*bintree{}}, - "asset_stat_trustlines_7-horizon.sql": &bintree{asset_stat_trustlines_7HorizonSql, map[string]*bintree{}}, - "base-core.sql": &bintree{baseCoreSql, map[string]*bintree{}}, - "base-horizon.sql": &bintree{baseHorizonSql, map[string]*bintree{}}, - "change_trust-core.sql": &bintree{change_trustCoreSql, map[string]*bintree{}}, - "change_trust-horizon.sql": &bintree{change_trustHorizonSql, map[string]*bintree{}}, - "core_database_schema_version_8-core.sql": &bintree{core_database_schema_version_8CoreSql, map[string]*bintree{}}, - "core_database_schema_version_9-core.sql": &bintree{core_database_schema_version_9CoreSql, map[string]*bintree{}}, - "failed_transactions-core.sql": &bintree{failed_transactionsCoreSql, map[string]*bintree{}}, - "failed_transactions-horizon.sql": &bintree{failed_transactionsHorizonSql, map[string]*bintree{}}, - "ingest_asset_stats-core.sql": &bintree{ingest_asset_statsCoreSql, map[string]*bintree{}}, - "ingest_asset_stats-horizon.sql": &bintree{ingest_asset_statsHorizonSql, map[string]*bintree{}}, - "kahuna-2-core.sql": &bintree{kahuna2CoreSql, map[string]*bintree{}}, - "kahuna-2-horizon.sql": &bintree{kahuna2HorizonSql, map[string]*bintree{}}, - "kahuna-core.sql": &bintree{kahunaCoreSql, map[string]*bintree{}}, - "kahuna-horizon.sql": &bintree{kahunaHorizonSql, map[string]*bintree{}}, - "non_native_payment-core.sql": &bintree{non_native_paymentCoreSql, map[string]*bintree{}}, - "non_native_payment-horizon.sql": &bintree{non_native_paymentHorizonSql, map[string]*bintree{}}, - "offer_ids-core.sql": &bintree{offer_idsCoreSql, map[string]*bintree{}}, - "offer_ids-horizon.sql": &bintree{offer_idsHorizonSql, map[string]*bintree{}}, - "operation_fee_stats_1-core.sql": &bintree{operation_fee_stats_1CoreSql, map[string]*bintree{}}, - "operation_fee_stats_1-horizon.sql": &bintree{operation_fee_stats_1HorizonSql, map[string]*bintree{}}, - "operation_fee_stats_2-core.sql": &bintree{operation_fee_stats_2CoreSql, map[string]*bintree{}}, - "operation_fee_stats_2-horizon.sql": &bintree{operation_fee_stats_2HorizonSql, map[string]*bintree{}}, - "operation_fee_stats_3-core.sql": &bintree{operation_fee_stats_3CoreSql, map[string]*bintree{}}, - "operation_fee_stats_3-horizon.sql": &bintree{operation_fee_stats_3HorizonSql, map[string]*bintree{}}, - "order_books-core.sql": &bintree{order_booksCoreSql, map[string]*bintree{}}, - "order_books-horizon.sql": &bintree{order_booksHorizonSql, map[string]*bintree{}}, - "order_books_310-core.sql": &bintree{order_books_310CoreSql, map[string]*bintree{}}, - "order_books_310-horizon.sql": &bintree{order_books_310HorizonSql, map[string]*bintree{}}, - "pathed_payment-core.sql": &bintree{pathed_paymentCoreSql, map[string]*bintree{}}, - "pathed_payment-horizon.sql": &bintree{pathed_paymentHorizonSql, map[string]*bintree{}}, - "paths_strict_send-core.sql": &bintree{paths_strict_sendCoreSql, map[string]*bintree{}}, - "paths_strict_send-horizon.sql": &bintree{paths_strict_sendHorizonSql, map[string]*bintree{}}, - "self_send-core.sql": &bintree{self_sendCoreSql, map[string]*bintree{}}, - "self_send-horizon.sql": &bintree{self_sendHorizonSql, map[string]*bintree{}}, - "send_to_issuer-core.sql": &bintree{send_to_issuerCoreSql, map[string]*bintree{}}, - "send_to_issuer-horizon.sql": &bintree{send_to_issuerHorizonSql, map[string]*bintree{}}, - "set_options-core.sql": &bintree{set_optionsCoreSql, map[string]*bintree{}}, - "set_options-horizon.sql": &bintree{set_optionsHorizonSql, map[string]*bintree{}}, - "trades-core.sql": &bintree{tradesCoreSql, map[string]*bintree{}}, - "trades-horizon.sql": &bintree{tradesHorizonSql, map[string]*bintree{}}, + "account_merge-core.sql": &bintree{account_mergeCoreSql, map[string]*bintree{}}, + "account_merge-horizon.sql": &bintree{account_mergeHorizonSql, map[string]*bintree{}}, + "base-core.sql": &bintree{baseCoreSql, map[string]*bintree{}}, + "base-horizon.sql": &bintree{baseHorizonSql, map[string]*bintree{}}, + "failed_transactions-core.sql": &bintree{failed_transactionsCoreSql, map[string]*bintree{}}, + "failed_transactions-horizon.sql": &bintree{failed_transactionsHorizonSql, map[string]*bintree{}}, + "ingest_asset_stats-core.sql": &bintree{ingest_asset_statsCoreSql, map[string]*bintree{}}, + "ingest_asset_stats-horizon.sql": &bintree{ingest_asset_statsHorizonSql, map[string]*bintree{}}, + "kahuna-core.sql": &bintree{kahunaCoreSql, map[string]*bintree{}}, + "kahuna-horizon.sql": &bintree{kahunaHorizonSql, map[string]*bintree{}}, + "offer_ids-core.sql": &bintree{offer_idsCoreSql, map[string]*bintree{}}, + "offer_ids-horizon.sql": &bintree{offer_idsHorizonSql, map[string]*bintree{}}, + "operation_fee_stats_1-core.sql": &bintree{operation_fee_stats_1CoreSql, map[string]*bintree{}}, + "operation_fee_stats_1-horizon.sql": &bintree{operation_fee_stats_1HorizonSql, map[string]*bintree{}}, + "operation_fee_stats_2-core.sql": &bintree{operation_fee_stats_2CoreSql, map[string]*bintree{}}, + "operation_fee_stats_2-horizon.sql": &bintree{operation_fee_stats_2HorizonSql, map[string]*bintree{}}, + "operation_fee_stats_3-core.sql": &bintree{operation_fee_stats_3CoreSql, map[string]*bintree{}}, + "operation_fee_stats_3-horizon.sql": &bintree{operation_fee_stats_3HorizonSql, map[string]*bintree{}}, + "pathed_payment-core.sql": &bintree{pathed_paymentCoreSql, map[string]*bintree{}}, + "pathed_payment-horizon.sql": &bintree{pathed_paymentHorizonSql, map[string]*bintree{}}, + "paths_strict_send-core.sql": &bintree{paths_strict_sendCoreSql, map[string]*bintree{}}, + "paths_strict_send-horizon.sql": &bintree{paths_strict_sendHorizonSql, map[string]*bintree{}}, + "trades-core.sql": &bintree{tradesCoreSql, map[string]*bintree{}}, + "trades-horizon.sql": &bintree{tradesHorizonSql, map[string]*bintree{}}, }} // RestoreAsset restores an asset under the given directory. diff --git a/services/horizon/internal/test/scenarios/change_trust-core.sql b/services/horizon/internal/test/scenarios/change_trust-core.sql deleted file mode 100644 index e05aa0b732..0000000000 --- a/services/horizon/internal/test/scenarios/change_trust-core.sql +++ /dev/null @@ -1,733 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999979999999800, 2, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 10000000000, 8589934592, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 9999999700, 8589934595, 0, NULL, '', 'AQAAAA==', 0, 5, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('186b3bb606ad48284ac8e6e192ffec5ed11b0f113d1438887591071c1b6575b2', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '69b2226ee24347478a171c44c8778d4f3495fba49aa8d36038a3ee6745bdf3bb', 2, 1559579702, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Zu5H9cHd0qAsZj9Q6Y8yIIc6utkf/CO+Lm/0KbsfrzPUAAAAAXPVMNgAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP0PjS3Rf7hs8xVIBg2g8xKvqOO/n/g/XwgPR/HB7qe9psiJu4kNHR4oXHETId41PNJX7pJqo02A4o+5nRb3zuwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('9efe990e515ee9afc9d77c1941bd78b60332f4fb2e77e825f7f945430c7ae8c9', '186b3bb606ad48284ac8e6e192ffec5ed11b0f113d1438887591071c1b6575b2', '90d0d3fb695b7e03b5c2de781e7a8839c18b2d4c713fb2e27f28d9a992860963', 3, 1559579703, 'AAAACxhrO7YGrUgoSsjm4ZL/7F7RGw8RPRQ4iHWRBxwbZXWyZdLxdBVSiPnsrA6mEcC24V5yM/OP1/9WlqlVHiezRRAAAAAAXPVMNwAAAAAAAAAALLKPbMojH+RR+TSBDKGB/tufH2mL12ccCHr1Jn27yPCQ0NP7aVt+A7XC3ngeeog5wYstTHE/suJ/KNmpkoYJYwAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('b6e85fd882bc3d4d779234c1f16c49082ee277216a1f9f8d1ec571617533754b', '9efe990e515ee9afc9d77c1941bd78b60332f4fb2e77e825f7f945430c7ae8c9', 'f7a622d8ae0fc033c7545f092859a411bbfb2a894d0d0ef18e4e4c46af8893e2', 4, 1559579704, 'AAAAC57+mQ5RXumvydd8GUG9eLYDMvT7LnfoJff5RUMMeujJA/YCetmPPz3dqMUTty86T8avJCHvRTHDEZBASmYNPK4AAAAAXPVMOAAAAAAAAAAALG1UZnCzCamYL0dOv0yVmx9sJIXQO2l+Gr9BTnPshPn3piLYrg/AM8dUXwkoWaQRu/sqiU0NDvGOTkxGr4iT4gAAAAQN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('5452787b07e5f0bc3359541076cb0282286e3e8647d5de09fd7801511264b544', 'b6e85fd882bc3d4d779234c1f16c49082ee277216a1f9f8d1ec571617533754b', '833e0f2c54328081ae3d8c70884614ea56c77c30a91093a6d8024ccfa2444821', 5, 1559579705, 'AAAAC7boX9iCvD1Nd5I0wfFsSQgu4nchah+fjR7FcWF1M3VLX6EpDWeDpdgOfYJIkfD2Ytg74/bF3rEDepNDsLpgHeYAAAAAXPVMOQAAAAAAAAAAtqD7ZvGzk5mv/AtZ7AfsBkliGMVUtteUvuL+rVvYC/6DPg8sVDKAga49jHCIRhTqVsd8MKkQk6bYAkzPokRIIQAAAAUN4Lazp2QAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('3255d3bc8ff43e368bb695bc050974b60397e4bbaf660b4cc3f583065d556c8b', '5452787b07e5f0bc3359541076cb0282286e3e8647d5de09fd7801511264b544', '0684b2f9d3b62507cbda9965950da266e5345052253a4b71816248d96598793f', 6, 1559579706, 'AAAAC1RSeHsH5fC8M1lUEHbLAoIobj6GR9XeCf14AVESZLVEa6Tp072W0EkuY6/2dc+oc9aXVE3Ut+w/j9EIOTqSjX4AAAAAXPVMOgAAAAAAAAAA3z9hmASpL9tAVxktxD3XSOp3itxSvEmM6AUkwBS4ERkGhLL507YlB8vamWWVDaJm5TRQUiU6S3GBYkjZZZh5PwAAAAYN4Lazp2QAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GAMRKQHSSLDLFX7LYSGRCRDITABOGHMPPVVM7NII3HIZU6RXR3RNLX4K', 2, 'AAAAABkVQPKSxrLf68SNEURomALjHY99as+1CNnRmno3juLVAAAAAAAAAAIAAAACAAAAAQAAAEi7kf1wd3SoCxmP1DpjzIghzq62R/8I74ub/Qpux+vM9QAAAABc9Uw2AAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAAB4phH9vGKk0JgsrkwYAn644NQIx7WGQ6K2L46L9EZS2YAAABA3hka/k4r11fpW39GrccmUUr2LJ2Zeb5TAgu56WVxP6Yq7q/NjgqeB/ZgRr5ilq06EQV/isVCHQw7urKjG7XqAw=='); -INSERT INTO scphistory VALUES ('GAMRKQHSSLDLFX7LYSGRCRDITABOGHMPPVVM7NII3HIZU6RXR3RNLX4K', 3, 'AAAAABkVQPKSxrLf68SNEURomALjHY99as+1CNnRmno3juLVAAAAAAAAAAMAAAACAAAAAQAAADBl0vF0FVKI+eysDqYRwLbhXnIz84/X/1aWqVUeJ7NFEAAAAABc9Uw3AAAAAAAAAAAAAAAB4phH9vGKk0JgsrkwYAn644NQIx7WGQ6K2L46L9EZS2YAAABACP8nPO+bvUQvIZ91f1sWDtrgxo0jnFFMt7wNTtZs+T/Lh3FKakSmqErJTx7X/5rnfwkX49+ujbdsZkEdwl8oAQ=='); -INSERT INTO scphistory VALUES ('GAMRKQHSSLDLFX7LYSGRCRDITABOGHMPPVVM7NII3HIZU6RXR3RNLX4K', 4, 'AAAAABkVQPKSxrLf68SNEURomALjHY99as+1CNnRmno3juLVAAAAAAAAAAQAAAACAAAAAQAAADAD9gJ62Y8/Pd2oxRO3LzpPxq8kIe9FMcMRkEBKZg08rgAAAABc9Uw4AAAAAAAAAAAAAAAB4phH9vGKk0JgsrkwYAn644NQIx7WGQ6K2L46L9EZS2YAAABAOP7+lXQaX8I6BQlpDK8bgnL6M/03MqUDBQXIAfJqh64duyw9nGvY4BLG0db5yk/opR3qa6iGHOWkY79PGgGnCg=='); -INSERT INTO scphistory VALUES ('GAMRKQHSSLDLFX7LYSGRCRDITABOGHMPPVVM7NII3HIZU6RXR3RNLX4K', 5, 'AAAAABkVQPKSxrLf68SNEURomALjHY99as+1CNnRmno3juLVAAAAAAAAAAUAAAACAAAAAQAAADBfoSkNZ4Ol2A59gkiR8PZi2Dvj9sXesQN6k0OwumAd5gAAAABc9Uw5AAAAAAAAAAAAAAAB4phH9vGKk0JgsrkwYAn644NQIx7WGQ6K2L46L9EZS2YAAABAsK/Jv0dIzU9wIvnwWlNP06Ep3DMamCKQXpQlpRY71x3BkA1puVYSTLb4+OdwzqHpo+P9nhn505Jajd9RXkvVDw=='); -INSERT INTO scphistory VALUES ('GAMRKQHSSLDLFX7LYSGRCRDITABOGHMPPVVM7NII3HIZU6RXR3RNLX4K', 6, 'AAAAABkVQPKSxrLf68SNEURomALjHY99as+1CNnRmno3juLVAAAAAAAAAAYAAAACAAAAAQAAADBrpOnTvZbQSS5jr/Z1z6hz1pdUTdS37D+P0Qg5OpKNfgAAAABc9Uw6AAAAAAAAAAAAAAAB4phH9vGKk0JgsrkwYAn644NQIx7WGQ6K2L46L9EZS2YAAABACdsuXjqqRwpabwe49WMDCdWV0rsLwo6WzlVIbeklFifk79Rvzc1cfBP8sdJY8V+8udp3HgQZ6deBv/Mc5xEEDA=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('e29847f6f18a934260b2b9306009fae38350231ed6190e8ad8be3a2fd1194b66', 6, 'AAAAAQAAAAEAAAAAGRVA8pLGst/rxI0RRGiYAuMdj31qz7UI2dGaejeO4tUAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('lastclosedledger ', '3255d3bc8ff43e368bb695bc050974b60397e4bbaf660b4cc3f583065d556c8b'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 6, - "currentBuckets": [ - { - "curr": "056cd09fa286b2de1ff329b224259b858f94ec1dcc93f0e0512b2f6819348951", - "next": { - "state": 0 - }, - "snap": "7d36bdc9b3c5c49df25b3d919d30b64dd6733232ec93a33c81a9da7379ac3c02" - }, - { - "curr": "5e9b6cf93c3d773407f0bd3735e8d02aa3ab4e6e6a4c61f0126008e4c7cf7bf0", - "next": { - "state": 1, - "output": "7d36bdc9b3c5c49df25b3d919d30b64dd6733232ec93a33c81a9da7379ac3c02" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAAAZFUDyksay3+vEjRFEaJgC4x2PfWrPtQjZ0Zp6N47i1QAAAAAAAAAGAAAAA+KYR/bxipNCYLK5MGAJ+uODUCMe1hkOiti+Oi/RGUtmAAAAAQAAAJhrpOnTvZbQSS5jr/Z1z6hz1pdUTdS37D+P0Qg5OpKNfgAAAABc9Uw6AAAAAAAAAAEAAAAAGRVA8pLGst/rxI0RRGiYAuMdj31qz7UI2dGaejeO4tUAAABA7EEhSEaR3nL6Go/F3AMeCJyMwTEpV8uGp/EKDXB8A99MeN00lNmxCMvclei6ycCaBHRpJSvgSH9nY7Qxwda1BAAAAAEAAACYa6Tp072W0EkuY6/2dc+oc9aXVE3Ut+w/j9EIOTqSjX4AAAAAXPVMOgAAAAAAAAABAAAAABkVQPKSxrLf68SNEURomALjHY99as+1CNnRmno3juLVAAAAQOxBIUhGkd5y+hqPxdwDHgicjMExKVfLhqfxCg1wfAPfTHjdNJTZsQjL3JXousnAmgR0aSUr4Eh/Z2O0McHWtQQAAABAj1accIl2WV82ZoYIOXmHghce73wqmt24AfOVs8IjOvW/OwHCG4zz4AGeB1Ym9IwBmhKPyYKrmEH/S+VaUR3nCAAAAAAZFUDyksay3+vEjRFEaJgC4x2PfWrPtQjZ0Zp6N47i1QAAAAAAAAAGAAAAAgAAAAEAAAAwa6Tp072W0EkuY6/2dc+oc9aXVE3Ut+w/j9EIOTqSjX4AAAAAXPVMOgAAAAAAAAAAAAAAAeKYR/bxipNCYLK5MGAJ+uODUCMe1hkOiti+Oi/RGUtmAAAAQAnbLl46qkcKWm8HuPVjAwnVldK7C8KOls5VSG3pJRYn5O/Ub83NXHwT/LHSWPFfvLnadx4EGenXgb/zHOcRBAwAAAABVFJ4ewfl8LwzWVQQdssCgihuPoZH1d4J/XgBURJktUQAAAAAAAAAAQAAAAEAAAABAAAAABkVQPKSxrLf68SNEURomALjHY99as+1CNnRmno3juLVAAAAAA=='); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('857fd8ff2fdf3d24a6781c955d902ae100dc2715814f25e7282b2e567479c65a', 4, 1, 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('31f210d64fced45a34ea630f944433de5f339b3480c7d3fff92f2b3426fbc594', 5, 1, 'AAAAAgAAAAMAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+LUAAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', '2zmOtK6JdWMlZDytIclOE7/AdLMj7oPhQb9wGl2QTxsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', '+Xyv+rjBYCOjeIQWXLCz/xqi2vQAD+9J0h78hH3b++oAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'vUhtvdAtRggXZxxKWn6dboZcopy0HmLXqvcKL+5bNt4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('857fd8ff2fdf3d24a6781c955d902ae100dc2715814f25e7282b2e567479c65a', 4, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAlQL5AAAAAAAAAAAAGu5L5MAAAAQFXNYQ1nN8EmRkvMcd2feWgcArIxRflch7zupcTFCkz8rBJFwobg4z+hs4Umn3TLWL5Nlr1Sf9CP8JcgGXsDSgQ=', 'hX/Y/y/fPSSmeByVXZAq4QDcJxWBTyXnKCsuVnR5xloAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAAAAAJUC+QAAAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('31f210d64fced45a34ea630f944433de5f339b3480c7d3fff92f2b3426fbc594', 5, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQGwsqMIzwrRIIdYGXSzgym6DUbMHrUre+JV1IWsNriIomdY3zGufZtCCV59ADJ9y165PVEFVsX457e4j0M/RWw0=', 'MfIQ1k/O1Fo06mMPlEQz3l8zmzSAx9P/+S8rNCb7xZQAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvi1AAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvi1AAAAAIAAAADAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAMAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAAAAAJUC+QAAAAAAEAAAAAAAAAAAAAAAIAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvi1AAAAAIAAAADAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvi1AAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAA='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/change_trust-horizon.sql b/services/horizon/internal/test/scenarios/change_trust-horizon.sql deleted file mode 100644 index 00c2a7700b..0000000000 --- a/services/horizon/internal/test/scenarios/change_trust-horizon.sql +++ /dev/null @@ -1,966 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (2, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_accounts VALUES (3, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 3, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 1, false); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 21474840577, 1, 21, '{"limit": "0.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 17179873281, 1, 22, '{"limit": "4000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 12884905985, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (3, 8589938689, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 3, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (6, '3255d3bc8ff43e368bb695bc050974b60397e4bbaf660b4cc3f583065d556c8b', '5452787b07e5f0bc3359541076cb0282286e3e8647d5de09fd7801511264b544', 0, 0, '2019-06-03 16:35:06', '2019-06-03 16:35:05.728314', '2019-06-03 16:35:05.728314', 25769803776, 16, 1000000000000000000, 500, 100, 100000000, 1000000, 11, 'AAAAC1RSeHsH5fC8M1lUEHbLAoIobj6GR9XeCf14AVESZLVEa6Tp072W0EkuY6/2dc+oc9aXVE3Ut+w/j9EIOTqSjX4AAAAAXPVMOgAAAAAAAAAA3z9hmASpL9tAVxktxD3XSOp3itxSvEmM6AUkwBS4ERkGhLL507YlB8vamWWVDaJm5TRQUiU6S3GBYkjZZZh5PwAAAAYN4Lazp2QAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); -INSERT INTO history_ledgers VALUES (5, '5452787b07e5f0bc3359541076cb0282286e3e8647d5de09fd7801511264b544', 'b6e85fd882bc3d4d779234c1f16c49082ee277216a1f9f8d1ec571617533754b', 1, 1, '2019-06-03 16:35:05', '2019-06-03 16:35:05.737241', '2019-06-03 16:35:05.737241', 21474836480, 16, 1000000000000000000, 500, 100, 100000000, 1000000, 11, 'AAAAC7boX9iCvD1Nd5I0wfFsSQgu4nchah+fjR7FcWF1M3VLX6EpDWeDpdgOfYJIkfD2Ytg74/bF3rEDepNDsLpgHeYAAAAAXPVMOQAAAAAAAAAAtqD7ZvGzk5mv/AtZ7AfsBkliGMVUtteUvuL+rVvYC/6DPg8sVDKAga49jHCIRhTqVsd8MKkQk6bYAkzPokRIIQAAAAUN4Lazp2QAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (4, 'b6e85fd882bc3d4d779234c1f16c49082ee277216a1f9f8d1ec571617533754b', '9efe990e515ee9afc9d77c1941bd78b60332f4fb2e77e825f7f945430c7ae8c9', 1, 1, '2019-06-03 16:35:04', '2019-06-03 16:35:05.754', '2019-06-03 16:35:05.754', 17179869184, 16, 1000000000000000000, 400, 100, 100000000, 1000000, 11, 'AAAAC57+mQ5RXumvydd8GUG9eLYDMvT7LnfoJff5RUMMeujJA/YCetmPPz3dqMUTty86T8avJCHvRTHDEZBASmYNPK4AAAAAXPVMOAAAAAAAAAAALG1UZnCzCamYL0dOv0yVmx9sJIXQO2l+Gr9BTnPshPn3piLYrg/AM8dUXwkoWaQRu/sqiU0NDvGOTkxGr4iT4gAAAAQN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (3, '9efe990e515ee9afc9d77c1941bd78b60332f4fb2e77e825f7f945430c7ae8c9', '186b3bb606ad48284ac8e6e192ffec5ed11b0f113d1438887591071c1b6575b2', 1, 1, '2019-06-03 16:35:03', '2019-06-03 16:35:05.763421', '2019-06-03 16:35:05.763421', 12884901888, 16, 1000000000000000000, 300, 100, 100000000, 1000000, 11, 'AAAACxhrO7YGrUgoSsjm4ZL/7F7RGw8RPRQ4iHWRBxwbZXWyZdLxdBVSiPnsrA6mEcC24V5yM/OP1/9WlqlVHiezRRAAAAAAXPVMNwAAAAAAAAAALLKPbMojH+RR+TSBDKGB/tufH2mL12ccCHr1Jn27yPCQ0NP7aVt+A7XC3ngeeog5wYstTHE/suJ/KNmpkoYJYwAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (2, '186b3bb606ad48284ac8e6e192ffec5ed11b0f113d1438887591071c1b6575b2', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 2, 2, '2019-06-03 16:35:02', '2019-06-03 16:35:05.775013', '2019-06-03 16:35:05.775013', 8589934592, 16, 1000000000000000000, 200, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76Zu5H9cHd0qAsZj9Q6Y8yIIc6utkf/CO+Lm/0KbsfrzPUAAAAAXPVMNgAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAP0PjS3Rf7hs8xVIBg2g8xKvqOO/n/g/XwgPR/HB7qe9psiJu4kNHR4oXHETId41PNJX7pJqo02A4o+5nRb3zuwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:35:05.788257', '2019-06-03 16:35:05.788257', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 21474840577, 1); -INSERT INTO history_operation_participants VALUES (2, 17179873281, 1); -INSERT INTO history_operation_participants VALUES (3, 12884905985, 1); -INSERT INTO history_operation_participants VALUES (4, 8589938689, 3); -INSERT INTO history_operation_participants VALUES (5, 8589938689, 2); -INSERT INTO history_operation_participants VALUES (6, 8589942785, 3); -INSERT INTO history_operation_participants VALUES (7, 8589942785, 1); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 7, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (21474840577, 21474840576, 1, 6, '{"limit": "0.0000000", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (17179873281, 17179873280, 1, 6, '{"limit": "4000.0000000", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 21474840576, 1); -INSERT INTO history_transaction_participants VALUES (2, 17179873280, 1); -INSERT INTO history_transaction_participants VALUES (3, 12884905984, 1); -INSERT INTO history_transaction_participants VALUES (4, 8589938688, 3); -INSERT INTO history_transaction_participants VALUES (5, 8589938688, 2); -INSERT INTO history_transaction_participants VALUES (6, 8589942784, 3); -INSERT INTO history_transaction_participants VALUES (7, 8589942784, 1); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 7, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('31f210d64fced45a34ea630f944433de5f339b3480c7d3fff92f2b3426fbc594', 5, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934595, 100, 1, '2019-06-03 16:35:05.737487', '2019-06-03 16:35:05.737487', 21474840576, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQGwsqMIzwrRIIdYGXSzgym6DUbMHrUre+JV1IWsNriIomdY3zGufZtCCV59ADJ9y165PVEFVsX457e4j0M/RWw0=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvi1AAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvi1AAAAAIAAAADAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAMAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAAAAAJUC+QAAAAAAEAAAAAAAAAAAAAAAIAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvi1AAAAAIAAAADAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvi1AAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAA=', 'AAAAAgAAAAMAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+LUAAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{bCyowjPCtEgh1gZdLODKboNRswetSt74lXUhaw2uIiiZ1jfMa59m0IJXn0AMn3LXrk9UQVWxfjnt7iPQz9FbDQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('857fd8ff2fdf3d24a6781c955d902ae100dc2715814f25e7282b2e567479c65a', 4, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934594, 100, 1, '2019-06-03 16:35:05.754151', '2019-06-03 16:35:05.754151', 17179873280, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAlQL5AAAAAAAAAAAAGu5L5MAAAAQFXNYQ1nN8EmRkvMcd2feWgcArIxRflch7zupcTFCkz8rBJFwobg4z+hs4Umn3TLWL5Nlr1Sf9CP8JcgGXsDSgQ=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAAAAAJUC+QAAAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{Vc1hDWc3wSZGS8xx3Z95aBwCsjFF+VyHvO6lxMUKTPysEkXChuDjP6GzhSafdMtYvk2WvVJ/0I/wlyAZewNKBA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:35:05.763603', '2019-06-03 16:35:05.763603', 12884905984, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{H2SYpbare/tB/Lw8x6QRvVNMjmLGqQjQGiBes63uA7XrZBuSHZ1JNR94Oi9zQ8Bp+ENfG2FUCWwu6OUGbKMEBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:35:05.775142', '2019-06-03 16:35:05.775143', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GI0HD09huYapwZoBhnoPSfJeHNRJ1JcZJRJR/bKma9Pe9Reji1n3v5uJKRbSPrCNItai4reQNCclp24WC1uaAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f97caffab8c16023a37884165cb0b3ff1aa2daf4000fef49d21efc847ddbfbea', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:35:05.775331', '2019-06-03 16:35:05.775331', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEBmKpSgvrwKO20XCOfYfXsGEEUtwYaaEfqSu6ymJmlDma+IX6I7IggbUZMocQdZ94IMAfKdQANqXbIO7ysweeMC', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{ZiqUoL68CjttFwjn2H17BhBFLcGGmhH6kruspiZpQ5mviF+iOyIIG1GTKHEHWfeCDAHynUADal2yDu8rMHnjAg==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/change_trust.rb b/services/horizon/internal/test/scenarios/change_trust.rb deleted file mode 100644 index 88d4b0fbc4..0000000000 --- a/services/horizon/internal/test/scenarios/change_trust.rb +++ /dev/null @@ -1,14 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :usd_gateway -create_account :scott - -close_ledger - -trust :scott, :usd_gateway, "USD" ; close_ledger -change_trust :scott, :usd_gateway, "USD", 4000 ; close_ledger -change_trust :scott, :usd_gateway, "USD", 0 ; close_ledger - -close_ledger diff --git a/services/horizon/internal/test/scenarios/core_database_schema_version_8-core.sql b/services/horizon/internal/test/scenarios/core_database_schema_version_8-core.sql deleted file mode 100644 index bdf5fd6016..0000000000 --- a/services/horizon/internal/test/scenarios/core_database_schema_version_8-core.sql +++ /dev/null @@ -1,222 +0,0 @@ --- This file is not generated by SCC. It's used by tests that check Core DB schema --- version compatibility. All unnecessary tables are removed. - --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.signersaccount; -DROP INDEX IF EXISTS public.sellingissuerindex; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.priceindex; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.buyingissuerindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.signers DROP CONSTRAINT IF EXISTS signers_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.signers; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - -INSERT INTO storestate VALUES ('databaseschema ', '8'); - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(32) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999979999999800, 2, 0, NULL, 'stellar.org', 'AQAAAA==', 0, 2, NULL, NULL); - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(64) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - -INSERT INTO accountdata VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 'aaa', 'bWFu', 10); - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingassettype integer NOT NULL, - sellingassetcode character varying(12), - sellingissuer character varying(56), - buyingassettype integer NOT NULL, - buyingassetcode character varying(12), - buyingissuer character varying(56), - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - -INSERT INTO offers VALUES ('GAXMF43TGZHW3QN3REOUA2U5PW5BTARXGGYJ3JIFHW3YT6QRKRL3CPPU', 1, 0, NULL, NULL, 1, 'USD', 'GAXMF43TGZHW3QN3REOUA2U5PW5BTARXGGYJ3JIFHW3YT6QRKRL3CPPU', 2000000000, 1, 2, 0.5, 0, 19); - -INSERT INTO offers VALUES ('GB2QIYT2IAUFMRXKLSLLPRECC6OCOGJMADSPTRK7TGNT2SFR2YGWDARD', 4, 1, 'USD', 'GB2QIYT2IAUFMRXKLSLLPRECC6OCOGJMADSPTRK7TGNT2SFR2YGWDARD', 0, NULL, NULL, 100000000, 1, 1, 1, 0, 24); -INSERT INTO offers VALUES ('GB2QIYT2IAUFMRXKLSLLPRECC6OCOGJMADSPTRK7TGNT2SFR2YGWDARD', 5, 1, 'USD', 'GB2QIYT2IAUFMRXKLSLLPRECC6OCOGJMADSPTRK7TGNT2SFR2YGWDARD', 0, NULL, NULL, 200000000, 2, 1, 2, 0, 24); -INSERT INTO offers VALUES ('GB2QIYT2IAUFMRXKLSLLPRECC6OCOGJMADSPTRK7TGNT2SFR2YGWDARD', 6, 0, NULL, NULL, 1, 'USD', 'GB2QIYT2IAUFMRXKLSLLPRECC6OCOGJMADSPTRK7TGNT2SFR2YGWDARD', 300000000, 1, 1, 1, 0, 24); -INSERT INTO offers VALUES ('GB2QIYT2IAUFMRXKLSLLPRECC6OCOGJMADSPTRK7TGNT2SFR2YGWDARD', 7, 0, NULL, NULL, 1, 'USD', 'GB2QIYT2IAUFMRXKLSLLPRECC6OCOGJMADSPTRK7TGNT2SFR2YGWDARD', 400000000, 3, 1, 3, 0, 24); - --- --- Name: signers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE signers ( - accountid character varying(56) NOT NULL, - publickey character varying(56) NOT NULL, - weight integer NOT NULL -); - --- --- Name: signers signers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY signers - ADD CONSTRAINT signers_pkey PRIMARY KEY (accountid, publickey); - - --- --- Name: signersaccount; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX signersaccount ON signers USING btree (accountid); - -INSERT INTO signers VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 'GAFEES4MDE5Z7Q6JBB2BYMLS7YWEHTPNR7ICANZA7TAOLMSRELE4H4S2', 2); diff --git a/services/horizon/internal/test/scenarios/core_database_schema_version_9-core.sql b/services/horizon/internal/test/scenarios/core_database_schema_version_9-core.sql deleted file mode 100644 index a7ad15b4dc..0000000000 --- a/services/horizon/internal/test/scenarios/core_database_schema_version_9-core.sql +++ /dev/null @@ -1,227 +0,0 @@ --- This file is not generated by SCC. It's used by tests that check Core DB schema --- version compatibility. All unnecessary tables are removed. - - --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.sellingissuerindex; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.priceindex; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.buyingissuerindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - -INSERT INTO accountdata VALUES ('GDZOBPTVEECUYFCHSQ5NCEUVAV4JKRZI6KO5HFOM7HGQT22E3XIGRHNU', 'amFt', 'bWFu', 10); - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - -INSERT INTO accounts VALUES ('GDZOBPTVEECUYFCHSQ5NCEUVAV4JKRZI6KO5HFOM7HGQT22E3XIGRHNU', 999999979999999800, 2, 0, NULL, 'bG9ic3RyLmNv', 'AQAAAA==', 0, 2, NULL, NULL, 'AAAAAQAAAAC+GwdMJxaEbnW0z0RP6jJvTg+s8mjVw7+wPpJEbZAJdQAAAAo='); --- NULL signers: -INSERT INTO accounts VALUES ('GD7HOGYRECGFKFR2GGOWEF2FT3DVR3GU4K7BVRGGPWVSXAVKGSYKTXOH', 999999979999999800, 2, 0, NULL, 'bG9ic3RyLmNv', 'AQAAAA==', 0, 2, NULL, NULL, NULL); - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - -INSERT INTO offers VALUES ('GAXMF43TGZHW3QN3REOUA2U5PW5BTARXGGYJ3JIFHW3YT6QRKRL3CPPU', 1, 'AAAAAA==', 'AAAAAVVTRAAAAAAALsLzczZPbcG7iR1Aap19uhmCNzGwnaUFPbeJ+hFUV7E=', 2000000000, 1, 2, 0.5, 0, 19); - -INSERT INTO offers VALUES ('GB2QIYT2IAUFMRXKLSLLPRECC6OCOGJMADSPTRK7TGNT2SFR2YGWDARD', 4, 'AAAAAVVTRAAAAAAAdQRiekAoVkbqXJa3xIIXnCcZLADk+cVfmZs9SLHWDWE=', 'AAAAAA==', 100000000, 1, 1, 1, 0, 24); -INSERT INTO offers VALUES ('GB2QIYT2IAUFMRXKLSLLPRECC6OCOGJMADSPTRK7TGNT2SFR2YGWDARD', 5, 'AAAAAVVTRAAAAAAAdQRiekAoVkbqXJa3xIIXnCcZLADk+cVfmZs9SLHWDWE=', 'AAAAAA==', 200000000, 2, 1, 2, 0, 24); -INSERT INTO offers VALUES ('GB2QIYT2IAUFMRXKLSLLPRECC6OCOGJMADSPTRK7TGNT2SFR2YGWDARD', 6, 'AAAAAA==', 'AAAAAVVTRAAAAAAAdQRiekAoVkbqXJa3xIIXnCcZLADk+cVfmZs9SLHWDWE=', 300000000, 1, 1, 1, 0, 24); -INSERT INTO offers VALUES ('GB2QIYT2IAUFMRXKLSLLPRECC6OCOGJMADSPTRK7TGNT2SFR2YGWDARD', 7, 'AAAAAA==', 'AAAAAVVTRAAAAAAAdQRiekAoVkbqXJa3xIIXnCcZLADk+cVfmZs9SLHWDWE=', 400000000, 3, 1, 3, 0, 24); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - -INSERT INTO storestate VALUES ('databaseschema ', '9'); - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/failed_transactions-horizon.sql b/services/horizon/internal/test/scenarios/failed_transactions-horizon.sql index 5886889086..a55231de42 100644 --- a/services/horizon/internal/test/scenarios/failed_transactions-horizon.sql +++ b/services/horizon/internal/test/scenarios/failed_transactions-horizon.sql @@ -1028,6 +1028,9 @@ CREATE TABLE accounts_signers ( -- we will query by signer so that is why signer is the first item in the composite key PRIMARY KEY (signer, account) ); +ALTER TABLE history_transactions ADD account_muxed varchar(69) NULL, ADD fee_account_muxed varchar(69) NULL; +ALTER TABLE history_operations ADD source_account_muxed varchar(69) NULL; +ALTER TABLE history_effects ADD address_muxed varchar(69) NULL; -- -- PostgreSQL database dump complete diff --git a/services/horizon/internal/test/scenarios/kahuna-2-core.sql b/services/horizon/internal/test/scenarios/kahuna-2-core.sql deleted file mode 100644 index 1824f92821..0000000000 --- a/services/horizon/internal/test/scenarios/kahuna-2-core.sql +++ /dev/null @@ -1,727 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accountdata VALUES ('GD6NTRJW5Z6NCWH4USWMNEYF77RUR2MTO6NP4KEDVJATTCUXDRO3YIFS', 'ZG9uZQ==', 'dHJ1ZQ==', 5); - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999989999999900, 1, 0, NULL, '', 'AQAAAA==', 0, 3, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GD6NTRJW5Z6NCWH4USWMNEYF77RUR2MTO6NP4KEDVJATTCUXDRO3YIFS', 9999999800, 12884901890, 2, NULL, '', 'AQAAAA==', 0, 5, NULL, NULL, 'AAAAAQAAAAK8YtS4DZ422inBbF1NnxFzHzYFLHJAGnbCPA+1qbdEIwAAAAE='); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('35f3b67394a33eaa987f4e33b08aed4ae7e42ab2de1ce5cbc8d7fb4cdedc4b47', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 'eff8bb6dff2733ff1f3ffa5141f34ae7571ee3d8cae6dbd129bac511fa0bfd64', 2, 1559579650, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZuZRHr9UdXKbTKiclfOjy72YZFJUkJPVcKT5htvorm1QAAAAAXPVMAgAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAA3z9hmASpL9tAVxktxD3XSOp3itxSvEmM6AUkwBS4ERnv+Ltt/ycz/x8/+lFB80rnVx7j2Mrm29EpusUR+gv9ZAAAAAIN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('11b30d3f607073a6d8047839090736b0cf93ae96e14004798176174970bb8b2f', '35f3b67394a33eaa987f4e33b08aed4ae7e42ab2de1ce5cbc8d7fb4cdedc4b47', '6df70c934dccb6a0f43f15f9525326ad9cd07646e664e490ffb9f70afedbef82', 3, 1559579651, 'AAAACzXztnOUoz6qmH9OM7CK7Urn5Cqy3hzly8jX+0ze3EtHbkjkAt1T5xqAMvZbyaibTYR4siB6UZQ6i9uDgpciZcwAAAAAXPVMAwAAAAAAAAAAlzJ1vISHXzElAf05LhN7qiqWqKvjHhTijb/BgG6FsuJt9wyTTcy2oPQ/FflSUyatnNB2RuZk5JD/ufcK/tvvggAAAAMN4Lazp2QAAAAAAAAAAABkAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('692c12ea9b911175075910cc1b9d5f6f326fe723acaa8f739e370eec369d8d46', '11b30d3f607073a6d8047839090736b0cf93ae96e14004798176174970bb8b2f', '28b63ad5cd29b8ba0237fcd1d4bc04e586892b4c4144d1603105209162872ca0', 4, 1559579652, 'AAAACxGzDT9gcHOm2AR4OQkHNrDPk66W4UAEeYF2F0lwu4svoRSWfkzXxzLrvmQlTbRa24SQC+hnjId7Fz2OMlxERhAAAAAAXPVMBAAAAAAAAAAApOCJokUPy1wA/XbpkumCKr9Nv3B8+fRGt4d1ygPrKBwotjrVzSm4ugI3/NHUvATlhokrTEFE0WAxBSCRYocsoAAAAAQN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('90e59c32688ab5d10efdea02d65dfd3db1ba80f0ddf2461265e1da512155dd16', '692c12ea9b911175075910cc1b9d5f6f326fe723acaa8f739e370eec369d8d46', '562d5344fb67f34162494a21c7511a6692a4b059794160a185e3b9d1662585c2', 5, 1559579653, 'AAAAC2ksEuqbkRF1B1kQzBudX28yb+cjrKqPc543Duw2nY1Gt/oVFkRuE8I+RLpLO1D1xqCntezzg+kvP8aaL6cYcaQAAAAAXPVMBQAAAAAAAAAAnzt6UJX5by6BwcesLvsJTMJPn/Y/s/aBHlEOtmT5mwdWLVNE+2fzQWJJSiHHURpmkqSwWXlBYKGF47nRZiWFwgAAAAUN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GAXSS2S45SRXVUMU2YYOKHU7DZWOIQC53FXVLG7N5HSS26IWALYOCHIK', 2, 'AAAAAC8palzso3rRlNYw5R6fHmzkQF3Zb1Wb7enlLXkWAvDhAAAAAAAAAAIAAAACAAAAAQAAAEi5lEev1R1cptMqJyV86PLvZhkUlSQk9VwpPmG2+iubVAAAAABc9UwCAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABD1nV889bSHky9AqDzzV+TcQCYDhCBis2UOezFuOq5fIAAABABdfFIyqhS72c4oNkczzKYzOPvCAd8WkuIlLuk/V787NXH4ZSqHpEN/7vitedmznMnCSVSiZJdY1Hx6u5bVjnAQ=='); -INSERT INTO scphistory VALUES ('GAXSS2S45SRXVUMU2YYOKHU7DZWOIQC53FXVLG7N5HSS26IWALYOCHIK', 3, 'AAAAAC8palzso3rRlNYw5R6fHmzkQF3Zb1Wb7enlLXkWAvDhAAAAAAAAAAMAAAACAAAAAQAAADBuSOQC3VPnGoAy9lvJqJtNhHiyIHpRlDqL24OClyJlzAAAAABc9UwDAAAAAAAAAAAAAAABD1nV889bSHky9AqDzzV+TcQCYDhCBis2UOezFuOq5fIAAABAA66ZGGZS4aexGe9rG4SzYPzV9yEdEvuTPJ2opCOrcAx6Fxf/B7Ovsnv6JEyjcfrCRd2LSVpu4JjjUZ/ZPe+QCw=='); -INSERT INTO scphistory VALUES ('GAXSS2S45SRXVUMU2YYOKHU7DZWOIQC53FXVLG7N5HSS26IWALYOCHIK', 4, 'AAAAAC8palzso3rRlNYw5R6fHmzkQF3Zb1Wb7enlLXkWAvDhAAAAAAAAAAQAAAACAAAAAQAAADChFJZ+TNfHMuu+ZCVNtFrbhJAL6GeMh3sXPY4yXERGEAAAAABc9UwEAAAAAAAAAAAAAAABD1nV889bSHky9AqDzzV+TcQCYDhCBis2UOezFuOq5fIAAABA7TpGdIoutG8J+jcNKoU1VeIq//aEKNTiP31b6VTC7fO4X4OyIbQBmLzQOoGvITboi14Qhon6PddyocncX3SyCg=='); -INSERT INTO scphistory VALUES ('GAXSS2S45SRXVUMU2YYOKHU7DZWOIQC53FXVLG7N5HSS26IWALYOCHIK', 5, 'AAAAAC8palzso3rRlNYw5R6fHmzkQF3Zb1Wb7enlLXkWAvDhAAAAAAAAAAUAAAACAAAAAQAAADC3+hUWRG4Twj5Euks7UPXGoKe17POD6S8/xpovpxhxpAAAAABc9UwFAAAAAAAAAAAAAAABD1nV889bSHky9AqDzzV+TcQCYDhCBis2UOezFuOq5fIAAABAjOLNbe4NBurgvqIblTzze0n7i3jAZRDZDTvzW+f6xZaH1v4kxB1S/woA9gqN7IsP14RHJ43nUV6wlkyS7+5RDw=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('0f59d5f3cf5b487932f40a83cf357e4dc402603842062b3650e7b316e3aae5f2', 5, 'AAAAAQAAAAEAAAAALylqXOyjetGU1jDlHp8ebORAXdlvVZvt6eUteRYC8OEAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('lastclosedledger ', '90e59c32688ab5d10efdea02d65dfd3db1ba80f0ddf2461265e1da512155dd16'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 5, - "currentBuckets": [ - { - "curr": "bb27c0e46bfdf4f6ec3301b40609006bc5c33f59776c2687d7003f3333673ced", - "next": { - "state": 0 - }, - "snap": "db8f2c7d69f4f931e8e11d78ee798e6c2d64b62e42c654cc1b8dcde9787e8a43" - }, - { - "curr": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9", - "next": { - "state": 1, - "output": "db8f2c7d69f4f931e8e11d78ee798e6c2d64b62e42c654cc1b8dcde9787e8a43" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAAAvKWpc7KN60ZTWMOUenx5s5EBd2W9Vm+3p5S15FgLw4QAAAAAAAAAFAAAAAw9Z1fPPW0h5MvQKg881fk3EAmA4QgYrNlDnsxbjquXyAAAAAQAAAJi3+hUWRG4Twj5Euks7UPXGoKe17POD6S8/xpovpxhxpAAAAABc9UwFAAAAAAAAAAEAAAAALylqXOyjetGU1jDlHp8ebORAXdlvVZvt6eUteRYC8OEAAABAKFrOJO1ddvLL+PsPj2+4dzOpAbYruX1Muah5tw8HJlicwXlNQm9uEVjv0CaHwkIfXM4OWnSD1q5tT9M/fZ98AAAAAAEAAACYt/oVFkRuE8I+RLpLO1D1xqCntezzg+kvP8aaL6cYcaQAAAAAXPVMBQAAAAAAAAABAAAAAC8palzso3rRlNYw5R6fHmzkQF3Zb1Wb7enlLXkWAvDhAAAAQChaziTtXXbyy/j7D49vuHczqQG2K7l9TLmoebcPByZYnMF5TUJvbhFY79Amh8JCH1zODlp0g9aubU/TP32ffAAAAABAjOL1ltRJwEgn9xwArWzZep2MVc4uJGr1Zf7oWw41MVPSw+Vv3c8PUTtUU2ov4ub122/JS3YGDygWjmEHQTsmAgAAAAAvKWpc7KN60ZTWMOUenx5s5EBd2W9Vm+3p5S15FgLw4QAAAAAAAAAFAAAAAgAAAAEAAAAwt/oVFkRuE8I+RLpLO1D1xqCntezzg+kvP8aaL6cYcaQAAAAAXPVMBQAAAAAAAAAAAAAAAQ9Z1fPPW0h5MvQKg881fk3EAmA4QgYrNlDnsxbjquXyAAAAQIzizW3uDQbq4L6iG5U883tJ+4t4wGUQ2Q0781vn+sWWh9b+JMQdUv8KAPYKjeyLD9eERyeN51FesJZMku/uUQ8AAAABaSwS6puREXUHWRDMG51fbzJv5yOsqo9znjcO7DadjUYAAAABAAAAAPzZxTbufNFY/KSsxpMF/+NI6ZN3mv4og6pBOYqXHF28AAAAZAAAAAMAAAACAAAAAAAAAAAAAAABAAAAAAAAAAoAAAAEZG9uZQAAAAEAAAAEdHJ1ZQAAAAAAAAABqbdEIwAAACC5TSe5k00+CKUuUtfafav6xITv43pTgO6QiPes4u/N6QAAAAEAAAABAAAAAQAAAAAvKWpc7KN60ZTWMOUenx5s5EBd2W9Vm+3p5S15FgLw4QAAAAA='); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('54c49533d937a906c0e6e501322bb600ffe332bf888cb474bd4261d42f542470', 3, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('59de4450bcc1830b6da83fb481aab833db04dadf1e88d568a00274d4038d531e', 4, 1, 'AAAAAgAAAAMAAAADAAAAAAAAAAD82cU27nzRWPykrMaTBf/jSOmTd5r+KIOqQTmKlxxdvAAAAAJUC+QAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAD82cU27nzRWPykrMaTBf/jSOmTd5r+KIOqQTmKlxxdvAAAAAJUC+OcAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('b0879add9f3957c9796d1d1fb23720dbed15d07793c742773455f2706c0e9a25', 5, 1, 'AAAAAgAAAAMAAAAEAAAAAAAAAAD82cU27nzRWPykrMaTBf/jSOmTd5r+KIOqQTmKlxxdvAAAAAJUC+OcAAAAAwAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAACvGLUuA2eNtopwWxdTZ8Rcx82BSxyQBp2wjwPtam3RCMAAAABAAAAAAAAAAAAAAABAAAABQAAAAAAAAAA/NnFNu580Vj8pKzGkwX/40jpk3ea/iiDqkE5ipccXbwAAAACVAvjOAAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAABAAAAArxi1LgNnjbaKcFsXU2fEXMfNgUsckAadsI8D7Wpt0QjAAAAAQAAAAAAAAAA'); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('54c49533d937a906c0e6e501322bb600ffe332bf888cb474bd4261d42f542470', 3, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA/NnFNu580Vj8pKzGkwX/40jpk3ea/iiDqkE5ipccXbwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEDi0+98/ltS2PZOxNCNogdC0ctkOWrNnQ+3eVu2PI3+LNdVssYOrw4gwvZFULsMpS166y7rVfyn6AIp7gqV5pMD', 'VMSVM9k3qQbA5uUBMiu2AP/jMr+IjLR0vUJh1C9UJHAAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAYvwdC9CRsrYcDdZWNGsqaNfTR8bywsjubQRHAlb8BfcN4Lazp2P/nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAYvwdC9CRsrYcDdZWNGsqaNfTR8bywsjubQRHAlb8BfcN4Lazp2P/nAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBucAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAD82cU27nzRWPykrMaTBf/jSOmTd5r+KIOqQTmKlxxdvAAAAAJUC+QAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('59de4450bcc1830b6da83fb481aab833db04dadf1e88d568a00274d4038d531e', 4, 1, 'AAAAAPzZxTbufNFY/KSsxpMF/+NI6ZN3mv4og6pBOYqXHF28AAAAZAAAAAMAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAK8YtS4DZ422inBbF1NnxFzHzYFLHJAGnbCPA+1qbdEIwAAAAEAAAAAAAAAAZccXbwAAABAeVu+uPT8KOhoKoNJidCWqVs71WAIqQns2Zq4mM3LBluMVDHej/SJhUxiKlsSR5MJwQU3trQbPsOAwb56BinbCw==', 'Wd5EULzBgwttqD+0gaq4M9sE2t8eiNVooAJ01AONUx4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAA/NnFNu580Vj8pKzGkwX/40jpk3ea/iiDqkE5ipccXbwAAAACVAvjnAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAA/NnFNu580Vj8pKzGkwX/40jpk3ea/iiDqkE5ipccXbwAAAACVAvjnAAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAAAAAAAAD82cU27nzRWPykrMaTBf/jSOmTd5r+KIOqQTmKlxxdvAAAAAJUC+OcAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAD82cU27nzRWPykrMaTBf/jSOmTd5r+KIOqQTmKlxxdvAAAAAJUC+OcAAAAAwAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAACvGLUuA2eNtopwWxdTZ8Rcx82BSxyQBp2wjwPtam3RCMAAAABAAAAAAAAAAA='); -INSERT INTO txhistory VALUES ('b0879add9f3957c9796d1d1fb23720dbed15d07793c742773455f2706c0e9a25', 5, 1, 'AAAAAPzZxTbufNFY/KSsxpMF/+NI6ZN3mv4og6pBOYqXHF28AAAAZAAAAAMAAAACAAAAAAAAAAAAAAABAAAAAAAAAAoAAAAEZG9uZQAAAAEAAAAEdHJ1ZQAAAAAAAAABqbdEIwAAACC5TSe5k00+CKUuUtfafav6xITv43pTgO6QiPes4u/N6Q==', 'sIea3Z85V8l5bR0fsjcg2+0V0HeTx0J3NFXycGwOmiUAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAoAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAA/NnFNu580Vj8pKzGkwX/40jpk3ea/iiDqkE5ipccXbwAAAACVAvjOAAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAABAAAAArxi1LgNnjbaKcFsXU2fEXMfNgUsckAadsI8D7Wpt0QjAAAAAQAAAAAAAAAAAAAAAQAAAAUAAAAAAAAAAPzZxTbufNFY/KSsxpMF/+NI6ZN3mv4og6pBOYqXHF28AAAAAlQL4zgAAAADAAAAAgAAAAEAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAK8YtS4DZ422inBbF1NnxFzHzYFLHJAGnbCPA+1qbdEIwAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAwAAAAUAAAAAAAAAAPzZxTbufNFY/KSsxpMF/+NI6ZN3mv4og6pBOYqXHF28AAAAAlQL4zgAAAADAAAAAgAAAAEAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAK8YtS4DZ422inBbF1NnxFzHzYFLHJAGnbCPA+1qbdEIwAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAD82cU27nzRWPykrMaTBf/jSOmTd5r+KIOqQTmKlxxdvAAAAAJUC+M4AAAAAwAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAACvGLUuA2eNtopwWxdTZ8Rcx82BSxyQBp2wjwPtam3RCMAAAABAAAAAAAAAAAAAAAAAAAABQAAAAMAAAAA/NnFNu580Vj8pKzGkwX/40jpk3ea/iiDqkE5ipccXbwAAAAEZG9uZQAAAAR0cnVlAAAAAAAAAAA='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/kahuna-2-horizon.sql b/services/horizon/internal/test/scenarios/kahuna-2-horizon.sql deleted file mode 100644 index 374827db66..0000000000 --- a/services/horizon/internal/test/scenarios/kahuna-2-horizon.sql +++ /dev/null @@ -1,951 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GD6NTRJW5Z6NCWH4USWMNEYF77RUR2MTO6NP4KEDVJATTCUXDRO3YIFS'); -INSERT INTO history_accounts VALUES (2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 2, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 1, false); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 21474840577, 1, 40, '{"name": "done", "value": "dHJ1ZQ=="}'); -INSERT INTO history_effects VALUES (1, 17179873281, 1, 12, '{"weight": 1, "public_key": "GD6NTRJW5Z6NCWH4USWMNEYF77RUR2MTO6NP4KEDVJATTCUXDRO3YIFS"}'); -INSERT INTO history_effects VALUES (1, 17179873281, 2, 10, '{"weight": 1, "public_key": "XC6GFVFYBWPDNWRJYFWF2TM7CFZR6NQFFRZEAGTWYI6A7NNJW5CCGCON"}'); -INSERT INTO history_effects VALUES (1, 12884905985, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (2, 12884905985, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 12884905985, 3, 10, '{"weight": 1, "public_key": "GD6NTRJW5Z6NCWH4USWMNEYF77RUR2MTO6NP4KEDVJATTCUXDRO3YIFS"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (5, '90e59c32688ab5d10efdea02d65dfd3db1ba80f0ddf2461265e1da512155dd16', '692c12ea9b911175075910cc1b9d5f6f326fe723acaa8f739e370eec369d8d46', 1, 1, '2019-06-03 16:34:13', '2019-06-03 16:34:13.450066', '2019-06-03 16:34:13.450066', 21474836480, 16, 1000000000000000000, 300, 100, 100000000, 1000000, 11, 'AAAAC2ksEuqbkRF1B1kQzBudX28yb+cjrKqPc543Duw2nY1Gt/oVFkRuE8I+RLpLO1D1xqCntezzg+kvP8aaL6cYcaQAAAAAXPVMBQAAAAAAAAAAnzt6UJX5by6BwcesLvsJTMJPn/Y/s/aBHlEOtmT5mwdWLVNE+2fzQWJJSiHHURpmkqSwWXlBYKGF47nRZiWFwgAAAAUN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (4, '692c12ea9b911175075910cc1b9d5f6f326fe723acaa8f739e370eec369d8d46', '11b30d3f607073a6d8047839090736b0cf93ae96e14004798176174970bb8b2f', 1, 1, '2019-06-03 16:34:12', '2019-06-03 16:34:13.467526', '2019-06-03 16:34:13.467527', 17179869184, 16, 1000000000000000000, 200, 100, 100000000, 1000000, 11, 'AAAACxGzDT9gcHOm2AR4OQkHNrDPk66W4UAEeYF2F0lwu4svoRSWfkzXxzLrvmQlTbRa24SQC+hnjId7Fz2OMlxERhAAAAAAXPVMBAAAAAAAAAAApOCJokUPy1wA/XbpkumCKr9Nv3B8+fRGt4d1ygPrKBwotjrVzSm4ugI3/NHUvATlhokrTEFE0WAxBSCRYocsoAAAAAQN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (3, '11b30d3f607073a6d8047839090736b0cf93ae96e14004798176174970bb8b2f', '35f3b67394a33eaa987f4e33b08aed4ae7e42ab2de1ce5cbc8d7fb4cdedc4b47', 1, 1, '2019-06-03 16:34:11', '2019-06-03 16:34:13.478681', '2019-06-03 16:34:13.478681', 12884901888, 16, 1000000000000000000, 100, 100, 100000000, 1000000, 11, 'AAAACzXztnOUoz6qmH9OM7CK7Urn5Cqy3hzly8jX+0ze3EtHbkjkAt1T5xqAMvZbyaibTYR4siB6UZQ6i9uDgpciZcwAAAAAXPVMAwAAAAAAAAAAlzJ1vISHXzElAf05LhN7qiqWqKvjHhTijb/BgG6FsuJt9wyTTcy2oPQ/FflSUyatnNB2RuZk5JD/ufcK/tvvggAAAAMN4Lazp2QAAAAAAAAAAABkAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (2, '35f3b67394a33eaa987f4e33b08aed4ae7e42ab2de1ce5cbc8d7fb4cdedc4b47', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 0, 0, '2019-06-03 16:34:10', '2019-06-03 16:34:13.490365', '2019-06-03 16:34:13.490365', 8589934592, 16, 1000000000000000000, 0, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZuZRHr9UdXKbTKiclfOjy72YZFJUkJPVcKT5htvorm1QAAAAAXPVMAgAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAA3z9hmASpL9tAVxktxD3XSOp3itxSvEmM6AUkwBS4ERnv+Ltt/ycz/x8/+lFB80rnVx7j2Mrm29EpusUR+gv9ZAAAAAIN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:34:13.498238', '2019-06-03 16:34:13.498239', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 21474840577, 1); -INSERT INTO history_operation_participants VALUES (2, 17179873281, 1); -INSERT INTO history_operation_participants VALUES (3, 12884905985, 2); -INSERT INTO history_operation_participants VALUES (4, 12884905985, 1); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 4, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (21474840577, 21474840576, 1, 10, '{"name": "done", "value": "dHJ1ZQ=="}', 'GD6NTRJW5Z6NCWH4USWMNEYF77RUR2MTO6NP4KEDVJATTCUXDRO3YIFS'); -INSERT INTO history_operations VALUES (17179873281, 17179873280, 1, 5, '{"signer_key": "XC6GFVFYBWPDNWRJYFWF2TM7CFZR6NQFFRZEAGTWYI6A7NNJW5CCGCON", "signer_weight": 1}', 'GD6NTRJW5Z6NCWH4USWMNEYF77RUR2MTO6NP4KEDVJATTCUXDRO3YIFS'); -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GD6NTRJW5Z6NCWH4USWMNEYF77RUR2MTO6NP4KEDVJATTCUXDRO3YIFS", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 21474840576, 1); -INSERT INTO history_transaction_participants VALUES (2, 17179873280, 1); -INSERT INTO history_transaction_participants VALUES (3, 12884905984, 2); -INSERT INTO history_transaction_participants VALUES (4, 12884905984, 1); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 4, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('b0879add9f3957c9796d1d1fb23720dbed15d07793c742773455f2706c0e9a25', 5, 1, 'GD6NTRJW5Z6NCWH4USWMNEYF77RUR2MTO6NP4KEDVJATTCUXDRO3YIFS', 12884901890, 100, 1, '2019-06-03 16:34:13.450322', '2019-06-03 16:34:13.450323', 21474840576, 'AAAAAPzZxTbufNFY/KSsxpMF/+NI6ZN3mv4og6pBOYqXHF28AAAAZAAAAAMAAAACAAAAAAAAAAAAAAABAAAAAAAAAAoAAAAEZG9uZQAAAAEAAAAEdHJ1ZQAAAAAAAAABqbdEIwAAACC5TSe5k00+CKUuUtfafav6xITv43pTgO6QiPes4u/N6Q==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAKAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAA/NnFNu580Vj8pKzGkwX/40jpk3ea/iiDqkE5ipccXbwAAAACVAvjOAAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAABAAAAArxi1LgNnjbaKcFsXU2fEXMfNgUsckAadsI8D7Wpt0QjAAAAAQAAAAAAAAAAAAAAAQAAAAUAAAAAAAAAAPzZxTbufNFY/KSsxpMF/+NI6ZN3mv4og6pBOYqXHF28AAAAAlQL4zgAAAADAAAAAgAAAAEAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAK8YtS4DZ422inBbF1NnxFzHzYFLHJAGnbCPA+1qbdEIwAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAwAAAAUAAAAAAAAAAPzZxTbufNFY/KSsxpMF/+NI6ZN3mv4og6pBOYqXHF28AAAAAlQL4zgAAAADAAAAAgAAAAEAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAK8YtS4DZ422inBbF1NnxFzHzYFLHJAGnbCPA+1qbdEIwAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAD82cU27nzRWPykrMaTBf/jSOmTd5r+KIOqQTmKlxxdvAAAAAJUC+M4AAAAAwAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAACvGLUuA2eNtopwWxdTZ8Rcx82BSxyQBp2wjwPtam3RCMAAAABAAAAAAAAAAAAAAAAAAAABQAAAAMAAAAA/NnFNu580Vj8pKzGkwX/40jpk3ea/iiDqkE5ipccXbwAAAAEZG9uZQAAAAR0cnVlAAAAAAAAAAA=', 'AAAAAgAAAAMAAAAEAAAAAAAAAAD82cU27nzRWPykrMaTBf/jSOmTd5r+KIOqQTmKlxxdvAAAAAJUC+OcAAAAAwAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAACvGLUuA2eNtopwWxdTZ8Rcx82BSxyQBp2wjwPtam3RCMAAAABAAAAAAAAAAAAAAABAAAABQAAAAAAAAAA/NnFNu580Vj8pKzGkwX/40jpk3ea/iiDqkE5ipccXbwAAAACVAvjOAAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAABAAAAArxi1LgNnjbaKcFsXU2fEXMfNgUsckAadsI8D7Wpt0QjAAAAAQAAAAAAAAAA', '{uU0nuZNNPgilLlLX2n2r+sSE7+N6U4DukIj3rOLvzek=}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('59de4450bcc1830b6da83fb481aab833db04dadf1e88d568a00274d4038d531e', 4, 1, 'GD6NTRJW5Z6NCWH4USWMNEYF77RUR2MTO6NP4KEDVJATTCUXDRO3YIFS', 12884901889, 100, 1, '2019-06-03 16:34:13.467672', '2019-06-03 16:34:13.467672', 17179873280, 'AAAAAPzZxTbufNFY/KSsxpMF/+NI6ZN3mv4og6pBOYqXHF28AAAAZAAAAAMAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAK8YtS4DZ422inBbF1NnxFzHzYFLHJAGnbCPA+1qbdEIwAAAAEAAAAAAAAAAZccXbwAAABAeVu+uPT8KOhoKoNJidCWqVs71WAIqQns2Zq4mM3LBluMVDHej/SJhUxiKlsSR5MJwQU3trQbPsOAwb56BinbCw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAA/NnFNu580Vj8pKzGkwX/40jpk3ea/iiDqkE5ipccXbwAAAACVAvjnAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAA/NnFNu580Vj8pKzGkwX/40jpk3ea/iiDqkE5ipccXbwAAAACVAvjnAAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAAAAAAAAD82cU27nzRWPykrMaTBf/jSOmTd5r+KIOqQTmKlxxdvAAAAAJUC+OcAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAD82cU27nzRWPykrMaTBf/jSOmTd5r+KIOqQTmKlxxdvAAAAAJUC+OcAAAAAwAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAACvGLUuA2eNtopwWxdTZ8Rcx82BSxyQBp2wjwPtam3RCMAAAABAAAAAAAAAAA=', 'AAAAAgAAAAMAAAADAAAAAAAAAAD82cU27nzRWPykrMaTBf/jSOmTd5r+KIOqQTmKlxxdvAAAAAJUC+QAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAD82cU27nzRWPykrMaTBf/jSOmTd5r+KIOqQTmKlxxdvAAAAAJUC+OcAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{eVu+uPT8KOhoKoNJidCWqVs71WAIqQns2Zq4mM3LBluMVDHej/SJhUxiKlsSR5MJwQU3trQbPsOAwb56BinbCw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('54c49533d937a906c0e6e501322bb600ffe332bf888cb474bd4261d42f542470', 3, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:34:13.478841', '2019-06-03 16:34:13.478841', 12884905984, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA/NnFNu580Vj8pKzGkwX/40jpk3ea/iiDqkE5ipccXbwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEDi0+98/ltS2PZOxNCNogdC0ctkOWrNnQ+3eVu2PI3+LNdVssYOrw4gwvZFULsMpS166y7rVfyn6AIp7gqV5pMD', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAYvwdC9CRsrYcDdZWNGsqaNfTR8bywsjubQRHAlb8BfcN4Lazp2P/nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAYvwdC9CRsrYcDdZWNGsqaNfTR8bywsjubQRHAlb8BfcN4Lazp2P/nAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBucAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAD82cU27nzRWPykrMaTBf/jSOmTd5r+KIOqQTmKlxxdvAAAAAJUC+QAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{4tPvfP5bUtj2TsTQjaIHQtHLZDlqzZ0Pt3lbtjyN/izXVbLGDq8OIML2RVC7DKUteusu61X8p+gCKe4KleaTAw==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/kahuna-2.rb b/services/horizon/internal/test/scenarios/kahuna-2.rb deleted file mode 100644 index ca9aa32497..0000000000 --- a/services/horizon/internal/test/scenarios/kahuna-2.rb +++ /dev/null @@ -1,44 +0,0 @@ -# This is the 2nd big kahuna test scenario. It continues where the first big kahuna recipe left off `kahuna.rb` due to an unfortunate edge case. -# -use_manual_close -KP = Stellar::KeyPair -close_ledger #2 - - -# one-time signer being consumed - - # Public Key GD6NTRJW5Z6NCWH4USWMNEYF77RUR2MTO6NP4KEDVJATTCUXDRO3YIFS - # Secret Key SAOCKUHEWRFMHSDBG33XFOUZDOXRZPKIXR3FUBS5QJ4IVKBGZDZPMLT3 - - account :onetime, KP.from_seed("SAOCKUHEWRFMHSDBG33XFOUZDOXRZPKIXR3FUBS5QJ4IVKBGZDZPMLT3") - create_account :onetime - close_ledger #3 - - # add one time signer - - require 'digest' - x = Digest::SHA256.digest("hello world") - key = Stellar::SignerKey.hash_x(x) - set_options :onetime, signer: Stellar::Signer.new({ - key: key, - weight: 1, - }) - close_ledger #4 - - # consume one time signer - account = get_account :onetime - tx = Stellar::Transaction.manage_data({ - account: account, - sequence: next_sequence(account), - name: "done", - value: "true", - }) - env = tx.to_envelope - env.signatures << Stellar::DecoratedSignature.new({ - hint: key.to_xdr.slice(-4, 4), - signature: x - }) - - submit_transaction env - - close_ledger #5 diff --git a/services/horizon/internal/test/scenarios/kahuna-horizon.sql b/services/horizon/internal/test/scenarios/kahuna-horizon.sql index 0f3adf2424..8008667c50 100644 --- a/services/horizon/internal/test/scenarios/kahuna-horizon.sql +++ b/services/horizon/internal/test/scenarios/kahuna-horizon.sql @@ -1619,6 +1619,10 @@ ALTER TABLE ONLY history_trades ALTER TABLE ONLY history_trades ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); +-- Added manually +ALTER TABLE history_transactions ADD account_muxed varchar(69) NULL, ADD fee_account_muxed varchar(69) NULL; +ALTER TABLE history_operations ADD source_account_muxed varchar(69) NULL; +ALTER TABLE history_effects ADD address_muxed varchar(69) NULL; -- -- PostgreSQL database dump complete diff --git a/services/horizon/internal/test/scenarios/non_native_payment-core.sql b/services/horizon/internal/test/scenarios/non_native_payment-core.sql deleted file mode 100644 index 16f46ebd88..0000000000 --- a/services/horizon/internal/test/scenarios/non_native_payment-core.sql +++ /dev/null @@ -1,738 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999996999999700, 3, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 999999900, 8589934593, 1, NULL, '', 'AQAAAA==', 0, 3, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 999999900, 8589934593, 0, NULL, '', 'AQAAAA==', 0, 4, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 999999800, 8589934594, 1, NULL, '', 'AQAAAA==', 0, 5, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('8787c7784c599f41a8d27b03ad3467b8f603395b9c87d79d03688424f1d9bf00', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 'e10a12ae38dc8ee2b8b2364ea481889ab3f7edea1fb7e913dba4a1441e6be06b', 2, 1559579897, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZP3bET1BQWO7v25lKgR/u6tNkZT/xU5qQN30ohPD6CoAAAAAAXPVM+QAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAATmS1LmeTcag6pi81IhaOG+MYxa34gawjnsRB3rvSgEzhChKuONyO4riyNk6kgYias/ft6h+36RPbpKFEHmvgawAAAAIN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('e87dedd74b1b1b9f1f2e7c1a6579c194007e647220a2f7c7a227880ff1771c49', '8787c7784c599f41a8d27b03ad3467b8f603395b9c87d79d03688424f1d9bf00', 'a0259836c57a10e9160d6816b0c7f41ce949bf2be20a2d67a44c86c2b54eb0e5', 3, 1559579898, 'AAAAC4eHx3hMWZ9BqNJ7A600Z7j2AzlbnIfXnQNohCTx2b8Ax5WK6vGg6w3efIp2cBuaDLIcPI0zqFcz3fzJ3IOdzHoAAAAAXPVM+gAAAAAAAAAAN13a+3Gscvm/C1jZHTPHN4HPw5H2WdEz2kGkUix7+FygJZg2xXoQ6RYNaBawx/Qc6Um/K+IKLWekTIbCtU6w5QAAAAMN4Lazp2QAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('de5766be545d9fc98c8bd06c603be896af4ffe0562e6f4dc8abe01bd99d75182', 'e87dedd74b1b1b9f1f2e7c1a6579c194007e647220a2f7c7a227880ff1771c49', 'cada07fda4a768ad67ef79d4d9fdbb46827ab7fc5a6b6f71f901929eb5fee52e', 4, 1559579899, 'AAAAC+h97ddLGxufHy58GmV5wZQAfmRyIKL3x6IniA/xdxxJiW0EgjQPUCA+cCDzPL41fKJJiEkXoDSHZnHSHuX0ll4AAAAAXPVM+wAAAAAAAAAA89aPZigAg+IMx5cMdGKxwXobEhFVZAiHObRfY4fyizHK2gf9pKdorWfvedTZ/btGgnq3/Fprb3H5AZKetf7lLgAAAAQN4Lazp2QAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('da8bbb872d70f26ce16d510482d2f611747552823a5f4dc81aa94fa809df4a88', 'de5766be545d9fc98c8bd06c603be896af4ffe0562e6f4dc8abe01bd99d75182', '336610d619b40792d257608754618a37f6f480569d899fbeee4d5ca5d015c810', 5, 1559579900, 'AAAAC95XZr5UXZ/JjIvQbGA76JavT/4FYub03Iq+Ab2Z11GC8LDIogXVFWCU1BUFb1zv9bNJ282gfsIFyoF30vhy3QIAAAAAXPVM/AAAAAAAAAAAnpHN6r0WB8KXbaGDbS3aPdFFMJZ+yrybEFpZjcDQA/0zZhDWGbQHktJXYIdUYYo39vSAVp2Jn77uTVyl0BXIEAAAAAUN4Lazp2QAAAAAAAAAAAK8AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GDSTYMKIOCA5NSQOX5XZTUFCASRT4IR5KYPRTMU2O2ORQO5ITWWJKZY2', 2, 'AAAAAOU8MUhwgdbKDr9vmdCiBKM+Ij1WHxmymnadGDuonayVAAAAAAAAAAIAAAACAAAAAQAAAEg/dsRPUFBY7u/bmUqBH+7q02RlP/FTmpA3fSiE8PoKgAAAAABc9Uz5AAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABTvAP6rqpmBruGhYX7KTLs52bttB6ev7DELZh6Ql6kMAAAABAWbGoWY4uqJWX+NfWb9/oIX4mr8JXVx2why5rLayIkSawz+t8If/+FX6JqlgjBLjUS0GmHzuIfwOlby1V4nhXDw=='); -INSERT INTO scphistory VALUES ('GDSTYMKIOCA5NSQOX5XZTUFCASRT4IR5KYPRTMU2O2ORQO5ITWWJKZY2', 3, 'AAAAAOU8MUhwgdbKDr9vmdCiBKM+Ij1WHxmymnadGDuonayVAAAAAAAAAAMAAAACAAAAAQAAADDHlYrq8aDrDd58inZwG5oMshw8jTOoVzPd/Mncg53MegAAAABc9Uz6AAAAAAAAAAAAAAABTvAP6rqpmBruGhYX7KTLs52bttB6ev7DELZh6Ql6kMAAAABA3GYq4jWYhXCVYEN8PZSdfjjTCNE/VsoU4Tf37oyeo9pnRRS2qZvdKHWTT0eoFUAbmG1mamn1Cej3MeXxAk1JDQ=='); -INSERT INTO scphistory VALUES ('GDSTYMKIOCA5NSQOX5XZTUFCASRT4IR5KYPRTMU2O2ORQO5ITWWJKZY2', 4, 'AAAAAOU8MUhwgdbKDr9vmdCiBKM+Ij1WHxmymnadGDuonayVAAAAAAAAAAQAAAACAAAAAQAAADCJbQSCNA9QID5wIPM8vjV8okmISRegNIdmcdIe5fSWXgAAAABc9Uz7AAAAAAAAAAAAAAABTvAP6rqpmBruGhYX7KTLs52bttB6ev7DELZh6Ql6kMAAAABAJ3JAbYGnJHBR8iUx7zqCEFdFT8m2IUo0XR9OPCP+iiclhuAC+K8IP4XV2U8nhSxqU4bWX/aPY1uFxuTLOtJSCA=='); -INSERT INTO scphistory VALUES ('GDSTYMKIOCA5NSQOX5XZTUFCASRT4IR5KYPRTMU2O2ORQO5ITWWJKZY2', 5, 'AAAAAOU8MUhwgdbKDr9vmdCiBKM+Ij1WHxmymnadGDuonayVAAAAAAAAAAUAAAACAAAAAQAAADDwsMiiBdUVYJTUFQVvXO/1s0nbzaB+wgXKgXfS+HLdAgAAAABc9Uz8AAAAAAAAAAAAAAABTvAP6rqpmBruGhYX7KTLs52bttB6ev7DELZh6Ql6kMAAAABAc9fIJqAhNA0bj32ibI7odpZTVqMIqdV22D0wb8CvqMHf9WzjRbTZSNx7dHIo1GUbGvoogCOlTkEF45W0SF0rDg=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('4ef00feabaa9981aee1a1617eca4cbb39d9bb6d07a7afec310b661e9097a90c0', 5, 'AAAAAQAAAAEAAAAA5TwxSHCB1soOv2+Z0KIEoz4iPVYfGbKadp0YO6idrJUAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('lastclosedledger ', 'da8bbb872d70f26ce16d510482d2f611747552823a5f4dc81aa94fa809df4a88'); -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 5, - "currentBuckets": [ - { - "curr": "de41a904d34c96e4d1465d35c891bcbdf2bf1ea969c844868a3cea426bfd410d", - "next": { - "state": 0 - }, - "snap": "cfe41837a167b530d56e82d7697ce59fbe35439bc2340f5a788e2452e3be1881" - }, - { - "curr": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9", - "next": { - "state": 1, - "output": "cfe41837a167b530d56e82d7697ce59fbe35439bc2340f5a788e2452e3be1881" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAADlPDFIcIHWyg6/b5nQogSjPiI9Vh8Zspp2nRg7qJ2slQAAAAAAAAAFAAAAA07wD+q6qZga7hoWF+yky7Odm7bQenr+wxC2YekJepDAAAAAAQAAAJjwsMiiBdUVYJTUFQVvXO/1s0nbzaB+wgXKgXfS+HLdAgAAAABc9Uz8AAAAAAAAAAEAAAAA5TwxSHCB1soOv2+Z0KIEoz4iPVYfGbKadp0YO6idrJUAAABAA9ks6GM05tzXCeIQM5Y0J4ROVr6Vl4EreXpCp5PWp4mtA5xG7oyeI4R0xoYgty1EakbKiDRaYwCTpYMDW8xXDgAAAAEAAACY8LDIogXVFWCU1BUFb1zv9bNJ282gfsIFyoF30vhy3QIAAAAAXPVM/AAAAAAAAAABAAAAAOU8MUhwgdbKDr9vmdCiBKM+Ij1WHxmymnadGDuonayVAAAAQAPZLOhjNObc1wniEDOWNCeETla+lZeBK3l6QqeT1qeJrQOcRu6MniOEdMaGILctRGpGyog0WmMAk6WDA1vMVw4AAABA5wHWjmqmsBTBtSi7eL1WSds/KVk4D+c8lSJgSiVPLilv35S/4NLQyHrQpLrLRLaqfA0xaeLRhF7QCnbraId1BQAAAADlPDFIcIHWyg6/b5nQogSjPiI9Vh8Zspp2nRg7qJ2slQAAAAAAAAAFAAAAAgAAAAEAAAAw8LDIogXVFWCU1BUFb1zv9bNJ282gfsIFyoF30vhy3QIAAAAAXPVM/AAAAAAAAAAAAAAAAU7wD+q6qZga7hoWF+yky7Odm7bQenr+wxC2YekJepDAAAAAQHPXyCagITQNG499omyO6HaWU1ajCKnVdtg9MG/Ar6jB3/Vs40W02Ujce3RyKNRlGxr6KIAjpU5BBeOVtEhdKw4AAAAB3ldmvlRdn8mMi9BsYDvolq9P/gVi5vTcir4BvZnXUYIAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAdzWUAAAAAAAAAAAGu5L5MAAAAQFbO0ttd/vGGsr58kHpKsBkO1RaLpAxEOj/X5D93EKfX5xxHpuGiU9PlJOy1/alHN9kcOxtKNdvv7zChGRPR/Q8AAAABAAAAAQAAAAEAAAAA5TwxSHCB1soOv2+Z0KIEoz4iPVYfGbKadp0YO6idrJUAAAAA'); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO trustlines VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 500000000, 1, 5, NULL, NULL); -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 500000000, 1, 5, NULL, NULL); - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('2374e99349b9ef7dba9a5db3339b78fda8f34777b1af33ba468ad5c0df946d4d', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f508f24622cb2658b8b46c84fd1cd0f13b68090baae85b41e8b67cf16edf578c', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('2b2e82dbabb024b27a0c3140ca71d8ac9bc71831f9f5a3bd69eca3d88fb0ec5c', 2, 3, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('811192c38643df73c015a5a1d77b802dff05d4f50fc6d10816aa75c0a6109f9a', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAA7msmcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('7736f0b869de0f74a5ed7f8d6529949238eb0f0421f3fc2bbc438084f21c8055', 4, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msmcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('3b6dc5f46ed8140595cff4b3b8cba6b7fc0bc0801fd222e4c717b9497ee5ced0', 5, 1, 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msk4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('2374e99349b9ef7dba9a5db3339b78fda8f34777b1af33ba468ad5c0df946d4d', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rKAAAAAAAAAAABVvwF9wAAAECDzqvkQBQoNAJifPRXDoLhvtycT3lFPCQ51gkdsFHaBNWw05S/VhW0Xgkr0CBPE4NaFV2Kmcs3ZwLmib4TRrML', 'I3Tpk0m57326ml2zM5t4/ajzR3exrzO6RorVwN+UbU0AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrNryTTUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f508f24622cb2658b8b46c84fd1cd0f13b68090baae85b41e8b67cf16edf578c', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAAAAAABVvwF9wAAAEArq72awj8I0bL2hCJ9DOo1fUwxpwUnK9R5NvR/ewXcofvO+1pRNJJeTNHMGlbdlFKeqkwm3fkPP91vgLWX47oD', '9QjyRiLLJli4tGyE/RzQ8TtoCQuq6FtB6LZ88W7fV4wAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrNryTTUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrMwLmrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('2b2e82dbabb024b27a0c3140ca71d8ac9bc71831f9f5a3bd69eca3d88fb0ec5c', 2, 3, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAO5rKAAAAAAAAAAABVvwF9wAAAEDJul1tLGLF4Vxwt0dDCVEf6tb5l4byMrGgCp+lVZMmxct54iNf2mxtjx6Md5ZJ4E4Dlcsf46EAhBGSUPsn8fYD', 'Ky6C26uwJLJ6DDFAynHYrJvHGDH59aO9aeyj2I+w7FwAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrMwLmrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrL0k6DUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('811192c38643df73c015a5a1d77b802dff05d4f50fc6d10816aa75c0a6109f9a', 3, 1, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAFvFIhaAAAAQPlg7GLhJg0x7jpAw1Ew6H2XF6yRImfJIwFfx09Nui5btOJAFewFANfOaAB8FQZl5p3A5g3k6DHDigfUNUD16gc=', 'gRGSw4ZD33PAFaWh13uALf8F1PUPxtEIFqp1wKYQn5oAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAO5rJnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAO5rJnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAA7msmcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAA7msmcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 2, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'vUhtvdAtRggXZxxKWn6dboZcopy0HmLXqvcKL+5bNt4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('7736f0b869de0f74a5ed7f8d6529949238eb0f0421f3fc2bbc438084f21c8055', 4, 1, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAAAAAAAH5kC3vAAAAQDjBSAulKc9tRqGg+OkVbKPz4olRQYUevyCfv0LAlqbXG6yPbpR0BR6o7mrimRm8O4VoRBGIATQB42NOWcFzdQw=', 'dzbwuGneD3Sl7X+NZSmUkjjrDwQh8/wrvEOAhPIcgFUAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rJnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rJnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADuaygB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('3b6dc5f46ed8140595cff4b3b8cba6b7fc0bc0801fd222e4c717b9497ee5ced0', 5, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAdzWUAAAAAAAAAAAGu5L5MAAAAQFbO0ttd/vGGsr58kHpKsBkO1RaLpAxEOj/X5D93EKfX5xxHpuGiU9PlJOy1/alHN9kcOxtKNdvv7zChGRPR/Q8=', 'O23F9G7YFAWVz/SzuMumt/wLwIAf0iLkxxe5SX7lztAAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAMAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAB3NZQB//////////wAAAAEAAAAAAAAAAAAAAAMAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADuaygB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAB3NZQB//////////wAAAAEAAAAAAAAAAA=='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/non_native_payment-horizon.sql b/services/horizon/internal/test/scenarios/non_native_payment-horizon.sql deleted file mode 100644 index 00c3252ef5..0000000000 --- a/services/horizon/internal/test/scenarios/non_native_payment-horizon.sql +++ /dev/null @@ -1,988 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO asset_stats VALUES (1, '1000000000', 2, 0, ''); - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_accounts VALUES (2, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (3, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_accounts VALUES (4, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 4, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_assets VALUES (1, 'credit_alphanum4', 'USD', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 1, true); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 21474840577, 1, 2, '{"amount": "50.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 21474840577, 2, 3, '{"amount": "50.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 17179873281, 1, 2, '{"amount": "100.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 17179873281, 2, 3, '{"amount": "100.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 12884905985, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 12884910081, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 1, 0, '{"starting_balance": "100.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589938689, 2, 3, '{"amount": "100.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 1, 0, '{"starting_balance": "100.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589942785, 2, 3, '{"amount": "100.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 3, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 8589946881, 1, 0, '{"starting_balance": "100.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589946881, 2, 3, '{"amount": "100.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589946881, 3, 10, '{"weight": 1, "public_key": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (5, 'da8bbb872d70f26ce16d510482d2f611747552823a5f4dc81aa94fa809df4a88', 'de5766be545d9fc98c8bd06c603be896af4ffe0562e6f4dc8abe01bd99d75182', 1, 1, '2019-06-03 16:38:20', '2019-06-03 16:38:20.635671', '2019-06-03 16:38:20.635671', 21474836480, 16, 1000000000000000000, 700, 100, 100000000, 1000000, 11, 'AAAAC95XZr5UXZ/JjIvQbGA76JavT/4FYub03Iq+Ab2Z11GC8LDIogXVFWCU1BUFb1zv9bNJ282gfsIFyoF30vhy3QIAAAAAXPVM/AAAAAAAAAAAnpHN6r0WB8KXbaGDbS3aPdFFMJZ+yrybEFpZjcDQA/0zZhDWGbQHktJXYIdUYYo39vSAVp2Jn77uTVyl0BXIEAAAAAUN4Lazp2QAAAAAAAAAAAK8AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (4, 'de5766be545d9fc98c8bd06c603be896af4ffe0562e6f4dc8abe01bd99d75182', 'e87dedd74b1b1b9f1f2e7c1a6579c194007e647220a2f7c7a227880ff1771c49', 1, 1, '2019-06-03 16:38:19', '2019-06-03 16:38:20.663951', '2019-06-03 16:38:20.663951', 17179869184, 16, 1000000000000000000, 600, 100, 100000000, 1000000, 11, 'AAAAC+h97ddLGxufHy58GmV5wZQAfmRyIKL3x6IniA/xdxxJiW0EgjQPUCA+cCDzPL41fKJJiEkXoDSHZnHSHuX0ll4AAAAAXPVM+wAAAAAAAAAA89aPZigAg+IMx5cMdGKxwXobEhFVZAiHObRfY4fyizHK2gf9pKdorWfvedTZ/btGgnq3/Fprb3H5AZKetf7lLgAAAAQN4Lazp2QAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (3, 'e87dedd74b1b1b9f1f2e7c1a6579c194007e647220a2f7c7a227880ff1771c49', '8787c7784c599f41a8d27b03ad3467b8f603395b9c87d79d03688424f1d9bf00', 2, 2, '2019-06-03 16:38:18', '2019-06-03 16:38:20.677274', '2019-06-03 16:38:20.677275', 12884901888, 16, 1000000000000000000, 500, 100, 100000000, 1000000, 11, 'AAAAC4eHx3hMWZ9BqNJ7A600Z7j2AzlbnIfXnQNohCTx2b8Ax5WK6vGg6w3efIp2cBuaDLIcPI0zqFcz3fzJ3IOdzHoAAAAAXPVM+gAAAAAAAAAAN13a+3Gscvm/C1jZHTPHN4HPw5H2WdEz2kGkUix7+FygJZg2xXoQ6RYNaBawx/Qc6Um/K+IKLWekTIbCtU6w5QAAAAMN4Lazp2QAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (2, '8787c7784c599f41a8d27b03ad3467b8f603395b9c87d79d03688424f1d9bf00', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 3, 3, '2019-06-03 16:38:17', '2019-06-03 16:38:20.689887', '2019-06-03 16:38:20.689887', 8589934592, 16, 1000000000000000000, 300, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZP3bET1BQWO7v25lKgR/u6tNkZT/xU5qQN30ohPD6CoAAAAAAXPVM+QAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAATmS1LmeTcag6pi81IhaOG+MYxa34gawjnsRB3rvSgEzhChKuONyO4riyNk6kgYias/ft6h+36RPbpKFEHmvgawAAAAIN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 3, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:38:20.703551', '2019-06-03 16:38:20.703551', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 21474840577, 2); -INSERT INTO history_operation_participants VALUES (2, 21474840577, 1); -INSERT INTO history_operation_participants VALUES (3, 17179873281, 2); -INSERT INTO history_operation_participants VALUES (4, 17179873281, 3); -INSERT INTO history_operation_participants VALUES (5, 12884905985, 1); -INSERT INTO history_operation_participants VALUES (6, 12884910081, 2); -INSERT INTO history_operation_participants VALUES (7, 8589938689, 4); -INSERT INTO history_operation_participants VALUES (8, 8589938689, 2); -INSERT INTO history_operation_participants VALUES (9, 8589942785, 3); -INSERT INTO history_operation_participants VALUES (10, 8589942785, 4); -INSERT INTO history_operation_participants VALUES (11, 8589946881, 4); -INSERT INTO history_operation_participants VALUES (12, 8589946881, 1); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 12, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (21474840577, 21474840576, 1, 1, '{"to": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "from": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "amount": "50.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (17179873281, 17179873280, 1, 1, '{"to": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "from": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "amount": "100.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_operations VALUES (12884910081, 12884910080, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "100.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "starting_balance": "100.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589946881, 8589946880, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "starting_balance": "100.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 21474840576, 2); -INSERT INTO history_transaction_participants VALUES (2, 21474840576, 1); -INSERT INTO history_transaction_participants VALUES (3, 17179873280, 3); -INSERT INTO history_transaction_participants VALUES (4, 17179873280, 2); -INSERT INTO history_transaction_participants VALUES (5, 12884905984, 1); -INSERT INTO history_transaction_participants VALUES (6, 12884910080, 2); -INSERT INTO history_transaction_participants VALUES (7, 8589938688, 4); -INSERT INTO history_transaction_participants VALUES (8, 8589938688, 2); -INSERT INTO history_transaction_participants VALUES (9, 8589942784, 4); -INSERT INTO history_transaction_participants VALUES (10, 8589942784, 3); -INSERT INTO history_transaction_participants VALUES (11, 8589946880, 4); -INSERT INTO history_transaction_participants VALUES (12, 8589946880, 1); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 12, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('3b6dc5f46ed8140595cff4b3b8cba6b7fc0bc0801fd222e4c717b9497ee5ced0', 5, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934594, 100, 1, '2019-06-03 16:38:20.635848', '2019-06-03 16:38:20.635848', 21474840576, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAdzWUAAAAAAAAAAAGu5L5MAAAAQFbO0ttd/vGGsr58kHpKsBkO1RaLpAxEOj/X5D93EKfX5xxHpuGiU9PlJOy1/alHN9kcOxtKNdvv7zChGRPR/Q8=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAMAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAB3NZQB//////////wAAAAEAAAAAAAAAAAAAAAMAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADuaygB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAB3NZQB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msk4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{Vs7S213+8YayvnyQekqwGQ7VFoukDEQ6P9fkP3cQp9fnHEem4aJT0+Uk7LX9qUc32Rw7G0o12+/vMKEZE9H9Dw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('7736f0b869de0f74a5ed7f8d6529949238eb0f0421f3fc2bbc438084f21c8055', 4, 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934593, 100, 1, '2019-06-03 16:38:20.664151', '2019-06-03 16:38:20.664152', 17179873280, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAAAAAAAH5kC3vAAAAQDjBSAulKc9tRqGg+OkVbKPz4olRQYUevyCfv0LAlqbXG6yPbpR0BR6o7mrimRm8O4VoRBGIATQB42NOWcFzdQw=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rJnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rJnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADuaygB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msmcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{OMFIC6Upz21GoaD46RVso/PiiVFBhR6/IJ+/QsCWptcbrI9ulHQFHqjuauKZGbw7hWhEEYgBNAHjY05ZwXN1DA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('811192c38643df73c015a5a1d77b802dff05d4f50fc6d10816aa75c0a6109f9a', 3, 1, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 8589934593, 100, 1, '2019-06-03 16:38:20.677481', '2019-06-03 16:38:20.677482', 12884905984, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAFvFIhaAAAAQPlg7GLhJg0x7jpAw1Ew6H2XF6yRImfJIwFfx09Nui5btOJAFewFANfOaAB8FQZl5p3A5g3k6DHDigfUNUD16gc=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAO5rJnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAO5rJnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAA7msmcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAA7msmcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAA7msmcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{+WDsYuEmDTHuOkDDUTDofZcXrJEiZ8kjAV/HT026Llu04kAV7AUA185oAHwVBmXmncDmDeToMcOKB9Q1QPXqBw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 2, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:38:20.677754', '2019-06-03 16:38:20.677754', 12884910080, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{H2SYpbare/tB/Lw8x6QRvVNMjmLGqQjQGiBes63uA7XrZBuSHZ1JNR94Oi9zQ8Bp+ENfG2FUCWwu6OUGbKMEBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('2374e99349b9ef7dba9a5db3339b78fda8f34777b1af33ba468ad5c0df946d4d', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:38:20.690031', '2019-06-03 16:38:20.690031', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rKAAAAAAAAAAABVvwF9wAAAECDzqvkQBQoNAJifPRXDoLhvtycT3lFPCQ51gkdsFHaBNWw05S/VhW0Xgkr0CBPE4NaFV2Kmcs3ZwLmib4TRrML', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrNryTTUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{g86r5EAUKDQCYnz0Vw6C4b7cnE95RTwkOdYJHbBR2gTVsNOUv1YVtF4JK9AgTxODWhVdipnLN2cC5om+E0azCw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f508f24622cb2658b8b46c84fd1cd0f13b68090baae85b41e8b67cf16edf578c', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:38:20.690207', '2019-06-03 16:38:20.690207', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAAAAAABVvwF9wAAAEArq72awj8I0bL2hCJ9DOo1fUwxpwUnK9R5NvR/ewXcofvO+1pRNJJeTNHMGlbdlFKeqkwm3fkPP91vgLWX47oD', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrNryTTUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrMwLmrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{K6u9msI/CNGy9oQifQzqNX1MMacFJyvUeTb0f3sF3KH7zvtaUTSSXkzRzBpW3ZRSnqpMJt35Dz/db4C1l+O6Aw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('2b2e82dbabb024b27a0c3140ca71d8ac9bc71831f9f5a3bd69eca3d88fb0ec5c', 2, 3, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 3, 100, 1, '2019-06-03 16:38:20.690327', '2019-06-03 16:38:20.690328', 8589946880, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAO5rKAAAAAAAAAAABVvwF9wAAAEDJul1tLGLF4Vxwt0dDCVEf6tb5l4byMrGgCp+lVZMmxct54iNf2mxtjx6Md5ZJ4E4Dlcsf46EAhBGSUPsn8fYD', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrMwLmrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrL0k6DUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{ybpdbSxixeFccLdHQwlRH+rW+ZeG8jKxoAqfpVWTJsXLeeIjX9psbY8ejHeWSeBOA5XLH+OhAIQRklD7J/H2Aw==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/non_native_payment.rb b/services/horizon/internal/test/scenarios/non_native_payment.rb deleted file mode 100644 index fc824ca117..0000000000 --- a/services/horizon/internal/test/scenarios/non_native_payment.rb +++ /dev/null @@ -1,22 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :scott, :master, 100 -create_account :usd_gateway, :master, 100 -create_account :andrew, :master, 100 - -close_ledger - -trust :scott, :usd_gateway, "USD" -trust :andrew, :usd_gateway, "USD" - -close_ledger - -payment :usd_gateway, :scott, ["USD", :usd_gateway, 100] - -close_ledger - -payment :scott, :andrew, ["USD", :usd_gateway, 50] - -close_ledger diff --git a/services/horizon/internal/test/scenarios/order_books-core.sql b/services/horizon/internal/test/scenarios/order_books-core.sql deleted file mode 100644 index c372d4ffae..0000000000 --- a/services/horizon/internal/test/scenarios/order_books-core.sql +++ /dev/null @@ -1,786 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999789999999700, 3, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 9999999600, 8589934596, 0, NULL, '', 'AQAAAA==', 0, 4, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 99999999200, 8589934600, 8, NULL, '', 'AQAAAA==', 0, 6, 521500000000, 0, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 99999999200, 8589934600, 8, NULL, '', 'AQAAAA==', 0, 6, 0, 60000000000, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('d3f31f4c9cc9e5a3e3a1a555ee4117c7832b138d1d7fa6a56100a6ad9691d8af', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 'f755f43251361a4c01d1f4bf92bfe06d0df275a0c69a5d036385901158acd403', 2, 1559579693, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZCS8URcyE4gRYsZAdb7e4uHwbaA5fhFIEcA1CSR23Z5oAAAAAXPVMLQAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAzi1xgnE3PAfb2CbU6dwiHL3p/nbMw7WpXJpWKu4ASuj3VfQyUTYaTAHR9L+Sv+BtDfJ1oMaaXQNjhZARWKzUAwAAAAIN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('ee5eb4ca3953f13267d150232a56130d85f1046a095475c2ced90e70fd0b7c3f', 'd3f31f4c9cc9e5a3e3a1a555ee4117c7832b138d1d7fa6a56100a6ad9691d8af', 'd677e16d86d2db025d8566c07e637b5d6e73feb740a8f3ed90338aa7b1ffbf22', 3, 1559579694, 'AAAAC9PzH0ycyeWj46GlVe5BF8eDKxONHX+mpWEApq2WkdivNyQdrblsa09Sp07tvZedQwAg6pVWfut907LWUCZCF7MAAAAAXPVMLgAAAAAAAAAAgzaJz4Xq1aG8spy1oEm7qAluf8fQetm330Mf8Zmid+DWd+FthtLbAl2FZsB+Y3tdbnP+t0Co8+2QM4qnsf+/IgAAAAMN4Lazp2QAAAAAAAAAAAK8AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('489fc344816d731c2d49c820ffca50c3b2f8bccf4601d54b85e670e18660583b', 'ee5eb4ca3953f13267d150232a56130d85f1046a095475c2ced90e70fd0b7c3f', '140db62d895989dd8ba0f9e7af1ffe779e94d004adab1e81eaf59b47af033854', 4, 1559579695, 'AAAAC+5etMo5U/EyZ9FQIypWEw2F8QRqCVR1ws7ZDnD9C3w/XrJpvir6M5qcfccRwfa25D82mk9KqVu+jfp2oyV8oB4AAAAAXPVMLwAAAAAAAAAAEvM5tT8l0dTEZQLsPGomBGcTJkGZVcTwRLD10i4EXb8UDbYtiVmJ3Yug+eevH/53npTQBK2rHoHq9ZtHrwM4VAAAAAQN4Lazp2QAAAAAAAAAAARMAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('1a55abf2af4c3e77fc6566e22e64673a3af93eb7f3868cb71d24517b69ddf321', '489fc344816d731c2d49c820ffca50c3b2f8bccf4601d54b85e670e18660583b', 'fbbe3ab2f80a6e7c0bb95c1b242c149e3fc7a47ab2629bb60cf12435813892fb', 5, 1559579696, 'AAAAC0ifw0SBbXMcLUnIIP/KUMOy+LzPRgHVS4XmcOGGYFg74pBNjQudZQeUtO+ef0ClbZW4mHTsXDthjA1m2/YMKVYAAAAAXPVMMAAAAAAAAAAAIMV0QzQRdUmn10wWB1qZt+ll6BH0Tj/XNrUL4wpqrGv7vjqy+ApufAu5XBskLBSeP8ekerJim7YM8SQ1gTiS+wAAAAUN4Lazp2QAAAAAAAAAAAakAAAAAAAAAAAAAAAGAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('c4a6a74732738a3c0a9f593eeed9a3934ded945f534960237af97d14a19c2d7a', '1a55abf2af4c3e77fc6566e22e64673a3af93eb7f3868cb71d24517b69ddf321', 'ecb8ce5b84985d9d82711596227eceef237496f801dd35bf033bcd8d3dc4c8a2', 6, 1559579697, 'AAAACxpVq/KvTD53/GVm4i5kZzo6+T6384aMtx0kUXtp3fMhZfwtfyZ3No855TGDHuDE64RHIVy2DVnZ1LWuKKUjO7cAAAAAXPVMMQAAAAAAAAAAO03rkSSGII+TmdA0r8T7dSNCWamYkyOlDZ73gpuryU/suM5bhJhdnYJxFZYifs7vI3SW+AHdNb8DO82NPcTIogAAAAYN4Lazp2QAAAAAAAAAAAj8AAAAAAAAAAAAAAAMAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 1000000000, 1, 10, 0.100000000000000006, 0, 5); -INSERT INTO offers VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 6, 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 'AAAAAA==', 10000000000, 50, 1, 50, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 5, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 50000000000, 1, 5, 0.200000000000000011, 0, 5); -INSERT INTO offers VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 2, 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 'AAAAAA==', 100000000, 15, 1, 15, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 3, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 9000000000, 1, 9, 0.111111111111111105, 0, 5); -INSERT INTO offers VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 4, 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 'AAAAAA==', 1000000000, 20, 1, 20, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 10, 'AAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 9000000000, 1, 9, 0.111111111111111105, 0, 6); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8, 'AAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 1000000000, 1, 10, 0.100000000000000006, 0, 6); -INSERT INTO offers VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 9, 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 'AAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 1000000000, 20, 1, 20, 0, 6); -INSERT INTO offers VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 12, 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 'AAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 10000000000, 50, 1, 50, 0, 6); -INSERT INTO offers VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 7, 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 'AAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 100000000, 15, 1, 15, 0, 6); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 11, 'AAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 50000000000, 1, 5, 0.200000000000000011, 0, 6); - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GCYWLNHNGLG4O3CDVPTJEFAGNHBSZWTR3G4XVJ6FVYKKVQLD2FLCZSFW', 2, 'AAAAALFltO0yzcdsQ6vmkhQGacMs2nHZuXqnxa4UqsFj0VYsAAAAAAAAAAIAAAACAAAAAQAAAEgJLxRFzITiBFixkB1vt7i4fBtoDl+EUgRwDUJJHbdnmgAAAABc9UwtAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABAnM0x3iVcxcSz6Sau6Ro2AFxoawHqjvEbAcemvolBWgAAABAOBqb0lxPXzSAWaqPJFx2Rmnsg1G84M8xDdaiJv3K+7I5dAIy6F3my/rtVFbQaOuwq5YQXUQUskk/eiBrErorBQ=='); -INSERT INTO scphistory VALUES ('GCYWLNHNGLG4O3CDVPTJEFAGNHBSZWTR3G4XVJ6FVYKKVQLD2FLCZSFW', 3, 'AAAAALFltO0yzcdsQ6vmkhQGacMs2nHZuXqnxa4UqsFj0VYsAAAAAAAAAAMAAAACAAAAAQAAADA3JB2tuWxrT1KnTu29l51DACDqlVZ+633TstZQJkIXswAAAABc9UwuAAAAAAAAAAAAAAABAnM0x3iVcxcSz6Sau6Ro2AFxoawHqjvEbAcemvolBWgAAABAmYYNdEohGlNrqnolPJOfUtN1fsDx6J2nP3CUduWTHTAY8I5+s2+WocAPDhudtaLo+JCZdRuyhumS/d3khvGZCg=='); -INSERT INTO scphistory VALUES ('GCYWLNHNGLG4O3CDVPTJEFAGNHBSZWTR3G4XVJ6FVYKKVQLD2FLCZSFW', 4, 'AAAAALFltO0yzcdsQ6vmkhQGacMs2nHZuXqnxa4UqsFj0VYsAAAAAAAAAAQAAAACAAAAAQAAADBesmm+Kvozmpx9xxHB9rbkPzaaT0qpW76N+najJXygHgAAAABc9UwvAAAAAAAAAAAAAAABAnM0x3iVcxcSz6Sau6Ro2AFxoawHqjvEbAcemvolBWgAAABAiHstUEFyW/m20cZFihsKXq6koYZDeLhZq5zWoXJimVeBBJh/p3YGQyCPX3svxn59vgJUpLmQEt7XOL4doUMWDA=='); -INSERT INTO scphistory VALUES ('GCYWLNHNGLG4O3CDVPTJEFAGNHBSZWTR3G4XVJ6FVYKKVQLD2FLCZSFW', 5, 'AAAAALFltO0yzcdsQ6vmkhQGacMs2nHZuXqnxa4UqsFj0VYsAAAAAAAAAAUAAAACAAAAAQAAADDikE2NC51lB5S0755/QKVtlbiYdOxcO2GMDWbb9gwpVgAAAABc9UwwAAAAAAAAAAAAAAABAnM0x3iVcxcSz6Sau6Ro2AFxoawHqjvEbAcemvolBWgAAABA3nvvrq9/ISoOw6tiLf2eQ+sFmLa0NVuPve4/LW30eJHfHcp5XV6SvX+a/h7EgoPAmACnE8dEHEyKr1p9nNAdAA=='); -INSERT INTO scphistory VALUES ('GCYWLNHNGLG4O3CDVPTJEFAGNHBSZWTR3G4XVJ6FVYKKVQLD2FLCZSFW', 6, 'AAAAALFltO0yzcdsQ6vmkhQGacMs2nHZuXqnxa4UqsFj0VYsAAAAAAAAAAYAAAACAAAAAQAAADBl/C1/Jnc2jznlMYMe4MTrhEchXLYNWdnUta4opSM7twAAAABc9UwxAAAAAAAAAAAAAAABAnM0x3iVcxcSz6Sau6Ro2AFxoawHqjvEbAcemvolBWgAAABAgL9UjzPolwVYSrKrVz7/p/8gERzXwhJj9CM12JeQCqSHc/0VPjxGxi76TdRgoKoUBuzNE68yul+HyJLtNcaDBg=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('027334c77895731712cfa49abba468d80171a1ac07aa3bc46c071e9afa250568', 6, 'AAAAAQAAAAEAAAAAsWW07TLNx2xDq+aSFAZpwyzacdm5eqfFrhSqwWPRViwAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('lastclosedledger ', 'c4a6a74732738a3c0a9f593eeed9a3934ded945f534960237af97d14a19c2d7a'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 6, - "currentBuckets": [ - { - "curr": "e1a58d303c4742d0ed42425a1503342ae2c60dadada019eedbc6f8109e88253b", - "next": { - "state": 0 - }, - "snap": "d88c8528d563c2a1aebbffb2bdd399fdbb7d4336a0e4a8be2257b20ffae5f0ca" - }, - { - "curr": "8c67e3be919360b81a9d1c939354ed3aa51c36a87b8e66d601e45403634aff1c", - "next": { - "state": 1, - "output": "d88c8528d563c2a1aebbffb2bdd399fdbb7d4336a0e4a8be2257b20ffae5f0ca" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAACxZbTtMs3HbEOr5pIUBmnDLNpx2bl6p8WuFKrBY9FWLAAAAAAAAAAGAAAAAwJzNMd4lXMXEs+kmrukaNgBcaGsB6o7xGwHHpr6JQVoAAAAAQAAAJhl/C1/Jnc2jznlMYMe4MTrhEchXLYNWdnUta4opSM7twAAAABc9UwxAAAAAAAAAAEAAAAAsWW07TLNx2xDq+aSFAZpwyzacdm5eqfFrhSqwWPRViwAAABAyHi8IXOpKZt9m3kmd9LNVc9lVswNXD0AM+6MYmCmoucGLesgmpZ8N3RYu1MRxvggJ/tHEeinMnjOZ8DFrviMCQAAAAEAAACYZfwtfyZ3No855TGDHuDE64RHIVy2DVnZ1LWuKKUjO7cAAAAAXPVMMQAAAAAAAAABAAAAALFltO0yzcdsQ6vmkhQGacMs2nHZuXqnxa4UqsFj0VYsAAAAQMh4vCFzqSmbfZt5JnfSzVXPZVbMDVw9ADPujGJgpqLnBi3rIJqWfDd0WLtTEcb4ICf7RxHopzJ4zmfAxa74jAkAAABAjymmUODr/NaoYIUtirtkOSYoy2I7OyzqVLSGb2DqwSUMTUIZDpUg5jOumgrAU5svRosR0em3JKBJvnAksjMkCgAAAACxZbTtMs3HbEOr5pIUBmnDLNpx2bl6p8WuFKrBY9FWLAAAAAAAAAAGAAAAAgAAAAEAAAAwZfwtfyZ3No855TGDHuDE64RHIVy2DVnZ1LWuKKUjO7cAAAAAXPVMMQAAAAAAAAAAAAAAAQJzNMd4lXMXEs+kmrukaNgBcaGsB6o7xGwHHpr6JQVoAAAAQIC/VI8z6JcFWEqyq1c+/6f/IBEc18ISY/QjNdiXkAqkh3P9FT48RsYu+k3UYKCqFAbszROvMrpfh8iS7TXGgwYAAAABGlWr8q9MPnf8ZWbiLmRnOjr5Prfzhoy3HSRRe2nd8yEAAAAGAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAAIAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAlQL5AAAAAAyAAAAAQAAAAAAAAAAAAAAAAAAAAFvFIhaAAAAQOEPkO/tqT4kQBzNlTOezZtiybuEk9mMmxGjLlmHueW8QtUS4J1O3Why4NKh8vwmonKQ1uMpCM/zYRzumjSEuAkAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAnoayYrF6OEhKYq4sh0Xp2LEPACIaoYIbEnndY6gUDG5R2kC+vfFXkiG/+ePx2DlG0HNvwpgKg5hOJsVEMysHBQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAGQAAAACAAAABgAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAAQAAAAoAAAAAAAAAAAAAAAAAAAABruS+TAAAAEDoBM5a3yMs2NzlblnUTlI+98iwSLVdZqWZVjjmTIOevFY6temrHsk4L1FAb1pgUDo3Syw7GO71N0kfEQIIgjAJAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAHAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAhhxGgAAAAABAAAACQAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQDsHLzD/7q/tBaFt+vL8svn4y3q1AFxMIYuT8NMzbswVsCUcLI1QlkxBQWtB7SjoDQMtd6dJEaO2upmPX9P3PAQAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAABkAAAAAgAAAAYAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAABfXhAAAAAA8AAAABAAAAAAAAAAAAAAAAAAAAAW8UiFoAAABAlFlL601BUvClwtCF2Ml08uHMy0rQ/xguaNPgG8aOgbt/n9z236xF+rkndcbjsTCf5LM6dz1VXhDC8st26yLDAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAGQAAAACAAAABwAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAFAAAAAEAAAAAAAAAAAAAAAAAAAABbxSIWgAAAEDT2I08k+/5mGmtkJGxcw5tIy6Sw4SbWQPqyTSUe0k37gXFCV3OVvlMFrP8CN9osLuInlN5WuqSSJMCP9HaunUMAAAAAQAAAAEAAAABAAAAALFltO0yzcdsQ6vmkhQGacMs2nHZuXqnxa4UqsFj0VYsAAAAAA=='); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO trustlines VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 50000000000, 1, 6, 0, 22200000000); -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 50000000000, 1, 6, 22200000000, 0); -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'BTC', 9223372036854775807, 60000000000, 1, 6, 0, 60000000000); -INSERT INTO trustlines VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'BTC', 9223372036854775807, 60000000000, 1, 6, 521500000000, 0); - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('2aadfb093f2817bd454a973ab441c4a3d7c948cc3a277fcb006bef7528bf949b', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('37156be3b9c170a015dbb63fe7b282b1309d477626f84cc6c9bcad1bf2bb3927', 2, 3, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIdugAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduecAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('811192c38643df73c015a5a1d77b802dff05d4f50fc6d10816aa75c0a6109f9a', 3, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIdugAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduecAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('3476bc649563488cf025d82790aa9c44649188232b150d2864d13fe9face5406', 3, 3, 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduecAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduc4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('7df857c23c7dfeb974d7c3956775685a8edfa8496bb781fd346c8e2025fad9bf', 3, 4, 'AAAAAgAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduecAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduc4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('ea945436a3b650efa88063e737518cf1928d9a43d1aba3ec684704f160b3733e', 4, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('416a63c3f1491537698cdb6f981097ed8e44ca27d2d9006bd0ba68832ebf9d55', 4, 2, 'AAAAAgAAAAMAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('73d859647f9f24f6a74bfc936df199256f67d852c472c26cabea83bec22b832d', 4, 3, 'AAAAAgAAAAMAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+LUAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('5ce932151e3d972e4ef521b0a6c63f173a5d73c324178379c1c8d52b19713ec8', 4, 4, 'AAAAAgAAAAMAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+LUAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+JwAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f42caf0be4aa867ffa832f8f925b75cf89b5615528016eb7ea47a285d2919a6c', 5, 1, 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduc4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIdubUAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('6fcbcfbcde0ad6e2da47126334413984d7337dffa9c537fb0569f848b3d2f6f2', 5, 2, 'AAAAAgAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduc4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIdubUAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('dcd151fda3242912d2fe71e0181f80806f081a61cf4746873b2ec15bb1bae395', 5, 3, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIdubUAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduZwAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('e9185c1cd138c5c15625531cfb527c50b9b84fadaa1a45c749f7af9647dec450', 5, 4, 'AAAAAgAAAAMAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIdubUAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduZwAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f93841b864bc4ce3ddcc2e2ab4378bfd443ecd6eee85b95d634da5c00b0cd667', 5, 5, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduZwAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('cd12e89db9e04541e37c796ebaae118d36f3bf9dcd3dde4ae0af96b768ffe71f', 5, 6, 'AAAAAgAAAAMAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduZwAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('82ebbbd502be295802887ff05f5cc888c4357a3c6c81f6b1dbdde1e3fb3989b1', 6, 1, 'AAAAAgAAAAMAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAF0h25agAAAACAAAABQAAAAUAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAB5a9J/AAAAAAAAAAAAAAAAAAAAAAA='); -INSERT INTO txfeehistory VALUES ('701efa0b0226e961d31df74f4282982b4048b2b9849ea3f7e02a418511d7a9c5', 6, 2, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAF0h25agAAAACAAAABQAAAAUAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA34R1gAAAAAAAAAAAA='); -INSERT INTO txfeehistory VALUES ('a415b192f3730a3ef139035f3c67e3b10a4ea69ff5145f3a76615c1a82400dc9', 6, 3, 'AAAAAgAAAAMAAAAGAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduWoAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAF0h25UQAAAACAAAABQAAAAUAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAB5a9J/AAAAAAAAAAAAAAAAAAAAAAA='); -INSERT INTO txfeehistory VALUES ('5dbdfd3ab91f4a52a11ba92c60334bca0d4aad951fe3d159b373afaba1632ea1', 6, 4, 'AAAAAgAAAAMAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduWoAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAF0h25UQAAAACAAAABQAAAAUAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA34R1gAAAAAAAAAAAA='); -INSERT INTO txfeehistory VALUES ('dfcf019e8c71290048dcd0e4fa01a6d7278386b3e6a793b4c53dd7751cd289e9', 6, 5, 'AAAAAgAAAAMAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduVEAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAF0h25OAAAAACAAAABQAAAAUAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA34R1gAAAAAAAAAAAA='); -INSERT INTO txfeehistory VALUES ('483298f40a79f46f684c41d22d4d902f1d3feb53abe5551d3ad69dc832408055', 6, 6, 'AAAAAgAAAAMAAAAGAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduVEAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAF0h25OAAAAACAAAABQAAAAUAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAB5a9J/AAAAAAAAAAAAAAAAAAAAAAA='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', '2zmOtK6JdWMlZDytIclOE7/AdLMj7oPhQb9wGl2QTxsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('2aadfb093f2817bd454a973ab441c4a3d7c948cc3a277fcb006bef7528bf949b', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHboAAAAAAAAAAABVvwF9wAAAECHa9hPxY+5w4/Cg1gW2BdJIU0CmCgnjjXQzx1DjeJzT4phXDLOieuZJoTX6jvhdzMahfepPlpQEIx82W5X8pIG', 'Kq37CT8oF71FSpc6tEHEo9fJSMw6J3/LAGvvdSi/lJsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtpoK4TLUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIdugAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('37156be3b9c170a015dbb63fe7b282b1309d477626f84cc6c9bcad1bf2bb3927', 2, 3, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHboAAAAAAAAAAABVvwF9wAAAEDJvf4IwI5rQT3Ap0/ZSFq+RwV1J6eAZV53d+d4+Bal+v3zdhIu82I/eIrOhDHQYrtuPZFwIcE4fuDjBgVIguEO', 'NxVr47nBcKAV27Y/57KCsTCdR3Ym+EzGybytG/K7OScAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtpoK4TLUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtoLCakrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIdugAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'vUhtvdAtRggXZxxKWn6dboZcopy0HmLXqvcKL+5bNt4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbnOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbnOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduc4AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduc4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('811192c38643df73c015a5a1d77b802dff05d4f50fc6d10816aa75c0a6109f9a', 3, 2, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAFvFIhaAAAAQPlg7GLhJg0x7jpAw1Ew6H2XF6yRImfJIwFfx09Nui5btOJAFewFANfOaAB8FQZl5p3A5g3k6DHDigfUNUD16gc=', 'gRGSw4ZD33PAFaWh13uALf8F1PUPxtEIFqp1wKYQn5oAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbnOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbnOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduc4AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduc4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('3476bc649563488cf025d82790aa9c44649188232b150d2864d13fe9face5406', 3, 3, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQEKBv+8zL1epwxC+sJhEYPmbjL9XScXtctoMIdet5dhgk7YJVJzAnRSgYTvfyoIJKJdQmX66uh2o+rG9K6JImgY=', 'NHa8ZJVjSIzwJdgnkKqcRGSRiCMrFQ0oZNE/6frOVAYAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbnOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbnOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduc4AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduc4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('7df857c23c7dfeb974d7c3956775685a8edfa8496bb781fd346c8e2025fad9bf', 3, 4, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAFvFIhaAAAAQBH/ML6+RzWquFPh8gLF2RuZzYtjjpPeHv/od9M74xlU09Xa4a5e1NhMtMSRIoLItg1EaDWE9zvtHflVWIAaSwQ=', 'ffhXwjx9/rl018OVZ3VoWo7fqElrt4H9NGyOICX62b8AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbnOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbnOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduc4AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduc4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('ea945436a3b650efa88063e737518cf1928d9a43d1aba3ec684704f160b3733e', 4, 1, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAAAAAAH5kC3vAAAAQH/ZkzR/eC0F7xP9zApeHvMH7nqetzaSdYh8WHyrwwvbEnx4Db6gz0grnRJBJS66OZbGmCk7yzHm8DkJ7bJ4QAU=', '6pRUNqO2UO+ogGPnN1GM8ZKNmkPRq6PsaEcE8WCzcz4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('416a63c3f1491537698cdb6f981097ed8e44ca27d2d9006bd0ba68832ebf9d55', 4, 2, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAAAAAAH5kC3vAAAAQFFGLGFFXbEDRdk2eFyQATNpHuqO/sFrpqsxmNNwGa+MLibNQJLDXWafC4W8KMKQ/hE0M0TLxZeu/O8tYnBuwwA=', 'QWpjw/FJFTdpjNtvmBCX7Y5EyifS2QBr0Lpogy6/nVUAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('73d859647f9f24f6a74bfc936df199256f67d852c472c26cabea83bec22b832d', 4, 3, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAAAAAAAAAAAH5kC3vAAAAQDRihMZEiZbpT45/sHslqaKo9bRzLTxvKY+d7hxxHyvlpZSCM8LOZ6frXbAweCsomNpe449ZDHEiwT2oQTWjXg8=', 'c9hZZH+fJPanS/yTbfGZJW9n2FLEcsJsq+qDvsIrgy0AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAADfhHWAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('5ce932151e3d972e4ef521b0a6c63f173a5d73c324178379c1c8d52b19713ec8', 4, 4, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAAAAAAAAAAAH5kC3vAAAAQIk+tsokBzu1gulfbYjE1e8r1k1piyBZ4dBn0u7vVgZ6/+qiElx7hKerBLj1KjbZGQXdaf90YaYEiJ8bby0EYgo=', 'XOkyFR49ly5O9SGwpsY/Fzpdc8MkF4N5wcjVKxlxPsgAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAAEAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAADfhHWAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f42caf0be4aa867ffa832f8f925b75cf89b5615528016eb7ea47a285d2919a6c', 5, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAeyObGhkwxonX/VI/jcfjrHOdhMDI9U7u4KxVjA3XHqkW4ENworQ5mZDRjj282acAG8cMfWGvYfFcQVVdX62nCw==', '9CyvC+Sqhn/6gy+Pklt1z4m1YVUoAW636keihdKRmmwAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAAQAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAAQAAAAoAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbmDAAAAAIAAAACAAAAAgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbmDAAAAAIAAAADAAAAAgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAMAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAMAAAADAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAO5rKAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAEAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAAAAAAAAAAAAQAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAABfXhAAAAAAAAAAAAAAAAAAAAAAA='); -INSERT INTO txhistory VALUES ('6fcbcfbcde0ad6e2da47126334413984d7337dffa9c537fb0569f848b3d2f6f2', 5, 2, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAAAAAABfXhAAAAAA8AAAABAAAAAAAAAAAAAAAAAAAAAW8UiFoAAABAxsghzEhvQmICVccjSoy9Q2LUjXol62JlBd8shmRwqO9XyelpSY554bdmHq6xqc6jYZow955E47PWqCEfeVhhCw==', 'b8vPvN4K1uLaRxJjNEE5hNczff+pxTf7BWn4SLPS9vIAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAAAAAAgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAF9eEAAAAADwAAAAEAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbmDAAAAAIAAAACAAAAAgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbmDAAAAAIAAAADAAAAAgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAMAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAMAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAMAAAADAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAFloLwAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAABAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAAAAAAAAAAAAQAAAAUAAAABAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAAAAAAAAAAAAAF9eEAAAAAAAAAAAAAAAAAAAAABQAAAAIAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAAAAAAgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAF9eEAAAAADwAAAAEAAAAAAAAAAAAAAAA='); -INSERT INTO txhistory VALUES ('dcd151fda3242912d2fe71e0181f80806f081a61cf4746873b2ec15bb1bae395', 5, 3, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACGHEaAAAAAAEAAAAJAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAqPx69qSD18N3YK5zdNznZdpXBkbohJTuCKnYl0dQPAE/HWxA8fNfVggVZtGaGk8YMcH/4dvB7zeGF9SEQoSQBg==', '3NFR/aMkKRLS/nHgGB+AgG8IGmHPR0aHOy7BW7G645UAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAIYcRoAAAAAAQAAAAkAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbmDAAAAAIAAAADAAAAAwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAADuaygAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAQAAAADAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAO5rKAAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAABQAAAAIAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAIYcRoAAAAAAQAAAAkAAAAAAAAAAAAAAAAAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbmDAAAAAIAAAAEAAAAAwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAADuaygAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAQAAAAEAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAACVAvkAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAABfXhAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAABBkKsAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('e9185c1cd138c5c15625531cfb527c50b9b84fadaa1a45c749f7af9647dec450', 5, 4, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAAAAAAO5rKAAAAABQAAAABAAAAAAAAAAAAAAAAAAAAAW8UiFoAAABAgI2ziUivGtOdn4yh1DKts6kzH4kZroEEHAUKspjBt8JrewsqrY1vOvn/5ob+x5EGmpEOFaDB/mINM33OASmyAA==', '6RhcHNE4xcFWJVMc+1J8ULm4T62qGkXHSfevlkfexFAAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAAAAABAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAA7msoAAAAAFAAAAAEAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbmDAAAAAIAAAADAAAAAwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAABZaC8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAQAAAADAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAFloLwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbmDAAAAAIAAAAEAAAAAwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAABZaC8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAQAAAAEAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAABQF/9wAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAAAAAAAAAAAAAF9eEAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAAAAAAAAAAAAEGQqwAAAAAAAAAAAAAAAAAAAAAFAAAAAgAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAAAAAAEAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAAAAAADuaygAAAAAUAAAAAQAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f93841b864bc4ce3ddcc2e2ab4378bfd443ecd6eee85b95d634da5c00b0cd667', 5, 5, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAO6P8u7hte5mLhMJe3EDbGFmBHKg/kN03Gfvwao0kYaGv7wHYouK/zhWBLu3A+tB4haCav2a/dO1JiND6xX11AA==', '+ThBuGS8TOPdzC4qtDeL/UQ+zW7uhbldY02lwAsM1mcAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAABQAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAQAAAAUAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbmDAAAAAIAAAAEAAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAlQL5AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAUAAAAEAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAACVAvkAAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAABQAAAAIAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAABQAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbmDAAAAAIAAAAFAAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAlQL5AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAAQZCrAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAKVnI8AAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('cd12e89db9e04541e37c796ebaae118d36f3bf9dcd3dde4ae0af96b768ffe71f', 5, 6, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAAAAACVAvkAAAAADIAAAABAAAAAAAAAAAAAAAAAAAAAW8UiFoAAABA5Xo6CV4r7iFHfyeH2p1RsjxOyoXGqhom3bEbhCMeTQNK2+UYCyWnmhZR6yRiWge9MSfcFhiv1LafatF+SW+EAg==', 'zRLonbngRUHjfHluuq4RjTbzv53NPd5K4K+Wt2j/5x8AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAAAAABgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAJUC+QAAAAAMgAAAAEAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbmDAAAAAIAAAAEAAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAUBf/cAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAUAAAAEAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAABQF/9wAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbmDAAAAAIAAAAFAAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAUBf/cAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAAAAAAAAAAAABBkKsAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAAAAAAAAAAAApWcjwAAAAAAAAAAAAAAAAAAAAAFAAAAAgAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAAAAAAGAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAAAAAAlQL5AAAAAAyAAAAAQAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('82ebbbd502be295802887ff05f5cc888c4357a3c6c81f6b1dbdde1e3fb3989b1', 6, 1, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAAGAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAX14QAAAAAPAAAAAQAAAAAAAAAAAAAAAAAAAAFvFIhaAAAAQJRZS+tNQVLwpcLQhdjJdPLhzMtK0P8YLmjT4BvGjoG7f5/c9t+sRfq5J3XG47Ewn+SzOnc9VV4QwvLLdusiwwA=', 'guu71QK+KVgCiH/wX1zIiMQ1ejxsgfax293h4/s5ibEAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAAAAABwAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAABfXhAAAAAA8AAAABAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbk4AAAAAIAAAAFAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAHlr0n8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduTgAAAAAgAAAAYAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAADAAAABQAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAAAAAAAAAAAApWcjwAAAAAAAAAAAAAAAAEAAAAGAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAABAAAAAAAAAAAAAAACm5JwAAAAAAAAAAAAAAAAAAAAAAYAAAACAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAAAAAAcAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAX14QAAAAAPAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAAGAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduTgAAAAAgAAAAYAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAF0h25OAAAAACAAAABgAAAAYAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAB5a9J/AAAAAAAAAAAAAAAAAAAAAAAAAAADAAAABAAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAf/////////8AAAABAAAAAAAAAAAAAAABAAAABgAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAf/////////8AAAABAAAAAQAAAABZaC8AAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('701efa0b0226e961d31df74f4282982b4048b2b9849ea3f7e02a418511d7a9c5', 6, 2, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAGAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADuaygAAAAABAAAACgAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQOgEzlrfIyzY3OVuWdROUj73yLBItV1mpZlWOOZMg568Vjq16aseyTgvUUBvWmBQOjdLLDsY7vU3SR8RAgiCMAk=', 'cB76CwIm6WHTHfdPQoKYK0BIsrmEnqP34CpBhRHXqcUAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAACAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAEAAAAKAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbk4AAAAAIAAAAFAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAADfhHWAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduTgAAAAAgAAAAYAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAcAAAADAAAABgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbk4AAAAAIAAAAGAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAADfhHWAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduTgAAAAAgAAAAYAAAAGAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAwAAAAQAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAN+EdYAH//////////AAAAAQAAAAAAAAAAAAAAAQAAAAYAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAN+EdYAH//////////AAAAAQAAAAEAAAAAAAAAAAAAAAA7msoAAAAAAAAAAAAAAAAAAAAABgAAAAIAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAACAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAClZyPAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAKbknAAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('a415b192f3730a3ef139035f3c67e3b10a4ea69ff5145f3a76615c1a82400dc9', 6, 3, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAAHAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADuaygAAAAAUAAAAAQAAAAAAAAAAAAAAAAAAAAFvFIhaAAAAQNPYjTyT7/mYaa2QkbFzDm0jLpLDhJtZA+rJNJR7STfuBcUJXc5W+UwWs/wI32iwu4ieU3la6pJIkwI/0dq6dQw=', 'pBWxkvNzCj7xOQNfPGfjsQpOpp/1FF86dmFcGoJADckAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAAAAACQAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAABQAAAABAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbk4AAAAAIAAAAGAAAABgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAHlr0n8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduTgAAAAAgAAAAcAAAAGAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAADAAAABgAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAAAAAAAAAAAApuScAAAAAAAAAAAAAAAAAEAAAAGAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAABAAAAAAAAAAAAAAAC1y06AAAAAAAAAAAAAAAAAwAAAAYAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAF0h25OAAAAACAAAABwAAAAYAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAB5a9J/AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbk4AAAAAIAAAAHAAAABwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAHlr0n8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAgAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAAAAAAJAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAFAAAAAEAAAAAAAAAAAAAAAAAAAADAAAABgAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAf/////////8AAAABAAAAAQAAAABZaC8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAADfhHWAB//////////wAAAAEAAAABAAAABQF/9wAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO txhistory VALUES ('5dbdfd3ab91f4a52a11ba92c60334bca0d4aad951fe3d159b373afaba1632ea1', 6, 4, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAHAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAhhxGgAAAAABAAAACQAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQDsHLzD/7q/tBaFt+vL8svn4y3q1AFxMIYuT8NMzbswVsCUcLI1QlkxBQWtB7SjoDQMtd6dJEaO2upmPX9P3PAQ=', 'Xb39OrkfSlKhG6ksYDNLyg1KrZUf49FZs3Ovq6FjLqEAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAACgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACGHEaAAAAAAEAAAAJAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbk4AAAAAIAAAAGAAAABgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAADfhHWAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduTgAAAAAgAAAAcAAAAGAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAcAAAAAAAAABgAAAAIAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAACgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACGHEaAAAAAAEAAAAJAAAAAAAAAAAAAAAAAAAAAwAAAAYAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAACm5JwAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAALXLToAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduTgAAAAAgAAAAcAAAAGAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAF0h25OAAAAACAAAABwAAAAcAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA34R1gAAAAAAAAAAAAAAAADAAAABgAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAf/////////8AAAABAAAAAQAAAAAAAAAAAAAAADuaygAAAAAAAAAAAAAAAAEAAAAGAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAADfhHWAB//////////wAAAAEAAAABAAAAAAAAAAAAAAACVAvkAAAAAAAAAAAA'); -INSERT INTO txhistory VALUES ('dfcf019e8c71290048dcd0e4fa01a6d7278386b3e6a793b4c53dd7751cd289e9', 6, 5, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAIAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAAAAAABAAAABQAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQJ6GsmKxejhISmKuLIdF6dixDwAiGqGCGxJ53WOoFAxuUdpAvr3xV5Ihv/nj8dg5RtBzb8KYCoOYTibFRDMrBwU=', '388BnoxxKQBI3NDk+gGm1yeDhrPmp5O0xT3XdRzSiekAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAACwAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AAAAAAEAAAAFAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbk4AAAAAIAAAAHAAAABwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAADfhHWAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduTgAAAAAgAAAAgAAAAHAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAcAAAAAAAAABgAAAAIAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAACwAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAwAAAAYAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAC1y06AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAUrOR4AAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduTgAAAAAgAAAAgAAAAHAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAF0h25OAAAAACAAAACAAAAAgAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA34R1gAAAAAAAAAAAAAAAADAAAABgAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAf/////////8AAAABAAAAAQAAAAAAAAAAAAAAAlQL5AAAAAAAAAAAAAAAAAEAAAAGAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAADfhHWAB//////////wAAAAEAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAA'); -INSERT INTO txhistory VALUES ('483298f40a79f46f684c41d22d4d902f1d3feb53abe5551d3ad69dc832408055', 6, 6, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAAIAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAlQL5AAAAAAyAAAAAQAAAAAAAAAAAAAAAAAAAAFvFIhaAAAAQOEPkO/tqT4kQBzNlTOezZtiybuEk9mMmxGjLlmHueW8QtUS4J1O3Why4NKh8vwmonKQ1uMpCM/zYRzumjSEuAk=', 'SDKY9Ap59G9oTEHSLU2QLx0/61Or5VUdOtadyDJAgFUAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAAAAADAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAADIAAAABAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbk4AAAAAIAAAAHAAAABwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAHlr0n8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduTgAAAAAgAAAAgAAAAHAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAAAAAABgAAAAIAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAAAAADAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAADIAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAYAAAABAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAAAAAAAAAAAALXLToAAAAAAAAAAAAAAAABAAAABgAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAAAAAAAAAAABSs5HgAAAAAAAAAAAAAAAAMAAAAGAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduTgAAAAAgAAAAgAAAAHAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAF0h25OAAAAACAAAACAAAAAgAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAB5a9J/AAAAAAAAAAAAAAAAAAAAAAAAAAADAAAABgAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAf/////////8AAAABAAAAAQAAAAUBf/cAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAADfhHWAB//////////wAAAAEAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/order_books-horizon.sql b/services/horizon/internal/test/scenarios/order_books-horizon.sql deleted file mode 100644 index 58a7265f19..0000000000 --- a/services/horizon/internal/test/scenarios/order_books-horizon.sql +++ /dev/null @@ -1,1065 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO asset_stats VALUES (1, '120000000000', 2, 0, ''); -INSERT INTO asset_stats VALUES (2, '100000000000', 2, 0, ''); - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_accounts VALUES (2, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (3, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_accounts VALUES (4, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 4, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_assets VALUES (1, 'credit_alphanum4', 'BTC', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_assets VALUES (2, 'credit_alphanum4', 'USD', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 2, true); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (2, 17179873281, 1, 2, '{"amount": "5000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 17179873281, 2, 3, '{"amount": "5000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 17179877377, 1, 2, '{"amount": "5000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 17179877377, 2, 3, '{"amount": "5000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 17179881473, 1, 2, '{"amount": "6000.0000000", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 17179881473, 2, 3, '{"amount": "6000.0000000", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 17179885569, 1, 2, '{"amount": "6000.0000000", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 17179885569, 2, 3, '{"amount": "6000.0000000", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 12884905985, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 12884910081, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 12884914177, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 12884918273, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 8589938689, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589938689, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (3, 8589938689, 3, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 8589942785, 1, 0, '{"starting_balance": "10000.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589942785, 2, 3, '{"amount": "10000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 8589942785, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); -INSERT INTO history_effects VALUES (1, 8589946881, 1, 0, '{"starting_balance": "10000.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589946881, 2, 3, '{"amount": "10000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589946881, 3, 10, '{"weight": 1, "public_key": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (6, 'c4a6a74732738a3c0a9f593eeed9a3934ded945f534960237af97d14a19c2d7a', '1a55abf2af4c3e77fc6566e22e64673a3af93eb7f3868cb71d24517b69ddf321', 6, 6, '2019-06-03 16:34:57', '2019-06-03 16:34:56.56589', '2019-06-03 16:34:56.56589', 25769803776, 16, 1000000000000000000, 2300, 100, 100000000, 1000000, 11, 'AAAACxpVq/KvTD53/GVm4i5kZzo6+T6384aMtx0kUXtp3fMhZfwtfyZ3No855TGDHuDE64RHIVy2DVnZ1LWuKKUjO7cAAAAAXPVMMQAAAAAAAAAAO03rkSSGII+TmdA0r8T7dSNCWamYkyOlDZ73gpuryU/suM5bhJhdnYJxFZYifs7vI3SW+AHdNb8DO82NPcTIogAAAAYN4Lazp2QAAAAAAAAAAAj8AAAAAAAAAAAAAAAMAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 6, 0); -INSERT INTO history_ledgers VALUES (5, '1a55abf2af4c3e77fc6566e22e64673a3af93eb7f3868cb71d24517b69ddf321', '489fc344816d731c2d49c820ffca50c3b2f8bccf4601d54b85e670e18660583b', 6, 6, '2019-06-03 16:34:56', '2019-06-03 16:34:56.585303', '2019-06-03 16:34:56.585303', 21474836480, 16, 1000000000000000000, 1700, 100, 100000000, 1000000, 11, 'AAAAC0ifw0SBbXMcLUnIIP/KUMOy+LzPRgHVS4XmcOGGYFg74pBNjQudZQeUtO+ef0ClbZW4mHTsXDthjA1m2/YMKVYAAAAAXPVMMAAAAAAAAAAAIMV0QzQRdUmn10wWB1qZt+ll6BH0Tj/XNrUL4wpqrGv7vjqy+ApufAu5XBskLBSeP8ekerJim7YM8SQ1gTiS+wAAAAUN4Lazp2QAAAAAAAAAAAakAAAAAAAAAAAAAAAGAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 6, 0); -INSERT INTO history_ledgers VALUES (4, '489fc344816d731c2d49c820ffca50c3b2f8bccf4601d54b85e670e18660583b', 'ee5eb4ca3953f13267d150232a56130d85f1046a095475c2ced90e70fd0b7c3f', 4, 4, '2019-06-03 16:34:55', '2019-06-03 16:34:56.604266', '2019-06-03 16:34:56.604266', 17179869184, 16, 1000000000000000000, 1100, 100, 100000000, 1000000, 11, 'AAAAC+5etMo5U/EyZ9FQIypWEw2F8QRqCVR1ws7ZDnD9C3w/XrJpvir6M5qcfccRwfa25D82mk9KqVu+jfp2oyV8oB4AAAAAXPVMLwAAAAAAAAAAEvM5tT8l0dTEZQLsPGomBGcTJkGZVcTwRLD10i4EXb8UDbYtiVmJ3Yug+eevH/53npTQBK2rHoHq9ZtHrwM4VAAAAAQN4Lazp2QAAAAAAAAAAARMAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 4, 0); -INSERT INTO history_ledgers VALUES (3, 'ee5eb4ca3953f13267d150232a56130d85f1046a095475c2ced90e70fd0b7c3f', 'd3f31f4c9cc9e5a3e3a1a555ee4117c7832b138d1d7fa6a56100a6ad9691d8af', 4, 4, '2019-06-03 16:34:54', '2019-06-03 16:34:56.629121', '2019-06-03 16:34:56.629121', 12884901888, 16, 1000000000000000000, 700, 100, 100000000, 1000000, 11, 'AAAAC9PzH0ycyeWj46GlVe5BF8eDKxONHX+mpWEApq2WkdivNyQdrblsa09Sp07tvZedQwAg6pVWfut907LWUCZCF7MAAAAAXPVMLgAAAAAAAAAAgzaJz4Xq1aG8spy1oEm7qAluf8fQetm330Mf8Zmid+DWd+FthtLbAl2FZsB+Y3tdbnP+t0Co8+2QM4qnsf+/IgAAAAMN4Lazp2QAAAAAAAAAAAK8AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 4, 0); -INSERT INTO history_ledgers VALUES (2, 'd3f31f4c9cc9e5a3e3a1a555ee4117c7832b138d1d7fa6a56100a6ad9691d8af', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 3, 3, '2019-06-03 16:34:53', '2019-06-03 16:34:56.655059', '2019-06-03 16:34:56.655059', 8589934592, 16, 1000000000000000000, 300, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZCS8URcyE4gRYsZAdb7e4uHwbaA5fhFIEcA1CSR23Z5oAAAAAXPVMLQAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAzi1xgnE3PAfb2CbU6dwiHL3p/nbMw7WpXJpWKu4ASuj3VfQyUTYaTAHR9L+Sv+BtDfJ1oMaaXQNjhZARWKzUAwAAAAIN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 3, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:34:56.666765', '2019-06-03 16:34:56.666765', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 25769807873, 1); -INSERT INTO history_operation_participants VALUES (2, 25769811969, 2); -INSERT INTO history_operation_participants VALUES (3, 25769816065, 1); -INSERT INTO history_operation_participants VALUES (4, 25769820161, 2); -INSERT INTO history_operation_participants VALUES (5, 25769824257, 2); -INSERT INTO history_operation_participants VALUES (6, 25769828353, 1); -INSERT INTO history_operation_participants VALUES (7, 21474840577, 2); -INSERT INTO history_operation_participants VALUES (8, 21474844673, 1); -INSERT INTO history_operation_participants VALUES (9, 21474848769, 2); -INSERT INTO history_operation_participants VALUES (10, 21474852865, 1); -INSERT INTO history_operation_participants VALUES (11, 21474856961, 2); -INSERT INTO history_operation_participants VALUES (12, 21474861057, 1); -INSERT INTO history_operation_participants VALUES (13, 17179873281, 3); -INSERT INTO history_operation_participants VALUES (14, 17179873281, 2); -INSERT INTO history_operation_participants VALUES (15, 17179877377, 3); -INSERT INTO history_operation_participants VALUES (16, 17179877377, 1); -INSERT INTO history_operation_participants VALUES (17, 17179881473, 3); -INSERT INTO history_operation_participants VALUES (18, 17179881473, 2); -INSERT INTO history_operation_participants VALUES (19, 17179885569, 3); -INSERT INTO history_operation_participants VALUES (20, 17179885569, 1); -INSERT INTO history_operation_participants VALUES (21, 12884905985, 2); -INSERT INTO history_operation_participants VALUES (22, 12884910081, 1); -INSERT INTO history_operation_participants VALUES (23, 12884914177, 2); -INSERT INTO history_operation_participants VALUES (24, 12884918273, 1); -INSERT INTO history_operation_participants VALUES (25, 8589938689, 4); -INSERT INTO history_operation_participants VALUES (26, 8589938689, 3); -INSERT INTO history_operation_participants VALUES (27, 8589942785, 4); -INSERT INTO history_operation_participants VALUES (28, 8589942785, 2); -INSERT INTO history_operation_participants VALUES (29, 8589946881, 4); -INSERT INTO history_operation_participants VALUES (30, 8589946881, 1); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 30, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (25769807873, 25769807872, 1, 3, '{"price": "15.0000000", "amount": "10.0000000", "price_r": {"d": 1, "n": 15}, "offer_id": 0, "buying_asset_code": "BTC", "buying_asset_type": "credit_alphanum4", "selling_asset_code": "USD", "selling_asset_type": "credit_alphanum4", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "selling_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_operations VALUES (25769811969, 25769811968, 1, 3, '{"price": "0.1000000", "amount": "100.0000000", "price_r": {"d": 10, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_code": "BTC", "selling_asset_type": "credit_alphanum4", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "selling_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (25769816065, 25769816064, 1, 3, '{"price": "20.0000000", "amount": "100.0000000", "price_r": {"d": 1, "n": 20}, "offer_id": 0, "buying_asset_code": "BTC", "buying_asset_type": "credit_alphanum4", "selling_asset_code": "USD", "selling_asset_type": "credit_alphanum4", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "selling_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_operations VALUES (25769820161, 25769820160, 1, 3, '{"price": "0.1111111", "amount": "900.0000000", "price_r": {"d": 9, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_code": "BTC", "selling_asset_type": "credit_alphanum4", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "selling_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (25769824257, 25769824256, 1, 3, '{"price": "0.2000000", "amount": "5000.0000000", "price_r": {"d": 5, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_code": "BTC", "selling_asset_type": "credit_alphanum4", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "selling_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (25769828353, 25769828352, 1, 3, '{"price": "50.0000000", "amount": "1000.0000000", "price_r": {"d": 1, "n": 50}, "offer_id": 0, "buying_asset_code": "BTC", "buying_asset_type": "credit_alphanum4", "selling_asset_code": "USD", "selling_asset_type": "credit_alphanum4", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "selling_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_operations VALUES (21474840577, 21474840576, 1, 3, '{"price": "0.1000000", "amount": "100.0000000", "price_r": {"d": 10, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474844673, 21474844672, 1, 3, '{"price": "15.0000000", "amount": "10.0000000", "price_r": {"d": 1, "n": 15}, "offer_id": 0, "buying_asset_type": "native", "selling_asset_code": "USD", "selling_asset_type": "credit_alphanum4", "selling_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_operations VALUES (21474848769, 21474848768, 1, 3, '{"price": "0.1111111", "amount": "900.0000000", "price_r": {"d": 9, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474852865, 21474852864, 1, 3, '{"price": "20.0000000", "amount": "100.0000000", "price_r": {"d": 1, "n": 20}, "offer_id": 0, "buying_asset_type": "native", "selling_asset_code": "USD", "selling_asset_type": "credit_alphanum4", "selling_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_operations VALUES (21474856961, 21474856960, 1, 3, '{"price": "0.2000000", "amount": "5000.0000000", "price_r": {"d": 5, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474861057, 21474861056, 1, 3, '{"price": "50.0000000", "amount": "1000.0000000", "price_r": {"d": 1, "n": 50}, "offer_id": 0, "buying_asset_type": "native", "selling_asset_code": "USD", "selling_asset_type": "credit_alphanum4", "selling_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_operations VALUES (17179873281, 17179873280, 1, 1, '{"to": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "from": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "amount": "5000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (17179877377, 17179877376, 1, 1, '{"to": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "from": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "amount": "5000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (17179881473, 17179881472, 1, 1, '{"to": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "from": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "amount": "6000.0000000", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (17179885569, 17179885568, 1, 1, '{"to": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "from": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "amount": "6000.0000000", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (12884910081, 12884910080, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_operations VALUES (12884914177, 12884914176, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (12884918273, 12884918272, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "10000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589946881, 8589946880, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "starting_balance": "10000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 25769807872, 1); -INSERT INTO history_transaction_participants VALUES (2, 25769811968, 2); -INSERT INTO history_transaction_participants VALUES (3, 25769816064, 1); -INSERT INTO history_transaction_participants VALUES (4, 25769820160, 2); -INSERT INTO history_transaction_participants VALUES (5, 25769824256, 2); -INSERT INTO history_transaction_participants VALUES (6, 25769828352, 1); -INSERT INTO history_transaction_participants VALUES (7, 21474840576, 2); -INSERT INTO history_transaction_participants VALUES (8, 21474844672, 1); -INSERT INTO history_transaction_participants VALUES (9, 21474848768, 2); -INSERT INTO history_transaction_participants VALUES (10, 21474852864, 1); -INSERT INTO history_transaction_participants VALUES (11, 21474856960, 2); -INSERT INTO history_transaction_participants VALUES (12, 21474861056, 1); -INSERT INTO history_transaction_participants VALUES (13, 17179873280, 3); -INSERT INTO history_transaction_participants VALUES (14, 17179873280, 2); -INSERT INTO history_transaction_participants VALUES (15, 17179877376, 3); -INSERT INTO history_transaction_participants VALUES (16, 17179877376, 1); -INSERT INTO history_transaction_participants VALUES (17, 17179881472, 3); -INSERT INTO history_transaction_participants VALUES (18, 17179881472, 2); -INSERT INTO history_transaction_participants VALUES (19, 17179885568, 1); -INSERT INTO history_transaction_participants VALUES (20, 17179885568, 3); -INSERT INTO history_transaction_participants VALUES (21, 12884905984, 2); -INSERT INTO history_transaction_participants VALUES (22, 12884910080, 1); -INSERT INTO history_transaction_participants VALUES (23, 12884914176, 2); -INSERT INTO history_transaction_participants VALUES (24, 12884918272, 1); -INSERT INTO history_transaction_participants VALUES (25, 8589938688, 4); -INSERT INTO history_transaction_participants VALUES (26, 8589938688, 3); -INSERT INTO history_transaction_participants VALUES (27, 8589942784, 4); -INSERT INTO history_transaction_participants VALUES (28, 8589942784, 2); -INSERT INTO history_transaction_participants VALUES (29, 8589946880, 1); -INSERT INTO history_transaction_participants VALUES (30, 8589946880, 4); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 30, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('82ebbbd502be295802887ff05f5cc888c4357a3c6c81f6b1dbdde1e3fb3989b1', 6, 1, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 8589934598, 100, 1, '2019-06-03 16:34:56.566205', '2019-06-03 16:34:56.566205', 25769807872, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAAGAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAX14QAAAAAPAAAAAQAAAAAAAAAAAAAAAAAAAAFvFIhaAAAAQJRZS+tNQVLwpcLQhdjJdPLhzMtK0P8YLmjT4BvGjoG7f5/c9t+sRfq5J3XG47Ewn+SzOnc9VV4QwvLLdusiwwA=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAAAAAAcAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAX14QAAAAAPAAAAAQAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbk4AAAAAIAAAAFAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAHlr0n8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduTgAAAAAgAAAAYAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAADAAAABQAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAAAAAAAAAAAApWcjwAAAAAAAAAAAAAAAAEAAAAGAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAABAAAAAAAAAAAAAAACm5JwAAAAAAAAAAAAAAAAAAAAAAYAAAACAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAAAAAAcAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAX14QAAAAAPAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAAGAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduTgAAAAAgAAAAYAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAF0h25OAAAAACAAAABgAAAAYAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAB5a9J/AAAAAAAAAAAAAAAAAAAAAAAAAAADAAAABAAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAf/////////8AAAABAAAAAAAAAAAAAAABAAAABgAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAf/////////8AAAABAAAAAQAAAABZaC8AAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAF0h25agAAAACAAAABQAAAAUAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAB5a9J/AAAAAAAAAAAAAAAAAAAAAAA=', '{lFlL601BUvClwtCF2Ml08uHMy0rQ/xguaNPgG8aOgbt/n9z236xF+rkndcbjsTCf5LM6dz1VXhDC8st26yLDAA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('701efa0b0226e961d31df74f4282982b4048b2b9849ea3f7e02a418511d7a9c5', 6, 2, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934598, 100, 1, '2019-06-03 16:34:56.566584', '2019-06-03 16:34:56.566584', 25769811968, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAGAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADuaygAAAAABAAAACgAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQOgEzlrfIyzY3OVuWdROUj73yLBItV1mpZlWOOZMg568Vjq16aseyTgvUUBvWmBQOjdLLDsY7vU3SR8RAgiCMAk=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAgAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADuaygAAAAABAAAACgAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbk4AAAAAIAAAAFAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAADfhHWAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduTgAAAAAgAAAAYAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAcAAAADAAAABgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbk4AAAAAIAAAAGAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAADfhHWAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduTgAAAAAgAAAAYAAAAGAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAwAAAAQAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAN+EdYAH//////////AAAAAQAAAAAAAAAAAAAAAQAAAAYAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAN+EdYAH//////////AAAAAQAAAAEAAAAAAAAAAAAAAAA7msoAAAAAAAAAAAAAAAAAAAAABgAAAAIAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAACAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAClZyPAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAKbknAAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAF0h25agAAAACAAAABQAAAAUAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA34R1gAAAAAAAAAAAA=', '{6ATOWt8jLNjc5W5Z1E5SPvfIsEi1XWalmVY45kyDnrxWOrXpqx7JOC9RQG9aYFA6N0ssOxju9TdJHxECCIIwCQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('a415b192f3730a3ef139035f3c67e3b10a4ea69ff5145f3a76615c1a82400dc9', 6, 3, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 8589934599, 100, 1, '2019-06-03 16:34:56.56681', '2019-06-03 16:34:56.56681', 25769816064, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAAHAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADuaygAAAAAUAAAAAQAAAAAAAAAAAAAAAAAAAAFvFIhaAAAAQNPYjTyT7/mYaa2QkbFzDm0jLpLDhJtZA+rJNJR7STfuBcUJXc5W+UwWs/wI32iwu4ieU3la6pJIkwI/0dq6dQw=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAAAAAAkAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADuaygAAAAAUAAAAAQAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbk4AAAAAIAAAAGAAAABgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAHlr0n8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduTgAAAAAgAAAAcAAAAGAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAADAAAABgAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAAAAAAAAAAAApuScAAAAAAAAAAAAAAAAAEAAAAGAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAABAAAAAAAAAAAAAAAC1y06AAAAAAAAAAAAAAAAAwAAAAYAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAF0h25OAAAAACAAAABwAAAAYAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAB5a9J/AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbk4AAAAAIAAAAHAAAABwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAHlr0n8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAgAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAAAAAAJAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAFAAAAAEAAAAAAAAAAAAAAAAAAAADAAAABgAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAf/////////8AAAABAAAAAQAAAABZaC8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAADfhHWAB//////////wAAAAEAAAABAAAABQF/9wAAAAAAAAAAAAAAAAAAAAAA', 'AAAAAgAAAAMAAAAGAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduWoAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAF0h25UQAAAACAAAABQAAAAUAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAB5a9J/AAAAAAAAAAAAAAAAAAAAAAA=', '{09iNPJPv+ZhprZCRsXMObSMuksOEm1kD6sk0lHtJN+4FxQldzlb5TBaz/AjfaLC7iJ5TeVrqkkiTAj/R2rp1DA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('5dbdfd3ab91f4a52a11ba92c60334bca0d4aad951fe3d159b373afaba1632ea1', 6, 4, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934599, 100, 1, '2019-06-03 16:34:56.567022', '2019-06-03 16:34:56.567022', 25769820160, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAHAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAhhxGgAAAAABAAAACQAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQDsHLzD/7q/tBaFt+vL8svn4y3q1AFxMIYuT8NMzbswVsCUcLI1QlkxBQWtB7SjoDQMtd6dJEaO2upmPX9P3PAQ=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAoAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAhhxGgAAAAABAAAACQAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbk4AAAAAIAAAAGAAAABgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAADfhHWAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduTgAAAAAgAAAAcAAAAGAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAcAAAAAAAAABgAAAAIAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAACgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACGHEaAAAAAAEAAAAJAAAAAAAAAAAAAAAAAAAAAwAAAAYAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAACm5JwAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAALXLToAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduTgAAAAAgAAAAcAAAAGAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAF0h25OAAAAACAAAABwAAAAcAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA34R1gAAAAAAAAAAAAAAAADAAAABgAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAf/////////8AAAABAAAAAQAAAAAAAAAAAAAAADuaygAAAAAAAAAAAAAAAAEAAAAGAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAADfhHWAB//////////wAAAAEAAAABAAAAAAAAAAAAAAACVAvkAAAAAAAAAAAA', 'AAAAAgAAAAMAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduWoAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAF0h25UQAAAACAAAABQAAAAUAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA34R1gAAAAAAAAAAAA=', '{OwcvMP/ur+0FoW368vyy+fjLerUAXEwhi5Pw0zNuzBWwJRwsjVCWTEFBa0HtKOgNAy13p0kRo7a6mY9f0/c8BA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('dfcf019e8c71290048dcd0e4fa01a6d7278386b3e6a793b4c53dd7751cd289e9', 6, 5, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934600, 100, 1, '2019-06-03 16:34:56.567234', '2019-06-03 16:34:56.567234', 25769824256, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAIAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAAAAAABAAAABQAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQJ6GsmKxejhISmKuLIdF6dixDwAiGqGCGxJ53WOoFAxuUdpAvr3xV5Ihv/nj8dg5RtBzb8KYCoOYTibFRDMrBwU=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAsAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAAAAAABAAAABQAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbk4AAAAAIAAAAHAAAABwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAADfhHWAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduTgAAAAAgAAAAgAAAAHAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAcAAAAAAAAABgAAAAIAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAACwAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAwAAAAYAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAC1y06AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAUrOR4AAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduTgAAAAAgAAAAgAAAAHAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAF0h25OAAAAACAAAACAAAAAgAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA34R1gAAAAAAAAAAAAAAAADAAAABgAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAf/////////8AAAABAAAAAQAAAAAAAAAAAAAAAlQL5AAAAAAAAAAAAAAAAAEAAAAGAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAADfhHWAB//////////wAAAAEAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAA', 'AAAAAgAAAAMAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduVEAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAF0h25OAAAAACAAAABQAAAAUAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA34R1gAAAAAAAAAAAA=', '{noayYrF6OEhKYq4sh0Xp2LEPACIaoYIbEnndY6gUDG5R2kC+vfFXkiG/+ePx2DlG0HNvwpgKg5hOJsVEMysHBQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('483298f40a79f46f684c41d22d4d902f1d3feb53abe5551d3ad69dc832408055', 6, 6, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 8589934600, 100, 1, '2019-06-03 16:34:56.567438', '2019-06-03 16:34:56.567438', 25769828352, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAAIAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAlQL5AAAAAAyAAAAAQAAAAAAAAAAAAAAAAAAAAFvFIhaAAAAQOEPkO/tqT4kQBzNlTOezZtiybuEk9mMmxGjLlmHueW8QtUS4J1O3Why4NKh8vwmonKQ1uMpCM/zYRzumjSEuAk=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAAAAAAwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAlQL5AAAAAAyAAAAAQAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbk4AAAAAIAAAAHAAAABwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAHlr0n8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduTgAAAAAgAAAAgAAAAHAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAAAAAABgAAAAIAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAAAAADAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAUJUQwAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAADIAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAYAAAABAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAAAAAAAAAAAALXLToAAAAAAAAAAAAAAAABAAAABgAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAAAAAAAAAAABSs5HgAAAAAAAAAAAAAAAAMAAAAGAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduTgAAAAAgAAAAgAAAAHAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAF0h25OAAAAACAAAACAAAAAgAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAB5a9J/AAAAAAAAAAAAAAAAAAAAAAAAAAADAAAABgAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAf/////////8AAAABAAAAAQAAAAUBf/cAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAADfhHWAB//////////wAAAAEAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAA', 'AAAAAgAAAAMAAAAGAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduVEAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAF0h25OAAAAACAAAABQAAAAUAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAB5a9J/AAAAAAAAAAAAAAAAAAAAAAA=', '{4Q+Q7+2pPiRAHM2VM57Nm2LJu4ST2YybEaMuWYe55bxC1RLgnU7daHLg0qHy/CaicpDW4ykIz/NhHO6aNIS4CQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f42caf0be4aa867ffa832f8f925b75cf89b5615528016eb7ea47a285d2919a6c', 5, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934595, 100, 1, '2019-06-03 16:34:56.585503', '2019-06-03 16:34:56.585503', 21474840576, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAeyObGhkwxonX/VI/jcfjrHOdhMDI9U7u4KxVjA3XHqkW4ENworQ5mZDRjj282acAG8cMfWGvYfFcQVVdX62nCw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAEAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAEAAAAKAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbmDAAAAAIAAAACAAAAAgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbmDAAAAAIAAAADAAAAAgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAMAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAMAAAADAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAO5rKAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAEAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAAAAAAAAAAAAQAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAABfXhAAAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduc4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIdubUAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{eyObGhkwxonX/VI/jcfjrHOdhMDI9U7u4KxVjA3XHqkW4ENworQ5mZDRjj282acAG8cMfWGvYfFcQVVdX62nCw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('6fcbcfbcde0ad6e2da47126334413984d7337dffa9c537fb0569f848b3d2f6f2', 5, 2, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 8589934595, 100, 1, '2019-06-03 16:34:56.585699', '2019-06-03 16:34:56.585699', 21474844672, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAAAAAABfXhAAAAAA8AAAABAAAAAAAAAAAAAAAAAAAAAW8UiFoAAABAxsghzEhvQmICVccjSoy9Q2LUjXol62JlBd8shmRwqO9XyelpSY554bdmHq6xqc6jYZow955E47PWqCEfeVhhCw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAAAAAAIAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAAAAAABfXhAAAAAA8AAAABAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbmDAAAAAIAAAACAAAAAgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbmDAAAAAIAAAADAAAAAgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAMAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAMAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAMAAAADAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAFloLwAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAABAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAAAAAAAAAAAAQAAAAUAAAABAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAAAAAAAAAAAAAF9eEAAAAAAAAAAAAAAAAAAAAABQAAAAIAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAAAAAAAgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAAF9eEAAAAADwAAAAEAAAAAAAAAAAAAAAA=', 'AAAAAgAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduc4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIdubUAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{xsghzEhvQmICVccjSoy9Q2LUjXol62JlBd8shmRwqO9XyelpSY554bdmHq6xqc6jYZow955E47PWqCEfeVhhCw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('dcd151fda3242912d2fe71e0181f80806f081a61cf4746873b2ec15bb1bae395', 5, 3, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934596, 100, 1, '2019-06-03 16:34:56.585868', '2019-06-03 16:34:56.585868', 21474848768, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACGHEaAAAAAAEAAAAJAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAqPx69qSD18N3YK5zdNznZdpXBkbohJTuCKnYl0dQPAE/HWxA8fNfVggVZtGaGk8YMcH/4dvB7zeGF9SEQoSQBg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACGHEaAAAAAAEAAAAJAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbmDAAAAAIAAAADAAAAAwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAADuaygAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAQAAAADAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAO5rKAAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAABQAAAAIAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAIYcRoAAAAAAQAAAAkAAAAAAAAAAAAAAAAAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbmDAAAAAIAAAAEAAAAAwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAADuaygAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAQAAAAEAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAACVAvkAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAABfXhAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAABBkKsAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIdubUAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduZwAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{qPx69qSD18N3YK5zdNznZdpXBkbohJTuCKnYl0dQPAE/HWxA8fNfVggVZtGaGk8YMcH/4dvB7zeGF9SEQoSQBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('e9185c1cd138c5c15625531cfb527c50b9b84fadaa1a45c749f7af9647dec450', 5, 4, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 8589934596, 100, 1, '2019-06-03 16:34:56.586037', '2019-06-03 16:34:56.586037', 21474852864, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAAAAAAO5rKAAAAABQAAAABAAAAAAAAAAAAAAAAAAAAAW8UiFoAAABAgI2ziUivGtOdn4yh1DKts6kzH4kZroEEHAUKspjBt8JrewsqrY1vOvn/5ob+x5EGmpEOFaDB/mINM33OASmyAA==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAAAAAAQAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAAAAAAO5rKAAAAABQAAAABAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbmDAAAAAIAAAADAAAAAwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAABZaC8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAQAAAADAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAFloLwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbmDAAAAAIAAAAEAAAAAwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAABZaC8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAQAAAAEAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAABQF/9wAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAAAAAAAAAAAAAF9eEAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAAAAAAAAAAAAEGQqwAAAAAAAAAAAAAAAAAAAAAFAAAAAgAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAAAAAAEAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAAAAAADuaygAAAAAUAAAAAQAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIdubUAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduZwAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{gI2ziUivGtOdn4yh1DKts6kzH4kZroEEHAUKspjBt8JrewsqrY1vOvn/5ob+x5EGmpEOFaDB/mINM33OASmyAA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f93841b864bc4ce3ddcc2e2ab4378bfd443ecd6eee85b95d634da5c00b0cd667', 5, 5, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934597, 100, 1, '2019-06-03 16:34:56.586199', '2019-06-03 16:34:56.586199', 21474856960, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAO6P8u7hte5mLhMJe3EDbGFmBHKg/kN03Gfvwao0kYaGv7wHYouK/zhWBLu3A+tB4haCav2a/dO1JiND6xX11AA==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAUAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AAAAAAEAAAAFAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbmDAAAAAIAAAAEAAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAlQL5AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAUAAAAEAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAACVAvkAAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAABQAAAAIAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAABQAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbmDAAAAAIAAAAFAAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAlQL5AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAN+EdYAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAAQZCrAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAKVnI8AAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduZwAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduYMAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{O6P8u7hte5mLhMJe3EDbGFmBHKg/kN03Gfvwao0kYaGv7wHYouK/zhWBLu3A+tB4haCav2a/dO1JiND6xX11AA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('cd12e89db9e04541e37c796ebaae118d36f3bf9dcd3dde4ae0af96b768ffe71f', 5, 6, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 8589934597, 100, 1, '2019-06-03 16:34:56.586374', '2019-06-03 16:34:56.586374', 21474861056, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAMAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAAAAACVAvkAAAAADIAAAABAAAAAAAAAAAAAAAAAAAAAW8UiFoAAABA5Xo6CV4r7iFHfyeH2p1RsjxOyoXGqhom3bEbhCMeTQNK2+UYCyWnmhZR6yRiWge9MSfcFhiv1LafatF+SW+EAg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAAAAACVAvkAAAAADIAAAABAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbmDAAAAAIAAAAEAAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAUBf/cAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAUAAAAEAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAABQF/9wAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbmDAAAAAIAAAAFAAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAUBf/cAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAeWvSfwAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAAAAAAAAAAAABBkKsAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAAAAAAAAAAAApWcjwAAAAAAAAAAAAAAAAAAAAAFAAAAAgAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAAAAAAGAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAAAAAAlQL5AAAAAAyAAAAAQAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduZwAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduYMAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{5Xo6CV4r7iFHfyeH2p1RsjxOyoXGqhom3bEbhCMeTQNK2+UYCyWnmhZR6yRiWge9MSfcFhiv1LafatF+SW+EAg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('ea945436a3b650efa88063e737518cf1928d9a43d1aba3ec684704f160b3733e', 4, 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934593, 100, 1, '2019-06-03 16:34:56.604445', '2019-06-03 16:34:56.604445', 17179873280, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAAAAAAH5kC3vAAAAQH/ZkzR/eC0F7xP9zApeHvMH7nqetzaSdYh8WHyrwwvbEnx4Db6gz0grnRJBJS66OZbGmCk7yzHm8DkJ7bJ4QAU=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{f9mTNH94LQXvE/3MCl4e8wfuep63NpJ1iHxYfKvDC9sSfHgNvqDPSCudEkElLro5lsaYKTvLMebwOQntsnhABQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('416a63c3f1491537698cdb6f981097ed8e44ca27d2d9006bd0ba68832ebf9d55', 4, 2, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934594, 100, 1, '2019-06-03 16:34:56.604638', '2019-06-03 16:34:56.604639', 17179877376, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAAAAAAH5kC3vAAAAQFFGLGFFXbEDRdk2eFyQATNpHuqO/sFrpqsxmNNwGa+MLibNQJLDXWafC4W8KMKQ/hE0M0TLxZeu/O8tYnBuwwA=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{UUYsYUVdsQNF2TZ4XJABM2ke6o7+wWumqzGY03AZr4wuJs1AksNdZp8LhbwowpD+ETQzRMvFl6787y1icG7DAA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('73d859647f9f24f6a74bfc936df199256f67d852c472c26cabea83bec22b832d', 4, 3, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934595, 100, 1, '2019-06-03 16:34:56.604782', '2019-06-03 16:34:56.604782', 17179881472, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAAAAAAAAAAAH5kC3vAAAAQDRihMZEiZbpT45/sHslqaKo9bRzLTxvKY+d7hxxHyvlpZSCM8LOZ6frXbAweCsomNpe449ZDHEiwT2oQTWjXg8=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAADfhHWAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+LUAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{NGKExkSJlulPjn+weyWpoqj1tHMtPG8pj53uHHEfK+WllIIzws5np+tdsDB4KyiY2l7jj1kMcSLBPahBNaNeDw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('5ce932151e3d972e4ef521b0a6c63f173a5d73c324178379c1c8d52b19713ec8', 4, 4, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934596, 100, 1, '2019-06-03 16:34:56.604915', '2019-06-03 16:34:56.604927', 17179885568, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAAAAAAAAAAAH5kC3vAAAAQIk+tsokBzu1gulfbYjE1e8r1k1piyBZ4dBn0u7vVgZ6/+qiElx7hKerBLj1KjbZGQXdaf90YaYEiJ8bby0EYgo=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAAEAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAADfhHWAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+LUAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+JwAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{iT62yiQHO7WC6V9tiMTV7yvWTWmLIFnh0GfS7u9WBnr/6qISXHuEp6sEuPUqNtkZBd1p/3RhpgSInxtvLQRiCg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:34:56.629328', '2019-06-03 16:34:56.629329', 12884905984, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbnOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbnOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduc4AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduc4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIdugAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduecAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{H2SYpbare/tB/Lw8x6QRvVNMjmLGqQjQGiBes63uA7XrZBuSHZ1JNR94Oi9zQ8Bp+ENfG2FUCWwu6OUGbKMEBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('811192c38643df73c015a5a1d77b802dff05d4f50fc6d10816aa75c0a6109f9a', 3, 2, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 8589934593, 100, 1, '2019-06-03 16:34:56.629864', '2019-06-03 16:34:56.629866', 12884910080, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAFvFIhaAAAAQPlg7GLhJg0x7jpAw1Ew6H2XF6yRImfJIwFfx09Nui5btOJAFewFANfOaAB8FQZl5p3A5g3k6DHDigfUNUD16gc=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbnOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbnOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduc4AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduc4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIdugAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduecAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{+WDsYuEmDTHuOkDDUTDofZcXrJEiZ8kjAV/HT026Llu04kAV7AUA185oAHwVBmXmncDmDeToMcOKB9Q1QPXqBw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('3476bc649563488cf025d82790aa9c44649188232b150d2864d13fe9face5406', 3, 3, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934594, 100, 1, '2019-06-03 16:34:56.630812', '2019-06-03 16:34:56.630813', 12884914176, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQEKBv+8zL1epwxC+sJhEYPmbjL9XScXtctoMIdet5dhgk7YJVJzAnRSgYTvfyoIJKJdQmX66uh2o+rG9K6JImgY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbnOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHbnOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduc4AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduc4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduecAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIduc4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{QoG/7zMvV6nDEL6wmERg+ZuMv1dJxe1y2gwh163l2GCTtglUnMCdFKBhO9/Kggkol1CZfrq6Haj6sb0rokiaBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('7df857c23c7dfeb974d7c3956775685a8edfa8496bb781fd346c8e2025fad9bf', 3, 4, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 8589934594, 100, 1, '2019-06-03 16:34:56.631057', '2019-06-03 16:34:56.631057', 12884918272, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAFvFIhaAAAAQBH/ML6+RzWquFPh8gLF2RuZzYtjjpPeHv/od9M74xlU09Xa4a5e1NhMtMSRIoLItg1EaDWE9zvtHflVWIAaSwQ=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbnOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHbnOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduc4AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduc4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduecAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIduc4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{Ef8wvr5HNaq4U+HyAsXZG5nNi2OOk94e/+h30zvjGVTT1drhrl7U2Ey0xJEigsi2DURoNYT3O+0d+VVYgBpLBA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:34:56.655221', '2019-06-03 16:34:56.655221', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GI0HD09huYapwZoBhnoPSfJeHNRJ1JcZJRJR/bKma9Pe9Reji1n3v5uJKRbSPrCNItai4reQNCclp24WC1uaAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('2aadfb093f2817bd454a973ab441c4a3d7c948cc3a277fcb006bef7528bf949b', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:34:56.65539', '2019-06-03 16:34:56.65539', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAXSHboAAAAAAAAAAABVvwF9wAAAECHa9hPxY+5w4/Cg1gW2BdJIU0CmCgnjjXQzx1DjeJzT4phXDLOieuZJoTX6jvhdzMahfepPlpQEIx82W5X8pIG', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtpoK4TLUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAABdIdugAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{h2vYT8WPucOPwoNYFtgXSSFNApgoJ4410M8dQ43ic0+KYVwyzonrmSaE1+o74XczGoX3qT5aUBCMfNluV/KSBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('37156be3b9c170a015dbb63fe7b282b1309d477626f84cc6c9bcad1bf2bb3927', 2, 3, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 3, 100, 1, '2019-06-03 16:34:56.655524', '2019-06-03 16:34:56.655524', 8589946880, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAXSHboAAAAAAAAAAABVvwF9wAAAEDJvf4IwI5rQT3Ap0/ZSFq+RwV1J6eAZV53d+d4+Bal+v3zdhIu82I/eIrOhDHQYrtuPZFwIcE4fuDjBgVIguEO', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtpoK4TLUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtoLCakrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAABdIdugAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{yb3+CMCOa0E9wKdP2UhavkcFdSengGVed3fnePgWpfr983YSLvNiP3iKzoQx0GK7bj2RcCHBOH7g4wYFSILhDg==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/order_books.rb b/services/horizon/internal/test/scenarios/order_books.rb deleted file mode 100644 index c85a68c300..0000000000 --- a/services/horizon/internal/test/scenarios/order_books.rb +++ /dev/null @@ -1,45 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :usd_gateway -create_account :scott, :master, "10000.0" -create_account :andrew, :master, "10000.0" - -close_ledger - -trust :scott, :usd_gateway, "USD" -trust :andrew, :usd_gateway, "USD" - -trust :scott, :usd_gateway, "BTC" -trust :andrew, :usd_gateway, "BTC" - -close_ledger - -payment :usd_gateway, :scott, ["USD", :usd_gateway, "5000.0"] -payment :usd_gateway, :andrew, ["USD", :usd_gateway, "5000.0"] - -payment :usd_gateway, :scott, ["BTC", :usd_gateway, "6000.0"] -payment :usd_gateway, :andrew, ["BTC", :usd_gateway, "6000.0"] - -close_ledger - -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "10", "10.0" # price = 1/10; amount = 10*10 = 100 -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "100", "9.0" # price = 1/9; amount = 100*9 = 900 -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "5.0" # price = 1/5; amount = 1000*5 = 5000 - -offer :andrew, {sell:["USD", :usd_gateway], for: :native}, "10", "15.0" -offer :andrew, {sell:["USD", :usd_gateway], for: :native}, "100", "20.0" -offer :andrew, {sell:["USD", :usd_gateway], for: :native}, "1000", "50.0" - -close_ledger - -offer :scott, {buy:["USD", :usd_gateway], with: ["BTC", :usd_gateway]}, 10, "10.0" # price = 1/10; amount = 10*10 = 100 -offer :scott, {buy:["USD", :usd_gateway], with: ["BTC", :usd_gateway]}, 100, "9.0" # price = 1/9; amount = 100*9 = 900 -offer :scott, {buy:["USD", :usd_gateway], with: ["BTC", :usd_gateway]}, 1000, "5.0" # price = 1/5; amount = 1000*5 = 5000 - -offer :andrew, {sell:["USD", :usd_gateway], for: ["BTC", :usd_gateway]}, 10, "15.0" -offer :andrew, {sell:["USD", :usd_gateway], for: ["BTC", :usd_gateway]}, 100, "20.0" -offer :andrew, {sell:["USD", :usd_gateway], for: ["BTC", :usd_gateway]}, 1000, "50.0" - -close_ledger diff --git a/services/horizon/internal/test/scenarios/order_books_310-core.sql b/services/horizon/internal/test/scenarios/order_books_310-core.sql deleted file mode 100644 index 24dc062c50..0000000000 --- a/services/horizon/internal/test/scenarios/order_books_310-core.sql +++ /dev/null @@ -1,847 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999989929999999700, 3, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 59999999800, 8589934594, 2, NULL, '', 'AQAAAA==', 0, 3, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 9999999600, 8589934596, 0, NULL, '', 'AQAAAA==', 0, 4, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 9999999996500, 8589934627, 35, NULL, '', 'AQAAAA==', 0, 5, 0, 1685999999998, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('d1cc81a10bc2fd6dd13a4444e9522f361b0eb28519f1d893c8bbb753466eec0e', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '34c5a4aded48da54f4b82538e068133ea4c6497a6e6e1296effd13a9fa276e40', 2, 1559579810, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZjdLwAXsL2eIh4K+qv7MhQiH7W7LZaUq9IK+/p5Db8bMAAAAAXPVMogAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAA5YwG7hzcH7+TYJ0iG4Sklbds5327gq5uPLExV/3yG/00xaSt7UjaVPS4JTjgaBM+pMZJem5uEpbv/ROp+iduQAAAAAIN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('e15e176a36631b4c1067eb4d1fca8d22706c38ed0a84377d45b71197097370e5', 'd1cc81a10bc2fd6dd13a4444e9522f361b0eb28519f1d893c8bbb753466eec0e', '271672d663148a387ff1c53cf4f0b2a0e737fd7097f1b597aa16e3ac91edb6d4', 3, 1559579811, 'AAAAC9HMgaELwv1t0TpEROlSLzYbDrKFGfHYk8i7t1NGbuwOrN7iIAwij4SkRAlla+ZJYO0IQWnc7kcoZn1WbRODJXIAAAAAXPVMowAAAAAAAAAAhrVFL6RjAMOSd+xZbT+ONgXtaV13E2WDVpOKC2IZ2LYnFnLWYxSKOH/xxTz08LKg5zf9cJfxtZeqFuOske221AAAAAMN4Lazp2QAAAAAAAAAAAK8AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('e55ebe57d2ae24f6bc9b636f3e66c299f789a9f7d8159f46d93a38071eb5784f', 'e15e176a36631b4c1067eb4d1fca8d22706c38ed0a84377d45b71197097370e5', 'c7f84bec04b0319cfe0619ba17770d7c282511272cde21e4427606a8761fc1ba', 4, 1559579812, 'AAAAC+FeF2o2YxtMEGfrTR/KjSJwbDjtCoQ3fUW3EZcJc3DlW1gzwzaHXpYaRffreilu/1k5AQHqGMV2UTD4ewI9ovsAAAAAXPVMpAAAAAAAAAAA9P74c8f1xfd4wX2Dasj3a3ZXngqhfaJ2yA7eEO3Lts/H+EvsBLAxnP4GGboXdw18KCURJyzeIeRCdgaodh/BugAAAAQN4Lazp2QAAAAAAAAAAARMAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('80e8bf9a11c3a19711b4aa87272f1ad76ecf6e7adb0145f91fd519756c341d8e', 'e55ebe57d2ae24f6bc9b636f3e66c299f789a9f7d8159f46d93a38071eb5784f', '133743fa1c3cf5ad33bf67f033783bc1158701a1d1f65090aa78e273f67aaece', 5, 1559579813, 'AAAAC+VevlfSriT2vJtjbz5mwpn3ian32BWfRtk6OAcetXhPglYX/kzvbCweg7Ey06USwQ6c6cIjrofNgyH4uSoXJNcAAAAAXPVMpQAAAAAAAAAAJ4/Gr554ZVHMujN++AAdhrv5CCDQrTNFeytjikmekx0TN0P6HDz1rTO/Z/AzeDvBFYcBodH2UJCqeOJz9nquzgAAAAUN4Lazp2QAAAAAAAAAABEwAAAAAAAAAAAAAAAhAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 18, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 41000000000, 10, 41, 0.243902439024390238, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 33, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 3000000000, 10, 3, 3.33333333333333348, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 30000000000, 1, 3, 0.333333333333333315, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 100000000000, 1, 10, 0.100000000000000006, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 3, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 80000000000, 1, 8, 0.125, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 5, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 60000000000, 1, 6, 0.166666666666666657, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 9, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 20000000000, 1, 2, 0.5, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 12, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 101000000000, 10, 101, 0.0990099009900990146, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 13, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 91000000000, 10, 91, 0.109890109890109888, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 2, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 90000000000, 1, 9, 0.111111111111111105, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 29, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 42000000000, 5, 21, 0.238095238095238082, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 4, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 70000000000, 1, 7, 0.142857142857142849, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 14, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 81000000000, 10, 81, 0.123456790123456783, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 32, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 12000000000, 5, 6, 0.83333333333333337, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 16, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 61000000000, 10, 61, 0.163934426229508184, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 21, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 11000000000, 10, 11, 0.909090909090909061, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 24, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 92000000000, 5, 46, 0.10869565217391304, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 11, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 1000000000, 10, 1, 10, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 27, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 62000000000, 5, 31, 0.161290322580645157, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 19, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 30999999998, 100000009, 310000028, 0.322580645057232052, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 20, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 21000000000, 10, 21, 0.476190476190476164, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 6, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 50000000000, 1, 5, 0.200000000000000011, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 10, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 10000000000, 1, 1, 1, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 17, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 51000000000, 10, 51, 0.196078431372549017, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 22, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 2000000000, 5, 1, 5, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 23, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 102000000000, 5, 51, 0.0980392156862745084, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 15, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 71000000000, 10, 71, 0.140845070422535218, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 25, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 82000000000, 5, 41, 0.121951219512195119, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 7, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 40000000000, 1, 4, 0.25, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 28, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 52000000000, 5, 26, 0.192307692307692318, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 26, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 72000000000, 5, 36, 0.138888888888888895, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 30, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 32000000000, 5, 16, 0.3125, 0, 5); -INSERT INTO offers VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 31, 'AAAAAA==', 'AAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8=', 22000000000, 5, 11, 0.45454545454545453, 0, 5); - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GBQBMJYSCE6Q5ZHHVCVPGWKS5HWMFH743D4EDF6MTYBTBYHSP7LHOBEI', 2, 'AAAAAGAWJxIRPQ7k56iq81lS6ezCn/zY+EGXzJ4DMODyf9Z3AAAAAAAAAAIAAAACAAAAAQAAAEiN0vABewvZ4iHgr6q/syFCIftbstlpSr0gr7+nkNvxswAAAABc9UyiAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABVWkG+LRhLSSUm15z4+2PEA3tAsIKYFdVO0faqhpGgPoAAABAqQ4v5UhiYMnIPkL7/Tr7FZYb5Sn0J0uDNgHqzlEIGm+JXa045iinZfS5GfETsAGdQNCZpFTIr5JOSXJKgOgMCA=='); -INSERT INTO scphistory VALUES ('GBQBMJYSCE6Q5ZHHVCVPGWKS5HWMFH743D4EDF6MTYBTBYHSP7LHOBEI', 3, 'AAAAAGAWJxIRPQ7k56iq81lS6ezCn/zY+EGXzJ4DMODyf9Z3AAAAAAAAAAMAAAACAAAAAQAAADCs3uIgDCKPhKRECWVr5klg7QhBadzuRyhmfVZtE4MlcgAAAABc9UyjAAAAAAAAAAAAAAABVWkG+LRhLSSUm15z4+2PEA3tAsIKYFdVO0faqhpGgPoAAABAMbCfZ88FM31f5+JBOWL8o/30xX5K8v6p6gcV5bCUfDdzO3KOa5y9w2/OfH3H5knsIoLUZbw2lDxO49oalEkzAg=='); -INSERT INTO scphistory VALUES ('GBQBMJYSCE6Q5ZHHVCVPGWKS5HWMFH743D4EDF6MTYBTBYHSP7LHOBEI', 4, 'AAAAAGAWJxIRPQ7k56iq81lS6ezCn/zY+EGXzJ4DMODyf9Z3AAAAAAAAAAQAAAACAAAAAQAAADBbWDPDNodelhpF9+t6KW7/WTkBAeoYxXZRMPh7Aj2i+wAAAABc9UykAAAAAAAAAAAAAAABVWkG+LRhLSSUm15z4+2PEA3tAsIKYFdVO0faqhpGgPoAAABAr7tOb/1nkqCRY55zhhKv3SZ9xJh/Hd/ddHO0A5GSBzlOBsZlcP0MPwVLdVltY8Qsqe8lo4wFCeniBIzumNM8Dw=='); -INSERT INTO scphistory VALUES ('GBQBMJYSCE6Q5ZHHVCVPGWKS5HWMFH743D4EDF6MTYBTBYHSP7LHOBEI', 5, 'AAAAAGAWJxIRPQ7k56iq81lS6ezCn/zY+EGXzJ4DMODyf9Z3AAAAAAAAAAUAAAACAAAAAQAAADCCVhf+TO9sLB6DsTLTpRLBDpzpwiOuh82DIfi5Khck1wAAAABc9UylAAAAAAAAAAAAAAABVWkG+LRhLSSUm15z4+2PEA3tAsIKYFdVO0faqhpGgPoAAABAMCkP9vp+GGBiGAa9U2axqMzGt9M3xzOmSLNKn+7yl5OEl60AoUomeoCJM+kBdBpQxeJ4D/+jwDe4OwM/g2NHCQ=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('556906f8b4612d24949b5e73e3ed8f100ded02c20a6057553b47daaa1a4680fa', 5, 'AAAAAQAAAAEAAAAAYBYnEhE9DuTnqKrzWVLp7MKf/Nj4QZfMngMw4PJ/1ncAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastclosedledger ', '80e8bf9a11c3a19711b4aa87272f1ad76ecf6e7adb0145f91fd519756c341d8e'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 5, - "currentBuckets": [ - { - "curr": "3c05eaa1fcda32243b6613f76e9909763f0dcb1c5af1f85cfbfb6452602b4ee2", - "next": { - "state": 0 - }, - "snap": "1c923cac5a09341366a55fad9381493a3e827fece995036ba7dbc64c8dc4d9cc" - }, - { - "curr": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9", - "next": { - "state": 1, - "output": "1c923cac5a09341366a55fad9381493a3e827fece995036ba7dbc64c8dc4d9cc" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAABgFicSET0O5OeoqvNZUunswp/82PhBl8yeAzDg8n/WdwAAAAAAAAAFAAAAA1VpBvi0YS0klJtec+PtjxAN7QLCCmBXVTtH2qoaRoD6AAAAAQAAAJiCVhf+TO9sLB6DsTLTpRLBDpzpwiOuh82DIfi5Khck1wAAAABc9UylAAAAAAAAAAEAAAAAYBYnEhE9DuTnqKrzWVLp7MKf/Nj4QZfMngMw4PJ/1ncAAABAkAO05kziTISPcp9eIyDUyr2WZYSGEOjNfWuux6Xlrr+/ZeOevf4EhjeduQ3qJU6A+7JgPMmQtirfl+oF9yuZCwAAAAEAAACYglYX/kzvbCweg7Ey06USwQ6c6cIjrofNgyH4uSoXJNcAAAAAXPVMpQAAAAAAAAABAAAAAGAWJxIRPQ7k56iq81lS6ezCn/zY+EGXzJ4DMODyf9Z3AAAAQJADtOZM4kyEj3KfXiMg1Mq9lmWEhhDozX1rrsel5a6/v2Xjnr3+BIY3nbkN6iVOgPuyYDzJkLYq35fqBfcrmQsAAABAfAWE9hALEV/fDXLXq9cJgtoo/TX4R1PFV+r5YKUzMCuFYEWWPnRD8pU2GMeneDHYHluG0u+U/bZUrzXQorGOCAAAAABgFicSET0O5OeoqvNZUunswp/82PhBl8yeAzDg8n/WdwAAAAAAAAAFAAAAAgAAAAEAAAAwglYX/kzvbCweg7Ey06USwQ6c6cIjrofNgyH4uSoXJNcAAAAAXPVMpQAAAAAAAAAAAAAAAVVpBvi0YS0klJtec+PtjxAN7QLCCmBXVTtH2qoaRoD6AAAAQDApD/b6fhhgYhgGvVNmsajMxrfTN8czpkizSp/u8peThJetAKFKJnqAiTPpAXQaUMXieA//o8A3uDsDP4NjRwkAAAAB5V6+V9KuJPa8m2NvPmbCmfeJqffYFZ9G2To4Bx61eE8AAAAhAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAALAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAEqBfIAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABA2pl8oiRj9zUIFp9AYMaKOb0OAbMsMjJNUUHewa3JwSH0V2Zaol7gkH5ymr3CNwO1e5X8fGilLZm+x5P7okPWDQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAGQAAAACAAAADQAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAADuaygAAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQIpDJQQAAOqIuEYOhqd7L80zxnGlEMeB7aTdE4LrF6zE5G1bAabxzbPsNGxRfQToLchmCtv+s35F2DFRAfV+mgoAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAABAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABLb+eoAAAAACgAAAFEAAAAAAAAAAAAAAAAAAAABruS+TAAAAEAZjDBjBQxoO7GGN/EWuZiC/raVmJTFN7xA3Dvllr88LJn9lLg0rql5YAmH6bwffeWFxWyy3kSUCEVn7PBlndUNAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAMAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABA0lB577a6VFTmqiBKQXiyg6YgjTPcU8n9Mldb5GdKeZ8DRkWG797qE3Tn/WL5uFYnY6qldsI9U31ASttn/Mh8CgAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAGQAAAACAAAACAAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAAAAAABAAAABQAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQHeiwLOOXWwZAA1jVOXrZ6KGssB6qwdfU3+NIcuv5olAJzQMeqPP7nqEWsJ/t0Sckb0Ft1iqWT26eMwePc3GJA8AAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAACIAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAALLQXgAAAAABQAAAAYAAAAAAAAAAAAAAAAAAAABruS+TAAAAEBpKgRz8rFqjdnqBSxOHVB8uOVPjzpNAqC2702GpPwTNJDaMUJaA/6h0lSdMg9FTvgM6CrASBwcEami9pqyzbgPAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAGAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQTFM8AAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAaZXT/bkDz3FqTJhXKtcSev5gzrE0wL2GSnszf7t4qBTcnW3P4heHeAFIkSjtgz0m7IgGT1goVlbtdA5PtZNNCwAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAGQAAAACAAAAFQAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABze+dgAF9eEJEno5nAAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQBIZdVYcyed5VfY5zLEwvfw+f7a9I2lgoEnNCgpnUqpam0P5AxIL0/o30iw7kOoDPRiQkn6BV0+Ka3kNJqS7wgkAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAAB4AAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAwbcQgAAAAABQAAABoAAAAAAAAAAAAAAAAAAAABruS+TAAAAEBsfIq3NATTJZ8ALBZ/7WlhXc84ZwArGU220srgHkuZffhXBQgaNYeooiLD9oO2xoioEkjrZt+RifoqIxaJGeUCAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAYAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAdzWUAAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAJnrtXGyjkqpAJAFfDY0JyJjXfS9/xXLLHdu3XT20IxpJCBQ2K0fhYnVis0tnbacC9/vTcmLnWxKg1oGCR9usBAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAGQAAAACAAAAHAAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAEMOI0AAAAAAFAAAAJAAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQMY37gLF7K08b/uTVWJ7G9LKKgumaJbk/16G467eOXgHjWTMKff0VdoS18kpFTlZNjvNeP3YMnmqezPi4FomzwYAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAACAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAdzWUAAAAAABQAAABAAAAAAAAAAAAAAAAAAAAABruS+TAAAAEAajFCzeL5oTo4B6AGROYDR2oRp0PnjUIVRgxVDVoKKLmKgsxo/qLmhJnn7hzRV9jYwA+anF00I5je/AfhcPzILAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAATAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAL39Y+AAAAAAoAAAAzAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAXUhb5QTAO+vV5kTEQqOp9yi4sDerjU5vIT5VH3MiOG381zIplmafJjLNHS02enkonOHtHWIvqznVQjHqQ389DQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAGQAAAACAAAACgAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABvwjrAAAAAABAAAAAwAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQJvGjSdfEHTtvJYf6v0yUV/SA5UqoWjc8YJWvzYMnaRl8XYAGGAPW0i3XJJ5EPMxcH0nWJpoyqpw8WBtVNNKywcAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAAA8AAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABUwBc4AAAAACgAAAFsAAAAAAAAAAAAAAAAAAAABruS+TAAAAECPgXqKc/KeDp7Ri0u0D0IETw1gO64wRGYdH148S3d0VrSCZr8/zgtGRZ4NrhlvYTrApUueuNypF1YeMTVg3cIDAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAdAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAOb3zsAAAAAAUAAAAfAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAcFijipV/lZRIDYicNpHFwnaL4J0Fmwkcr0G9VxH4lZSYgLjgQnvgniCBQrvu2eqyqOFHC8H04T7D9jXseYr4CgAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAGQAAAACAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAF0h26AAAAAABAAAACgAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQDi/O/fYHZeBvZAv3Dk+qULts3w+RoYRMQCrSpm+7PKM5LMqiGCNtXqgi3JbsC5W9sAYpuTsK9Mts88WB+76jgcAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAAAkAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAlQL5AAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAABruS+TAAAAEAUepZQrgu6Ph3yxSJDXw4Hp+KRuw9BdkA4h9nfayCzrb5DXsYyfBiqzEWjW2Lj1Htwwtp0OyeEeOSeQ5AzNz4OAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAASoF8gAAAAAAEAAAAIAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABA9LQUhBPQFZOopSh/vuUNPcUm0DLI9wD4aw449Ccu6ADMejat8t2MyuzWvx8RwQMPd9zdXlwCE5d8cT3upwuPAgAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAGQAAAACAAAAEQAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAEIfuBgAAAAAKAAAARwAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQL4Kguk8hIUq4ReyuMMDoHdLAr5hQEIHzNRM/nhMFm5vwTyUltFqTk8VOX3hCgDqS2Ghyb77w/lmSpuTyP8mnQcAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAABQAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAmLyloAAAAACgAAACkAAAAAAAAAAAAAAAAAAAABruS+TAAAAECInAVyjMD1DhWP+0AECSmFu86LoezfblscMGlOLon8s3dJUcaxhDZTAPWt5yBihi2hYPX6qQp0UxLN64hmh0kNAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAU9GsEAAAAAAEAAAAJAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAuUnZlMxj8taqMo/PYfI4rBl41Cpps/XHGlNot5+TWTZE9A06ipER6Q7XqbxhNzmAR8NaQbS3Ds0RQv44r3GLCgAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAGQAAAACAAAABwAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAADfhHWAAAAAABAAAABgAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQKdYTKDPKzYnd6ZwUr/7KoEcCCMi4JHgW1DB/UmExoF11mUgdUO0b+eEIF2yeVzcT6gPZIM/y2KSXN1fS7JPpgQAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAABsAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABMXlLQAAAAABQAAACkAAAAAAAAAAAAAAAAAAAABruS+TAAAAEAuGXjVp68vR5ZlP93H2PAVFVvucN4OyM9648orlAIGBZmMFYXDBFfP6BOIdxwK8blbh33e5wBTjE6RsKPVUf0JAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAWAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAE47KSAAAAAAoAAAAVAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAW7ujBoctNRfa1M6+T0tShj0Q+l9ybp9C6jQmrSEUeBSwAqucU1YAMlc3XzqIBy35EsuVN0k0hD81/rrCNCtICgAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAGQAAAACAAAAIQAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABR9NXAAAAAAFAAAACwAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQJUxpeS5e1keqKB6OEz0x4j7D4WEBHD7hXeJW8uN54on7Agpy5GX86GWMTg5gBx7/0V5LJAR+3kZMQmWAUV0UAQAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAACMAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAACy0F4AAAAACgAAAAMAAAAAAAAAAAAAAAAAAAABruS+TAAAAEDYXCh6dclU5OL2jJYfI0v7TAtF2KQPAHip00maP45CLxrSNGCNAb/X8SxKrzzmruZS9fntcKNQYf6t/vQH4IUCAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAOAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXhBGyAAAAAAoAAABlAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAjAuehle1J2zs3RaLV5FD/TsgwVWQTHrGyz9xtHfjohTp9ugklMElF1GFa7zxijTpghCK1A0yyVuIrf8mIQiuBAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAGQAAAACAAAAEgAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAADjPiIgAAAAAKAAAAPQAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQBNDe/ZLQKZUko6L1OdCJLc4rkayTesZkZBe37FfmIyuYPF1j3oHVrh/Luecws2XAc3XaPAmorhFqSTD4zGWSAgAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAABkAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABe/rHwAAAAABQAAADMAAAAAAAAAAAAAAAAAAAABruS+TAAAAEAarEL9yJ330koQG/pju+aRTW75RD5LAPEciMt4yaau3lS/ZMKzoK3i2iS/COUaxsGjWxxTydCbC5e6Lxt80ZMAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAaAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAVa6CYAAAAAAUAAAAuAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABATU8XW0HLVKABibMcV0H3VxUkGh/dQhUcM0eFCkFzVgeXmY9g1V/MnP9DsNs1aipuJVlAGS0B88gxbmoQ5h6rDAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAGQAAAACAAAAFwAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAo+mrgAAAAAKAAAACwAAAAAAAAAAAAAAAAAAAAGu5L5MAAAAQJhM/nIi2VhFyJbBFra2NSItX86GsdnRghPxbtBoTsqm8PdA77PpN2lTpkC0wclOSVoxL3ejqfqFd4vuyjz7cQMAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAAB8AAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAnHZSQAAAAABQAAABUAAAAAAAAAAAAAAAAAAAABruS+TAAAAECSRmrmxXBzmmvo1h+qVJiRB6+vbveJuE70TBXKQ7aZDj6Rr4GtCP77B9yy4kVsZp4To23NDFN/tdBoZmnCOTkLAAAAAQAAAAEAAAABAAAAAGAWJxIRPQ7k56iq81lS6ezCn/zY+EGXzJ4DMODyf9Z3AAAAAA=='); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO trustlines VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'BTC', 9223372036854775807, 50000000000, 1, 4, NULL, NULL); -INSERT INTO trustlines VALUES ('GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 50000000000, 1, 4, NULL, NULL); -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'BTC', 9223372036854775807, 50000000000, 1, 4, NULL, NULL); -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 50000000000, 1, 5, 329999999996, 0); - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('5cd7e1d317153a8d739c0f6d6861e1dc1ab5c264e3e8d4caab6aae3fc949326c', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f7cb8309318368f694c8830bf789841e7e2c46dce30e60969d88bd0ce588cbe9', 2, 3, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcqAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp+cAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('811192c38643df73c015a5a1d77b802dff05d4f50fc6d10816aa75c0a6109f9a', 3, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1gAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1ecAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('7df857c23c7dfeb974d7c3956775685a8edfa8496bb781fd346c8e2025fad9bf', 3, 3, 'AAAAAgAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1ecAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1c4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('3476bc649563488cf025d82790aa9c44649188232b150d2864d13fe9face5406', 3, 4, 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp+cAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp84AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('ea945436a3b650efa88063e737518cf1928d9a43d1aba3ec684704f160b3733e', 4, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('416a63c3f1491537698cdb6f981097ed8e44ca27d2d9006bd0ba68832ebf9d55', 4, 2, 'AAAAAgAAAAMAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('c29948d1ca87bad2e3299c1b018c996c22ff5d56f5753bc38f0fd88c4d2c5d94', 4, 3, 'AAAAAgAAAAMAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+LUAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('554ea22913ebf01fc4b3a4d60b59ae28f379b800d5b6da40a6987a53ebd87f07', 4, 4, 'AAAAAgAAAAMAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+LUAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+JwAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('c48b48982dcd1f079d90ee3289dc2b6269bce088bd7183ddba8e3dca25b1e84b', 5, 1, 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp84AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp7UAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('437a48108dd143273dcf1c28296d6048d0915c6072650eb5f794b89560a40c0c', 5, 2, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp7UAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp5wAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('9f9ea714b1a39664b1e6df0fafd1aa17eda71bb05715fe1371246f3208b3a1b1', 5, 3, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp5wAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp4MAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f966ab310137dae86c7ee7ee08850339537c78f854eaaaea78d7fd834134da79', 5, 4, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp4MAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp2oAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('360d890880eebd224d7506b9881352fbc6b6b1921f84a85e9807f0775b5560bc', 5, 5, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp2oAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp1EAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('bc1c988cc29d96ba3ed032e48f862cda1c9ed615b07ac8db51ef399cd3fa2941', 5, 6, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp1EAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpzgAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('61b33dced6b81dde0e86b61ba4abc280b6c35c6e4ba8045b5082f74a9a2b60ed', 5, 7, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpzgAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpx8AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('163aab67c5a24a59eda5e4b4e5f32924f603cff52a5e4fb25eae987538c23106', 5, 8, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpx8AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpwYAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('627fdbd55feaf21e6e96addebb0f5fc73540ff9505d5d0dc76c9ec69f4d2f76f', 5, 9, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpwYAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpu0AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('e252b8842716f49fe824df8c95e51a55b40db1b51017ba97dc59b2d971e5cb10', 5, 10, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpu0AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcptQAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('b962b228793859d32de9d6a3d3e782acb8f2d0b9e3a17a91571a402d7cd47a8a', 5, 11, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcptQAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcprsAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('0343d98ff86bf4b5f9e24db8b3889fe34df7a166cfde7e9098a83c11f7eb9722', 5, 12, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcprsAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpqIAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('e82691759c9c5796c5cc91a1c71f233b6c5a38af9ad5976c7e655078818838e7', 5, 13, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpqIAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpokAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('d80c809a4065600d7705e7db04e1260bf39582d941446a95fb9cea66680ef0c3', 5, 14, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpokAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpnAAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('fd0bc444f5e90e9a61a5aa011a8b62376ef2d7e304418a188a294bb0b95740f8', 5, 15, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpnAAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcplcAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('04b1a1a09159b1c7bb43fd1dc0f282958d0a01c337d72a0324c0262b58d93615', 5, 16, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcplcAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpj4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('5d37d98f720dfb3dce49331f403bfa3f9ef13122fae954a73b7b688b180b1516', 5, 17, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpj4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpiUAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('a3d82c4ac237e77f385f3cdf5a358cabc4b0c12b7f58b59c197fdba8a76010cf', 5, 18, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpiUAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpgwAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('e09337eedf136665192e840b23bf26b86fc85b93bb401d3a1ce4ee2a1b579213', 5, 19, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpgwAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpfMAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f140ddf0c75f70ddf0d79391e6b5992b9c56b9c23c040008b908c70a413eb03d', 5, 20, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpfMAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpdoAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('5d46530574ecf525512b5184af69899d95a826ec6bbad2e0b2d34b3efa352d7f', 5, 21, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpdoAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpcEAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('bc2a16ca82b7d0bd903c26482736cceb9f4efa077071e72849654b3aced94136', 5, 22, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpcEAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpagAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('a0bdbdb1aa35b7f2aec201b618fca59405e4c375f8f76a24ef25e885a96fd7ed', 5, 23, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpagAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpY8AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('9b90554626c9bfa396b4f61cc910d383a38f1223c8f5478edde6fe60a7f2f406', 5, 24, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpY8AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpXYAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('0e17e87fcda53937d77cbf1e2658fcdf41eb0689e9649545bb14a5960832e5b8', 5, 25, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpXYAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpV0AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f277e4abf7d0d326fa63ee62415f7a117e43453072677d1f6e9618c8d2bb8524', 5, 26, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpV0AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpUQAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('5e3622bf6dab1276155014b8387f261a0bbfbef247caa05e9c4be8c890dad958', 5, 27, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpUQAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpSsAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('b00c83ae8f3d0cd4f1760517182abdf0440eca6efcd2b0fa893aac85b35e42cb', 5, 28, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpSsAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpRIAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('3f731b66c1a3d2c4cf9d15bb17e910beaa6f6fa6a77cccfd62f5eabcd3ecfcc5', 5, 29, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpRIAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpPkAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('492c8c2808bf649ba321f0f75dda11581107bff229ef457340aab8494f5ad412', 5, 30, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpPkAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpOAAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('c03dfbea35606bd565f3609a306aa27a82aa14b3fd142f1a13b79c1871f54a3b', 5, 31, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpOAAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpMcAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('42e47f8fdcb738c844e1556c9fad18eb8887d78681ef5e9616898eb6e1c5e8eb', 5, 32, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpMcAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpK4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('ee96865dfca78c43c4074317f3dbcd7ca978643b973bc9a5dc4f2588f981c6d7', 5, 33, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpK4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', '2zmOtK6JdWMlZDytIclOE7/AdLMj7oPhQb9wGl2QTxsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('5cd7e1d317153a8d739c0f6d6861e1dc1ab5c264e3e8d4caab6aae3fc949326c', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKgAAAAAAAAAAABVvwF9wAAAECHm7ok7sq0fJE4UYerrvzdtJgwKw3iHGQ2D43YeWAE+/Jjbwa2pVllbwPb5KeNomP/gXau9K9503k0yiId/HMC', 'XNfh0xcVOo1znA9taGHh3Bq1wmTj6NTKq2quP8lJMmwAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3grZkE5XrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcqAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f7cb8309318368f694c8830bf789841e7e2c46dce30e60969d88bd0ce588cbe9', 2, 3, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAN+EdYAAAAAAAAAAABVvwF9wAAAEAQAaCgnhAHvWviyyciJH3kp9yoTQtn2SFjbCqLUUPBKzcRt8huITE9etfxlEBrW4iiJkrgyQeOCq/IGbGe2RAA', '98uDCTGDaPaUyIML94mEHn4sRtzjDmCWnYi9DOWIy+kAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3grZkE5XrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3grYsMniLUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1gAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'vUhtvdAtRggXZxxKWn6dboZcopy0HmLXqvcKL+5bNt4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKfOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKfOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp84AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp84AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('811192c38643df73c015a5a1d77b802dff05d4f50fc6d10816aa75c0a6109f9a', 3, 2, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAFvFIhaAAAAQPlg7GLhJg0x7jpAw1Ew6H2XF6yRImfJIwFfx09Nui5btOJAFewFANfOaAB8FQZl5p3A5g3k6DHDigfUNUD16gc=', 'gRGSw4ZD33PAFaWh13uALf8F1PUPxtEIFqp1wKYQn5oAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAN+EdXOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAN+EdXOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1c4AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1c4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('7df857c23c7dfeb974d7c3956775685a8edfa8496bb781fd346c8e2025fad9bf', 3, 3, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAFvFIhaAAAAQBH/ML6+RzWquFPh8gLF2RuZzYtjjpPeHv/od9M74xlU09Xa4a5e1NhMtMSRIoLItg1EaDWE9zvtHflVWIAaSwQ=', 'ffhXwjx9/rl018OVZ3VoWo7fqElrt4H9NGyOICX62b8AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAN+EdXOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAN+EdXOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1c4AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1c4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('3476bc649563488cf025d82790aa9c44649188232b150d2864d13fe9face5406', 3, 4, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQEKBv+8zL1epwxC+sJhEYPmbjL9XScXtctoMIdet5dhgk7YJVJzAnRSgYTvfyoIJKJdQmX66uh2o+rG9K6JImgY=', 'NHa8ZJVjSIzwJdgnkKqcRGSRiCMrFQ0oZNE/6frOVAYAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKfOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKfOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp84AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp84AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('ea945436a3b650efa88063e737518cf1928d9a43d1aba3ec684704f160b3733e', 4, 1, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAAAAAAH5kC3vAAAAQH/ZkzR/eC0F7xP9zApeHvMH7nqetzaSdYh8WHyrwwvbEnx4Db6gz0grnRJBJS66OZbGmCk7yzHm8DkJ7bJ4QAU=', '6pRUNqO2UO+ogGPnN1GM8ZKNmkPRq6PsaEcE8WCzcz4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('416a63c3f1491537698cdb6f981097ed8e44ca27d2d9006bd0ba68832ebf9d55', 4, 2, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAAAAAAH5kC3vAAAAQFFGLGFFXbEDRdk2eFyQATNpHuqO/sFrpqsxmNNwGa+MLibNQJLDXWafC4W8KMKQ/hE0M0TLxZeu/O8tYnBuwwA=', 'QWpjw/FJFTdpjNtvmBCX7Y5EyifS2QBr0Lpogy6/nVUAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('c29948d1ca87bad2e3299c1b018c996c22ff5d56f5753bc38f0fd88c4d2c5d94', 4, 3, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAAAAAAH5kC3vAAAAQLn0NeCsam5YrmtsMJQVOLyOTPqDb7SMTCZGofm5ShU6fcl3PPieInQNtk1FmRVeUxdYX1rsW2KH1HQbJ644Hw0=', 'wplI0cqHutLjKZwbAYyZbCL/XVb1dTvDjw/YjE0sXZQAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('554ea22913ebf01fc4b3a4d60b59ae28f379b800d5b6da40a6987a53ebd87f07', 4, 4, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAAAAAAH5kC3vAAAAQF34mYyRLbVT42QtFuY5UN0sr9EcuE3ltA/9yAxiNOvukbVTOaz86uCXpEZlX1FnExYDZwOZJWVXfsbdovbVUwc=', 'VU6iKRPr8B/Es6TWC1muKPN5uADVttpApph6U+vYfwcAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAAEAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('c48b48982dcd1f079d90ee3289dc2b6269bce088bd7183ddba8e3dca25b1e84b', 5, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXSHboAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAOL8799gdl4G9kC/cOT6pQu2zfD5GhhExAKtKmb7s8ozksyqIYI21eqCLcluwLlb2wBim5Owr0y2zzxYH7vqOBw==', 'xItImC3NHwedkO4yidwrYmm84Ii9cYPduo49yiWx6EsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAAQAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABdIdugAAAAAAQAAAAoAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAACAAAAAgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAADAAAAAgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAMAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAMAAAADAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAXSHboAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAEAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXSHboAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAAAAAAAAAAAAQAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAACVAvkAAAAAAAAAAAAAAAAAAAAAAA='); -INSERT INTO txhistory VALUES ('437a48108dd143273dcf1c28296d6048d0915c6072650eb5f794b89560a40c0c', 5, 2, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAU9GsEAAAAAAEAAAAJAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAuUnZlMxj8taqMo/PYfI4rBl41Cpps/XHGlNot5+TWTZE9A06ipER6Q7XqbxhNzmAR8NaQbS3Ds0RQv44r3GLCg==', 'Q3pIEI3RQyc9zxwoKW1gSNCRXGByZQ6195S4lWCkDAwAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAAgAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABT0awQAAAAAAQAAAAkAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAADAAAAAwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAF0h26AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAQAAAADAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAXSHboAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAEAAAAAwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAF0h26AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAQAAAAEAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAsPOHsAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAIAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAU9GsEAAAAAAEAAAAJAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAACVAvkAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAASoF8gAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('9f9ea714b1a39664b1e6df0fafd1aa17eda71bb05715fe1371246f3208b3a1b1', 5, 3, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAASoF8gAAAAAAEAAAAIAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABA9LQUhBPQFZOopSh/vuUNPcUm0DLI9wD4aw449Ccu6ADMejat8t2MyuzWvx8RwQMPd9zdXlwCE5d8cT3upwuPAg==', 'n56nFLGjlmSx5t8Pr9GqF+2nG7BXFf4TcSRvMgizobEAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAAwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABKgXyAAAAAAAQAAAAgAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAEAAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAALDzh7AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAUAAAAEAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAsPOHsAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAFAAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAALDzh7AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAA+3UEMAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAASoF8gAAAAAAEAAAAIAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAEqBfIAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAb8I6wAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f966ab310137dae86c7ee7ee08850339537c78f854eaaaea78d7fd834134da79', 5, 4, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAGAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQTFM8AAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAaZXT/bkDz3FqTJhXKtcSev5gzrE0wL2GSnszf7t4qBTcnW3P4heHeAFIkSjtgz0m7IgGT1goVlbtdA5PtZNNCw==', '+WarMQE32uhsfufuCIUDOVN8ePhU6qrqeNf9g0E02nkAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAABAAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABBMUzwAAAAAAQAAAAcAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAFAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAPt1BDAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAYAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAA+3UEMAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAGAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAPt1BDAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAYAAAAGAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAABPKZRIAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAQAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQTFM8AAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAG/COsAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAlQL5AAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('360d890880eebd224d7506b9881352fbc6b6b1921f84a85e9807f0775b5560bc', 5, 5, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAHAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAN+EdYAAAAAAEAAAAGAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAp1hMoM8rNid3pnBSv/sqgRwIIyLgkeBbUMH9SYTGgXXWZSB1Q7Rv54QgXbJ5XNxPqA9kgz/LYpJc3V9Lsk+mBA==', 'Ng2JCIDuvSJNdQa5iBNS+8a2sZIfhKhemAfwd1tVYLwAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAABQAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA34R1gAAAAAAQAAAAYAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAGAAAABgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAATymUSAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAcAAAAGAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAABPKZRIAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAHAAAABgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAATymUSAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAcAAAAHAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAABdIdugAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAUAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAN+EdYAAAAAAEAAAAGAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAJUC+QAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAukO3QAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('bc1c988cc29d96ba3ed032e48f862cda1c9ed615b07ac8db51ef399cd3fa2941', 5, 6, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAIAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAd6LAs45dbBkADWNU5etnooaywHqrB19Tf40hy6/miUAnNAx6o8/ueoRawn+3RJyRvQW3WKpZPbp4zB49zcYkDw==', 'vByYjMKdlro+0DLkj4Ys2hye1hWwesjbUe85nNP6KUEAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAABgAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAQAAAAUAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAHAAAABwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAXSHboAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAgAAAAHAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAABdIdugAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAIAAAABwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAXSHboAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAgAAAAIAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAABoxhcUAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAYAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAALpDt0AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAA34R1gAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('61b33dced6b81dde0e86b61ba4abc280b6c35c6e4ba8045b5082f74a9a2b60ed', 5, 7, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAJAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJUC+QAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAFHqWUK4Luj4d8sUiQ18OB6fikbsPQXZAOIfZ32sgs62+Q17GMnwYqsxFo1ti49R7cMLadDsnhHjknkOQMzc+Dg==', 'YbM9zta4Hd4OhrYbpKvCgLbDXG5LqARbUIL3SporYO0AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAABwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAlQL5AAAAAAAQAAAAQAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAIAAAACAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAaMYXFAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAkAAAAIAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAABoxhcUAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAJAAAACAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAaMYXFAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAkAAAAJAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAByFkakAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAcAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJUC+QAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAN+EdYAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAABBMUzwAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('163aab67c5a24a59eda5e4b4e5f32924f603cff52a5e4fb25eae987538c23106', 5, 8, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAKAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAG/COsAAAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAm8aNJ18QdO28lh/q/TJRX9IDlSqhaNzxgla/NgydpGXxdgAYYA9bSLdcknkQ8zFwfSdYmmjKqnDxYG1U00rLBw==', 'FjqrZ8WiSlntpeS05fMpJPYDz/UqXk+yXq6YdTjCMQYAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAACAAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAb8I6wAAAAAAQAAAAMAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAJAAAACQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAchZGpAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAoAAAAJAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAByFkakAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAKAAAACQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAchZGpAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAoAAAAKAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAB5EmpQAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAgAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAG/COsAAAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAQTFM8AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAABKgXyAAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('627fdbd55feaf21e6e96addebb0f5fc73540ff9505d5d0dc76c9ec69f4d2f76f', 5, 9, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAALAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAEqBfIAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABA2pl8oiRj9zUIFp9AYMaKOb0OAbMsMjJNUUHewa3JwSH0V2Zaol7gkH5ymr3CNwO1e5X8fGilLZm+x5P7okPWDQ==', 'Yn/b1V/q8h5ulq3euw9fxzVA/5UF1dDcdsnsafTS928AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAACQAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAASoF8gAAAAAAQAAAAIAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAKAAAACgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAeRJqUAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAsAAAAKAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAB5EmpQAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAALAAAACgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAeRJqUAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAsAAAALAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAB9uoIYAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAkAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAEqBfIAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAASoF8gAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAABT0awQAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('e252b8842716f49fe824df8c95e51a55b40db1b51017ba97dc59b2d971e5cb10', 5, 10, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAMAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABA0lB577a6VFTmqiBKQXiyg6YgjTPcU8n9Mldb5GdKeZ8DRkWG797qE3Tn/WL5uFYnY6qldsI9U31ASttn/Mh8Cg==', '4lK4hCcW9J/oJN+MleUaVbQNsbUQF7qX3Fmy2XHlyxAAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAACgAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAQAAAAEAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAALAAAACwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAfbqCGAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAwAAAALAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAB9uoIYAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAMAAAACwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAfbqCGAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAwAAAAMAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACADo38AAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAoAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAU9GsEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAABdIdugAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('b962b228793859d32de9d6a3d3e782acb8f2d0b9e3a17a91571a402d7cd47a8a', 5, 11, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAANAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAoAAAABAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAikMlBAAA6oi4Rg6Gp3svzTPGcaUQx4HtpN0TgusXrMTkbVsBpvHNs+w0bFF9BOgtyGYK2/6zfkXYMVEB9X6aCg==', 'uWKyKHk4WdMt6daj0+eCrLjy0LnjoXqRVxpALXzUeooAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAACwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAACgAAAAEAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAMAAAADAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAgA6N/AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAA0AAAAMAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACADo38AAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAANAAAADAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAgA6N/AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAA0AAAANAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACASijGAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAsAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAoAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAXSHboAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAABmcgswAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('0343d98ff86bf4b5f9e24db8b3889fe34df7a166cfde7e9098a83c11f7eb9722', 5, 12, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAOAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXhBGyAAAAAAoAAABlAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAjAuehle1J2zs3RaLV5FD/TsgwVWQTHrGyz9xtHfjohTp9ugklMElF1GFa7zxijTpghCK1A0yyVuIrf8mIQiuBA==', 'A0PZj/hr9LX54k24s4if4033oWbP3n6QmKg8EffrlyIAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAADAAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABeEEbIAAAAACgAAAGUAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAANAAAADQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAgEooxgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAA4AAAANAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACASijGAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAOAAAADQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAgEooxgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAA4AAAAOAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACXzjp4AAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAwAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXhBGyAAAAAAoAAABlAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAZnILMAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAABvwjrAAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('e82691759c9c5796c5cc91a1c71f233b6c5a38af9ad5976c7e655078818838e7', 5, 13, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAPAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAVMAXOAAAAAAoAAABbAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAj4F6inPyng6e0YtLtA9CBE8NYDuuMERmHR9ePEt3dFa0gma/P84LRkWeDa4Zb2E6wKVLnrjcqRdWHjE1YN3CAw==', '6CaRdZycV5bFzJGhxx8jO2xaOK+a1ZdsfmVQeIGIOOcAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAADQAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABUwBc4AAAAACgAAAFsAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAOAAAADgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAl846eAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAA8AAAAOAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACXzjp4AAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAPAAAADgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAl846eAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAA8AAAAPAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACs/kBGAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAA0AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAVMAXOAAAAAAoAAABbAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAb8I6wAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAB5EmpQAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('d80c809a4065600d7705e7db04e1260bf39582d941446a95fb9cea66680ef0c3', 5, 14, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAQAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAS2/nqAAAAAAoAAABRAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAGYwwYwUMaDuxhjfxFrmYgv62lZiUxTe8QNw75Za/PCyZ/ZS4NK6peWAJh+m8H33lhcVsst5ElAhFZ+zwZZ3VDQ==', '2AyAmkBlYA13BefbBOEmC/OVgtlBRGqV+5zqZmgO8MMAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAADgAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABLb+eoAAAAACgAAAFEAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAPAAAADwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAArP5ARgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABAAAAAPAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACs/kBGAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAQAAAADwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAArP5ARgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABAAAAAQAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAC/2jowAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAA4AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAS2/nqAAAAAAoAAABRAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAeRJqUAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAACCYpngAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('fd0bc444f5e90e9a61a5aa011a8b62376ef2d7e304418a188a294bb0b95740f8', 5, 15, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAARAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQh+4GAAAAAAoAAABHAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAvgqC6TyEhSrhF7K4wwOgd0sCvmFAQgfM1Ez+eEwWbm/BPJSW0WpOTxU5feEKAOpLYaHJvvvD+WZKm5PI/yadBw==', '/QvERPXpDpphpaoBGotiN27y1+MEQYoYiilLsLlXQPgAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAADwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABCH7gYAAAAACgAAAEcAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAQAAAAEAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAv9o6MAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABEAAAAQAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAC/2jowAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAARAAAAEAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAv9o6MAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABEAAAARAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAADQYig2AAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAA8AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQh+4GAAAAAAoAAABHAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAgmKZ4AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAACLsslwAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('04b1a1a09159b1c7bb43fd1dc0f282958d0a01c337d72a0324c0262b58d93615', 5, 16, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAASAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAOM+IiAAAAAAoAAAA9AAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAE0N79ktAplSSjovU50IktziuRrJN6xmRkF7fsV+YjK5g8XWPegdWuH8u55zCzZcBzddo8CaiuEWpJMPjMZZICA==', 'BLGhoJFZsce7Q/0dwPKClY0KAcM31yoDJMAmK1jZNhUAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAEAAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA4z4iIAAAAACgAAAD0AAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAARAAAAEQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA0GIoNgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABIAAAARAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAADQYig2AAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAASAAAAEQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA0GIoNgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABIAAAASAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAADelgpYAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABAAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAOM+IiAAAAAAoAAAA9AAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAi7LJcAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAACVAvkAAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('5d37d98f720dfb3dce49331f403bfa3f9ef13122fae954a73b7b688b180b1516', 5, 17, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAATAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAL39Y+AAAAAAoAAAAzAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAXUhb5QTAO+vV5kTEQqOp9yi4sDerjU5vIT5VH3MiOG381zIplmafJjLNHS02enkonOHtHWIvqznVQjHqQ389DQ==', 'XTfZj3IN+z3OSTMfQDv6P57xMSL66VSnO3toixgLFRYAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAEQAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAvf1j4AAAAACgAAADMAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAASAAAAEgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA3pYKWAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABMAAAASAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAADelgpYAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAATAAAAEgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA3pYKWAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABMAAAATAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAADqdeCWAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABEAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAL39Y+AAAAAAoAAAAzAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAlQL5AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAACeUyiQAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('a3d82c4ac237e77f385f3cdf5a358cabc4b0c12b7f58b59c197fdba8a76010cf', 5, 18, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAUAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJi8paAAAAAAoAAAApAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAiJwFcozA9Q4Vj/tABAkphbvOi6Hs325bHDBpTi6J/LN3SVHGsYQ2UwD1recgYoYtoWD1+qkKdFMSzeuIZodJDQ==', 'o9gsSsI35384XzzfWjWMq8SwwSt/WLWcGX/bqKdgEM8AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAEgAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAmLyloAAAAACgAAACkAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAATAAAAEwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA6nXglgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABQAAAATAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAADqdeCWAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAUAAAAEwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA6nXglgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABQAAAAUAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAD0AarwAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABIAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJi8paAAAAAAoAAAApAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAnlMokAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAACno1ggAAAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('e09337eedf136665192e840b23bf26b86fc85b93bb401d3a1ce4ee2a1b579213', 5, 19, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAVAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAHN752AAX14QkSejmcAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAEhl1VhzJ53lV9jnMsTC9/D5/tr0jaWCgSc0KCmdSqlqbQ/kDEgvT+jfSLDuQ6gM9GJCSfoFXT4preQ0mpLvCCQ==', '4JM37t8TZmUZLoQLI78muG/IW5O7QB06HOTuKhtXkhMAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAEwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAc3vnX+BfXhCRJ6OZwAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAUAAAAFAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA9AGq8AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABUAAAAUAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAD0AarwAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAVAAAAFAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA9AGq8AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABUAAAAVAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAD7OWll/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAHN751/gX14QkSejmcAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAp6NYIAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAACw84ev8AAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f140ddf0c75f70ddf0d79391e6b5992b9c56b9c23c040008b908c70a413eb03d', 5, 20, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAWAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAE47KSAAAAAAoAAAAVAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAW7ujBoctNRfa1M6+T0tShj0Q+l9ybp9C6jQmrSEUeBSwAqucU1YAMlc3XzqIBy35EsuVN0k0hD81/rrCNCtICg==', '8UDd8MdfcN3w15OR5rWZK5xWucI8BAAIuQjHCkE+sD0AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAFAAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAATjspIAAAAACgAAABUAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAVAAAAFQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA+zlpZf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABYAAAAVAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAD7OWll/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAWAAAAFQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA+zlpZf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABYAAAAWAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEAHRv3/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABQAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAE47KSAAAAAAoAAAAVAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAsPOHr/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAC6Q7c/8AAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('5d46530574ecf525512b5184af69899d95a826ec6bbad2e0b2d34b3efa352d7f', 5, 21, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAXAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACj6auAAAAAAoAAAALAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAmEz+ciLZWEXIlsEWtrY1Ii1fzoax2dGCE/Fu0GhOyqbw90Dvs+k3aVOmQLTByU5JWjEvd6Op+oV3i+7KPPtxAw==', 'XUZTBXTs9SVRK1GEr2mJnZWoJuxrutLgstNLPvo1LX8AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAFQAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAKPpq4AAAAACgAAAAsAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAWAAAAFgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABAB0b9/4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABcAAAAWAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEAHRv3/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAXAAAAFgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABAB0b9/4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABcAAAAXAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAECrMKl/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABUAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACj6auAAAAAAoAAAALAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAukO3P/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAADDk+bP8AAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('bc2a16ca82b7d0bd903c26482736cceb9f4efa077071e72849654b3aced94136', 5, 22, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAYAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAdzWUAAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAJnrtXGyjkqpAJAFfDY0JyJjXfS9/xXLLHdu3XT20IxpJCBQ2K0fhYnVis0tnbacC9/vTcmLnWxKg1oGCR9usBA==', 'vCoWyoK30L2QPCZIJzbM659O+gdwcecoSWVLOs7ZQTYAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAFgAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAB3NZQAAAAABQAAAAEAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAXAAAAFwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABAqzCpf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABgAAAAXAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAECrMKl/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAYAAAAFwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABAqzCpf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABgAAAAYAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEDI/g5/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABYAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAdzWUAAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAw5Pmz/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAADM5BZf8AAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('a0bdbdb1aa35b7f2aec201b618fca59405e4c375f8f76a24ef25e885a96fd7ed', 5, 23, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAZAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXv6x8AAAAAAUAAAAzAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAGqxC/cid99JKEBv6Y7vmkU1u+UQ+SwDxHIjLeMmmrt5Uv2TCs6Ct4tokvwjlGsbBo1scU8nQmwuXui8bfNGTAA==', 'oL29sao1t/KuwgG2GPyllAXkw3X492ok7yXohalv1+0AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAFwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABe/rHwAAAAABQAAADMAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAYAAAAGAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABAyP4Of4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABkAAAAYAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEDI/g5/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAZAAAAGAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABAyP4Of4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABkAAAAZAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEa46S1/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABcAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXv6x8AAAAAAUAAAAzAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAzOQWX/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAADWNEXv8AAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('9b90554626c9bfa396b4f61cc910d383a38f1223c8f5478edde6fe60a7f2f406', 5, 24, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAaAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAVa6CYAAAAAAUAAAAuAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABATU8XW0HLVKABibMcV0H3VxUkGh/dQhUcM0eFCkFzVgeXmY9g1V/MnP9DsNs1aipuJVlAGS0B88gxbmoQ5h6rDA==', 'm5BVRibJv6OWtPYcyRDTg6OPEiPI9UeO3eb+YKfy9AYAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAGAAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABVroJgAAAAABQAAAC4AAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAZAAAAGQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABGuOktf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABoAAAAZAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEa46S1/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAaAAAAGQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABGuOktf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABoAAAAaAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEwT0VN/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABgAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAVa6CYAAAAAAUAAAAuAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAA1jRF7/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAADfhHV/8AAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('0e17e87fcda53937d77cbf1e2658fcdf41eb0689e9649545bb14a5960832e5b8', 5, 25, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAbAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAATF5S0AAAAAAUAAAApAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABALhl41aevL0eWZT/dx9jwFRVb7nDeDsjPeuPKK5QCBgWZjBWFwwRXz+gTiHccCvG5W4d93ucAU4xOkbCj1VH9CQ==', 'Dhfof82lOTfXfL8eJlj830HrBonpZJVFuxSllggy5bgAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAGQAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABMXlLQAAAAABQAAACkAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAaAAAAGgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABME9FTf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABsAAAAaAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEwT0VN/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAbAAAAGgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABME9FTf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABsAAAAbAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFDZtoB/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABkAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAATF5S0AAAAAAUAAAApAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAA34R1f/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAADo1KUP8AAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f277e4abf7d0d326fa63ee62415f7a117e43453072677d1f6e9618c8d2bb8524', 5, 26, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAcAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQw4jQAAAAAAUAAAAkAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAxjfuAsXsrTxv+5NVYnsb0soqC6ZoluT/Xobjrt45eAeNZMwp9/RV2hLXySkVOVk2O814/dgyeap7M+LgWibPBg==', '8nfkq/fQ0yb6Y+5iQV96EX5DRTByZ30fbpYYyNK7hSQAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAGgAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABDDiNAAAAAABQAAACQAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAbAAAAGwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABQ2baAf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABwAAAAbAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFDZtoB/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAcAAAAGwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABQ2baAf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABwAAAAcAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFUKmLR/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABoAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQw4jQAAAAAAUAAAAkAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAA6NSlD/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAADyJNSf8AAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('5e3622bf6dab1276155014b8387f261a0bbfbef247caa05e9c4be8c890dad958', 5, 27, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAdAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAOb3zsAAAAAAUAAAAfAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAcFijipV/lZRIDYicNpHFwnaL4J0Fmwkcr0G9VxH4lZSYgLjgQnvgniCBQrvu2eqyqOFHC8H04T7D9jXseYr4Cg==', 'XjYiv22rEnYVUBS4OH8mGgu/vvJHyqBenEvoyJDa2VgAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAGwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAA5vfOwAAAAABQAAAB8AAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAcAAAAHAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABVCpi0f4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAB0AAAAcAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFUKmLR/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAdAAAAHAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABVCpi0f4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAB0AAAAdAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFimd+9/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABsAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAOb3zsAAAAAAUAAAAfAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAA8iTUn/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAD7dQQv8AAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('b00c83ae8f3d0cd4f1760517182abdf0440eca6efcd2b0fa893aac85b35e42cb', 5, 28, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAeAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAMG3EIAAAAAAUAAAAaAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAbHyKtzQE0yWfACwWf+1pYV3POGcAKxlNttLK4B5LmX34VwUIGjWHqKIiw/aDtsaIqBJI62bfkYn6KiMWiRnlAg==', 'sAyDro89DNTxdgUXGCq98EQOym780rD6iTqshbNeQssAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAHAAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAwbcQgAAAAABQAAABoAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAdAAAAHQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABYpnfvf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAB4AAAAdAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFimd+9/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAeAAAAHQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABYpnfvf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAB4AAAAeAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFutVDF/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABwAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAMG3EIAAAAAAUAAAAaAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAA+3UEL/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAEExTO/8AAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('3f731b66c1a3d2c4cf9d15bb17e910beaa6f6fa6a77cccfd62f5eabcd3ecfcc5', 5, 29, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAfAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJx2UkAAAAAAUAAAAVAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAkkZq5sVwc5pr6NYfqlSYkQevr273ibhO9EwVykO2mQ4+ka+BrQj++wfcsuJFbGaeE6NtzQxTf7XQaGZpwjk5Cw==', 'P3MbZsGj0sTPnRW7F+kQvqpvb6anfMz9YvXqvNPs/MUAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAHQAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAnHZSQAAAAABQAAABUAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAeAAAAHgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABbrVQxf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAB8AAAAeAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFutVDF/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAfAAAAHgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABbrVQxf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAB8AAAAfAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAF4fLXp/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAB0AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJx2UkAAAAAAUAAAAVAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAABBMUzv/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAEOFWNP8AAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('492c8c2808bf649ba321f0f75dda11581107bff229ef457340aab8494f5ad412', 5, 30, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAgAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAHc1lAAAAAAAUAAAAQAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAGoxQs3i+aE6OAegBkTmA0dqEadD541CFUYMVQ1aCii5ioLMaP6i5oSZ5+4c0VfY2MAPmpxdNCOY3vwH4XD8yCw==', 'SSyMKAi/ZJujIfD3XdoRWBEHv/Ip70VzQKq4SU9a1BIAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAHgAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAdzWUAAAAAABQAAABAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAfAAAAHwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABeHy16f4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACAAAAAfAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAF4fLXp/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAgAAAAHwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABeHy16f4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACAAAAAgAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAF/8A8p/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAB4AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAHc1lAAAAAAAUAAAAQAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAABDhVjT/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAEXZZLf8AAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('c03dfbea35606bd565f3609a306aa27a82aa14b3fd142f1a13b79c1871f54a3b', 5, 31, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAhAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAFH01cAAAAAAUAAAALAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAlTGl5Ll7WR6ooHo4TPTHiPsPhYQEcPuFd4lby43niifsCCnLkZfzoZYxODmAHHv/RXkskBH7eRkxCZYBRXRQBA==', 'wD376jVga9Vl82CaMGqieoKqFLP9FC8aE7ecGHH1SjsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAHwAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAUfTVwAAAAABQAAAAsAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAgAAAAIAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABf/APKf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACEAAAAgAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAF/8A8p/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAhAAAAIAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABf/APKf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACEAAAAhAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAGFD1yF/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAB8AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAFH01cAAAAAAUAAAALAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAABF2WS3/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAEgtcJv8AAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('42e47f8fdcb738c844e1556c9fad18eb8887d78681ef5e9616898eb6e1c5e8eb', 5, 32, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAiAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACy0F4AAAAAAUAAAAGAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAaSoEc/Kxao3Z6gUsTh1QfLjlT486TQKgtu9NhqT8EzSQ2jFCWgP+odJUnTIPRU74DOgqwEgcHBGpovaass24Dw==', 'QuR/j9y3OMhE4VVsn60Y64iH14aB716WFomOtuHF6OsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAIAAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAALLQXgAAAAABQAAAAYAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAhAAAAIQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABhQ9chf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACIAAAAhAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAGFD1yF/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAiAAAAIQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABhQ9chf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACIAAAAiAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAGH2p39/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAACAAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACy0F4AAAAAAUAAAAGAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAABILXCb/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAEqBfH/8AAAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('ee96865dfca78c43c4074317f3dbcd7ca978643b973bc9a5dc4f2588f981c6d7', 5, 33, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAjAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAstBeAAAAAAoAAAADAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABA2FwoenXJVOTi9oyWHyNL+0wLRdikDwB4qdNJmj+OQi8a0jRgjQG/1/EsSq885q7mUvX57XCjUGH+rf70B+CFAg==', '7paGXfynjEPEB0MX89vNfKl4ZDuXO8ml3E8liPmBxtcAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAIQAAAAAAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAACy0F4AAAAACgAAAAMAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAiAAAAIgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABh9qd/f4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACMAAAAiAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAGH2p39/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAjAAAAIgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABh9qd/f4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACMAAAAjAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAGIjW5b/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAACEAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAstBeAAAAAAoAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAABKgXx//AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAEzViGP8AAAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/order_books_310-horizon.sql b/services/horizon/internal/test/scenarios/order_books_310-horizon.sql deleted file mode 100644 index f454114bd0..0000000000 --- a/services/horizon/internal/test/scenarios/order_books_310-horizon.sql +++ /dev/null @@ -1,1148 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO asset_stats VALUES (1, '100000000000', 2, 0, ''); -INSERT INTO asset_stats VALUES (2, '100000000000', 2, 0, ''); - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (2, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_accounts VALUES (3, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_accounts VALUES (4, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 4, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_assets VALUES (1, 'credit_alphanum4', 'BTC', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_assets VALUES (2, 'credit_alphanum4', 'USD', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 2, true); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 17179873281, 1, 2, '{"amount": "5000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 17179873281, 2, 3, '{"amount": "5000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 17179877377, 1, 2, '{"amount": "5000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 17179877377, 2, 3, '{"amount": "5000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 17179881473, 1, 2, '{"amount": "5000.0000000", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 17179881473, 2, 3, '{"amount": "5000.0000000", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 17179885569, 1, 2, '{"amount": "5000.0000000", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 17179885569, 2, 3, '{"amount": "5000.0000000", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 12884905985, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 12884910081, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (3, 12884914177, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 12884918273, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589938689, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 3, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 1, 0, '{"starting_balance": "1000000.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589942785, 2, 3, '{"amount": "1000000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589942785, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); -INSERT INTO history_effects VALUES (3, 8589946881, 1, 0, '{"starting_balance": "6000.0000000"}'); -INSERT INTO history_effects VALUES (4, 8589946881, 2, 3, '{"amount": "6000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (3, 8589946881, 3, 10, '{"weight": 1, "public_key": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (5, '80e8bf9a11c3a19711b4aa87272f1ad76ecf6e7adb0145f91fd519756c341d8e', 'e55ebe57d2ae24f6bc9b636f3e66c299f789a9f7d8159f46d93a38071eb5784f', 33, 33, '2019-06-03 16:36:53', '2019-06-03 16:36:53.548298', '2019-06-03 16:36:53.548298', 21474836480, 16, 1000000000000000000, 4400, 100, 100000000, 1000000, 11, 'AAAAC+VevlfSriT2vJtjbz5mwpn3ian32BWfRtk6OAcetXhPglYX/kzvbCweg7Ey06USwQ6c6cIjrofNgyH4uSoXJNcAAAAAXPVMpQAAAAAAAAAAJ4/Gr554ZVHMujN++AAdhrv5CCDQrTNFeytjikmekx0TN0P6HDz1rTO/Z/AzeDvBFYcBodH2UJCqeOJz9nquzgAAAAUN4Lazp2QAAAAAAAAAABEwAAAAAAAAAAAAAAAhAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 33, 0); -INSERT INTO history_ledgers VALUES (4, 'e55ebe57d2ae24f6bc9b636f3e66c299f789a9f7d8159f46d93a38071eb5784f', 'e15e176a36631b4c1067eb4d1fca8d22706c38ed0a84377d45b71197097370e5', 4, 4, '2019-06-03 16:36:52', '2019-06-03 16:36:53.587603', '2019-06-03 16:36:53.587603', 17179869184, 16, 1000000000000000000, 1100, 100, 100000000, 1000000, 11, 'AAAAC+FeF2o2YxtMEGfrTR/KjSJwbDjtCoQ3fUW3EZcJc3DlW1gzwzaHXpYaRffreilu/1k5AQHqGMV2UTD4ewI9ovsAAAAAXPVMpAAAAAAAAAAA9P74c8f1xfd4wX2Dasj3a3ZXngqhfaJ2yA7eEO3Lts/H+EvsBLAxnP4GGboXdw18KCURJyzeIeRCdgaodh/BugAAAAQN4Lazp2QAAAAAAAAAAARMAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 4, 0); -INSERT INTO history_ledgers VALUES (3, 'e15e176a36631b4c1067eb4d1fca8d22706c38ed0a84377d45b71197097370e5', 'd1cc81a10bc2fd6dd13a4444e9522f361b0eb28519f1d893c8bbb753466eec0e', 4, 4, '2019-06-03 16:36:51', '2019-06-03 16:36:53.605262', '2019-06-03 16:36:53.605262', 12884901888, 16, 1000000000000000000, 700, 100, 100000000, 1000000, 11, 'AAAAC9HMgaELwv1t0TpEROlSLzYbDrKFGfHYk8i7t1NGbuwOrN7iIAwij4SkRAlla+ZJYO0IQWnc7kcoZn1WbRODJXIAAAAAXPVMowAAAAAAAAAAhrVFL6RjAMOSd+xZbT+ONgXtaV13E2WDVpOKC2IZ2LYnFnLWYxSKOH/xxTz08LKg5zf9cJfxtZeqFuOske221AAAAAMN4Lazp2QAAAAAAAAAAAK8AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 4, 0); -INSERT INTO history_ledgers VALUES (2, 'd1cc81a10bc2fd6dd13a4444e9522f361b0eb28519f1d893c8bbb753466eec0e', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 3, 3, '2019-06-03 16:36:50', '2019-06-03 16:36:53.619519', '2019-06-03 16:36:53.61952', 8589934592, 16, 1000000000000000000, 300, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZjdLwAXsL2eIh4K+qv7MhQiH7W7LZaUq9IK+/p5Db8bMAAAAAXPVMogAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAA5YwG7hzcH7+TYJ0iG4Sklbds5327gq5uPLExV/3yG/00xaSt7UjaVPS4JTjgaBM+pMZJem5uEpbv/ROp+iduQAAAAAIN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 3, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:36:53.635795', '2019-06-03 16:36:53.635795', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 21474840577, 1); -INSERT INTO history_operation_participants VALUES (2, 21474844673, 1); -INSERT INTO history_operation_participants VALUES (3, 21474848769, 1); -INSERT INTO history_operation_participants VALUES (4, 21474852865, 1); -INSERT INTO history_operation_participants VALUES (5, 21474856961, 1); -INSERT INTO history_operation_participants VALUES (6, 21474861057, 1); -INSERT INTO history_operation_participants VALUES (7, 21474865153, 1); -INSERT INTO history_operation_participants VALUES (8, 21474869249, 1); -INSERT INTO history_operation_participants VALUES (9, 21474873345, 1); -INSERT INTO history_operation_participants VALUES (10, 21474877441, 1); -INSERT INTO history_operation_participants VALUES (11, 21474881537, 1); -INSERT INTO history_operation_participants VALUES (12, 21474885633, 1); -INSERT INTO history_operation_participants VALUES (13, 21474889729, 1); -INSERT INTO history_operation_participants VALUES (14, 21474893825, 1); -INSERT INTO history_operation_participants VALUES (15, 21474897921, 1); -INSERT INTO history_operation_participants VALUES (16, 21474902017, 1); -INSERT INTO history_operation_participants VALUES (17, 21474906113, 1); -INSERT INTO history_operation_participants VALUES (18, 21474910209, 1); -INSERT INTO history_operation_participants VALUES (19, 21474914305, 1); -INSERT INTO history_operation_participants VALUES (20, 21474918401, 1); -INSERT INTO history_operation_participants VALUES (21, 21474922497, 1); -INSERT INTO history_operation_participants VALUES (22, 21474926593, 1); -INSERT INTO history_operation_participants VALUES (23, 21474930689, 1); -INSERT INTO history_operation_participants VALUES (24, 21474934785, 1); -INSERT INTO history_operation_participants VALUES (25, 21474938881, 1); -INSERT INTO history_operation_participants VALUES (26, 21474942977, 1); -INSERT INTO history_operation_participants VALUES (27, 21474947073, 1); -INSERT INTO history_operation_participants VALUES (28, 21474951169, 1); -INSERT INTO history_operation_participants VALUES (29, 21474955265, 1); -INSERT INTO history_operation_participants VALUES (30, 21474959361, 1); -INSERT INTO history_operation_participants VALUES (31, 21474963457, 1); -INSERT INTO history_operation_participants VALUES (32, 21474967553, 1); -INSERT INTO history_operation_participants VALUES (33, 21474971649, 1); -INSERT INTO history_operation_participants VALUES (34, 17179873281, 2); -INSERT INTO history_operation_participants VALUES (35, 17179873281, 1); -INSERT INTO history_operation_participants VALUES (36, 17179877377, 2); -INSERT INTO history_operation_participants VALUES (37, 17179877377, 3); -INSERT INTO history_operation_participants VALUES (38, 17179881473, 2); -INSERT INTO history_operation_participants VALUES (39, 17179881473, 1); -INSERT INTO history_operation_participants VALUES (40, 17179885569, 2); -INSERT INTO history_operation_participants VALUES (41, 17179885569, 3); -INSERT INTO history_operation_participants VALUES (42, 12884905985, 1); -INSERT INTO history_operation_participants VALUES (43, 12884910081, 3); -INSERT INTO history_operation_participants VALUES (44, 12884914177, 3); -INSERT INTO history_operation_participants VALUES (45, 12884918273, 1); -INSERT INTO history_operation_participants VALUES (46, 8589938689, 4); -INSERT INTO history_operation_participants VALUES (47, 8589938689, 2); -INSERT INTO history_operation_participants VALUES (48, 8589942785, 4); -INSERT INTO history_operation_participants VALUES (49, 8589942785, 1); -INSERT INTO history_operation_participants VALUES (50, 8589946881, 4); -INSERT INTO history_operation_participants VALUES (51, 8589946881, 3); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 51, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (21474840577, 21474840576, 1, 3, '{"price": "0.1000000", "amount": "10000.0000000", "price_r": {"d": 10, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474844673, 21474844672, 1, 3, '{"price": "0.1111111", "amount": "9000.0000000", "price_r": {"d": 9, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474848769, 21474848768, 1, 3, '{"price": "0.1250000", "amount": "8000.0000000", "price_r": {"d": 8, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474852865, 21474852864, 1, 3, '{"price": "0.1428571", "amount": "7000.0000000", "price_r": {"d": 7, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474856961, 21474856960, 1, 3, '{"price": "0.1666667", "amount": "6000.0000000", "price_r": {"d": 6, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474861057, 21474861056, 1, 3, '{"price": "0.2000000", "amount": "5000.0000000", "price_r": {"d": 5, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474865153, 21474865152, 1, 3, '{"price": "0.2500000", "amount": "4000.0000000", "price_r": {"d": 4, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474869249, 21474869248, 1, 3, '{"price": "0.3333333", "amount": "3000.0000000", "price_r": {"d": 3, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474873345, 21474873344, 1, 3, '{"price": "0.5000000", "amount": "2000.0000000", "price_r": {"d": 2, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474877441, 21474877440, 1, 3, '{"price": "1.0000000", "amount": "1000.0000000", "price_r": {"d": 1, "n": 1}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474881537, 21474881536, 1, 3, '{"price": "10.0000000", "amount": "100.0000000", "price_r": {"d": 1, "n": 10}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474885633, 21474885632, 1, 3, '{"price": "0.0990099", "amount": "10100.0000000", "price_r": {"d": 101, "n": 10}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474889729, 21474889728, 1, 3, '{"price": "0.1098901", "amount": "9100.0000000", "price_r": {"d": 91, "n": 10}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474893825, 21474893824, 1, 3, '{"price": "0.1234568", "amount": "8100.0000000", "price_r": {"d": 81, "n": 10}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474897921, 21474897920, 1, 3, '{"price": "0.1408451", "amount": "7100.0000000", "price_r": {"d": 71, "n": 10}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474902017, 21474902016, 1, 3, '{"price": "0.1639344", "amount": "6100.0000000", "price_r": {"d": 61, "n": 10}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474906113, 21474906112, 1, 3, '{"price": "0.1960784", "amount": "5100.0000000", "price_r": {"d": 51, "n": 10}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474910209, 21474910208, 1, 3, '{"price": "0.2439024", "amount": "4100.0000000", "price_r": {"d": 41, "n": 10}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474914305, 21474914304, 1, 3, '{"price": "0.3225806", "amount": "3100.0000000", "price_r": {"d": 310000028, "n": 100000009}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474918401, 21474918400, 1, 3, '{"price": "0.4761905", "amount": "2100.0000000", "price_r": {"d": 21, "n": 10}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474922497, 21474922496, 1, 3, '{"price": "0.9090909", "amount": "1100.0000000", "price_r": {"d": 11, "n": 10}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474926593, 21474926592, 1, 3, '{"price": "5.0000000", "amount": "200.0000000", "price_r": {"d": 1, "n": 5}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474930689, 21474930688, 1, 3, '{"price": "0.0980392", "amount": "10200.0000000", "price_r": {"d": 51, "n": 5}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474934785, 21474934784, 1, 3, '{"price": "0.1086957", "amount": "9200.0000000", "price_r": {"d": 46, "n": 5}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474938881, 21474938880, 1, 3, '{"price": "0.1219512", "amount": "8200.0000000", "price_r": {"d": 41, "n": 5}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474942977, 21474942976, 1, 3, '{"price": "0.1388889", "amount": "7200.0000000", "price_r": {"d": 36, "n": 5}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474947073, 21474947072, 1, 3, '{"price": "0.1612903", "amount": "6200.0000000", "price_r": {"d": 31, "n": 5}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474951169, 21474951168, 1, 3, '{"price": "0.1923077", "amount": "5200.0000000", "price_r": {"d": 26, "n": 5}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474955265, 21474955264, 1, 3, '{"price": "0.2380952", "amount": "4200.0000000", "price_r": {"d": 21, "n": 5}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474959361, 21474959360, 1, 3, '{"price": "0.3125000", "amount": "3200.0000000", "price_r": {"d": 16, "n": 5}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474963457, 21474963456, 1, 3, '{"price": "0.4545455", "amount": "2200.0000000", "price_r": {"d": 11, "n": 5}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474967553, 21474967552, 1, 3, '{"price": "0.8333333", "amount": "1200.0000000", "price_r": {"d": 6, "n": 5}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474971649, 21474971648, 1, 3, '{"price": "3.3333333", "amount": "300.0000000", "price_r": {"d": 3, "n": 10}, "offer_id": 0, "buying_asset_code": "USD", "buying_asset_type": "credit_alphanum4", "selling_asset_type": "native", "buying_asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (17179873281, 17179873280, 1, 1, '{"to": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "from": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "amount": "5000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (17179877377, 17179877376, 1, 1, '{"to": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "from": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "amount": "5000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (17179881473, 17179881472, 1, 1, '{"to": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "from": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "amount": "5000.0000000", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (17179885569, 17179885568, 1, 1, '{"to": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "from": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "amount": "5000.0000000", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (12884910081, 12884910080, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_operations VALUES (12884914177, 12884914176, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON'); -INSERT INTO history_operations VALUES (12884918273, 12884918272, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "BTC", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "1000000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589946881, 8589946880, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON", "starting_balance": "6000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 21474840576, 1); -INSERT INTO history_transaction_participants VALUES (2, 21474844672, 1); -INSERT INTO history_transaction_participants VALUES (3, 21474848768, 1); -INSERT INTO history_transaction_participants VALUES (4, 21474852864, 1); -INSERT INTO history_transaction_participants VALUES (5, 21474856960, 1); -INSERT INTO history_transaction_participants VALUES (6, 21474861056, 1); -INSERT INTO history_transaction_participants VALUES (7, 21474865152, 1); -INSERT INTO history_transaction_participants VALUES (8, 21474869248, 1); -INSERT INTO history_transaction_participants VALUES (9, 21474873344, 1); -INSERT INTO history_transaction_participants VALUES (10, 21474877440, 1); -INSERT INTO history_transaction_participants VALUES (11, 21474881536, 1); -INSERT INTO history_transaction_participants VALUES (12, 21474885632, 1); -INSERT INTO history_transaction_participants VALUES (13, 21474889728, 1); -INSERT INTO history_transaction_participants VALUES (14, 21474893824, 1); -INSERT INTO history_transaction_participants VALUES (15, 21474897920, 1); -INSERT INTO history_transaction_participants VALUES (16, 21474902016, 1); -INSERT INTO history_transaction_participants VALUES (17, 21474906112, 1); -INSERT INTO history_transaction_participants VALUES (18, 21474910208, 1); -INSERT INTO history_transaction_participants VALUES (19, 21474914304, 1); -INSERT INTO history_transaction_participants VALUES (20, 21474918400, 1); -INSERT INTO history_transaction_participants VALUES (21, 21474922496, 1); -INSERT INTO history_transaction_participants VALUES (22, 21474926592, 1); -INSERT INTO history_transaction_participants VALUES (23, 21474930688, 1); -INSERT INTO history_transaction_participants VALUES (24, 21474934784, 1); -INSERT INTO history_transaction_participants VALUES (25, 21474938880, 1); -INSERT INTO history_transaction_participants VALUES (26, 21474942976, 1); -INSERT INTO history_transaction_participants VALUES (27, 21474947072, 1); -INSERT INTO history_transaction_participants VALUES (28, 21474951168, 1); -INSERT INTO history_transaction_participants VALUES (29, 21474955264, 1); -INSERT INTO history_transaction_participants VALUES (30, 21474959360, 1); -INSERT INTO history_transaction_participants VALUES (31, 21474963456, 1); -INSERT INTO history_transaction_participants VALUES (32, 21474967552, 1); -INSERT INTO history_transaction_participants VALUES (33, 21474971648, 1); -INSERT INTO history_transaction_participants VALUES (34, 17179873280, 2); -INSERT INTO history_transaction_participants VALUES (35, 17179873280, 1); -INSERT INTO history_transaction_participants VALUES (36, 17179877376, 2); -INSERT INTO history_transaction_participants VALUES (37, 17179877376, 3); -INSERT INTO history_transaction_participants VALUES (38, 17179881472, 2); -INSERT INTO history_transaction_participants VALUES (39, 17179881472, 1); -INSERT INTO history_transaction_participants VALUES (40, 17179885568, 2); -INSERT INTO history_transaction_participants VALUES (41, 17179885568, 3); -INSERT INTO history_transaction_participants VALUES (42, 12884905984, 1); -INSERT INTO history_transaction_participants VALUES (43, 12884910080, 3); -INSERT INTO history_transaction_participants VALUES (44, 12884914176, 3); -INSERT INTO history_transaction_participants VALUES (45, 12884918272, 1); -INSERT INTO history_transaction_participants VALUES (46, 8589938688, 4); -INSERT INTO history_transaction_participants VALUES (47, 8589938688, 2); -INSERT INTO history_transaction_participants VALUES (48, 8589942784, 4); -INSERT INTO history_transaction_participants VALUES (49, 8589942784, 1); -INSERT INTO history_transaction_participants VALUES (50, 8589946880, 4); -INSERT INTO history_transaction_participants VALUES (51, 8589946880, 3); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 51, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('c48b48982dcd1f079d90ee3289dc2b6269bce088bd7183ddba8e3dca25b1e84b', 5, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934595, 100, 1, '2019-06-03 16:36:53.54857', '2019-06-03 16:36:53.54857', 21474840576, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXSHboAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAOL8799gdl4G9kC/cOT6pQu2zfD5GhhExAKtKmb7s8ozksyqIYI21eqCLcluwLlb2wBim5Owr0y2zzxYH7vqOBw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAEAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXSHboAAAAAAEAAAAKAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAACAAAAAgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAADAAAAAgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAMAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAMAAAADAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAXSHboAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAEAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXSHboAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAAAAAAAAAAAAQAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAACVAvkAAAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp84AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp7UAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{OL8799gdl4G9kC/cOT6pQu2zfD5GhhExAKtKmb7s8ozksyqIYI21eqCLcluwLlb2wBim5Owr0y2zzxYH7vqOBw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('437a48108dd143273dcf1c28296d6048d0915c6072650eb5f794b89560a40c0c', 5, 2, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934596, 100, 1, '2019-06-03 16:36:53.54883', '2019-06-03 16:36:53.54883', 21474844672, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAU9GsEAAAAAAEAAAAJAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAuUnZlMxj8taqMo/PYfI4rBl41Cpps/XHGlNot5+TWTZE9A06ipER6Q7XqbxhNzmAR8NaQbS3Ds0RQv44r3GLCg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAIAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAU9GsEAAAAAAEAAAAJAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAADAAAAAwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAF0h26AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAQAAAADAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAXSHboAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAEAAAAAwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAF0h26AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAQAAAAEAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAsPOHsAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAIAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAU9GsEAAAAAAEAAAAJAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAACVAvkAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAASoF8gAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp7UAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp5wAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{uUnZlMxj8taqMo/PYfI4rBl41Cpps/XHGlNot5+TWTZE9A06ipER6Q7XqbxhNzmAR8NaQbS3Ds0RQv44r3GLCg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('9f9ea714b1a39664b1e6df0fafd1aa17eda71bb05715fe1371246f3208b3a1b1', 5, 3, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934597, 100, 1, '2019-06-03 16:36:53.548976', '2019-06-03 16:36:53.548976', 21474848768, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAASoF8gAAAAAAEAAAAIAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABA9LQUhBPQFZOopSh/vuUNPcUm0DLI9wD4aw449Ccu6ADMejat8t2MyuzWvx8RwQMPd9zdXlwCE5d8cT3upwuPAg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAASoF8gAAAAAAEAAAAIAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAEAAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAALDzh7AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAUAAAAEAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAsPOHsAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAFAAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAALDzh7AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAUAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAA+3UEMAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAASoF8gAAAAAAEAAAAIAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAEqBfIAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAb8I6wAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp5wAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp4MAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{9LQUhBPQFZOopSh/vuUNPcUm0DLI9wD4aw449Ccu6ADMejat8t2MyuzWvx8RwQMPd9zdXlwCE5d8cT3upwuPAg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f966ab310137dae86c7ee7ee08850339537c78f854eaaaea78d7fd834134da79', 5, 4, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934598, 100, 1, '2019-06-03 16:36:53.549117', '2019-06-03 16:36:53.549117', 21474852864, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAGAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQTFM8AAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAaZXT/bkDz3FqTJhXKtcSev5gzrE0wL2GSnszf7t4qBTcnW3P4heHeAFIkSjtgz0m7IgGT1goVlbtdA5PtZNNCw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAQAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQTFM8AAAAAAEAAAAHAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAFAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAPt1BDAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAYAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAA+3UEMAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAGAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAPt1BDAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAYAAAAGAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAABPKZRIAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAQAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQTFM8AAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAG/COsAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAlQL5AAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp4MAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp2oAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{aZXT/bkDz3FqTJhXKtcSev5gzrE0wL2GSnszf7t4qBTcnW3P4heHeAFIkSjtgz0m7IgGT1goVlbtdA5PtZNNCw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('360d890880eebd224d7506b9881352fbc6b6b1921f84a85e9807f0775b5560bc', 5, 5, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934599, 100, 1, '2019-06-03 16:36:53.549264', '2019-06-03 16:36:53.549264', 21474856960, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAHAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAN+EdYAAAAAAEAAAAGAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAp1hMoM8rNid3pnBSv/sqgRwIIyLgkeBbUMH9SYTGgXXWZSB1Q7Rv54QgXbJ5XNxPqA9kgz/LYpJc3V9Lsk+mBA==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAUAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAN+EdYAAAAAAEAAAAGAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAGAAAABgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAATymUSAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAcAAAAGAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAABPKZRIAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAHAAAABgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAATymUSAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAcAAAAHAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAABdIdugAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAUAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAN+EdYAAAAAAEAAAAGAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAJUC+QAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAAukO3QAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp2oAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp1EAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{p1hMoM8rNid3pnBSv/sqgRwIIyLgkeBbUMH9SYTGgXXWZSB1Q7Rv54QgXbJ5XNxPqA9kgz/LYpJc3V9Lsk+mBA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('bc1c988cc29d96ba3ed032e48f862cda1c9ed615b07ac8db51ef399cd3fa2941', 5, 6, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934600, 100, 1, '2019-06-03 16:36:53.549415', '2019-06-03 16:36:53.549415', 21474861056, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAIAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAd6LAs45dbBkADWNU5etnooaywHqrB19Tf40hy6/miUAnNAx6o8/ueoRawn+3RJyRvQW3WKpZPbp4zB49zcYkDw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAYAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AAAAAAEAAAAFAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAHAAAABwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAXSHboAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAgAAAAHAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAABdIdugAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAIAAAABwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAXSHboAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAgAAAAIAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAABoxhcUAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAYAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAALpDt0AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAA34R1gAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp1EAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpzgAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{d6LAs45dbBkADWNU5etnooaywHqrB19Tf40hy6/miUAnNAx6o8/ueoRawn+3RJyRvQW3WKpZPbp4zB49zcYkDw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('61b33dced6b81dde0e86b61ba4abc280b6c35c6e4ba8045b5082f74a9a2b60ed', 5, 7, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934601, 100, 1, '2019-06-03 16:36:53.549535', '2019-06-03 16:36:53.549535', 21474865152, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAJAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJUC+QAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAFHqWUK4Luj4d8sUiQ18OB6fikbsPQXZAOIfZ32sgs62+Q17GMnwYqsxFo1ti49R7cMLadDsnhHjknkOQMzc+Dg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAcAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJUC+QAAAAAAEAAAAEAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAIAAAACAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAaMYXFAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAkAAAAIAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAABoxhcUAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAJAAAACAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAaMYXFAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAkAAAAJAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAByFkakAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAcAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJUC+QAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAN+EdYAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAABBMUzwAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpzgAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpx8AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{FHqWUK4Luj4d8sUiQ18OB6fikbsPQXZAOIfZ32sgs62+Q17GMnwYqsxFo1ti49R7cMLadDsnhHjknkOQMzc+Dg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('163aab67c5a24a59eda5e4b4e5f32924f603cff52a5e4fb25eae987538c23106', 5, 8, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934602, 100, 1, '2019-06-03 16:36:53.549659', '2019-06-03 16:36:53.54966', 21474869248, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAKAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAG/COsAAAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAm8aNJ18QdO28lh/q/TJRX9IDlSqhaNzxgla/NgydpGXxdgAYYA9bSLdcknkQ8zFwfSdYmmjKqnDxYG1U00rLBw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAgAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAG/COsAAAAAAEAAAADAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAJAAAACQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAchZGpAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAoAAAAJAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAByFkakAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAKAAAACQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAchZGpAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAoAAAAKAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAB5EmpQAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAgAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAG/COsAAAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAQTFM8AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAABKgXyAAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpx8AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpwYAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{m8aNJ18QdO28lh/q/TJRX9IDlSqhaNzxgla/NgydpGXxdgAYYA9bSLdcknkQ8zFwfSdYmmjKqnDxYG1U00rLBw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('627fdbd55feaf21e6e96addebb0f5fc73540ff9505d5d0dc76c9ec69f4d2f76f', 5, 9, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934603, 100, 1, '2019-06-03 16:36:53.549777', '2019-06-03 16:36:53.549777', 21474873344, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAALAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAEqBfIAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABA2pl8oiRj9zUIFp9AYMaKOb0OAbMsMjJNUUHewa3JwSH0V2Zaol7gkH5ymr3CNwO1e5X8fGilLZm+x5P7okPWDQ==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAkAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAEqBfIAAAAAAEAAAACAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAKAAAACgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAeRJqUAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAsAAAAKAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAB5EmpQAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAALAAAACgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAeRJqUAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAsAAAALAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAB9uoIYAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAkAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAEqBfIAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAASoF8gAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAABT0awQAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpwYAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpu0AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{2pl8oiRj9zUIFp9AYMaKOb0OAbMsMjJNUUHewa3JwSH0V2Zaol7gkH5ymr3CNwO1e5X8fGilLZm+x5P7okPWDQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('e252b8842716f49fe824df8c95e51a55b40db1b51017ba97dc59b2d971e5cb10', 5, 10, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934604, 100, 1, '2019-06-03 16:36:53.549897', '2019-06-03 16:36:53.549897', 21474877440, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAMAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABA0lB577a6VFTmqiBKQXiyg6YgjTPcU8n9Mldb5GdKeZ8DRkWG797qE3Tn/WL5uFYnY6qldsI9U31ASttn/Mh8Cg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAoAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAEAAAABAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAALAAAACwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAfbqCGAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAwAAAALAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAB9uoIYAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAMAAAACwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAfbqCGAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAwAAAAMAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACADo38AAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAoAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAU9GsEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAABdIdugAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpu0AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcptQAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{0lB577a6VFTmqiBKQXiyg6YgjTPcU8n9Mldb5GdKeZ8DRkWG797qE3Tn/WL5uFYnY6qldsI9U31ASttn/Mh8Cg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('b962b228793859d32de9d6a3d3e782acb8f2d0b9e3a17a91571a402d7cd47a8a', 5, 11, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934605, 100, 1, '2019-06-03 16:36:53.550025', '2019-06-03 16:36:53.550025', 21474881536, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAANAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAoAAAABAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAikMlBAAA6oi4Rg6Gp3svzTPGcaUQx4HtpN0TgusXrMTkbVsBpvHNs+w0bFF9BOgtyGYK2/6zfkXYMVEB9X6aCg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAsAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAoAAAABAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAMAAAADAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAgA6N/AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAA0AAAAMAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACADo38AAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAANAAAADAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAgA6N/AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAA0AAAANAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACASijGAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAsAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAoAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAXSHboAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAABmcgswAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcptQAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcprsAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{ikMlBAAA6oi4Rg6Gp3svzTPGcaUQx4HtpN0TgusXrMTkbVsBpvHNs+w0bFF9BOgtyGYK2/6zfkXYMVEB9X6aCg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('0343d98ff86bf4b5f9e24db8b3889fe34df7a166cfde7e9098a83c11f7eb9722', 5, 12, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934606, 100, 1, '2019-06-03 16:36:53.550144', '2019-06-03 16:36:53.550144', 21474885632, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAOAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXhBGyAAAAAAoAAABlAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAjAuehle1J2zs3RaLV5FD/TsgwVWQTHrGyz9xtHfjohTp9ugklMElF1GFa7zxijTpghCK1A0yyVuIrf8mIQiuBA==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAwAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXhBGyAAAAAAoAAABlAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAANAAAADQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAgEooxgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAA4AAAANAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACASijGAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAOAAAADQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAgEooxgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAA4AAAAOAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACXzjp4AAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAAwAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXhBGyAAAAAAoAAABlAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAZnILMAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAABvwjrAAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcprsAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpqIAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{jAuehle1J2zs3RaLV5FD/TsgwVWQTHrGyz9xtHfjohTp9ugklMElF1GFa7zxijTpghCK1A0yyVuIrf8mIQiuBA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('e82691759c9c5796c5cc91a1c71f233b6c5a38af9ad5976c7e655078818838e7', 5, 13, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934607, 100, 1, '2019-06-03 16:36:53.550264', '2019-06-03 16:36:53.550264', 21474889728, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAPAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAVMAXOAAAAAAoAAABbAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAj4F6inPyng6e0YtLtA9CBE8NYDuuMERmHR9ePEt3dFa0gma/P84LRkWeDa4Zb2E6wKVLnrjcqRdWHjE1YN3CAw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAA0AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAVMAXOAAAAAAoAAABbAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAOAAAADgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAl846eAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAA8AAAAOAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACXzjp4AAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAPAAAADgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAl846eAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAA8AAAAPAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACs/kBGAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAA0AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAVMAXOAAAAAAoAAABbAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAb8I6wAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAB5EmpQAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpqIAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpokAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{j4F6inPyng6e0YtLtA9CBE8NYDuuMERmHR9ePEt3dFa0gma/P84LRkWeDa4Zb2E6wKVLnrjcqRdWHjE1YN3CAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('d80c809a4065600d7705e7db04e1260bf39582d941446a95fb9cea66680ef0c3', 5, 14, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934608, 100, 1, '2019-06-03 16:36:53.550382', '2019-06-03 16:36:53.550382', 21474893824, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAQAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAS2/nqAAAAAAoAAABRAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAGYwwYwUMaDuxhjfxFrmYgv62lZiUxTe8QNw75Za/PCyZ/ZS4NK6peWAJh+m8H33lhcVsst5ElAhFZ+zwZZ3VDQ==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAA4AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAS2/nqAAAAAAoAAABRAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAPAAAADwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAArP5ARgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABAAAAAPAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAACs/kBGAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAQAAAADwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAArP5ARgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABAAAAAQAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAC/2jowAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAA4AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAS2/nqAAAAAAoAAABRAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAeRJqUAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAACCYpngAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpokAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpnAAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GYwwYwUMaDuxhjfxFrmYgv62lZiUxTe8QNw75Za/PCyZ/ZS4NK6peWAJh+m8H33lhcVsst5ElAhFZ+zwZZ3VDQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('fd0bc444f5e90e9a61a5aa011a8b62376ef2d7e304418a188a294bb0b95740f8', 5, 15, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934609, 100, 1, '2019-06-03 16:36:53.550503', '2019-06-03 16:36:53.550503', 21474897920, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAARAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQh+4GAAAAAAoAAABHAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAvgqC6TyEhSrhF7K4wwOgd0sCvmFAQgfM1Ez+eEwWbm/BPJSW0WpOTxU5feEKAOpLYaHJvvvD+WZKm5PI/yadBw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAA8AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQh+4GAAAAAAoAAABHAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAQAAAAEAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAv9o6MAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABEAAAAQAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAC/2jowAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAARAAAAEAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAv9o6MAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABEAAAARAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAADQYig2AAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAA8AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQh+4GAAAAAAoAAABHAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAgmKZ4AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAACLsslwAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpnAAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcplcAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{vgqC6TyEhSrhF7K4wwOgd0sCvmFAQgfM1Ez+eEwWbm/BPJSW0WpOTxU5feEKAOpLYaHJvvvD+WZKm5PI/yadBw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('04b1a1a09159b1c7bb43fd1dc0f282958d0a01c337d72a0324c0262b58d93615', 5, 16, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934610, 100, 1, '2019-06-03 16:36:53.55062', '2019-06-03 16:36:53.55062', 21474902016, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAASAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAOM+IiAAAAAAoAAAA9AAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAE0N79ktAplSSjovU50IktziuRrJN6xmRkF7fsV+YjK5g8XWPegdWuH8u55zCzZcBzddo8CaiuEWpJMPjMZZICA==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABAAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAOM+IiAAAAAAoAAAA9AAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAARAAAAEQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA0GIoNgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABIAAAARAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAADQYig2AAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAASAAAAEQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA0GIoNgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABIAAAASAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAADelgpYAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABAAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAOM+IiAAAAAAoAAAA9AAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAi7LJcAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAACVAvkAAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcplcAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpj4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{E0N79ktAplSSjovU50IktziuRrJN6xmRkF7fsV+YjK5g8XWPegdWuH8u55zCzZcBzddo8CaiuEWpJMPjMZZICA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('5d37d98f720dfb3dce49331f403bfa3f9ef13122fae954a73b7b688b180b1516', 5, 17, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934611, 100, 1, '2019-06-03 16:36:53.550747', '2019-06-03 16:36:53.550747', 21474906112, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAATAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAL39Y+AAAAAAoAAAAzAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAXUhb5QTAO+vV5kTEQqOp9yi4sDerjU5vIT5VH3MiOG381zIplmafJjLNHS02enkonOHtHWIvqznVQjHqQ389DQ==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABEAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAL39Y+AAAAAAoAAAAzAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAASAAAAEgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA3pYKWAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABMAAAASAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAADelgpYAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAATAAAAEgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA3pYKWAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABMAAAATAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAADqdeCWAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABEAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAL39Y+AAAAAAoAAAAzAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAlQL5AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAACeUyiQAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpj4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpiUAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{XUhb5QTAO+vV5kTEQqOp9yi4sDerjU5vIT5VH3MiOG381zIplmafJjLNHS02enkonOHtHWIvqznVQjHqQ389DQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('a3d82c4ac237e77f385f3cdf5a358cabc4b0c12b7f58b59c197fdba8a76010cf', 5, 18, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934612, 100, 1, '2019-06-03 16:36:53.550878', '2019-06-03 16:36:53.550878', 21474910208, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAUAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJi8paAAAAAAoAAAApAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAiJwFcozA9Q4Vj/tABAkphbvOi6Hs325bHDBpTi6J/LN3SVHGsYQ2UwD1recgYoYtoWD1+qkKdFMSzeuIZodJDQ==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABIAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJi8paAAAAAAoAAAApAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAATAAAAEwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA6nXglgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABQAAAATAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAADqdeCWAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAUAAAAEwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA6nXglgAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABQAAAAUAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAD0AarwAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABIAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJi8paAAAAAAoAAAApAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAnlMokAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAACno1ggAAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpiUAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpgwAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{iJwFcozA9Q4Vj/tABAkphbvOi6Hs325bHDBpTi6J/LN3SVHGsYQ2UwD1recgYoYtoWD1+qkKdFMSzeuIZodJDQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('e09337eedf136665192e840b23bf26b86fc85b93bb401d3a1ce4ee2a1b579213', 5, 19, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934613, 100, 1, '2019-06-03 16:36:53.551056', '2019-06-03 16:36:53.551056', 21474914304, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAVAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAHN752AAX14QkSejmcAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAEhl1VhzJ53lV9jnMsTC9/D5/tr0jaWCgSc0KCmdSqlqbQ/kDEgvT+jfSLDuQ6gM9GJCSfoFXT4preQ0mpLvCCQ==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAHN751/gX14QkSejmcAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAUAAAAFAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA9AGq8AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABUAAAAUAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAD0AarwAAAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAVAAAAFAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA9AGq8AAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABUAAAAVAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAD7OWll/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAHN751/gX14QkSejmcAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAp6NYIAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAACw84ev8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpgwAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpfMAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{Ehl1VhzJ53lV9jnMsTC9/D5/tr0jaWCgSc0KCmdSqlqbQ/kDEgvT+jfSLDuQ6gM9GJCSfoFXT4preQ0mpLvCCQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f140ddf0c75f70ddf0d79391e6b5992b9c56b9c23c040008b908c70a413eb03d', 5, 20, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934614, 100, 1, '2019-06-03 16:36:53.551177', '2019-06-03 16:36:53.551177', 21474918400, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAWAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAE47KSAAAAAAoAAAAVAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAW7ujBoctNRfa1M6+T0tShj0Q+l9ybp9C6jQmrSEUeBSwAqucU1YAMlc3XzqIBy35EsuVN0k0hD81/rrCNCtICg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABQAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAE47KSAAAAAAoAAAAVAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAVAAAAFQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA+zlpZf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABYAAAAVAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAD7OWll/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAWAAAAFQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAA+zlpZf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABYAAAAWAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEAHRv3/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABQAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAE47KSAAAAAAoAAAAVAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAsPOHr/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAC6Q7c/8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpfMAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpdoAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{W7ujBoctNRfa1M6+T0tShj0Q+l9ybp9C6jQmrSEUeBSwAqucU1YAMlc3XzqIBy35EsuVN0k0hD81/rrCNCtICg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('5d46530574ecf525512b5184af69899d95a826ec6bbad2e0b2d34b3efa352d7f', 5, 21, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934615, 100, 1, '2019-06-03 16:36:53.551294', '2019-06-03 16:36:53.551294', 21474922496, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAXAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACj6auAAAAAAoAAAALAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAmEz+ciLZWEXIlsEWtrY1Ii1fzoax2dGCE/Fu0GhOyqbw90Dvs+k3aVOmQLTByU5JWjEvd6Op+oV3i+7KPPtxAw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABUAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACj6auAAAAAAoAAAALAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAWAAAAFgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABAB0b9/4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABcAAAAWAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEAHRv3/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAXAAAAFgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABAB0b9/4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABcAAAAXAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAECrMKl/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABUAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACj6auAAAAAAoAAAALAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAukO3P/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAADDk+bP8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpdoAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpcEAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{mEz+ciLZWEXIlsEWtrY1Ii1fzoax2dGCE/Fu0GhOyqbw90Dvs+k3aVOmQLTByU5JWjEvd6Op+oV3i+7KPPtxAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('bc2a16ca82b7d0bd903c26482736cceb9f4efa077071e72849654b3aced94136', 5, 22, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934616, 100, 1, '2019-06-03 16:36:53.55141', '2019-06-03 16:36:53.55141', 21474926592, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAYAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAdzWUAAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAJnrtXGyjkqpAJAFfDY0JyJjXfS9/xXLLHdu3XT20IxpJCBQ2K0fhYnVis0tnbacC9/vTcmLnWxKg1oGCR9usBA==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABYAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAdzWUAAAAAAUAAAABAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAXAAAAFwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABAqzCpf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABgAAAAXAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAECrMKl/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAYAAAAFwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABAqzCpf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABgAAAAYAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEDI/g5/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABYAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAdzWUAAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAw5Pmz/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAADM5BZf8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpcEAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpagAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{JnrtXGyjkqpAJAFfDY0JyJjXfS9/xXLLHdu3XT20IxpJCBQ2K0fhYnVis0tnbacC9/vTcmLnWxKg1oGCR9usBA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('a0bdbdb1aa35b7f2aec201b618fca59405e4c375f8f76a24ef25e885a96fd7ed', 5, 23, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934617, 100, 1, '2019-06-03 16:36:53.55153', '2019-06-03 16:36:53.55153', 21474930688, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAZAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXv6x8AAAAAAUAAAAzAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAGqxC/cid99JKEBv6Y7vmkU1u+UQ+SwDxHIjLeMmmrt5Uv2TCs6Ct4tokvwjlGsbBo1scU8nQmwuXui8bfNGTAA==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABcAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXv6x8AAAAAAUAAAAzAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAYAAAAGAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABAyP4Of4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABkAAAAYAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEDI/g5/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAZAAAAGAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABAyP4Of4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABkAAAAZAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEa46S1/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABcAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAXv6x8AAAAAAUAAAAzAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAAzOQWX/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAADWNEXv8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpagAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpY8AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GqxC/cid99JKEBv6Y7vmkU1u+UQ+SwDxHIjLeMmmrt5Uv2TCs6Ct4tokvwjlGsbBo1scU8nQmwuXui8bfNGTAA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('9b90554626c9bfa396b4f61cc910d383a38f1223c8f5478edde6fe60a7f2f406', 5, 24, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934618, 100, 1, '2019-06-03 16:36:53.551655', '2019-06-03 16:36:53.551655', 21474934784, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAaAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAVa6CYAAAAAAUAAAAuAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABATU8XW0HLVKABibMcV0H3VxUkGh/dQhUcM0eFCkFzVgeXmY9g1V/MnP9DsNs1aipuJVlAGS0B88gxbmoQ5h6rDA==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABgAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAVa6CYAAAAAAUAAAAuAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAZAAAAGQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABGuOktf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABoAAAAZAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEa46S1/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAaAAAAGQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABGuOktf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABoAAAAaAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEwT0VN/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABgAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAVa6CYAAAAAAUAAAAuAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAA1jRF7/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAADfhHV/8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpY8AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpXYAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{TU8XW0HLVKABibMcV0H3VxUkGh/dQhUcM0eFCkFzVgeXmY9g1V/MnP9DsNs1aipuJVlAGS0B88gxbmoQ5h6rDA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('0e17e87fcda53937d77cbf1e2658fcdf41eb0689e9649545bb14a5960832e5b8', 5, 25, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934619, 100, 1, '2019-06-03 16:36:53.551786', '2019-06-03 16:36:53.551786', 21474938880, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAbAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAATF5S0AAAAAAUAAAApAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABALhl41aevL0eWZT/dx9jwFRVb7nDeDsjPeuPKK5QCBgWZjBWFwwRXz+gTiHccCvG5W4d93ucAU4xOkbCj1VH9CQ==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABkAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAATF5S0AAAAAAUAAAApAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAaAAAAGgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABME9FTf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABsAAAAaAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAEwT0VN/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAbAAAAGgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABME9FTf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABsAAAAbAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFDZtoB/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABkAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAATF5S0AAAAAAUAAAApAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAA34R1f/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAADo1KUP8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpXYAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpV0AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{Lhl41aevL0eWZT/dx9jwFRVb7nDeDsjPeuPKK5QCBgWZjBWFwwRXz+gTiHccCvG5W4d93ucAU4xOkbCj1VH9CQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f277e4abf7d0d326fa63ee62415f7a117e43453072677d1f6e9618c8d2bb8524', 5, 26, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934620, 100, 1, '2019-06-03 16:36:53.551905', '2019-06-03 16:36:53.551905', 21474942976, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAcAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQw4jQAAAAAAUAAAAkAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAxjfuAsXsrTxv+5NVYnsb0soqC6ZoluT/Xobjrt45eAeNZMwp9/RV2hLXySkVOVk2O814/dgyeap7M+LgWibPBg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABoAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQw4jQAAAAAAUAAAAkAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAbAAAAGwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABQ2baAf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABwAAAAbAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFDZtoB/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAcAAAAGwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABQ2baAf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAABwAAAAcAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFUKmLR/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABoAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAQw4jQAAAAAAUAAAAkAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAA6NSlD/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAADyJNSf8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpV0AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpUQAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{xjfuAsXsrTxv+5NVYnsb0soqC6ZoluT/Xobjrt45eAeNZMwp9/RV2hLXySkVOVk2O814/dgyeap7M+LgWibPBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('5e3622bf6dab1276155014b8387f261a0bbfbef247caa05e9c4be8c890dad958', 5, 27, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934621, 100, 1, '2019-06-03 16:36:53.552027', '2019-06-03 16:36:53.552028', 21474947072, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAdAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAOb3zsAAAAAAUAAAAfAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAcFijipV/lZRIDYicNpHFwnaL4J0Fmwkcr0G9VxH4lZSYgLjgQnvgniCBQrvu2eqyqOFHC8H04T7D9jXseYr4Cg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABsAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAOb3zsAAAAAAUAAAAfAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAcAAAAHAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABVCpi0f4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAB0AAAAcAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFUKmLR/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAdAAAAHAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABVCpi0f4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAB0AAAAdAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFimd+9/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABsAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAOb3zsAAAAAAUAAAAfAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAA8iTUn/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAD7dQQv8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpUQAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpSsAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{cFijipV/lZRIDYicNpHFwnaL4J0Fmwkcr0G9VxH4lZSYgLjgQnvgniCBQrvu2eqyqOFHC8H04T7D9jXseYr4Cg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('b00c83ae8f3d0cd4f1760517182abdf0440eca6efcd2b0fa893aac85b35e42cb', 5, 28, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934622, 100, 1, '2019-06-03 16:36:53.552154', '2019-06-03 16:36:53.552154', 21474951168, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAeAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAMG3EIAAAAAAUAAAAaAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAbHyKtzQE0yWfACwWf+1pYV3POGcAKxlNttLK4B5LmX34VwUIGjWHqKIiw/aDtsaIqBJI62bfkYn6KiMWiRnlAg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABwAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAMG3EIAAAAAAUAAAAaAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAdAAAAHQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABYpnfvf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAB4AAAAdAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFimd+9/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAeAAAAHQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABYpnfvf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAB4AAAAeAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFutVDF/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAABwAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAMG3EIAAAAAAUAAAAaAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAAA+3UEL/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAEExTO/8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpSsAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpRIAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{bHyKtzQE0yWfACwWf+1pYV3POGcAKxlNttLK4B5LmX34VwUIGjWHqKIiw/aDtsaIqBJI62bfkYn6KiMWiRnlAg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('3f731b66c1a3d2c4cf9d15bb17e910beaa6f6fa6a77cccfd62f5eabcd3ecfcc5', 5, 29, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934623, 100, 1, '2019-06-03 16:36:53.55227', '2019-06-03 16:36:53.55227', 21474955264, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAfAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJx2UkAAAAAAUAAAAVAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAkkZq5sVwc5pr6NYfqlSYkQevr273ibhO9EwVykO2mQ4+ka+BrQj++wfcsuJFbGaeE6NtzQxTf7XQaGZpwjk5Cw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAB0AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJx2UkAAAAAAUAAAAVAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAeAAAAHgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABbrVQxf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAB8AAAAeAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAFutVDF/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAfAAAAHgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABbrVQxf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAB8AAAAfAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAF4fLXp/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAB0AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAJx2UkAAAAAAUAAAAVAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAABBMUzv/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAEOFWNP8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpRIAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpPkAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{kkZq5sVwc5pr6NYfqlSYkQevr273ibhO9EwVykO2mQ4+ka+BrQj++wfcsuJFbGaeE6NtzQxTf7XQaGZpwjk5Cw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('492c8c2808bf649ba321f0f75dda11581107bff229ef457340aab8494f5ad412', 5, 30, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934624, 100, 1, '2019-06-03 16:36:53.552434', '2019-06-03 16:36:53.552434', 21474959360, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAgAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAHc1lAAAAAAAUAAAAQAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAGoxQs3i+aE6OAegBkTmA0dqEadD541CFUYMVQ1aCii5ioLMaP6i5oSZ5+4c0VfY2MAPmpxdNCOY3vwH4XD8yCw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAB4AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAHc1lAAAAAAAUAAAAQAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAfAAAAHwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABeHy16f4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACAAAAAfAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAF4fLXp/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAgAAAAHwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABeHy16f4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACAAAAAgAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAF/8A8p/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAB4AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAHc1lAAAAAAAUAAAAQAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAABDhVjT/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAEXZZLf8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpPkAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpOAAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GoxQs3i+aE6OAegBkTmA0dqEadD541CFUYMVQ1aCii5ioLMaP6i5oSZ5+4c0VfY2MAPmpxdNCOY3vwH4XD8yCw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('c03dfbea35606bd565f3609a306aa27a82aa14b3fd142f1a13b79c1871f54a3b', 5, 31, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934625, 100, 1, '2019-06-03 16:36:53.552553', '2019-06-03 16:36:53.552553', 21474963456, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAhAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAFH01cAAAAAAUAAAALAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAlTGl5Ll7WR6ooHo4TPTHiPsPhYQEcPuFd4lby43niifsCCnLkZfzoZYxODmAHHv/RXkskBH7eRkxCZYBRXRQBA==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAB8AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAFH01cAAAAAAUAAAALAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAgAAAAIAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABf/APKf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACEAAAAgAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAF/8A8p/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAhAAAAIAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABf/APKf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACEAAAAhAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAGFD1yF/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAAB8AAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAFH01cAAAAAAUAAAALAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAABF2WS3/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAEgtcJv8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpOAAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpMcAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{lTGl5Ll7WR6ooHo4TPTHiPsPhYQEcPuFd4lby43niifsCCnLkZfzoZYxODmAHHv/RXkskBH7eRkxCZYBRXRQBA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('42e47f8fdcb738c844e1556c9fad18eb8887d78681ef5e9616898eb6e1c5e8eb', 5, 32, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934626, 100, 1, '2019-06-03 16:36:53.55267', '2019-06-03 16:36:53.55267', 21474967552, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAiAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACy0F4AAAAAAUAAAAGAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABAaSoEc/Kxao3Z6gUsTh1QfLjlT486TQKgtu9NhqT8EzSQ2jFCWgP+odJUnTIPRU74DOgqwEgcHBGpovaass24Dw==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAACAAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACy0F4AAAAAAUAAAAGAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAhAAAAIQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABhQ9chf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACIAAAAhAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAGFD1yF/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAiAAAAIQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABhQ9chf4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACIAAAAiAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAGH2p39/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAACAAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACy0F4AAAAAAUAAAAGAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAABILXCb/AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAEqBfH/8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpMcAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpK4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{aSoEc/Kxao3Z6gUsTh1QfLjlT486TQKgtu9NhqT8EzSQ2jFCWgP+odJUnTIPRU74DOgqwEgcHBGpovaass24Dw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('ee96865dfca78c43c4074317f3dbcd7ca978643b973bc9a5dc4f2588f981c6d7', 5, 33, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934627, 100, 1, '2019-06-03 16:36:53.552789', '2019-06-03 16:36:53.552789', 21474971648, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAjAAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAstBeAAAAAAoAAAADAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABA2FwoenXJVOTi9oyWHyNL+0wLRdikDwB4qdNJmj+OQi8a0jRgjQG/1/EsSq885q7mUvX57XCjUGH+rf70B+CFAg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAACEAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAstBeAAAAAAoAAAADAAAAAAAAAAAAAAAA', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAiAAAAIgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABh9qd/f4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACMAAAAiAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAGH2p39/gAAAAAAAAAAAAAAAQAAAAUAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKSVAAAAAIAAAAjAAAAIgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAABh9qd/f4AAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAACMAAAAjAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAGIjW5b/gAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAAAAACEAAAAAAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAstBeAAAAAAoAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAVVTRAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAALpDt0AH//////////AAAAAQAAAAEAAABKgXx//AAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAf/////////8AAAABAAAAAQAAAEzViGP8AAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpK4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcpJUAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{2FwoenXJVOTi9oyWHyNL+0wLRdikDwB4qdNJmj+OQi8a0jRgjQG/1/EsSq885q7mUvX57XCjUGH+rf70B+CFAg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('ea945436a3b650efa88063e737518cf1928d9a43d1aba3ec684704f160b3733e', 4, 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934593, 100, 1, '2019-06-03 16:36:53.587743', '2019-06-03 16:36:53.587743', 17179873280, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAAAAAAH5kC3vAAAAQH/ZkzR/eC0F7xP9zApeHvMH7nqetzaSdYh8WHyrwwvbEnx4Db6gz0grnRJBJS66OZbGmCk7yzHm8DkJ7bJ4QAU=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{f9mTNH94LQXvE/3MCl4e8wfuep63NpJ1iHxYfKvDC9sSfHgNvqDPSCudEkElLro5lsaYKTvLMebwOQntsnhABQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('416a63c3f1491537698cdb6f981097ed8e44ca27d2d9006bd0ba68832ebf9d55', 4, 2, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934594, 100, 1, '2019-06-03 16:36:53.587892', '2019-06-03 16:36:53.587892', 17179877376, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAAAAAAH5kC3vAAAAQFFGLGFFXbEDRdk2eFyQATNpHuqO/sFrpqsxmNNwGa+MLibNQJLDXWafC4W8KMKQ/hE0M0TLxZeu/O8tYnBuwwA=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{UUYsYUVdsQNF2TZ4XJABM2ke6o7+wWumqzGY03AZr4wuJs1AksNdZp8LhbwowpD+ETQzRMvFl6787y1icG7DAA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('c29948d1ca87bad2e3299c1b018c996c22ff5d56f5753bc38f0fd88c4d2c5d94', 4, 3, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934595, 100, 1, '2019-06-03 16:36:53.588021', '2019-06-03 16:36:53.588022', 17179881472, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAAAAAAH5kC3vAAAAQLn0NeCsam5YrmtsMJQVOLyOTPqDb7SMTCZGofm5ShU6fcl3PPieInQNtk1FmRVeUxdYX1rsW2KH1HQbJ644Hw0=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+M4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+LUAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{ufQ14Kxqbliua2wwlBU4vI5M+oNvtIxMJkah+blKFTp9yXc8+J4idA22TUWZFV5TF1hfWuxbYofUdBsnrjgfDQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('554ea22913ebf01fc4b3a4d60b59ae28f379b800d5b6da40a6987a53ebd87f07', 4, 4, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934596, 100, 1, '2019-06-03 16:36:53.588169', '2019-06-03 16:36:53.588169', 17179885568, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAukO3QAAAAAAAAAAAH5kC3vAAAAQF34mYyRLbVT42QtFuY5UN0sr9EcuE3ltA/9yAxiNOvukbVTOaz86uCXpEZlX1FnExYDZwOZJWVXfsbdovbVUwc=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvicAAAAAIAAAAEAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAC6Q7dAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+LUAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+JwAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{XfiZjJEttVPjZC0W5jlQ3Syv0Ry4TeW0D/3IDGI06+6RtVM5rPzq4JekRmVfUWcTFgNnA5klZVd+xt2i9tVTBw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:36:53.605428', '2019-06-03 16:36:53.605428', 12884905984, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKfOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKfOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp84AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp84AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcqAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp+cAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{H2SYpbare/tB/Lw8x6QRvVNMjmLGqQjQGiBes63uA7XrZBuSHZ1JNR94Oi9zQ8Bp+ENfG2FUCWwu6OUGbKMEBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('811192c38643df73c015a5a1d77b802dff05d4f50fc6d10816aa75c0a6109f9a', 3, 2, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 8589934593, 100, 1, '2019-06-03 16:36:53.605654', '2019-06-03 16:36:53.605654', 12884910080, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAFvFIhaAAAAQPlg7GLhJg0x7jpAw1Ew6H2XF6yRImfJIwFfx09Nui5btOJAFewFANfOaAB8FQZl5p3A5g3k6DHDigfUNUD16gc=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAN+EdXOAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAN+EdXOAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1c4AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1c4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1gAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1ecAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{+WDsYuEmDTHuOkDDUTDofZcXrJEiZ8kjAV/HT026Llu04kAV7AUA185oAHwVBmXmncDmDeToMcOKB9Q1QPXqBw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('7df857c23c7dfeb974d7c3956775685a8edfa8496bb781fd346c8e2025fad9bf', 3, 3, 'GBXGQJWVLWOYHFLVTKWV5FGHA3LNYY2JQKM7OAJAUEQFU6LPCSEFVXON', 8589934594, 100, 1, '2019-06-03 16:36:53.605788', '2019-06-03 16:36:53.605788', 12884914176, 'AAAAAG5oJtVdnYOVdZqtXpTHBtbcY0mCmfcBIKEgWnlvFIhaAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAFvFIhaAAAAQBH/ML6+RzWquFPh8gLF2RuZzYtjjpPeHv/od9M74xlU09Xa4a5e1NhMtMSRIoLItg1EaDWE9zvtHflVWIAaSwQ=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAN+EdXOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAN+EdXOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1c4AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1c4AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1ecAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1c4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{Ef8wvr5HNaq4U+HyAsXZG5nNi2OOk94e/+h30zvjGVTT1drhrl7U2Ey0xJEigsi2DURoNYT3O+0d+VVYgBpLBA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('3476bc649563488cf025d82790aa9c44649188232b150d2864d13fe9face5406', 3, 4, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934594, 100, 1, '2019-06-03 16:36:53.60592', '2019-06-03 16:36:53.60592', 12884918272, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABQlRDAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQEKBv+8zL1epwxC+sJhEYPmbjL9XScXtctoMIdet5dhgk7YJVJzAnRSgYTvfyoIJKJdQmX66uh2o+rG9K6JImgY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKfOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKfOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp84AAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp84AAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFCVEMAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp+cAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcp84AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{QoG/7zMvV6nDEL6wmERg+ZuMv1dJxe1y2gwh163l2GCTtglUnMCdFKBhO9/Kggkol1CZfrq6Haj6sb0rokiaBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('db398eb4ae89756325643cad21c94e13bfc074b323ee83e141bf701a5d904f1b', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:36:53.620351', '2019-06-03 16:36:53.620351', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAACVAvkAAAAAAAAAAABVvwF9wAAAEAYjQcPT2G5hqnBmgGGeg9J8l4c1EnUlxklElH9sqZr0971F6OLWfe/m4kpFtI+sI0i1qLit5A0JyWnbhYLW5oD', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GI0HD09huYapwZoBhnoPSfJeHNRJ1JcZJRJR/bKma9Pe9Reji1n3v5uJKRbSPrCNItai4reQNCclp24WC1uaAw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('5cd7e1d317153a8d739c0f6d6861e1dc1ab5c264e3e8d4caab6aae3fc949326c', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:36:53.620693', '2019-06-03 16:36:53.620693', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAkYTnKgAAAAAAAAAAABVvwF9wAAAECHm7ok7sq0fJE4UYerrvzdtJgwKw3iHGQ2D43YeWAE+/Jjbwa2pVllbwPb5KeNomP/gXau9K9503k0yiId/HMC', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3grZkE5XrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAACRhOcqAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{h5u6JO7KtHyROFGHq6783bSYMCsN4hxkNg+N2HlgBPvyY28GtqVZZW8D2+SnjaJj/4F2rvSvedN5NMoiHfxzAg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('f7cb8309318368f694c8830bf789841e7e2c46dce30e60969d88bd0ce588cbe9', 2, 3, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 3, 100, 1, '2019-06-03 16:36:53.620896', '2019-06-03 16:36:53.620896', 8589946880, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAbmgm1V2dg5V1mq1elMcG1txjSYKZ9wEgoSBaeW8UiFoAAAAN+EdYAAAAAAAAAAABVvwF9wAAAEAQAaCgnhAHvWviyyciJH3kp9yoTQtn2SFjbCqLUUPBKzcRt8huITE9etfxlEBrW4iiJkrgyQeOCq/IGbGe2RAA', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3grZkE5XrUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3grYsMniLUAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABuaCbVXZ2DlXWarV6UxwbW3GNJgpn3ASChIFp5bxSIWgAAAA34R1gAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/7UAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{EAGgoJ4QB71r4ssnIiR95KfcqE0LZ9khY2wqi1FDwSs3EbfIbiExPXrX8ZRAa1uIoiZK4MkHjgqvyBmxntkQAA==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/order_books_310.rb b/services/horizon/internal/test/scenarios/order_books_310.rb deleted file mode 100644 index fa3acd8409..0000000000 --- a/services/horizon/internal/test/scenarios/order_books_310.rb +++ /dev/null @@ -1,66 +0,0 @@ -# This scenario attempts to emulate the scenario that gave rise to https://github.com/stellar/horizon/issues/310 - -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :usd_gateway -create_account :scott, :master, "1000000.0" -create_account :andrew, :master, "6000.0" - -close_ledger - -trust :scott, :usd_gateway, "USD" -trust :andrew, :usd_gateway, "USD" - -trust :scott, :usd_gateway, "BTC" -trust :andrew, :usd_gateway, "BTC" - -close_ledger - -payment :usd_gateway, :scott, ["USD", :usd_gateway, "5000.0"] -payment :usd_gateway, :andrew, ["USD", :usd_gateway, "5000.0"] - -payment :usd_gateway, :scott, ["BTC", :usd_gateway, "5000.0"] -payment :usd_gateway, :andrew, ["BTC", :usd_gateway, "5000.0"] - -close_ledger - - -# polate an order book with more than 20 price levels, inserted into the db out -# of order. -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "10.0" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "9.0" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "8.0" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "7.0" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "6.0" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "5.0" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "4.0" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "3.0" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "2.0" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "1.0" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "0.1" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "10.1" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "9.1" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "8.1" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "7.1" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "6.1" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "5.1" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "4.1" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "3.1" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "2.1" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "1.1" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "0.2" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "10.2" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "9.2" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "8.2" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "7.2" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "6.2" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "5.2" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "4.2" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "3.2" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "2.2" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "1.2" -offer :scott, {buy:["USD", :usd_gateway], with: :native}, "1000", "0.3" - -close_ledger diff --git a/services/horizon/internal/test/scenarios/pathed_payment-horizon.sql b/services/horizon/internal/test/scenarios/pathed_payment-horizon.sql index 577ba4e6b1..f1466021ee 100644 --- a/services/horizon/internal/test/scenarios/pathed_payment-horizon.sql +++ b/services/horizon/internal/test/scenarios/pathed_payment-horizon.sql @@ -1082,6 +1082,9 @@ CREATE TABLE accounts_signers ( -- we will query by signer so that is why signer is the first item in the composite key PRIMARY KEY (signer, account) ); +ALTER TABLE history_transactions ADD account_muxed varchar(69) NULL, ADD fee_account_muxed varchar(69) NULL; +ALTER TABLE history_operations ADD source_account_muxed varchar(69) NULL; +ALTER TABLE history_effects ADD address_muxed varchar(69) NULL; -- -- PostgreSQL database dump complete diff --git a/services/horizon/internal/test/scenarios/paths_strict_send-horizon.sql b/services/horizon/internal/test/scenarios/paths_strict_send-horizon.sql index 5cb2ce3a63..4fab92edf5 100644 --- a/services/horizon/internal/test/scenarios/paths_strict_send-horizon.sql +++ b/services/horizon/internal/test/scenarios/paths_strict_send-horizon.sql @@ -1205,6 +1205,10 @@ ALTER TABLE ONLY history_trades ALTER TABLE ONLY history_trades ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); +-- added manually +ALTER TABLE history_transactions ADD account_muxed varchar(69) NULL, ADD fee_account_muxed varchar(69) NULL; +ALTER TABLE history_operations ADD source_account_muxed varchar(69) NULL; +ALTER TABLE history_effects ADD address_muxed varchar(69) NULL; -- -- PostgreSQL database dump complete diff --git a/services/horizon/internal/test/scenarios/self_send-core.sql b/services/horizon/internal/test/scenarios/self_send-core.sql deleted file mode 100644 index 9f2651d59f..0000000000 --- a/services/horizon/internal/test/scenarios/self_send-core.sql +++ /dev/null @@ -1,720 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999998999999900, 1, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 999999900, 8589934593, 0, NULL, '', 'AQAAAA==', 0, 3, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('70565cbcdb07a3474afb0bd50cc9f53749a6ab054bcff38aebf4b1a60666cea6', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 'd5bb5a59cee67f47da99b43c3d333751d3c837187428e58c895af0168d027e06', 2, 1559579758, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZoHUUqPO1SoXWBQWiQne6+AHcM0CVKtgN/zEmvaDE04AAAAAAXPVMbgAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAEtgyinnIssW5tBeb2/tNZBp1rtCbIvdoa9kC/D9mgLzVu1pZzuZ/R9qZtDw9MzdR08g3GHQo5YyJWvAWjQJ+BgAAAAIN4Lazp2QAAAAAAAAAAABkAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('33e885d6f88e211eb098dbc05d4cf3a56c92f85633f0a51e7b18db33f5d58e34', '70565cbcdb07a3474afb0bd50cc9f53749a6ab054bcff38aebf4b1a60666cea6', '871d0618eb26d195e9f6c03329153d820c025accdc1ea86c4481238105bf6c76', 3, 1559579759, 'AAAAC3BWXLzbB6NHSvsL1QzJ9TdJpqsFS8/ziuv0saYGZs6m67Pfjw+EK4OMXU8wMlooxUujkIpFifCoolBzZKzu68EAAAAAXPVMbwAAAAAAAAAAHwHNsmRY+V05R8QcxzL6y8Pg5b8K5XPCts8of63QFDqHHQYY6ybRlen2wDMpFT2CDAJazNweqGxEgSOBBb9sdgAAAAMN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GA7ZTOPBS3ILDIN6XCF3EZSCK3JKVZHYIXSX2TAO2SS7BGQXK7FTLKU2', 2, 'AAAAAD+ZueGW0LGhvriLsmZCVtKq5PhF5X1MDtSl8JoXV8s1AAAAAAAAAAIAAAACAAAAAQAAAEigdRSo87VKhdYFBaJCd7r4AdwzQJUq2A3/MSa9oMTTgAAAAABc9UxuAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABnxczizktiNDJL1qrLgjTzrZfMnOs8iiYtGOCdLYciKoAAABAeejjtunl4apezMjsTkEWZFzR+HFBDRnDrsfXBfqKPNZdd+s+VaoXkXI0RAuQP9wFTYmyihopOHHUQPt07Qc6BA=='); -INSERT INTO scphistory VALUES ('GA7ZTOPBS3ILDIN6XCF3EZSCK3JKVZHYIXSX2TAO2SS7BGQXK7FTLKU2', 3, 'AAAAAD+ZueGW0LGhvriLsmZCVtKq5PhF5X1MDtSl8JoXV8s1AAAAAAAAAAMAAAACAAAAAQAAADDrs9+PD4Qrg4xdTzAyWijFS6OQikWJ8KiiUHNkrO7rwQAAAABc9UxvAAAAAAAAAAAAAAABnxczizktiNDJL1qrLgjTzrZfMnOs8iiYtGOCdLYciKoAAABASH4EdJQHmUuyJ4qXmp9dcuuJI+O+iWi5k7QLRi7oKQ2r7BX5ewHonGVyjThilb7IZ+H0Mqp9usrHpLRHfdSyDw=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('9f17338b392d88d0c92f5aab2e08d3ceb65f3273acf22898b4638274b61c88aa', 3, 'AAAAAQAAAAEAAAAAP5m54ZbQsaG+uIuyZkJW0qrk+EXlfUwO1KXwmhdXyzUAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastclosedledger ', '33e885d6f88e211eb098dbc05d4cf3a56c92f85633f0a51e7b18db33f5d58e34'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 3, - "currentBuckets": [ - { - "curr": "2417841b07c327a508fe84df58c8f4ab063c47fa3ffee8008510840863c439b5", - "next": { - "state": 0 - }, - "snap": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 1, - "output": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAAA/mbnhltCxob64i7JmQlbSquT4ReV9TA7UpfCaF1fLNQAAAAAAAAADAAAAA58XM4s5LYjQyS9aqy4I0862XzJzrPIomLRjgnS2HIiqAAAAAQAAAJjrs9+PD4Qrg4xdTzAyWijFS6OQikWJ8KiiUHNkrO7rwQAAAABc9UxvAAAAAAAAAAEAAAAAP5m54ZbQsaG+uIuyZkJW0qrk+EXlfUwO1KXwmhdXyzUAAABAzUjGJrO9EV0Lr0qZUhdS4tXPMGIpSehcpD4W9qMcU5msroTr6RgMEdFSvJe9faiwW7AsM3DUxymL8aNnZF/JAQAAAAEAAACY67Pfjw+EK4OMXU8wMlooxUujkIpFifCoolBzZKzu68EAAAAAXPVMbwAAAAAAAAABAAAAAD+ZueGW0LGhvriLsmZCVtKq5PhF5X1MDtSl8JoXV8s1AAAAQM1IxiazvRFdC69KmVIXUuLVzzBiKUnoXKQ+FvajHFOZrK6E6+kYDBHRUryXvX2osFuwLDNw1Mcpi/GjZ2RfyQEAAABACff5DfQ8vNsGNbVuqfcEOJEttdap3b8idgpe6fpFjPNsRbSd1w2UmVCmDqTw4UrJd4H3SyHg1AOaNN4ejYp3DAAAAAA/mbnhltCxob64i7JmQlbSquT4ReV9TA7UpfCaF1fLNQAAAAAAAAADAAAAAgAAAAEAAAAw67Pfjw+EK4OMXU8wMlooxUujkIpFifCoolBzZKzu68EAAAAAXPVMbwAAAAAAAAAAAAAAAZ8XM4s5LYjQyS9aqy4I0862XzJzrPIomLRjgnS2HIiqAAAAQEh+BHSUB5lLsieKl5qfXXLriSPjvolouZO0C0Yu6CkNq+wV+XsB6Jxlco04YpW+yGfh9DKqfbrKx6S0R33Usg8AAAABcFZcvNsHo0dK+wvVDMn1N0mmqwVLz/OK6/SxpgZmzqYAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAAAL68IAAAAAAAAAAAa7kvkwAAABAsWrm6a8GQsiVWFe3lswEI88Cq56ij2ztlHnqIiRwWhNBR1YMXHlNwcuICXzJ+2Sux6LQpjpLabuwDUWhHWIZAAAAAAEAAAABAAAAAQAAAAA/mbnhltCxob64i7JmQlbSquT4ReV9TA7UpfCaF1fLNQAAAAA='); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('2374e99349b9ef7dba9a5db3339b78fda8f34777b1af33ba468ad5c0df946d4d', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('f5971def3ff08c05ce222e7d71bf43703bb98ea1f776ea73085265d35dfd42ab', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('2374e99349b9ef7dba9a5db3339b78fda8f34777b1af33ba468ad5c0df946d4d', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rKAAAAAAAAAAABVvwF9wAAAECDzqvkQBQoNAJifPRXDoLhvtycT3lFPCQ51gkdsFHaBNWw05S/VhW0Xgkr0CBPE4NaFV2Kmcs3ZwLmib4TRrML', 'I3Tpk0m57326ml2zM5t4/ajzR3exrzO6RorVwN+UbU0AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrNryTWcAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('f5971def3ff08c05ce222e7d71bf43703bb98ea1f776ea73085265d35dfd42ab', 3, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAAAL68IAAAAAAAAAAAa7kvkwAAABAsWrm6a8GQsiVWFe3lswEI88Cq56ij2ztlHnqIiRwWhNBR1YMXHlNwcuICXzJ+2Sux6LQpjpLabuwDUWhHWIZAA==', '9Zcd7z/wjAXOIi59cb9DcDu5jqH3dupzCFJl0139QqsAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA=='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/self_send-horizon.sql b/services/horizon/internal/test/scenarios/self_send-horizon.sql deleted file mode 100644 index ef67368ac9..0000000000 --- a/services/horizon/internal/test/scenarios/self_send-horizon.sql +++ /dev/null @@ -1,944 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 2, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 1, false); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 12884905985, 1, 2, '{"amount": "5.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 12884905985, 2, 3, '{"amount": "5.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589938689, 1, 0, '{"starting_balance": "100.0000000"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 2, 3, '{"amount": "100.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589938689, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (3, '33e885d6f88e211eb098dbc05d4cf3a56c92f85633f0a51e7b18db33f5d58e34', '70565cbcdb07a3474afb0bd50cc9f53749a6ab054bcff38aebf4b1a60666cea6', 1, 1, '2019-06-03 16:35:59', '2019-06-03 16:36:01.088232', '2019-06-03 16:36:01.088232', 12884901888, 16, 1000000000000000000, 200, 100, 100000000, 1000000, 11, 'AAAAC3BWXLzbB6NHSvsL1QzJ9TdJpqsFS8/ziuv0saYGZs6m67Pfjw+EK4OMXU8wMlooxUujkIpFifCoolBzZKzu68EAAAAAXPVMbwAAAAAAAAAAHwHNsmRY+V05R8QcxzL6y8Pg5b8K5XPCts8of63QFDqHHQYY6ybRlen2wDMpFT2CDAJazNweqGxEgSOBBb9sdgAAAAMN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (2, '70565cbcdb07a3474afb0bd50cc9f53749a6ab054bcff38aebf4b1a60666cea6', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 1, 1, '2019-06-03 16:35:58', '2019-06-03 16:36:01.111029', '2019-06-03 16:36:01.111029', 8589934592, 16, 1000000000000000000, 100, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZoHUUqPO1SoXWBQWiQne6+AHcM0CVKtgN/zEmvaDE04AAAAAAXPVMbgAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAEtgyinnIssW5tBeb2/tNZBp1rtCbIvdoa9kC/D9mgLzVu1pZzuZ/R9qZtDw9MzdR08g3GHQo5YyJWvAWjQJ+BgAAAAIN4Lazp2QAAAAAAAAAAABkAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:36:01.122637', '2019-06-03 16:36:01.122637', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 12884905985, 1); -INSERT INTO history_operation_participants VALUES (2, 8589938689, 2); -INSERT INTO history_operation_participants VALUES (3, 8589938689, 1); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 3, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 1, '{"to": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "from": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "amount": "5.0000000", "asset_type": "native"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "100.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 12884905984, 1); -INSERT INTO history_transaction_participants VALUES (2, 8589938688, 2); -INSERT INTO history_transaction_participants VALUES (3, 8589938688, 1); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 3, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('f5971def3ff08c05ce222e7d71bf43703bb98ea1f776ea73085265d35dfd42ab', 3, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:36:01.088382', '2019-06-03 16:36:01.088382', 12884905984, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAAAAAAAL68IAAAAAAAAAAAa7kvkwAAABAsWrm6a8GQsiVWFe3lswEI88Cq56ij2ztlHnqIiRwWhNBR1YMXHlNwcuICXzJ+2Sux6LQpjpLabuwDUWhHWIZAA==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{sWrm6a8GQsiVWFe3lswEI88Cq56ij2ztlHnqIiRwWhNBR1YMXHlNwcuICXzJ+2Sux6LQpjpLabuwDUWhHWIZAA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('2374e99349b9ef7dba9a5db3339b78fda8f34777b1af33ba468ad5c0df946d4d', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:36:01.111233', '2019-06-03 16:36:01.111233', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rKAAAAAAAAAAABVvwF9wAAAECDzqvkQBQoNAJifPRXDoLhvtycT3lFPCQ51gkdsFHaBNWw05S/VhW0Xgkr0CBPE4NaFV2Kmcs3ZwLmib4TRrML', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrNryTWcAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{g86r5EAUKDQCYnz0Vw6C4b7cnE95RTwkOdYJHbBR2gTVsNOUv1YVtF4JK9AgTxODWhVdipnLN2cC5om+E0azCw==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/self_send.rb b/services/horizon/internal/test/scenarios/self_send.rb deleted file mode 100644 index 10b945a5c1..0000000000 --- a/services/horizon/internal/test/scenarios/self_send.rb +++ /dev/null @@ -1,11 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :scott, :master, 100 - -close_ledger - -payment :scott, :scott, [:native, 5] - -close_ledger diff --git a/services/horizon/internal/test/scenarios/send_to_issuer-core.sql b/services/horizon/internal/test/scenarios/send_to_issuer-core.sql deleted file mode 100644 index 4a2a164ab0..0000000000 --- a/services/horizon/internal/test/scenarios/send_to_issuer-core.sql +++ /dev/null @@ -1,732 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999997999999800, 2, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 999999900, 8589934593, 0, NULL, '', 'AQAAAA==', 0, 4, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 999999800, 8589934594, 1, NULL, '', 'AQAAAA==', 0, 5, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('06030f6f83683dcf9bdb635640dfe78722024b6039706d79bed7c5e88f0f7900', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '02382d151ef8a21e92b9dd136d32b3278f152e6c0d08489733c81a728ddeb600', 2, 1559579685, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZUJe9O5kAzNzu/6p0ZJoZ88h0TDub3uYslZJ7cSsRWgAAAAAAXPVMJQAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAAnQIKiwQ7y1yg69ER0rE+8ttWxjdS9dphrI7bdn6YS4COC0VHviiHpK53RNtMrMnjxUubA0ISJczyBpyjd62AAAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('2131c46d35ce48cc5530faa1c2cca5dea861afdf073056cb0f1785b3b02ca47a', '06030f6f83683dcf9bdb635640dfe78722024b6039706d79bed7c5e88f0f7900', '31682b891a5753d9a484b2bb1d788a5b7d234494c0aeb32b244e665df02854f3', 3, 1559579686, 'AAAACwYDD2+DaD3Pm9tjVkDf54ciAktgOXBteb7XxeiPD3kAfKighrk3qMITRIlaJ+sPyNXJCUM6ZSdz5viYP7GxwMQAAAAAXPVMJgAAAAAAAAAALLKPbMojH+RR+TSBDKGB/tufH2mL12ccCHr1Jn27yPAxaCuJGldT2aSEsrsdeIpbfSNElMCusyskTmZd8ChU8wAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('195529e1e5ce65ca91d9cb45ceef10cfc890103386c30442388e15dcce669db5', '2131c46d35ce48cc5530faa1c2cca5dea861afdf073056cb0f1785b3b02ca47a', '3e5fae333daee3c0694efa83bb9b07cb6e50cd1667dab400ab06c654db8e788a', 4, 1559579687, 'AAAACyExxG01zkjMVTD6ocLMpd6oYa/fBzBWyw8XhbOwLKR60f9eDPaaEVCr9QNXUUec3rTFbbhr3LDTVK1g5yQbv7IAAAAAXPVMJwAAAAAAAAAANvoQ5f0h4XOu2zzdNp+2aYFizWM/TiKsCFrgq+HrV6I+X64zPa7jwGlO+oO7mwfLblDNFmfatACrBsZU2454igAAAAQN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('c273671c9103f040ce157a253d39c8c1aa04e4d5e6acc6a23118e3364af540c4', '195529e1e5ce65ca91d9cb45ceef10cfc890103386c30442388e15dcce669db5', '6332ec568a94696ce7d2308992b4d1caab5eec51645898f347a988546782b7dc', 5, 1559579688, 'AAAACxlVKeHlzmXKkdnLRc7vEM/IkBAzhsMEQjiOFdzOZp21qQa11RFfEssatTTOAH9HevAS5aPVlAGmWEZ2ypQMc0gAAAAAXPVMKAAAAAAAAAAAqwSxrFb8etq4gSdxOi9F1KjbMMbBhDJdKXyKRqyFTJtjMuxWipRpbOfSMImStNHKq17sUWRYmPNHqYhUZ4K33AAAAAUN4Lazp2QAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GABOVXDGD2LDZG42HP6XANUBMQXYHPNQR562ST6XPGJDU5KGLKC4GR7Z', 2, 'AAAAAALq3GYeljybmjv9cDaBZC+DvbCPfalP13mSOnVGWoXDAAAAAAAAAAIAAAACAAAAAQAAAEhQl707mQDM3O7/qnRkmhnzyHRMO5ve5iyVkntxKxFaAAAAAABc9UwlAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABjAVAnR2dAsiF8MbFoEL3xlcLge6gJKbQhaUtK/QCiMsAAABA+yjMImaqjTN7gbxEfWYKA2g4AWmrDDQpmigQfJVuwKHoQWayNqsMHMLwicHqWoC+kq3NW1Fcync8txknU2t0Dw=='); -INSERT INTO scphistory VALUES ('GABOVXDGD2LDZG42HP6XANUBMQXYHPNQR562ST6XPGJDU5KGLKC4GR7Z', 3, 'AAAAAALq3GYeljybmjv9cDaBZC+DvbCPfalP13mSOnVGWoXDAAAAAAAAAAMAAAACAAAAAQAAADB8qKCGuTeowhNEiVon6w/I1ckJQzplJ3Pm+Jg/sbHAxAAAAABc9UwmAAAAAAAAAAAAAAABjAVAnR2dAsiF8MbFoEL3xlcLge6gJKbQhaUtK/QCiMsAAABAD74BVEtdOsyybqtq9NdiRy+XnPvybJTNjNhHMC0gjbVQwvJ3LSAPtfYHwV8I/d4VfKGVBGMsQmXfASTV5Hd8Cw=='); -INSERT INTO scphistory VALUES ('GABOVXDGD2LDZG42HP6XANUBMQXYHPNQR562ST6XPGJDU5KGLKC4GR7Z', 4, 'AAAAAALq3GYeljybmjv9cDaBZC+DvbCPfalP13mSOnVGWoXDAAAAAAAAAAQAAAACAAAAAQAAADDR/14M9poRUKv1A1dRR5zetMVtuGvcsNNUrWDnJBu/sgAAAABc9UwnAAAAAAAAAAAAAAABjAVAnR2dAsiF8MbFoEL3xlcLge6gJKbQhaUtK/QCiMsAAABAxnlai+Cg6u1flmrSiP+yoI+FwBFirMft3QguMzElfagmK2YNprF1HBkZwPKMRoCzrOaU+RD505lbfnA/EL3qBg=='); -INSERT INTO scphistory VALUES ('GABOVXDGD2LDZG42HP6XANUBMQXYHPNQR562ST6XPGJDU5KGLKC4GR7Z', 5, 'AAAAAALq3GYeljybmjv9cDaBZC+DvbCPfalP13mSOnVGWoXDAAAAAAAAAAUAAAACAAAAAQAAADCpBrXVEV8Syxq1NM4Af0d68BLlo9WUAaZYRnbKlAxzSAAAAABc9UwoAAAAAAAAAAAAAAABjAVAnR2dAsiF8MbFoEL3xlcLge6gJKbQhaUtK/QCiMsAAABAQydmGb9gSXcivq5jnKNE6c5yuv00D+NRqSyHOG6qNZlmiTPMogFxkYq46B9TfjRvC9gM68EwCfwVPcEd3rD+DQ=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('8c05409d1d9d02c885f0c6c5a042f7c6570b81eea024a6d085a52d2bf40288cb', 5, 'AAAAAQAAAAEAAAAAAurcZh6WPJuaO/1wNoFkL4O9sI99qU/XeZI6dUZahcMAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastclosedledger ', 'c273671c9103f040ce157a253d39c8c1aa04e4d5e6acc6a23118e3364af540c4'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 5, - "currentBuckets": [ - { - "curr": "8ff79124402aab6aa63c2d9b7bda83bc5b03bf4e369eaa6a5de30a9b022e9be2", - "next": { - "state": 0 - }, - "snap": "663f0003aeb37c9b7ee2f4d2eca34c1431e457cdfa20400fa0106d8eb525c19c" - }, - { - "curr": "ef31a20a398ee73ce22275ea8177786bac54656f33dcc4f3fec60d55ddf163d9", - "next": { - "state": 1, - "output": "663f0003aeb37c9b7ee2f4d2eca34c1431e457cdfa20400fa0106d8eb525c19c" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAAAC6txmHpY8m5o7/XA2gWQvg72wj32pT9d5kjp1RlqFwwAAAAAAAAAFAAAAA4wFQJ0dnQLIhfDGxaBC98ZXC4HuoCSm0IWlLSv0AojLAAAAAQAAAJipBrXVEV8Syxq1NM4Af0d68BLlo9WUAaZYRnbKlAxzSAAAAABc9UwoAAAAAAAAAAEAAAAAAurcZh6WPJuaO/1wNoFkL4O9sI99qU/XeZI6dUZahcMAAABA/RBxxQoUIhieya1fnaHDcUxhJp3fjgAWTTlrsJIbvD2GmACyssamfZbJJlVQ+wmvMt7prsyMH81NfegYNo6XAQAAAAEAAACYqQa11RFfEssatTTOAH9HevAS5aPVlAGmWEZ2ypQMc0gAAAAAXPVMKAAAAAAAAAABAAAAAALq3GYeljybmjv9cDaBZC+DvbCPfalP13mSOnVGWoXDAAAAQP0QccUKFCIYnsmtX52hw3FMYSad344AFk05a7CSG7w9hpgAsrLGpn2WySZVUPsJrzLe6a7MjB/NTX3oGDaOlwEAAABAbvpDG01oX1fttKTT89zfC38UYz2nk6ttfzcThBE4oIkeJ6LTx2+8PbkL7GtfGpX0iq5Z3Cpb0RJ5+6++9JavAgAAAAAC6txmHpY8m5o7/XA2gWQvg72wj32pT9d5kjp1RlqFwwAAAAAAAAAFAAAAAgAAAAEAAAAwqQa11RFfEssatTTOAH9HevAS5aPVlAGmWEZ2ypQMc0gAAAAAXPVMKAAAAAAAAAAAAAAAAYwFQJ0dnQLIhfDGxaBC98ZXC4HuoCSm0IWlLSv0AojLAAAAQEMnZhm/YEl3Ir6uY5yjROnOcrr9NA/jUakshzhuqjWZZokzzKIBcZGKuOgfU340bwvYDOvBMAn8FT3BHd6w/g0AAAABGVUp4eXOZcqR2ctFzu8Qz8iQEDOGwwRCOI4V3M5mnbUAAAABAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABdIdugAAAAAAAAAAAGu5L5MAAAAQJ7fL6KMtjD6elUg6OEd0ovvhbmnZNzM2qMAU8DWy7qjlknRETI1c9yaVhSrLlubyio5ExWa42fBEMMXqOA1iQYAAAABAAAAAQAAAAEAAAAAAurcZh6WPJuaO/1wNoFkL4O9sI99qU/XeZI6dUZahcMAAAAA'); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO trustlines VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 'USD', 9223372036854775807, 99900000000000, 1, 5, NULL, NULL); - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('666656a6eade2082c5780571267d9e4453eee5781ca9a58aa319eb0fe83455fd', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('0ee11ddb4817a6165f062c28273bf521d9bfedca4ea304f7bded2cb8ed422b7e', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('267d3bd55a6902624d03f3895bc91bf89cb0379b75d39e5b97dc3d448a6ee5cb', 4, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msmcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('23071d02983ad8b70733b8ee52a19745a366d71c1f7455199773e7683ddaa035', 5, 1, 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msk4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('666656a6eade2082c5780571267d9e4453eee5781ca9a58aa319eb0fe83455fd', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAAAAAABVvwF9wAAAEBdDXe23U4e9C2SxpBLZRx1rJzSFLJ0xDD0uKGpmqbflDT+XXIq6UiDBzmFxt+GO+XqFoQPdrXT7p1oLZIHqTMP', 'ZmZWpureIILFeAVxJn2eRFPu5XgcqaWKoxnrD+g0Vf0AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrNryTU4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('0ee11ddb4817a6165f062c28273bf521d9bfedca4ea304f7bded2cb8ed422b7e', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rKAAAAAAAAAAABVvwF9wAAAEAZCSSFbUKIiIThB3BIHf1u5g0vDSZQ0CD4fBA+pPqUQ/9dwSOSL+NGMZZvl2eJW02eOREjO4QVR4cIcmRmBdYN', 'DuEd20gXphZfBiwoJzv1Idm/7cpOowT3ve0suO1CK34AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrNryTU4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrMwLms4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'vUhtvdAtRggXZxxKWn6dboZcopy0HmLXqvcKL+5bNt4AAAAAAAAAZAAAAAAAAAABAAAAAAAAAAYAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('267d3bd55a6902624d03f3895bc91bf89cb0379b75d39e5b97dc3d448a6ee5cb', 4, 1, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAWvMQekAAAAAAAAAAAAH5kC3vAAAAQMvzjWcUe8CdwX/cl5px2TkYt672RXOFvJOTK5fK6SjBpPHGj5EIFxCRXdLAFy2K1nSkHSnIk9N2qwwQKwK1sww=', 'Jn071VppAmJNA/OJW8kb+JywN5t1055bl9w9RIpu5csAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rJnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rJnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAABa8xB6QAB//////////wAAAAEAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('23071d02983ad8b70733b8ee52a19745a366d71c1f7455199773e7683ddaa035', 5, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABdIdugAAAAAAAAAAAGu5L5MAAAAQJ7fL6KMtjD6elUg6OEd0ovvhbmnZNzM2qMAU8DWy7qjlknRETI1c9yaVhSrLlubyio5ExWa42fBEMMXqOA1iQY=', 'IwcdApg62LcHM7juUqGXRaNm1xwfdFUZl3PnaD3aoDUAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAABa8xB6QAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAABa28gDWAB//////////wAAAAEAAAAAAAAAAA=='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/send_to_issuer-horizon.sql b/services/horizon/internal/test/scenarios/send_to_issuer-horizon.sql deleted file mode 100644 index 99e78b298a..0000000000 --- a/services/horizon/internal/test/scenarios/send_to_issuer-horizon.sql +++ /dev/null @@ -1,973 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO asset_stats VALUES (1, '99900000000000', 1, 0, ''); - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_accounts VALUES (2, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (3, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 3, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_assets VALUES (1, 'credit_alphanum4', 'USD', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 1, true); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 21474840577, 1, 2, '{"amount": "10000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 21474840577, 2, 3, '{"amount": "10000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 17179873281, 1, 2, '{"amount": "10000000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 17179873281, 2, 3, '{"amount": "10000000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 12884905985, 1, 20, '{"limit": "922337203685.4775807", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 8589938689, 1, 0, '{"starting_balance": "100.0000000"}'); -INSERT INTO history_effects VALUES (3, 8589938689, 2, 3, '{"amount": "100.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589938689, 3, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (2, 8589942785, 1, 0, '{"starting_balance": "100.0000000"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 2, 3, '{"amount": "100.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (2, 8589942785, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (5, 'c273671c9103f040ce157a253d39c8c1aa04e4d5e6acc6a23118e3364af540c4', '195529e1e5ce65ca91d9cb45ceef10cfc890103386c30442388e15dcce669db5', 1, 1, '2019-06-03 16:34:48', '2019-06-03 16:34:48.034469', '2019-06-03 16:34:48.034469', 21474836480, 16, 1000000000000000000, 500, 100, 100000000, 1000000, 11, 'AAAACxlVKeHlzmXKkdnLRc7vEM/IkBAzhsMEQjiOFdzOZp21qQa11RFfEssatTTOAH9HevAS5aPVlAGmWEZ2ypQMc0gAAAAAXPVMKAAAAAAAAAAAqwSxrFb8etq4gSdxOi9F1KjbMMbBhDJdKXyKRqyFTJtjMuxWipRpbOfSMImStNHKq17sUWRYmPNHqYhUZ4K33AAAAAUN4Lazp2QAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (4, '195529e1e5ce65ca91d9cb45ceef10cfc890103386c30442388e15dcce669db5', '2131c46d35ce48cc5530faa1c2cca5dea861afdf073056cb0f1785b3b02ca47a', 1, 1, '2019-06-03 16:34:47', '2019-06-03 16:34:48.058219', '2019-06-03 16:34:48.058219', 17179869184, 16, 1000000000000000000, 400, 100, 100000000, 1000000, 11, 'AAAACyExxG01zkjMVTD6ocLMpd6oYa/fBzBWyw8XhbOwLKR60f9eDPaaEVCr9QNXUUec3rTFbbhr3LDTVK1g5yQbv7IAAAAAXPVMJwAAAAAAAAAANvoQ5f0h4XOu2zzdNp+2aYFizWM/TiKsCFrgq+HrV6I+X64zPa7jwGlO+oO7mwfLblDNFmfatACrBsZU2454igAAAAQN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (3, '2131c46d35ce48cc5530faa1c2cca5dea861afdf073056cb0f1785b3b02ca47a', '06030f6f83683dcf9bdb635640dfe78722024b6039706d79bed7c5e88f0f7900', 1, 1, '2019-06-03 16:34:46', '2019-06-03 16:34:48.071406', '2019-06-03 16:34:48.071406', 12884901888, 16, 1000000000000000000, 300, 100, 100000000, 1000000, 11, 'AAAACwYDD2+DaD3Pm9tjVkDf54ciAktgOXBteb7XxeiPD3kAfKighrk3qMITRIlaJ+sPyNXJCUM6ZSdz5viYP7GxwMQAAAAAXPVMJgAAAAAAAAAALLKPbMojH+RR+TSBDKGB/tufH2mL12ccCHr1Jn27yPAxaCuJGldT2aSEsrsdeIpbfSNElMCusyskTmZd8ChU8wAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (2, '06030f6f83683dcf9bdb635640dfe78722024b6039706d79bed7c5e88f0f7900', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 2, 2, '2019-06-03 16:34:45', '2019-06-03 16:34:48.084372', '2019-06-03 16:34:48.084373', 8589934592, 16, 1000000000000000000, 200, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZUJe9O5kAzNzu/6p0ZJoZ88h0TDub3uYslZJ7cSsRWgAAAAAAXPVMJQAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAAnQIKiwQ7y1yg69ER0rE+8ttWxjdS9dphrI7bdn6YS4COC0VHviiHpK53RNtMrMnjxUubA0ISJczyBpyjd62AAAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:34:48.097798', '2019-06-03 16:34:48.097798', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 21474840577, 1); -INSERT INTO history_operation_participants VALUES (2, 21474840577, 2); -INSERT INTO history_operation_participants VALUES (3, 17179873281, 1); -INSERT INTO history_operation_participants VALUES (4, 17179873281, 2); -INSERT INTO history_operation_participants VALUES (5, 12884905985, 2); -INSERT INTO history_operation_participants VALUES (6, 8589938689, 1); -INSERT INTO history_operation_participants VALUES (7, 8589938689, 3); -INSERT INTO history_operation_participants VALUES (8, 8589942785, 2); -INSERT INTO history_operation_participants VALUES (9, 8589942785, 3); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 9, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (21474840577, 21474840576, 1, 1, '{"to": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "from": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "amount": "10000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (17179873281, 17179873280, 1, 1, '{"to": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "from": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "amount": "10000000.0000000", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4'); -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 6, '{"limit": "922337203685.4775807", "trustee": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "trustor": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "asset_code": "USD", "asset_type": "credit_alphanum4", "asset_issuer": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "starting_balance": "100.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "100.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 21474840576, 2); -INSERT INTO history_transaction_participants VALUES (2, 21474840576, 1); -INSERT INTO history_transaction_participants VALUES (3, 17179873280, 1); -INSERT INTO history_transaction_participants VALUES (4, 17179873280, 2); -INSERT INTO history_transaction_participants VALUES (5, 12884905984, 2); -INSERT INTO history_transaction_participants VALUES (6, 8589938688, 3); -INSERT INTO history_transaction_participants VALUES (7, 8589938688, 1); -INSERT INTO history_transaction_participants VALUES (8, 8589942784, 3); -INSERT INTO history_transaction_participants VALUES (9, 8589942784, 2); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 9, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('23071d02983ad8b70733b8ee52a19745a366d71c1f7455199773e7683ddaa035', 5, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934594, 100, 1, '2019-06-03 16:34:48.03467', '2019-06-03 16:34:48.03467', 21474840576, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAABdIdugAAAAAAAAAAAGu5L5MAAAAQJ7fL6KMtjD6elUg6OEd0ovvhbmnZNzM2qMAU8DWy7qjlknRETI1c9yaVhSrLlubyio5ExWa42fBEMMXqOA1iQY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJOAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJOAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAABa8xB6QAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAABa28gDWAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msk4AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{nt8vooy2MPp6VSDo4R3Si++Fuadk3MzaowBTwNbLuqOWSdERMjVz3JpWFKsuW5vKKjkTFZrjZ8EQwxeo4DWJBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('267d3bd55a6902624d03f3895bc91bf89cb0379b75d39e5b97dc3d448a6ee5cb', 4, 1, 'GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4', 8589934593, 100, 1, '2019-06-03 16:34:48.058377', '2019-06-03 16:34:48.058377', 17179873280, 'AAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAWvMQekAAAAAAAAAAAAH5kC3vAAAAQMvzjWcUe8CdwX/cl5px2TkYt672RXOFvJOTK5fK6SjBpPHGj5EIFxCRXdLAFy2K1nSkHSnIk9N2qwwQKwK1sww=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rJnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rJnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAABa8xB6QAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msmcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{y/ONZxR7wJ3Bf9yXmnHZORi3rvZFc4W8k5Mrl8rpKMGk8caPkQgXEJFd0sAXLYrWdKQdKciT03arDBArArWzDA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('bd486dbdd02d460817671c4a5a7e9d6e865ca29cb41e62d7aaf70a2fee5b36de', 3, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:34:48.07157', '2019-06-03 16:34:48.07157', 12884905984, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAYAAAABVVNEAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt73//////////AAAAAAAAAAGu5L5MAAAAQB9kmKW2q3v7Qfy8PMekEb1TTI5ixqkI0BogXrOt7gO162Qbkh2dSTUfeDovc0PAafhDXxthVAlsLujlBmyjBAY=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rJnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAFVU0QAAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msmcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{H2SYpbare/tB/Lw8x6QRvVNMjmLGqQjQGiBes63uA7XrZBuSHZ1JNR94Oi9zQ8Bp+ENfG2FUCWwu6OUGbKMEBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('666656a6eade2082c5780571267d9e4453eee5781ca9a58aa319eb0fe83455fd', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:34:48.084682', '2019-06-03 16:34:48.084682', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAAO5rKAAAAAAAAAAABVvwF9wAAAEBdDXe23U4e9C2SxpBLZRx1rJzSFLJ0xDD0uKGpmqbflDT+XXIq6UiDBzmFxt+GO+XqFoQPdrXT7p1oLZIHqTMP', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrNryTU4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{XQ13tt1OHvQtksaQS2Ucdayc0hSydMQw9LihqZqm35Q0/l1yKulIgwc5hcbfhjvl6haED3a10+6daC2SB6kzDw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('0ee11ddb4817a6165f062c28273bf521d9bfedca4ea304f7bded2cb8ed422b7e', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:34:48.085002', '2019-06-03 16:34:48.085003', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAAAO5rKAAAAAAAAAAABVvwF9wAAAEAZCSSFbUKIiIThB3BIHf1u5g0vDSZQ0CD4fBA+pPqUQ/9dwSOSL+NGMZZvl2eJW02eOREjO4QVR4cIcmRmBdYN', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrNryTU4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrMwLms4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAA7msoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{GQkkhW1CiIiE4QdwSB39buYNLw0mUNAg+HwQPqT6lEP/XcEjki/jRjGWb5dniVtNnjkRIzuEFUeHCHJkZgXWDQ==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/send_to_issuer.rb b/services/horizon/internal/test/scenarios/send_to_issuer.rb deleted file mode 100644 index 963392b5f9..0000000000 --- a/services/horizon/internal/test/scenarios/send_to_issuer.rb +++ /dev/null @@ -1,20 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :usd_gateway, :master, 100 -create_account :scott, :master, 100 - -close_ledger - -trust :scott, :usd_gateway, "USD" - -close_ledger - -payment :usd_gateway, :scott, ["USD", :usd_gateway, 10_000_000] - -close_ledger - -payment :scott, :usd_gateway, ["USD", :usd_gateway, 10_000] - -close_ledger diff --git a/services/horizon/internal/test/scenarios/set_options-core.sql b/services/horizon/internal/test/scenarios/set_options-core.sql deleted file mode 100644 index 55a3b2d29d..0000000000 --- a/services/horizon/internal/test/scenarios/set_options-core.sql +++ /dev/null @@ -1,758 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - -DROP INDEX IF EXISTS public.upgradehistbyseq; -DROP INDEX IF EXISTS public.scpquorumsbyseq; -DROP INDEX IF EXISTS public.scpenvsbyseq; -DROP INDEX IF EXISTS public.ledgersbyseq; -DROP INDEX IF EXISTS public.histfeebyseq; -DROP INDEX IF EXISTS public.histbyseq; -DROP INDEX IF EXISTS public.bestofferindex; -DROP INDEX IF EXISTS public.accountbalances; -ALTER TABLE IF EXISTS ONLY public.upgradehistory DROP CONSTRAINT IF EXISTS upgradehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txhistory DROP CONSTRAINT IF EXISTS txhistory_pkey; -ALTER TABLE IF EXISTS ONLY public.txfeehistory DROP CONSTRAINT IF EXISTS txfeehistory_pkey; -ALTER TABLE IF EXISTS ONLY public.trustlines DROP CONSTRAINT IF EXISTS trustlines_pkey; -ALTER TABLE IF EXISTS ONLY public.storestate DROP CONSTRAINT IF EXISTS storestate_pkey; -ALTER TABLE IF EXISTS ONLY public.scpquorums DROP CONSTRAINT IF EXISTS scpquorums_pkey; -ALTER TABLE IF EXISTS ONLY public.quoruminfo DROP CONSTRAINT IF EXISTS quoruminfo_pkey; -ALTER TABLE IF EXISTS ONLY public.pubsub DROP CONSTRAINT IF EXISTS pubsub_pkey; -ALTER TABLE IF EXISTS ONLY public.publishqueue DROP CONSTRAINT IF EXISTS publishqueue_pkey; -ALTER TABLE IF EXISTS ONLY public.peers DROP CONSTRAINT IF EXISTS peers_pkey; -ALTER TABLE IF EXISTS ONLY public.offers DROP CONSTRAINT IF EXISTS offers_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_pkey; -ALTER TABLE IF EXISTS ONLY public.ledgerheaders DROP CONSTRAINT IF EXISTS ledgerheaders_ledgerseq_key; -ALTER TABLE IF EXISTS ONLY public.ban DROP CONSTRAINT IF EXISTS ban_pkey; -ALTER TABLE IF EXISTS ONLY public.accounts DROP CONSTRAINT IF EXISTS accounts_pkey; -ALTER TABLE IF EXISTS ONLY public.accountdata DROP CONSTRAINT IF EXISTS accountdata_pkey; -DROP TABLE IF EXISTS public.upgradehistory; -DROP TABLE IF EXISTS public.txhistory; -DROP TABLE IF EXISTS public.txfeehistory; -DROP TABLE IF EXISTS public.trustlines; -DROP TABLE IF EXISTS public.storestate; -DROP TABLE IF EXISTS public.scpquorums; -DROP TABLE IF EXISTS public.scphistory; -DROP TABLE IF EXISTS public.quoruminfo; -DROP TABLE IF EXISTS public.pubsub; -DROP TABLE IF EXISTS public.publishqueue; -DROP TABLE IF EXISTS public.peers; -DROP TABLE IF EXISTS public.offers; -DROP TABLE IF EXISTS public.ledgerheaders; -DROP TABLE IF EXISTS public.ban; -DROP TABLE IF EXISTS public.accounts; -DROP TABLE IF EXISTS public.accountdata; -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: accountdata; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accountdata ( - accountid character varying(56) NOT NULL, - dataname character varying(88) NOT NULL, - datavalue character varying(112) NOT NULL, - lastmodified integer NOT NULL -); - - --- --- Name: accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE accounts ( - accountid character varying(56) NOT NULL, - balance bigint NOT NULL, - seqnum bigint NOT NULL, - numsubentries integer NOT NULL, - inflationdest character varying(56), - homedomain character varying(44) NOT NULL, - thresholds text NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - signers text, - CONSTRAINT accounts_balance_check CHECK ((balance >= 0)), - CONSTRAINT accounts_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT accounts_numsubentries_check CHECK ((numsubentries >= 0)), - CONSTRAINT accounts_sellingliabilities_check CHECK ((sellingliabilities >= 0)) -); - - --- --- Name: ban; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ban ( - nodeid character(56) NOT NULL -); - - --- --- Name: ledgerheaders; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE ledgerheaders ( - ledgerhash character(64) NOT NULL, - prevhash character(64) NOT NULL, - bucketlisthash character(64) NOT NULL, - ledgerseq integer, - closetime bigint NOT NULL, - data text NOT NULL, - CONSTRAINT ledgerheaders_closetime_check CHECK ((closetime >= 0)), - CONSTRAINT ledgerheaders_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: offers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE offers ( - sellerid character varying(56) NOT NULL, - offerid bigint NOT NULL, - sellingasset text NOT NULL, - buyingasset text NOT NULL, - amount bigint NOT NULL, - pricen integer NOT NULL, - priced integer NOT NULL, - price double precision NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - CONSTRAINT offers_amount_check CHECK ((amount >= 0)), - CONSTRAINT offers_offerid_check CHECK ((offerid >= 0)) -); - - --- --- Name: peers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE peers ( - ip character varying(15) NOT NULL, - port integer DEFAULT 0 NOT NULL, - nextattempt timestamp without time zone NOT NULL, - numfailures integer DEFAULT 0 NOT NULL, - type integer NOT NULL, - CONSTRAINT peers_numfailures_check CHECK ((numfailures >= 0)), - CONSTRAINT peers_port_check CHECK (((port > 0) AND (port <= 65535))) -); - - --- --- Name: publishqueue; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE publishqueue ( - ledger integer NOT NULL, - state text -); - - --- --- Name: pubsub; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE pubsub ( - resid character(32) NOT NULL, - lastread integer -); - - --- --- Name: quoruminfo; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE quoruminfo ( - nodeid character(56) NOT NULL, - qsethash character(64) NOT NULL -); - - --- --- Name: scphistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scphistory ( - nodeid character(56) NOT NULL, - ledgerseq integer NOT NULL, - envelope text NOT NULL, - CONSTRAINT scphistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: scpquorums; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE scpquorums ( - qsethash character(64) NOT NULL, - lastledgerseq integer NOT NULL, - qset text NOT NULL, - CONSTRAINT scpquorums_lastledgerseq_check CHECK ((lastledgerseq >= 0)) -); - - --- --- Name: storestate; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE storestate ( - statename character(32) NOT NULL, - state text -); - - --- --- Name: trustlines; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE trustlines ( - accountid character varying(56) NOT NULL, - assettype integer NOT NULL, - issuer character varying(56) NOT NULL, - assetcode character varying(12) NOT NULL, - tlimit bigint NOT NULL, - balance bigint NOT NULL, - flags integer NOT NULL, - lastmodified integer NOT NULL, - buyingliabilities bigint, - sellingliabilities bigint, - CONSTRAINT trustlines_balance_check CHECK ((balance >= 0)), - CONSTRAINT trustlines_buyingliabilities_check CHECK ((buyingliabilities >= 0)), - CONSTRAINT trustlines_sellingliabilities_check CHECK ((sellingliabilities >= 0)), - CONSTRAINT trustlines_tlimit_check CHECK ((tlimit > 0)) -); - - --- --- Name: txfeehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txfeehistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txchanges text NOT NULL, - CONSTRAINT txfeehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: txhistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE txhistory ( - txid character(64) NOT NULL, - ledgerseq integer NOT NULL, - txindex integer NOT NULL, - txbody text NOT NULL, - txresult text NOT NULL, - txmeta text NOT NULL, - CONSTRAINT txhistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Name: upgradehistory; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE upgradehistory ( - ledgerseq integer NOT NULL, - upgradeindex integer NOT NULL, - upgrade text NOT NULL, - changes text NOT NULL, - CONSTRAINT upgradehistory_ledgerseq_check CHECK ((ledgerseq >= 0)) -); - - --- --- Data for Name: accountdata; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO accounts VALUES ('GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 999999979999999800, 2, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2', 10000000000, 8589934592, 0, NULL, '', 'AQAAAA==', 0, 2, NULL, NULL, NULL); -INSERT INTO accounts VALUES ('GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 9999999100, 8589934601, 0, 'GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2', 'bnVsbHN0eWxlLmNvbQ==', 'AgACAg==', 0, 11, NULL, NULL, NULL); - - --- --- Data for Name: ban; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: ledgerheaders; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('1a71940fe8ae84e5f666bbf10db0e586c65994e993116ff59e41284893ae2dd2', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '4dd933b62c503d4e71afb525f35573c6b0428d8f3e8a78c84938095a5d6778bf', 2, 1559579659, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZUeFWh3+LY3YTHkhb6t+XikT48AKVUrh+INl3MY9NNtUAAAAAXPVMCwAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAwWNZfI5WyFWx2m7ToNQChYZ5zqFrwog2j0kXqQNLArtN2TO2LFA9TnGvtSXzVXPGsEKNjz6KeMhJOAlaXWd4vwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('bfbcceca2072574d4a222914d06b7d72a3c5eef2678386fce259e83803faf0ed', '1a71940fe8ae84e5f666bbf10db0e586c65994e993116ff59e41284893ae2dd2', '4fbb7252ca10db8dc5f07dea2f7dec4e225e6b461d0f572d0bc0920811007dae', 3, 1559579660, 'AAAACxpxlA/oroTl9ma78Q2w5YbGWZTpkxFv9Z5BKEiTri3S7NHzMgrBivilr5huQCflO7xm/vgO9jgiPmaTCgPqFvUAAAAAXPVMDAAAAAAAAAAAWytPxoudFtBA+XPgoX68OnSpyq0CyNJxb/gkM8zhiqJPu3JSyhDbjcXwfeovfexOIl5rRh0PVy0LwJIIEQB9rgAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('1a299f3d0ad50ca8031366d768567816732458b34c38f8f7c23a91aa16295d3f', 'bfbcceca2072574d4a222914d06b7d72a3c5eef2678386fce259e83803faf0ed', 'c843fd7a6d511539411923585d48d89ad907dcd143862c6e74409178a66fb828', 4, 1559579661, 'AAAAC7+8zsogcldNSiIpFNBrfXKjxe7yZ4OG/OJZ6DgD+vDt/yKdDN/1lGUfFOt2+TZcTSpKHZxveagU6dtAgwdQGtsAAAAAXPVMDQAAAAAAAAAAa1i3djL4JG2U0qym2CMoeBxlr+vmeubZ7vGC4ngh49LIQ/16bVEVOUEZI1hdSNia2Qfc0UOGLG50QJF4pm+4KAAAAAQN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('1424e4f9d3f467c4f5a4251898f5000ed7c0c194526b4502c680587f6f1ea996', '1a299f3d0ad50ca8031366d768567816732458b34c38f8f7c23a91aa16295d3f', 'a918ba7347e71f03300e58b0d87e716992495e31987dd7f02d44303a25fde5a1', 5, 1559579662, 'AAAACxopnz0K1QyoAxNm12hWeBZzJFizTDj498I6kaoWKV0/hJ8Od3RVfTUIfqvlCt+uS5GhtDPyoqy5wQudrb+OH6gAAAAAXPVMDgAAAAAAAAAAbJCOaKm2CaEJkDvk9WFgcQA3JpN23CxDI5jTyWfntcipGLpzR+cfAzAOWLDYfnFpkkleMZh91/AtRDA6Jf3loQAAAAUN4Lazp2QAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('36d65ea84c2643e925dfdf1ceefdd84c35259906e8ba0ab4809ae6d656ae5f78', '1424e4f9d3f467c4f5a4251898f5000ed7c0c194526b4502c680587f6f1ea996', 'cfc5e4604dc4c79b979321ae69d81f50da6b1e18498547723a89a5fab2b0db4f', 6, 1559579663, 'AAAACxQk5PnT9GfE9aQlGJj1AA7XwMGUUmtFAsaAWH9vHqmWD9DGJ5+d5sSmI9bjNgGTXerv+WD4xP3BOPMEECCol8kAAAAAXPVMDwAAAAAAAAAAQKGf90N/CebuaXWxlpPbcziaBUE4wyo+nOmUW36ADtvPxeRgTcTHm5eTIa5p2B9Q2mseGEmFR3I6iaX6srDbTwAAAAYN4Lazp2QAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('4df17ea9d0cc9aeddc13c16dd068476ec1164301fbf46f4ee661ac7ed605a9c4', '36d65ea84c2643e925dfdf1ceefdd84c35259906e8ba0ab4809ae6d656ae5f78', 'b77215117fa4b548548f92994c5a9a6acb2262e9a361581d87e9a2f66047558a', 7, 1559579664, 'AAAACzbWXqhMJkPpJd/fHO792Ew1JZkG6LoKtICa5tZWrl943bb/FAu8h6y7ka5T43YcfrULc0N/F1jh+q5AwqlbeEUAAAAAXPVMEAAAAAAAAAAA86p35r63mMyyIdwFy/OVIQnYahLVbx+xS7RU2RGWQgC3chURf6S1SFSPkplMWppqyyJi6aNhWB2H6aL2YEdVigAAAAcN4Lazp2QAAAAAAAAAAAK8AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('c45d427098c8a2f40969aea6d6a7d338cc3661e9aaf457c635213e014a3145a1', '4df17ea9d0cc9aeddc13c16dd068476ec1164301fbf46f4ee661ac7ed605a9c4', '2d137f4480e6194300de8340fc7dbf1c1ba412c758f3989ee0113d51133ea853', 8, 1559579665, 'AAAAC03xfqnQzJrt3BPBbdBoR27BFkMB+/RvTuZhrH7WBanELKSJoHCW5kbaB07wCl8VLvXu+kjqkC6gvAw6frHIMxMAAAAAXPVMEQAAAAAAAAAAJ0ts4/XYQta2CPBn5gpjCmmaaT6lvEUhsrs3yyYWo8ktE39EgOYZQwDeg0D8fb8cG6QSx1jzmJ7gET1REz6oUwAAAAgN4Lazp2QAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('28a7ec46838d03a8fe4b902231fcaaa815a9148833c2a11ed61e85a25ff54231', 'c45d427098c8a2f40969aea6d6a7d338cc3661e9aaf457c635213e014a3145a1', 'ed1bfa1ba592966993ca2bcf37f7c58fd69b34f6b9ce966548f638ce9580a59a', 9, 1559579666, 'AAAAC8RdQnCYyKL0CWmuptan0zjMNmHpqvRXxjUhPgFKMUWhqPH/M7+HU9yt899GG6Ya5NY//xUvsco3TZgMSEWFBNcAAAAAXPVMEgAAAAAAAAAAPOhxFEK89OWazUrqiNnGGEHhUviPsqFuH3eqjSDcylztG/obpZKWaZPKK88398WP1ps09rnOlmVI9jjOlYClmgAAAAkN4Lazp2QAAAAAAAAAAAOEAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('f754c3019b8d1ac1ebceeb116dd05e96f74b6cd55f30861321284e95c6e36cae', '28a7ec46838d03a8fe4b902231fcaaa815a9148833c2a11ed61e85a25ff54231', '5bb5bf7f14f3c5e4dc80ab389c4c6c88218a274a2d80cc0c917a77de6196b919', 10, 1559579667, 'AAAACyin7EaDjQOo/kuQIjH8qqgVqRSIM8KhHtYehaJf9UIxnZmwfkZsLq6DCAQYDzFs473n32zU5YcmFBI+nmdMsFMAAAAAXPVMEwAAAAAAAAAA6lRE0phahaqqFmy0QiHScS5fiHWsfSsqZJ0lki7J1+Fbtb9/FPPF5NyAqzicTGyIIYonSi2AzAyRenfeYZa5GQAAAAoN4Lazp2QAAAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('3679fc5ada51dd679dad07b49277b45331c929843647e38f8099bc6487b4d5f7', 'f754c3019b8d1ac1ebceeb116dd05e96f74b6cd55f30861321284e95c6e36cae', '37ef5e8103666fd8d688cfe3fb5cb100405a4100ef30d69b3d4c29758497a7c0', 11, 1559579668, 'AAAAC/dUwwGbjRrB687rEW3QXpb3S2zVXzCGEyEoTpXG42yuogRrNAKIZmlEWbVSH+okwOl06RSo2ock1dSH/MLAn54AAAAAXPVMFAAAAAAAAAAAmFwOlFqcVdyetl3vjpiXLbSMzYVia44vS0tbRk58Yzw3716BA2Zv2NaIz+P7XLEAQFpBAO8w1ps9TCl1hJenwAAAAAsN4Lazp2QAAAAAAAAAAARMAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); -INSERT INTO ledgerheaders VALUES ('9999d91f3b3fe61b50fb8dd51716d268efb2091e09493bf1833d82645f80fc91', '3679fc5ada51dd679dad07b49277b45331c929843647e38f8099bc6487b4d5f7', '96a78a7642413d1b066e3769f7a8633594703506b1d045323d664adafa30c6c3', 12, 1559579669, 'AAAACzZ5/FraUd1nna0HtJJ3tFMxySmENkfjj4CZvGSHtNX3vJ6LFe/P/b9RjvgtlTxEmPYUN/Dvo1L/PbZda52LMoMAAAAAXPVMFQAAAAAAAAAA3z9hmASpL9tAVxktxD3XSOp3itxSvEmM6AUkwBS4ERmWp4p2QkE9GwZuN2n3qGM1lHA1BrHQRTI9Zkra+jDGwwAAAAwN4Lazp2QAAAAAAAAAAARMAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); - - --- --- Data for Name: offers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: peers; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: publishqueue; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: pubsub; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: quoruminfo; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scphistory VALUES ('GCP2QNWPSISONNLMBDD34GFP6OD3ZWQX4U57L5UYIKECXWO3KMLZMGEL', 2, 'AAAAAJ+oNs+SJOa1bAjHvhiv84e82hflO/X2mEKIK9nbUxeWAAAAAAAAAAIAAAACAAAAAQAAAEhR4VaHf4tjdhMeSFvq35eKRPjwApVSuH4g2Xcxj0021QAAAABc9UwLAAAAAgAAAAgAAAABAAAACwAAAAgAAAADAA9CQAAAAAAAAAABFiPf7nlnbC1rNnYfc8WRLi8fSj6K4UqBhRglTqT5nhQAAABAOWkoWlCBSEKAbhubWguiYjml1yz5YG64fQRg1OQ8VvneRoHgWB+C9n8BijlB8D1/pSnRQn+4/VJypwC4bDQHAA=='); -INSERT INTO scphistory VALUES ('GCP2QNWPSISONNLMBDD34GFP6OD3ZWQX4U57L5UYIKECXWO3KMLZMGEL', 3, 'AAAAAJ+oNs+SJOa1bAjHvhiv84e82hflO/X2mEKIK9nbUxeWAAAAAAAAAAMAAAACAAAAAQAAADDs0fMyCsGK+KWvmG5AJ+U7vGb++A72OCI+ZpMKA+oW9QAAAABc9UwMAAAAAAAAAAAAAAABFiPf7nlnbC1rNnYfc8WRLi8fSj6K4UqBhRglTqT5nhQAAABA7f4gEbgilYdOYnUHl7Yd7IG0r23f+GtPTkAGSyuH8PwvY2YASKxtpTZv90o/FzXFKnx2Qw4/ZXxSaOOdBT6bDA=='); -INSERT INTO scphistory VALUES ('GCP2QNWPSISONNLMBDD34GFP6OD3ZWQX4U57L5UYIKECXWO3KMLZMGEL', 4, 'AAAAAJ+oNs+SJOa1bAjHvhiv84e82hflO/X2mEKIK9nbUxeWAAAAAAAAAAQAAAACAAAAAQAAADD/Ip0M3/WUZR8U63b5NlxNKkodnG95qBTp20CDB1Aa2wAAAABc9UwNAAAAAAAAAAAAAAABFiPf7nlnbC1rNnYfc8WRLi8fSj6K4UqBhRglTqT5nhQAAABAzOTPWhZ6bVJGvQapKX5xrOQB5HkZ0aN7girYMXVuWUZkvcm8CvwAukOtel7pT4yeyMEY8ByvOV7DqZU3HzZXCQ=='); -INSERT INTO scphistory VALUES ('GCP2QNWPSISONNLMBDD34GFP6OD3ZWQX4U57L5UYIKECXWO3KMLZMGEL', 5, 'AAAAAJ+oNs+SJOa1bAjHvhiv84e82hflO/X2mEKIK9nbUxeWAAAAAAAAAAUAAAACAAAAAQAAADCEnw53dFV9NQh+q+UK365LkaG0M/KirLnBC52tv44fqAAAAABc9UwOAAAAAAAAAAAAAAABFiPf7nlnbC1rNnYfc8WRLi8fSj6K4UqBhRglTqT5nhQAAABAd9IaFSaICEBPzhzZkV2xIdst7yaXM9K4fgmOSYSX/6QNFS3sgRu83Hh/fbJVQjgtHkaLvRja/6I831VMCDYIAQ=='); -INSERT INTO scphistory VALUES ('GCP2QNWPSISONNLMBDD34GFP6OD3ZWQX4U57L5UYIKECXWO3KMLZMGEL', 6, 'AAAAAJ+oNs+SJOa1bAjHvhiv84e82hflO/X2mEKIK9nbUxeWAAAAAAAAAAYAAAACAAAAAQAAADAP0MYnn53mxKYj1uM2AZNd6u/5YPjE/cE48wQQIKiXyQAAAABc9UwPAAAAAAAAAAAAAAABFiPf7nlnbC1rNnYfc8WRLi8fSj6K4UqBhRglTqT5nhQAAABA3OpEKIA55bFVXyEGxUruwemJrReNIp6ygr/ZroVF4dXoroOpujmCTMkpcToRPBSMjLn0IimCWvgNS08TnklYCA=='); -INSERT INTO scphistory VALUES ('GCP2QNWPSISONNLMBDD34GFP6OD3ZWQX4U57L5UYIKECXWO3KMLZMGEL', 7, 'AAAAAJ+oNs+SJOa1bAjHvhiv84e82hflO/X2mEKIK9nbUxeWAAAAAAAAAAcAAAACAAAAAQAAADDdtv8UC7yHrLuRrlPjdhx+tQtzQ38XWOH6rkDCqVt4RQAAAABc9UwQAAAAAAAAAAAAAAABFiPf7nlnbC1rNnYfc8WRLi8fSj6K4UqBhRglTqT5nhQAAABAFhUESlaH+mZLDB56rGlv020PM8JOz3kJl7O6Ou1I8XMm0nqY/1tiRIeV2KX19mLRm7tZbXCULiHVtbotW7pEBw=='); -INSERT INTO scphistory VALUES ('GCP2QNWPSISONNLMBDD34GFP6OD3ZWQX4U57L5UYIKECXWO3KMLZMGEL', 8, 'AAAAAJ+oNs+SJOa1bAjHvhiv84e82hflO/X2mEKIK9nbUxeWAAAAAAAAAAgAAAACAAAAAQAAADAspImgcJbmRtoHTvAKXxUu9e76SOqQLqC8DDp+scgzEwAAAABc9UwRAAAAAAAAAAAAAAABFiPf7nlnbC1rNnYfc8WRLi8fSj6K4UqBhRglTqT5nhQAAABARdg7Ip+5h0d9tzVSpIt8EwWQ5VJL00b2+9tZrPbyJz0qJ88kj5EP5nWkO3dSkNiGSncrstbIWK3Y8uaps7OhBw=='); -INSERT INTO scphistory VALUES ('GCP2QNWPSISONNLMBDD34GFP6OD3ZWQX4U57L5UYIKECXWO3KMLZMGEL', 9, 'AAAAAJ+oNs+SJOa1bAjHvhiv84e82hflO/X2mEKIK9nbUxeWAAAAAAAAAAkAAAACAAAAAQAAADCo8f8zv4dT3K3z30Ybphrk1j//FS+xyjdNmAxIRYUE1wAAAABc9UwSAAAAAAAAAAAAAAABFiPf7nlnbC1rNnYfc8WRLi8fSj6K4UqBhRglTqT5nhQAAABA7US+6rSsPfrtHeUzUxeexlqf6PxvyV0QvzbmFeawc+O011/rKpyK80tlUKrmZAhEuMx2efe77WdDAEaj212tAQ=='); -INSERT INTO scphistory VALUES ('GCP2QNWPSISONNLMBDD34GFP6OD3ZWQX4U57L5UYIKECXWO3KMLZMGEL', 10, 'AAAAAJ+oNs+SJOa1bAjHvhiv84e82hflO/X2mEKIK9nbUxeWAAAAAAAAAAoAAAACAAAAAQAAADCdmbB+RmwuroMIBBgPMWzjveffbNTlhyYUEj6eZ0ywUwAAAABc9UwTAAAAAAAAAAAAAAABFiPf7nlnbC1rNnYfc8WRLi8fSj6K4UqBhRglTqT5nhQAAABAAAtoifdy5+h4bB+uxothsEcJIrqm1F10vNFLDTClncF2pDYfVnUYwVahczROR29ZYl/vCUvBSy7Iq2XLAm7ECw=='); -INSERT INTO scphistory VALUES ('GCP2QNWPSISONNLMBDD34GFP6OD3ZWQX4U57L5UYIKECXWO3KMLZMGEL', 11, 'AAAAAJ+oNs+SJOa1bAjHvhiv84e82hflO/X2mEKIK9nbUxeWAAAAAAAAAAsAAAACAAAAAQAAADCiBGs0AohmaURZtVIf6iTA6XTpFKjahyTV1If8wsCfngAAAABc9UwUAAAAAAAAAAAAAAABFiPf7nlnbC1rNnYfc8WRLi8fSj6K4UqBhRglTqT5nhQAAABAOKPVxGRtzeeYuH4ugvvvRvlnm39SYAqp1HRXLRIXsEc1/ARwxuGdTAaT2k9ypVyAJ5oDf+MfpApftHzfGsQBCQ=='); -INSERT INTO scphistory VALUES ('GCP2QNWPSISONNLMBDD34GFP6OD3ZWQX4U57L5UYIKECXWO3KMLZMGEL', 12, 'AAAAAJ+oNs+SJOa1bAjHvhiv84e82hflO/X2mEKIK9nbUxeWAAAAAAAAAAwAAAACAAAAAQAAADC8nosV78/9v1GO+C2VPESY9hQ38O+jUv89tl1rnYsygwAAAABc9UwVAAAAAAAAAAAAAAABFiPf7nlnbC1rNnYfc8WRLi8fSj6K4UqBhRglTqT5nhQAAABAZ/tC6vf3rVhC91KmJyD0n/PIGmoiF7uG52E6HIC5Wy/5nsUS26HVorjolPDGQSI5r3uCZHlm+G/IDQxvshBmDg=='); - - --- --- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO scpquorums VALUES ('1623dfee79676c2d6b36761f73c5912e2f1f4a3e8ae14a818518254ea4f99e14', 12, 'AAAAAQAAAAEAAAAAn6g2z5Ik5rVsCMe+GK/zh7zaF+U79faYQogr2dtTF5YAAAAA'); - - --- --- Data for Name: storestate; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO storestate VALUES ('databaseschema ', '10'); -INSERT INTO storestate VALUES ('networkpassphrase ', 'Test SDF Network ; September 2015'); -INSERT INTO storestate VALUES ('forcescponnextlaunch ', 'false'); -INSERT INTO storestate VALUES ('ledgerupgrades ', '{ - "time": 0, - "version": { - "has": false - }, - "fee": { - "has": false - }, - "maxtxsize": { - "has": false - }, - "reserve": { - "has": false - } -}'); -INSERT INTO storestate VALUES ('lastclosedledger ', '9999d91f3b3fe61b50fb8dd51716d268efb2091e09493bf1833d82645f80fc91'); -INSERT INTO storestate VALUES ('historyarchivestate ', '{ - "version": 1, - "server": "v11.1.0", - "currentLedger": 12, - "currentBuckets": [ - { - "curr": "056cd09fa286b2de1ff329b224259b858f94ec1dcc93f0e0512b2f6819348951", - "next": { - "state": 0 - }, - "snap": "5206372842e193b900ca87e2ddcada472702ef686523a2982d5a66b566fa5f85" - }, - { - "curr": "9456096f5d3e61c8c24d867b5f8a4295c21bf089d018c1bbe694449c92daf950", - "next": { - "state": 1, - "output": "5206372842e193b900ca87e2ddcada472702ef686523a2982d5a66b566fa5f85" - }, - "snap": "75a9441b80e08445c19c1c5b6e5fc8ebfb4be7c48cf0dded1ad147df699b2e57" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 1, - "output": "75a9441b80e08445c19c1c5b6e5fc8ebfb4be7c48cf0dded1ad147df699b2e57" - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "curr": "0000000000000000000000000000000000000000000000000000000000000000", - "next": { - "state": 0 - }, - "snap": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}'); -INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAACfqDbPkiTmtWwIx74Yr/OHvNoX5Tv19phCiCvZ21MXlgAAAAAAAAAMAAAAAxYj3+55Z2wtazZ2H3PFkS4vH0o+iuFKgYUYJU6k+Z4UAAAAAQAAAJi8nosV78/9v1GO+C2VPESY9hQ38O+jUv89tl1rnYsygwAAAABc9UwVAAAAAAAAAAEAAAAAn6g2z5Ik5rVsCMe+GK/zh7zaF+U79faYQogr2dtTF5YAAABAGLavO6seQOZC0GnXUtBtHQy8hzh3YbhyNTylHRXb3sKz25I8ajXcTXC1hgaApparNZY/Um61cw7LmTUXQYR4AAAAAAEAAACYvJ6LFe/P/b9RjvgtlTxEmPYUN/Dvo1L/PbZda52LMoMAAAAAXPVMFQAAAAAAAAABAAAAAJ+oNs+SJOa1bAjHvhiv84e82hflO/X2mEKIK9nbUxeWAAAAQBi2rzurHkDmQtBp11LQbR0MvIc4d2G4cjU8pR0V297Cs9uSPGo13E1wtYYGgKaWqzWWP1JutXMOy5k1F0GEeAAAAABAW1K7ebIuDn4WKtOk7tBmZMerfVROAVVl0vbhSBHdPyRYLkRYwry5pWtupFZB1wy/zpVGH2TVUYjJRcHQw14tCAAAAACfqDbPkiTmtWwIx74Yr/OHvNoX5Tv19phCiCvZ21MXlgAAAAAAAAAMAAAAAgAAAAEAAAAwvJ6LFe/P/b9RjvgtlTxEmPYUN/Dvo1L/PbZda52LMoMAAAAAXPVMFQAAAAAAAAAAAAAAARYj3+55Z2wtazZ2H3PFkS4vH0o+iuFKgYUYJU6k+Z4UAAAAQGf7Qur3961YQvdSpicg9J/zyBpqIhe7hudhOhyAuVsv+Z7FEtuh1aK46JTwxkEiOa97gmR5ZvhvyA0Mb7IQZg4AAAABNnn8WtpR3WedrQe0kne0UzHJKYQ2R+OPgJm8ZIe01fcAAAAAAAAAAQAAAAEAAAABAAAAAJ+oNs+SJOa1bAjHvhiv84e82hflO/X2mEKIK9nbUxeWAAAAAA=='); - - --- --- Data for Name: trustlines; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: txfeehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txfeehistory VALUES ('b2a227c39c64a44fc7abd4c96819456f0399906d12c476d70b402bfdb296d6a3', 2, 1, 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('36be70fb7782f9801cdcedc1206e21f99293c99860a15e441f4749747a0a37ab', 2, 2, 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('c76f843dd29e92bacbf21659d50454a043eae6a5ef81e2e8dc97b0e005d30962', 3, 1, 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('895b1e3ae3570fac549edfcc260122a2f930b35b94b1dffa9f8c2a08816ac376', 4, 1, 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('b0bb26bbc67cc1c226293ce18f94f9766b4e5c68132c2caff7907791d1723f27', 5, 1, 'AAAAAgAAAAMAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+LUAAAAAgAAAAIAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('a721bea4176539c6ed564ceafb7084a31c5deafe17ce0b52d2e2752feae47db7', 6, 1, 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+LUAAAAAgAAAAMAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+JwAAAAAgAAAAMAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('ca5cd8926d50d5f94acc074b6c966e927195571cb4977e1cb7690df84529f127', 7, 1, 'AAAAAgAAAAMAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+JwAAAAAgAAAAQAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgACAgAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+IMAAAAAgAAAAQAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgACAgAAAAAAAAAAAAAAAA=='); -INSERT INTO txfeehistory VALUES ('eb4d35309591547be7fe2fb9c44834d20e4d569294088ac1a3d204d16e9a0751', 8, 1, 'AAAAAgAAAAMAAAAHAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+IMAAAAAgAAAAUAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAAAAAAAAAAAAAAAAAABAAAACAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvhqAAAAAIAAAAFAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAAAAAAAAAAAA'); -INSERT INTO txfeehistory VALUES ('be85b5e14dcb9fe976a73cccc8bfac69be7ecec2126bfe5ecc551c683b43dcd7', 9, 1, 'AAAAAgAAAAMAAAAIAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+GoAAAAAgAAAAYAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAQAAAAAAAAAAAAAAAQAAAAkAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAlQL4UQAAAACAAAABgAAAAEAAAABAAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAAQAAAA1udWxsc3R5bGUuY29tAAAAAgACAgAAAAEAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAABAAAAAAAAAAA='); -INSERT INTO txfeehistory VALUES ('40a8f7d6e4822bf645865d779922dcdd3b43537b993e75e7165cc84ac04e0dba', 10, 1, 'AAAAAgAAAAMAAAAJAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+FEAAAAAgAAAAcAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABQAAAAAAAAAAAAAAAQAAAAoAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAlQL4OAAAAACAAAABwAAAAEAAAABAAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAAQAAAA1udWxsc3R5bGUuY29tAAAAAgACAgAAAAEAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAFAAAAAAAAAAA='); -INSERT INTO txfeehistory VALUES ('0733db959ef871e700de41cc2074cb380da7b10262d350d0be0170488554a968', 11, 1, 'AAAAAgAAAAMAAAAKAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+DgAAAAAgAAAAgAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABQAAAAAAAAAAAAAAAQAAAAsAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAlQL4HwAAAACAAAACAAAAAEAAAABAAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAAAAAAA1udWxsc3R5bGUuY29tAAAAAgACAgAAAAEAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAFAAAAAAAAAAA='); - - --- --- Data for Name: txhistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO txhistory VALUES ('b2a227c39c64a44fc7abd4c96819456f0399906d12c476d70b402bfdb296d6a3', 2, 1, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEDt3KwmaPuPdFSUxdAFeb6OQetyQKIWazlbSMMhmHKNLD4sqhEqUZcQP0l+X/Op+osWmN6+FUYbsz75Q2jG4vMM', 'sqInw5xkpE/Hq9TJaBlFbwOZkG0SxHbXC0Ar/bKW1qMAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('36be70fb7782f9801cdcedc1206e21f99293c99860a15e441f4749747a0a37ab', 2, 2, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvkAAAAAAAAAAABVvwF9wAAAEA3xWbxPObnZMiBGFKLJQufJLguTsHJxyAsPP5F9Zj561aXnvN/HVRJbFsEcitGbgi9dWVdKRYvmVWCizIdmLID', 'Nr5w+3eC+YAc3O3BIG4h+ZKTyZhgoV5EH0dJdHoKN6sAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA==', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('c76f843dd29e92bacbf21659d50454a043eae6a5ef81e2e8dc97b0e005d30962', 3, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAABAAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABruS+TAAAAEC87yJlK5zXwuklcPxhmPt9HB9YOb+0HHcN2SteSVLsjnyafNu/560Mj8/QJzfSnKm3arRVJtHgFgaSFJiywRoF', 'x2+EPdKekrrL8hZZ1QRUoEPq5qXvgeLo3Jew4AXTCWIAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('895b1e3ae3570fac549edfcc260122a2f930b35b94b1dffa9f8c2a08816ac376', 4, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABruS+TAAAAEALUnIdWXjDKFil8+3DPcIytdMco/BMWnrqyv9Hc/DQsGAOLHRdhdAVL/sVSxW7ITzpxY3bv11PDVlr/U5DdrgB', 'iVseOuNXD6xUnt/MJgEiovkws1uUsd/6n4wqCIFqw3YAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAABAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAACAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('b0bb26bbc67cc1c226293ce18f94f9766b4e5c68132c2caff7907791d1723f27', 5, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABA9mhGRBoZe3eaPDqE6/qVEp5iFBEKjErYbUzVlrtr6cD5ttn0uGzLQsVMlEgPpB82XWa7gzTRg0OykcYE8otoAg==', 'sLsmu8Z8wcImKTzhj5T5dmtOXGgTLCyv95B3kdFyPycAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvi1AAAAAIAAAACAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvi1AAAAAIAAAADAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+LUAAAAAgAAAAMAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+LUAAAAAgAAAAMAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgAAAAAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('a721bea4176539c6ed564ceafb7084a31c5deafe17ce0b52d2e2752feae47db7', 6, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAACAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAABruS+TAAAAEBE6Hv6Be+Sn9oVyHm+QedPXQwsE/U9freWjJTR8BN8qnvn6VUOzdc0U6PDQCyroLCAwh1LmK3iOmngqczf1RYG', 'pyG+pBdlOcbtVkzq+3CEoxxd6v4XzgtS0uJ1L+rkfbcAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvicAAAAAIAAAADAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvicAAAAAIAAAAEAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+JwAAAAAgAAAAQAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+JwAAAAAgAAAAQAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgACAgAAAAAAAAAAAAAAAA=='); -INSERT INTO txhistory VALUES ('ca5cd8926d50d5f94acc074b6c966e927195571cb4977e1cb7690df84529f127', 7, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADW51bGxzdHlsZS5jb20AAAAAAAAAAAAAAAAAAAGu5L5MAAAAQO5rla99y3m6umRBntLBh1Spdn1AzzIijQ++E3Xk8CrAhurEJ6Dv2MeK8lw6KCWOwOMGYQo65HIisANSOuvaBAc=', 'ylzYkm1Q1flKzAdLbJZuknGVVxy0l34ct2kN+EUp8ScAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAABwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAviDAAAAAIAAAAEAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAAAAIAAgIAAAAAAAAAAAAAAAAAAAABAAAABwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAviDAAAAAIAAAAFAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAAAAIAAgIAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAHAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+IMAAAAAgAAAAUAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgACAgAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+IMAAAAAgAAAAUAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAAAAAAAAAAAAAA='); -INSERT INTO txhistory VALUES ('eb4d35309591547be7fe2fb9c44834d20e4d569294088ac1a3d204d16e9a0751', 8, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAGAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAEAAAAAAAAAAa7kvkwAAABAyTsFJ/1kdjnOkMFPhwVKbKbgNUMVtym/khH5V677pL0kYUOCsOWWBBxA+Hq3aHyldsfdVvGdm8OyKMflFdFrDg==', '6001MJWRVHvn/i+5xEg00g5NVpKUCIrBo9IE0W6aB1EAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAACAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvhqAAAAAIAAAAFAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAAAAAAAAAAAAAAAAAQAAAAgAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAlQL4agAAAACAAAABgAAAAAAAAABAAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAAQAAAA1udWxsc3R5bGUuY29tAAAAAgACAgAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAAAAgAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAlQL4agAAAACAAAABgAAAAAAAAABAAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAAQAAAA1udWxsc3R5bGUuY29tAAAAAgACAgAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+GoAAAAAgAAAAYAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAQAAAAAAAAAA'); -INSERT INTO txhistory VALUES ('be85b5e14dcb9fe976a73cccc8bfac69be7ecec2126bfe5ecc551c683b43dcd7', 9, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAHAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAUAAAAAAAAAAa7kvkwAAABA/+toY7hGHaUzr6718ZjScST+WjFgYNU9Qse1wPqVO6U/CMVZPy6ZzimkiXFxcBc3py1BeYm3CA+YCqKrHRzABQ==', 'voW14U3Ln+l2pzzMyL+sab5+zsISa/5ezFUcaDtD3NcAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAACQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvhRAAAAAIAAAAGAAAAAQAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAEAAAAAAAAAAAAAAAEAAAAJAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+FEAAAAAgAAAAcAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAQAAAAAAAAAAAAAAAQAAAAIAAAADAAAACQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvhRAAAAAIAAAAHAAAAAQAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAEAAAAAAAAAAAAAAAEAAAAJAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+FEAAAAAgAAAAcAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABQAAAAAAAAAA'); -INSERT INTO txhistory VALUES ('40a8f7d6e4822bf645865d779922dcdd3b43537b993e75e7165cc84ac04e0dba', 10, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAIAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABruS+TAAAAEB9KMKKASiNjFhFaahxinyc2cQQv7EAiQtBT60YRSgz4/2dANcXocCkB3EQFpeXvoXjxxJEMtEqV2NXPdByxvIO', 'QKj31uSCK/ZFhl13mSLc3TtDU3uZPnXnFlzISsBODboAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAACgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvg4AAAAAIAAAAHAAAAAQAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAUAAAAAAAAAAAAAAAEAAAAKAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+DgAAAAAgAAAAgAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABQAAAAAAAAAAAAAAAQAAAAIAAAADAAAACgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvg4AAAAAIAAAAIAAAAAQAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAUAAAAAAAAAAAAAAAEAAAAKAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+DgAAAAAgAAAAgAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABQAAAAAAAAAA'); -INSERT INTO txhistory VALUES ('0733db959ef871e700de41cc2074cb380da7b10262d350d0be0170488554a968', 11, 1, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAJAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAAAAAAAAAAAa7kvkwAAABA1/EWaAPOlu4RG89UlMpXLQHlk9dwMy/TLmJ7ttCT7UxJ9kSU4CbXVUG/i7yGxSrs9v8gVKLFxtTIlXlNbHb0AQ==', 'BzPblZ74cecA3kHMIHTLOA2nsQJi01DQvgFwSIVUqWgAAAAAAAAAZAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAA==', 'AAAAAQAAAAIAAAADAAAACwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvgfAAAAAIAAAAIAAAAAQAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAAAAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAUAAAAAAAAAAAAAAAEAAAALAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+B8AAAAAgAAAAkAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABQAAAAAAAAAAAAAAAQAAAAIAAAADAAAACwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvgfAAAAAIAAAAJAAAAAQAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAAAAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAUAAAAAAAAAAAAAAAEAAAALAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+B8AAAAAgAAAAkAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAAAAAAAAAAAAAA='); - - --- --- Data for Name: upgradehistory; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO upgradehistory VALUES (2, 1, 'AAAAAQAAAAs=', 'AAAAAA=='); -INSERT INTO upgradehistory VALUES (2, 2, 'AAAAAwAPQkA=', 'AAAAAA=='); - - --- --- Name: accountdata accountdata_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accountdata - ADD CONSTRAINT accountdata_pkey PRIMARY KEY (accountid, dataname); - - --- --- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY accounts - ADD CONSTRAINT accounts_pkey PRIMARY KEY (accountid); - - --- --- Name: ban ban_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ban - ADD CONSTRAINT ban_pkey PRIMARY KEY (nodeid); - - --- --- Name: ledgerheaders ledgerheaders_ledgerseq_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_ledgerseq_key UNIQUE (ledgerseq); - - --- --- Name: ledgerheaders ledgerheaders_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY ledgerheaders - ADD CONSTRAINT ledgerheaders_pkey PRIMARY KEY (ledgerhash); - - --- --- Name: offers offers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY offers - ADD CONSTRAINT offers_pkey PRIMARY KEY (offerid); - - --- --- Name: peers peers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY peers - ADD CONSTRAINT peers_pkey PRIMARY KEY (ip, port); - - --- --- Name: publishqueue publishqueue_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY publishqueue - ADD CONSTRAINT publishqueue_pkey PRIMARY KEY (ledger); - - --- --- Name: pubsub pubsub_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY pubsub - ADD CONSTRAINT pubsub_pkey PRIMARY KEY (resid); - - --- --- Name: quoruminfo quoruminfo_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY quoruminfo - ADD CONSTRAINT quoruminfo_pkey PRIMARY KEY (nodeid); - - --- --- Name: scpquorums scpquorums_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY scpquorums - ADD CONSTRAINT scpquorums_pkey PRIMARY KEY (qsethash); - - --- --- Name: storestate storestate_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY storestate - ADD CONSTRAINT storestate_pkey PRIMARY KEY (statename); - - --- --- Name: trustlines trustlines_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY trustlines - ADD CONSTRAINT trustlines_pkey PRIMARY KEY (accountid, issuer, assetcode); - - --- --- Name: txfeehistory txfeehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txfeehistory - ADD CONSTRAINT txfeehistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: txhistory txhistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY txhistory - ADD CONSTRAINT txhistory_pkey PRIMARY KEY (ledgerseq, txindex); - - --- --- Name: upgradehistory upgradehistory_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY upgradehistory - ADD CONSTRAINT upgradehistory_pkey PRIMARY KEY (ledgerseq, upgradeindex); - - --- --- Name: accountbalances; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX accountbalances ON accounts USING btree (balance) WHERE (balance >= 1000000000); - - --- --- Name: bestofferindex; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX bestofferindex ON offers USING btree (sellingasset, buyingasset, price); - - --- --- Name: histbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histbyseq ON txhistory USING btree (ledgerseq); - - --- --- Name: histfeebyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX histfeebyseq ON txfeehistory USING btree (ledgerseq); - - --- --- Name: ledgersbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX ledgersbyseq ON ledgerheaders USING btree (ledgerseq); - - --- --- Name: scpenvsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpenvsbyseq ON scphistory USING btree (ledgerseq); - - --- --- Name: scpquorumsbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX scpquorumsbyseq ON scpquorums USING btree (lastledgerseq); - - --- --- Name: upgradehistbyseq; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX upgradehistbyseq ON upgradehistory USING btree (ledgerseq); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/set_options-horizon.sql b/services/horizon/internal/test/scenarios/set_options-horizon.sql deleted file mode 100644 index 538e3085f1..0000000000 --- a/services/horizon/internal/test/scenarios/set_options-horizon.sql +++ /dev/null @@ -1,1005 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.6.1 --- Dumped by pg_dump version 9.6.1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; - -SET search_path = public, pg_catalog; - -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_counter_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_asset_id_fkey; -ALTER TABLE IF EXISTS ONLY public.history_trades DROP CONSTRAINT IF EXISTS history_trades_base_account_id_fkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_id_fkey; -DROP INDEX IF EXISTS public.trade_effects_by_order_book; -DROP INDEX IF EXISTS public.index_history_transactions_on_id; -DROP INDEX IF EXISTS public.index_history_operations_on_type; -DROP INDEX IF EXISTS public.index_history_operations_on_transaction_id; -DROP INDEX IF EXISTS public.index_history_operations_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_sequence; -DROP INDEX IF EXISTS public.index_history_ledgers_on_previous_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_ledger_hash; -DROP INDEX IF EXISTS public.index_history_ledgers_on_importer_version; -DROP INDEX IF EXISTS public.index_history_ledgers_on_id; -DROP INDEX IF EXISTS public.index_history_ledgers_on_closed_at; -DROP INDEX IF EXISTS public.index_history_effects_on_type; -DROP INDEX IF EXISTS public.index_history_accounts_on_id; -DROP INDEX IF EXISTS public.index_history_accounts_on_address; -DROP INDEX IF EXISTS public.htrd_time_lookup; -DROP INDEX IF EXISTS public.htrd_pid; -DROP INDEX IF EXISTS public.htrd_pair_time_lookup; -DROP INDEX IF EXISTS public.htrd_counter_lookup; -DROP INDEX IF EXISTS public.htrd_by_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_offer; -DROP INDEX IF EXISTS public.htrd_by_counter_account; -DROP INDEX IF EXISTS public.htrd_by_base_offer; -DROP INDEX IF EXISTS public.htrd_by_base_account; -DROP INDEX IF EXISTS public.htp_by_htid; -DROP INDEX IF EXISTS public.hs_transaction_by_id; -DROP INDEX IF EXISTS public.hs_ledger_by_id; -DROP INDEX IF EXISTS public.hop_by_hoid; -DROP INDEX IF EXISTS public.hist_tx_p_id; -DROP INDEX IF EXISTS public.hist_op_p_id; -DROP INDEX IF EXISTS public.hist_e_id; -DROP INDEX IF EXISTS public.hist_e_by_order; -DROP INDEX IF EXISTS public.by_ledger; -DROP INDEX IF EXISTS public.by_hash; -DROP INDEX IF EXISTS public.by_account; -DROP INDEX IF EXISTS public.asset_by_issuer; -DROP INDEX IF EXISTS public.asset_by_code; -ALTER TABLE IF EXISTS ONLY public.history_transaction_participants DROP CONSTRAINT IF EXISTS history_transaction_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_operation_participants DROP CONSTRAINT IF EXISTS history_operation_participants_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_pkey; -ALTER TABLE IF EXISTS ONLY public.history_assets DROP CONSTRAINT IF EXISTS history_assets_asset_code_asset_type_asset_issuer_key; -ALTER TABLE IF EXISTS ONLY public.gorp_migrations DROP CONSTRAINT IF EXISTS gorp_migrations_pkey; -ALTER TABLE IF EXISTS ONLY public.asset_stats DROP CONSTRAINT IF EXISTS asset_stats_pkey; -ALTER TABLE IF EXISTS public.history_transaction_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_operation_participants ALTER COLUMN id DROP DEFAULT; -ALTER TABLE IF EXISTS public.history_assets ALTER COLUMN id DROP DEFAULT; -DROP TABLE IF EXISTS public.history_transactions; -DROP SEQUENCE IF EXISTS public.history_transaction_participants_id_seq; -DROP TABLE IF EXISTS public.history_transaction_participants; -DROP TABLE IF EXISTS public.history_trades; -DROP TABLE IF EXISTS public.history_operations; -DROP SEQUENCE IF EXISTS public.history_operation_participants_id_seq; -DROP TABLE IF EXISTS public.history_operation_participants; -DROP TABLE IF EXISTS public.history_ledgers; -DROP TABLE IF EXISTS public.history_effects; -DROP SEQUENCE IF EXISTS public.history_assets_id_seq; -DROP TABLE IF EXISTS public.history_assets; -DROP TABLE IF EXISTS public.history_accounts; -DROP SEQUENCE IF EXISTS public.history_accounts_id_seq; -DROP TABLE IF EXISTS public.gorp_migrations; -DROP TABLE IF EXISTS public.asset_stats; -DROP AGGREGATE IF EXISTS public.min_price(numeric[]); -DROP AGGREGATE IF EXISTS public.max_price(numeric[]); -DROP AGGREGATE IF EXISTS public.last(anyelement); -DROP AGGREGATE IF EXISTS public.first(anyelement); -DROP FUNCTION IF EXISTS public.min_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.max_price_agg(numeric[], numeric[]); -DROP FUNCTION IF EXISTS public.last_agg(anyelement, anyelement); -DROP FUNCTION IF EXISTS public.first_agg(anyelement, anyelement); -DROP EXTENSION IF EXISTS plpgsql; -DROP SCHEMA IF EXISTS public; --- --- Name: public; Type: SCHEMA; Schema: -; Owner: - --- - -CREATE SCHEMA public; - - --- --- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON SCHEMA public IS 'standard public schema'; - - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: first_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION first_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $1 $_$; - - --- --- Name: last_agg(anyelement, anyelement); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION last_agg(anyelement, anyelement) RETURNS anyelement - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT $2 $_$; - - --- --- Name: max_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION max_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]>$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: min_price_agg(numeric[], numeric[]); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION min_price_agg(numeric[], numeric[]) RETURNS numeric[] - LANGUAGE sql IMMUTABLE STRICT - AS $_$ SELECT ( - CASE WHEN $1[1]/$1[2]<$2[1]/$2[2] THEN $1 ELSE $2 END) $_$; - - --- --- Name: first(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE first(anyelement) ( - SFUNC = first_agg, - STYPE = anyelement -); - - --- --- Name: last(anyelement); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE last(anyelement) ( - SFUNC = last_agg, - STYPE = anyelement -); - - --- --- Name: max_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE max_price(numeric[]) ( - SFUNC = max_price_agg, - STYPE = numeric[] -); - - --- --- Name: min_price(numeric[]); Type: AGGREGATE; Schema: public; Owner: - --- - -CREATE AGGREGATE min_price(numeric[]) ( - SFUNC = min_price_agg, - STYPE = numeric[] -); - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: asset_stats; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE asset_stats ( - id bigint NOT NULL, - amount character varying NOT NULL, - num_accounts integer NOT NULL, - flags smallint NOT NULL, - toml character varying(255) NOT NULL -); - - --- --- Name: gorp_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE gorp_migrations ( - id text NOT NULL, - applied_at timestamp with time zone -); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_accounts_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_accounts; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_accounts ( - id bigint DEFAULT nextval('history_accounts_id_seq'::regclass) NOT NULL, - address character varying(64) -); - - --- --- Name: history_assets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_assets ( - id integer NOT NULL, - asset_type character varying(64) NOT NULL, - asset_code character varying(12) NOT NULL, - asset_issuer character varying(56) NOT NULL -); - - --- --- Name: history_assets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_assets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_assets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_assets_id_seq OWNED BY history_assets.id; - - --- --- Name: history_effects; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_effects ( - history_account_id bigint NOT NULL, - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - type integer NOT NULL, - details jsonb -); - - --- --- Name: history_ledgers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_ledgers ( - sequence integer NOT NULL, - ledger_hash character varying(64) NOT NULL, - previous_ledger_hash character varying(64), - transaction_count integer DEFAULT 0 NOT NULL, - operation_count integer DEFAULT 0 NOT NULL, - closed_at timestamp without time zone NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - importer_version integer DEFAULT 1 NOT NULL, - total_coins bigint NOT NULL, - fee_pool bigint NOT NULL, - base_fee integer NOT NULL, - base_reserve integer NOT NULL, - max_tx_set_size integer NOT NULL, - protocol_version integer DEFAULT 0 NOT NULL, - ledger_header text, - successful_transaction_count integer, - failed_transaction_count integer -); - - --- --- Name: history_operation_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operation_participants ( - id integer NOT NULL, - history_operation_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_operation_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_operation_participants_id_seq OWNED BY history_operation_participants.id; - - --- --- Name: history_operations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_operations ( - id bigint NOT NULL, - transaction_id bigint NOT NULL, - application_order integer NOT NULL, - type integer NOT NULL, - details jsonb, - source_account character varying(64) DEFAULT ''::character varying NOT NULL -); - - --- --- Name: history_trades; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_trades ( - history_operation_id bigint NOT NULL, - "order" integer NOT NULL, - ledger_closed_at timestamp without time zone NOT NULL, - offer_id bigint NOT NULL, - base_account_id bigint NOT NULL, - base_asset_id bigint NOT NULL, - base_amount bigint NOT NULL, - counter_account_id bigint NOT NULL, - counter_asset_id bigint NOT NULL, - counter_amount bigint NOT NULL, - base_is_seller boolean, - price_n bigint, - price_d bigint, - base_offer_id bigint, - counter_offer_id bigint, - CONSTRAINT history_trades_base_amount_check CHECK ((base_amount > 0)), - CONSTRAINT history_trades_check CHECK ((base_asset_id < counter_asset_id)), - CONSTRAINT history_trades_counter_amount_check CHECK ((counter_amount > 0)) -); - - --- --- Name: history_transaction_participants; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transaction_participants ( - id integer NOT NULL, - history_transaction_id bigint NOT NULL, - history_account_id bigint NOT NULL -); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE history_transaction_participants_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE history_transaction_participants_id_seq OWNED BY history_transaction_participants.id; - - --- --- Name: history_transactions; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE history_transactions ( - transaction_hash character varying(64) NOT NULL, - ledger_sequence integer NOT NULL, - application_order integer NOT NULL, - account character varying(64) NOT NULL, - account_sequence bigint NOT NULL, - max_fee integer NOT NULL, - operation_count integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - id bigint, - tx_envelope text NOT NULL, - tx_result text NOT NULL, - tx_meta text NOT NULL, - tx_fee_meta text NOT NULL, - signatures character varying(96)[] DEFAULT '{}'::character varying[] NOT NULL, - memo_type character varying DEFAULT 'none'::character varying NOT NULL, - memo character varying, - time_bounds int8range, - successful boolean, - fee_charged integer -); - - --- --- Name: history_assets id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets ALTER COLUMN id SET DEFAULT nextval('history_assets_id_seq'::regclass); - - --- --- Name: history_operation_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants ALTER COLUMN id SET DEFAULT nextval('history_operation_participants_id_seq'::regclass); - - --- --- Name: history_transaction_participants id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants ALTER COLUMN id SET DEFAULT nextval('history_transaction_participants_id_seq'::regclass); - - --- --- Data for Name: asset_stats; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: gorp_migrations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO gorp_migrations VALUES ('1_initial_schema.sql', '2019-06-03 18:28:47.032496+02'); -INSERT INTO gorp_migrations VALUES ('2_index_participants_by_toid.sql', '2019-06-03 18:28:47.039657+02'); -INSERT INTO gorp_migrations VALUES ('3_use_sequence_in_history_accounts.sql', '2019-06-03 18:28:47.044048+02'); -INSERT INTO gorp_migrations VALUES ('4_add_protocol_version.sql', '2019-06-03 18:28:47.054532+02'); -INSERT INTO gorp_migrations VALUES ('5_create_trades_table.sql', '2019-06-03 18:28:47.063028+02'); -INSERT INTO gorp_migrations VALUES ('6_create_assets_table.sql', '2019-06-03 18:28:47.068415+02'); -INSERT INTO gorp_migrations VALUES ('7_modify_trades_table.sql', '2019-06-03 18:28:47.081625+02'); -INSERT INTO gorp_migrations VALUES ('8_create_asset_stats_table.sql', '2019-06-03 18:28:47.087463+02'); -INSERT INTO gorp_migrations VALUES ('8_add_aggregators.sql', '2019-06-03 18:28:47.090109+02'); -INSERT INTO gorp_migrations VALUES ('9_add_header_xdr.sql', '2019-06-03 18:28:47.092718+02'); -INSERT INTO gorp_migrations VALUES ('10_add_trades_price.sql', '2019-06-03 18:28:47.095973+02'); -INSERT INTO gorp_migrations VALUES ('11_add_trades_account_index.sql', '2019-06-03 18:28:47.099698+02'); -INSERT INTO gorp_migrations VALUES ('12_asset_stats_amount_string.sql', '2019-06-03 18:28:47.107549+02'); -INSERT INTO gorp_migrations VALUES ('13_trade_offer_ids.sql', '2019-06-03 18:28:47.112768+02'); -INSERT INTO gorp_migrations VALUES ('14_fix_asset_toml_field.sql', '2019-06-03 18:28:47.115116+02'); -INSERT INTO gorp_migrations VALUES ('15_ledger_failed_txs.sql', '2019-06-03 18:28:47.116796+02'); -INSERT INTO gorp_migrations VALUES ('16_ingest_failed_transactions.sql', '2019-06-03 18:28:47.117989+02'); -INSERT INTO gorp_migrations VALUES ('17_transaction_fee_paid.sql', '2019-06-03 18:28:47.120034+02'); - - --- --- Data for Name: history_accounts; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_accounts VALUES (1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_accounts VALUES (2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_accounts VALUES (3, 'GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2'); - - --- --- Name: history_accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_accounts_id_seq', 3, true); - - --- --- Data for Name: history_assets; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Name: history_assets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_assets_id_seq', 1, false); - - --- --- Data for Name: history_effects; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_effects VALUES (1, 47244644353, 1, 12, '{"weight": 2, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); -INSERT INTO history_effects VALUES (1, 47244644353, 2, 11, '{"public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 42949677057, 1, 6, '{"auth_required_flag": false}'); -INSERT INTO history_effects VALUES (1, 38654709761, 1, 12, '{"weight": 2, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); -INSERT INTO history_effects VALUES (1, 38654709761, 2, 12, '{"weight": 5, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 34359742465, 1, 12, '{"weight": 2, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); -INSERT INTO history_effects VALUES (1, 34359742465, 2, 10, '{"weight": 1, "public_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4"}'); -INSERT INTO history_effects VALUES (1, 30064775169, 1, 5, '{"home_domain": "nullstyle.com"}'); -INSERT INTO history_effects VALUES (1, 25769807873, 1, 4, '{"low_threshold": 0, "med_threshold": 2, "high_threshold": 2}'); -INSERT INTO history_effects VALUES (1, 21474840577, 1, 12, '{"weight": 2, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); -INSERT INTO history_effects VALUES (1, 17179873281, 1, 6, '{"auth_required_flag": true}'); -INSERT INTO history_effects VALUES (1, 12884905985, 1, 7, '{"inflation_destination": "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"}'); -INSERT INTO history_effects VALUES (1, 8589938689, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (2, 8589938689, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (1, 8589938689, 3, 10, '{"weight": 1, "public_key": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 1, 0, '{"starting_balance": "1000.0000000"}'); -INSERT INTO history_effects VALUES (2, 8589942785, 2, 3, '{"amount": "1000.0000000", "asset_type": "native"}'); -INSERT INTO history_effects VALUES (3, 8589942785, 3, 10, '{"weight": 1, "public_key": "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"}'); - - --- --- Data for Name: history_ledgers; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_ledgers VALUES (12, '9999d91f3b3fe61b50fb8dd51716d268efb2091e09493bf1833d82645f80fc91', '3679fc5ada51dd679dad07b49277b45331c929843647e38f8099bc6487b4d5f7', 0, 0, '2019-06-03 16:34:29', '2019-06-03 16:34:22.128698', '2019-06-03 16:34:22.128698', 51539607552, 16, 1000000000000000000, 1100, 100, 100000000, 1000000, 11, 'AAAACzZ5/FraUd1nna0HtJJ3tFMxySmENkfjj4CZvGSHtNX3vJ6LFe/P/b9RjvgtlTxEmPYUN/Dvo1L/PbZda52LMoMAAAAAXPVMFQAAAAAAAAAA3z9hmASpL9tAVxktxD3XSOp3itxSvEmM6AUkwBS4ERmWp4p2QkE9GwZuN2n3qGM1lHA1BrHQRTI9Zkra+jDGwwAAAAwN4Lazp2QAAAAAAAAAAARMAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); -INSERT INTO history_ledgers VALUES (11, '3679fc5ada51dd679dad07b49277b45331c929843647e38f8099bc6487b4d5f7', 'f754c3019b8d1ac1ebceeb116dd05e96f74b6cd55f30861321284e95c6e36cae', 1, 1, '2019-06-03 16:34:28', '2019-06-03 16:34:22.1378', '2019-06-03 16:34:22.1378', 47244640256, 16, 1000000000000000000, 1100, 100, 100000000, 1000000, 11, 'AAAAC/dUwwGbjRrB687rEW3QXpb3S2zVXzCGEyEoTpXG42yuogRrNAKIZmlEWbVSH+okwOl06RSo2ock1dSH/MLAn54AAAAAXPVMFAAAAAAAAAAAmFwOlFqcVdyetl3vjpiXLbSMzYVia44vS0tbRk58Yzw3716BA2Zv2NaIz+P7XLEAQFpBAO8w1ps9TCl1hJenwAAAAAsN4Lazp2QAAAAAAAAAAARMAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (10, 'f754c3019b8d1ac1ebceeb116dd05e96f74b6cd55f30861321284e95c6e36cae', '28a7ec46838d03a8fe4b902231fcaaa815a9148833c2a11ed61e85a25ff54231', 1, 1, '2019-06-03 16:34:27', '2019-06-03 16:34:22.153377', '2019-06-03 16:34:22.153378', 42949672960, 16, 1000000000000000000, 1000, 100, 100000000, 1000000, 11, 'AAAACyin7EaDjQOo/kuQIjH8qqgVqRSIM8KhHtYehaJf9UIxnZmwfkZsLq6DCAQYDzFs473n32zU5YcmFBI+nmdMsFMAAAAAXPVMEwAAAAAAAAAA6lRE0phahaqqFmy0QiHScS5fiHWsfSsqZJ0lki7J1+Fbtb9/FPPF5NyAqzicTGyIIYonSi2AzAyRenfeYZa5GQAAAAoN4Lazp2QAAAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (9, '28a7ec46838d03a8fe4b902231fcaaa815a9148833c2a11ed61e85a25ff54231', 'c45d427098c8a2f40969aea6d6a7d338cc3661e9aaf457c635213e014a3145a1', 1, 1, '2019-06-03 16:34:26', '2019-06-03 16:34:22.167393', '2019-06-03 16:34:22.167393', 38654705664, 16, 1000000000000000000, 900, 100, 100000000, 1000000, 11, 'AAAAC8RdQnCYyKL0CWmuptan0zjMNmHpqvRXxjUhPgFKMUWhqPH/M7+HU9yt899GG6Ya5NY//xUvsco3TZgMSEWFBNcAAAAAXPVMEgAAAAAAAAAAPOhxFEK89OWazUrqiNnGGEHhUviPsqFuH3eqjSDcylztG/obpZKWaZPKK88398WP1ps09rnOlmVI9jjOlYClmgAAAAkN4Lazp2QAAAAAAAAAAAOEAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (8, 'c45d427098c8a2f40969aea6d6a7d338cc3661e9aaf457c635213e014a3145a1', '4df17ea9d0cc9aeddc13c16dd068476ec1164301fbf46f4ee661ac7ed605a9c4', 1, 1, '2019-06-03 16:34:25', '2019-06-03 16:34:22.179875', '2019-06-03 16:34:22.179875', 34359738368, 16, 1000000000000000000, 800, 100, 100000000, 1000000, 11, 'AAAAC03xfqnQzJrt3BPBbdBoR27BFkMB+/RvTuZhrH7WBanELKSJoHCW5kbaB07wCl8VLvXu+kjqkC6gvAw6frHIMxMAAAAAXPVMEQAAAAAAAAAAJ0ts4/XYQta2CPBn5gpjCmmaaT6lvEUhsrs3yyYWo8ktE39EgOYZQwDeg0D8fb8cG6QSx1jzmJ7gET1REz6oUwAAAAgN4Lazp2QAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (7, '4df17ea9d0cc9aeddc13c16dd068476ec1164301fbf46f4ee661ac7ed605a9c4', '36d65ea84c2643e925dfdf1ceefdd84c35259906e8ba0ab4809ae6d656ae5f78', 1, 1, '2019-06-03 16:34:24', '2019-06-03 16:34:22.190748', '2019-06-03 16:34:22.190748', 30064771072, 16, 1000000000000000000, 700, 100, 100000000, 1000000, 11, 'AAAACzbWXqhMJkPpJd/fHO792Ew1JZkG6LoKtICa5tZWrl943bb/FAu8h6y7ka5T43YcfrULc0N/F1jh+q5AwqlbeEUAAAAAXPVMEAAAAAAAAAAA86p35r63mMyyIdwFy/OVIQnYahLVbx+xS7RU2RGWQgC3chURf6S1SFSPkplMWppqyyJi6aNhWB2H6aL2YEdVigAAAAcN4Lazp2QAAAAAAAAAAAK8AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (6, '36d65ea84c2643e925dfdf1ceefdd84c35259906e8ba0ab4809ae6d656ae5f78', '1424e4f9d3f467c4f5a4251898f5000ed7c0c194526b4502c680587f6f1ea996', 1, 1, '2019-06-03 16:34:23', '2019-06-03 16:34:22.205422', '2019-06-03 16:34:22.205422', 25769803776, 16, 1000000000000000000, 600, 100, 100000000, 1000000, 11, 'AAAACxQk5PnT9GfE9aQlGJj1AA7XwMGUUmtFAsaAWH9vHqmWD9DGJ5+d5sSmI9bjNgGTXerv+WD4xP3BOPMEECCol8kAAAAAXPVMDwAAAAAAAAAAQKGf90N/CebuaXWxlpPbcziaBUE4wyo+nOmUW36ADtvPxeRgTcTHm5eTIa5p2B9Q2mseGEmFR3I6iaX6srDbTwAAAAYN4Lazp2QAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (5, '1424e4f9d3f467c4f5a4251898f5000ed7c0c194526b4502c680587f6f1ea996', '1a299f3d0ad50ca8031366d768567816732458b34c38f8f7c23a91aa16295d3f', 1, 1, '2019-06-03 16:34:22', '2019-06-03 16:34:22.220751', '2019-06-03 16:34:22.220751', 21474836480, 16, 1000000000000000000, 500, 100, 100000000, 1000000, 11, 'AAAACxopnz0K1QyoAxNm12hWeBZzJFizTDj498I6kaoWKV0/hJ8Od3RVfTUIfqvlCt+uS5GhtDPyoqy5wQudrb+OH6gAAAAAXPVMDgAAAAAAAAAAbJCOaKm2CaEJkDvk9WFgcQA3JpN23CxDI5jTyWfntcipGLpzR+cfAzAOWLDYfnFpkkleMZh91/AtRDA6Jf3loQAAAAUN4Lazp2QAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (4, '1a299f3d0ad50ca8031366d768567816732458b34c38f8f7c23a91aa16295d3f', 'bfbcceca2072574d4a222914d06b7d72a3c5eef2678386fce259e83803faf0ed', 1, 1, '2019-06-03 16:34:21', '2019-06-03 16:34:22.234906', '2019-06-03 16:34:22.234906', 17179869184, 16, 1000000000000000000, 400, 100, 100000000, 1000000, 11, 'AAAAC7+8zsogcldNSiIpFNBrfXKjxe7yZ4OG/OJZ6DgD+vDt/yKdDN/1lGUfFOt2+TZcTSpKHZxveagU6dtAgwdQGtsAAAAAXPVMDQAAAAAAAAAAa1i3djL4JG2U0qym2CMoeBxlr+vmeubZ7vGC4ngh49LIQ/16bVEVOUEZI1hdSNia2Qfc0UOGLG50QJF4pm+4KAAAAAQN4Lazp2QAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (3, 'bfbcceca2072574d4a222914d06b7d72a3c5eef2678386fce259e83803faf0ed', '1a71940fe8ae84e5f666bbf10db0e586c65994e993116ff59e41284893ae2dd2', 1, 1, '2019-06-03 16:34:20', '2019-06-03 16:34:22.248526', '2019-06-03 16:34:22.248527', 12884901888, 16, 1000000000000000000, 300, 100, 100000000, 1000000, 11, 'AAAACxpxlA/oroTl9ma78Q2w5YbGWZTpkxFv9Z5BKEiTri3S7NHzMgrBivilr5huQCflO7xm/vgO9jgiPmaTCgPqFvUAAAAAXPVMDAAAAAAAAAAAWytPxoudFtBA+XPgoX68OnSpyq0CyNJxb/gkM8zhiqJPu3JSyhDbjcXwfeovfexOIl5rRh0PVy0LwJIIEQB9rgAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 1, 0); -INSERT INTO history_ledgers VALUES (2, '1a71940fe8ae84e5f666bbf10db0e586c65994e993116ff59e41284893ae2dd2', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 2, 2, '2019-06-03 16:34:19', '2019-06-03 16:34:22.259472', '2019-06-03 16:34:22.259472', 8589934592, 16, 1000000000000000000, 200, 100, 100000000, 1000000, 11, 'AAAAC2PZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZUeFWh3+LY3YTHkhb6t+XikT48AKVUrh+INl3MY9NNtUAAAAAXPVMCwAAAAIAAAAIAAAAAQAAAAsAAAAIAAAAAwAPQkAAAAAAwWNZfI5WyFWx2m7ToNQChYZ5zqFrwog2j0kXqQNLArtN2TO2LFA9TnGvtSXzVXPGsEKNjz6KeMhJOAlaXWd4vwAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 2, 0); -INSERT INTO history_ledgers VALUES (1, '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', NULL, 0, 0, '1970-01-01 00:00:00', '2019-06-03 16:34:22.272299', '2019-06-03 16:34:22.272299', 4294967296, 16, 1000000000000000000, 0, 100, 100000000, 100, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 0, 0); - - --- --- Data for Name: history_operation_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operation_participants VALUES (1, 47244644353, 1); -INSERT INTO history_operation_participants VALUES (2, 42949677057, 1); -INSERT INTO history_operation_participants VALUES (3, 38654709761, 1); -INSERT INTO history_operation_participants VALUES (4, 34359742465, 1); -INSERT INTO history_operation_participants VALUES (5, 30064775169, 1); -INSERT INTO history_operation_participants VALUES (6, 25769807873, 1); -INSERT INTO history_operation_participants VALUES (7, 21474840577, 1); -INSERT INTO history_operation_participants VALUES (8, 17179873281, 1); -INSERT INTO history_operation_participants VALUES (9, 12884905985, 1); -INSERT INTO history_operation_participants VALUES (10, 8589938689, 2); -INSERT INTO history_operation_participants VALUES (11, 8589938689, 1); -INSERT INTO history_operation_participants VALUES (12, 8589942785, 3); -INSERT INTO history_operation_participants VALUES (13, 8589942785, 2); - - --- --- Name: history_operation_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_operation_participants_id_seq', 13, true); - - --- --- Data for Name: history_operations; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_operations VALUES (47244644353, 47244644352, 1, 5, '{"signer_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "signer_weight": 0}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (42949677057, 42949677056, 1, 5, '{"clear_flags": [1], "clear_flags_s": ["auth_required"]}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (38654709761, 38654709760, 1, 5, '{"signer_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "signer_weight": 5}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (34359742465, 34359742464, 1, 5, '{"signer_key": "GC23QF2HUE52AMXUFUH3AYJAXXGXXV2VHXYYR6EYXETPKDXZSAW67XO4", "signer_weight": 1}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (30064775169, 30064775168, 1, 5, '{"home_domain": "nullstyle.com"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (25769807873, 25769807872, 1, 5, '{"low_threshold": 0, "med_threshold": 2, "high_threshold": 2}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (21474840577, 21474840576, 1, 5, '{"master_key_weight": 2}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (17179873281, 17179873280, 1, 5, '{"set_flags": [1], "set_flags_s": ["auth_required"]}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (12884905985, 12884905984, 1, 5, '{"inflation_dest": "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2"}', 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU'); -INSERT INTO history_operations VALUES (8589938689, 8589938688, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); -INSERT INTO history_operations VALUES (8589942785, 8589942784, 1, 0, '{"funder": "GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H", "account": "GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2", "starting_balance": "1000.0000000"}', 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H'); - - --- --- Data for Name: history_trades; Type: TABLE DATA; Schema: public; Owner: - --- - - - --- --- Data for Name: history_transaction_participants; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transaction_participants VALUES (1, 47244644352, 1); -INSERT INTO history_transaction_participants VALUES (2, 42949677056, 1); -INSERT INTO history_transaction_participants VALUES (3, 38654709760, 1); -INSERT INTO history_transaction_participants VALUES (4, 34359742464, 1); -INSERT INTO history_transaction_participants VALUES (5, 30064775168, 1); -INSERT INTO history_transaction_participants VALUES (6, 25769807872, 1); -INSERT INTO history_transaction_participants VALUES (7, 21474840576, 1); -INSERT INTO history_transaction_participants VALUES (8, 17179873280, 1); -INSERT INTO history_transaction_participants VALUES (9, 12884905984, 1); -INSERT INTO history_transaction_participants VALUES (10, 8589938688, 2); -INSERT INTO history_transaction_participants VALUES (11, 8589938688, 1); -INSERT INTO history_transaction_participants VALUES (12, 8589942784, 2); -INSERT INTO history_transaction_participants VALUES (13, 8589942784, 3); - - --- --- Name: history_transaction_participants_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - --- - -SELECT pg_catalog.setval('history_transaction_participants_id_seq', 13, true); - - --- --- Data for Name: history_transactions; Type: TABLE DATA; Schema: public; Owner: - --- - -INSERT INTO history_transactions VALUES ('0733db959ef871e700de41cc2074cb380da7b10262d350d0be0170488554a968', 11, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934601, 100, 1, '2019-06-03 16:34:22.137982', '2019-06-03 16:34:22.137982', 47244644352, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAJAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAAAAAAAAAAAAa7kvkwAAABA1/EWaAPOlu4RG89UlMpXLQHlk9dwMy/TLmJ7ttCT7UxJ9kSU4CbXVUG/i7yGxSrs9v8gVKLFxtTIlXlNbHb0AQ==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAACwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvgfAAAAAIAAAAIAAAAAQAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAAAAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAUAAAAAAAAAAAAAAAEAAAALAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+B8AAAAAgAAAAkAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABQAAAAAAAAAAAAAAAQAAAAIAAAADAAAACwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvgfAAAAAIAAAAJAAAAAQAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAAAAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAUAAAAAAAAAAAAAAAEAAAALAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+B8AAAAAgAAAAkAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAAAAAAAAAAAAAA=', 'AAAAAgAAAAMAAAAKAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+DgAAAAAgAAAAgAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABQAAAAAAAAAAAAAAAQAAAAsAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAlQL4HwAAAACAAAACAAAAAEAAAABAAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAAAAAAA1udWxsc3R5bGUuY29tAAAAAgACAgAAAAEAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAFAAAAAAAAAAA=', '{1/EWaAPOlu4RG89UlMpXLQHlk9dwMy/TLmJ7ttCT7UxJ9kSU4CbXVUG/i7yGxSrs9v8gVKLFxtTIlXlNbHb0AQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('40a8f7d6e4822bf645865d779922dcdd3b43537b993e75e7165cc84ac04e0dba', 10, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934600, 100, 1, '2019-06-03 16:34:22.153528', '2019-06-03 16:34:22.153528', 42949677056, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAIAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABruS+TAAAAEB9KMKKASiNjFhFaahxinyc2cQQv7EAiQtBT60YRSgz4/2dANcXocCkB3EQFpeXvoXjxxJEMtEqV2NXPdByxvIO', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAACgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvg4AAAAAIAAAAHAAAAAQAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAUAAAAAAAAAAAAAAAEAAAAKAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+DgAAAAAgAAAAgAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABQAAAAAAAAAAAAAAAQAAAAIAAAADAAAACgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvg4AAAAAIAAAAIAAAAAQAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAUAAAAAAAAAAAAAAAEAAAAKAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+DgAAAAAgAAAAgAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABQAAAAAAAAAA', 'AAAAAgAAAAMAAAAJAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+FEAAAAAgAAAAcAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABQAAAAAAAAAAAAAAAQAAAAoAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAlQL4OAAAAACAAAABwAAAAEAAAABAAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAAQAAAA1udWxsc3R5bGUuY29tAAAAAgACAgAAAAEAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAAFAAAAAAAAAAA=', '{fSjCigEojYxYRWmocYp8nNnEEL+xAIkLQU+tGEUoM+P9nQDXF6HApAdxEBaXl76F48cSRDLRKldjVz3QcsbyDg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('be85b5e14dcb9fe976a73cccc8bfac69be7ecec2126bfe5ecc551c683b43dcd7', 9, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934599, 100, 1, '2019-06-03 16:34:22.167635', '2019-06-03 16:34:22.167635', 38654709760, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAHAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAUAAAAAAAAAAa7kvkwAAABA/+toY7hGHaUzr6718ZjScST+WjFgYNU9Qse1wPqVO6U/CMVZPy6ZzimkiXFxcBc3py1BeYm3CA+YCqKrHRzABQ==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAACQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvhRAAAAAIAAAAGAAAAAQAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAEAAAAAAAAAAAAAAAEAAAAJAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+FEAAAAAgAAAAcAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAQAAAAAAAAAAAAAAAQAAAAIAAAADAAAACQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvhRAAAAAIAAAAHAAAAAQAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAEAAAAAAAAAAAAAAAEAAAAJAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+FEAAAAAgAAAAcAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAABQAAAAAAAAAA', 'AAAAAgAAAAMAAAAIAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+GoAAAAAgAAAAYAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAQAAAAAAAAAAAAAAAQAAAAkAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAlQL4UQAAAACAAAABgAAAAEAAAABAAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAAQAAAA1udWxsc3R5bGUuY29tAAAAAgACAgAAAAEAAAAAtbgXR6E7oDL0LQ+wYSC9zXvXVT3xiPiYuSb1DvmQLe8AAAABAAAAAAAAAAA=', '{/+toY7hGHaUzr6718ZjScST+WjFgYNU9Qse1wPqVO6U/CMVZPy6ZzimkiXFxcBc3py1BeYm3CA+YCqKrHRzABQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('eb4d35309591547be7fe2fb9c44834d20e4d569294088ac1a3d204d16e9a0751', 8, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934598, 100, 1, '2019-06-03 16:34:22.180221', '2019-06-03 16:34:22.180221', 34359742464, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAGAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAC1uBdHoTugMvQtD7BhIL3Ne9dVPfGI+Ji5JvUO+ZAt7wAAAAEAAAAAAAAAAa7kvkwAAABAyTsFJ/1kdjnOkMFPhwVKbKbgNUMVtym/khH5V677pL0kYUOCsOWWBBxA+Hq3aHyldsfdVvGdm8OyKMflFdFrDg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAACAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvhqAAAAAIAAAAFAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAAAAAAAAAAAAAAAAAQAAAAgAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAlQL4agAAAACAAAABgAAAAAAAAABAAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAAQAAAA1udWxsc3R5bGUuY29tAAAAAgACAgAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAAAAgAAAAAAAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAAlQL4agAAAACAAAABgAAAAAAAAABAAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAAQAAAA1udWxsc3R5bGUuY29tAAAAAgACAgAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+GoAAAAAgAAAAYAAAABAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAABAAAAALW4F0ehO6Ay9C0PsGEgvc1711U98Yj4mLkm9Q75kC3vAAAAAQAAAAAAAAAA', 'AAAAAgAAAAMAAAAHAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+IMAAAAAgAAAAUAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAAAAAAAAAAAAAAAAAABAAAACAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvhqAAAAAIAAAAFAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAADW51bGxzdHlsZS5jb20AAAACAAICAAAAAAAAAAAAAAAA', '{yTsFJ/1kdjnOkMFPhwVKbKbgNUMVtym/khH5V677pL0kYUOCsOWWBBxA+Hq3aHyldsfdVvGdm8OyKMflFdFrDg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('ca5cd8926d50d5f94acc074b6c966e927195571cb4977e1cb7690df84529f127', 7, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934597, 100, 1, '2019-06-03 16:34:22.190953', '2019-06-03 16:34:22.190954', 30064775168, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADW51bGxzdHlsZS5jb20AAAAAAAAAAAAAAAAAAAGu5L5MAAAAQO5rla99y3m6umRBntLBh1Spdn1AzzIijQ++E3Xk8CrAhurEJ6Dv2MeK8lw6KCWOwOMGYQo65HIisANSOuvaBAc=', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAviDAAAAAIAAAAEAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAAAAIAAgIAAAAAAAAAAAAAAAAAAAABAAAABwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAviDAAAAAIAAAAFAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAAAAIAAgIAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAHAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+IMAAAAAgAAAAUAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgACAgAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+IMAAAAAgAAAAUAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAANbnVsbHN0eWxlLmNvbQAAAAIAAgIAAAAAAAAAAAAAAAA=', 'AAAAAgAAAAMAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+JwAAAAAgAAAAQAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgACAgAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+IMAAAAAgAAAAQAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgACAgAAAAAAAAAAAAAAAA==', '{7muVr33Lebq6ZEGe0sGHVKl2fUDPMiKND74TdeTwKsCG6sQnoO/Yx4ryXDooJY7A4wZhCjrkciKwA1I669oEBw==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('a721bea4176539c6ed564ceafb7084a31c5deafe17ce0b52d2e2752feae47db7', 6, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934596, 100, 1, '2019-06-03 16:34:22.205701', '2019-06-03 16:34:22.205701', 25769807872, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAACAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAABruS+TAAAAEBE6Hv6Be+Sn9oVyHm+QedPXQwsE/U9freWjJTR8BN8qnvn6VUOzdc0U6PDQCyroLCAwh1LmK3iOmngqczf1RYG', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvicAAAAAIAAAADAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvicAAAAAIAAAAEAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+JwAAAAAgAAAAQAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+JwAAAAAgAAAAQAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgACAgAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+LUAAAAAgAAAAMAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+JwAAAAAgAAAAMAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgAAAAAAAAAAAAAAAAAAAA==', '{ROh7+gXvkp/aFch5vkHnT10MLBP1PX63loyU0fATfKp75+lVDs3XNFOjw0Asq6CwgMIdS5it4jpp4KnM39UWBg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('b0bb26bbc67cc1c226293ce18f94f9766b4e5c68132c2caff7907791d1723f27', 5, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934595, 100, 1, '2019-06-03 16:34:22.220908', '2019-06-03 16:34:22.220908', 21474840576, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAADAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa7kvkwAAABA9mhGRBoZe3eaPDqE6/qVEp5iFBEKjErYbUzVlrtr6cD5ttn0uGzLQsVMlEgPpB82XWa7gzTRg0OykcYE8otoAg==', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvi1AAAAAIAAAACAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvi1AAAAAIAAAADAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+LUAAAAAgAAAAMAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+LUAAAAAgAAAAMAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAgAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+LUAAAAAgAAAAIAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{9mhGRBoZe3eaPDqE6/qVEp5iFBEKjErYbUzVlrtr6cD5ttn0uGzLQsVMlEgPpB82XWa7gzTRg0OykcYE8otoAg==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('895b1e3ae3570fac549edfcc260122a2f930b35b94b1dffa9f8c2a08816ac376', 4, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934594, 100, 1, '2019-06-03 16:34:22.235126', '2019-06-03 16:34:22.235126', 17179873280, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAACAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABruS+TAAAAEALUnIdWXjDKFil8+3DPcIytdMco/BMWnrqyv9Hc/DQsGAOLHRdhdAVL/sVSxW7ITzpxY3bv11PDVlr/U5DdrgB', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAABAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjOAAAAAIAAAACAAAAAAAAAAEAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAIAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+M4AAAAAgAAAAEAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{C1JyHVl4wyhYpfPtwz3CMrXTHKPwTFp66sr/R3Pw0LBgDix0XYXQFS/7FUsVuyE86cWN279dTw1Za/1OQ3a4AQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('c76f843dd29e92bacbf21659d50454a043eae6a5ef81e2e8dc97b0e005d30962', 3, 1, 'GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU', 8589934593, 100, 1, '2019-06-03 16:34:22.248772', '2019-06-03 16:34:22.248772', 12884905984, 'AAAAAK6jei3jmoI8TGlD/egc37PXtHKKzWV8wViZBaCu5L5MAAAAZAAAAAIAAAABAAAAAAAAAAAAAAABAAAAAAAAAAUAAAABAAAAADtgvwDuOWAQ97R1RTtUdwNDHpD/CUepzdQPXlonciLVAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABruS+TAAAAEC87yJlK5zXwuklcPxhmPt9HB9YOb+0HHcN2SteSVLsjnyafNu/560Mj8/QJzfSnKm3arRVJtHgFgaSFJiywRoF', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAA=', 'AAAAAQAAAAIAAAADAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvjnAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAEAAAAAAAAAAQAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+OcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{vO8iZSuc18LpJXD8YZj7fRwfWDm/tBx3DdkrXklS7I58mnzbv+etDI/P0Cc30pypt2q0VSbR4BYGkhSYssEaBQ==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('b2a227c39c64a44fc7abd4c96819456f0399906d12c476d70b402bfdb296d6a3', 2, 1, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 1, 100, 1, '2019-06-03 16:34:22.259603', '2019-06-03 16:34:22.259603', 8589938688, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAAACVAvkAAAAAAAAAAABVvwF9wAAAEDt3KwmaPuPdFSUxdAFeb6OQetyQKIWazlbSMMhmHKNLD4sqhEqUZcQP0l+X/Op+osWmN6+FUYbsz75Q2jG4vMM', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACuo3ot45qCPExpQ/3oHN+z17Ryis1lfMFYmQWgruS+TAAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAABAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{7dysJmj7j3RUlMXQBXm+jkHrckCiFms5W0jDIZhyjSw+LKoRKlGXED9Jfl/zqfqLFpjevhVGG7M++UNoxuLzDA==}', 'none', NULL, NULL, true, 100); -INSERT INTO history_transactions VALUES ('36be70fb7782f9801cdcedc1206e21f99293c99860a15e441f4749747a0a37ab', 2, 2, 'GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H', 2, 100, 1, '2019-06-03 16:34:22.259791', '2019-06-03 16:34:22.259792', 8589942784, 'AAAAAGL8HQvQkbK2HA3WVjRrKmjX00fG8sLI7m0ERwJW/AX3AAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAO2C/AO45YBD3tHVFO1R3A0MekP8JR6nN1A9eWidyItUAAAACVAvkAAAAAAAAAAABVvwF9wAAAEA3xWbxPObnZMiBGFKLJQufJLguTsHJxyAsPP5F9Zj561aXnvN/HVRJbFsEcitGbgi9dWVdKRYvmVWCizIdmLID', 'AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=', 'AAAAAQAAAAAAAAABAAAAAwAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrFTWBs4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtq7/TDc4AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAJUC+QAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', 'AAAAAgAAAAMAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/+cAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEcCVvwF9w3gtrOnY/84AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==', '{N8Vm8Tzm52TIgRhSiyULnyS4Lk7ByccgLDz+RfWY+etWl57zfx1USWxbBHIrRm4IvXVlXSkWL5lVgosyHZiyAw==}', 'none', NULL, NULL, true, 100); - - --- --- Name: asset_stats asset_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_pkey PRIMARY KEY (id); - - --- --- Name: gorp_migrations gorp_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY gorp_migrations - ADD CONSTRAINT gorp_migrations_pkey PRIMARY KEY (id); - - --- --- Name: history_assets history_assets_asset_code_asset_type_asset_issuer_key; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_asset_code_asset_type_asset_issuer_key UNIQUE (asset_code, asset_type, asset_issuer); - - --- --- Name: history_assets history_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_assets - ADD CONSTRAINT history_assets_pkey PRIMARY KEY (id); - - --- --- Name: history_operation_participants history_operation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_operation_participants - ADD CONSTRAINT history_operation_participants_pkey PRIMARY KEY (id); - - --- --- Name: history_transaction_participants history_transaction_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_transaction_participants - ADD CONSTRAINT history_transaction_participants_pkey PRIMARY KEY (id); - - --- --- Name: asset_by_code; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_code ON history_assets USING btree (asset_code); - - --- --- Name: asset_by_issuer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX asset_by_issuer ON history_assets USING btree (asset_issuer); - - --- --- Name: by_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_account ON history_transactions USING btree (account, account_sequence); - - --- --- Name: by_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_hash ON history_transactions USING btree (transaction_hash); - - --- --- Name: by_ledger; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX by_ledger ON history_transactions USING btree (ledger_sequence, application_order); - - --- --- Name: hist_e_by_order; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_by_order ON history_effects USING btree (history_operation_id, "order"); - - --- --- Name: hist_e_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_e_id ON history_effects USING btree (history_account_id, history_operation_id, "order"); - - --- --- Name: hist_op_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_op_p_id ON history_operation_participants USING btree (history_account_id, history_operation_id); - - --- --- Name: hist_tx_p_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hist_tx_p_id ON history_transaction_participants USING btree (history_account_id, history_transaction_id); - - --- --- Name: hop_by_hoid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX hop_by_hoid ON history_operation_participants USING btree (history_operation_id); - - --- --- Name: hs_ledger_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_ledger_by_id ON history_ledgers USING btree (id); - - --- --- Name: hs_transaction_by_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX hs_transaction_by_id ON history_transactions USING btree (id); - - --- --- Name: htp_by_htid; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htp_by_htid ON history_transaction_participants USING btree (history_transaction_id); - - --- --- Name: htrd_by_base_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_account ON history_trades USING btree (base_account_id); - - --- --- Name: htrd_by_base_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_base_offer ON history_trades USING btree (base_offer_id); - - --- --- Name: htrd_by_counter_account; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_account ON history_trades USING btree (counter_account_id); - - --- --- Name: htrd_by_counter_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_counter_offer ON history_trades USING btree (counter_offer_id); - - --- --- Name: htrd_by_offer; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_by_offer ON history_trades USING btree (offer_id); - - --- --- Name: htrd_counter_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_counter_lookup ON history_trades USING btree (counter_asset_id); - - --- --- Name: htrd_pair_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_pair_time_lookup ON history_trades USING btree (base_asset_id, counter_asset_id, ledger_closed_at); - - --- --- Name: htrd_pid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX htrd_pid ON history_trades USING btree (history_operation_id, "order"); - - --- --- Name: htrd_time_lookup; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX htrd_time_lookup ON history_trades USING btree (ledger_closed_at); - - --- --- Name: index_history_accounts_on_address; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_address ON history_accounts USING btree (address); - - --- --- Name: index_history_accounts_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_accounts_on_id ON history_accounts USING btree (id); - - --- --- Name: index_history_effects_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_effects_on_type ON history_effects USING btree (type); - - --- --- Name: index_history_ledgers_on_closed_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_closed_at ON history_ledgers USING btree (closed_at); - - --- --- Name: index_history_ledgers_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_id ON history_ledgers USING btree (id); - - --- --- Name: index_history_ledgers_on_importer_version; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_ledgers_on_importer_version ON history_ledgers USING btree (importer_version); - - --- --- Name: index_history_ledgers_on_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_ledger_hash ON history_ledgers USING btree (ledger_hash); - - --- --- Name: index_history_ledgers_on_previous_ledger_hash; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_previous_ledger_hash ON history_ledgers USING btree (previous_ledger_hash); - - --- --- Name: index_history_ledgers_on_sequence; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_ledgers_on_sequence ON history_ledgers USING btree (sequence); - - --- --- Name: index_history_operations_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_operations_on_id ON history_operations USING btree (id); - - --- --- Name: index_history_operations_on_transaction_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_transaction_id ON history_operations USING btree (transaction_id); - - --- --- Name: index_history_operations_on_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_history_operations_on_type ON history_operations USING btree (type); - - --- --- Name: index_history_transactions_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_history_transactions_on_id ON history_transactions USING btree (id); - - --- --- Name: trade_effects_by_order_book; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX trade_effects_by_order_book ON history_effects USING btree (((details ->> 'sold_asset_type'::text)), ((details ->> 'sold_asset_code'::text)), ((details ->> 'sold_asset_issuer'::text)), ((details ->> 'bought_asset_type'::text)), ((details ->> 'bought_asset_code'::text)), ((details ->> 'bought_asset_issuer'::text))) WHERE (type = 33); - - --- --- Name: asset_stats asset_stats_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY asset_stats - ADD CONSTRAINT asset_stats_id_fkey FOREIGN KEY (id) REFERENCES history_assets(id) ON UPDATE RESTRICT ON DELETE CASCADE; - - --- --- Name: history_trades history_trades_base_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_account_id_fkey FOREIGN KEY (base_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_base_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_base_asset_id_fkey FOREIGN KEY (base_asset_id) REFERENCES history_assets(id); - - --- --- Name: history_trades history_trades_counter_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_account_id_fkey FOREIGN KEY (counter_account_id) REFERENCES history_accounts(id); - - --- --- Name: history_trades history_trades_counter_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY history_trades - ADD CONSTRAINT history_trades_counter_asset_id_fkey FOREIGN KEY (counter_asset_id) REFERENCES history_assets(id); - - --- --- PostgreSQL database dump complete --- - diff --git a/services/horizon/internal/test/scenarios/set_options.rb b/services/horizon/internal/test/scenarios/set_options.rb deleted file mode 100644 index 94980f5d44..0000000000 --- a/services/horizon/internal/test/scenarios/set_options.rb +++ /dev/null @@ -1,21 +0,0 @@ -run_recipe File.dirname(__FILE__) + "/_common_accounts.rb" - -use_manual_close - -create_account :scott -create_account :bartek - -close_ledger -kp = Stellar::KeyPair.from_seed("SB2XGZC7M5QXIZLXMF4SAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCBV6K") - -set_inflation_dest :scott, :bartek ; close_ledger -set_flags :scott, [:auth_required_flag] ; close_ledger -set_master_signer_weight :scott, 2 ; close_ledger -set_thresholds :scott, low: 0, medium: 2, high: 2 ; close_ledger -set_home_domain :scott, "nullstyle.com" ; close_ledger -add_signer :scott, kp, 1 ; close_ledger -add_signer :scott, kp, 5 ; close_ledger -clear_flags :scott, [:auth_required_flag] ; close_ledger -remove_signer :scott, kp ; close_ledger - -close_ledger diff --git a/services/horizon/internal/test/scenarios/trades-horizon.sql b/services/horizon/internal/test/scenarios/trades-horizon.sql index 9a376a6788..35a289694d 100644 --- a/services/horizon/internal/test/scenarios/trades-horizon.sql +++ b/services/horizon/internal/test/scenarios/trades-horizon.sql @@ -1060,6 +1060,9 @@ CREATE TABLE accounts_signers ( -- we will query by signer so that is why signer is the first item in the composite key PRIMARY KEY (signer, account) ); +ALTER TABLE history_transactions ADD account_muxed varchar(69) NULL, ADD fee_account_muxed varchar(69) NULL; +ALTER TABLE history_operations ADD source_account_muxed varchar(69) NULL; +ALTER TABLE history_effects ADD address_muxed varchar(69) NULL; -- -- PostgreSQL database dump complete diff --git a/services/horizon/internal/test/t.go b/services/horizon/internal/test/t.go index 1c80c85ab0..d1992bd142 100644 --- a/services/horizon/internal/test/t.go +++ b/services/horizon/internal/test/t.go @@ -18,8 +18,7 @@ import ( // CoreSession returns a db.Session instance pointing at the stellar core test database func (t *T) CoreSession() *db.Session { return &db.Session{ - DB: t.CoreDB, - Ctx: t.Ctx, + DB: t.CoreDB, } } @@ -38,8 +37,7 @@ func (t *T) Finish() { // database func (t *T) HorizonSession() *db.Session { return &db.Session{ - DB: t.HorizonDB, - Ctx: t.Ctx, + DB: t.HorizonDB, } } @@ -137,7 +135,7 @@ func (t *T) UnmarshalExtras(r io.Reader) map[string]string { func (t *T) LoadLedgerStatus() ledger.Status { var next ledger.Status - err := t.CoreSession().GetRaw(&next, ` + err := t.CoreSession().GetRaw(t.Ctx, &next, ` SELECT COALESCE(MAX(ledgerseq), 0) as core_latest FROM ledgerheaders @@ -147,7 +145,7 @@ func (t *T) LoadLedgerStatus() ledger.Status { panic(err) } - err = t.HorizonSession().GetRaw(&next, ` + err = t.HorizonSession().GetRaw(t.Ctx, &next, ` SELECT COALESCE(MIN(sequence), 0) as history_elder, COALESCE(MAX(sequence), 0) as history_latest diff --git a/services/horizon/internal/test/trades/main.go b/services/horizon/internal/test/trades/main.go index 5a07624024..111ad0414c 100644 --- a/services/horizon/internal/test/trades/main.go +++ b/services/horizon/internal/test/trades/main.go @@ -2,6 +2,8 @@ package trades import ( + "context" + "github.com/stellar/go/keypair" "github.com/stellar/go/services/horizon/internal/db2/history" "github.com/stellar/go/support/time" @@ -49,17 +51,18 @@ func IngestTestTrade( D: xdr.Int32(amountSold), } - accounts, err := q.CreateAccounts([]string{seller.Address(), buyer.Address()}, 2) + ctx := context.Background() + accounts, err := q.CreateAccounts(ctx, []string{seller.Address(), buyer.Address()}, 2) if err != nil { return err } - assets, err := q.CreateAssets([]xdr.Asset{assetBought, assetSold}, 2) + assets, err := q.CreateAssets(ctx, []xdr.Asset{assetBought, assetSold}, 2) if err != nil { return err } batch := q.NewTradeBatchInsertBuilder(0) - batch.Add(history.InsertTrade{ + batch.Add(ctx, history.InsertTrade{ HistoryOperationID: opCounter, Order: 0, BuyOfferExists: false, @@ -72,7 +75,7 @@ func IngestTestTrade( BuyerAccountID: accounts[buyer.Address()], SellerAccountID: accounts[seller.Address()], }) - return batch.Exec() + return batch.Exec(ctx) } //PopulateTestTrades generates and ingests trades between two assets according to given parameters diff --git a/services/horizon/internal/test/transactions/main.go b/services/horizon/internal/test/transactions/main.go index 102d8eb5de..2cf9a9340a 100644 --- a/services/horizon/internal/test/transactions/main.go +++ b/services/horizon/internal/test/transactions/main.go @@ -27,7 +27,7 @@ func BuildLedgerTransaction(t *testing.T, tx TestTransaction) ingest.LedgerTrans Envelope: xdr.TransactionEnvelope{}, Result: xdr.TransactionResultPair{}, FeeChanges: xdr.LedgerEntryChanges{}, - Meta: xdr.TransactionMeta{}, + UnsafeMeta: xdr.TransactionMeta{}, } tt := assert.New(t) @@ -36,7 +36,7 @@ func BuildLedgerTransaction(t *testing.T, tx TestTransaction) ingest.LedgerTrans tt.NoError(err) err = xdr.SafeUnmarshalBase64(tx.ResultXDR, &transaction.Result.Result) tt.NoError(err) - err = xdr.SafeUnmarshalBase64(tx.MetaXDR, &transaction.Meta) + err = xdr.SafeUnmarshalBase64(tx.MetaXDR, &transaction.UnsafeMeta) tt.NoError(err) err = xdr.SafeUnmarshalBase64(tx.FeeChangesXDR, &transaction.FeeChanges) tt.NoError(err) diff --git a/services/horizon/internal/txsub/helpers_test.go b/services/horizon/internal/txsub/helpers_test.go index 3483ca28cb..e73ed4be1d 100644 --- a/services/horizon/internal/txsub/helpers_test.go +++ b/services/horizon/internal/txsub/helpers_test.go @@ -28,13 +28,13 @@ type mockDBQ struct { mock.Mock } -func (m *mockDBQ) BeginTx(txOpts *sql.TxOptions) error { - args := m.Called(txOpts) +func (m *mockDBQ) BeginTx(ctx context.Context, txOpts *sql.TxOptions) error { + args := m.Called(ctx, txOpts) return args.Error(0) } -func (m *mockDBQ) Rollback() error { - args := m.Called() +func (m *mockDBQ) Rollback(ctx context.Context) error { + args := m.Called(ctx) return args.Error(0) } @@ -43,12 +43,12 @@ func (m *mockDBQ) NoRows(err error) bool { return args.Bool(0) } -func (m *mockDBQ) GetSequenceNumbers(addresses []string) (map[string]uint64, error) { - args := m.Called(addresses) +func (m *mockDBQ) GetSequenceNumbers(ctx context.Context, addresses []string) (map[string]uint64, error) { + args := m.Called(ctx, addresses) return args.Get(0).(map[string]uint64), args.Error(1) } -func (m *mockDBQ) TransactionByHash(dest interface{}, hash string) error { - args := m.Called(dest, hash) +func (m *mockDBQ) TransactionByHash(ctx context.Context, dest interface{}, hash string) error { + args := m.Called(ctx, dest, hash) return args.Error(0) } diff --git a/services/horizon/internal/txsub/results.go b/services/horizon/internal/txsub/results.go index f8cb0099e0..844816700b 100644 --- a/services/horizon/internal/txsub/results.go +++ b/services/horizon/internal/txsub/results.go @@ -1,6 +1,7 @@ package txsub import ( + "context" "database/sql" "github.com/stellar/go/services/horizon/internal/db2/history" @@ -8,10 +9,10 @@ import ( "github.com/stellar/go/xdr" ) -func txResultByHash(db HorizonDB, hash string) (history.Transaction, error) { +func txResultByHash(ctx context.Context, db HorizonDB, hash string) (history.Transaction, error) { // query history database var hr history.Transaction - err := db.TransactionByHash(&hr, hash) + err := db.TransactionByHash(ctx, &hr, hash) if err == nil { return txResultFromHistory(hr) } @@ -45,20 +46,20 @@ func txResultFromHistory(tx history.Transaction) (history.Transaction, error) { // queries execute on different ledgers. In this case, txsub can mistakenly respond with a bad_seq error // because the first query occurs when the tx is not yet ingested and the second query occurs when the tx // is ingested. -func checkTxAlreadyExists(db HorizonDB, hash, sourceAddress string) (history.Transaction, uint64, error) { - err := db.BeginTx(&sql.TxOptions{ +func checkTxAlreadyExists(ctx context.Context, db HorizonDB, hash, sourceAddress string) (history.Transaction, uint64, error) { + err := db.BeginTx(ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }) if err != nil { return history.Transaction{}, 0, errors.Wrap(err, "cannot start repeatable read tx") } - defer db.Rollback() + defer db.Rollback(ctx) - tx, err := txResultByHash(db, hash) + tx, err := txResultByHash(ctx, db, hash) if err == ErrNoResults { var sequenceNumbers map[string]uint64 - sequenceNumbers, err = db.GetSequenceNumbers([]string{sourceAddress}) + sequenceNumbers, err = db.GetSequenceNumbers(ctx, []string{sourceAddress}) if err != nil { return tx, 0, errors.Wrapf(err, "cannot fetch sequence number for %v", sourceAddress) } diff --git a/services/horizon/internal/txsub/results_test.go b/services/horizon/internal/txsub/results_test.go index 2277245879..a0695c22c2 100644 --- a/services/horizon/internal/txsub/results_test.go +++ b/services/horizon/internal/txsub/results_test.go @@ -11,9 +11,9 @@ func TestGetIngestedTx(t *testing.T) { tt := test.Start(t) tt.Scenario("base") defer tt.Finish() - q := &history.Q{Session: tt.HorizonSession()} + q := &history.Q{SessionInterface: tt.HorizonSession()} hash := "2374e99349b9ef7dba9a5db3339b78fda8f34777b1af33ba468ad5c0df946d4d" - tx, err := txResultByHash(q, hash) + tx, err := txResultByHash(tt.Ctx, q, hash) tt.Assert.NoError(err) tt.Assert.Equal(hash, tx.TransactionHash) } @@ -22,10 +22,10 @@ func TestGetMissingTx(t *testing.T) { tt := test.Start(t) tt.Scenario("base") defer tt.Finish() - q := &history.Q{Session: tt.HorizonSession()} + q := &history.Q{SessionInterface: tt.HorizonSession()} hash := "adf1efb9fd253f53cbbe6230c131d2af19830328e52b610464652d67d2fb7195" - _, err := txResultByHash(q, hash) + _, err := txResultByHash(tt.Ctx, q, hash) tt.Assert.Equal(ErrNoResults, err) } @@ -33,9 +33,9 @@ func TestGetFailedTx(t *testing.T) { tt := test.Start(t) tt.Scenario("failed_transactions") defer tt.Finish() - q := &history.Q{Session: tt.HorizonSession()} + q := &history.Q{SessionInterface: tt.HorizonSession()} hash := "aa168f12124b7c196c0adaee7c73a64d37f99428cacb59a91ff389626845e7cf" - _, err := txResultByHash(q, hash) + _, err := txResultByHash(tt.Ctx, q, hash) tt.Assert.Equal("AAAAAAAAAGT/////AAAAAQAAAAAAAAAB/////gAAAAA=", err.(*FailedTransactionError).ResultXDR) } diff --git a/services/horizon/internal/txsub/system.go b/services/horizon/internal/txsub/system.go index 903931b47c..86b5fe3fc4 100644 --- a/services/horizon/internal/txsub/system.go +++ b/services/horizon/internal/txsub/system.go @@ -14,10 +14,10 @@ import ( ) type HorizonDB interface { - TransactionByHash(dest interface{}, hash string) error - GetSequenceNumbers(addresses []string) (map[string]uint64, error) - BeginTx(*sql.TxOptions) error - Rollback() error + TransactionByHash(ctx context.Context, dest interface{}, hash string) error + GetSequenceNumbers(ctx context.Context, addresses []string) (map[string]uint64, error) + BeginTx(context.Context, *sql.TxOptions) error + Rollback(context.Context) error NoRows(error) bool } @@ -98,7 +98,7 @@ func (sys *System) Submit( "tx": rawTx, }).Info("Processing transaction") - tx, sequenceNumber, err := checkTxAlreadyExists(db, hash, sourceAddress) + tx, sequenceNumber, err := checkTxAlreadyExists(ctx, db, hash, sourceAddress) if err == nil { sys.Log.Ctx(ctx).WithField("hash", hash).Info("Found submission result in a DB") sys.finish(ctx, hash, response, Result{Transaction: tx}) @@ -164,7 +164,7 @@ func (sys *System) Submit( } // If error is txBAD_SEQ, check for the result again - tx, err = txResultByHash(db, hash) + tx, err = txResultByHash(ctx, db, hash) if err == nil { // If the found use it as the result sys.finish(ctx, hash, response, Result{Transaction: tx}) @@ -187,7 +187,7 @@ func (sys *System) waitUntilAccountSequence(ctx context.Context, db HorizonDB, s defer timer.Stop() for { - sequenceNumbers, err := db.GetSequenceNumbers([]string{sourceAddress}) + sequenceNumbers, err := db.GetSequenceNumbers(ctx, []string{sourceAddress}) if err != nil { sys.Log.Ctx(ctx). WithError(err). @@ -287,15 +287,15 @@ func (sys *System) Tick(ctx context.Context) { Isolation: sql.LevelRepeatableRead, ReadOnly: true, } - if err := db.BeginTx(options); err != nil { + if err := db.BeginTx(ctx, options); err != nil { logger.WithError(err).Error("could not start repeatable read transaction for txsub tick") return } - defer db.Rollback() + defer db.Rollback(ctx) addys := sys.SubmissionQueue.Addresses() if len(addys) > 0 { - curSeq, err := db.GetSequenceNumbers(addys) + curSeq, err := db.GetSequenceNumbers(ctx, addys) if err != nil { logger.WithStack(err).Error(err) return @@ -305,7 +305,7 @@ func (sys *System) Tick(ctx context.Context) { } for _, hash := range sys.Pending.Pending(ctx) { - tx, err := txResultByHash(db, hash) + tx, err := txResultByHash(ctx, db, hash) if err == nil { logger.WithField("hash", hash).Debug("finishing open submission") diff --git a/services/horizon/internal/txsub/system_test.go b/services/horizon/internal/txsub/system_test.go index 96d0ed3b1a..145b5a4bf1 100644 --- a/services/horizon/internal/txsub/system_test.go +++ b/services/horizon/internal/txsub/system_test.go @@ -122,14 +122,14 @@ func (suite *SystemTestSuite) TearDownTest() { // Returns the result provided by the ResultProvider. func (suite *SystemTestSuite) TestSubmit_Basic() { - suite.db.On("BeginTx", &sql.TxOptions{ + suite.db.On("BeginTx", suite.ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - suite.db.On("Rollback").Return(nil).Once() - suite.db.On("TransactionByHash", mock.Anything, suite.successTx.Transaction.TransactionHash). + suite.db.On("Rollback", suite.ctx).Return(nil).Once() + suite.db.On("TransactionByHash", suite.ctx, mock.Anything, suite.successTx.Transaction.TransactionHash). Run(func(args mock.Arguments) { - ptr := args.Get(0).(*history.Transaction) + ptr := args.Get(1).(*history.Transaction) *ptr = suite.successTx.Transaction }). Return(nil).Once() @@ -157,15 +157,15 @@ func getMetricValue(metric prometheus.Metric) *dto.Metric { // Returns the error from submission if no result is found by hash and the suite.submitter returns an error. func (suite *SystemTestSuite) TestSubmit_NotFoundError() { - suite.db.On("BeginTx", &sql.TxOptions{ + suite.db.On("BeginTx", suite.ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - suite.db.On("Rollback").Return(nil).Once() - suite.db.On("TransactionByHash", mock.Anything, suite.successTx.Transaction.TransactionHash). + suite.db.On("Rollback", suite.ctx).Return(nil).Once() + suite.db.On("TransactionByHash", suite.ctx, mock.Anything, suite.successTx.Transaction.TransactionHash). Return(sql.ErrNoRows).Once() suite.db.On("NoRows", sql.ErrNoRows).Return(true).Once() - suite.db.On("GetSequenceNumbers", []string{suite.unmuxedSource.Address()}). + suite.db.On("GetSequenceNumbers", suite.ctx, []string{suite.unmuxedSource.Address()}). Return(map[string]uint64{suite.unmuxedSource.Address(): 0}, nil). Once() @@ -187,23 +187,23 @@ func (suite *SystemTestSuite) TestSubmit_NotFoundError() { // If the error is bad_seq and the result at the transaction's sequence number is for the same hash, return result. func (suite *SystemTestSuite) TestSubmit_BadSeq() { suite.submitter.R = suite.badSeq - suite.db.On("BeginTx", &sql.TxOptions{ + suite.db.On("BeginTx", suite.ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - suite.db.On("Rollback").Return(nil).Once() - suite.db.On("TransactionByHash", mock.Anything, suite.successTx.Transaction.TransactionHash). + suite.db.On("Rollback", suite.ctx).Return(nil).Once() + suite.db.On("TransactionByHash", suite.ctx, mock.Anything, suite.successTx.Transaction.TransactionHash). Return(sql.ErrNoRows).Once() suite.db.On("NoRows", sql.ErrNoRows).Return(true).Once() - suite.db.On("GetSequenceNumbers", []string{suite.unmuxedSource.Address()}). + suite.db.On("GetSequenceNumbers", suite.ctx, []string{suite.unmuxedSource.Address()}). Return(map[string]uint64{suite.unmuxedSource.Address(): 0}, nil). Once() - suite.db.On("GetSequenceNumbers", []string{suite.unmuxedSource.Address()}). + suite.db.On("GetSequenceNumbers", suite.ctx, []string{suite.unmuxedSource.Address()}). Return(map[string]uint64{suite.unmuxedSource.Address(): 1}, nil). Once() - suite.db.On("TransactionByHash", mock.Anything, suite.successTx.Transaction.TransactionHash). + suite.db.On("TransactionByHash", suite.ctx, mock.Anything, suite.successTx.Transaction.TransactionHash). Run(func(args mock.Arguments) { - ptr := args.Get(0).(*history.Transaction) + ptr := args.Get(1).(*history.Transaction) *ptr = suite.successTx.Transaction }). Return(nil).Once() @@ -223,18 +223,18 @@ func (suite *SystemTestSuite) TestSubmit_BadSeq() { // If error is bad_seq and no result is found, return error. func (suite *SystemTestSuite) TestSubmit_BadSeqNotFound() { suite.submitter.R = suite.badSeq - suite.db.On("BeginTx", &sql.TxOptions{ + suite.db.On("BeginTx", suite.ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - suite.db.On("Rollback").Return(nil).Once() - suite.db.On("TransactionByHash", mock.Anything, suite.successTx.Transaction.TransactionHash). + suite.db.On("Rollback", suite.ctx).Return(nil).Once() + suite.db.On("TransactionByHash", suite.ctx, mock.Anything, suite.successTx.Transaction.TransactionHash). Return(sql.ErrNoRows).Twice() suite.db.On("NoRows", sql.ErrNoRows).Return(true).Twice() - suite.db.On("GetSequenceNumbers", []string{suite.unmuxedSource.Address()}). + suite.db.On("GetSequenceNumbers", suite.ctx, []string{suite.unmuxedSource.Address()}). Return(map[string]uint64{suite.unmuxedSource.Address(): 0}, nil). Times(3) - suite.db.On("GetSequenceNumbers", []string{suite.unmuxedSource.Address()}). + suite.db.On("GetSequenceNumbers", suite.ctx, []string{suite.unmuxedSource.Address()}). Return(map[string]uint64{suite.unmuxedSource.Address(): 1}, nil). Once() @@ -255,15 +255,15 @@ func (suite *SystemTestSuite) TestSubmit_BadSeqNotFound() { // If no result found and no error submitting, add to open transaction list. func (suite *SystemTestSuite) TestSubmit_OpenTransactionList() { - suite.db.On("BeginTx", &sql.TxOptions{ + suite.db.On("BeginTx", suite.ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - suite.db.On("Rollback").Return(nil).Once() - suite.db.On("TransactionByHash", mock.Anything, suite.successTx.Transaction.TransactionHash). + suite.db.On("Rollback", suite.ctx).Return(nil).Once() + suite.db.On("TransactionByHash", suite.ctx, mock.Anything, suite.successTx.Transaction.TransactionHash). Return(sql.ErrNoRows).Once() suite.db.On("NoRows", sql.ErrNoRows).Return(true).Once() - suite.db.On("GetSequenceNumbers", []string{suite.unmuxedSource.Address()}). + suite.db.On("GetSequenceNumbers", suite.ctx, []string{suite.unmuxedSource.Address()}). Return(map[string]uint64{suite.unmuxedSource.Address(): 0}, nil). Once() @@ -283,11 +283,11 @@ func (suite *SystemTestSuite) TestSubmit_OpenTransactionList() { // Tick should be a no-op if there are no open submissions. func (suite *SystemTestSuite) TestTick_Noop() { - suite.db.On("BeginTx", &sql.TxOptions{ + suite.db.On("BeginTx", suite.ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - suite.db.On("Rollback").Return(nil).Once() + suite.db.On("Rollback", suite.ctx).Return(nil).Once() suite.system.Tick(suite.ctx) } @@ -298,15 +298,15 @@ func (suite *SystemTestSuite) TestTick_Noop() { // `sys.Sequences.Get(addys)` is delayed by 1 second. It allows to simulate two // calls to `Tick()` executed at the same time. func (suite *SystemTestSuite) TestTick_Deadlock() { - suite.db.On("BeginTx", &sql.TxOptions{ + suite.db.On("BeginTx", suite.ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - suite.db.On("Rollback").Return(nil).Once() + suite.db.On("Rollback", suite.ctx).Return(nil).Once() // Start first Tick suite.system.SubmissionQueue.Push("address", 0) - suite.db.On("GetSequenceNumbers", []string{"address"}). + suite.db.On("GetSequenceNumbers", suite.ctx, []string{"address"}). Return(map[string]uint64{}, nil). Run(func(args mock.Arguments) { // Start second tick @@ -322,12 +322,12 @@ func (suite *SystemTestSuite) TestTick_FinishesTransactions() { l := make(chan Result, 1) suite.system.Pending.Add(suite.ctx, suite.successTx.Transaction.TransactionHash, l) - suite.db.On("BeginTx", &sql.TxOptions{ + suite.db.On("BeginTx", suite.ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - suite.db.On("Rollback").Return(nil).Once() - suite.db.On("TransactionByHash", mock.Anything, suite.successTx.Transaction.TransactionHash). + suite.db.On("Rollback", suite.ctx).Return(nil).Once() + suite.db.On("TransactionByHash", suite.ctx, mock.Anything, suite.successTx.Transaction.TransactionHash). Return(sql.ErrNoRows).Once() suite.db.On("NoRows", sql.ErrNoRows).Return(true).Once() @@ -336,14 +336,14 @@ func (suite *SystemTestSuite) TestTick_FinishesTransactions() { assert.Equal(suite.T(), 0, len(l)) assert.Equal(suite.T(), 1, len(suite.system.Pending.Pending(suite.ctx))) - suite.db.On("BeginTx", &sql.TxOptions{ + suite.db.On("BeginTx", suite.ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - suite.db.On("Rollback").Return(nil).Once() - suite.db.On("TransactionByHash", mock.Anything, suite.successTx.Transaction.TransactionHash). + suite.db.On("Rollback", suite.ctx).Return(nil).Once() + suite.db.On("TransactionByHash", suite.ctx, mock.Anything, suite.successTx.Transaction.TransactionHash). Run(func(args mock.Arguments) { - ptr := args.Get(0).(*history.Transaction) + ptr := args.Get(1).(*history.Transaction) *ptr = suite.successTx.Transaction }). Return(nil).Once() @@ -374,15 +374,15 @@ func (suite *SystemTestSuite) TestTickFinishFeeBumpTransaction() { }, } - suite.db.On("BeginTx", &sql.TxOptions{ + suite.db.On("BeginTx", suite.ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - suite.db.On("Rollback").Return(nil).Once() - suite.db.On("TransactionByHash", mock.Anything, innerHash). + suite.db.On("Rollback", suite.ctx).Return(nil).Once() + suite.db.On("TransactionByHash", suite.ctx, mock.Anything, innerHash). Return(sql.ErrNoRows).Once() suite.db.On("NoRows", sql.ErrNoRows).Return(true).Once() - suite.db.On("GetSequenceNumbers", []string{"GABQGAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2MX"}). + suite.db.On("GetSequenceNumbers", suite.ctx, []string{"GABQGAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2MX"}). Return(map[string]uint64{"GABQGAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2MX": 96}, nil). Once() @@ -390,14 +390,14 @@ func (suite *SystemTestSuite) TestTickFinishFeeBumpTransaction() { assert.Equal(suite.T(), 0, len(l)) assert.Equal(suite.T(), 1, len(suite.system.Pending.Pending(suite.ctx))) - suite.db.On("BeginTx", &sql.TxOptions{ + suite.db.On("BeginTx", suite.ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - suite.db.On("Rollback").Return(nil).Once() - suite.db.On("TransactionByHash", mock.Anything, innerHash). + suite.db.On("Rollback", suite.ctx).Return(nil).Once() + suite.db.On("TransactionByHash", suite.ctx, mock.Anything, innerHash). Run(func(args mock.Arguments) { - ptr := args.Get(0).(*history.Transaction) + ptr := args.Get(1).(*history.Transaction) *ptr = feeBumpTx.Transaction }). Return(nil).Once() @@ -418,12 +418,12 @@ func (suite *SystemTestSuite) TestTick_RemovesStaleSubmissions() { suite.system.Pending.Add(suite.ctx, suite.successTx.Transaction.TransactionHash, l) <-time.After(101 * time.Millisecond) - suite.db.On("BeginTx", &sql.TxOptions{ + suite.db.On("BeginTx", suite.ctx, &sql.TxOptions{ Isolation: sql.LevelRepeatableRead, ReadOnly: true, }).Return(nil).Once() - suite.db.On("Rollback").Return(nil).Once() - suite.db.On("TransactionByHash", mock.Anything, suite.successTx.Transaction.TransactionHash). + suite.db.On("Rollback", suite.ctx).Return(nil).Once() + suite.db.On("TransactionByHash", suite.ctx, mock.Anything, suite.successTx.Transaction.TransactionHash). Return(sql.ErrNoRows).Once() suite.db.On("NoRows", sql.ErrNoRows).Return(true).Once() diff --git a/services/keystore/docker/Dockerfile b/services/keystore/docker/Dockerfile index 2c1735c524..45c9292957 100644 --- a/services/keystore/docker/Dockerfile +++ b/services/keystore/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.16.2 as build +FROM golang:1.16.3 as build ADD . /src/keystore WORKDIR /src/keystore diff --git a/services/regulated-assets-approval-server/.gitignore b/services/regulated-assets-approval-server/.gitignore new file mode 100644 index 0000000000..4cb512ec1f --- /dev/null +++ b/services/regulated-assets-approval-server/.gitignore @@ -0,0 +1 @@ +/.env \ No newline at end of file diff --git a/services/regulated-assets-approval-server/README.md b/services/regulated-assets-approval-server/README.md index 197af0d8b7..514f163fc4 100644 --- a/services/regulated-assets-approval-server/README.md +++ b/services/regulated-assets-approval-server/README.md @@ -12,6 +12,24 @@ intended for **testing only**. It is being conceived to: 2. Serve as a demo server where wallets can test and validate their SEP-8 implementation. +## Table of Contents + +* [regulated\-assets\-approval\-server](#regulated-assets-approval-server) + * [Table of Contents](#table-of-contents) + * [Usage](#usage) + * [Usage: Migrate](#usage-migrate) + * [Migration files](#migration-files) + * [Usage: Serve](#usage-serve) + * [Account Setup](#account-setup) + * [GET /friendbot?addr=\{stellar\_address\}](#get-friendbotaddrstellar_address) + * [API Spec](#api-spec) + * [POST /tx\-approve](#post-tx-approve) + * [POST /kyc\-status/\{CALLBACK\_ID\}](#post-kyc-statuscallback_id) + * [GET /kyc\-status/\{STELLAR\_ADDRESS\_OR\_CALLBACK\_ID\}](#get-kyc-statusstellar_address_or_callback_id) + * [DELETE /kyc\-status/\{STELLAR\_ADDRESS\}](#delete-kyc-statusstellar_address) + +Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc.go) + ## Usage ```sh @@ -24,11 +42,34 @@ Usage: regulated-assets-approval-server [command] Available Commands: + migrate Run migrations on the database serve Serve the SEP-8 Approval Server Use "regulated-assets-approval-server [command] --help" for more information about a command. ``` +### Usage: Migrate + +```sh +$ go install +$ regulated-assets-approval-server migrate --help +Run migrations on the database + +Usage: + regulated-assets-approval-server migrate [up|down] [count] [flags] + +Flags: + --database-url string Database URL (DATABASE_URL) (default "postgres://localhost:5432/?sslmode=disable") +``` + +#### Migration files + +regulated-assets-approval-server builds the migrations into the binary. If there are any changes to the db(adding, removing or updating tables) generate a new `internal/db/dbmigrate/dbmigrate_generated.go` using the `gogenerate.sh` script located at the root of the repo. + +```sh +$ ./gogenerate.sh +``` + ### Usage: Serve ```sh @@ -41,11 +82,14 @@ Usage: Flags: --asset-code string The code of the regulated asset (ASSET_CODE) + --database-url string Database URL (DATABASE_URL) (default "postgres://localhost:5432/?sslmode=disable") --friendbot-payment-amount int The amount of regulated assets the friendbot will be distributing (FRIENDBOT_PAYMENT_AMOUNT) (default 10000) --horizon-url string Horizon URL used for looking up account details (HORIZON_URL) (default "https://horizon-testnet.stellar.org/") --issuer-account-secret string Secret key of the asset issuer's stellar account. (ISSUER_ACCOUNT_SECRET) --network-passphrase string Network passphrase of the Stellar network transactions should be signed for (NETWORK_PASSPHRASE) (default "Test SDF Network ; September 2015") --port int Port to listen and serve on (PORT) (default 8000) + --base-url string The base url address to this server(BASE_URL) + --kyc-required-payment-amount-threshold string The amount threshold when KYC is required, may contain decimals and is greater than 0 (KYC_REQUIRED_PAYMENT_AMOUNT_THRESHOLD)(default 500 units) ``` ## Account Setup @@ -61,9 +105,10 @@ link](https://laboratory.stellar.org/#txbuilder?params=eyJhdHRyaWJ1dGVzIjp7ImZlZ to set those flags. Just click the link, fulfill the account address, sequence number, then the account secret and submit the transaction. -### API Spec +After setting up the issuer account you can fund a stellar account with an initial balance of the regulated asset with our internal `friendbot/?addr={stellar_address}` endpoint. +This endpoint is not part of the official SEP-8 Approval Server spec, it's a debug feature to allow accounts to test sending transactions (payments with the issuer's regulated asset) to the server. -#### `GET /friendbot?addr=GDDIO6SFRD4SJEQFJOSKPIDYTDM7LM4METFBKN4NFGVR5DTGB7H75N5S` +### `GET /friendbot?addr={stellar_address}` This endpoint sends a payment of 10,000 (this value is configurable) regulated assets to the provided `addr`. Please be aware the address must first establish @@ -72,5 +117,149 @@ a trustline to the regulated asset in order to receive that payment. You can use link](https://laboratory.stellar.org/#txbuilder?params=eyJhdHRyaWJ1dGVzIjp7ImZlZSI6IjEwMCIsImJhc2VGZWUiOiIxMDAiLCJtaW5GZWUiOiIxMDAifSwiZmVlQnVtcEF0dHJpYnV0ZXMiOnsibWF4RmVlIjoiMTAwIn0sIm9wZXJhdGlvbnMiOlt7ImlkIjowLCJhdHRyaWJ1dGVzIjp7ImFzc2V0Ijp7InR5cGUiOiJjcmVkaXRfYWxwaGFudW00IiwiY29kZSI6IiIsImlzc3VlciI6IiJ9fSwibmFtZSI6ImNoYW5nZVRydXN0In1dfQ%3D%3D&network=test) to do that in Stellar Laboratory. +## API Spec +### `POST /tx-approve` + +This is the core [SEP-8] endpoint used to validate and process approval/revision/rejection of regulated assets transactions. +Note: The example responses below have set their `base-url` env var to `"https://sep8-base-url.com"`. + +**Request:** + +```json +{ + "tx": "AAAAAgAAAAA0Nk3++mfFw4Is6OaUJTKe71XNtxdktcjGrPildK84xAAAJxAAAJ3YAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAARllVv+K58Rbwzc/2Ti1IsisLC03udNJblQx2sPLfDygAAAAJNWVVTRAAAAAAAAAAAAAAAqjdTmDnuZm4YrIZ3wQVmVXmWSMO4dLk5dOPzUjWDvIgAAAABKp6IgAAAAAAAAAABdK84xAAAAEACHShDhulyTyvFx9lCU2LjAN9P7g6XqZJ6aNKo/NFb+9awp4pE5soK5cTtahhVzx9RsUcH+FSRmOPu4YEqqBsK" +} +``` + +**Responses:** + +_Revised:_ + +```json +{ + "status": "revised", + "message": "Authorization and deauthorization operations were added.", + "tx": "AAAAAgAAAAA0Nk3++mfFw4Is6OaUJTKe71XNtxdktcjGrPildK84xAAABdwAAJ3YAAAABwAAAAEAAAAAAAAAAAAAAABgXdapAAAAAAAAAAUAAAABAAAAAKo3U5g57mZuGKyGd8EFZlV5lkjDuHS5OXTj81I1g7yIAAAABwAAAAA0Nk3++mfFw4Is6OaUJTKe71XNtxdktcjGrPildK84xAAAAAJNWVVTRAAAAAAAAAAAAAABAAAAAQAAAACqN1OYOe5mbhishnfBBWZVeZZIw7h0uTl04/NSNYO8iAAAAAcAAAAAEZZVb/iufEW8M3P9k4tSLIrCwtN7nTSW5UMdrDy3w8oAAAACTVlVU0QAAAAAAAAAAAAAAQAAAAAAAAABAAAAABGWVW/4rnxFvDNz/ZOLUiyKwsLTe500luVDHaw8t8PKAAAAAk1ZVVNEAAAAAAAAAAAAAACqN1OYOe5mbhishnfBBWZVeZZIw7h0uTl04/NSNYO8iAAAAAEqnoiAAAAAAQAAAACqN1OYOe5mbhishnfBBWZVeZZIw7h0uTl04/NSNYO8iAAAAAcAAAAAEZZVb/iufEW8M3P9k4tSLIrCwtN7nTSW5UMdrDy3w8oAAAACTVlVU0QAAAAAAAAAAAAAAAAAAAEAAAAAqjdTmDnuZm4YrIZ3wQVmVXmWSMO4dLk5dOPzUjWDvIgAAAAHAAAAADQ2Tf76Z8XDgizo5pQlMp7vVc23F2S1yMas+KV0rzjEAAAAAk1ZVVNEAAAAAAAAAAAAAAAAAAAAAAAAATWDvIgAAABAxXindTDbKTpw9B+1aUdTOTE6CUF610A0ZL+ofBVSlcvHYadc3LfO/L4/V22h2FyHNt2ALwncmlEq+3hpojZDDQ==" +} +``` + +_Rejected:_ + +```json +{ + "status": "rejected", + "error": "There is one or more unauthorized operations in the provided transaction." +} +``` + +_Action Required:_ + +```json +{ + "status": "action_required", + "message": "Payments exceeding 500.00 GOAT needs KYC approval. Please provide an email address.", + "action_url": "https://sep8-base-url.com/kyc-status/cf4fe081-5b38-48b6-86ed-1bcfb7171c7d", + "action_method": "POST", + "action_fields": [ + "email_address" + ] +} +``` + +### `POST /kyc-status/{CALLBACK_ID}` + +This endpoint is used for the extra action after `/tx-approve`, as described in +the SEP-8 [Action Required] section. + +Currently an arbitrarily criteria is implemented, email addresses starting with "x" will have the KYC +automatically denied while all other emails will be accepted. + +Note: Subsequent KYC attempts with new (valid)emails addresses will approve your account for KYC required transactions. + +**Request:** + +```json +{ + "email_address": "foo@bar.com" +} +``` + +**Response:** + +```json +{ + "result": "no_further_action_required", +} +``` + +After the user has been approved or rejected they can POST their transaction to [`POST /tx-approve`](#post-tx-approve) for revision. + +If their KYC was rejected they should see a rejection response. +**Response (rejected for emails staring with "x"):** + +```json +{ + "status": "rejected", + "error": "Your KYC was rejected and you're not authorized for operations above 500.00 GOAT." +} +``` + +### `GET /kyc-status/{STELLAR_ADDRESS_OR_CALLBACK_ID}` + +Returns the detail of an account that requested KYC, as well some metadata about +its status. +Note: This functionality is for test/debugging purposes and it's not part of the [SEP-8] spec. + +**Response (No KYC Submitted):** + +```json +{ + "stellar_address": "GA2DMTP67JT4LQ4CFTUONFBFGKPO6VONW4LWJNOIY2WPRJLUV44MJZOK", + "callback_id":"e0d9243a-40cf-4baa-9575-913e6c98a12e", + "created_at": "2021-03-26T09:35:06.907293-03:00", +} +``` + +**Response (Approved KYC):** + +```json +{ + "stellar_address": "GA2DMTP67JT4LQ4CFTUONFBFGKPO6VONW4LWJNOIY2WPRJLUV44MJZOK", + "callback_id":"e0d9243a-40cf-4baa-9575-913e6c98a12e", + "email_address": "test@test.com", + "created_at": "2021-03-26T09:35:06.907293-03:00", + "kyc_submitted_at": "2021-03-26T14:03:43.314334-03:00", + "approved_at": "2021-03-26T14:03:43.314334-03:00", +} +``` + +**Response (Rejected KYC):** + +```json +{ + "stellar_address": "GA2DMTP67JT4LQ4CFTUONFBFGKPO6VONW4LWJNOIY2WPRJLUV44MJZOK", + "callback_id":"e0d9243a-40cf-4baa-9575-913e6c98a12e", + "email_address": "xtest@test.com", + "created_at": "2021-03-26T09:35:06.907293-03:00", + "kyc_submitted_at": "2021-03-26T14:03:43.314334-03:00", + "rejected_at": "2021-03-26T14:03:43.314334-03:00", +} +``` + +### `DELETE /kyc-status/{STELLAR_ADDRESS}` + +Deletes a stellar account from the list of KYCs. If the stellar address is not +in the database to be deleted the server will return with a `404 - Not Found`. +Note: This functionality is for test/debugging purposes and it's not part of the [SEP-8] spec. + +**Response:** + +```json +{ + "message": "ok" +} +``` + [SEP-8]: https://github.com/stellar/stellar-protocol/blob/7c795bb9abc606cd1e34764c4ba07900d58fe26e/ecosystem/sep-0008.md [authorization flags]: https://github.com/stellar/stellar-protocol/blob/7c795bb9abc606cd1e34764c4ba07900d58fe26e/ecosystem/sep-0008.md#authorization-flags +[Action Required]: https://github.com/stellar/stellar-protocol/blob/7c795bb9abc606cd1e34764c4ba07900d58fe26e/ecosystem/sep-0008.md#action-required diff --git a/services/regulated-assets-approval-server/cmd/migrate.go b/services/regulated-assets-approval-server/cmd/migrate.go new file mode 100644 index 0000000000..c6801678a1 --- /dev/null +++ b/services/regulated-assets-approval-server/cmd/migrate.go @@ -0,0 +1,103 @@ +package cmd + +import ( + "go/types" + "strconv" + "strings" + + migrate "github.com/rubenv/sql-migrate" + "github.com/spf13/cobra" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/db" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/db/dbmigrate" + "github.com/stellar/go/support/config" + "github.com/stellar/go/support/log" +) + +type MigrateCommand struct { + DatabaseURL string +} + +func (c *MigrateCommand) Command() *cobra.Command { + configOpts := config.ConfigOptions{ + { + Name: "database-url", + Usage: "Database URL", + OptType: types.String, + ConfigKey: &c.DatabaseURL, + FlagDefault: "postgres://localhost:5432/?sslmode=disable", + Required: true, + }, + } + cmd := &cobra.Command{ + Use: "migrate [up|down] [count]", + Short: "Run migrations on the database", + PersistentPreRun: func(cmd *cobra.Command, args []string) { + configOpts.Require() + configOpts.SetValues() + }, + Run: func(cmd *cobra.Command, args []string) { + c.Migrate(cmd, args) + }, + } + configOpts.Init(cmd) + + return cmd +} + +func (c *MigrateCommand) Migrate(cmd *cobra.Command, args []string) { + db, err := db.Open(c.DatabaseURL) + if err != nil { + log.Errorf("Error opening database: %s", err.Error()) + return + } + + if len(args) < 1 { + cmd.Help() + return + } + dirStr := args[0] + + var dir migrate.MigrationDirection + switch dirStr { + case "down": + dir = migrate.Down + case "up": + dir = migrate.Up + default: + log.Errorf("Invalid migration direction, must be 'up' or 'down'.") + return + } + + var count int + if len(args) >= 2 { + count, err = strconv.Atoi(args[1]) + if err != nil { + log.Errorf("Invalid migration count, must be a number.") + return + } + if count < 1 { + log.Errorf("Invalid migration count, must be a number greater than zero.") + return + } + } + + migrations, err := dbmigrate.PlanMigration(db, dir, count) + if err != nil { + log.Errorf("Error planning migration: %s", err.Error()) + return + } + if len(migrations) > 0 { + log.Infof("Migrations to apply %s: %s", dirStr, strings.Join(migrations, ", ")) + } + + n, err := dbmigrate.Migrate(db, dir, count) + if err != nil { + log.Errorf("Error applying migrations: %s", err.Error()) + return + } + if n > 0 { + log.Infof("Successfully applied %d migrations %s.", n, dirStr) + } else { + log.Infof("No migrations applied %s.", dirStr) + } +} diff --git a/services/regulated-assets-approval-server/cmd/serve.go b/services/regulated-assets-approval-server/cmd/serve.go index fda4417ca0..baccf46554 100644 --- a/services/regulated-assets-approval-server/cmd/serve.go +++ b/services/regulated-assets-approval-server/cmd/serve.go @@ -6,7 +6,7 @@ import ( "github.com/spf13/cobra" "github.com/stellar/go/clients/horizonclient" "github.com/stellar/go/network" - "github.com/stellar/go/services/regulated-assets-approval-server/serve" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/serve" "github.com/stellar/go/support/config" ) @@ -29,6 +29,14 @@ func (c *ServeCommand) Command() *cobra.Command { ConfigKey: &opts.AssetCode, Required: true, }, + { + Name: "database-url", + Usage: "Database URL", + OptType: types.String, + ConfigKey: &opts.DatabaseURL, + FlagDefault: "postgres://localhost:5432/?sslmode=disable", + Required: true, + }, { Name: "friendbot-payment-amount", Usage: "The amount of regulated assets the friendbot will be distributing", @@ -61,6 +69,21 @@ func (c *ServeCommand) Command() *cobra.Command { FlagDefault: 8000, Required: true, }, + { + Name: "base-url", + Usage: "The base url address to this server", + OptType: types.String, + ConfigKey: &opts.BaseURL, + Required: true, + }, + { + Name: "kyc-required-payment-amount-threshold", + Usage: "The amount threshold when KYC is required, may contain decimals and is greater than 0", + OptType: types.String, + ConfigKey: &opts.KYCRequiredPaymentAmountThreshold, + FlagDefault: "500", + Required: true, + }, } cmd := &cobra.Command{ Use: "serve", diff --git a/services/regulated-assets-approval-server/docker/Dockerfile b/services/regulated-assets-approval-server/docker/Dockerfile index 938cdf43ac..e29a355f7b 100644 --- a/services/regulated-assets-approval-server/docker/Dockerfile +++ b/services/regulated-assets-approval-server/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.16.2 as build +FROM golang:1.16.3 as build ADD . /src/regulated-assets-approval-server WORKDIR /src/regulated-assets-approval-server diff --git a/services/regulated-assets-approval-server/internal/db/db.go b/services/regulated-assets-approval-server/internal/db/db.go new file mode 100644 index 0000000000..d0cab4db33 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/db/db.go @@ -0,0 +1,9 @@ +package db + +import ( + "github.com/jmoiron/sqlx" +) + +func Open(dataSourceName string) (*sqlx.DB, error) { + return sqlx.Open("postgres", dataSourceName) +} diff --git a/services/regulated-assets-approval-server/internal/db/db_test.go b/services/regulated-assets-approval-server/internal/db/db_test.go new file mode 100644 index 0000000000..91cb6771c0 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/db/db_test.go @@ -0,0 +1,30 @@ +package db + +import ( + "testing" + + "github.com/stellar/go/support/db/dbtest" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestOpen_openAndPingSucceeds(t *testing.T) { + db := dbtest.Postgres(t) + + sqlxDB, err := Open(db.DSN) + require.NoError(t, err) + assert.Equal(t, "postgres", sqlxDB.DriverName()) + + err = sqlxDB.Ping() + require.NoError(t, err) +} + +func TestOpen_openAndPingFails(t *testing.T) { + sqlxDB, err := Open("postgres://127.0.0.1:0") + require.NoError(t, err) + assert.Equal(t, "postgres", sqlxDB.DriverName()) + + err = sqlxDB.Ping() + require.Error(t, err) + require.Contains(t, err.Error(), "dial tcp 127.0.0.1:0: connect:") +} diff --git a/services/regulated-assets-approval-server/internal/db/dbmigrate/dbmigrate.go b/services/regulated-assets-approval-server/internal/db/dbmigrate/dbmigrate.go new file mode 100644 index 0000000000..313ee3399e --- /dev/null +++ b/services/regulated-assets-approval-server/internal/db/dbmigrate/dbmigrate.go @@ -0,0 +1,35 @@ +package dbmigrate + +import ( + "github.com/jmoiron/sqlx" + migrate "github.com/rubenv/sql-migrate" +) + +//go:generate go-bindata -nometadata -ignore .+\.(go|swp)$ -pkg dbmigrate -o dbmigrate_generated.go ./migrations + +var migrationSource = &migrate.AssetMigrationSource{ + Asset: Asset, + AssetDir: AssetDir, + Dir: "migrations", +} + +// PlanMigration finds the migrations that would be applied if Migrate was to +// be run now. +func PlanMigration(db *sqlx.DB, dir migrate.MigrationDirection, count int) ([]string, error) { + migrations, _, err := migrate.PlanMigration(db.DB, db.DriverName(), migrationSource, dir, count) + if err != nil { + return nil, err + } + ids := make([]string, 0, len(migrations)) + for _, m := range migrations { + ids = append(ids, m.Id) + } + return ids, nil +} + +// Migrate runs all the migrations to get the database to the state described +// by the migration files in the direction specified. Count is the maximum +// number of migrations to apply or rollback. +func Migrate(db *sqlx.DB, dir migrate.MigrationDirection, count int) (int, error) { + return migrate.ExecMax(db.DB, db.DriverName(), migrationSource, dir, count) +} diff --git a/services/regulated-assets-approval-server/internal/db/dbmigrate/dbmigrate_generated.go b/services/regulated-assets-approval-server/internal/db/dbmigrate/dbmigrate_generated.go new file mode 100644 index 0000000000..e70bfccdf3 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/db/dbmigrate/dbmigrate_generated.go @@ -0,0 +1,296 @@ +// Code generated by go-bindata. DO NOT EDIT. +// sources: +// migrations/2021-05-05.0.initial.sql (162B) +// migrations/2021-05-18.0.accounts-kyc-status.sql (414B) + +package dbmigrate + +import ( + "bytes" + "compress/gzip" + "crypto/sha256" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + "time" +) + +func bindataRead(data []byte, name string) ([]byte, error) { + gz, err := gzip.NewReader(bytes.NewBuffer(data)) + if err != nil { + return nil, fmt.Errorf("read %q: %w", name, err) + } + + var buf bytes.Buffer + _, err = io.Copy(&buf, gz) + clErr := gz.Close() + + if err != nil { + return nil, fmt.Errorf("read %q: %w", name, err) + } + if clErr != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +type asset struct { + bytes []byte + info os.FileInfo + digest [sha256.Size]byte +} + +type bindataFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time +} + +func (fi bindataFileInfo) Name() string { + return fi.name +} +func (fi bindataFileInfo) Size() int64 { + return fi.size +} +func (fi bindataFileInfo) Mode() os.FileMode { + return fi.mode +} +func (fi bindataFileInfo) ModTime() time.Time { + return fi.modTime +} +func (fi bindataFileInfo) IsDir() bool { + return false +} +func (fi bindataFileInfo) Sys() interface{} { + return nil +} + +var _migrations202105050InitialSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xcc\xd1\x0d\xc2\x30\x0c\x04\xd0\xff\x4c\x71\xff\x28\x4c\xc1\x08\x30\x80\x01\xa7\xb5\xd4\xda\x91\x6d\xa8\xb2\x3d\x8a\xf8\x40\x7c\xde\xdd\xd3\xd5\x8a\xeb\x2a\x81\x5d\x16\xa7\x14\x53\x34\xd9\x18\x12\x10\x4d\xd6\xd9\xd0\xb6\x0d\xf0\xde\x73\x80\xf4\x39\x27\x42\x13\x8f\x44\x24\x79\x8a\x2e\xe8\x26\x9a\x68\xe6\xa5\x56\xd8\xcb\x7f\x77\x81\x3b\x37\x73\xc6\xc1\x18\x9c\x58\xe9\xcd\x20\xc4\x63\xe5\x9d\xce\x65\xfa\xd3\x17\x33\x6e\xfd\x3f\x5f\xec\xd0\x52\x3e\x01\x00\x00\xff\xff\xd3\x79\x21\xda\xa2\x00\x00\x00") + +func migrations202105050InitialSqlBytes() ([]byte, error) { + return bindataRead( + _migrations202105050InitialSql, + "migrations/2021-05-05.0.initial.sql", + ) +} + +func migrations202105050InitialSql() (*asset, error) { + bytes, err := migrations202105050InitialSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "migrations/2021-05-05.0.initial.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd1, 0xd1, 0x21, 0xe9, 0x6d, 0xe0, 0xfe, 0xb4, 0x8b, 0x78, 0x2, 0xae, 0x5c, 0xd5, 0x8b, 0x41, 0xb8, 0x4b, 0xaa, 0x3a, 0xea, 0x69, 0xf, 0xf3, 0x2f, 0x6c, 0xae, 0x38, 0x46, 0xb, 0x2, 0xfc}} + return a, nil +} + +var _migrations202105180AccountsKycStatusSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x90\xc1\x4e\x83\x40\x10\x86\xef\xfb\x14\xff\xb1\x8d\xd6\x17\xe8\x09\x05\x13\x23\x42\x43\x20\xa6\x27\x32\x2c\x13\x5d\xbb\x0b\x9b\xdd\xc1\xaa\x4f\x6f\x02\x26\xda\x13\x1e\x27\xf3\xfd\xdf\x4c\xfe\xdd\x0e\x57\xce\xbc\x04\x12\x46\xe3\x95\xba\xab\xb2\xa4\xce\x50\x27\xb7\x79\x06\x3f\x75\xd6\xe8\x1b\xd2\x7a\x9c\x06\x89\xed\xe9\x53\xb7\x51\x48\xa6\x88\x8d\x02\x80\x28\x6c\x2d\x85\x96\xfa\x3e\x70\x8c\x10\xfe\x10\x14\x65\x8d\xa2\xc9\x73\x1c\xaa\x87\xa7\xa4\x3a\xe2\x31\x3b\x5e\xcf\xb8\x26\x6b\x3b\xd2\xa7\xd6\xf4\x97\xe8\xb2\x66\x47\xc6\x5e\xb8\x7e\x62\x81\x49\xb8\x6f\x49\x20\xc6\x71\x14\x72\x1e\x67\x23\xaf\xf3\x88\xaf\x71\xe0\xdf\xa3\x69\x76\x9f\x34\x79\x8d\xa2\x7c\xde\x6c\x97\xfc\xfc\xf6\xd4\x39\x23\x2b\x96\x05\x27\xef\xc3\xf8\xfe\x1f\x32\xf0\x1b\xeb\x15\xa7\xda\xee\x95\xfa\xdb\x72\x3a\x9e\x07\xa5\xd2\xaa\x3c\xac\xb6\xbc\xff\x0e\x00\x00\xff\xff\x68\xde\x80\x57\x9e\x01\x00\x00") + +func migrations202105180AccountsKycStatusSqlBytes() ([]byte, error) { + return bindataRead( + _migrations202105180AccountsKycStatusSql, + "migrations/2021-05-18.0.accounts-kyc-status.sql", + ) +} + +func migrations202105180AccountsKycStatusSql() (*asset, error) { + bytes, err := migrations202105180AccountsKycStatusSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "migrations/2021-05-18.0.accounts-kyc-status.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb0, 0x7b, 0x8c, 0x97, 0xe7, 0x6, 0x27, 0x5f, 0x19, 0xe2, 0xbb, 0x98, 0x73, 0x1e, 0x37, 0x74, 0xf0, 0x4a, 0x7, 0xe7, 0x15, 0x66, 0x90, 0x3c, 0x2, 0xab, 0x16, 0x39, 0x65, 0xf2, 0x8a, 0x1f}} + return a, nil +} + +// Asset loads and returns the asset for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func Asset(name string) ([]byte, error) { + canonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[canonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) + } + return a.bytes, nil + } + return nil, fmt.Errorf("Asset %s not found", name) +} + +// AssetString returns the asset contents as a string (instead of a []byte). +func AssetString(name string) (string, error) { + data, err := Asset(name) + return string(data), err +} + +// MustAsset is like Asset but panics when Asset would return an error. +// It simplifies safe initialization of global variables. +func MustAsset(name string) []byte { + a, err := Asset(name) + if err != nil { + panic("asset: Asset(" + name + "): " + err.Error()) + } + + return a +} + +// MustAssetString is like AssetString but panics when Asset would return an +// error. It simplifies safe initialization of global variables. +func MustAssetString(name string) string { + return string(MustAsset(name)) +} + +// AssetInfo loads and returns the asset info for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func AssetInfo(name string) (os.FileInfo, error) { + canonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[canonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) + } + return a.info, nil + } + return nil, fmt.Errorf("AssetInfo %s not found", name) +} + +// AssetDigest returns the digest of the file with the given name. It returns an +// error if the asset could not be found or the digest could not be loaded. +func AssetDigest(name string) ([sha256.Size]byte, error) { + canonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[canonicalName]; ok { + a, err := f() + if err != nil { + return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s can't read by error: %v", name, err) + } + return a.digest, nil + } + return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s not found", name) +} + +// Digests returns a map of all known files and their checksums. +func Digests() (map[string][sha256.Size]byte, error) { + mp := make(map[string][sha256.Size]byte, len(_bindata)) + for name := range _bindata { + a, err := _bindata[name]() + if err != nil { + return nil, err + } + mp[name] = a.digest + } + return mp, nil +} + +// AssetNames returns the names of the assets. +func AssetNames() []string { + names := make([]string, 0, len(_bindata)) + for name := range _bindata { + names = append(names, name) + } + return names +} + +// _bindata is a table, holding each asset generator, mapped to its name. +var _bindata = map[string]func() (*asset, error){ + "migrations/2021-05-05.0.initial.sql": migrations202105050InitialSql, + "migrations/2021-05-18.0.accounts-kyc-status.sql": migrations202105180AccountsKycStatusSql, +} + +// AssetDir returns the file names below a certain +// directory embedded in the file by go-bindata. +// For example if you run go-bindata on data/... and data contains the +// following hierarchy: +// data/ +// foo.txt +// img/ +// a.png +// b.png +// then AssetDir("data") would return []string{"foo.txt", "img"}, +// AssetDir("data/img") would return []string{"a.png", "b.png"}, +// AssetDir("foo.txt") and AssetDir("notexist") would return an error, and +// AssetDir("") will return []string{"data"}. +func AssetDir(name string) ([]string, error) { + node := _bintree + if len(name) != 0 { + canonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(canonicalName, "/") + for _, p := range pathList { + node = node.Children[p] + if node == nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + } + } + if node.Func != nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + rv := make([]string, 0, len(node.Children)) + for childName := range node.Children { + rv = append(rv, childName) + } + return rv, nil +} + +type bintree struct { + Func func() (*asset, error) + Children map[string]*bintree +} + +var _bintree = &bintree{nil, map[string]*bintree{ + "migrations": &bintree{nil, map[string]*bintree{ + "2021-05-05.0.initial.sql": &bintree{migrations202105050InitialSql, map[string]*bintree{}}, + "2021-05-18.0.accounts-kyc-status.sql": &bintree{migrations202105180AccountsKycStatusSql, map[string]*bintree{}}, + }}, +}} + +// RestoreAsset restores an asset under the given directory. +func RestoreAsset(dir, name string) error { + data, err := Asset(name) + if err != nil { + return err + } + info, err := AssetInfo(name) + if err != nil { + return err + } + err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755)) + if err != nil { + return err + } + err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + if err != nil { + return err + } + return os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) +} + +// RestoreAssets restores an asset under the given directory recursively. +func RestoreAssets(dir, name string) error { + children, err := AssetDir(name) + // File + if err != nil { + return RestoreAsset(dir, name) + } + // Dir + for _, child := range children { + err = RestoreAssets(dir, filepath.Join(name, child)) + if err != nil { + return err + } + } + return nil +} + +func _filePath(dir, name string) string { + canonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(canonicalName, "/")...)...) +} diff --git a/services/regulated-assets-approval-server/internal/db/dbmigrate/dbmigrate_test.go b/services/regulated-assets-approval-server/internal/db/dbmigrate/dbmigrate_test.go new file mode 100644 index 0000000000..6a78298fb3 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/db/dbmigrate/dbmigrate_test.go @@ -0,0 +1,243 @@ +package dbmigrate + +import ( + "net/http" + "os" + "strings" + "testing" + + assetfs "github.com/elazarl/go-bindata-assetfs" + migrate "github.com/rubenv/sql-migrate" + "github.com/shurcooL/httpfs/filter" + dbpkg "github.com/stellar/go/services/regulated-assets-approval-server/internal/db" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/db/dbtest" + supportHttp "github.com/stellar/go/support/http" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestGeneratedAssets(t *testing.T) { + localAssets := http.FileSystem(filter.Keep(http.Dir("."), func(path string, fi os.FileInfo) bool { + return fi.IsDir() || strings.HasSuffix(path, ".sql") + })) + generatedAssets := &assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: AssetInfo} + + if !supportHttp.EqualFileSystems(localAssets, generatedAssets, "/") { + t.Fatalf("generated migrations does not match local migrations") + } +} + +func TestPlanMigration_upApplyOne(t *testing.T) { + db := dbtest.OpenWithoutMigrations(t) + session, err := dbpkg.Open(db.DSN) + require.NoError(t, err) + + migrations, err := PlanMigration(session, migrate.Up, 1) + require.NoError(t, err) + wantMigrations := []string{"2021-05-05.0.initial.sql"} + assert.Equal(t, wantMigrations, migrations) +} + +func TestPlanMigration_upApplyAll(t *testing.T) { + db := dbtest.OpenWithoutMigrations(t) + session, err := dbpkg.Open(db.DSN) + require.NoError(t, err) + + migrations, err := PlanMigration(session, migrate.Up, 0) + require.NoError(t, err) + require.GreaterOrEqual(t, len(migrations), 2) + wantAtLeastMigrations := []string{ + "2021-05-05.0.initial.sql", + "2021-05-18.0.accounts-kyc-status.sql", + } + assert.Equal(t, wantAtLeastMigrations, migrations[:2]) +} + +func TestPlanMigration_upApplyNone(t *testing.T) { + db := dbtest.OpenWithoutMigrations(t) + session, err := dbpkg.Open(db.DSN) + require.NoError(t, err) + + n, err := Migrate(session, migrate.Up, 0) + require.NoError(t, err) + require.Greater(t, n, 1) + + migrations, err := PlanMigration(session, migrate.Up, 0) + require.NoError(t, err) + require.Empty(t, migrations) +} + +func TestPlanMigration_downApplyOne(t *testing.T) { + db := dbtest.OpenWithoutMigrations(t) + session, err := dbpkg.Open(db.DSN) + require.NoError(t, err) + + n, err := Migrate(session, migrate.Up, 2) + require.NoError(t, err) + require.Equal(t, 2, n) + + migrations, err := PlanMigration(session, migrate.Down, 1) + require.NoError(t, err) + wantMigrations := []string{"2021-05-18.0.accounts-kyc-status.sql"} + assert.Equal(t, wantMigrations, migrations) +} + +func TestPlanMigration_downApplyAll(t *testing.T) { + db := dbtest.OpenWithoutMigrations(t) + session, err := dbpkg.Open(db.DSN) + require.NoError(t, err) + + n, err := Migrate(session, migrate.Up, 2) + require.NoError(t, err) + require.Equal(t, 2, n) + + migrations, err := PlanMigration(session, migrate.Down, 0) + require.NoError(t, err) + wantMigrations := []string{ + "2021-05-18.0.accounts-kyc-status.sql", + "2021-05-05.0.initial.sql", + } + assert.Equal(t, wantMigrations, migrations) +} + +func TestPlanMigration_downApplyNone(t *testing.T) { + db := dbtest.OpenWithoutMigrations(t) + session, err := dbpkg.Open(db.DSN) + require.NoError(t, err) + + n, err := Migrate(session, migrate.Up, 2) + require.NoError(t, err) + require.Equal(t, 2, n) + + n, err = Migrate(session, migrate.Down, 0) + require.NoError(t, err) + require.Equal(t, 2, n) + + migrations, err := PlanMigration(session, migrate.Down, 0) + require.NoError(t, err) + assert.Empty(t, migrations) +} + +func TestMigrate_upApplyOne(t *testing.T) { + db := dbtest.OpenWithoutMigrations(t) + session, err := dbpkg.Open(db.DSN) + require.NoError(t, err) + + n, err := Migrate(session, migrate.Up, 1) + require.NoError(t, err) + assert.Equal(t, 1, n) + + ids := []string{} + err = session.Select(&ids, `SELECT id FROM gorp_migrations`) + require.NoError(t, err) + wantIDs := []string{ + "2021-05-05.0.initial.sql", + } + assert.Equal(t, wantIDs, ids) +} + +func TestMigrate_upApplyAll(t *testing.T) { + db := dbtest.OpenWithoutMigrations(t) + session, err := dbpkg.Open(db.DSN) + require.NoError(t, err) + + n, err := Migrate(session, migrate.Up, 0) + require.NoError(t, err) + require.Greater(t, n, 1) + + ids := []string{} + err = session.Select(&ids, `SELECT id FROM gorp_migrations`) + require.NoError(t, err) + wantIDs := []string{ + "2021-05-05.0.initial.sql", + "2021-05-18.0.accounts-kyc-status.sql", + } + assert.Equal(t, wantIDs, ids) +} + +func TestMigrate_upApplyNone(t *testing.T) { + db := dbtest.OpenWithoutMigrations(t) + session, err := dbpkg.Open(db.DSN) + require.NoError(t, err) + + n, err := Migrate(session, migrate.Up, 0) + require.NoError(t, err) + require.Greater(t, n, 1) + + n, err = Migrate(session, migrate.Up, 0) + require.NoError(t, err) + require.Zero(t, n) + + ids := []string{} + err = session.Select(&ids, `SELECT id FROM gorp_migrations`) + require.NoError(t, err) + wantIDs := []string{ + "2021-05-05.0.initial.sql", + "2021-05-18.0.accounts-kyc-status.sql", + } + assert.Equal(t, wantIDs, ids) +} + +func TestMigrate_downApplyOne(t *testing.T) { + db := dbtest.OpenWithoutMigrations(t) + session, err := dbpkg.Open(db.DSN) + require.NoError(t, err) + + n, err := Migrate(session, migrate.Up, 2) + require.NoError(t, err) + require.Equal(t, 2, n) + + n, err = Migrate(session, migrate.Down, 1) + require.NoError(t, err) + require.Equal(t, 1, n) + + ids := []string{} + err = session.Select(&ids, `SELECT id FROM gorp_migrations`) + require.NoError(t, err) + wantIDs := []string{ + "2021-05-05.0.initial.sql", + } + assert.Equal(t, wantIDs, ids) +} + +func TestMigrate_downApplyAll(t *testing.T) { + db := dbtest.OpenWithoutMigrations(t) + session, err := dbpkg.Open(db.DSN) + require.NoError(t, err) + + n, err := Migrate(session, migrate.Up, 2) + require.NoError(t, err) + require.Equal(t, 2, n) + + n, err = Migrate(session, migrate.Down, 0) + require.NoError(t, err) + require.Equal(t, 2, n) + + ids := []string{} + err = session.Select(&ids, `SELECT id FROM gorp_migrations`) + require.NoError(t, err) + assert.Empty(t, ids) +} + +func TestMigrate_downApplyNone(t *testing.T) { + db := dbtest.OpenWithoutMigrations(t) + session, err := dbpkg.Open(db.DSN) + require.NoError(t, err) + + n, err := Migrate(session, migrate.Up, 2) + require.NoError(t, err) + require.Equal(t, 2, n) + + n, err = Migrate(session, migrate.Down, 0) + require.NoError(t, err) + require.Equal(t, 2, n) + + n, err = Migrate(session, migrate.Down, 0) + require.NoError(t, err) + require.Equal(t, 0, n) + + ids := []string{} + err = session.Select(&ids, `SELECT id FROM gorp_migrations`) + require.NoError(t, err) + assert.Empty(t, ids) +} diff --git a/services/regulated-assets-approval-server/internal/db/dbmigrate/migrations/2021-05-05.0.initial.sql b/services/regulated-assets-approval-server/internal/db/dbmigrate/migrations/2021-05-05.0.initial.sql new file mode 100644 index 0000000000..21884dcac3 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/db/dbmigrate/migrations/2021-05-05.0.initial.sql @@ -0,0 +1,7 @@ +-- This migration file is intentionally empty and is a first starting point for +-- our migrations before we yet have a schema. + +-- +migrate Up + +-- +migrate Down + diff --git a/services/regulated-assets-approval-server/internal/db/dbmigrate/migrations/2021-05-18.0.accounts-kyc-status.sql b/services/regulated-assets-approval-server/internal/db/dbmigrate/migrations/2021-05-18.0.accounts-kyc-status.sql new file mode 100644 index 0000000000..a40e01892b --- /dev/null +++ b/services/regulated-assets-approval-server/internal/db/dbmigrate/migrations/2021-05-18.0.accounts-kyc-status.sql @@ -0,0 +1,15 @@ +-- +migrate Up + +CREATE TABLE public.accounts_kyc_status ( + stellar_address text NOT NULL PRIMARY KEY, + callback_id text NOT NULL, + email_address text, + created_at timestamp with time zone NOT NULL DEFAULT NOW(), + kyc_submitted_at timestamp with time zone, + approved_at timestamp with time zone, + rejected_at timestamp with time zone +); + +-- +migrate Down + +DROP TABLE public.accounts_kyc_status; \ No newline at end of file diff --git a/services/regulated-assets-approval-server/internal/db/dbtest/dbtest.go b/services/regulated-assets-approval-server/internal/db/dbtest/dbtest.go new file mode 100644 index 0000000000..d09610c795 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/db/dbtest/dbtest.go @@ -0,0 +1,39 @@ +package dbtest + +import ( + "path" + "runtime" + "testing" + + migrate "github.com/rubenv/sql-migrate" + "github.com/stellar/go/support/db/dbtest" +) + +func OpenWithoutMigrations(t *testing.T) *dbtest.DB { + db := dbtest.Postgres(t) + return db +} + +func Open(t *testing.T) *dbtest.DB { + db := OpenWithoutMigrations(t) + + // Get the folder holding the migrations relative to this file. We cannot + // hardcode "../dbmigrate/migrations" because Open is called from tests in + // multiple packages and tests are executed with the current working + // directory set to the package the test lives in. + _, filename, _, _ := runtime.Caller(0) + migrationsDir := path.Join(path.Dir(filename), "..", "dbmigrate", "migrations") + + migrations := &migrate.FileMigrationSource{ + Dir: migrationsDir, + } + + conn := db.Open() + defer conn.Close() + + _, err := migrate.Exec(conn.DB, "postgres", migrations, migrate.Up) + if err != nil { + t.Fatal(err) + } + return db +} diff --git a/services/regulated-assets-approval-server/internal/db/dbtest/dbtest_test.go b/services/regulated-assets-approval-server/internal/db/dbtest/dbtest_test.go new file mode 100644 index 0000000000..95f6213b13 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/db/dbtest/dbtest_test.go @@ -0,0 +1,18 @@ +package dbtest + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestOpen(t *testing.T) { + db := Open(t) + session := db.Open() + + count := 0 + err := session.Get(&count, `SELECT COUNT(*) FROM gorp_migrations`) + require.NoError(t, err) + assert.Greater(t, count, 0) +} diff --git a/services/regulated-assets-approval-server/internal/serve/api_kyc_status_test.go b/services/regulated-assets-approval-server/internal/serve/api_kyc_status_test.go new file mode 100644 index 0000000000..5e0beb0387 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/serve/api_kyc_status_test.go @@ -0,0 +1,457 @@ +package serve + +import ( + "context" + "database/sql" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "net/http/httptest" + "strings" + "testing" + "time" + + "github.com/go-chi/chi" + "github.com/google/uuid" + "github.com/stellar/go/keypair" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/db/dbtest" + kycstatus "github.com/stellar/go/services/regulated-assets-approval-server/internal/serve/kyc-status" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestAPI_POSTKYCStatus(t *testing.T) { + ctx := context.Background() + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + + // Create kyc-status PostHandler. + postHandler := kycstatus.PostHandler{DB: conn} + + // INSERT new unverified account in db's accounts_kyc_status table. + const insertNewAccountQuery = ` + INSERT INTO accounts_kyc_status (stellar_address, callback_id) + VALUES ($1, $2) + ` + approveKP := keypair.MustRandom() + callbackID := uuid.New().String() + _, err := postHandler.DB.ExecContext(ctx, insertNewAccountQuery, approveKP.Address(), callbackID) + require.NoError(t, err) + + // Preparing and send /kyc-status/{callback_id} POST request. + m := chi.NewMux() + m.Post("/kyc-status/{callback_id}", postHandler.ServeHTTP) + reqBody := `{ + "email_address": "TestEmail@email.com" + }` + r := httptest.NewRequest("POST", fmt.Sprintf("/kyc-status/%s", callbackID), strings.NewReader(reqBody)) + r = r.WithContext(ctx) + w := httptest.NewRecorder() + m.ServeHTTP(w, r) + resp := w.Result() + assert.Equal(t, http.StatusOK, w.Code) + assert.Equal(t, http.StatusOK, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "no_further_action_required" response for approved account. + type kycStatusPOSTResponse struct { + Result string `json:"result"` + } + var kycStatusPOSTResponseApprove kycStatusPOSTResponse + err = json.Unmarshal(body, &kycStatusPOSTResponseApprove) + require.NoError(t, err) + wantPostResponse := kycStatusPOSTResponse{ + Result: "no_further_action_required", + } + assert.Equal(t, wantPostResponse, kycStatusPOSTResponseApprove) + + // Query db's accounts_kyc_status table account after /kyc-status/{callback_id} POST request. + const selectAccountQuery = ` + SELECT approved_at, rejected_at + FROM accounts_kyc_status + WHERE callback_id = $1 + ` + var approvedAt, rejectedAt sql.NullTime + err = postHandler.DB.QueryRowContext(ctx, selectAccountQuery, callbackID).Scan(&approvedAt, &rejectedAt) + require.NoError(t, err) + + // TEST if account in db's accounts_kyc_status table was approved. + // sql.NullTime.Valid is true if Time is not NULL + assert.True(t, approvedAt.Valid) + assert.False(t, rejectedAt.Valid) + + // INSERT new unverified account in db's accounts_kyc_status table. + rejectedKP := keypair.MustRandom() + callbackIDRejected := uuid.New().String() + _, err = postHandler.DB.ExecContext(ctx, insertNewAccountQuery, rejectedKP.Address(), callbackIDRejected) + require.NoError(t, err) + + // Preparing and send /kyc-status/{callback_id} POST request. + reqBody = `{ + "email_address": "xTestEmail@email.com" + }` + r = httptest.NewRequest("POST", fmt.Sprintf("/kyc-status/%s", callbackIDRejected), strings.NewReader(reqBody)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusOK, w.Code) + assert.Equal(t, http.StatusOK, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "no_further_action_required" response for rejected account. + var kycStatusPOSTResponseRejected kycStatusPOSTResponse + err = json.Unmarshal(body, &kycStatusPOSTResponseRejected) + require.NoError(t, err) + wantPostResponse = kycStatusPOSTResponse{ + Result: "no_further_action_required", + } + assert.Equal(t, wantPostResponse, kycStatusPOSTResponseRejected) + + // Query db's accounts_kyc_status table account after /kyc-status/{callback_id} POST request. + err = postHandler.DB.QueryRowContext(ctx, selectAccountQuery, callbackIDRejected).Scan(&approvedAt, &rejectedAt) + require.NoError(t, err) + + // TEST if account in db's accounts_kyc_status table was rejected. + // Should be rejected based on arbitrary rule where emails begin with "x". + // sql.NullTime.Valid is true if Time is not NULL + assert.True(t, rejectedAt.Valid) + assert.False(t, approvedAt.Valid) + + // Preparing and send /kyc-status/{callback_id} POST request; using the rejected account's callback_ID. + reqBody = `{ + "email_address": "TestEmailx@email.com" + }` + r = httptest.NewRequest("POST", fmt.Sprintf("/kyc-status/%s", callbackIDRejected), strings.NewReader(reqBody)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusOK, w.Code) + assert.Equal(t, http.StatusOK, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "no_further_action_required" response for repeated KYC request after REJECTED w/ new email. + var kycStatusPOSTResponseRejectedNewEmail kycStatusPOSTResponse + err = json.Unmarshal(body, &kycStatusPOSTResponseRejectedNewEmail) + require.NoError(t, err) + wantPostResponse = kycStatusPOSTResponse{ + Result: "no_further_action_required", + } + assert.Equal(t, wantPostResponse, kycStatusPOSTResponseRejectedNewEmail) + + // Query db's accounts_kyc_status table account after /kyc-status/{callback_id} POST request. + selectUpdatedAccountEmailQuery := ` + SELECT approved_at, rejected_at, email_address + FROM accounts_kyc_status + WHERE callback_id = $1 + ` + var updatedEmail string + err = postHandler.DB.QueryRowContext(ctx, selectUpdatedAccountEmailQuery, callbackIDRejected).Scan(&approvedAt, &rejectedAt, &updatedEmail) + require.NoError(t, err) + + // TEST if account in db's accounts_kyc_status table was approved, and email was overwritten. + // sql.NullTime.Valid is true if Time is not NULL + assert.True(t, approvedAt.Valid) + assert.False(t, rejectedAt.Valid) + assert.NotEqual(t, "xTestEmail@email.com", updatedEmail) + + // Preparing and send /kyc-status/{callback_id} POST request; w/ empty email value. + noEmailKP := keypair.MustRandom() + callbackIDNoEmail := uuid.New().String() + _, err = postHandler.DB.ExecContext(ctx, insertNewAccountQuery, noEmailKP.Address(), callbackIDNoEmail) + require.NoError(t, err) + reqBody = `{ + "email_address": "" + }` + r = httptest.NewRequest("POST", fmt.Sprintf("/kyc-status/%s", callbackIDNoEmail), strings.NewReader(reqBody)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusBadRequest, w.Code) + assert.Equal(t, http.StatusBadRequest, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "Missing email_address" error response. + wantPostResponseMissingEmail := `{ + "error": "Missing email_address." + }` + require.JSONEq(t, wantPostResponseMissingEmail, string(body)) + + // Preparing and send /kyc-status/{callback_id} POST request; callback_id not registered. + callbackIDNotFound := uuid.New().String() + reqBody = `{ + "email_address": "notFound@email.com" + }` + r = httptest.NewRequest("POST", fmt.Sprintf("/kyc-status/%s", callbackIDNotFound), strings.NewReader(reqBody)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusNotFound, w.Code) + assert.Equal(t, http.StatusNotFound, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "Not found." error response. + wantPostResponseNotFound := `{ + "error": "Not found." + }` + require.JSONEq(t, wantPostResponseNotFound, string(body)) +} + +func TestAPI_GETKYCStatus(t *testing.T) { + ctx := context.Background() + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + + // Create kyc-status GetDetailHandler. + getHandler := kycstatus.GetDetailHandler{DB: conn} + + // INSERT new account in db's accounts_kyc_status table; new account was approved after submitting kyc. + insertNewApprovedAccountQuery := ` + INSERT INTO accounts_kyc_status (stellar_address, callback_id, email_address, kyc_submitted_at, approved_at, rejected_at) + VALUES ($1, $2, $3, NOW(), NOW(), NULL) + ` + approveKP := keypair.MustRandom() + approveCallbackID := uuid.New().String() + approveEmailAddress := "email@approved.com" + _, err := getHandler.DB.ExecContext(ctx, insertNewApprovedAccountQuery, approveKP.Address(), approveCallbackID, approveEmailAddress) + require.NoError(t, err) + + // Prepare and send /kyc-status/{stellar_address_or_callback_id} GET request; for approved account in the accounts_kyc_status table. + m := chi.NewMux() + m.Get("/kyc-status/{stellar_address_or_callback_id}", getHandler.ServeHTTP) + r := httptest.NewRequest("GET", fmt.Sprintf("/kyc-status/%s", approveKP.Address()), nil) + r = r.WithContext(ctx) + w := httptest.NewRecorder() + m.ServeHTTP(w, r) + resp := w.Result() + assert.Equal(t, http.StatusOK, w.Code) + assert.Equal(t, http.StatusOK, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST kycGetResponse response for approved account. + type kycGETResponse struct { + StellarAddress string `json:"stellar_address"` + CallbackID string `json:"callback_id"` + EmailAddress string `json:"email_address,omitempty"` + CreatedAt *time.Time `json:"created_at"` + KYCSubmittedAt *time.Time `json:"kyc_submitted_at,omitempty"` + ApprovedAt *time.Time `json:"approved_at,omitempty"` + RejectedAt *time.Time `json:"rejected_at,omitempty"` + } + var kycStatusGETResponseApprove kycGETResponse + err = json.Unmarshal(body, &kycStatusGETResponseApprove) + require.NoError(t, err) + wantPostResponse := kycGETResponse{ + StellarAddress: approveKP.Address(), + CallbackID: approveCallbackID, + EmailAddress: approveEmailAddress, + CreatedAt: kycStatusGETResponseApprove.CreatedAt, + KYCSubmittedAt: kycStatusGETResponseApprove.KYCSubmittedAt, + ApprovedAt: kycStatusGETResponseApprove.ApprovedAt, + RejectedAt: kycStatusGETResponseApprove.RejectedAt, + } + assert.Equal(t, wantPostResponse, kycStatusGETResponseApprove) + + // TEST if response timestamps are present or null. + require.NotNil(t, kycStatusGETResponseApprove.CreatedAt) + require.NotNil(t, kycStatusGETResponseApprove.KYCSubmittedAt) + require.NotNil(t, kycStatusGETResponseApprove.ApprovedAt) + require.Nil(t, kycStatusGETResponseApprove.RejectedAt) + + // INSERT new account in db's accounts_kyc_status table; new account was rejected after submiting kyc. + insertNewRejectedAccountQuery := ` + INSERT INTO accounts_kyc_status (stellar_address, callback_id, email_address, kyc_submitted_at, approved_at, rejected_at) + VALUES ($1, $2, $3, NOW(), NULL, NOW()) + ` + rejectKP := keypair.MustRandom() + rejectCallbackID := uuid.New().String() + rejectEmailAddress := "xemail@rejected.com" + _, err = getHandler.DB.ExecContext(ctx, insertNewRejectedAccountQuery, rejectKP.Address(), rejectCallbackID, rejectEmailAddress) + require.NoError(t, err) + + // Prepare and send /kyc-status/{stellar_address_or_callback_id} GET request; for rejected account in the accounts_kyc_status table. + r = httptest.NewRequest("GET", fmt.Sprintf("/kyc-status/%s", rejectKP.Address()), nil) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusOK, w.Code) + assert.Equal(t, http.StatusOK, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST kycGetResponse response for rejected account. + var kycStatusGETResponseReject kycGETResponse + err = json.Unmarshal(body, &kycStatusGETResponseReject) + require.NoError(t, err) + wantPostResponse = kycGETResponse{ + StellarAddress: rejectKP.Address(), + CallbackID: rejectCallbackID, + EmailAddress: rejectEmailAddress, + CreatedAt: kycStatusGETResponseReject.CreatedAt, + KYCSubmittedAt: kycStatusGETResponseReject.KYCSubmittedAt, + ApprovedAt: kycStatusGETResponseReject.ApprovedAt, + RejectedAt: kycStatusGETResponseReject.RejectedAt, + } + assert.Equal(t, wantPostResponse, kycStatusGETResponseReject) + + // TEST if response timestamps are present or null. + require.NotNil(t, kycStatusGETResponseReject.CreatedAt) + require.NotNil(t, kycStatusGETResponseReject.KYCSubmittedAt) + require.NotNil(t, kycStatusGETResponseReject.RejectedAt) + require.Nil(t, kycStatusGETResponseReject.ApprovedAt) + + // INSERT new account in db's accounts_kyc_status table; new account hasn't submitted kyc. + insertNewAccountNoKycQuery := ` + INSERT INTO accounts_kyc_status (stellar_address, callback_id, email_address, kyc_submitted_at, approved_at, rejected_at) + VALUES ($1, $2, NULL, NULL, NULL, NULL) + ` + noKycAccountKP := keypair.MustRandom() + noKycCallbackID := uuid.New().String() + _, err = getHandler.DB.ExecContext(ctx, insertNewAccountNoKycQuery, noKycAccountKP.Address(), noKycCallbackID) + require.NoError(t, err) + + // Prepare and send /kyc-status/{stellar_address_or_callback_id} GET request; for no KYC account in the accounts_kyc_status table (this time using their callbackID). + r = httptest.NewRequest("GET", fmt.Sprintf("/kyc-status/%s", noKycCallbackID), nil) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusOK, w.Code) + assert.Equal(t, http.StatusOK, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST kycGetResponse response for account that hasn't submitted kyc. + var kycStatusGETResponseNoKyc kycGETResponse + err = json.Unmarshal(body, &kycStatusGETResponseNoKyc) + require.NoError(t, err) + wantPostResponse = kycGETResponse{ + StellarAddress: noKycAccountKP.Address(), + CallbackID: noKycCallbackID, + EmailAddress: "", + CreatedAt: kycStatusGETResponseNoKyc.CreatedAt, + KYCSubmittedAt: kycStatusGETResponseNoKyc.KYCSubmittedAt, + ApprovedAt: kycStatusGETResponseNoKyc.ApprovedAt, + RejectedAt: kycStatusGETResponseNoKyc.RejectedAt, + } + assert.Equal(t, wantPostResponse, kycStatusGETResponseNoKyc) + + // TEST if response timestamps are present or null. + require.NotNil(t, kycStatusGETResponseNoKyc.CreatedAt) + require.Nil(t, kycStatusGETResponseNoKyc.KYCSubmittedAt) + require.Nil(t, kycStatusGETResponseNoKyc.RejectedAt) + require.Nil(t, kycStatusGETResponseNoKyc.ApprovedAt) + + // Prepare and send /kyc-status/{stellar_address_or_callback_id} GET request; for an account that isn't in the accounts_kyc_status table. + notPresentKP := keypair.MustRandom() + r = httptest.NewRequest("GET", fmt.Sprintf("/kyc-status/%s", notPresentKP.Address()), nil) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusNotFound, w.Code) + assert.Equal(t, http.StatusNotFound, resp.StatusCode) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "Not found." error response. + wantGetResponseNotFound := `{ + "error": "Not found." + }` + require.JSONEq(t, wantGetResponseNotFound, string(body)) +} + +func TestAPI_DELETEKYCStatus(t *testing.T) { + ctx := context.Background() + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + + // Create kyc-status DeleteHandler. + deleteHandler := kycstatus.DeleteHandler{DB: conn} + + // INSERT new account in db's accounts_kyc_status table; new account was approved after submitting kyc. + insertNewApprovedAccountQuery := ` + INSERT INTO accounts_kyc_status (stellar_address, callback_id, email_address, kyc_submitted_at, approved_at, rejected_at) + VALUES ($1, $2, $3, NOW(), NOW(), NULL) + ` + approveKP := keypair.MustRandom() + approveCallbackID := uuid.New().String() + approveEmailAddress := "email@approved.com" + _, err := deleteHandler.DB.ExecContext(ctx, insertNewApprovedAccountQuery, approveKP.Address(), approveCallbackID, approveEmailAddress) + require.NoError(t, err) + + // Prepare and send /kyc-status/{stellar_address} DELETE request; for approved account in the accounts_kyc_status table. + m := chi.NewMux() + m.Delete("/kyc-status/{stellar_address}", deleteHandler.ServeHTTP) + r := httptest.NewRequest("DELETE", fmt.Sprintf("/kyc-status/%s", approveKP.Address()), nil) + r = r.WithContext(ctx) + w := httptest.NewRecorder() + m.ServeHTTP(w, r) + resp := w.Result() + assert.Equal(t, http.StatusOK, w.Code) + assert.Equal(t, http.StatusOK, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST ok response for deleteing account's kyc record from db's accounts_kyc_status table. + wantBody := `{ + "message":"ok" + }` + require.JSONEq(t, wantBody, string(body)) + + // Prepare and execute SELECT query for account that was deleted, TEST if the the account doesn't exist in the db. + existQuery := ` + SELECT EXISTS( + SELECT stellar_address + FROM accounts_kyc_status + WHERE stellar_address = $1 + )` + var exists bool + err = deleteHandler.DB.QueryRowContext(ctx, existQuery, approveKP.Address()).Scan(&exists) + require.NoError(t, err) + assert.False(t, exists) + + // Prepare and send /kyc-status/{stellar_address} DELETE request; for account that isn't in the accounts_kyc_status table. + r = httptest.NewRequest("DELETE", fmt.Sprintf("/kyc-status/%s", approveKP.Address()), nil) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusNotFound, w.Code) + assert.Equal(t, http.StatusNotFound, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST error "Not found." response for attempting to delete an account that isn't in the accounts_kyc_status table. + wantDeleteResponseNotFound := `{ + "error": "Not found." + }` + require.JSONEq(t, wantDeleteResponseNotFound, string(body)) +} diff --git a/services/regulated-assets-approval-server/internal/serve/api_tx_approve_test.go b/services/regulated-assets-approval-server/internal/serve/api_tx_approve_test.go new file mode 100644 index 0000000000..4ee6b6a310 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/serve/api_tx_approve_test.go @@ -0,0 +1,790 @@ +package serve + +import ( + "context" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "net/http/httptest" + "regexp" + "strings" + "testing" + + "github.com/go-chi/chi" + "github.com/stellar/go/amount" + "github.com/stellar/go/clients/horizonclient" + "github.com/stellar/go/keypair" + "github.com/stellar/go/network" + "github.com/stellar/go/protocols/horizon" + "github.com/stellar/go/protocols/horizon/base" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/db/dbtest" + kycstatus "github.com/stellar/go/services/regulated-assets-approval-server/internal/serve/kyc-status" + "github.com/stellar/go/txnbuild" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestAPI_RejectedIntegration(t *testing.T) { + ctx := context.Background() + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + + // Perpare accounts on mock horizon. + issuerAccKeyPair := keypair.MustRandom() + assetGOAT := txnbuild.CreditAsset{ + Code: "GOAT", + Issuer: issuerAccKeyPair.Address(), + } + horizonMock := horizonclient.MockClient{} + senderAccKP := keypair.MustRandom() + receiverAccKP := keypair.MustRandom() + horizonMock. + On("AccountDetail", horizonclient.AccountRequest{AccountID: issuerAccKeyPair.Address()}). + Return(horizon.Account{ + AccountID: issuerAccKeyPair.Address(), + Sequence: "1", + Balances: []horizon.Balance{ + { + Asset: base.Asset{Code: "ASSET", Issuer: issuerAccKeyPair.Address()}, + Balance: "1", + }, + }, + }, nil) + horizonMock. + On("AccountDetail", horizonclient.AccountRequest{AccountID: senderAccKP.Address()}). + Return(horizon.Account{ + AccountID: senderAccKP.Address(), + Sequence: "2", + }, nil) + horizonMock. + On("AccountDetail", horizonclient.AccountRequest{AccountID: receiverAccKP.Address()}). + Return(horizon.Account{ + AccountID: receiverAccKP.Address(), + Sequence: "3", + }, nil) + + // Create tx-approve/ txApproveHandler. + kycThresholdAmount, err := amount.ParseInt64("500") + require.NoError(t, err) + handler := txApproveHandler{ + issuerKP: issuerAccKeyPair, + assetCode: assetGOAT.GetCode(), + horizonClient: &horizonMock, + networkPassphrase: network.TestNetworkPassphrase, + db: conn, + kycThreshold: kycThresholdAmount, + baseURL: "https://sep8-server.test", + } + + // Prepare and send empty "tx" for "/tx-approve" POST request. + req := `{ + "tx": "" + }` + m := chi.NewMux() + m.Post("/tx-approve", handler.ServeHTTP) + r := httptest.NewRequest("POST", "/tx-approve", strings.NewReader(req)) + r = r.WithContext(ctx) + w := httptest.NewRecorder() + m.ServeHTTP(w, r) + resp := w.Result() + assert.Equal(t, http.StatusBadRequest, w.Code) + assert.Equal(t, http.StatusBadRequest, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "rejected" response if no transaction is submitted. + wantBody := `{ + "status":"rejected", "error":"Missing parameter \"tx\"." + }` + require.JSONEq(t, wantBody, string(body)) + + // Prepare and send malformed "tx" for "/tx-approve" POST request. + req = `{ + "tx": "BADXDRTRANSACTIONENVELOPE" + }` + r = httptest.NewRequest("POST", "/tx-approve", strings.NewReader(req)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusBadRequest, w.Code) + assert.Equal(t, http.StatusBadRequest, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "rejected" response if can't parse XDR. + wantBody = `{ + "status":"rejected", "error":"Invalid parameter \"tx\"." + }` + require.JSONEq(t, wantBody, string(body)) + + // Prepare non generic transaction "tx". + senderAcc, err := handler.horizonClient.AccountDetail(horizonclient.AccountRequest{AccountID: senderAccKP.Address()}) + require.NoError(t, err) + tx, err := txnbuild.NewTransaction( + txnbuild.TransactionParams{ + SourceAccount: &senderAcc, + IncrementSequenceNum: true, + Operations: []txnbuild.Operation{ + &txnbuild.Payment{ + Destination: receiverAccKP.Address(), + Amount: "1", + Asset: assetGOAT, + }, + }, + BaseFee: txnbuild.MinBaseFee, + Timebounds: txnbuild.NewInfiniteTimeout(), + }, + ) + require.NoError(t, err) + feeBumpTx, err := txnbuild.NewFeeBumpTransaction( + txnbuild.FeeBumpTransactionParams{ + Inner: tx, + FeeAccount: receiverAccKP.Address(), + BaseFee: 2 * txnbuild.MinBaseFee, + }, + ) + require.NoError(t, err) + feeBumpTxEnc, err := feeBumpTx.Base64() + require.NoError(t, err) + + // Send invalid "tx" for "/tx-approve" POST request. + req = `{ + "tx": "` + feeBumpTxEnc + `" + }` + r = httptest.NewRequest("POST", "/tx-approve", strings.NewReader(req)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusBadRequest, w.Code) + assert.Equal(t, http.StatusBadRequest, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "rejected" response if a non generic transaction fails, same result as malformed XDR. + wantBody = `{ + "status":"rejected", "error":"Invalid parameter \"tx\"." + }` + require.JSONEq(t, wantBody, string(body)) + + // Prepare "tx" where transaction sourceAccount the same as the server issuer account. + issuerAcc, err := handler.horizonClient.AccountDetail(horizonclient.AccountRequest{AccountID: issuerAccKeyPair.Address()}) + require.NoError(t, err) + tx, err = txnbuild.NewTransaction( + txnbuild.TransactionParams{ + SourceAccount: &issuerAcc, + IncrementSequenceNum: true, + Operations: []txnbuild.Operation{ + &txnbuild.Payment{ + Destination: senderAccKP.Address(), + Amount: "1", + Asset: assetGOAT, + }, + }, + BaseFee: txnbuild.MinBaseFee, + Timebounds: txnbuild.NewInfiniteTimeout(), + }, + ) + require.NoError(t, err) + txEnc, err := tx.Base64() + require.NoError(t, err) + + // Send "tx" where transaction sourceAccount the same as the server issuer account for "/tx-approve" POST request. + req = `{ + "tx": "` + txEnc + `" + }` + r = httptest.NewRequest("POST", "/tx-approve", strings.NewReader(req)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusBadRequest, w.Code) + assert.Equal(t, http.StatusBadRequest, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "rejected" response if the transaction sourceAccount the same as the server issuer account. + wantBody = `{ + "status":"rejected", "error":"The source account is invalid." + }` + require.JSONEq(t, wantBody, string(body)) + + // Prepare "tx" where transaction's operation sourceAccount the same as the server issuer account. + tx, err = txnbuild.NewTransaction( + txnbuild.TransactionParams{ + SourceAccount: &senderAcc, + IncrementSequenceNum: true, + Operations: []txnbuild.Operation{ + &txnbuild.Payment{ + SourceAccount: issuerAccKeyPair.Address(), + Destination: senderAccKP.Address(), + Amount: "1", + Asset: assetGOAT, + }, + }, + BaseFee: txnbuild.MinBaseFee, + Timebounds: txnbuild.NewInfiniteTimeout(), + }, + ) + require.NoError(t, err) + txEnc, err = tx.Base64() + require.NoError(t, err) + + // Send "tx" where transaction's operation sourceAccount the same as the server issuer account for "/tx-approve" POST request. + req = `{ + "tx": "` + txEnc + `" + }` + r = httptest.NewRequest("POST", "/tx-approve", strings.NewReader(req)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusBadRequest, w.Code) + assert.Equal(t, http.StatusBadRequest, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "rejected" response if the transaction's operation sourceAccount the same as the server issuer account. + wantBody = `{ + "status":"rejected", "error":"There is one or more unauthorized operations in the provided transaction." + }` + require.JSONEq(t, wantBody, string(body)) + + // Prepare "tx" where transaction's operation is not a payment. + tx, err = txnbuild.NewTransaction( + txnbuild.TransactionParams{ + SourceAccount: &senderAcc, + IncrementSequenceNum: true, + Operations: []txnbuild.Operation{ + &txnbuild.AllowTrust{ + Trustor: receiverAccKP.Address(), + Type: assetGOAT, + Authorize: true, + }, + }, + BaseFee: txnbuild.MinBaseFee, + Timebounds: txnbuild.NewInfiniteTimeout(), + }, + ) + require.NoError(t, err) + txEnc, err = tx.Base64() + require.NoError(t, err) + + // Send "tx" where transaction's operation is not a payment for "/tx-approve" POST request. + req = `{ + "tx": "` + txEnc + `" + }` + r = httptest.NewRequest("POST", "/tx-approve", strings.NewReader(req)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusBadRequest, w.Code) + assert.Equal(t, http.StatusBadRequest, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "rejected" response if transaction's operation is not a payment. + wantBody = `{ + "status":"rejected", "error":"There is one or more unauthorized operations in the provided transaction." + }` + require.JSONEq(t, wantBody, string(body)) + + // Prepare "tx" where theres more than one operation in transaction. + tx, err = txnbuild.NewTransaction( + txnbuild.TransactionParams{ + SourceAccount: &senderAcc, + IncrementSequenceNum: true, + Operations: []txnbuild.Operation{ + &txnbuild.Payment{ + SourceAccount: senderAccKP.Address(), + Destination: receiverAccKP.Address(), + Amount: "1", + Asset: assetGOAT, + }, + &txnbuild.Payment{ + SourceAccount: senderAccKP.Address(), + Destination: receiverAccKP.Address(), + Amount: "2", + Asset: assetGOAT, + }, + }, + BaseFee: txnbuild.MinBaseFee, + Timebounds: txnbuild.NewInfiniteTimeout(), + }, + ) + require.NoError(t, err) + txEnc, err = tx.Base64() + require.NoError(t, err) + + // Send "tx" where theres more than one operation in transaction for "/tx-approve" POST request. + req = `{ + "tx": "` + txEnc + `" + }` + r = httptest.NewRequest("POST", "/tx-approve", strings.NewReader(req)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusBadRequest, w.Code) + assert.Equal(t, http.StatusBadRequest, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "rejected" response if more than one operation in transaction. + wantBody = `{ + "status":"rejected", "error":"Please submit a transaction with exactly one operation of type payment." + }` + require.JSONEq(t, wantBody, string(body)) + + // Prepare "tx" where transaction's transaction source account seq num is not equal to account sequence+1. + tx, err = txnbuild.NewTransaction( + txnbuild.TransactionParams{ + SourceAccount: &horizon.Account{ + AccountID: senderAccKP.Address(), + Sequence: "50", + }, + IncrementSequenceNum: true, + Operations: []txnbuild.Operation{ + &txnbuild.Payment{ + SourceAccount: senderAccKP.Address(), + Destination: receiverAccKP.Address(), + Amount: "1", + Asset: assetGOAT, + }, + }, + BaseFee: txnbuild.MinBaseFee, + Timebounds: txnbuild.NewInfiniteTimeout(), + }, + ) + require.NoError(t, err) + txEnc, err = tx.Base64() + require.NoError(t, err) + + // Send "tx" where transaction's transaction source account seq num is not equal to account sequence+1 for "/tx-approve" POST request. + req = `{ + "tx": "` + txEnc + `" + }` + r = httptest.NewRequest("POST", "/tx-approve", strings.NewReader(req)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusBadRequest, w.Code) + assert.Equal(t, http.StatusBadRequest, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "rejected" response if where transaction's transaction source account seq num is not equal to account sequence+1. + wantBody = `{ + "status":"rejected", "error":"Invalid transaction sequence number." + }` + require.JSONEq(t, wantBody, string(body)) +} + +func TestAPI_RevisedIntegration(t *testing.T) { + ctx := context.Background() + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + + // Perpare accounts on mock horizon. + issuerAccKeyPair := keypair.MustRandom() + senderAccKP := keypair.MustRandom() + receiverAccKP := keypair.MustRandom() + assetGOAT := txnbuild.CreditAsset{ + Code: "GOAT", + Issuer: issuerAccKeyPair.Address(), + } + horizonMock := horizonclient.MockClient{} + horizonMock. + On("AccountDetail", horizonclient.AccountRequest{AccountID: issuerAccKeyPair.Address()}). + Return(horizon.Account{ + Balances: []horizon.Balance{ + { + Asset: base.Asset{Code: "ASSET", Issuer: issuerAccKeyPair.Address()}, + Balance: "0", + }, + }, + }, nil) + horizonMock. + On("AccountDetail", horizonclient.AccountRequest{AccountID: senderAccKP.Address()}). + Return(horizon.Account{ + AccountID: senderAccKP.Address(), + Sequence: "5", + }, nil) + horizonMock. + On("AccountDetail", horizonclient.AccountRequest{AccountID: receiverAccKP.Address()}). + Return(horizon.Account{ + AccountID: receiverAccKP.Address(), + Sequence: "0", + }, nil) + + // Create tx-approve/ txApproveHandler. + kycThresholdAmount, err := amount.ParseInt64("500") + require.NoError(t, err) + handler := txApproveHandler{ + issuerKP: issuerAccKeyPair, + assetCode: assetGOAT.GetCode(), + horizonClient: &horizonMock, + networkPassphrase: network.TestNetworkPassphrase, + db: conn, + kycThreshold: kycThresholdAmount, + baseURL: "https://sep8-server.test", + } + + // Prepare revisable "tx". + senderAcc, err := handler.horizonClient.AccountDetail(horizonclient.AccountRequest{AccountID: senderAccKP.Address()}) + require.NoError(t, err) + tx, err := txnbuild.NewTransaction( + txnbuild.TransactionParams{ + SourceAccount: &senderAcc, + IncrementSequenceNum: true, + Operations: []txnbuild.Operation{ + &txnbuild.Payment{ + SourceAccount: senderAccKP.Address(), + Destination: receiverAccKP.Address(), + Amount: "1", + Asset: assetGOAT, + }, + }, + BaseFee: txnbuild.MinBaseFee, + Timebounds: txnbuild.NewInfiniteTimeout(), + }, + ) + require.NoError(t, err) + txEnc, err := tx.Base64() + require.NoError(t, err) + + // Send revisable "tx" for "/tx-approve" POST request. + req := `{ + "tx": "` + txEnc + `" + }` + m := chi.NewMux() + m.Post("/tx-approve", handler.ServeHTTP) + r := httptest.NewRequest("POST", "/tx-approve", strings.NewReader(req)) + r = r.WithContext(ctx) + w := httptest.NewRecorder() + m.ServeHTTP(w, r) + resp := w.Result() + assert.Equal(t, http.StatusOK, w.Code) + assert.Equal(t, http.StatusOK, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST successful "revised" response. + var txApprovePOSTResponse txApprovalResponse + err = json.Unmarshal(body, &txApprovePOSTResponse) + require.NoError(t, err) + wantTXApprovalResponse := txApprovalResponse{ + Status: sep8Status("revised"), + Tx: txApprovePOSTResponse.Tx, + Message: `Authorization and deauthorization operations were added.`, + } + assert.Equal(t, wantTXApprovalResponse, txApprovePOSTResponse) + + // Decode the request's transaction. + parsed, err := txnbuild.TransactionFromXDR(txApprovePOSTResponse.Tx) + require.NoError(t, err) + tx, ok := parsed.Transaction() + require.True(t, ok) + + // Check if revised transaction only has 5 operations. + require.Len(t, tx.Operations(), 5) + // Check Operation 1: AllowTrust op where issuer fully authorizes account A, asset X. + op1, ok := tx.Operations()[0].(*txnbuild.AllowTrust) + require.True(t, ok) + assert.Equal(t, op1.Trustor, senderAccKP.Address()) + assert.Equal(t, op1.Type.GetCode(), assetGOAT.GetCode()) + require.True(t, op1.Authorize) + // Check Operation 2: AllowTrust op where issuer fully authorizes account B, asset X. + op2, ok := tx.Operations()[1].(*txnbuild.AllowTrust) + require.True(t, ok) + assert.Equal(t, op2.Trustor, receiverAccKP.Address()) + assert.Equal(t, op2.Type.GetCode(), assetGOAT.GetCode()) + require.True(t, op2.Authorize) + // Check Operation 3: Payment from A to B. + op3, ok := tx.Operations()[2].(*txnbuild.Payment) + require.True(t, ok) + assert.Equal(t, op3.SourceAccount, senderAccKP.Address()) + assert.Equal(t, op3.Destination, receiverAccKP.Address()) + assert.Equal(t, op3.Asset, assetGOAT) + // Check Operation 4: AllowTrust op where issuer fully deauthorizes account B, asset X. + op4, ok := tx.Operations()[3].(*txnbuild.AllowTrust) + require.True(t, ok) + assert.Equal(t, op4.Trustor, receiverAccKP.Address()) + assert.Equal(t, op4.Type.GetCode(), assetGOAT.GetCode()) + require.False(t, op4.Authorize) + // Check Operation 5: AllowTrust op where issuer fully deauthorizes account A, asset X. + op5, ok := tx.Operations()[4].(*txnbuild.AllowTrust) + require.True(t, ok) + assert.Equal(t, op5.Trustor, senderAccKP.Address()) + assert.Equal(t, op5.Type.GetCode(), assetGOAT.GetCode()) + require.False(t, op5.Authorize) +} + +func TestAPI_KYCIntegration(t *testing.T) { + ctx := context.Background() + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + + // Perpare accounts on mock horizon. + issuerAccKeyPair := keypair.MustRandom() + senderAccKP := keypair.MustRandom() + receiverAccKP := keypair.MustRandom() + assetGOAT := txnbuild.CreditAsset{ + Code: "GOAT", + Issuer: issuerAccKeyPair.Address(), + } + horizonMock := horizonclient.MockClient{} + horizonMock. + On("AccountDetail", horizonclient.AccountRequest{AccountID: issuerAccKeyPair.Address()}). + Return(horizon.Account{ + Balances: []horizon.Balance{ + { + Asset: base.Asset{Code: "ASSET", Issuer: issuerAccKeyPair.Address()}, + Balance: "0", + }, + }, + }, nil) + horizonMock. + On("AccountDetail", horizonclient.AccountRequest{AccountID: senderAccKP.Address()}). + Return(horizon.Account{ + AccountID: senderAccKP.Address(), + Sequence: "5", + }, nil) + horizonMock. + On("AccountDetail", horizonclient.AccountRequest{AccountID: receiverAccKP.Address()}). + Return(horizon.Account{ + AccountID: receiverAccKP.Address(), + Sequence: "0", + }, nil) + + // Create tx-approve/ txApproveHandler. + kycThresholdAmount, err := amount.ParseInt64("500") + require.NoError(t, err) + handler := txApproveHandler{ + issuerKP: issuerAccKeyPair, + assetCode: assetGOAT.GetCode(), + horizonClient: &horizonMock, + networkPassphrase: network.TestNetworkPassphrase, + db: conn, + kycThreshold: kycThresholdAmount, + baseURL: "https://sep8-server.test", + } + + // Prepare transaction whose payment amount is <=500 GOATs for /tx-approve POST request. + senderAcc, err := handler.horizonClient.AccountDetail(horizonclient.AccountRequest{AccountID: senderAccKP.Address()}) + require.NoError(t, err) + tx, err := txnbuild.NewTransaction( + txnbuild.TransactionParams{ + SourceAccount: &senderAcc, + IncrementSequenceNum: true, + Operations: []txnbuild.Operation{ + &txnbuild.Payment{ + SourceAccount: senderAccKP.Address(), + Destination: receiverAccKP.Address(), + Amount: "501", + Asset: assetGOAT, + }, + }, + BaseFee: txnbuild.MinBaseFee, + Timebounds: txnbuild.NewInfiniteTimeout(), + }, + ) + require.NoError(t, err) + txEnc, err := tx.Base64() + require.NoError(t, err) + + // Send /tx-approve POST request with transaction in request body. + req := `{ + "tx": "` + txEnc + `" + }` + m := chi.NewMux() + m.Post("/tx-approve", handler.ServeHTTP) + r := httptest.NewRequest("POST", "/tx-approve", strings.NewReader(req)) + r = r.WithContext(ctx) + w := httptest.NewRecorder() + m.ServeHTTP(w, r) + resp := w.Result() + assert.Equal(t, http.StatusOK, w.Code) + assert.Equal(t, http.StatusOK, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "action_required" response for sender account. + var txApprovePOSTResponse txApprovalResponse + err = json.Unmarshal(body, &txApprovePOSTResponse) + require.NoError(t, err) + wantTXApprovalResponse := txApprovalResponse{ + Status: sep8Status("action_required"), + Message: `Payments exceeding 500.00 GOAT requires KYC approval. Please provide an email address.`, + ActionURL: txApprovePOSTResponse.ActionURL, + ActionMethod: "POST", + ActionFields: []string{"email_address"}, + } + assert.Equal(t, wantTXApprovalResponse, txApprovePOSTResponse) + + // Setup /kyc-status route for subsequent integration steps. + m.Route("/kyc-status", func(mux chi.Router) { + mux.Post("/{callback_id}", kycstatus.PostHandler{ + DB: conn, + }.ServeHTTP) + }) + // RxUUID is a regex used to validate correct UUIDs, https://w.wiki/39fK + var RxUUID = regexp.MustCompile( + `[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}`) + // Grab callbackID + callbackID := RxUUID.FindAllString(txApprovePOSTResponse.ActionURL, 1)[0] + + // Verify the KYC entree was inserted in db. + const q = ` + SELECT callback_id + FROM accounts_kyc_status + WHERE stellar_address = $1 + ` + var returnedCallbackID string + err = handler.db.QueryRowContext(ctx, q, senderAccKP.Address()).Scan(&returnedCallbackID) + require.NoError(t, err) + assert.Equal(t, callbackID, returnedCallbackID) + + // Prepare and send /kyc-status/{callback_id} POST request; with an email_address that doesn't start with "x". + req = `{ + "email_address": "TestEmail@email.com" + }` + r = httptest.NewRequest("POST", fmt.Sprintf("/kyc-status/%s", callbackID), strings.NewReader(req)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusOK, w.Code) + assert.Equal(t, http.StatusOK, resp.StatusCode) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "no_further_action_required" response for approved account. + wantBody := `{"result": "no_further_action_required"}` + require.JSONEq(t, wantBody, string(body)) + + // Prepare and send /tx-approve POST request to be revised tx via a new /tx-approve POST. + req = `{ + "tx": "` + txEnc + `" + }` + r = httptest.NewRequest("POST", "/tx-approve", strings.NewReader(req)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusOK, w.Code) + assert.Equal(t, http.StatusOK, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "revised" response for approved account. + txApprovePOSTResponse = txApprovalResponse{} + assert.Empty(t, txApprovePOSTResponse) + err = json.Unmarshal(body, &txApprovePOSTResponse) + require.NoError(t, err) + wantTXApprovalResponse = txApprovalResponse{ + Status: sep8Status("revised"), + Tx: txApprovePOSTResponse.Tx, + Message: `Authorization and deauthorization operations were added.`, + } + assert.Equal(t, wantTXApprovalResponse, txApprovePOSTResponse) + + // Decode the request's transaction. + parsed, err := txnbuild.TransactionFromXDR(txApprovePOSTResponse.Tx) + require.NoError(t, err) + tx, ok := parsed.Transaction() + require.True(t, ok) + + // Check if revised transaction only has 5 operations. + require.Len(t, tx.Operations(), 5) + // Check Operation 1: AllowTrust op where issuer fully authorizes account A, asset X. + op1, ok := tx.Operations()[0].(*txnbuild.AllowTrust) + require.True(t, ok) + assert.Equal(t, op1.Trustor, senderAccKP.Address()) + assert.Equal(t, op1.Type.GetCode(), assetGOAT.GetCode()) + require.True(t, op1.Authorize) + // Check Operation 2: AllowTrust op where issuer fully authorizes account B, asset X. + op2, ok := tx.Operations()[1].(*txnbuild.AllowTrust) + require.True(t, ok) + assert.Equal(t, op2.Trustor, receiverAccKP.Address()) + assert.Equal(t, op2.Type.GetCode(), assetGOAT.GetCode()) + require.True(t, op2.Authorize) + // Check Operation 3: Payment from A to B. + op3, ok := tx.Operations()[2].(*txnbuild.Payment) + require.True(t, ok) + assert.Equal(t, op3.SourceAccount, senderAccKP.Address()) + assert.Equal(t, op3.Destination, receiverAccKP.Address()) + assert.Equal(t, op3.Asset, assetGOAT) + // Check Operation 4: AllowTrust op where issuer fully deauthorizes account B, asset X. + op4, ok := tx.Operations()[3].(*txnbuild.AllowTrust) + require.True(t, ok) + assert.Equal(t, op4.Trustor, receiverAccKP.Address()) + assert.Equal(t, op4.Type.GetCode(), assetGOAT.GetCode()) + require.False(t, op4.Authorize) + // Check Operation 5: AllowTrust op where issuer fully deauthorizes account A, asset X. + op5, ok := tx.Operations()[4].(*txnbuild.AllowTrust) + require.True(t, ok) + assert.Equal(t, op5.Trustor, senderAccKP.Address()) + assert.Equal(t, op5.Type.GetCode(), assetGOAT.GetCode()) + require.False(t, op5.Authorize) + + // Prepare and send /kyc-status/{callback_id} POST request; with an email_address that starts with "x". + req = `{ + "email_address": "xTestEmail@email.com" + }` + r = httptest.NewRequest("POST", fmt.Sprintf("/kyc-status/%s", callbackID), strings.NewReader(req)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusOK, w.Code) + assert.Equal(t, http.StatusOK, resp.StatusCode) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "no_further_action_required" response for approved account. + wantBody = `{"result": "no_further_action_required"}` + require.JSONEq(t, wantBody, string(body)) + + // Prepare and send /tx-approve POST request to be revised tx via a new /tx-approve POST. + req = `{ + "tx": "` + txEnc + `" + }` + r = httptest.NewRequest("POST", "/tx-approve", strings.NewReader(req)) + r = r.WithContext(ctx) + w = httptest.NewRecorder() + m.ServeHTTP(w, r) + resp = w.Result() + assert.Equal(t, http.StatusBadRequest, w.Code) + assert.Equal(t, http.StatusBadRequest, resp.StatusCode) + assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) + body, err = ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // TEST "rejected" response for rejected KYC account. + wantBody = `{ + "status":"rejected", "error":"Your KYC was rejected and you're not authorized for operations above 500.00 GOAT." + }` + require.JSONEq(t, wantBody, string(body)) +} diff --git a/services/regulated-assets-approval-server/serve/friendbot.go b/services/regulated-assets-approval-server/internal/serve/friendbot.go similarity index 83% rename from services/regulated-assets-approval-server/serve/friendbot.go rename to services/regulated-assets-approval-server/internal/serve/friendbot.go index 0a0f40a154..6da2936461 100644 --- a/services/regulated-assets-approval-server/serve/friendbot.go +++ b/services/regulated-assets-approval-server/internal/serve/friendbot.go @@ -7,6 +7,7 @@ import ( "github.com/stellar/go/clients/horizonclient" "github.com/stellar/go/keypair" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/serve/httperror" "github.com/stellar/go/strkey" "github.com/stellar/go/support/errors" "github.com/stellar/go/support/http/httpdecode" @@ -67,16 +68,16 @@ func (h friendbotHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { err := httpdecode.Decode(r, &in) if err != nil { log.Ctx(ctx).Error(errors.Wrap(err, "decoding input parameters")) - httpErr := NewHTTPError(http.StatusBadRequest, "Invalid input parameters") + httpErr := httperror.NewHTTPError(http.StatusBadRequest, "Invalid input parameters") httpErr.Render(w) return } err = h.topUpAccountWithRegulatedAsset(ctx, in) if err != nil { - httpErr, ok := err.(*httpError) + httpErr, ok := err.(*httperror.Error) if !ok { - httpErr = serverError + httpErr = httperror.InternalServer } httpErr.Render(w) return @@ -94,17 +95,17 @@ func (h friendbotHandler) topUpAccountWithRegulatedAsset(ctx context.Context, in } if in.Address == "" { - return NewHTTPError(http.StatusBadRequest, `Missing query paramater "addr".`) + return httperror.NewHTTPError(http.StatusBadRequest, `Missing query paramater "addr".`) } if !strkey.IsValidEd25519PublicKey(in.Address) { - return NewHTTPError(http.StatusBadRequest, `"addr" is not a valid Stellar address.`) + return httperror.NewHTTPError(http.StatusBadRequest, `"addr" is not a valid Stellar address.`) } account, err := h.horizonClient.AccountDetail(horizonclient.AccountRequest{AccountID: in.Address}) if err != nil { log.Ctx(ctx).Error(errors.Wrapf(err, "getting detail for account %s", in.Address)) - return NewHTTPError(http.StatusBadRequest, `Please make sure the provided account address already exists in the network.`) + return httperror.NewHTTPError(http.StatusBadRequest, `Please make sure the provided account address already exists in the network.`) } kp, err := keypair.ParseFull(h.issuerAccountSecret) @@ -127,13 +128,13 @@ func (h friendbotHandler) topUpAccountWithRegulatedAsset(ctx context.Context, in } } if !accountHasTrustline { - return NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Account with address %s doesn't have a trustline for %s:%s", in.Address, asset.Code, asset.Issuer)) + return httperror.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Account with address %s doesn't have a trustline for %s:%s", in.Address, asset.Code, asset.Issuer)) } issuerAcc, err := h.horizonClient.AccountDetail(horizonclient.AccountRequest{AccountID: kp.Address()}) if err != nil { log.Ctx(ctx).Error(errors.Wrapf(err, "getting detail for issuer account %s", kp.Address())) - return serverError + return httperror.InternalServer } tx, err := txnbuild.NewTransaction(txnbuild.TransactionParams{ @@ -174,7 +175,7 @@ func (h friendbotHandler) topUpAccountWithRegulatedAsset(ctx context.Context, in _, err = h.horizonClient.SubmitTransaction(tx) if err != nil { - err = parseHorizonError(err) + err = httperror.ParseHorizonError(err) log.Ctx(ctx).Error(err) return err } diff --git a/services/regulated-assets-approval-server/serve/friendbot_test.go b/services/regulated-assets-approval-server/internal/serve/friendbot_test.go similarity index 100% rename from services/regulated-assets-approval-server/serve/friendbot_test.go rename to services/regulated-assets-approval-server/internal/serve/friendbot_test.go diff --git a/services/regulated-assets-approval-server/serve/http_error.go b/services/regulated-assets-approval-server/internal/serve/httperror/http_error.go similarity index 68% rename from services/regulated-assets-approval-server/serve/http_error.go rename to services/regulated-assets-approval-server/internal/serve/httperror/http_error.go index 285c986944..7f0acd1c80 100644 --- a/services/regulated-assets-approval-server/serve/http_error.go +++ b/services/regulated-assets-approval-server/internal/serve/httperror/http_error.go @@ -1,4 +1,4 @@ -package serve +package httperror import ( "net/http" @@ -8,32 +8,37 @@ import ( "github.com/stellar/go/support/render/httpjson" ) -type httpError struct { +type Error struct { ErrorMessage string `json:"error"` Status int `json:"-"` } -func (h *httpError) Error() string { +func (h *Error) Error() string { return h.ErrorMessage } -func NewHTTPError(status int, errorMessage string) *httpError { - return &httpError{ +func NewHTTPError(status int, errorMessage string) *Error { + return &Error{ ErrorMessage: errorMessage, Status: status, } } -func (e *httpError) Render(w http.ResponseWriter) { +func (e *Error) Render(w http.ResponseWriter) { httpjson.RenderStatus(w, e.Status, e, httpjson.JSON) } -var serverError = &httpError{ +var InternalServer = &Error{ ErrorMessage: "An error occurred while processing this request.", Status: http.StatusInternalServerError, } -func parseHorizonError(err error) error { +var BadRequest = &Error{ + ErrorMessage: "The request was invalid in some way.", + Status: http.StatusBadRequest, +} + +func ParseHorizonError(err error) error { if err == nil { return nil } diff --git a/services/regulated-assets-approval-server/serve/http_error_test.go b/services/regulated-assets-approval-server/internal/serve/httperror/http_error_test.go similarity index 75% rename from services/regulated-assets-approval-server/serve/http_error_test.go rename to services/regulated-assets-approval-server/internal/serve/httperror/http_error_test.go index 24a60667f5..6298189e25 100644 --- a/services/regulated-assets-approval-server/serve/http_error_test.go +++ b/services/regulated-assets-approval-server/internal/serve/httperror/http_error_test.go @@ -1,4 +1,4 @@ -package serve +package httperror import ( "net/http" @@ -12,10 +12,10 @@ import ( ) func TestParseHorizonError(t *testing.T) { - err := parseHorizonError(nil) + err := ParseHorizonError(nil) require.Nil(t, err) - err = parseHorizonError(errors.New("some error")) + err = ParseHorizonError(errors.New("some error")) require.EqualError(t, err, "error submitting transaction: some error") horizonError := horizonclient.Error{ @@ -34,6 +34,6 @@ func TestParseHorizonError(t *testing.T) { }, }, } - err = parseHorizonError(horizonError) - require.EqualError(t, err, "error submitting transaction: problem: bad_request, &{TransactionCode:tx_code_here OperationCodes:[op_success op_bad_auth]}\n: horizon error: \"Bad Request\" - check horizon.Error.Problem for more information") + err = ParseHorizonError(horizonError) + require.EqualError(t, err, "error submitting transaction: problem: bad_request, &{TransactionCode:tx_code_here OperationCodes:[op_success op_bad_auth]}\n: horizon error: \"Bad Request\" (tx_code_here, op_success, op_bad_auth) - check horizon.Error.Problem for more information") } diff --git a/services/regulated-assets-approval-server/internal/serve/kyc-status/delete_handler.go b/services/regulated-assets-approval-server/internal/serve/kyc-status/delete_handler.go new file mode 100644 index 0000000000..4c0b4ba3b0 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/serve/kyc-status/delete_handler.go @@ -0,0 +1,92 @@ +package kycstatus + +import ( + "context" + "net/http" + + "github.com/jmoiron/sqlx" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/serve/httperror" + "github.com/stellar/go/support/errors" + "github.com/stellar/go/support/http/httpdecode" + "github.com/stellar/go/support/log" + "github.com/stellar/go/support/render/httpjson" +) + +type DeleteHandler struct { + DB *sqlx.DB +} + +func (h DeleteHandler) validate() error { + if h.DB == nil { + return errors.New("database cannot be nil") + } + return nil +} + +type deleteRequest struct { + StellarAddress string `path:"stellar_address"` +} + +func (h DeleteHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + err := h.validate() + if err != nil { + log.Ctx(ctx).Error(errors.Wrap(err, "validating kyc-status DeleteHandler")) + httperror.InternalServer.Render(w) + return + } + + in := deleteRequest{} + err = httpdecode.Decode(r, &in) + if err != nil { + log.Ctx(ctx).Error(errors.Wrap(err, "decoding kyc-status DELETE Request")) + httperror.BadRequest.Render(w) + return + } + + err = h.handle(ctx, in) + if err != nil { + httpErr, ok := err.(*httperror.Error) + if !ok { + httpErr = httperror.InternalServer + } + httpErr.Render(w) + return + } + + httpjson.Render(w, httpjson.DefaultResponse, httpjson.JSON) +} + +func (h DeleteHandler) handle(ctx context.Context, in deleteRequest) (err error) { + defer func() { + log.Ctx(ctx).Debug("==== will log responses ====") + log.Ctx(ctx).Debugf("req: %+v", in) + log.Ctx(ctx).Debugf("err: %+v", err) + log.Ctx(ctx).Debug("==== did log responses ====") + }() + + // Check if deleteRequest StellarAddress value is present. + if in.StellarAddress == "" { + return httperror.NewHTTPError(http.StatusBadRequest, "Missing stellar address.") + } + + var existed bool + const q = ` + WITH deleted_rows AS ( + DELETE FROM accounts_kyc_status + WHERE stellar_address = $1 + RETURNING * + ) SELECT EXISTS ( + SELECT * FROM deleted_rows + ) + ` + err = h.DB.QueryRowContext(ctx, q, in.StellarAddress).Scan(&existed) + if err != nil { + return errors.Wrap(err, "querying the database") + } + if !existed { + return httperror.NewHTTPError(http.StatusNotFound, "Not found.") + } + + return nil +} diff --git a/services/regulated-assets-approval-server/internal/serve/kyc-status/delete_handler_test.go b/services/regulated-assets-approval-server/internal/serve/kyc-status/delete_handler_test.go new file mode 100644 index 0000000000..a6b4c1b94b --- /dev/null +++ b/services/regulated-assets-approval-server/internal/serve/kyc-status/delete_handler_test.go @@ -0,0 +1,77 @@ +package kycstatus + +import ( + "context" + "testing" + + "github.com/google/uuid" + "github.com/stellar/go/keypair" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/db/dbtest" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestDeleteHandlerValidate(t *testing.T) { + // Test no db. + h := DeleteHandler{} + err := h.validate() + require.EqualError(t, err, "database cannot be nil") + // Success. + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + h = DeleteHandler{DB: conn} + err = h.validate() + require.NoError(t, err) +} + +func TestDeleteHandlerHandle(t *testing.T) { + ctx := context.Background() + + // Prepare and validate DeleteHandler. + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + h := DeleteHandler{DB: conn} + err := h.validate() + require.NoError(t, err) + + // Prepare and send empty deleteRequest. TEST error "Missing stellar address." + in := deleteRequest{} + err = h.handle(ctx, in) + require.EqualError(t, err, "Missing stellar address.") + + // Prepare and send deleteRequest to an account not in the db. TEST error "Not found.". + accountKP := keypair.MustRandom() + in = deleteRequest{StellarAddress: accountKP.Address()} + err = h.handle(ctx, in) + require.EqualError(t, err, "Not found.") + + // INSERT new account in db's accounts_kyc_status table; new account was approved after submitting kyc. + insertNewAccountQuery := ` + INSERT INTO accounts_kyc_status (stellar_address, callback_id, email_address, kyc_submitted_at, approved_at, rejected_at) + VALUES ($1, $2, $3, NOW(), NOW(), NULL) + ` + callbackID := uuid.New().String() + emailAddress := "email@approved.com" + _, err = h.DB.ExecContext(ctx, insertNewAccountQuery, accountKP.Address(), callbackID, emailAddress) + require.NoError(t, err) + + // Send deleteRequest to an account in the db. TEST if nil error returned (success). + err = h.handle(ctx, in) + require.NoError(t, err) + + // Prepare and execute SELECT query for account that was deleted; ensure its no longer in db + existQuery := ` + SELECT EXISTS( + SELECT stellar_address + FROM accounts_kyc_status + WHERE stellar_address = $1 + )` + var exists bool + err = h.DB.QueryRowContext(ctx, existQuery, accountKP.Address()).Scan(&exists) + require.NoError(t, err) + assert.False(t, exists) +} diff --git a/services/regulated-assets-approval-server/internal/serve/kyc-status/get_detail_handler.go b/services/regulated-assets-approval-server/internal/serve/kyc-status/get_detail_handler.go new file mode 100644 index 0000000000..0bb143fe92 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/serve/kyc-status/get_detail_handler.go @@ -0,0 +1,128 @@ +package kycstatus + +import ( + "context" + "database/sql" + "net/http" + "time" + + "github.com/jmoiron/sqlx" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/serve/httperror" + "github.com/stellar/go/support/errors" + "github.com/stellar/go/support/http/httpdecode" + "github.com/stellar/go/support/log" + "github.com/stellar/go/support/render/httpjson" +) + +type kycGetResponse struct { + StellarAddress string `json:"stellar_address"` + CallbackID string `json:"callback_id"` + EmailAddress string `json:"email_address,omitempty"` + CreatedAt *time.Time `json:"created_at"` + KYCSubmittedAt *time.Time `json:"kyc_submitted_at,omitempty"` + ApprovedAt *time.Time `json:"approved_at,omitempty"` + RejectedAt *time.Time `json:"rejected_at,omitempty"` +} + +func (k *kycGetResponse) Render(w http.ResponseWriter) { + httpjson.Render(w, k, httpjson.JSON) +} + +type GetDetailHandler struct { + DB *sqlx.DB +} + +func (h GetDetailHandler) validate() error { + if h.DB == nil { + return errors.New("database cannot be nil") + } + return nil +} + +type getDetailRequest struct { + StellarAddressOrCallbackID string `path:"stellar_address_or_callback_id"` +} + +func (h GetDetailHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + err := h.validate() + if err != nil { + log.Ctx(ctx).Error(errors.Wrap(err, "validating kyc-status GetDetailHandler")) + httperror.InternalServer.Render(w) + return + } + + in := getDetailRequest{} + err = httpdecode.Decode(r, &in) + if err != nil { + log.Ctx(ctx).Error(errors.Wrap(err, "decoding kyc-status GET Request")) + httperror.BadRequest.Render(w) + return + } + + kycGetResponse, err := h.handle(ctx, in) + if err != nil { + httpErr, ok := err.(*httperror.Error) + if !ok { + httpErr = httperror.InternalServer + } + httpErr.Render(w) + return + } + + kycGetResponse.Render(w) +} + +func (h GetDetailHandler) handle(ctx context.Context, in getDetailRequest) (resp *kycGetResponse, err error) { + defer func() { + log.Ctx(ctx).Debug("==== will log responses ====") + log.Ctx(ctx).Debugf("req: %+v", in) + log.Ctx(ctx).Debugf("resp: %+v", resp) + log.Ctx(ctx).Debugf("err: %+v", err) + log.Ctx(ctx).Debug("==== did log responses ====") + }() + + // Check if getDetailRequest StellarAddressOrCallbackID value is present. + if in.StellarAddressOrCallbackID == "" { + return nil, httperror.NewHTTPError(http.StatusBadRequest, "Missing stellar address or callbackID") + } + + // Prepare SELECT query return values. + var ( + stellarAddress, callbackID string + emailAddress sql.NullString + createdAt time.Time + kycSubmittedAt, approvedAt, rejectedAt sql.NullTime + ) + const q = ` + SELECT stellar_address, email_address, created_at, kyc_submitted_at, approved_at, rejected_at, callback_id + FROM accounts_kyc_status + WHERE stellar_address = $1 OR callback_id = $1 + ` + err = h.DB.QueryRowContext(ctx, q, in.StellarAddressOrCallbackID).Scan(&stellarAddress, &emailAddress, &createdAt, &kycSubmittedAt, &approvedAt, &rejectedAt, &callbackID) + if err == sql.ErrNoRows { + return nil, httperror.NewHTTPError(http.StatusNotFound, "Not found.") + } + if err != nil { + return nil, errors.Wrap(err, "querying the database") + } + + return &kycGetResponse{ + StellarAddress: stellarAddress, + CallbackID: callbackID, + EmailAddress: emailAddress.String, + CreatedAt: &createdAt, + KYCSubmittedAt: timePointerIfValid(kycSubmittedAt), + ApprovedAt: timePointerIfValid(approvedAt), + RejectedAt: timePointerIfValid(rejectedAt), + }, nil +} + +// timePointerIfValid returns a pointer to the date from the provided +// `sql.NullTime` if it's valid or `nil` if it's not. +func timePointerIfValid(nt sql.NullTime) *time.Time { + if nt.Valid { + return &nt.Time + } + return nil +} diff --git a/services/regulated-assets-approval-server/internal/serve/kyc-status/get_detail_handler_test.go b/services/regulated-assets-approval-server/internal/serve/kyc-status/get_detail_handler_test.go new file mode 100644 index 0000000000..6791f80482 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/serve/kyc-status/get_detail_handler_test.go @@ -0,0 +1,125 @@ +package kycstatus + +import ( + "context" + "database/sql" + "testing" + "time" + + "github.com/google/uuid" + "github.com/stellar/go/keypair" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/db/dbtest" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestGetDetailHandlerValidate(t *testing.T) { + // Test no db. + h := GetDetailHandler{} + err := h.validate() + require.EqualError(t, err, "database cannot be nil") + // Success. + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + h = GetDetailHandler{DB: conn} + err = h.validate() + require.NoError(t, err) +} + +func TestTimePointerIfValid(t *testing.T) { + // Prepare NULL nullTimePtr. + var nullTimePtr sql.NullTime + + // Send a NullTime Pointer to timePointerIfValid. + // TEST if timePointer is null; timePointerIfValid will return nil in this case. + timePointer := timePointerIfValid(nullTimePtr) + require.Nil(t, timePointer) + + // Prepare a valid nullTimePtr with a time set. + nullTimePtr.Valid = true + timeNow := time.Now() + nullTimePtr.Time = timeNow + + // Send a valid Pointer to timePointerIfValid. + // TEST if timePointer is valid and if return a time.Time pointer equals the time.Now(). + timePointer = timePointerIfValid(nullTimePtr) + require.NotNil(t, timePointer) + assert.Equal(t, &timeNow, timePointer) +} + +func TestGetDetailHandlerHandle(t *testing.T) { + ctx := context.Background() + + // Prepare and validate GetDetailHandler. + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + h := GetDetailHandler{DB: conn} + err := h.validate() + require.NoError(t, err) + + // Prepare and send empty getDetailRequest. TEST error "Missing stellar address or callbackID" + in := getDetailRequest{} + kycGetResp, err := h.handle(ctx, in) + require.Nil(t, kycGetResp) + require.EqualError(t, err, "Missing stellar address or callbackID") + + // Prepare and send getDetailRequest to an account not in the db. TEST error "Not found.". + accountKP := keypair.MustRandom() + in = getDetailRequest{StellarAddressOrCallbackID: accountKP.Address()} + kycGetResp, err = h.handle(ctx, in) + require.Nil(t, kycGetResp) + require.EqualError(t, err, "Not found.") + + // Prepare and send getDetailRequest to a callbackID not in the db. TEST error "Not found.". + callbackID := uuid.New().String() + in = getDetailRequest{StellarAddressOrCallbackID: callbackID} + kycGetResp, err = h.handle(ctx, in) + require.Nil(t, kycGetResp) + require.EqualError(t, err, "Not found.") + + // INSERT new account in db's accounts_kyc_status table; new account was approved after submitting kyc. + insertNewAccountQuery := ` + INSERT INTO accounts_kyc_status (stellar_address, callback_id, email_address, kyc_submitted_at, approved_at, rejected_at) + VALUES ($1, $2, $3, NOW(), NOW(), NULL) + ` + emailAddress := "email@approved.com" + _, err = h.DB.ExecContext(ctx, insertNewAccountQuery, accountKP.Address(), callbackID, emailAddress) + require.NoError(t, err) + + // Prepare and send getDetailRequest to an account in the db; using stellar address. TEST if response returns with account that was inserted in db; using stellar address. + in = getDetailRequest{StellarAddressOrCallbackID: accountKP.Address()} + kycGetResp, err = h.handle(ctx, in) + require.NoError(t, err) + wantKycGetResponse := kycGetResponse{ + StellarAddress: accountKP.Address(), + CallbackID: callbackID, + EmailAddress: emailAddress, + CreatedAt: kycGetResp.CreatedAt, + KYCSubmittedAt: kycGetResp.KYCSubmittedAt, + ApprovedAt: kycGetResp.ApprovedAt, + RejectedAt: kycGetResp.RejectedAt, + } + assert.Equal(t, &wantKycGetResponse, kycGetResp) + + // TEST if response timestamps are present or null. + require.NotNil(t, kycGetResp.CreatedAt) + require.NotNil(t, kycGetResp.KYCSubmittedAt) + require.NotNil(t, kycGetResp.ApprovedAt) + require.Nil(t, kycGetResp.RejectedAt) + + /// Prepare and send getDetailRequest to an account in the db; using callbackID. TEST if response returns with account that was inserted in db; using callbackID. + in = getDetailRequest{StellarAddressOrCallbackID: callbackID} + kycGetResp, err = h.handle(ctx, in) + require.NoError(t, err) + assert.Equal(t, &wantKycGetResponse, kycGetResp) + + // TEST if response timestamps are present or null. + require.NotNil(t, kycGetResp.CreatedAt) + require.NotNil(t, kycGetResp.KYCSubmittedAt) + require.NotNil(t, kycGetResp.ApprovedAt) + require.Nil(t, kycGetResp.RejectedAt) +} diff --git a/services/regulated-assets-approval-server/internal/serve/kyc-status/post_handler.go b/services/regulated-assets-approval-server/internal/serve/kyc-status/post_handler.go new file mode 100644 index 0000000000..1da29a4fa0 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/serve/kyc-status/post_handler.go @@ -0,0 +1,161 @@ +package kycstatus + +import ( + "context" + "fmt" + "net/http" + "regexp" + "strings" + + "github.com/jmoiron/sqlx" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/serve/httperror" + "github.com/stellar/go/support/errors" + "github.com/stellar/go/support/http/httpdecode" + "github.com/stellar/go/support/log" + "github.com/stellar/go/support/render/httpjson" +) + +type kycPostRequest struct { + CallbackID string `path:"callback_id"` + EmailAddress string `json:"email_address"` +} + +type kycPostResponse struct { + Result string `json:"result"` + StatusCode int `json:"-"` +} + +func (k *kycPostResponse) Render(w http.ResponseWriter) { + httpjson.RenderStatus(w, k.StatusCode, k, httpjson.JSON) +} + +func NewKYCStatusPostResponse() *kycPostResponse { + return &kycPostResponse{ + Result: "no_further_action_required", + StatusCode: http.StatusOK, + } +} + +type PostHandler struct { + DB *sqlx.DB +} + +func (h PostHandler) validate() error { + if h.DB == nil { + return errors.New("database cannot be nil") + } + return nil +} + +func (h PostHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + + err := h.validate() + if err != nil { + log.Ctx(ctx).Error(errors.Wrap(err, "validating kyc-status PostHandler")) + httperror.InternalServer.Render(w) + return + } + + in := kycPostRequest{} + err = httpdecode.Decode(r, &in) + if err != nil { + log.Ctx(ctx).Error(errors.Wrap(err, "decoding kyc-status POST Request")) + httperror.BadRequest.Render(w) + return + } + + kycResponse, err := h.handle(ctx, in) + if err != nil { + log.Ctx(ctx).Error(errors.Wrap(err, "validating the input POST request for kyc-status")) + httpErr, ok := err.(*httperror.Error) + if !ok { + httpErr = httperror.InternalServer + } + httpErr.Render(w) + return + } + + kycResponse.Render(w) +} + +func (h PostHandler) handle(ctx context.Context, in kycPostRequest) (resp *kycPostResponse, err error) { + defer func() { + log.Ctx(ctx).Debug("==== will log responses ====") + log.Ctx(ctx).Debugf("req: %+v", in) + log.Ctx(ctx).Debugf("resp: %+v", resp) + log.Ctx(ctx).Debugf("err: %+v", err) + log.Ctx(ctx).Debug("==== did log responses ====") + }() + + // Check if kycPostRequest values are present or not malformed. + if in.CallbackID == "" { + return nil, httperror.NewHTTPError(http.StatusBadRequest, "Missing callbackID.") + } + if in.EmailAddress == "" { + return nil, httperror.NewHTTPError(http.StatusBadRequest, "Missing email_address.") + } + if !RxEmail.MatchString(in.EmailAddress) { + return nil, httperror.NewHTTPError(http.StatusBadRequest, "The provided email_address is invalid.") + } + + var exists bool + query, args := in.buildUpdateKYCQuery() + err = h.DB.QueryRowContext(ctx, query, args...).Scan(&exists) + if err != nil { + return nil, errors.Wrap(err, "querying the database") + } + if !exists { + return nil, httperror.NewHTTPError(http.StatusNotFound, "Not found.") + } + + return NewKYCStatusPostResponse(), nil +} + +// isKYCRuleRespected validates if KYC data is approved or rejected. +// Current rule(s) emails starting "x" are rejected and other emails are automatically approved. +func (in kycPostRequest) isKYCRuleRespected() bool { + return !strings.HasPrefix(strings.ToLower(in.EmailAddress), "x") +} + +// buildUpdateKYCQuery builds a query that will approve or reject stellar account from accounts_kyc_status table. +// Afterwards the query should return an exists boolean if present. +func (in kycPostRequest) buildUpdateKYCQuery() (string, []interface{}) { + var ( + query strings.Builder + args []interface{} + ) + query.WriteString("WITH updated_row AS (") + query.WriteString("UPDATE accounts_kyc_status ") + query.WriteString("SET kyc_submitted_at = NOW(), ") + + // Append email address for query built. + args = append(args, in.EmailAddress) + query.WriteString(fmt.Sprintf("email_address = $%d, ", len(args))) + + // Check if KYC info is approved or rejected + if in.isKYCRuleRespected() { + query.WriteString("approved_at = NOW(), rejected_at = NULL ") + } else { + query.WriteString("rejected_at = NOW(), approved_at = NULL ") + } + + // Append CallbackID for query built. + args = append(args, in.CallbackID) + query.WriteString(fmt.Sprintf("WHERE callback_id = $%d ", len(args))) + + // Build remaining query. + query.WriteString("RETURNING * ") + query.WriteString(")") + query.WriteString(` + SELECT EXISTS( + SELECT * FROM updated_row + ) + `) + + return query.String(), args +} + +// RxEmail is a regex used to validate e-mail addresses, according with the reference https://www.alexedwards.net/blog/validation-snippets-for-go#email-validation. +// It's free to use under the [MIT Licence](https://opensource.org/licenses/MIT) +var RxEmail = regexp.MustCompile("^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$") diff --git a/services/regulated-assets-approval-server/internal/serve/kyc-status/post_handler_test.go b/services/regulated-assets-approval-server/internal/serve/kyc-status/post_handler_test.go new file mode 100644 index 0000000000..d688f33d1e --- /dev/null +++ b/services/regulated-assets-approval-server/internal/serve/kyc-status/post_handler_test.go @@ -0,0 +1,79 @@ +package kycstatus + +import ( + "testing" + + "github.com/stellar/go/services/regulated-assets-approval-server/internal/db/dbtest" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestPostHandlerValidate(t *testing.T) { + // Test no db. + h := PostHandler{} + err := h.validate() + require.EqualError(t, err, "database cannot be nil") + // Success. + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + h = PostHandler{ + DB: conn, + } + err = h.validate() + require.NoError(t, err) +} + +func TestIsKYCRuleRespected(t *testing.T) { + // Test if email approved. + in := kycPostRequest{ + EmailAddress: "test@email.com", + } + approved := in.isKYCRuleRespected() + assert.True(t, approved) + // Test if email rejected. + in = kycPostRequest{ + EmailAddress: "xtest@email.com", + } + approved = in.isKYCRuleRespected() + assert.False(t, approved) +} + +func TestBuildUpdateKYCQuery(t *testing.T) { + // Test query returned if email approved. + in := kycPostRequest{ + CallbackID: "1234567890-12345", + EmailAddress: "test@email.com", + } + query, args := in.buildUpdateKYCQuery() + expectedQuery := "WITH updated_row AS (UPDATE accounts_kyc_status SET kyc_submitted_at = NOW(), email_address = $1, approved_at = NOW(), rejected_at = NULL WHERE callback_id = $2 RETURNING * )\n\t\tSELECT EXISTS(\n\t\t\tSELECT * FROM updated_row\n\t\t)\n\t" + expectedArgs := []interface{}{in.EmailAddress, in.CallbackID} + require.Equal(t, expectedQuery, query) + require.Equal(t, expectedArgs, args) + + // Test query returned if email rejected. + in = kycPostRequest{ + CallbackID: "9999999999-9999", + EmailAddress: "xtest@email.com", + } + query, args = in.buildUpdateKYCQuery() + expectedQuery = "WITH updated_row AS (UPDATE accounts_kyc_status SET kyc_submitted_at = NOW(), email_address = $1, rejected_at = NOW(), approved_at = NULL WHERE callback_id = $2 RETURNING * )\n\t\tSELECT EXISTS(\n\t\t\tSELECT * FROM updated_row\n\t\t)\n\t" + expectedArgs = []interface{}{in.EmailAddress, in.CallbackID} + require.Equal(t, expectedQuery, query) + require.Equal(t, expectedArgs, args) +} + +func TestRxEmail(t *testing.T) { + // Test empty email string. + assert.NotRegexp(t, RxEmail, "") + + // Test empty prefix. + assert.NotRegexp(t, RxEmail, "email.com") + + // Test only domain given. + assert.NotRegexp(t, RxEmail, "@email.com") + + // Test correct email. + assert.Regexp(t, RxEmail, "t@email.com") +} diff --git a/services/regulated-assets-approval-server/serve/middleware.go b/services/regulated-assets-approval-server/internal/serve/middleware.go similarity index 100% rename from services/regulated-assets-approval-server/serve/middleware.go rename to services/regulated-assets-approval-server/internal/serve/middleware.go diff --git a/services/regulated-assets-approval-server/serve/serve.go b/services/regulated-assets-approval-server/internal/serve/serve.go similarity index 50% rename from services/regulated-assets-approval-server/serve/serve.go rename to services/regulated-assets-approval-server/internal/serve/serve.go index 4bf637ff35..3d0f7b6cae 100644 --- a/services/regulated-assets-approval-server/serve/serve.go +++ b/services/regulated-assets-approval-server/internal/serve/serve.go @@ -3,12 +3,17 @@ package serve import ( "fmt" "net/http" + "net/url" + "path" "time" "github.com/go-chi/chi" "github.com/go-chi/chi/middleware" + "github.com/stellar/go/amount" "github.com/stellar/go/clients/horizonclient" "github.com/stellar/go/keypair" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/db" + kycstatus "github.com/stellar/go/services/regulated-assets-approval-server/internal/serve/kyc-status" "github.com/stellar/go/support/errors" supporthttp "github.com/stellar/go/support/http" "github.com/stellar/go/support/log" @@ -16,12 +21,15 @@ import ( ) type Options struct { - IssuerAccountSecret string - AssetCode string - FriendbotPaymentAmount int - HorizonURL string - NetworkPassphrase string - Port int + AssetCode string + BaseURL string + DatabaseURL string + FriendbotPaymentAmount int + HorizonURL string + IssuerAccountSecret string + KYCRequiredPaymentAmountThreshold string + NetworkPassphrase string + Port int } func Serve(opts Options) { @@ -50,6 +58,19 @@ func handleHTTP(opts Options) http.Handler { if err != nil { log.Fatal(errors.Wrap(err, "parsing secret")) } + parsedKYCRequiredPaymentThreshold, err := amount.ParseInt64(opts.KYCRequiredPaymentAmountThreshold) + if err != nil { + log.Fatal(errors.Wrapf(err, "%s cannot be parsed as a Stellar amount", opts.KYCRequiredPaymentAmountThreshold)) + } + db, err := db.Open(opts.DatabaseURL) + if err != nil { + log.Fatal(errors.Wrap(err, "error parsing database url")) + } + db.SetMaxOpenConns(20) + err = db.Ping() + if err != nil { + log.Warn("Error pinging to Database: ", err) + } mux := chi.NewMux() mux.Use(middleware.RequestID) @@ -62,6 +83,8 @@ func handleHTTP(opts Options) http.Handler { assetCode: opts.AssetCode, issuerAddress: issuerKP.Address(), networkPassphrase: opts.NetworkPassphrase, + approvalServer: buildURLString(opts.BaseURL, "tx-approve"), + kycThreshold: parsedKYCRequiredPaymentThreshold, }.ServeHTTP) mux.Get("/friendbot", friendbotHandler{ assetCode: opts.AssetCode, @@ -71,10 +94,27 @@ func handleHTTP(opts Options) http.Handler { networkPassphrase: opts.NetworkPassphrase, paymentAmount: opts.FriendbotPaymentAmount, }.ServeHTTP) - mux.Post("/tx_approve", txApproveHandler{ - assetCode: opts.AssetCode, - issuerKP: issuerKP, + mux.Post("/tx-approve", txApproveHandler{ + assetCode: opts.AssetCode, + issuerKP: issuerKP, + horizonClient: opts.horizonClient(), + networkPassphrase: opts.NetworkPassphrase, + db: db, + kycThreshold: parsedKYCRequiredPaymentThreshold, + baseURL: opts.BaseURL, }.ServeHTTP) + mux.Route("/kyc-status", func(mux chi.Router) { + mux.Post("/{callback_id}", kycstatus.PostHandler{ + DB: db, + }.ServeHTTP) + mux.Get("/{stellar_address_or_callback_id}", kycstatus.GetDetailHandler{ + DB: db, + }.ServeHTTP) + mux.Delete("/{stellar_address}", kycstatus.DeleteHandler{ + DB: db, + }.ServeHTTP) + }) + return mux } @@ -84,3 +124,12 @@ func (opts Options) horizonClient() horizonclient.ClientInterface { HTTP: &http.Client{Timeout: 30 * time.Second}, } } + +func buildURLString(baseURL, endpoint string) string { + URL, err := url.Parse(baseURL) + if err != nil { + log.Fatal(errors.Wrapf(err, "Unable to parse URL: %s", baseURL)) + } + URL.Path = path.Join(URL.Path, endpoint) + return URL.String() +} diff --git a/services/regulated-assets-approval-server/serve/serve_test.go b/services/regulated-assets-approval-server/internal/serve/serve_test.go similarity index 100% rename from services/regulated-assets-approval-server/serve/serve_test.go rename to services/regulated-assets-approval-server/internal/serve/serve_test.go diff --git a/services/regulated-assets-approval-server/internal/serve/toml.go b/services/regulated-assets-approval-server/internal/serve/toml.go new file mode 100644 index 0000000000..d50dd39e8f --- /dev/null +++ b/services/regulated-assets-approval-server/internal/serve/toml.go @@ -0,0 +1,75 @@ +package serve + +import ( + "fmt" + "net/http" + + "github.com/stellar/go/services/regulated-assets-approval-server/internal/serve/httperror" + "github.com/stellar/go/strkey" + "github.com/stellar/go/support/errors" + "github.com/stellar/go/support/log" +) + +type stellarTOMLHandler struct { + assetCode string + approvalServer string + issuerAddress string + networkPassphrase string + kycThreshold int64 +} + +func (h stellarTOMLHandler) validate() error { + if h.networkPassphrase == "" { + return errors.New("network passphrase cannot be empty") + } + + if h.assetCode == "" { + return errors.New("asset code cannot be empty") + } + + if h.issuerAddress == "" { + return errors.New("asset issuer address cannot be empty") + } + + if !strkey.IsValidEd25519PublicKey(h.issuerAddress) { + return errors.New("asset issuer address is not a valid public key") + } + + if h.approvalServer == "" { + return errors.New("approval server cannot be empty") + } + + if h.kycThreshold <= 0 { + return errors.New("kyc threshold cannot be less than or equal to zero") + } + + return nil +} + +func (h stellarTOMLHandler) ServeHTTP(rw http.ResponseWriter, r *http.Request) { + ctx := r.Context() + + err := h.validate() + if err != nil { + log.Ctx(ctx).Error(errors.Wrap(err, "validating tomlHandler")) + httperror.InternalServer.Render(rw) + return + } + + // Convert kycThreshold value to human readable string; from amount package's int64 5000000000 to 500.00. + kycThreshold, err := convertThresholdToReadableString(h.kycThreshold) + if err != nil { + log.Ctx(ctx).Error(errors.Wrap(err, "converting kycThreshold value to human readable string")) + httperror.InternalServer.Render(rw) + return + } + + // Generate toml content. + fmt.Fprintf(rw, "NETWORK_PASSPHRASE=%q\n", h.networkPassphrase) + fmt.Fprintf(rw, "[[CURRENCIES]]\n") + fmt.Fprintf(rw, "code=%q\n", h.assetCode) + fmt.Fprintf(rw, "issuer=%q\n", h.issuerAddress) + fmt.Fprintf(rw, "regulated=true\n") + fmt.Fprintf(rw, "approval_server=%q\n", h.approvalServer) + fmt.Fprintf(rw, "approval_criteria=\"The approval server currently only accepts payments. The transaction must have exactly one operation of type payment. If the payment amount exceeds %s %s it will need KYC approval.\"", kycThreshold, h.assetCode) +} diff --git a/services/regulated-assets-approval-server/internal/serve/toml_test.go b/services/regulated-assets-approval-server/internal/serve/toml_test.go new file mode 100644 index 0000000000..4f552fde10 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/serve/toml_test.go @@ -0,0 +1,119 @@ +package serve + +import ( + "context" + "io/ioutil" + "net/http" + "net/http/httptest" + "testing" + + "github.com/go-chi/chi" + "github.com/stellar/go/network" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestTomlHandler_validate(t *testing.T) { + // empty network passphrase + h := stellarTOMLHandler{} + err := h.validate() + require.EqualError(t, err, "network passphrase cannot be empty") + + // empty asset code + h = stellarTOMLHandler{ + networkPassphrase: network.TestNetworkPassphrase, + } + err = h.validate() + require.EqualError(t, err, "asset code cannot be empty") + + // empty asset issuer address + h = stellarTOMLHandler{ + networkPassphrase: network.TestNetworkPassphrase, + assetCode: "FOOBAR", + } + err = h.validate() + require.EqualError(t, err, "asset issuer address cannot be empty") + + // invalid asset issuer address + h = stellarTOMLHandler{ + networkPassphrase: network.TestNetworkPassphrase, + assetCode: "FOOBAR", + issuerAddress: "foobar", + } + err = h.validate() + require.EqualError(t, err, "asset issuer address is not a valid public key") + + // empty approval server + h = stellarTOMLHandler{ + networkPassphrase: network.TestNetworkPassphrase, + assetCode: "FOOBAR", + issuerAddress: "GCVDOU4YHHXGM3QYVSDHPQIFMZKXTFSIYO4HJOJZOTR7GURVQO6IQ5HM", + } + err = h.validate() + require.EqualError(t, err, "approval server cannot be empty") + + // empty kyc threshold + h = stellarTOMLHandler{ + networkPassphrase: network.TestNetworkPassphrase, + assetCode: "FOOBAR", + issuerAddress: "GCVDOU4YHHXGM3QYVSDHPQIFMZKXTFSIYO4HJOJZOTR7GURVQO6IQ5HM", + approvalServer: "localhost:8000/tx-approve", + } + err = h.validate() + require.EqualError(t, err, "kyc threshold cannot be less than or equal to zero") + + // negative kyc threshold + h = stellarTOMLHandler{ + networkPassphrase: network.TestNetworkPassphrase, + assetCode: "FOOBAR", + issuerAddress: "GCVDOU4YHHXGM3QYVSDHPQIFMZKXTFSIYO4HJOJZOTR7GURVQO6IQ5HM", + approvalServer: "localhost:8000/tx-approve", + kycThreshold: -500, + } + err = h.validate() + require.EqualError(t, err, "kyc threshold cannot be less than or equal to zero") + + // success + h = stellarTOMLHandler{ + networkPassphrase: network.TestNetworkPassphrase, + assetCode: "FOOBAR", + issuerAddress: "GCVDOU4YHHXGM3QYVSDHPQIFMZKXTFSIYO4HJOJZOTR7GURVQO6IQ5HM", + approvalServer: "localhost:8000/tx-approve", + kycThreshold: 500, + } + err = h.validate() + require.NoError(t, err) +} + +func TestTomlHandler_ServeHTTP(t *testing.T) { + mux := chi.NewMux() + mux.Get("/.well-known/stellar.toml", stellarTOMLHandler{ + networkPassphrase: network.TestNetworkPassphrase, + assetCode: "FOO", + issuerAddress: "GCVDOU4YHHXGM3QYVSDHPQIFMZKXTFSIYO4HJOJZOTR7GURVQO6IQ5HM", + approvalServer: "localhost:8000/tx-approve", + kycThreshold: 5000000000, + }.ServeHTTP) + + ctx := context.Background() + w := httptest.NewRecorder() + r := httptest.NewRequest("GET", "/.well-known/stellar.toml", nil) + r = r.WithContext(ctx) + mux.ServeHTTP(w, r) + + resp := w.Result() + assert.Equal(t, http.StatusOK, resp.StatusCode) + assert.Equal(t, "text/plain; charset=utf-8", resp.Header.Get("Content-Type")) + + body, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + wantBody := `NETWORK_PASSPHRASE="` + network.TestNetworkPassphrase + `" +[[CURRENCIES]] +code="FOO" +issuer="GCVDOU4YHHXGM3QYVSDHPQIFMZKXTFSIYO4HJOJZOTR7GURVQO6IQ5HM" +regulated=true +approval_server="localhost:8000/tx-approve" +approval_criteria="The approval server currently only accepts payments. The transaction must have exactly one operation of type payment. If the payment amount exceeds 500.00 FOO it will need KYC approval."` + require.Equal(t, wantBody, string(body)) +} diff --git a/services/regulated-assets-approval-server/internal/serve/tx_approve.go b/services/regulated-assets-approval-server/internal/serve/tx_approve.go new file mode 100644 index 0000000000..e37d7b153f --- /dev/null +++ b/services/regulated-assets-approval-server/internal/serve/tx_approve.go @@ -0,0 +1,310 @@ +package serve + +import ( + "context" + "database/sql" + "fmt" + "net/http" + "strconv" + + "github.com/google/uuid" + "github.com/jmoiron/sqlx" + "github.com/stellar/go/amount" + "github.com/stellar/go/clients/horizonclient" + "github.com/stellar/go/keypair" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/serve/httperror" + "github.com/stellar/go/support/errors" + "github.com/stellar/go/support/http/httpdecode" + "github.com/stellar/go/support/log" + "github.com/stellar/go/txnbuild" +) + +type txApproveHandler struct { + issuerKP *keypair.Full + assetCode string + horizonClient horizonclient.ClientInterface + networkPassphrase string + db *sqlx.DB + kycThreshold int64 + baseURL string +} + +type txApproveRequest struct { + Tx string `json:"tx" form:"tx"` +} + +// validate performs some validations on the provided handler data. +func (h txApproveHandler) validate() error { + if h.issuerKP == nil { + return errors.New("issuer keypair cannot be nil") + } + if h.assetCode == "" { + return errors.New("asset code cannot be empty") + } + if h.horizonClient == nil { + return errors.New("horizon client cannot be nil") + } + if h.networkPassphrase == "" { + return errors.New("network passphrase cannot be empty") + } + if h.db == nil { + return errors.New("database cannot be nil") + } + if h.kycThreshold <= 0 { + return errors.New("kyc threshold cannot be less than or equal to zero") + } + if h.baseURL == "" { + return errors.New("base url cannot be empty") + } + return nil +} + +func convertThresholdToReadableString(threshold int64) (string, error) { + thresholdStr := amount.StringFromInt64(threshold) + res, err := strconv.ParseFloat(thresholdStr, 1) + if err != nil { + return "", errors.Wrap(err, "converting threshold amount from string to float") + } + return fmt.Sprintf("%.2f", res), nil +} + +func (h txApproveHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + err := h.validate() + if err != nil { + log.Ctx(ctx).Error(errors.Wrap(err, "validating txApproveHandler")) + httperror.InternalServer.Render(w) + return + } + + in := txApproveRequest{} + err = httpdecode.Decode(r, &in) + if err != nil { + log.Ctx(ctx).Error(errors.Wrap(err, "decoding txApproveRequest")) + httperror.BadRequest.Render(w) + return + } + + txApproveResp, err := h.txApprove(ctx, in) + if err != nil { + log.Ctx(ctx).Error(errors.Wrap(err, "validating the input transaction for approval")) + httperror.InternalServer.Render(w) + return + } + + txApproveResp.Render(w) +} + +// validateInput performs some validations on the provided transaction. It can +// reject the transaction based on general criteria that would be applied in any +// approval server. +func (h txApproveHandler) validateInput(ctx context.Context, in txApproveRequest) (*txApprovalResponse, *txnbuild.Transaction) { + if in.Tx == "" { + log.Ctx(ctx).Error(`request is missing parameter "tx".`) + return NewRejectedTxApprovalResponse(`Missing parameter "tx".`), nil + } + + genericTx, err := txnbuild.TransactionFromXDR(in.Tx) + if err != nil { + log.Ctx(ctx).Error(errors.Wrap(err, "parsing transaction xdr")) + return NewRejectedTxApprovalResponse(`Invalid parameter "tx".`), nil + } + + tx, ok := genericTx.Transaction() + if !ok { + log.Ctx(ctx).Error(`invalid parameter "tx", generic transaction not given.`) + return NewRejectedTxApprovalResponse(`Invalid parameter "tx".`), nil + } + + if tx.SourceAccount().AccountID == h.issuerKP.Address() { + log.Ctx(ctx).Errorf("transaction %s sourceAccount is the same as the server issuer account %s", + in.Tx, + h.issuerKP.Address()) + return NewRejectedTxApprovalResponse("The source account is invalid."), nil + } + + if len(tx.Operations()) != 1 { + return NewRejectedTxApprovalResponse("Please submit a transaction with exactly one operation of type payment."), nil + } + + if tx.Operations()[0].GetSourceAccount() == h.issuerKP.Address() { + log.Ctx(ctx).Error(`transaction contains one or more operations where sourceAccount is issuer account.`) + return NewRejectedTxApprovalResponse("There is one or more unauthorized operations in the provided transaction."), nil + } + + return nil, tx +} + +// txApprove is called to validate the input transaction. +func (h txApproveHandler) txApprove(ctx context.Context, in txApproveRequest) (resp *txApprovalResponse, err error) { + defer func() { + log.Ctx(ctx).Debug("==== will log responses ====") + log.Ctx(ctx).Debugf("req: %+v", in) + log.Ctx(ctx).Debugf("resp: %+v", resp) + log.Ctx(ctx).Debugf("err: %+v", err) + log.Ctx(ctx).Debug("==== did log responses ====") + }() + + txRejectedResp, tx := h.validateInput(ctx, in) + if txRejectedResp != nil { + return txRejectedResp, nil + } + + paymentOp, ok := tx.Operations()[0].(*txnbuild.Payment) + if !ok { + log.Ctx(ctx).Error(`transaction contains one or more operations is not of type payment`) + return NewRejectedTxApprovalResponse("There is one or more unauthorized operations in the provided transaction."), nil + } + paymentSource := paymentOp.SourceAccount + if paymentSource == "" { + paymentSource = tx.SourceAccount().AccountID + } + + issuerAddress := h.issuerKP.Address() + if paymentOp.Asset.GetCode() != h.assetCode || paymentOp.Asset.GetIssuer() != issuerAddress { + log.Ctx(ctx).Error(`the payment asset is not supported by this issuer`) + return NewRejectedTxApprovalResponse("The payment asset is not supported by this issuer."), nil + } + + acc, err := h.horizonClient.AccountDetail(horizonclient.AccountRequest{AccountID: paymentSource}) + if err != nil { + return nil, errors.Wrapf(err, "getting detail for payment source account %s", issuerAddress) + } + // validate the sequence number + accountSequence, err := strconv.ParseInt(acc.Sequence, 10, 64) + if err != nil { + return nil, errors.Wrapf(err, "parsing account sequence number %q from string to int64", acc.Sequence) + } + if tx.SourceAccount().Sequence != accountSequence+1 { + log.Ctx(ctx).Errorf(`invalid transaction sequence number tx.SourceAccount().Sequence: %d, accountSequence+1:%d`, tx.SourceAccount().Sequence, accountSequence+1) + return NewRejectedTxApprovalResponse("Invalid transaction sequence number."), nil + } + // Validate if payment operation requires KYC. + var kycRequiredResponse *txApprovalResponse + kycRequiredResponse, err = h.handleKYCRequiredOperationIfNeeded(ctx, paymentSource, paymentOp) + if err != nil { + return nil, errors.Wrap(err, "handling KYC required payment") + } + if kycRequiredResponse != nil { + return kycRequiredResponse, nil + } + // build the transaction + revisedOperations := []txnbuild.Operation{ + &txnbuild.AllowTrust{ + Trustor: paymentSource, + Type: paymentOp.Asset, + Authorize: true, + SourceAccount: issuerAddress, + }, + &txnbuild.AllowTrust{ + Trustor: paymentOp.Destination, + Type: paymentOp.Asset, + Authorize: true, + SourceAccount: issuerAddress, + }, + paymentOp, + &txnbuild.AllowTrust{ + Trustor: paymentOp.Destination, + Type: paymentOp.Asset, + Authorize: false, + SourceAccount: issuerAddress, + }, + &txnbuild.AllowTrust{ + Trustor: paymentSource, + Type: paymentOp.Asset, + Authorize: false, + SourceAccount: issuerAddress, + }, + } + revisedTx, err := txnbuild.NewTransaction(txnbuild.TransactionParams{ + SourceAccount: &acc, + IncrementSequenceNum: true, + Operations: revisedOperations, + BaseFee: 300, + Timebounds: txnbuild.NewTimeout(300), + }) + if err != nil { + return nil, errors.Wrap(err, "building transaction") + } + + revisedTx, err = revisedTx.Sign(h.networkPassphrase, h.issuerKP) + if err != nil { + return nil, errors.Wrap(err, "signing transaction") + } + + txe, err := revisedTx.Base64() + if err != nil { + return nil, errors.Wrap(err, "encoding revised transaction") + } + + return NewRevisedTxApprovalResponse(txe), nil +} + +// handleKYCRequiredOperationIfNeeded validates and returns an action_required response if the payment requires KYC. +func (h txApproveHandler) handleKYCRequiredOperationIfNeeded(ctx context.Context, stellarAddress string, paymentOp *txnbuild.Payment) (*txApprovalResponse, error) { + // validate payment operation against KYC condition(s). + KYCRequiredMessage, err := h.kycRequiredMessageIfNeeded(paymentOp) + if err != nil { + return nil, errors.Wrap(err, "validating KYC") + } + if KYCRequiredMessage == "" { + return nil, nil + } + + intendedCallbackID := uuid.New().String() + const q = ` + WITH new_row AS ( + INSERT INTO accounts_kyc_status (stellar_address, callback_id) + VALUES ($1, $2) + ON CONFLICT(stellar_address) DO NOTHING + RETURNING * + ) + SELECT callback_id, approved_at, rejected_at FROM new_row + UNION + SELECT callback_id, approved_at, rejected_at + FROM accounts_kyc_status + WHERE stellar_address = $1 + ` + var ( + callbackID string + approvedAt, rejectedAt sql.NullTime + ) + err = h.db.QueryRowContext(ctx, q, stellarAddress, intendedCallbackID).Scan(&callbackID, &approvedAt, &rejectedAt) + if err != nil { + return nil, errors.Wrap(err, "inserting new row into accounts_kyc_status table") + } + + if approvedAt.Valid { + return nil, nil + } + if rejectedAt.Valid { + kycThreshold, err := convertThresholdToReadableString(h.kycThreshold) + if err != nil { + return nil, errors.Wrap(err, "converting kycThreshold to human readable string") + } + return NewRejectedTxApprovalResponse(fmt.Sprintf("Your KYC was rejected and you're not authorized for operations above %s %s.", kycThreshold, h.assetCode)), nil + } + + return NewActionRequiredTxApprovalResponse( + KYCRequiredMessage, + fmt.Sprintf("%s/kyc-status/%s", h.baseURL, callbackID), + []string{"email_address"}, + ), nil +} + +// kycRequiredMessageIfNeeded returns a "action_required" message for the NewActionRequiredTxApprovalResponse if the payment operation meets KYC conditions. +// Currently rule(s) are, checking if payment amount is > KYCThreshold amount. +func (h txApproveHandler) kycRequiredMessageIfNeeded(paymentOp *txnbuild.Payment) (string, error) { + paymentAmount, err := amount.ParseInt64(paymentOp.Amount) + if err != nil { + return "", errors.Wrap(err, "parsing account payment amount from string to Int64") + } + if paymentAmount > h.kycThreshold { + kycThreshold, err := convertThresholdToReadableString(h.kycThreshold) + if err != nil { + return "", errors.Wrap(err, "converting kycThreshold to human readable string") + } + return fmt.Sprintf(`Payments exceeding %s %s requires KYC approval. Please provide an email address.`, kycThreshold, h.assetCode), nil + } + return "", nil +} diff --git a/services/regulated-assets-approval-server/internal/serve/tx_approve_response.go b/services/regulated-assets-approval-server/internal/serve/tx_approve_response.go new file mode 100644 index 0000000000..579d79f300 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/serve/tx_approve_response.go @@ -0,0 +1,58 @@ +package serve + +import ( + "net/http" + + "github.com/stellar/go/support/render/httpjson" +) + +type txApprovalResponse struct { + Error string `json:"error,omitempty"` + Message string `json:"message,omitempty"` + Status sep8Status `json:"status"` + StatusCode int `json:"-"` + Tx string `json:"tx,omitempty"` + ActionURL string `json:"action_url,omitempty"` + ActionMethod string `json:"action_method,omitempty"` + ActionFields []string `json:"action_fields,omitempty"` +} + +func (t *txApprovalResponse) Render(w http.ResponseWriter) { + httpjson.RenderStatus(w, t.StatusCode, t, httpjson.JSON) +} + +func NewRejectedTxApprovalResponse(errMessage string) *txApprovalResponse { + return &txApprovalResponse{ + Status: sep8StatusRejected, + Error: errMessage, + StatusCode: http.StatusBadRequest, + } +} + +func NewRevisedTxApprovalResponse(tx string) *txApprovalResponse { + return &txApprovalResponse{ + Status: sep8StatusRevised, + Tx: tx, + StatusCode: http.StatusOK, + Message: "Authorization and deauthorization operations were added.", + } +} + +func NewActionRequiredTxApprovalResponse(message, actionURL string, actionFields []string) *txApprovalResponse { + return &txApprovalResponse{ + Status: sep8StatusActionRequired, + Message: message, + ActionMethod: "POST", + StatusCode: http.StatusOK, + ActionURL: actionURL, + ActionFields: actionFields, + } +} + +type sep8Status string + +const ( + sep8StatusRejected sep8Status = "rejected" + sep8StatusRevised sep8Status = "revised" + sep8StatusActionRequired sep8Status = "action_required" +) diff --git a/services/regulated-assets-approval-server/internal/serve/tx_approve_test.go b/services/regulated-assets-approval-server/internal/serve/tx_approve_test.go new file mode 100644 index 0000000000..1092416668 --- /dev/null +++ b/services/regulated-assets-approval-server/internal/serve/tx_approve_test.go @@ -0,0 +1,566 @@ +package serve + +import ( + "context" + "net/http" + "testing" + + "github.com/stellar/go/amount" + "github.com/stellar/go/clients/horizonclient" + "github.com/stellar/go/keypair" + "github.com/stellar/go/network" + "github.com/stellar/go/protocols/horizon" + "github.com/stellar/go/protocols/horizon/base" + "github.com/stellar/go/services/regulated-assets-approval-server/internal/db/dbtest" + "github.com/stellar/go/txnbuild" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestTxApproveHandlerValidate(t *testing.T) { + // empty asset issuer KP. + h := txApproveHandler{} + err := h.validate() + require.EqualError(t, err, "issuer keypair cannot be nil") + + // empty asset code. + issuerAccKeyPair := keypair.MustRandom() + h = txApproveHandler{ + issuerKP: issuerAccKeyPair, + } + err = h.validate() + require.EqualError(t, err, "asset code cannot be empty") + + // No Horizon client. + h = txApproveHandler{ + issuerKP: issuerAccKeyPair, + assetCode: "FOOBAR", + } + err = h.validate() + require.EqualError(t, err, "horizon client cannot be nil") + + // No network passphrase. + horizonMock := horizonclient.MockClient{} + h = txApproveHandler{ + issuerKP: issuerAccKeyPair, + assetCode: "FOOBAR", + horizonClient: &horizonMock, + } + err = h.validate() + require.EqualError(t, err, "network passphrase cannot be empty") + + // No db. + h = txApproveHandler{ + issuerKP: issuerAccKeyPair, + assetCode: "FOOBAR", + horizonClient: &horizonMock, + networkPassphrase: network.TestNetworkPassphrase, + } + err = h.validate() + require.EqualError(t, err, "database cannot be nil") + + // Empty kycThreshold. + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + h = txApproveHandler{ + issuerKP: issuerAccKeyPair, + assetCode: "FOOBAR", + horizonClient: &horizonMock, + networkPassphrase: network.TestNetworkPassphrase, + db: conn, + } + err = h.validate() + require.EqualError(t, err, "kyc threshold cannot be less than or equal to zero") + + // Negative kycThreshold. + h = txApproveHandler{ + issuerKP: issuerAccKeyPair, + assetCode: "FOOBAR", + horizonClient: &horizonMock, + networkPassphrase: network.TestNetworkPassphrase, + db: conn, + kycThreshold: -1, + } + err = h.validate() + require.EqualError(t, err, "kyc threshold cannot be less than or equal to zero") + + // no baseURL. + h = txApproveHandler{ + issuerKP: issuerAccKeyPair, + assetCode: "FOOBAR", + horizonClient: &horizonMock, + networkPassphrase: network.TestNetworkPassphrase, + db: conn, + kycThreshold: 1, + } + err = h.validate() + require.EqualError(t, err, "base url cannot be empty") + + // Success. + h = txApproveHandler{ + issuerKP: issuerAccKeyPair, + assetCode: "FOOBAR", + horizonClient: &horizonMock, + networkPassphrase: network.TestNetworkPassphrase, + db: conn, + kycThreshold: 1, + baseURL: "https://sep8-server.test", + } + err = h.validate() + require.NoError(t, err) +} + +func TestConvertThresholdToReadableString(t *testing.T) { + // Prepare raw int64 amountValue. + // Context: stellar-core represents asset "amounts" as 64-bit so amounts shown as "500" is represented in stellar-core as 5000000000. + var amountValue int64 = 5000000000 + + // TEST if no error and if "500.00" returned + amountString, err := convertThresholdToReadableString(amountValue) + require.NoError(t, err) + assert.Equal(t, "500.00", amountString) + + // Prepare amount parsed Int64 from string + // Context: env var KYCRequiredPaymentAmountThreshold is the token's unit quantity represented as string. + // This string is converted to int64 and passed to the txApproveHandler for payment evaluation. + parsedThresholdResult, err := amount.ParseInt64("500") + + // TEST if no error and if "500.00" returned + amountString, err = convertThresholdToReadableString(parsedThresholdResult) + require.NoError(t, err) + assert.Equal(t, "500.00", amountString) +} + +func TestTxApproveHandlerKYCRequiredMessageIfNeeded(t *testing.T) { + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + + // Create tx-approve/ txApproveHandler. + issuerAccKeyPair := keypair.MustRandom() + horizonMock := horizonclient.MockClient{} + kycThresholdAmount, err := amount.ParseInt64("500") + require.NoError(t, err) + assetGOAT := txnbuild.CreditAsset{ + Code: "GOAT", + Issuer: issuerAccKeyPair.Address(), + } + h := txApproveHandler{ + issuerKP: issuerAccKeyPair, + assetCode: assetGOAT.GetCode(), + horizonClient: &horizonMock, + networkPassphrase: network.TestNetworkPassphrase, + db: conn, + kycThreshold: kycThresholdAmount, + baseURL: "https://sep8-server.test", + } + + // TEST if txApproveHandler is valid. + err = h.validate() + require.NoError(t, err) + + // Preparing payment op for kycRequiredMessageIfNeeded; payment amount is below kycThreshold. + destinationKP := keypair.MustRandom() + paymentOP := txnbuild.Payment{ + Destination: destinationKP.Address(), + Amount: "100", + Asset: assetGOAT, + } + + // TEST No KYC needed response. actionRequiredMessage should be "". + actionRequiredMessage, err := h.kycRequiredMessageIfNeeded(&paymentOP) + require.NoError(t, err) + require.Empty(t, actionRequiredMessage) + + // Prepare payment op for kycRequiredMessageIfNeeded; payment amount is malformed. + paymentOP = txnbuild.Payment{ + Destination: destinationKP.Address(), + Amount: "ten", + Asset: assetGOAT, + } + + // TEST kycRequiredMessageIfNeeded returns error. + _, err = h.kycRequiredMessageIfNeeded(&paymentOP) + assert.Contains(t, + err.Error(), + `parsing account payment amount from string to Int64: invalid amount format: ten`, + ) + + // Preparing payment op for kycRequiredMessageIfNeeded; payment amount is above kycThreshold. + paymentOP = txnbuild.Payment{ + Destination: destinationKP.Address(), + Amount: "501", + Asset: assetGOAT, + } + + // TEST Successful KYC required response. + // actionRequiredMessage should return "Payments exceeding [kycThreshold] [assetCode] requires KYC approval..." message. + actionRequiredMessage, err = h.kycRequiredMessageIfNeeded(&paymentOP) + require.NoError(t, err) + assert.Equal(t, `Payments exceeding 500.00 GOAT requires KYC approval. Please provide an email address.`, actionRequiredMessage) +} + +func TestTxApproveHandlerHandleKYCRequiredOperationIfNeeded(t *testing.T) { + ctx := context.Background() + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + + // Create tx-approve/ txApproveHandler. + issuerAccKeyPair := keypair.MustRandom() + horizonMock := horizonclient.MockClient{} + kycThresholdAmount, err := amount.ParseInt64("500") + require.NoError(t, err) + assetGOAT := txnbuild.CreditAsset{ + Code: "GOAT", + Issuer: issuerAccKeyPair.Address(), + } + h := txApproveHandler{ + issuerKP: issuerAccKeyPair, + assetCode: assetGOAT.GetCode(), + horizonClient: &horizonMock, + networkPassphrase: network.TestNetworkPassphrase, + db: conn, + kycThreshold: kycThresholdAmount, + baseURL: "https://sep8-server.test", + } + + // TEST if txApproveHandler is valid. + err = h.validate() + require.NoError(t, err) + + // Prepare payment op whose amount is greater than 500 GOATs. + sourceKP := keypair.MustRandom() + destinationKP := keypair.MustRandom() + paymentOP := txnbuild.Payment{ + SourceAccount: sourceKP.Address(), + Destination: destinationKP.Address(), + Amount: "501", + Asset: assetGOAT, + } + + // TEST successful "action_required" response. + actionRequiredTxApprovalResponse, err := h.handleKYCRequiredOperationIfNeeded(ctx, sourceKP.Address(), &paymentOP) + require.NoError(t, err) + wantTXApprovalResponse := txApprovalResponse{ + Status: sep8Status("action_required"), + Message: `Payments exceeding 500.00 GOAT requires KYC approval. Please provide an email address.`, + StatusCode: http.StatusOK, + ActionURL: actionRequiredTxApprovalResponse.ActionURL, + ActionMethod: "POST", + ActionFields: []string{"email_address"}, + } + assert.Equal(t, &wantTXApprovalResponse, actionRequiredTxApprovalResponse) + + // TEST if the kyc attempt was logged in db's accounts_kyc_status table. + const q = ` + SELECT stellar_address + FROM accounts_kyc_status + WHERE stellar_address = $1 + ` + var stellarAddress string + err = h.db.QueryRowContext(ctx, q, sourceKP.Address()).Scan(&stellarAddress) + require.NoError(t, err) + assert.Equal(t, sourceKP.Address(), stellarAddress) +} + +func TestTxApproveHandlerTxApprove(t *testing.T) { + ctx := context.Background() + db := dbtest.Open(t) + defer db.Close() + conn := db.Open() + defer conn.Close() + + // Perpare accounts on mock horizon. + issuerAccKeyPair := keypair.MustRandom() + senderAccKP := keypair.MustRandom() + receiverAccKP := keypair.MustRandom() + assetGOAT := txnbuild.CreditAsset{ + Code: "GOAT", + Issuer: issuerAccKeyPair.Address(), + } + horizonMock := horizonclient.MockClient{} + horizonMock. + On("AccountDetail", horizonclient.AccountRequest{AccountID: issuerAccKeyPair.Address()}). + Return(horizon.Account{ + AccountID: issuerAccKeyPair.Address(), + Sequence: "1", + Balances: []horizon.Balance{ + { + Asset: base.Asset{Code: "ASSET", Issuer: issuerAccKeyPair.Address()}, + Balance: "0", + }, + }, + }, nil) + horizonMock. + On("AccountDetail", horizonclient.AccountRequest{AccountID: senderAccKP.Address()}). + Return(horizon.Account{ + AccountID: senderAccKP.Address(), + Sequence: "2", + }, nil) + horizonMock. + On("AccountDetail", horizonclient.AccountRequest{AccountID: receiverAccKP.Address()}). + Return(horizon.Account{ + AccountID: receiverAccKP.Address(), + Sequence: "3", + }, nil) + + // Create tx-approve/ txApproveHandler. + kycThresholdAmount, err := amount.ParseInt64("500") + require.NoError(t, err) + handler := txApproveHandler{ + issuerKP: issuerAccKeyPair, + assetCode: assetGOAT.GetCode(), + horizonClient: &horizonMock, + networkPassphrase: network.TestNetworkPassphrase, + db: conn, + kycThreshold: kycThresholdAmount, + baseURL: "https://sep8-server.test", + } + + // TEST "rejected" response if no transaction is submitted; with empty "tx" for txApprove. + req := txApproveRequest{ + Tx: "", + } + rejectedResponse, err := handler.txApprove(ctx, req) + require.NoError(t, err) + wantRejectedResponse := txApprovalResponse{ + Status: "rejected", + Error: `Missing parameter "tx".`, + StatusCode: http.StatusBadRequest, + } + assert.Equal(t, &wantRejectedResponse, rejectedResponse) + + // TEST "rejected" response if can't parse XDR; with malformed "tx" for txApprove. + req = txApproveRequest{ + Tx: "BADXDRTRANSACTIONENVELOPE", + } + rejectedResponse, err = handler.txApprove(ctx, req) + require.NoError(t, err) + wantRejectedResponse = txApprovalResponse{ + Status: "rejected", + Error: `Invalid parameter "tx".`, + StatusCode: http.StatusBadRequest, + } + assert.Equal(t, &wantRejectedResponse, rejectedResponse) + + // Prepare invalid(non generic transaction) "tx" for txApprove. + senderAcc, err := handler.horizonClient.AccountDetail(horizonclient.AccountRequest{AccountID: senderAccKP.Address()}) + require.NoError(t, err) + tx, err := txnbuild.NewTransaction( + txnbuild.TransactionParams{ + SourceAccount: &senderAcc, + IncrementSequenceNum: true, + Operations: []txnbuild.Operation{ + &txnbuild.Payment{ + Destination: receiverAccKP.Address(), + Amount: "1", + Asset: assetGOAT, + }, + }, + BaseFee: txnbuild.MinBaseFee, + Timebounds: txnbuild.NewInfiniteTimeout(), + }, + ) + require.NoError(t, err) + feeBumpTx, err := txnbuild.NewFeeBumpTransaction( + txnbuild.FeeBumpTransactionParams{ + Inner: tx, + FeeAccount: receiverAccKP.Address(), + BaseFee: 2 * txnbuild.MinBaseFee, + }, + ) + require.NoError(t, err) + feeBumpTxEnc, err := feeBumpTx.Base64() + require.NoError(t, err) + + // TEST "rejected" response if a non generic transaction fails, same result as malformed XDR. + req = txApproveRequest{ + Tx: feeBumpTxEnc, + } + rejectedResponse, err = handler.txApprove(ctx, req) + require.NoError(t, err) + assert.Equal(t, &wantRejectedResponse, rejectedResponse) // wantRejectedResponse is identical to "if can't parse XDR". + + // Prepare transaction sourceAccount the same as the server issuer account for txApprove. + issuerAcc, err := handler.horizonClient.AccountDetail(horizonclient.AccountRequest{AccountID: issuerAccKeyPair.Address()}) + require.NoError(t, err) + tx, err = txnbuild.NewTransaction( + txnbuild.TransactionParams{ + SourceAccount: &issuerAcc, + IncrementSequenceNum: true, + Operations: []txnbuild.Operation{ + &txnbuild.Payment{ + Destination: senderAccKP.Address(), + Amount: "1", + Asset: assetGOAT, + }, + }, + BaseFee: txnbuild.MinBaseFee, + Timebounds: txnbuild.NewInfiniteTimeout(), + }, + ) + require.NoError(t, err) + txEnc, err := tx.Base64() + require.NoError(t, err) + + // TEST "rejected" response for sender account; transaction sourceAccount the same as the server issuer account. + req = txApproveRequest{ + Tx: txEnc, + } + rejectedResponse, err = handler.txApprove(ctx, req) + require.NoError(t, err) + wantRejectedResponse = txApprovalResponse{ + Status: "rejected", + Error: "The source account is invalid.", + StatusCode: http.StatusBadRequest, + } + assert.Equal(t, &wantRejectedResponse, rejectedResponse) + + // Prepare transaction where transaction's payment operation sourceAccount the same as the server issuer account. + tx, err = txnbuild.NewTransaction( + txnbuild.TransactionParams{ + SourceAccount: &senderAcc, + IncrementSequenceNum: true, + Operations: []txnbuild.Operation{ + &txnbuild.Payment{ + SourceAccount: issuerAccKeyPair.Address(), + Destination: senderAccKP.Address(), + Amount: "1", + Asset: assetGOAT, + }, + }, + BaseFee: txnbuild.MinBaseFee, + Timebounds: txnbuild.NewInfiniteTimeout(), + }, + ) + require.NoError(t, err) + txEnc, err = tx.Base64() + require.NoError(t, err) + + // TEST "rejected" response for sender account; payment operation sourceAccount the same as the server issuer account. + req = txApproveRequest{ + Tx: txEnc, + } + rejectedResponse, err = handler.txApprove(ctx, req) + require.NoError(t, err) + wantRejectedResponse = txApprovalResponse{ + Status: "rejected", + Error: "There is one or more unauthorized operations in the provided transaction.", + StatusCode: http.StatusBadRequest, + } + assert.Equal(t, &wantRejectedResponse, rejectedResponse) + + // Prepare transaction where operation is not a payment (in this case allowing trust for receiverAccKP). + tx, err = txnbuild.NewTransaction( + txnbuild.TransactionParams{ + SourceAccount: &senderAcc, + IncrementSequenceNum: true, + Operations: []txnbuild.Operation{ + &txnbuild.AllowTrust{ + Trustor: receiverAccKP.Address(), + Type: assetGOAT, + Authorize: true, + }, + }, + BaseFee: txnbuild.MinBaseFee, + Timebounds: txnbuild.NewInfiniteTimeout(), + }, + ) + require.NoError(t, err) + txEnc, err = tx.Base64() + + // TEST "rejected" response if operation is not a payment (in this case allowing trust for receiverAccKP). + req = txApproveRequest{ + Tx: txEnc, + } + rejectedResponse, err = handler.txApprove(ctx, req) + require.NoError(t, err) + wantRejectedResponse = txApprovalResponse{ + Status: "rejected", + Error: "There is one or more unauthorized operations in the provided transaction.", + StatusCode: http.StatusBadRequest, + } + assert.Equal(t, &wantRejectedResponse, rejectedResponse) + + // Prepare transaction with multiple operations. + tx, err = txnbuild.NewTransaction( + txnbuild.TransactionParams{ + SourceAccount: &senderAcc, + IncrementSequenceNum: true, + Operations: []txnbuild.Operation{ + &txnbuild.Payment{ + SourceAccount: senderAccKP.Address(), + Destination: receiverAccKP.Address(), + Amount: "1", + Asset: assetGOAT, + }, + &txnbuild.Payment{ + SourceAccount: senderAccKP.Address(), + Destination: receiverAccKP.Address(), + Amount: "2", + Asset: assetGOAT, + }, + }, + BaseFee: txnbuild.MinBaseFee, + Timebounds: txnbuild.NewInfiniteTimeout(), + }, + ) + require.NoError(t, err) + txEnc, err = tx.Base64() + require.NoError(t, err) + + // TEST "rejected" response for sender account; transaction with multiple operations. + req = txApproveRequest{ + Tx: txEnc, + } + rejectedResponse, err = handler.txApprove(ctx, req) + require.NoError(t, err) + wantRejectedResponse = txApprovalResponse{ + Status: "rejected", + Error: "Please submit a transaction with exactly one operation of type payment.", + StatusCode: http.StatusBadRequest, + } + assert.Equal(t, &wantRejectedResponse, rejectedResponse) + + // Prepare transaction where sourceAccount seq num too far in the future. + tx, err = txnbuild.NewTransaction( + txnbuild.TransactionParams{ + SourceAccount: &horizon.Account{ + AccountID: senderAccKP.Address(), + Sequence: "50", + }, + IncrementSequenceNum: true, + Operations: []txnbuild.Operation{ + &txnbuild.Payment{ + SourceAccount: senderAccKP.Address(), + Destination: receiverAccKP.Address(), + Amount: "1", + Asset: assetGOAT, + }, + }, + BaseFee: txnbuild.MinBaseFee, + Timebounds: txnbuild.NewInfiniteTimeout(), + }, + ) + require.NoError(t, err) + txEnc, err = tx.Base64() + require.NoError(t, err) + + // TEST "rejected" response if transaction source account seq num is not equal to account sequence+1. + req = txApproveRequest{ + Tx: txEnc, + } + rejectedResponse, err = handler.txApprove(ctx, req) + require.NoError(t, err) + wantRejectedResponse = txApprovalResponse{ + Status: "rejected", + Error: "Invalid transaction sequence number.", + StatusCode: http.StatusBadRequest, + } + assert.Equal(t, &wantRejectedResponse, rejectedResponse) +} diff --git a/services/regulated-assets-approval-server/main.go b/services/regulated-assets-approval-server/main.go index f641fdc6ee..930d3c8410 100644 --- a/services/regulated-assets-approval-server/main.go +++ b/services/regulated-assets-approval-server/main.go @@ -19,6 +19,7 @@ func main() { }, } + rootCmd.AddCommand((&cmd.MigrateCommand{}).Command()) rootCmd.AddCommand((&cmd.ServeCommand{}).Command()) err := rootCmd.Execute() diff --git a/services/regulated-assets-approval-server/serve/handlers.go b/services/regulated-assets-approval-server/serve/handlers.go deleted file mode 100644 index 75b45eb0dc..0000000000 --- a/services/regulated-assets-approval-server/serve/handlers.go +++ /dev/null @@ -1,25 +0,0 @@ -package serve - -import ( - "fmt" - "net/http" -) - -type stellarTOMLHandler struct { - assetCode string - issuerAddress string - networkPassphrase string -} - -func (h stellarTOMLHandler) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - approvalServer := fmt.Sprintf("%s/tx_approve", r.Host) - approvalCriteria := fmt.Sprintf("Currently %s is not approving any %s transactions", approvalServer, h.assetCode) - fmt.Fprintf(rw, "NETWORK_PASSPHRASE=%q\n", h.networkPassphrase) - fmt.Fprintf(rw, "[[CURRENCIES]]\n") - fmt.Fprintf(rw, "code=%q\n", h.assetCode) - fmt.Fprintf(rw, "issuer=%q\n", h.issuerAddress) - fmt.Fprintf(rw, "regulated=true\n") - fmt.Fprintf(rw, "approval_server=%q\n", approvalServer) - fmt.Fprintf(rw, "approval_criteria=%q\n", approvalCriteria) - -} diff --git a/services/regulated-assets-approval-server/serve/tx_approve.go b/services/regulated-assets-approval-server/serve/tx_approve.go deleted file mode 100644 index 560ba48ee2..0000000000 --- a/services/regulated-assets-approval-server/serve/tx_approve.go +++ /dev/null @@ -1,108 +0,0 @@ -package serve - -import ( - "context" - "net/http" - - "github.com/stellar/go/keypair" - "github.com/stellar/go/support/errors" - "github.com/stellar/go/support/http/httpdecode" - "github.com/stellar/go/support/log" - "github.com/stellar/go/support/render/httpjson" - "github.com/stellar/go/txnbuild" -) - -type sep8Status string - -const ( - Sep8StatusRejected sep8Status = "rejected" -) - -const ( - missingParamErr = "Missing parameter \"tx\"." - invalidParamErr = "Invalid parameter \"tx\"." - internalErrErr = "Internal Error." - invalidSrcAccErr = "The source account is invalid." - unauthorizedOpErr = "There is one or more unauthorized operations in the provided transaction." - notImplementedErr = "Not implemented." -) - -type txApproveHandler struct { - issuerKP *keypair.Full - assetCode string -} - -type txApproveRequest struct { - Transaction string `json:"tx" form:"tx"` -} - -type txApproveResponse struct { - Status sep8Status `json:"status"` - Error string `json:"error"` -} - -func NewRejectedTXApproveResponse(errorMessage string) *txApproveResponse { - return &txApproveResponse{ - Status: Sep8StatusRejected, - Error: errorMessage, - } -} - -func (h txApproveHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - in := txApproveRequest{} - err := httpdecode.Decode(r, &in) - if err != nil { - log.Ctx(ctx).Error(errors.Wrap(err, "decoding input parameters")) - httpErr := NewHTTPError(http.StatusBadRequest, "Invalid input parameters") - httpErr.Render(w) - return - } - rejectedResponse, err := h.isRejected(ctx, in) - if err != nil { - httpErr, ok := err.(*httpError) - if !ok { - httpErr = serverError - } - httpErr.Render(w) - return - } - httpjson.RenderStatus(w, http.StatusBadRequest, rejectedResponse, httpjson.JSON) -} - -func (h txApproveHandler) isRejected(ctx context.Context, in txApproveRequest) (*txApproveResponse, error) { - if in.Transaction == "" { - return NewRejectedTXApproveResponse(missingParamErr), nil - } - - // Decode the request transaction. - parsed, err := txnbuild.TransactionFromXDR(in.Transaction) - if err != nil { - log.Ctx(ctx).Error(errors.Wrapf(err, "Parsing transaction %s failed", in.Transaction)) - return NewRejectedTXApproveResponse(invalidParamErr), nil - } - - tx, ok := parsed.Transaction() - if !ok { - log.Ctx(ctx).Errorf("Transaction %s is not a simple transaction.", in.Transaction) - return NewRejectedTXApproveResponse(invalidParamErr), nil - } - - // Check if transaction's source account is the same as the server issuer account. - if tx.SourceAccount().AccountID == h.issuerKP.Address() { - log.Ctx(ctx).Errorf("Transaction %s sourceAccount is the same as the server issuer account %s", - in.Transaction, - h.issuerKP.Address()) - return NewRejectedTXApproveResponse(invalidSrcAccErr), nil - } - - // Check if transaction's operation(s)' sourceaccount is the same as the server issuer account. - for _, op := range tx.Operations() { - if op.GetSourceAccount() == h.issuerKP.Address() { - return NewRejectedTXApproveResponse(unauthorizedOpErr), nil - } - } - - return NewRejectedTXApproveResponse(notImplementedErr), nil -} diff --git a/services/regulated-assets-approval-server/serve/tx_approve_test.go b/services/regulated-assets-approval-server/serve/tx_approve_test.go deleted file mode 100644 index 9ae7160611..0000000000 --- a/services/regulated-assets-approval-server/serve/tx_approve_test.go +++ /dev/null @@ -1,638 +0,0 @@ -package serve - -import ( - "context" - "io/ioutil" - "net/http" - "net/http/httptest" - "net/url" - "strings" - "testing" - - "github.com/go-chi/chi" - "github.com/stellar/go/keypair" - "github.com/stellar/go/txnbuild" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestTxApproveHandler_isRejected(t *testing.T) { - ctx := context.Background() - issuerAccKeyPair := keypair.MustRandom() - assetGOAT := txnbuild.CreditAsset{ - Code: "GOAT", - Issuer: issuerAccKeyPair.Address(), - } - // Test if no transaction is submitted. - req := txApproveRequest{ - Transaction: "", - } - handler := txApproveHandler{ - issuerKP: issuerAccKeyPair, - assetCode: assetGOAT.GetCode(), - } - rejectedResponse, err := handler.isRejected(ctx, req) - require.NoError(t, err) - wantRejectedResponse := txApproveResponse{ - Status: Sep8StatusRejected, - Error: missingParamErr, - } - assert.Equal(t, &wantRejectedResponse, rejectedResponse) - - // Test if can't parse XDR. - req = txApproveRequest{ - Transaction: "BADXDRTRANSACTIONENVELOPE", - } - rejectedResponse, err = handler.isRejected(ctx, req) - require.NoError(t, err) - wantRejectedResponse = txApproveResponse{ - Status: Sep8StatusRejected, - Error: invalidParamErr, - } - assert.Equal(t, &wantRejectedResponse, rejectedResponse) - - // Test if a non generic transaction fails, same result as malformed XDR. - kp01 := keypair.MustRandom() - kp02 := keypair.MustRandom() - tx, err := txnbuild.NewTransaction( - txnbuild.TransactionParams{ - SourceAccount: &txnbuild.SimpleAccount{AccountID: kp01.Address()}, - IncrementSequenceNum: true, - Operations: []txnbuild.Operation{ - &txnbuild.Payment{ - Destination: kp02.Address(), - Amount: "1", - Asset: assetGOAT, - }, - }, - BaseFee: txnbuild.MinBaseFee, - Timebounds: txnbuild.NewInfiniteTimeout(), - }, - ) - require.NoError(t, err) - feeBumpTx, err := txnbuild.NewFeeBumpTransaction( - txnbuild.FeeBumpTransactionParams{ - Inner: tx, - FeeAccount: kp02.Address(), - BaseFee: 2 * txnbuild.MinBaseFee, - }, - ) - require.NoError(t, err) - feeBumpTxEnc, err := feeBumpTx.Base64() - require.NoError(t, err) - req = txApproveRequest{ - Transaction: feeBumpTxEnc, - } - rejectedResponse, err = handler.isRejected(ctx, req) - require.NoError(t, err) - assert.Equal(t, &wantRejectedResponse, rejectedResponse) // wantRejectedResponse is identical to "if can't parse XDR". - - // Test if the transaction sourceAccount the same as the server issuer account - tx, err = txnbuild.NewTransaction( - txnbuild.TransactionParams{ - SourceAccount: &txnbuild.SimpleAccount{AccountID: issuerAccKeyPair.Address()}, - IncrementSequenceNum: true, - Operations: []txnbuild.Operation{ - &txnbuild.Payment{ - Destination: kp01.Address(), - Amount: "1", - Asset: assetGOAT, - }, - }, - BaseFee: txnbuild.MinBaseFee, - Timebounds: txnbuild.NewInfiniteTimeout(), - }, - ) - require.NoError(t, err) - txEnc, err := tx.Base64() - req = txApproveRequest{ - Transaction: txEnc, - } - rejectedResponse, err = handler.isRejected(ctx, req) - require.NoError(t, err) - wantRejectedResponse = txApproveResponse{ - Status: Sep8StatusRejected, - Error: invalidSrcAccErr, - } - assert.Equal(t, &wantRejectedResponse, rejectedResponse) - - // Test if the transaction's operation sourceAccount the same as the server issuer account - tx, err = txnbuild.NewTransaction( - txnbuild.TransactionParams{ - SourceAccount: &txnbuild.SimpleAccount{AccountID: kp01.Address()}, - IncrementSequenceNum: true, - Operations: []txnbuild.Operation{ - &txnbuild.Payment{ - SourceAccount: issuerAccKeyPair.Address(), - Destination: kp01.Address(), - Amount: "1", - Asset: assetGOAT, - }, - }, - BaseFee: txnbuild.MinBaseFee, - Timebounds: txnbuild.NewInfiniteTimeout(), - }, - ) - require.NoError(t, err) - txEnc, err = tx.Base64() - req = txApproveRequest{ - Transaction: txEnc, - } - rejectedResponse, err = handler.isRejected(ctx, req) - require.NoError(t, err) - wantRejectedResponse = txApproveResponse{ - Status: Sep8StatusRejected, - Error: unauthorizedOpErr, - } - assert.Equal(t, &wantRejectedResponse, rejectedResponse) - - // Test "not implemented" - tx, err = txnbuild.NewTransaction( - txnbuild.TransactionParams{ - SourceAccount: &txnbuild.SimpleAccount{AccountID: kp01.Address()}, - IncrementSequenceNum: true, - Operations: []txnbuild.Operation{ - &txnbuild.Payment{ - SourceAccount: kp01.Address(), - Destination: kp02.Address(), - Amount: "1", - Asset: assetGOAT, - }, - }, - BaseFee: txnbuild.MinBaseFee, - Timebounds: txnbuild.NewInfiniteTimeout(), - }, - ) - require.NoError(t, err) - txEnc, err = tx.Base64() - req = txApproveRequest{ - Transaction: txEnc, - } - rejectedResponse, err = handler.isRejected(ctx, req) - require.NoError(t, err) - wantRejectedResponse = txApproveResponse{ - Status: Sep8StatusRejected, - Error: notImplementedErr, - } - assert.Equal(t, &wantRejectedResponse, rejectedResponse) -} - -func TestTxApproveHandler_serveHTTPJson(t *testing.T) { - ctx := context.Background() - issuerAccKeyPair := keypair.MustRandom() - assetGOAT := txnbuild.CreditAsset{ - Code: "GOAT", - Issuer: issuerAccKeyPair.Address(), - } - handler := txApproveHandler{ - issuerKP: issuerAccKeyPair, - assetCode: assetGOAT.GetCode(), - } - - // Test if no transaction is submitted. - req := `{ - "tx": "" - }` - r := httptest.NewRequest("POST", "/tx_approve", strings.NewReader(req)) - r = r.WithContext(ctx) - - w := httptest.NewRecorder() - m := chi.NewMux() - m.Post("/tx_approve", handler.ServeHTTP) - m.ServeHTTP(w, r) - resp := w.Result() - - assert.Equal(t, http.StatusBadRequest, resp.StatusCode) - assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) - - body, err := ioutil.ReadAll(resp.Body) - require.NoError(t, err) - wantBody := `{ - "status":"rejected", "error":"Missing parameter \"tx\"." - }` - require.JSONEq(t, wantBody, string(body)) - - // Test if can't parse XDR. - req = `{ - "tx": "BADXDRTRANSACTIONENVELOPE" - }` - r = httptest.NewRequest("POST", "/tx_approve", strings.NewReader(req)) - r = r.WithContext(ctx) - - w = httptest.NewRecorder() - m = chi.NewMux() - m.Post("/tx_approve", handler.ServeHTTP) - m.ServeHTTP(w, r) - resp = w.Result() - - assert.Equal(t, http.StatusBadRequest, resp.StatusCode) - assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) - - body, err = ioutil.ReadAll(resp.Body) - require.NoError(t, err) - wantBody = `{ - "status":"rejected", "error":"Invalid parameter \"tx\"." - }` - require.JSONEq(t, wantBody, string(body)) - - // Test if a non generic transaction fails, same result as malformed XDR. - kp01 := keypair.MustRandom() - kp02 := keypair.MustRandom() - tx, err := txnbuild.NewTransaction( - txnbuild.TransactionParams{ - SourceAccount: &txnbuild.SimpleAccount{AccountID: kp01.Address()}, - IncrementSequenceNum: true, - Operations: []txnbuild.Operation{ - &txnbuild.Payment{ - Destination: kp02.Address(), - Amount: "1", - Asset: assetGOAT, - }, - }, - BaseFee: txnbuild.MinBaseFee, - Timebounds: txnbuild.NewInfiniteTimeout(), - }, - ) - require.NoError(t, err) - feeBumpTx, err := txnbuild.NewFeeBumpTransaction( - txnbuild.FeeBumpTransactionParams{ - Inner: tx, - FeeAccount: kp02.Address(), - BaseFee: 2 * txnbuild.MinBaseFee, - }, - ) - require.NoError(t, err) - feeBumpTxEnc, err := feeBumpTx.Base64() - require.NoError(t, err) - req = `{ - "tx": "` + feeBumpTxEnc + `" - }` - r = httptest.NewRequest("POST", "/tx_approve", strings.NewReader(req)) - r = r.WithContext(ctx) - - w = httptest.NewRecorder() - m = chi.NewMux() - m.Post("/tx_approve", handler.ServeHTTP) - m.ServeHTTP(w, r) - resp = w.Result() - - assert.Equal(t, http.StatusBadRequest, resp.StatusCode) - assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) - - body, err = ioutil.ReadAll(resp.Body) - require.NoError(t, err) - wantBody = `{ - "status":"rejected", "error":"Invalid parameter \"tx\"." - }` - require.JSONEq(t, wantBody, string(body)) - - // Test if the transaction sourceAccount the same as the server issuer account - tx, err = txnbuild.NewTransaction( - txnbuild.TransactionParams{ - SourceAccount: &txnbuild.SimpleAccount{AccountID: issuerAccKeyPair.Address()}, - IncrementSequenceNum: true, - Operations: []txnbuild.Operation{ - &txnbuild.Payment{ - Destination: kp01.Address(), - Amount: "1", - Asset: assetGOAT, - }, - }, - BaseFee: txnbuild.MinBaseFee, - Timebounds: txnbuild.NewInfiniteTimeout(), - }, - ) - require.NoError(t, err) - txEnc, err := tx.Base64() - req = `{ - "tx": "` + txEnc + `" - }` - r = httptest.NewRequest("POST", "/tx_approve", strings.NewReader(req)) - r = r.WithContext(ctx) - - w = httptest.NewRecorder() - m = chi.NewMux() - m.Post("/tx_approve", handler.ServeHTTP) - m.ServeHTTP(w, r) - resp = w.Result() - - assert.Equal(t, http.StatusBadRequest, resp.StatusCode) - assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) - - body, err = ioutil.ReadAll(resp.Body) - require.NoError(t, err) - wantBody = `{ - "status":"rejected", "error":"The source account is invalid." - }` - require.JSONEq(t, wantBody, string(body)) - - // Test if the transaction's operation sourceAccount the same as the server issuer account - tx, err = txnbuild.NewTransaction( - txnbuild.TransactionParams{ - SourceAccount: &txnbuild.SimpleAccount{AccountID: kp01.Address()}, - IncrementSequenceNum: true, - Operations: []txnbuild.Operation{ - &txnbuild.Payment{ - SourceAccount: issuerAccKeyPair.Address(), - Destination: kp01.Address(), - Amount: "1", - Asset: assetGOAT, - }, - }, - BaseFee: txnbuild.MinBaseFee, - Timebounds: txnbuild.NewInfiniteTimeout(), - }, - ) - require.NoError(t, err) - txEnc, err = tx.Base64() - req = `{ - "tx": "` + txEnc + `" - }` - r = httptest.NewRequest("POST", "/tx_approve", strings.NewReader(req)) - r = r.WithContext(ctx) - - w = httptest.NewRecorder() - m = chi.NewMux() - m.Post("/tx_approve", handler.ServeHTTP) - m.ServeHTTP(w, r) - resp = w.Result() - - assert.Equal(t, http.StatusBadRequest, resp.StatusCode) - assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) - - body, err = ioutil.ReadAll(resp.Body) - require.NoError(t, err) - wantBody = `{ - "status":"rejected", "error":"There is one or more unauthorized operations in the provided transaction." - }` - require.JSONEq(t, wantBody, string(body)) - - // Test "not implemented" - tx, err = txnbuild.NewTransaction( - txnbuild.TransactionParams{ - SourceAccount: &txnbuild.SimpleAccount{AccountID: kp01.Address()}, - IncrementSequenceNum: true, - Operations: []txnbuild.Operation{ - &txnbuild.Payment{ - SourceAccount: kp01.Address(), - Destination: kp02.Address(), - Amount: "1", - Asset: assetGOAT, - }, - }, - BaseFee: txnbuild.MinBaseFee, - Timebounds: txnbuild.NewInfiniteTimeout(), - }, - ) - require.NoError(t, err) - txEnc, err = tx.Base64() - req = `{ - "tx": "` + txEnc + `" - }` - r = httptest.NewRequest("POST", "/tx_approve", strings.NewReader(req)) - r = r.WithContext(ctx) - - w = httptest.NewRecorder() - m = chi.NewMux() - m.Post("/tx_approve", handler.ServeHTTP) - m.ServeHTTP(w, r) - resp = w.Result() - - assert.Equal(t, http.StatusBadRequest, resp.StatusCode) - assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) - - body, err = ioutil.ReadAll(resp.Body) - require.NoError(t, err) - wantBody = `{ - "status":"rejected", "error":"Not implemented." - }` - require.JSONEq(t, wantBody, string(body)) -} - -func TestTxApproveHandler_serveHTTPForm(t *testing.T) { - ctx := context.Background() - issuerAccKeyPair := keypair.MustRandom() - assetGOAT := txnbuild.CreditAsset{ - Code: "GOAT", - Issuer: issuerAccKeyPair.Address(), - } - handler := txApproveHandler{ - issuerKP: issuerAccKeyPair, - assetCode: assetGOAT.GetCode(), - } - - // Test if no transaction is submitted. - req := url.Values{} - req.Set("tx", "") - - r := httptest.NewRequest("POST", "/tx_approve", strings.NewReader(req.Encode())) - r.Header.Set("Content-Type", "application/x-www-form-urlencoded") - r = r.WithContext(ctx) - - w := httptest.NewRecorder() - m := chi.NewMux() - m.Post("/tx_approve", handler.ServeHTTP) - m.ServeHTTP(w, r) - resp := w.Result() - - assert.Equal(t, http.StatusBadRequest, resp.StatusCode) - assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) - - body, err := ioutil.ReadAll(resp.Body) - require.NoError(t, err) - wantBody := `{ - "status":"rejected", "error":"Missing parameter \"tx\"." - }` - require.JSONEq(t, wantBody, string(body)) - - // Test if can't parse XDR. - req.Set("tx", "BADXDRTRANSACTIONENVELOPE") - r = httptest.NewRequest("POST", "/tx_approve", strings.NewReader(req.Encode())) - r.Header.Set("Content-Type", "application/x-www-form-urlencoded") - r = r.WithContext(ctx) - - w = httptest.NewRecorder() - m = chi.NewMux() - m.Post("/tx_approve", handler.ServeHTTP) - m.ServeHTTP(w, r) - resp = w.Result() - - assert.Equal(t, http.StatusBadRequest, resp.StatusCode) - assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) - - body, err = ioutil.ReadAll(resp.Body) - require.NoError(t, err) - wantBody = `{ - "status":"rejected", "error":"Invalid parameter \"tx\"." - }` - require.JSONEq(t, wantBody, string(body)) - - // Test if a non generic transaction fails, same result as malformed XDR. - kp01 := keypair.MustRandom() - kp02 := keypair.MustRandom() - tx, err := txnbuild.NewTransaction( - txnbuild.TransactionParams{ - SourceAccount: &txnbuild.SimpleAccount{AccountID: kp01.Address()}, - IncrementSequenceNum: true, - Operations: []txnbuild.Operation{ - &txnbuild.Payment{ - Destination: kp02.Address(), - Amount: "1", - Asset: assetGOAT, - }, - }, - BaseFee: txnbuild.MinBaseFee, - Timebounds: txnbuild.NewInfiniteTimeout(), - }, - ) - require.NoError(t, err) - feeBumpTx, err := txnbuild.NewFeeBumpTransaction( - txnbuild.FeeBumpTransactionParams{ - Inner: tx, - FeeAccount: kp02.Address(), - BaseFee: 2 * txnbuild.MinBaseFee, - }, - ) - require.NoError(t, err) - feeBumpTxEnc, err := feeBumpTx.Base64() - require.NoError(t, err) - req.Set("tx", feeBumpTxEnc) - r = httptest.NewRequest("POST", "/tx_approve", strings.NewReader(req.Encode())) - r.Header.Set("Content-Type", "application/x-www-form-urlencoded") - r = r.WithContext(ctx) - - w = httptest.NewRecorder() - m = chi.NewMux() - m.Post("/tx_approve", handler.ServeHTTP) - m.ServeHTTP(w, r) - resp = w.Result() - - assert.Equal(t, http.StatusBadRequest, resp.StatusCode) - assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) - - body, err = ioutil.ReadAll(resp.Body) - require.NoError(t, err) - wantBody = `{ - "status":"rejected", "error":"Invalid parameter \"tx\"." - }` - require.JSONEq(t, wantBody, string(body)) - - // Test if the transaction sourceAccount the same as the server issuer account - tx, err = txnbuild.NewTransaction( - txnbuild.TransactionParams{ - SourceAccount: &txnbuild.SimpleAccount{AccountID: issuerAccKeyPair.Address()}, - IncrementSequenceNum: true, - Operations: []txnbuild.Operation{ - &txnbuild.Payment{ - Destination: kp01.Address(), - Amount: "1", - Asset: assetGOAT, - }, - }, - BaseFee: txnbuild.MinBaseFee, - Timebounds: txnbuild.NewInfiniteTimeout(), - }, - ) - require.NoError(t, err) - txEnc, err := tx.Base64() - req.Set("tx", txEnc) - r = httptest.NewRequest("POST", "/tx_approve", strings.NewReader(req.Encode())) - r.Header.Set("Content-Type", "application/x-www-form-urlencoded") - r = r.WithContext(ctx) - - w = httptest.NewRecorder() - m = chi.NewMux() - m.Post("/tx_approve", handler.ServeHTTP) - m.ServeHTTP(w, r) - resp = w.Result() - - assert.Equal(t, http.StatusBadRequest, resp.StatusCode) - assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) - - body, err = ioutil.ReadAll(resp.Body) - require.NoError(t, err) - wantBody = `{ - "status":"rejected", "error":"The source account is invalid." - }` - require.JSONEq(t, wantBody, string(body)) - - // Test if the transaction's operation sourceaccount the same as the server issuer account - tx, err = txnbuild.NewTransaction( - txnbuild.TransactionParams{ - SourceAccount: &txnbuild.SimpleAccount{AccountID: kp01.Address()}, - IncrementSequenceNum: true, - Operations: []txnbuild.Operation{ - &txnbuild.Payment{ - SourceAccount: issuerAccKeyPair.Address(), - Destination: kp01.Address(), - Amount: "1", - Asset: assetGOAT, - }, - }, - BaseFee: txnbuild.MinBaseFee, - Timebounds: txnbuild.NewInfiniteTimeout(), - }, - ) - require.NoError(t, err) - txEnc, err = tx.Base64() - req.Set("tx", txEnc) - r = httptest.NewRequest("POST", "/tx_approve", strings.NewReader(req.Encode())) - r.Header.Set("Content-Type", "application/x-www-form-urlencoded") - r = r.WithContext(ctx) - - w = httptest.NewRecorder() - m = chi.NewMux() - m.Post("/tx_approve", handler.ServeHTTP) - m.ServeHTTP(w, r) - resp = w.Result() - - assert.Equal(t, http.StatusBadRequest, resp.StatusCode) - assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) - - body, err = ioutil.ReadAll(resp.Body) - require.NoError(t, err) - wantBody = `{ - "status":"rejected", "error":"There is one or more unauthorized operations in the provided transaction." - }` - require.JSONEq(t, wantBody, string(body)) - - // Test "not implemented" - tx, err = txnbuild.NewTransaction( - txnbuild.TransactionParams{ - SourceAccount: &txnbuild.SimpleAccount{AccountID: kp01.Address()}, - IncrementSequenceNum: true, - Operations: []txnbuild.Operation{ - &txnbuild.Payment{ - SourceAccount: kp01.Address(), - Destination: kp02.Address(), - Amount: "1", - Asset: assetGOAT, - }, - }, - BaseFee: txnbuild.MinBaseFee, - Timebounds: txnbuild.NewInfiniteTimeout(), - }, - ) - require.NoError(t, err) - txEnc, err = tx.Base64() - req.Set("tx", txEnc) - r = httptest.NewRequest("POST", "/tx_approve", strings.NewReader(req.Encode())) - r.Header.Set("Content-Type", "application/x-www-form-urlencoded") - r = r.WithContext(ctx) - - w = httptest.NewRecorder() - m = chi.NewMux() - m.Post("/tx_approve", handler.ServeHTTP) - m.ServeHTTP(w, r) - resp = w.Result() - - assert.Equal(t, http.StatusBadRequest, resp.StatusCode) - assert.Equal(t, "application/json; charset=utf-8", resp.Header.Get("Content-Type")) - - body, err = ioutil.ReadAll(resp.Body) - require.NoError(t, err) - wantBody = `{ - "status":"rejected", "error":"Not implemented." - }` - require.JSONEq(t, wantBody, string(body)) -} diff --git a/services/ticker/cmd/clean.go b/services/ticker/cmd/clean.go index 08bbbffd87..5582029bcb 100644 --- a/services/ticker/cmd/clean.go +++ b/services/ticker/cmd/clean.go @@ -1,6 +1,7 @@ package cmd import ( + "context" "time" "github.com/lib/pq" @@ -45,7 +46,7 @@ var cmdCleanTrades = &cobra.Command{ now := time.Now() minDate := now.AddDate(0, 0, -DaysToKeep) Logger.Infof("Deleting trade entries older than %d days", DaysToKeep) - err = session.DeleteOldTrades(minDate) + err = session.DeleteOldTrades(context.Background(), minDate) if err != nil { Logger.Fatal("could not delete trade entries:", err) } diff --git a/services/ticker/cmd/generate.go b/services/ticker/cmd/generate.go index b726d78f54..75c8dfb49b 100644 --- a/services/ticker/cmd/generate.go +++ b/services/ticker/cmd/generate.go @@ -1,6 +1,7 @@ package cmd import ( + "context" "github.com/lib/pq" "github.com/spf13/cobra" ticker "github.com/stellar/go/services/ticker/internal" @@ -74,7 +75,7 @@ var cmdGenerateAssetData = &cobra.Command{ } Logger.Infof("Starting asset data generation, outputting to: %s\n", AssetsOutFile) - err = ticker.GenerateAssetsFile(&session, Logger, AssetsOutFile) + err = ticker.GenerateAssetsFile(context.Background(), &session, Logger, AssetsOutFile) if err != nil { Logger.Fatal("could not generate asset data:", err) } diff --git a/services/ticker/cmd/ingest.go b/services/ticker/cmd/ingest.go index 17869319d3..4068a8d7f5 100644 --- a/services/ticker/cmd/ingest.go +++ b/services/ticker/cmd/ingest.go @@ -54,7 +54,8 @@ var cmdIngestAssets = &cobra.Command{ } defer session.DB.Close() - err = ticker.RefreshAssets(&session, Client, Logger) + ctx := context.Background() + err = ticker.RefreshAssets(ctx, &session, Client, Logger) if err != nil { Logger.Fatal("could not refresh asset database:", err) } @@ -76,20 +77,20 @@ var cmdIngestTrades = &cobra.Command{ } defer session.DB.Close() + ctx := context.Background() numDays := float32(BackfillHours) / 24.0 Logger.Infof( "Backfilling Trade data for the past %d hour(s) [%.2f days]\n", BackfillHours, numDays, ) - err = ticker.BackfillTrades(&session, Client, Logger, BackfillHours, 0) + err = ticker.BackfillTrades(ctx, &session, Client, Logger, BackfillHours, 0) if err != nil { Logger.Fatal("could not refresh trade database:", err) } if ShouldStream { Logger.Info("Streaming new data (this is a continuous process)") - ctx := context.Background() err = ticker.StreamTrades(ctx, &session, Client, Logger) if err != nil { Logger.Fatal("could not refresh trade database:", err) diff --git a/services/ticker/docker/Dockerfile b/services/ticker/docker/Dockerfile index f47c01f636..327ce8578d 100644 --- a/services/ticker/docker/Dockerfile +++ b/services/ticker/docker/Dockerfile @@ -1,13 +1,13 @@ -FROM golang:1.16.2 as build +FROM golang:1.16.3 as build ADD . /src/ticker WORKDIR /src/ticker RUN go build -o /bin/ticker ./services/ticker -FROM ubuntu:18.04 +FROM ubuntu:20.04 -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ca-certificates COPY --from=build /bin/ticker /app/ EXPOSE 8000 ENTRYPOINT ["/app/ticker"] diff --git a/services/ticker/docker/Dockerfile-dev b/services/ticker/docker/Dockerfile-dev index c8c7434f55..8be2701822 100644 --- a/services/ticker/docker/Dockerfile-dev +++ b/services/ticker/docker/Dockerfile-dev @@ -1,4 +1,4 @@ -FROM golang:1.16.2-stretch as build +FROM golang:1.16.3-stretch as build LABEL maintainer="Alex Cordeiro " diff --git a/services/ticker/internal/actions_asset.go b/services/ticker/internal/actions_asset.go index 3106d8ab57..c34f8ad182 100644 --- a/services/ticker/internal/actions_asset.go +++ b/services/ticker/internal/actions_asset.go @@ -1,6 +1,7 @@ package ticker import ( + "context" "encoding/json" "strings" "time" @@ -13,7 +14,7 @@ import ( ) // RefreshAssets scrapes the most recent asset list and ingests then into the db. -func RefreshAssets(s *tickerdb.TickerSession, c *horizonclient.Client, l *hlog.Entry) (err error) { +func RefreshAssets(ctx context.Context, s *tickerdb.TickerSession, c *horizonclient.Client, l *hlog.Entry) (err error) { sc := scraper.ScraperConfig{ Client: c, Logger: l, @@ -28,14 +29,14 @@ func RefreshAssets(s *tickerdb.TickerSession, c *horizonclient.Client, l *hlog.E if dbIssuer.PublicKey == "" { dbIssuer.PublicKey = finalAsset.Issuer } - issuerID, err := s.InsertOrUpdateIssuer(&dbIssuer, []string{"public_key"}) + issuerID, err := s.InsertOrUpdateIssuer(ctx, &dbIssuer, []string{"public_key"}) if err != nil { l.Error("Error inserting issuer:", dbIssuer, err) continue } dbAsset := finalAssetToDBAsset(finalAsset, issuerID) - err = s.InsertOrUpdateAsset(&dbAsset, []string{"code", "issuer_account", "issuer_id"}) + err = s.InsertOrUpdateAsset(ctx, &dbAsset, []string{"code", "issuer_account", "issuer_id"}) if err != nil { l.Error("Error inserting asset:", dbAsset, err) } @@ -45,10 +46,10 @@ func RefreshAssets(s *tickerdb.TickerSession, c *horizonclient.Client, l *hlog.E } // GenerateAssetsFile generates a file with the info about all valid scraped Assets -func GenerateAssetsFile(s *tickerdb.TickerSession, l *hlog.Entry, filename string) error { +func GenerateAssetsFile(ctx context.Context, s *tickerdb.TickerSession, l *hlog.Entry, filename string) error { l.Infoln("Retrieving asset data from db...") var assets []Asset - validAssets, err := s.GetAssetsWithNestedIssuer() + validAssets, err := s.GetAssetsWithNestedIssuer(ctx) if err != nil { return err } diff --git a/services/ticker/internal/actions_market.go b/services/ticker/internal/actions_market.go index 933a1b4f94..c60f57be8a 100644 --- a/services/ticker/internal/actions_market.go +++ b/services/ticker/internal/actions_market.go @@ -1,6 +1,7 @@ package ticker import ( + "context" "encoding/json" "time" @@ -40,8 +41,9 @@ func GenerateMarketSummary(s *tickerdb.TickerSession) (ms MarketSummary, err err now := time.Now() nowMillis := utils.TimeToUnixEpoch(now) nowRFC339 := utils.TimeToRFC3339(now) + ctx := context.Background() - dbMarkets, err := s.RetrieveMarketData() + dbMarkets, err := s.RetrieveMarketData(ctx) if err != nil { return } diff --git a/services/ticker/internal/actions_orderbook.go b/services/ticker/internal/actions_orderbook.go index e68b6db88c..ab39d10a2e 100644 --- a/services/ticker/internal/actions_orderbook.go +++ b/services/ticker/internal/actions_orderbook.go @@ -1,6 +1,7 @@ package ticker import ( + "context" "time" horizonclient "github.com/stellar/go/clients/horizonclient" @@ -17,9 +18,10 @@ func RefreshOrderbookEntries(s *tickerdb.TickerSession, c *horizonclient.Client, Client: c, Logger: l, } + ctx := context.Background() // Retrieve relevant markets for the past 7 days (168 hours): - mkts, err := s.Retrieve7DRelevantMarkets() + mkts, err := s.Retrieve7DRelevantMarkets(ctx) if err != nil { return errors.Wrap(err, "could not retrieve partial markets") } @@ -39,7 +41,7 @@ func RefreshOrderbookEntries(s *tickerdb.TickerSession, c *horizonclient.Client, } dbOS := orderbookStatsToDBOrderbookStats(ob, mkt.BaseAssetID, mkt.CounterAssetID) - err = s.InsertOrUpdateOrderbookStats(&dbOS, []string{"base_asset_id", "counter_asset_id"}) + err = s.InsertOrUpdateOrderbookStats(ctx, &dbOS, []string{"base_asset_id", "counter_asset_id"}) if err != nil { l.Error(errors.Wrap(err, "could not insert orderbook stats into db")) continue @@ -60,7 +62,7 @@ func RefreshOrderbookEntries(s *tickerdb.TickerSession, c *horizonclient.Client, } dbIOS := orderbookStatsToDBOrderbookStats(iob, mkt.CounterAssetID, mkt.BaseAssetID) - err = s.InsertOrUpdateOrderbookStats(&dbIOS, []string{"base_asset_id", "counter_asset_id"}) + err = s.InsertOrUpdateOrderbookStats(ctx, &dbIOS, []string{"base_asset_id", "counter_asset_id"}) if err != nil { l.Error(errors.Wrap(err, "could not insert reverse orderbook stats into db")) } diff --git a/services/ticker/internal/actions_trade.go b/services/ticker/internal/actions_trade.go index 1e2ab885ad..abfefc3034 100644 --- a/services/ticker/internal/actions_trade.go +++ b/services/ticker/internal/actions_trade.go @@ -29,7 +29,7 @@ func StreamTrades( handler := func(trade hProtocol.Trade) { l.Infof("New trade arrived. ID: %v; Close Time: %v\n", trade.ID, trade.LedgerCloseTime) scraper.NormalizeTradeAssets(&trade) - bID, cID, err := findBaseAndCounter(s, trade) + bID, cID, err := findBaseAndCounter(ctx, s, trade) if err != nil { l.Errorln(err) return @@ -40,14 +40,14 @@ func StreamTrades( return } - err = s.BulkInsertTrades([]tickerdb.Trade{dbTrade}) + err = s.BulkInsertTrades(ctx, []tickerdb.Trade{dbTrade}) if err != nil { l.Errorln("Could not insert trade in database: ", trade.ID) } } // Ensure we start streaming from the last stored trade - lastTrade, err := s.GetLastTrade() + lastTrade, err := s.GetLastTrade(ctx) if err != nil { return err } @@ -59,6 +59,7 @@ func StreamTrades( // BackfillTrades ingest the most recent trades (limited to numDays) directly from Horizon // into the database. func BackfillTrades( + ctx context.Context, s *tickerdb.TickerSession, c *horizonclient.Client, l *hlog.Entry, @@ -80,7 +81,7 @@ func BackfillTrades( for _, trade := range trades { var bID, cID int32 - bID, cID, err = findBaseAndCounter(s, trade) + bID, cID, err = findBaseAndCounter(ctx, s, trade) if err != nil { continue } @@ -95,7 +96,7 @@ func BackfillTrades( } l.Infof("Inserting %d entries in the database.\n", len(dbTrades)) - err = s.BulkInsertTrades(dbTrades) + err = s.BulkInsertTrades(ctx, dbTrades) if err != nil { fmt.Println(err) } @@ -105,8 +106,9 @@ func BackfillTrades( // findBaseAndCounter tries to find the Base and Counter assets IDs in the database, // and returns an error if it doesn't find any. -func findBaseAndCounter(s *tickerdb.TickerSession, trade hProtocol.Trade) (bID int32, cID int32, err error) { +func findBaseAndCounter(ctx context.Context, s *tickerdb.TickerSession, trade hProtocol.Trade) (bID int32, cID int32, err error) { bFound, bID, err := s.GetAssetByCodeAndIssuerAccount( + ctx, trade.BaseAssetCode, trade.BaseAssetIssuer, ) @@ -115,6 +117,7 @@ func findBaseAndCounter(s *tickerdb.TickerSession, trade hProtocol.Trade) (bID i } cFound, cID, err := s.GetAssetByCodeAndIssuerAccount( + ctx, trade.CounterAssetCode, trade.CounterAssetIssuer, ) diff --git a/services/ticker/internal/gql/resolvers_asset.go b/services/ticker/internal/gql/resolvers_asset.go index 3428403747..a385220105 100644 --- a/services/ticker/internal/gql/resolvers_asset.go +++ b/services/ticker/internal/gql/resolvers_asset.go @@ -1,14 +1,15 @@ package gql import ( + "context" "errors" "github.com/stellar/go/services/ticker/internal/tickerdb" ) // Assets resolves the assets() GraphQL query. -func (r *resolver) Assets() (assets []*asset, err error) { - dbAssets, err := r.db.GetAllValidAssets() +func (r *resolver) Assets(ctx context.Context) (assets []*asset, err error) { + dbAssets, err := r.db.GetAllValidAssets(ctx) if err != nil { // obfuscating sql errors to avoid exposing underlying // implementation diff --git a/services/ticker/internal/gql/resolvers_issuer.go b/services/ticker/internal/gql/resolvers_issuer.go index 02f66dc6c2..15bca92e5d 100644 --- a/services/ticker/internal/gql/resolvers_issuer.go +++ b/services/ticker/internal/gql/resolvers_issuer.go @@ -1,14 +1,15 @@ package gql import ( + "context" "errors" "github.com/stellar/go/services/ticker/internal/tickerdb" ) // Issuers resolves the issuers() GraphQL query. -func (r *resolver) Issuers() (issuers []*tickerdb.Issuer, err error) { - dbIssuers, err := r.db.GetAllIssuers() +func (r *resolver) Issuers(ctx context.Context) (issuers []*tickerdb.Issuer, err error) { + dbIssuers, err := r.db.GetAllIssuers(ctx) if err != nil { // obfuscating sql errors to avoid exposing underlying // implementation diff --git a/services/ticker/internal/gql/resolvers_market.go b/services/ticker/internal/gql/resolvers_market.go index 6efcba3822..5712da9df2 100644 --- a/services/ticker/internal/gql/resolvers_market.go +++ b/services/ticker/internal/gql/resolvers_market.go @@ -1,6 +1,7 @@ package gql import ( + "context" "errors" "fmt" "strings" @@ -11,7 +12,7 @@ import ( ) // Markets resolves the markets() GraphQL query. -func (r *resolver) Markets(args struct { +func (r *resolver) Markets(ctx context.Context, args struct { BaseAssetCode *string BaseAssetIssuer *string CounterAssetCode *string @@ -28,7 +29,7 @@ func (r *resolver) Markets(args struct { pairName = fmt.Sprintf("%s:%s / %s:%s", *args.BaseAssetCode, *args.BaseAssetIssuer, *args.CounterAssetCode, *args.CounterAssetIssuer) } - dbMarkets, err := r.db.RetrievePartialMarkets( + dbMarkets, err := r.db.RetrievePartialMarkets(ctx, args.BaseAssetCode, args.BaseAssetIssuer, args.CounterAssetCode, @@ -57,7 +58,7 @@ func (r *resolver) Markets(args struct { } // Ticker resolves the ticker() GraphQL query (TODO) -func (r *resolver) Ticker( +func (r *resolver) Ticker(ctx context.Context, args struct { Code *string PairNames *[]*string @@ -74,7 +75,7 @@ func (r *resolver) Ticker( return } - dbMarkets, err := r.db.RetrievePartialAggMarkets(args.Code, args.PairNames, numHours) + dbMarkets, err := r.db.RetrievePartialAggMarkets(ctx, args.Code, args.PairNames, numHours) if err != nil { // obfuscating sql errors to avoid exposing underlying // implementation diff --git a/services/ticker/internal/tickerdb/helpers.go b/services/ticker/internal/tickerdb/helpers.go index ace6cf1b09..deebdc245a 100644 --- a/services/ticker/internal/tickerdb/helpers.go +++ b/services/ticker/internal/tickerdb/helpers.go @@ -1,6 +1,7 @@ package tickerdb import ( + "context" "errors" "fmt" "reflect" @@ -172,7 +173,7 @@ func orderBaseAndCounter( // performUpsertQuery introspects a dbStruct interface{} and performs an insert query // (if the conflictConstraint isn't broken), otherwise it updates the instance on the // db, preserving the old values for the fields in preserveFields -func (s *TickerSession) performUpsertQuery(dbStruct interface{}, tableName string, conflictConstraint string, preserveFields []string) error { +func (s *TickerSession) performUpsertQuery(ctx context.Context, dbStruct interface{}, tableName string, conflictConstraint string, preserveFields []string) error { dbFields := getDBFieldTags(dbStruct, true) dbFieldsString := strings.Join(dbFields, ", ") dbValues := getDBFieldValues(dbStruct, true) @@ -183,6 +184,6 @@ func (s *TickerSession) performUpsertQuery(dbStruct interface{}, tableName strin qs := fmt.Sprintf("INSERT INTO %s (", tableName) + dbFieldsString + ")" qs += " VALUES (" + generatePlaceholders(dbValues) + ")" qs += " " + createOnConflictFragment(conflictConstraint, toUpdateFields) + ";" - _, err := s.ExecRaw(qs, dbValues...) + _, err := s.ExecRaw(ctx, qs, dbValues...) return err } diff --git a/services/ticker/internal/tickerdb/main.go b/services/ticker/internal/tickerdb/main.go index 2f539a53de..369feec247 100644 --- a/services/ticker/internal/tickerdb/main.go +++ b/services/ticker/internal/tickerdb/main.go @@ -1,7 +1,6 @@ package tickerdb import ( - "context" "time" "github.com/jmoiron/sqlx" @@ -175,7 +174,6 @@ func CreateSession(driverName, dataSourceName string) (session TickerSession, er } session.DB = dbconn - session.Ctx = context.Background() return } diff --git a/services/ticker/internal/tickerdb/queries_asset.go b/services/ticker/internal/tickerdb/queries_asset.go index 5d4e636c32..a55e861ebb 100644 --- a/services/ticker/internal/tickerdb/queries_asset.go +++ b/services/ticker/internal/tickerdb/queries_asset.go @@ -1,14 +1,18 @@ package tickerdb +import ( + "context" +) + // InsertOrUpdateAsset inserts an Asset on the database (if new), // or updates an existing one -func (s *TickerSession) InsertOrUpdateAsset(a *Asset, preserveFields []string) (err error) { - return s.performUpsertQuery(*a, "assets", "assets_code_issuer_account", preserveFields) +func (s *TickerSession) InsertOrUpdateAsset(ctx context.Context, a *Asset, preserveFields []string) (err error) { + return s.performUpsertQuery(ctx, *a, "assets", "assets_code_issuer_account", preserveFields) } // GetAssetByCodeAndIssuerAccount searches for an Asset with the given code // and public key, and returns its ID in case it is found. -func (s *TickerSession) GetAssetByCodeAndIssuerAccount( +func (s *TickerSession) GetAssetByCodeAndIssuerAccount(ctx context.Context, code string, issuerAccount string, ) (found bool, id int32, err error) { @@ -20,7 +24,7 @@ func (s *TickerSession) GetAssetByCodeAndIssuerAccount( "assets.code = ? AND assets.issuer_account = ?", code, issuerAccount, - ).Exec() + ).Exec(ctx) if err != nil { return } @@ -34,20 +38,20 @@ func (s *TickerSession) GetAssetByCodeAndIssuerAccount( // GetAllValidAssets returns a slice with all assets in the database // with is_valid = true -func (s *TickerSession) GetAllValidAssets() (assets []Asset, err error) { +func (s *TickerSession) GetAllValidAssets(ctx context.Context) (assets []Asset, err error) { tbl := s.GetTable("assets") err = tbl.Select( &assets, "assets.is_valid = TRUE", - ).Exec() + ).Exec(ctx) return } // GetAssetsWithNestedIssuer returns a slice with all assets in the database // with is_valid = true, also adding the nested Issuer attribute -func (s *TickerSession) GetAssetsWithNestedIssuer() (assets []Asset, err error) { +func (s *TickerSession) GetAssetsWithNestedIssuer(ctx context.Context) (assets []Asset, err error) { const q = ` SELECT a.code, a.issuer_account, a.type, a.num_accounts, a.auth_required, a.auth_revocable, @@ -62,7 +66,7 @@ func (s *TickerSession) GetAssetsWithNestedIssuer() (assets []Asset, err error) WHERE a.is_valid = TRUE ` - rows, err := s.DB.Query(q) + rows, err := s.DB.QueryContext(ctx, q) if err != nil { return } diff --git a/services/ticker/internal/tickerdb/queries_issuer.go b/services/ticker/internal/tickerdb/queries_issuer.go index 072edb40d8..1b0d0f2d2c 100644 --- a/services/ticker/internal/tickerdb/queries_issuer.go +++ b/services/ticker/internal/tickerdb/queries_issuer.go @@ -1,6 +1,7 @@ package tickerdb import ( + "context" "strings" "github.com/stellar/go/services/ticker/internal/utils" @@ -8,7 +9,7 @@ import ( // InsertOrUpdateIssuer inserts an Issuer on the database (if new), // or updates an existing one -func (s *TickerSession) InsertOrUpdateIssuer(issuer *Issuer, preserveFields []string) (id int32, err error) { +func (s *TickerSession) InsertOrUpdateIssuer(ctx context.Context, issuer *Issuer, preserveFields []string) (id int32, err error) { dbFields := getDBFieldTags(*issuer, true) dbFieldsString := strings.Join(dbFields, ", ") dbValues := getDBFieldValues(*issuer, true) @@ -21,7 +22,7 @@ func (s *TickerSession) InsertOrUpdateIssuer(issuer *Issuer, preserveFields []st qs += " " + createOnConflictFragment("public_key_unique", toUpdateFields) qs += " RETURNING id;" - rows, err := s.QueryRaw(qs, dbValues...) + rows, err := s.QueryRaw(ctx, qs, dbValues...) if err != nil { return } @@ -33,7 +34,7 @@ func (s *TickerSession) InsertOrUpdateIssuer(issuer *Issuer, preserveFields []st } // GetAllIssuers returns a slice with all issuers in the database -func (s *TickerSession) GetAllIssuers() (issuers []Issuer, err error) { - err = s.SelectRaw(&issuers, "SELECT * FROM issuers") +func (s *TickerSession) GetAllIssuers(ctx context.Context) (issuers []Issuer, err error) { + err = s.SelectRaw(ctx, &issuers, "SELECT * FROM issuers") return } diff --git a/services/ticker/internal/tickerdb/queries_market.go b/services/ticker/internal/tickerdb/queries_market.go index 10d7b91142..7765ea59d5 100644 --- a/services/ticker/internal/tickerdb/queries_market.go +++ b/services/ticker/internal/tickerdb/queries_market.go @@ -1,6 +1,7 @@ package tickerdb import ( + "context" "errors" "fmt" "strings" @@ -8,14 +9,14 @@ import ( // RetrieveMarketData retrieves the 24h- and 7d aggregated market data for all // markets that were active during this period. -func (s *TickerSession) RetrieveMarketData() (markets []Market, err error) { - err = s.SelectRaw(&markets, marketQuery) +func (s *TickerSession) RetrieveMarketData(ctx context.Context) (markets []Market, err error) { + err = s.SelectRaw(ctx, &markets, marketQuery) return } // RetrievePartialAggMarkets retrieves the aggregated market data for all // markets (or for a specific one if PairNames != nil) for a given period. -func (s *TickerSession) RetrievePartialAggMarkets( +func (s *TickerSession) RetrievePartialAggMarkets(ctx context.Context, code *string, pairNames *[]*string, numHoursAgo int, @@ -56,7 +57,7 @@ func (s *TickerSession) RetrievePartialAggMarkets( argsInterface[i] = v } - err = s.SelectRaw(&partialMkts, q, argsInterface...) + err = s.SelectRaw(ctx, &partialMkts, q, argsInterface...) return } @@ -97,7 +98,7 @@ func (s *TickerSession) constructPartialAggMarketsWhere( // RetrievePartialMarkets retrieves data in the PartialMarket format from the database. // It optionally filters the data according to the provided base and counter asset params // provided, as well as the numHoursAgo time offset. -func (s *TickerSession) RetrievePartialMarkets( +func (s *TickerSession) RetrievePartialMarkets(ctx context.Context, baseAssetCode *string, baseAssetIssuer *string, counterAssetCode *string, @@ -133,13 +134,13 @@ func (s *TickerSession) RetrievePartialMarkets( for i, v := range args { argsInterface[i] = v } - err = s.SelectRaw(&partialMkts, q, argsInterface...) + err = s.SelectRaw(ctx, &partialMkts, q, argsInterface...) return } // Retrieve7DRelevantMarkets retrieves the base and counter asset data of the markets // that were relevant in the last 7-day period. -func (s *TickerSession) Retrieve7DRelevantMarkets() (partialMkts []PartialMarket, err error) { +func (s *TickerSession) Retrieve7DRelevantMarkets(ctx context.Context) (partialMkts []PartialMarket, err error) { q := ` SELECT ba.id as base_asset_id, ba.type AS base_asset_type, ba.code AS base_asset_code, ba.issuer_account AS base_asset_issuer, @@ -150,7 +151,7 @@ func (s *TickerSession) Retrieve7DRelevantMarkets() (partialMkts []PartialMarket WHERE ba.is_valid = TRUE AND ca.is_valid = TRUE AND t.ledger_close_time > now() - interval '7 days' GROUP BY ba.id, ba.type, ba.code, ba.issuer_account, ca.id, ca.type, ca.code, ca.issuer_account ` - err = s.SelectRaw(&partialMkts, q) + err = s.SelectRaw(ctx, &partialMkts, q) return } diff --git a/services/ticker/internal/tickerdb/queries_orderbook.go b/services/ticker/internal/tickerdb/queries_orderbook.go index e31dfee1c9..9b8bc5c855 100644 --- a/services/ticker/internal/tickerdb/queries_orderbook.go +++ b/services/ticker/internal/tickerdb/queries_orderbook.go @@ -1,7 +1,11 @@ package tickerdb +import ( + "context" +) + // InsertOrUpdateOrderbookStats inserts an OrdebookStats entry on the database (if new), // or updates an existing one -func (s *TickerSession) InsertOrUpdateOrderbookStats(o *OrderbookStats, preserveFields []string) (err error) { - return s.performUpsertQuery(*o, "orderbook_stats", "orderbook_stats_base_counter_asset_key", preserveFields) +func (s *TickerSession) InsertOrUpdateOrderbookStats(ctx context.Context, o *OrderbookStats, preserveFields []string) (err error) { + return s.performUpsertQuery(ctx, *o, "orderbook_stats", "orderbook_stats_base_counter_asset_key", preserveFields) } diff --git a/services/ticker/internal/tickerdb/queries_trade.go b/services/ticker/internal/tickerdb/queries_trade.go index d3cb5e2be8..8a5cc5db70 100644 --- a/services/ticker/internal/tickerdb/queries_trade.go +++ b/services/ticker/internal/tickerdb/queries_trade.go @@ -1,6 +1,7 @@ package tickerdb import ( + "context" "math" "strings" "time" @@ -9,14 +10,14 @@ import ( // BulkInsertTrades inserts a slice of trades in the database. Trades // that are already in the database (i.e. horizon_id already exists) // are ignored. -func (s *TickerSession) BulkInsertTrades(trades []Trade) (err error) { +func (s *TickerSession) BulkInsertTrades(ctx context.Context, trades []Trade) (err error) { if len(trades) <= 50 { - return performInsertTrades(s, trades) + return performInsertTrades(ctx, s, trades) } chunks := chunkifyDBTrades(trades, 50) for _, chunk := range chunks { - err = performInsertTrades(s, chunk) + err = performInsertTrades(ctx, s, chunk) if err != nil { return } @@ -26,14 +27,14 @@ func (s *TickerSession) BulkInsertTrades(trades []Trade) (err error) { } // GetLastTrade returns the newest Trade object in the database. -func (s *TickerSession) GetLastTrade() (trade Trade, err error) { - err = s.GetRaw(&trade, "SELECT * FROM trades ORDER BY ledger_close_time DESC LIMIT 1") +func (s *TickerSession) GetLastTrade(ctx context.Context) (trade Trade, err error) { + err = s.GetRaw(ctx, &trade, "SELECT * FROM trades ORDER BY ledger_close_time DESC LIMIT 1") return } // DeleteOldTrades deletes trades in the database older than minDate. -func (s *TickerSession) DeleteOldTrades(minDate time.Time) error { - _, err := s.ExecRaw("DELETE FROM trades WHERE ledger_close_time < ?", minDate) +func (s *TickerSession) DeleteOldTrades(ctx context.Context, minDate time.Time) error { + _, err := s.ExecRaw(ctx, "DELETE FROM trades WHERE ledger_close_time < ?", minDate) return err } @@ -61,7 +62,7 @@ func chunkifyDBTrades(sl []Trade, chunkSize int) [][]Trade { return chunkedSlice } -func performInsertTrades(s *TickerSession, trades []Trade) (err error) { +func performInsertTrades(ctx context.Context, s *TickerSession, trades []Trade) (err error) { var t Trade var placeholders string var dbValues []interface{} @@ -83,6 +84,6 @@ func performInsertTrades(s *TickerSession, trades []Trade) (err error) { qs += " VALUES " + placeholders qs += " ON CONFLICT ON CONSTRAINT trades_horizon_id_key DO NOTHING;" - _, err = s.ExecRaw(qs, dbValues...) + _, err = s.ExecRaw(ctx, qs, dbValues...) return } diff --git a/services/ticker/internal/tickerdb/tickerdb_test/queries_asset_test.go b/services/ticker/internal/tickerdb/tickerdb_test/queries_asset_test.go index 7888890a8b..323e9b1e59 100644 --- a/services/ticker/internal/tickerdb/tickerdb_test/queries_asset_test.go +++ b/services/ticker/internal/tickerdb/tickerdb_test/queries_asset_test.go @@ -19,8 +19,8 @@ func TestInsertOrUpdateAsset(t *testing.T) { var session tickerdb.TickerSession session.DB = db.Open() - session.Ctx = context.Background() defer session.DB.Close() + ctx := context.Background() // Run migrations to make sure the tests are run // on the most updated schema version @@ -41,10 +41,10 @@ func TestInsertOrUpdateAsset(t *testing.T) { Name: name, } tbl := session.GetTable("issuers") - _, err = tbl.Insert(issuer).IgnoreCols("id").Exec() + _, err = tbl.Insert(issuer).IgnoreCols("id").Exec(ctx) require.NoError(t, err) var dbIssuer tickerdb.Issuer - err = session.GetRaw(&dbIssuer, ` + err = session.GetRaw(ctx, &dbIssuer, ` SELECT * FROM issuers ORDER BY id DESC @@ -62,11 +62,11 @@ func TestInsertOrUpdateAsset(t *testing.T) { LastValid: firstTime, LastChecked: firstTime, } - err = session.InsertOrUpdateAsset(&a, []string{"code", "issuer_account", "issuer_id"}) + err = session.InsertOrUpdateAsset(ctx, &a, []string{"code", "issuer_account", "issuer_id"}) require.NoError(t, err) var dbAsset1 tickerdb.Asset - err = session.GetRaw(&dbAsset1, ` + err = session.GetRaw(ctx, &dbAsset1, ` SELECT * FROM assets ORDER BY id DESC @@ -93,11 +93,11 @@ func TestInsertOrUpdateAsset(t *testing.T) { t.Log("secondTime:", secondTime) a.LastValid = secondTime a.LastChecked = secondTime - err = session.InsertOrUpdateAsset(&a, []string{"code", "issuer_account", "issuer_id"}) + err = session.InsertOrUpdateAsset(ctx, &a, []string{"code", "issuer_account", "issuer_id"}) require.NoError(t, err) var dbAsset2 tickerdb.Asset - err = session.GetRaw(&dbAsset2, ` + err = session.GetRaw(ctx, &dbAsset2, ` SELECT * FROM assets ORDER BY id DESC @@ -128,10 +128,10 @@ func TestInsertOrUpdateAsset(t *testing.T) { t.Log("thirdTime:", thirdTime) a.LastValid = thirdTime a.LastChecked = thirdTime - err = session.InsertOrUpdateAsset(&a, []string{"code", "issuer_id", "last_valid", "last_checked", "issuer_account"}) + err = session.InsertOrUpdateAsset(ctx, &a, []string{"code", "issuer_id", "last_valid", "last_checked", "issuer_account"}) require.NoError(t, err) var dbAsset3 tickerdb.Asset - err = session.GetRaw(&dbAsset3, ` + err = session.GetRaw(ctx, &dbAsset3, ` SELECT * FROM assets ORDER BY id DESC @@ -163,8 +163,8 @@ func TestGetAssetByCodeAndIssuerAccount(t *testing.T) { var session tickerdb.TickerSession session.DB = db.Open() - session.Ctx = context.Background() defer session.DB.Close() + ctx := context.Background() // Run migrations to make sure the tests are run // on the most updated schema version @@ -185,10 +185,10 @@ func TestGetAssetByCodeAndIssuerAccount(t *testing.T) { Name: name, } tbl := session.GetTable("issuers") - _, err = tbl.Insert(issuer).IgnoreCols("id").Exec() + _, err = tbl.Insert(issuer).IgnoreCols("id").Exec(ctx) require.NoError(t, err) var dbIssuer tickerdb.Issuer - err = session.GetRaw(&dbIssuer, ` + err = session.GetRaw(ctx, &dbIssuer, ` SELECT * FROM issuers ORDER BY id DESC @@ -205,11 +205,11 @@ func TestGetAssetByCodeAndIssuerAccount(t *testing.T) { LastValid: firstTime, LastChecked: firstTime, } - err = session.InsertOrUpdateAsset(&a, []string{"code", "issuer_account", "issuer_id"}) + err = session.InsertOrUpdateAsset(ctx, &a, []string{"code", "issuer_account", "issuer_id"}) require.NoError(t, err) var dbAsset tickerdb.Asset - err = session.GetRaw(&dbAsset, ` + err = session.GetRaw(ctx, &dbAsset, ` SELECT * FROM assets ORDER BY id DESC @@ -218,13 +218,13 @@ func TestGetAssetByCodeAndIssuerAccount(t *testing.T) { require.NoError(t, err) // Searching for an asset that exists: - found, id, err := session.GetAssetByCodeAndIssuerAccount(code, issuerAccount) + found, id, err := session.GetAssetByCodeAndIssuerAccount(ctx, code, issuerAccount) require.NoError(t, err) assert.Equal(t, dbAsset.ID, id) assert.True(t, found) // Now searching for an asset that does not exist: - found, _, err = session.GetAssetByCodeAndIssuerAccount( + found, _, err = session.GetAssetByCodeAndIssuerAccount(ctx, "NONEXISTENT CODE", issuerAccount, ) diff --git a/services/ticker/internal/tickerdb/tickerdb_test/queries_issuer_test.go b/services/ticker/internal/tickerdb/tickerdb_test/queries_issuer_test.go index 7c6a939ef4..66f88fbd35 100644 --- a/services/ticker/internal/tickerdb/tickerdb_test/queries_issuer_test.go +++ b/services/ticker/internal/tickerdb/tickerdb_test/queries_issuer_test.go @@ -18,8 +18,8 @@ func TestInsertOrUpdateIssuer(t *testing.T) { var session tickerdb.TickerSession session.DB = db.Open() - session.Ctx = context.Background() defer session.DB.Close() + ctx := context.Background() // Run migrations to make sure the tests are run // on the most updated schema version @@ -37,11 +37,11 @@ func TestInsertOrUpdateIssuer(t *testing.T) { PublicKey: publicKey, Name: name, } - id, err := session.InsertOrUpdateIssuer(&issuer, []string{"public_key"}) + id, err := session.InsertOrUpdateIssuer(ctx, &issuer, []string{"public_key"}) require.NoError(t, err) var dbIssuer tickerdb.Issuer - err = session.GetRaw(&dbIssuer, ` + err = session.GetRaw(ctx, &dbIssuer, ` SELECT * FROM issuers ORDER BY id DESC @@ -57,11 +57,11 @@ func TestInsertOrUpdateIssuer(t *testing.T) { PublicKey: "ANOTHERKEY", Name: "Hello from the other side", } - id2, err := session.InsertOrUpdateIssuer(&issuer2, []string{"public_key"}) + id2, err := session.InsertOrUpdateIssuer(ctx, &issuer2, []string{"public_key"}) require.NoError(t, err) var dbIssuer2 tickerdb.Issuer - err = session.GetRaw(&dbIssuer2, ` + err = session.GetRaw(ctx, &dbIssuer2, ` SELECT * FROM issuers ORDER BY id DESC @@ -79,11 +79,11 @@ func TestInsertOrUpdateIssuer(t *testing.T) { PublicKey: publicKey, Name: name3, } - id, err = session.InsertOrUpdateIssuer(&issuer3, []string{"public_key"}) + id, err = session.InsertOrUpdateIssuer(ctx, &issuer3, []string{"public_key"}) require.NoError(t, err) var dbIssuer3 tickerdb.Issuer - err = session.GetRaw( + err = session.GetRaw(ctx, &dbIssuer3, "SELECT * FROM issuers WHERE id=?", id, diff --git a/services/ticker/internal/tickerdb/tickerdb_test/queries_market_test.go b/services/ticker/internal/tickerdb/tickerdb_test/queries_market_test.go index 7932ff08e3..599580f8aa 100644 --- a/services/ticker/internal/tickerdb/tickerdb_test/queries_market_test.go +++ b/services/ticker/internal/tickerdb/tickerdb_test/queries_market_test.go @@ -21,8 +21,8 @@ func TestRetrieveMarketData(t *testing.T) { var session tickerdb.TickerSession session.DB = db.Open() - session.Ctx = context.Background() defer session.DB.Close() + ctx := context.Background() // Run migrations to make sure the tests are run // on the most updated schema version @@ -37,10 +37,10 @@ func TestRetrieveMarketData(t *testing.T) { _, err = tbl.Insert(tickerdb.Issuer{ PublicKey: "GCF3TQXKZJNFJK7HCMNE2O2CUNKCJH2Y2ROISTBPLC7C5EIA5NNG2XZB", Name: "FOO BAR", - }).IgnoreCols("id").Exec() + }).IgnoreCols("id").Exec(ctx) require.NoError(t, err) var issuer tickerdb.Issuer - err = session.GetRaw(&issuer, ` + err = session.GetRaw(ctx, &issuer, ` SELECT * FROM issuers ORDER BY id DESC @@ -49,14 +49,14 @@ func TestRetrieveMarketData(t *testing.T) { require.NoError(t, err) // Adding a seed asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "XLM", IssuerID: issuer.ID, IsValid: true, }, []string{"code", "issuer_id"}) require.NoError(t, err) var xlmAsset tickerdb.Asset - err = session.GetRaw(&xlmAsset, ` + err = session.GetRaw(ctx, &xlmAsset, ` SELECT * FROM assets ORDER BY id DESC @@ -65,14 +65,14 @@ func TestRetrieveMarketData(t *testing.T) { require.NoError(t, err) // Adding another asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "BTC", IssuerID: issuer.ID, IsValid: true, }, []string{"code", "issuer_id"}) require.NoError(t, err) var btcAsset tickerdb.Asset - err = session.GetRaw(&btcAsset, ` + err = session.GetRaw(ctx, &btcAsset, ` SELECT * FROM assets ORDER BY id DESC @@ -81,14 +81,14 @@ func TestRetrieveMarketData(t *testing.T) { require.NoError(t, err) // Adding a third asset: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "ETH", IssuerID: issuer.ID, IsValid: true, }, []string{"code", "issuer_id"}) require.NoError(t, err) var ethAsset tickerdb.Asset - err = session.GetRaw(ðAsset, ` + err = session.GetRaw(ctx, ðAsset, ` SELECT * FROM assets ORDER BY id DESC @@ -155,7 +155,7 @@ func TestRetrieveMarketData(t *testing.T) { LedgerCloseTime: oneMonthAgo, }, } - err = session.BulkInsertTrades(trades) + err = session.BulkInsertTrades(ctx, trades) require.NoError(t, err) // Adding some orderbook stats: @@ -173,14 +173,14 @@ func TestRetrieveMarketData(t *testing.T) { SpreadMidPoint: 0.35, UpdatedAt: obTime, } - err = session.InsertOrUpdateOrderbookStats( + err = session.InsertOrUpdateOrderbookStats(ctx, &orderbookStats, []string{"base_asset_id", "counter_asset_id"}, ) require.NoError(t, err) var obBTCETH1 tickerdb.OrderbookStats - err = session.GetRaw(&obBTCETH1, ` + err = session.GetRaw(ctx, &obBTCETH1, ` SELECT * FROM orderbook_stats ORDER BY id DESC @@ -201,14 +201,14 @@ func TestRetrieveMarketData(t *testing.T) { SpreadMidPoint: 0.36, UpdatedAt: obTime, } - err = session.InsertOrUpdateOrderbookStats( + err = session.InsertOrUpdateOrderbookStats(ctx, &orderbookStats, []string{"base_asset_id", "counter_asset_id"}, ) require.NoError(t, err) var obBTCETH2 tickerdb.OrderbookStats - err = session.GetRaw(&obBTCETH2, ` + err = session.GetRaw(ctx, &obBTCETH2, ` SELECT * FROM orderbook_stats ORDER BY id DESC @@ -217,7 +217,7 @@ func TestRetrieveMarketData(t *testing.T) { require.NoError(t, err) assert.NotEqual(t, obBTCETH1.ID, obBTCETH2.ID) - markets, err := session.RetrieveMarketData() + markets, err := session.RetrieveMarketData(ctx) require.NoError(t, err) assert.Equal(t, 2, len(markets)) @@ -307,6 +307,7 @@ func TestRetrieveMarketData(t *testing.T) { func TestRetrievePartialMarkets(t *testing.T) { session := tickerdbtest.SetupTickerTestSession(t, "../migrations") defer session.DB.Close() + ctx := context.Background() issuer1PK := "GCF3TQXKZJNFJK7HCMNE2O2CUNKCJH2Y2ROISTBPLC7C5EIA5NNG2XZB" issuer2PK := "ABF3TQXKZJNFJK7HCMNE2O2CUNKCJH2Y2ROISTBPLC7C5EIA5NNG2XZB" @@ -314,7 +315,7 @@ func TestRetrievePartialMarkets(t *testing.T) { tenMinutesAgo := now.Add(-10 * time.Minute) oneHourAgo := now.Add(-1 * time.Hour) - partialMkts, err := session.RetrievePartialMarkets( + partialMkts, err := session.RetrievePartialMarkets(ctx, nil, nil, nil, nil, 12, ) require.NoError(t, err) @@ -385,7 +386,7 @@ func TestRetrievePartialMarkets(t *testing.T) { assert.Equal(t, 0.70, btceth2Mkt.LowestAskReverse) // Now let's use the same data, but aggregating by asset pair - partialAggMkts, err := session.RetrievePartialAggMarkets(nil, nil, 12) + partialAggMkts, err := session.RetrievePartialAggMarkets(ctx, nil, nil, 12) require.NoError(t, err) assert.Equal(t, 2, len(partialAggMkts)) @@ -411,7 +412,7 @@ func TestRetrievePartialMarkets(t *testing.T) { // Validate the pair name parsing: pairNames := []*string{&btcEthStr} - partialAggMkts, err = session.RetrievePartialAggMarkets(nil, &pairNames, 12) + partialAggMkts, err = session.RetrievePartialAggMarkets(ctx, nil, &pairNames, 12) require.NoError(t, err) assert.Equal(t, 1, len(partialAggMkts)) assert.Equal(t, int32(3), partialAggMkts[0].TradeCount) @@ -433,7 +434,7 @@ func TestRetrievePartialMarkets(t *testing.T) { // Validate that both markets are parsed. btcXlmStr := "BTC_XLM" pairNames = []*string{&btcEthStr, &btcXlmStr} - partialAggMkts, err = session.RetrievePartialAggMarkets(nil, &pairNames, 12) + partialAggMkts, err = session.RetrievePartialAggMarkets(ctx, nil, &pairNames, 12) require.NoError(t, err) assert.Equal(t, 2, len(partialAggMkts)) assert.Equal(t, int32(3), partialAggMkts[0].TradeCount) @@ -441,12 +442,12 @@ func TestRetrievePartialMarkets(t *testing.T) { // Validate that passing a code works. btcStr := "BTC" - partialAggMkts, err = session.RetrievePartialAggMarkets(&btcStr, nil, 12) + partialAggMkts, err = session.RetrievePartialAggMarkets(ctx, &btcStr, nil, 12) require.NoError(t, err) assert.Equal(t, 2, len(partialAggMkts)) // Make sure there's an error with a non-nil code and non-nil pair names. - partialAggMkts, err = session.RetrievePartialAggMarkets(&btcStr, &pairNames, 12) + partialAggMkts, err = session.RetrievePartialAggMarkets(ctx, &btcStr, &pairNames, 12) require.Error(t, err) } @@ -456,8 +457,8 @@ func Test24hStatsFallback(t *testing.T) { var session tickerdb.TickerSession session.DB = db.Open() - session.Ctx = context.Background() defer session.DB.Close() + ctx := context.Background() // Run migrations to make sure the tests are run // on the most updated schema version @@ -472,10 +473,10 @@ func Test24hStatsFallback(t *testing.T) { _, err = tbl.Insert(tickerdb.Issuer{ PublicKey: "GCF3TQXKZJNFJK7HCMNE2O2CUNKCJH2Y2ROISTBPLC7C5EIA5NNG2XZB", Name: "FOO BAR", - }).IgnoreCols("id").Exec() + }).IgnoreCols("id").Exec(ctx) require.NoError(t, err) var issuer tickerdb.Issuer - err = session.GetRaw(&issuer, ` + err = session.GetRaw(ctx, &issuer, ` SELECT * FROM issuers ORDER BY id DESC @@ -484,14 +485,14 @@ func Test24hStatsFallback(t *testing.T) { require.NoError(t, err) // Adding a seed asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "XLM", IssuerID: issuer.ID, IsValid: true, }, []string{"code", "issuer_id"}) require.NoError(t, err) var xlmAsset tickerdb.Asset - err = session.GetRaw(&xlmAsset, ` + err = session.GetRaw(ctx, &xlmAsset, ` SELECT * FROM assets ORDER BY id DESC @@ -500,14 +501,14 @@ func Test24hStatsFallback(t *testing.T) { require.NoError(t, err) // Adding another asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "BTC", IssuerID: issuer.ID, IsValid: true, }, []string{"code", "issuer_id"}) require.NoError(t, err) var btcAsset tickerdb.Asset - err = session.GetRaw(&btcAsset, ` + err = session.GetRaw(ctx, &btcAsset, ` SELECT * FROM assets ORDER BY id DESC @@ -541,10 +542,10 @@ func Test24hStatsFallback(t *testing.T) { LedgerCloseTime: threeDaysAgo, }, } - err = session.BulkInsertTrades(trades) + err = session.BulkInsertTrades(ctx, trades) require.NoError(t, err) - markets, err := session.RetrieveMarketData() + markets, err := session.RetrieveMarketData(ctx) require.NoError(t, err) assert.Equal(t, 1, len(markets)) mkt := markets[0] @@ -562,8 +563,8 @@ func TestPreferAnchorAssetCode(t *testing.T) { var session tickerdb.TickerSession session.DB = db.Open() - session.Ctx = context.Background() defer session.DB.Close() + ctx := context.Background() // Run migrations to make sure the tests are run // on the most updated schema version @@ -578,10 +579,10 @@ func TestPreferAnchorAssetCode(t *testing.T) { _, err = tbl.Insert(tickerdb.Issuer{ PublicKey: "GCF3TQXKZJNFJK7HCMNE2O2CUNKCJH2Y2ROISTBPLC7C5EIA5NNG2XZB", Name: "FOO BAR", - }).IgnoreCols("id").Exec() + }).IgnoreCols("id").Exec(ctx) require.NoError(t, err) var issuer tickerdb.Issuer - err = session.GetRaw(&issuer, ` + err = session.GetRaw(ctx, &issuer, ` SELECT * FROM issuers ORDER BY id DESC @@ -590,14 +591,14 @@ func TestPreferAnchorAssetCode(t *testing.T) { require.NoError(t, err) // Adding a seed asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "XLM", IssuerID: issuer.ID, IsValid: true, }, []string{"code", "issuer_id"}) require.NoError(t, err) var xlmAsset tickerdb.Asset - err = session.GetRaw(&xlmAsset, ` + err = session.GetRaw(ctx, &xlmAsset, ` SELECT * FROM assets ORDER BY id DESC @@ -606,7 +607,7 @@ func TestPreferAnchorAssetCode(t *testing.T) { require.NoError(t, err) // Adding another asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "EURT", IssuerID: issuer.ID, IsValid: true, @@ -614,7 +615,7 @@ func TestPreferAnchorAssetCode(t *testing.T) { }, []string{"code", "issuer_id"}) require.NoError(t, err) var btcAsset tickerdb.Asset - err = session.GetRaw(&btcAsset, ` + err = session.GetRaw(ctx, &btcAsset, ` SELECT * FROM assets ORDER BY id DESC @@ -648,17 +649,17 @@ func TestPreferAnchorAssetCode(t *testing.T) { LedgerCloseTime: threeDaysAgo, }, } - err = session.BulkInsertTrades(trades) + err = session.BulkInsertTrades(ctx, trades) require.NoError(t, err) - markets, err := session.RetrieveMarketData() + markets, err := session.RetrieveMarketData(ctx) require.NoError(t, err) require.Equal(t, 1, len(markets)) for _, mkt := range markets { require.Equal(t, "XLM_EUR", mkt.TradePair) } - partialAggMkts, err := session.RetrievePartialAggMarkets(nil, nil, 168) + partialAggMkts, err := session.RetrievePartialAggMarkets(ctx, nil, nil, 168) require.NoError(t, err) assert.Equal(t, 1, len(partialAggMkts)) for _, aggMkt := range partialAggMkts { diff --git a/services/ticker/internal/tickerdb/tickerdb_test/queries_orderbook_test.go b/services/ticker/internal/tickerdb/tickerdb_test/queries_orderbook_test.go index aeb1a4fcfa..c3cc9a8884 100644 --- a/services/ticker/internal/tickerdb/tickerdb_test/queries_orderbook_test.go +++ b/services/ticker/internal/tickerdb/tickerdb_test/queries_orderbook_test.go @@ -18,8 +18,8 @@ func TestInsertOrUpdateOrderbokStats(t *testing.T) { var session tickerdb.TickerSession session.DB = db.Open() - session.Ctx = context.Background() defer session.DB.Close() + ctx := context.Background() // Run migrations to make sure the tests are run // on the most updated schema version @@ -40,10 +40,10 @@ func TestInsertOrUpdateOrderbokStats(t *testing.T) { Name: name, } tbl := session.GetTable("issuers") - _, err = tbl.Insert(issuer).IgnoreCols("id").Exec() + _, err = tbl.Insert(issuer).IgnoreCols("id").Exec(ctx) require.NoError(t, err) var dbIssuer tickerdb.Issuer - err = session.GetRaw(&dbIssuer, ` + err = session.GetRaw(ctx, &dbIssuer, ` SELECT * FROM issuers ORDER BY id DESC @@ -60,11 +60,11 @@ func TestInsertOrUpdateOrderbokStats(t *testing.T) { LastValid: firstTime, LastChecked: firstTime, } - err = session.InsertOrUpdateAsset(&a, []string{"code", "issuer_account", "issuer_id"}) + err = session.InsertOrUpdateAsset(ctx, &a, []string{"code", "issuer_account", "issuer_id"}) require.NoError(t, err) var dbAsset1 tickerdb.Asset - err = session.GetRaw(&dbAsset1, ` + err = session.GetRaw(ctx, &dbAsset1, ` SELECT * FROM assets ORDER BY id DESC @@ -82,11 +82,11 @@ func TestInsertOrUpdateOrderbokStats(t *testing.T) { secondTime := time.Now() a.LastValid = secondTime a.LastChecked = secondTime - err = session.InsertOrUpdateAsset(&a, []string{"code", "issuer_account", "issuer_id"}) + err = session.InsertOrUpdateAsset(ctx, &a, []string{"code", "issuer_account", "issuer_id"}) require.NoError(t, err) var dbAsset2 tickerdb.Asset - err = session.GetRaw(&dbAsset2, ` + err = session.GetRaw(ctx, &dbAsset2, ` SELECT * FROM assets ORDER BY id DESC @@ -109,14 +109,14 @@ func TestInsertOrUpdateOrderbokStats(t *testing.T) { SpreadMidPoint: 0.35, UpdatedAt: obTime, } - err = session.InsertOrUpdateOrderbookStats( + err = session.InsertOrUpdateOrderbookStats(ctx, &orderbookStats, []string{"base_asset_id", "counter_asset_id"}, ) require.NoError(t, err) var dbOS tickerdb.OrderbookStats - err = session.GetRaw(&dbOS, ` + err = session.GetRaw(ctx, &dbOS, ` SELECT * FROM orderbook_stats ORDER BY id DESC @@ -151,14 +151,14 @@ func TestInsertOrUpdateOrderbokStats(t *testing.T) { SpreadMidPoint: 0.7, UpdatedAt: obTime2, } - err = session.InsertOrUpdateOrderbookStats( + err = session.InsertOrUpdateOrderbookStats(ctx, &orderbookStats2, []string{"base_asset_id", "counter_asset_id", "lowest_ask"}, ) require.NoError(t, err) var dbOS2 tickerdb.OrderbookStats - err = session.GetRaw(&dbOS2, ` + err = session.GetRaw(ctx, &dbOS2, ` SELECT * FROM orderbook_stats ORDER BY id DESC diff --git a/services/ticker/internal/tickerdb/tickerdb_test/queries_trade_test.go b/services/ticker/internal/tickerdb/tickerdb_test/queries_trade_test.go index dffd03364d..9e404252a7 100644 --- a/services/ticker/internal/tickerdb/tickerdb_test/queries_trade_test.go +++ b/services/ticker/internal/tickerdb/tickerdb_test/queries_trade_test.go @@ -20,8 +20,8 @@ func TestBulkInsertTrades(t *testing.T) { var session tickerdb.TickerSession session.DB = db.Open() - session.Ctx = context.Background() defer session.DB.Close() + ctx := context.Background() // Run migrations to make sure the tests are run // on the most updated schema version @@ -36,10 +36,10 @@ func TestBulkInsertTrades(t *testing.T) { _, err = tbl.Insert(tickerdb.Issuer{ PublicKey: "GCF3TQXKZJNFJK7HCMNE2O2CUNKCJH2Y2ROISTBPLC7C5EIA5NNG2XZB", Name: "FOO BAR", - }).IgnoreCols("id").Exec() + }).IgnoreCols("id").Exec(ctx) require.NoError(t, err) var issuer tickerdb.Issuer - err = session.GetRaw(&issuer, ` + err = session.GetRaw(ctx, &issuer, ` SELECT * FROM issuers ORDER BY id DESC @@ -48,13 +48,13 @@ func TestBulkInsertTrades(t *testing.T) { require.NoError(t, err) // Adding a seed asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "XLM", IssuerID: issuer.ID, }, []string{"code", "issuer_id"}) require.NoError(t, err) var asset1 tickerdb.Asset - err = session.GetRaw(&asset1, ` + err = session.GetRaw(ctx, &asset1, ` SELECT * FROM assets ORDER BY id DESC @@ -63,13 +63,13 @@ func TestBulkInsertTrades(t *testing.T) { require.NoError(t, err) // Adding another asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "BTC", IssuerID: issuer.ID, }, []string{"code", "issuer_id"}) require.NoError(t, err) var asset2 tickerdb.Asset - err = session.GetRaw(&asset2, ` + err = session.GetRaw(ctx, &asset2, ` SELECT * FROM assets ORDER BY id DESC @@ -95,11 +95,11 @@ func TestBulkInsertTrades(t *testing.T) { LedgerCloseTime: time.Now(), }, } - err = session.BulkInsertTrades(trades) + err = session.BulkInsertTrades(ctx, trades) require.NoError(t, err) // Ensure only two were created: - rows, err := session.QueryRaw("SELECT * FROM trades") + rows, err := session.QueryRaw(ctx, "SELECT * FROM trades") require.NoError(t, err) rowsCount := 0 for rows.Next() { @@ -108,10 +108,10 @@ func TestBulkInsertTrades(t *testing.T) { assert.Equal(t, 2, rowsCount) // Re-insert the same trades and check if count remains = 2: - err = session.BulkInsertTrades(trades) + err = session.BulkInsertTrades(ctx, trades) require.NoError(t, err) - rows, err = session.QueryRaw("SELECT * FROM trades") + rows, err = session.QueryRaw(ctx, "SELECT * FROM trades") require.NoError(t, err) rowsCount2 := 0 for rows.Next() { @@ -126,8 +126,8 @@ func TestGetLastTrade(t *testing.T) { var session tickerdb.TickerSession session.DB = db.Open() - session.Ctx = context.Background() defer session.DB.Close() + ctx := context.Background() // Run migrations to make sure the tests are run // on the most updated schema version @@ -138,7 +138,7 @@ func TestGetLastTrade(t *testing.T) { require.NoError(t, err) // Sanity Check (there are no trades in the database) - _, err = session.GetLastTrade() + _, err = session.GetLastTrade(ctx) require.Error(t, err) // Adding a seed issuer to be used later: @@ -146,10 +146,10 @@ func TestGetLastTrade(t *testing.T) { _, err = tbl.Insert(tickerdb.Issuer{ PublicKey: "GCF3TQXKZJNFJK7HCMNE2O2CUNKCJH2Y2ROISTBPLC7C5EIA5NNG2XZB", Name: "FOO BAR", - }).IgnoreCols("id").Exec() + }).IgnoreCols("id").Exec(ctx) require.NoError(t, err) var issuer tickerdb.Issuer - err = session.GetRaw(&issuer, ` + err = session.GetRaw(ctx, &issuer, ` SELECT * FROM issuers ORDER BY id DESC @@ -158,13 +158,13 @@ func TestGetLastTrade(t *testing.T) { require.NoError(t, err) // Adding a seed asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "XLM", IssuerID: issuer.ID, }, []string{"code", "issuer_id"}) require.NoError(t, err) var asset1 tickerdb.Asset - err = session.GetRaw(&asset1, ` + err = session.GetRaw(ctx, &asset1, ` SELECT * FROM assets ORDER BY id DESC @@ -173,13 +173,13 @@ func TestGetLastTrade(t *testing.T) { require.NoError(t, err) // Adding another asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "BTC", IssuerID: issuer.ID, }, []string{"code", "issuer_id"}) require.NoError(t, err) var asset2 tickerdb.Asset - err = session.GetRaw(&asset2, ` + err = session.GetRaw(ctx, &asset2, ` SELECT * FROM assets ORDER BY id DESC @@ -216,10 +216,10 @@ func TestGetLastTrade(t *testing.T) { } // Re-insert the same trades and check if count remains = 2: - err = session.BulkInsertTrades(trades) + err = session.BulkInsertTrades(ctx, trades) require.NoError(t, err) - lastTrade, err := session.GetLastTrade() + lastTrade, err := session.GetLastTrade(ctx) require.NoError(t, err) assert.WithinDuration(t, now.Local(), lastTrade.LedgerCloseTime.Local(), 10*time.Millisecond) } @@ -230,8 +230,8 @@ func TestDeleteOldTrades(t *testing.T) { var session tickerdb.TickerSession session.DB = db.Open() - session.Ctx = context.Background() defer session.DB.Close() + ctx := context.Background() // Run migrations to make sure the tests are run // on the most updated schema version @@ -246,10 +246,10 @@ func TestDeleteOldTrades(t *testing.T) { _, err = tbl.Insert(tickerdb.Issuer{ PublicKey: "GCF3TQXKZJNFJK7HCMNE2O2CUNKCJH2Y2ROISTBPLC7C5EIA5NNG2XZB", Name: "FOO BAR", - }).IgnoreCols("id").Exec() + }).IgnoreCols("id").Exec(ctx) require.NoError(t, err) var issuer tickerdb.Issuer - err = session.GetRaw(&issuer, ` + err = session.GetRaw(ctx, &issuer, ` SELECT * FROM issuers ORDER BY id DESC @@ -258,13 +258,13 @@ func TestDeleteOldTrades(t *testing.T) { require.NoError(t, err) // Adding a seed asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "XLM", IssuerID: issuer.ID, }, []string{"code", "issuer_id"}) require.NoError(t, err) var asset1 tickerdb.Asset - err = session.GetRaw(&asset1, ` + err = session.GetRaw(ctx, &asset1, ` SELECT * FROM assets ORDER BY id DESC @@ -273,13 +273,13 @@ func TestDeleteOldTrades(t *testing.T) { require.NoError(t, err) // Adding another asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "BTC", IssuerID: issuer.ID, }, []string{"code", "issuer_id"}) require.NoError(t, err) var asset2 tickerdb.Asset - err = session.GetRaw(&asset2, ` + err = session.GetRaw(ctx, &asset2, ` SELECT * FROM assets ORDER BY id DESC @@ -323,16 +323,16 @@ func TestDeleteOldTrades(t *testing.T) { LedgerCloseTime: oneYearAgo, }, } - err = session.BulkInsertTrades(trades) + err = session.BulkInsertTrades(ctx, trades) require.NoError(t, err) // Deleting trades older than 1 day ago: - err = session.DeleteOldTrades(oneDayAgo) + err = session.DeleteOldTrades(ctx, oneDayAgo) require.NoError(t, err) var dbTrades []tickerdb.Trade var trade1, trade2 tickerdb.Trade - err = session.SelectRaw(&dbTrades, "SELECT * FROM trades") + err = session.SelectRaw(ctx, &dbTrades, "SELECT * FROM trades") require.NoError(t, err) assert.Equal(t, 2, len(dbTrades)) diff --git a/services/ticker/internal/tickerdb/tickerdbtest/tickerdbtest.go b/services/ticker/internal/tickerdb/tickerdbtest/tickerdbtest.go index b01998c521..34bebb6602 100644 --- a/services/ticker/internal/tickerdb/tickerdbtest/tickerdbtest.go +++ b/services/ticker/internal/tickerdb/tickerdbtest/tickerdbtest.go @@ -17,7 +17,7 @@ import ( func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerdb.TickerSession) { db := dbtest.Postgres(t) session.DB = db.Open() - session.Ctx = context.Background() + ctx := context.Background() // Run migrations to make sure the tests are run // on the most updated schema version @@ -33,11 +33,11 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd _, err = tbl.Insert(tickerdb.Issuer{ PublicKey: issuer1PK, Name: "FOO BAR", - }).IgnoreCols("id").Exec() + }).IgnoreCols("id").Exec(ctx) require.NoError(t, err) var issuer1 tickerdb.Issuer - err = session.GetRaw(&issuer1, ` + err = session.GetRaw(ctx, &issuer1, ` SELECT * FROM issuers WHERE public_key = ?`, @@ -50,11 +50,11 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd _, err = tbl.Insert(tickerdb.Issuer{ PublicKey: issuer2PK, Name: "FOO BAR", - }).IgnoreCols("id").Exec() + }).IgnoreCols("id").Exec(ctx) require.NoError(t, err) var issuer2 tickerdb.Issuer - err = session.GetRaw(&issuer2, ` + err = session.GetRaw(ctx, &issuer2, ` SELECT * FROM issuers WHERE public_key = ?`, @@ -63,7 +63,7 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd require.NoError(t, err) // Adding a seed asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "ETH", IssuerAccount: issuer1PK, IssuerID: issuer1.ID, @@ -71,7 +71,7 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd }, []string{"code", "issuer_id"}) require.NoError(t, err) var ethAsset1 tickerdb.Asset - err = session.GetRaw(ðAsset1, ` + err = session.GetRaw(ctx, ðAsset1, ` SELECT * FROM assets WHERE code = ? @@ -82,7 +82,7 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd require.NoError(t, err) // Adding a seed asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "ETH", IssuerAccount: issuer2PK, IssuerID: issuer2.ID, @@ -91,7 +91,7 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd require.NoError(t, err) var ethAsset2 tickerdb.Asset - err = session.GetRaw(ðAsset2, ` + err = session.GetRaw(ctx, ðAsset2, ` SELECT * FROM assets WHERE code = ? @@ -102,7 +102,7 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd require.NoError(t, err) // Adding another asset to be used later: - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "BTC", IssuerAccount: issuer1PK, IssuerID: issuer1.ID, @@ -111,7 +111,7 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd require.NoError(t, err) var btcAsset tickerdb.Asset - err = session.GetRaw(&btcAsset, ` + err = session.GetRaw(ctx, &btcAsset, ` SELECT * FROM assets WHERE code = ? @@ -166,7 +166,7 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd LedgerCloseTime: threeDaysAgo, }, } - err = session.BulkInsertTrades(trades) + err = session.BulkInsertTrades(ctx, trades) require.NoError(t, err) // Adding some orderbook stats: @@ -184,14 +184,14 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd SpreadMidPoint: 0.35, UpdatedAt: obTime, } - err = session.InsertOrUpdateOrderbookStats( + err = session.InsertOrUpdateOrderbookStats(ctx, &orderbookStats, []string{"base_asset_id", "counter_asset_id"}, ) require.NoError(t, err) var obBTCETH1 tickerdb.OrderbookStats - err = session.GetRaw(&obBTCETH1, ` + err = session.GetRaw(ctx, &obBTCETH1, ` SELECT * FROM orderbook_stats ORDER BY id DESC @@ -211,14 +211,14 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd Spread: 0.55, SpreadMidPoint: 0.85, } - err = session.InsertOrUpdateOrderbookStats( + err = session.InsertOrUpdateOrderbookStats(ctx, &orderbookStats, []string{"base_asset_id", "counter_asset_id"}, ) require.NoError(t, err) var obETH1BTC tickerdb.OrderbookStats - err = session.GetRaw(&obETH1BTC, ` + err = session.GetRaw(ctx, &obETH1BTC, ` SELECT * FROM orderbook_stats ORDER BY id DESC @@ -239,14 +239,14 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd SpreadMidPoint: 0.36, UpdatedAt: obTime, } - err = session.InsertOrUpdateOrderbookStats( + err = session.InsertOrUpdateOrderbookStats(ctx, &orderbookStats, []string{"base_asset_id", "counter_asset_id"}, ) require.NoError(t, err) var obBTCETH2 tickerdb.OrderbookStats - err = session.GetRaw(&obBTCETH2, ` + err = session.GetRaw(ctx, &obBTCETH2, ` SELECT * FROM orderbook_stats ORDER BY id DESC @@ -267,14 +267,14 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd Spread: 150.0, SpreadMidPoint: 200.0, } - err = session.InsertOrUpdateOrderbookStats( + err = session.InsertOrUpdateOrderbookStats(ctx, &orderbookStats, []string{"base_asset_id", "counter_asset_id"}, ) require.NoError(t, err) var obETH2BTC tickerdb.OrderbookStats - err = session.GetRaw(&obETH2BTC, ` + err = session.GetRaw(ctx, &obETH2BTC, ` SELECT * FROM orderbook_stats ORDER BY id DESC @@ -283,7 +283,7 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd require.NoError(t, err) // Add an XLM asset. - err = session.InsertOrUpdateAsset(&tickerdb.Asset{ + err = session.InsertOrUpdateAsset(ctx, &tickerdb.Asset{ Code: "XLM", IssuerAccount: issuer1PK, IssuerID: issuer1.ID, @@ -292,7 +292,7 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd require.NoError(t, err) var xlmAsset tickerdb.Asset - err = session.GetRaw(&xlmAsset, ` + err = session.GetRaw(ctx, &xlmAsset, ` SELECT * FROM assets WHERE code = ? @@ -323,7 +323,7 @@ func SetupTickerTestSession(t *testing.T, migrationsDir string) (session tickerd LedgerCloseTime: now, }, } - err = session.BulkInsertTrades(trades) + err = session.BulkInsertTrades(ctx, trades) require.NoError(t, err) return diff --git a/support/config/config_option.go b/support/config/config_option.go index c152c5059d..7a8300966d 100644 --- a/support/config/config_option.go +++ b/support/config/config_option.go @@ -161,3 +161,27 @@ func SetURL(co *ConfigOption) { *(co.ConfigKey.(**url.URL)) = urlType } } + +// SetOptionalUint converts a command line uint to a *uint where the nil +// value indicates the flag was not explicitly set +func SetOptionalUint(co *ConfigOption) { + key := co.ConfigKey.(**uint) + if co.flag.Changed { + *key = new(uint) + **key = uint(viper.GetInt(co.Name)) + } else { + *key = nil + } +} + +// SetOptionalString converts a command line uint to a *string where the nil +// value indicates the flag was not explicitly set +func SetOptionalString(co *ConfigOption) { + key := co.ConfigKey.(**string) + if co.flag.Changed { + *key = new(string) + **key = viper.GetString(co.Name) + } else { + *key = nil + } +} diff --git a/support/config/config_option_test.go b/support/config/config_option_test.go index a7853b0dbd..a19e718907 100644 --- a/support/config/config_option_test.go +++ b/support/config/config_option_test.go @@ -25,6 +25,52 @@ type testOptions struct { Uint32 uint32 } +// Test that optional flags are set to nil if they are not configured explicitly. +func TestConfigOption_optionalFlags_defaults(t *testing.T) { + var optUint *uint + var optString *string + configOpts := ConfigOptions{ + {Name: "uint", OptType: types.Uint, ConfigKey: &optUint, CustomSetValue: SetOptionalUint, FlagDefault: uint(0)}, + {Name: "string", OptType: types.String, ConfigKey: &optString, CustomSetValue: SetOptionalString}, + } + cmd := &cobra.Command{ + Use: "doathing", + Run: func(_ *cobra.Command, _ []string) { + configOpts.Require() + configOpts.SetValues() + }, + } + configOpts.Init(cmd) + + cmd.SetArgs([]string{}) + cmd.Execute() + assert.Equal(t, (*string)(nil), optString) + assert.Equal(t, (*uint)(nil), optUint) +} + +// Test that optional flags are set to non nil values when they are configured explicitly. +func TestConfigOption_optionalFlags_set(t *testing.T) { + var optUint *uint + var optString *string + configOpts := ConfigOptions{ + {Name: "uint", OptType: types.Uint, ConfigKey: &optUint, CustomSetValue: SetOptionalUint, FlagDefault: uint(0)}, + {Name: "string", OptType: types.String, ConfigKey: &optString, CustomSetValue: SetOptionalString}, + } + cmd := &cobra.Command{ + Use: "doathing", + Run: func(_ *cobra.Command, _ []string) { + configOpts.Require() + configOpts.SetValues() + }, + } + configOpts.Init(cmd) + + cmd.SetArgs([]string{"--uint", "6", "--string", "test-string"}) + cmd.Execute() + assert.Equal(t, "test-string", *optString) + assert.Equal(t, uint(6), *optUint) +} + // Test that when there are no args the defaults in the config options are // used. func TestConfigOption_getSimpleValue_defaults(t *testing.T) { @@ -52,6 +98,9 @@ func TestConfigOption_getSimpleValue_defaults(t *testing.T) { assert.Equal(t, true, opts.Bool) assert.Equal(t, uint(2), opts.Uint) assert.Equal(t, uint32(3), opts.Uint32) + for _, opt := range configOpts { + assert.False(t, opt.flag.Changed) + } } // Test that when args are given, their values are used. @@ -86,6 +135,9 @@ func TestConfigOption_getSimpleValue_setFlag(t *testing.T) { assert.Equal(t, true, opts.Bool) assert.Equal(t, uint(20), opts.Uint) assert.Equal(t, uint32(30), opts.Uint32) + for _, opt := range configOpts { + assert.True(t, opt.flag.Changed) + } } // Test that when args are not given but env vars are, their values are used. diff --git a/support/db/batch_insert_builder.go b/support/db/batch_insert_builder.go index baa009ac8b..2bcc94beeb 100644 --- a/support/db/batch_insert_builder.go +++ b/support/db/batch_insert_builder.go @@ -1,6 +1,7 @@ package db import ( + "context" "fmt" "reflect" "sort" @@ -32,7 +33,7 @@ type BatchInsertBuilder struct { // (map keys). Otherwise, error will be returned. Please note that rows are not // added one by one but in batches when `Exec` is called (or `MaxBatchSize` is // reached). -func (b *BatchInsertBuilder) Row(row map[string]interface{}) error { +func (b *BatchInsertBuilder) Row(ctx context.Context, row map[string]interface{}) error { if b.columns == nil { b.columns = make([]string, 0, len(row)) b.rows = make([][]interface{}, 0) @@ -61,13 +62,13 @@ func (b *BatchInsertBuilder) Row(row map[string]interface{}) error { // Call Exec when MaxBatchSize is reached. if len(b.rows) == b.MaxBatchSize { - return b.Exec() + return b.Exec(ctx) } return nil } -func (b *BatchInsertBuilder) RowStruct(row interface{}) error { +func (b *BatchInsertBuilder) RowStruct(ctx context.Context, row interface{}) error { if b.columns == nil { b.columns = columnsForStruct(row) b.rows = make([][]interface{}, 0) @@ -93,7 +94,7 @@ func (b *BatchInsertBuilder) RowStruct(row interface{}) error { // Call Exec when MaxBatchSize is reached. if len(b.rows) == b.MaxBatchSize { - return b.Exec() + return b.Exec(ctx) } return nil @@ -109,7 +110,7 @@ func (b *BatchInsertBuilder) insertSQL() sq.InsertBuilder { // Exec inserts rows in batches. In case of errors it's possible that some batches // were added so this should be run in a DB transaction for easy rollbacks. -func (b *BatchInsertBuilder) Exec() error { +func (b *BatchInsertBuilder) Exec(ctx context.Context) error { sql := b.insertSQL() paramsCount := 0 @@ -118,7 +119,7 @@ func (b *BatchInsertBuilder) Exec() error { paramsCount += len(row) if paramsCount > postgresQueryMaxParams-2*len(b.columns) { - _, err := b.Table.Session.Exec(sql) + _, err := b.Table.Session.Exec(ctx, sql) if err != nil { return errors.Wrap(err, fmt.Sprintf("error adding values while inserting to %s", b.Table.Name)) } @@ -129,7 +130,7 @@ func (b *BatchInsertBuilder) Exec() error { // Insert last batch if paramsCount > 0 { - _, err := b.Table.Session.Exec(sql) + _, err := b.Table.Session.Exec(ctx, sql) if err != nil { return errors.Wrap(err, fmt.Sprintf("error adding values while inserting to %s", b.Table.Name)) } diff --git a/support/db/batch_insert_builder_test.go b/support/db/batch_insert_builder_test.go index 0463a1aefc..10077b0f51 100644 --- a/support/db/batch_insert_builder_test.go +++ b/support/db/batch_insert_builder_test.go @@ -23,32 +23,33 @@ type invalidHungerRow struct { func TestBatchInsertBuilder(t *testing.T) { db := dbtest.Postgres(t).Load(testSchema) defer db.Close() - sess := &Session{DB: db.Open(), Ctx: context.Background()} + sess := &Session{DB: db.Open()} defer sess.DB.Close() + ctx := context.Background() insertBuilder := &BatchInsertBuilder{ Table: sess.GetTable("people"), } // exec on the empty set should produce no errors - assert.NoError(t, insertBuilder.Exec()) + assert.NoError(t, insertBuilder.Exec(ctx)) var err error - err = insertBuilder.Row(map[string]interface{}{ + err = insertBuilder.Row(ctx, map[string]interface{}{ "name": "bubba", "hunger_level": "120", }) assert.NoError(t, err) - err = insertBuilder.RowStruct(hungerRow{ + err = insertBuilder.RowStruct(ctx, hungerRow{ Name: "bubba2", HungerLevel: "1202", }) assert.NoError(t, err) // Extra column - err = insertBuilder.Row(map[string]interface{}{ + err = insertBuilder.Row(ctx, map[string]interface{}{ "name": "bubba", "hunger_level": "120", "abc": "def", @@ -56,30 +57,30 @@ func TestBatchInsertBuilder(t *testing.T) { assert.EqualError(t, err, "invalid number of columns (expected=2, actual=3)") // Not enough columns - err = insertBuilder.Row(map[string]interface{}{ + err = insertBuilder.Row(ctx, map[string]interface{}{ "name": "bubba", }) assert.EqualError(t, err, "invalid number of columns (expected=2, actual=1)") // Invalid column - err = insertBuilder.Row(map[string]interface{}{ + err = insertBuilder.Row(ctx, map[string]interface{}{ "name": "bubba", "hello": "120", }) assert.EqualError(t, err, `column "hunger_level" does not exist`) - err = insertBuilder.RowStruct(invalidHungerRow{ + err = insertBuilder.RowStruct(ctx, invalidHungerRow{ Name: "Max", HungerLevel: "500", }) assert.EqualError(t, err, `expected value of type "db.hungerRow" but got "db.invalidHungerRow" value`) - err = insertBuilder.Exec() + err = insertBuilder.Exec(ctx) assert.NoError(t, err) // Check rows var found []person - err = sess.SelectRaw(&found, `SELECT * FROM people WHERE name like 'bubba%'`) + err = sess.SelectRaw(ctx, &found, `SELECT * FROM people WHERE name like 'bubba%'`) require.NoError(t, err) assert.Equal( @@ -91,13 +92,13 @@ func TestBatchInsertBuilder(t *testing.T) { }, ) - err = insertBuilder.Row(map[string]interface{}{ + err = insertBuilder.Row(ctx, map[string]interface{}{ "name": "bubba", "hunger_level": "1", }) assert.NoError(t, err) - err = insertBuilder.Exec() + err = insertBuilder.Exec(ctx) assert.EqualError( t, err, "error adding values while inserting to people: exec failed: pq:"+ " duplicate key value violates unique constraint \"people_pkey\"", @@ -105,16 +106,16 @@ func TestBatchInsertBuilder(t *testing.T) { insertBuilder.Suffix = "ON CONFLICT (name) DO NOTHING" - err = insertBuilder.Row(map[string]interface{}{ + err = insertBuilder.Row(ctx, map[string]interface{}{ "name": "bubba", "hunger_level": "1", }) assert.NoError(t, err) - err = insertBuilder.Exec() + err = insertBuilder.Exec(ctx) assert.NoError(t, err) - err = sess.SelectRaw(&found, `SELECT * FROM people WHERE name like 'bubba%'`) + err = sess.SelectRaw(ctx, &found, `SELECT * FROM people WHERE name like 'bubba%'`) require.NoError(t, err) assert.Equal( @@ -128,16 +129,16 @@ func TestBatchInsertBuilder(t *testing.T) { insertBuilder.Suffix = "ON CONFLICT (name) DO UPDATE SET hunger_level = EXCLUDED.hunger_level" - err = insertBuilder.Row(map[string]interface{}{ + err = insertBuilder.Row(ctx, map[string]interface{}{ "name": "bubba", "hunger_level": "1", }) assert.NoError(t, err) - err = insertBuilder.Exec() + err = insertBuilder.Exec(ctx) assert.NoError(t, err) - err = sess.SelectRaw(&found, `SELECT * FROM people WHERE name like 'bubba%'`) + err = sess.SelectRaw(ctx, &found, `SELECT * FROM people WHERE name like 'bubba%'`) require.NoError(t, err) assert.Equal( diff --git a/support/db/delete_builder.go b/support/db/delete_builder.go index 4ed699abfe..e467f6da91 100644 --- a/support/db/delete_builder.go +++ b/support/db/delete_builder.go @@ -1,6 +1,7 @@ package db import ( + "context" "database/sql" "github.com/pkg/errors" @@ -8,8 +9,8 @@ import ( // Exec executes the query represented by the builder, deleting any rows that // match the queries where clauses. -func (delb *DeleteBuilder) Exec() (sql.Result, error) { - r, err := delb.Table.Session.Exec(delb.sql) +func (delb *DeleteBuilder) Exec(ctx context.Context) (sql.Result, error) { + r, err := delb.Table.Session.Exec(ctx, delb.sql) if err != nil { return nil, errors.Wrap(err, "delete failed") } diff --git a/support/db/delete_builder_test.go b/support/db/delete_builder_test.go index 481eeea2ce..cf0eb40594 100644 --- a/support/db/delete_builder_test.go +++ b/support/db/delete_builder_test.go @@ -12,11 +12,12 @@ import ( func TestDeleteBuilder_Exec(t *testing.T) { db := dbtest.Postgres(t).Load(testSchema) defer db.Close() - sess := &Session{DB: db.Open(), Ctx: context.Background()} + sess := &Session{DB: db.Open()} defer sess.DB.Close() + ctx := context.Background() tbl := sess.GetTable("people") - r, err := tbl.Delete("name = ?", "scott").Exec() + r, err := tbl.Delete("name = ?", "scott").Exec(ctx) if assert.NoError(t, err, "query error") { actual, err := r.RowsAffected() @@ -24,7 +25,7 @@ func TestDeleteBuilder_Exec(t *testing.T) { assert.Equal(t, int64(1), actual) var found int - err = sess.GetRaw(&found, "SELECT COUNT(*) FROM people WHERE name = ?", "scott") + err = sess.GetRaw(ctx, &found, "SELECT COUNT(*) FROM people WHERE name = ?", "scott") require.NoError(t, err) assert.Equal(t, 0, found) } diff --git a/support/db/get_builder.go b/support/db/get_builder.go index 11b252cb94..6d5ef64134 100644 --- a/support/db/get_builder.go +++ b/support/db/get_builder.go @@ -1,14 +1,15 @@ package db import ( + "context" "github.com/stellar/go/support/errors" ) // Exec executes the query represented by the builder, populating the // destination with the results returned by running the query against the // current database session. -func (gb *GetBuilder) Exec() error { - err := gb.Table.Session.Get(gb.dest, gb.sql) +func (gb *GetBuilder) Exec(ctx context.Context) error { + err := gb.Table.Session.Get(ctx, gb.dest, gb.sql) if err != nil { return errors.Wrap(err, "get failed") } diff --git a/support/db/get_builder_test.go b/support/db/get_builder_test.go index b982f93b6a..7af3d47372 100644 --- a/support/db/get_builder_test.go +++ b/support/db/get_builder_test.go @@ -11,13 +11,13 @@ import ( func TestGetBuilder_Exec(t *testing.T) { db := dbtest.Postgres(t).Load(testSchema) defer db.Close() - sess := &Session{DB: db.Open(), Ctx: context.Background()} + sess := &Session{DB: db.Open()} defer sess.DB.Close() var found person tbl := sess.GetTable("people") - err := tbl.Get(&found, "name = ?", "scott").Exec() + err := tbl.Get(&found, "name = ?", "scott").Exec(context.Background()) if assert.NoError(t, err, "query error") { assert.Equal(t, "scott", found.Name) diff --git a/support/db/insert_builder.go b/support/db/insert_builder.go index 8085abc3f9..5cfe13297a 100644 --- a/support/db/insert_builder.go +++ b/support/db/insert_builder.go @@ -1,6 +1,7 @@ package db import ( + "context" "database/sql" "reflect" @@ -9,7 +10,7 @@ import ( // Exec executes the query represented by the builder, inserting each val // provided to the builder into the database. -func (ib *InsertBuilder) Exec() (sql.Result, error) { +func (ib *InsertBuilder) Exec(ctx context.Context) (sql.Result, error) { if len(ib.rows) == 0 { return nil, &NoRowsError{} } @@ -49,7 +50,7 @@ func (ib *InsertBuilder) Exec() (sql.Result, error) { // TODO: support return inserted id - r, err := ib.Table.Session.Exec(sql) + r, err := ib.Table.Session.Exec(ctx, sql) if err != nil { return nil, errors.Wrap(err, "insert failed") } diff --git a/support/db/insert_builder_test.go b/support/db/insert_builder_test.go index 3ea3bc0331..85c2465640 100644 --- a/support/db/insert_builder_test.go +++ b/support/db/insert_builder_test.go @@ -10,9 +10,10 @@ import ( ) func TestInsertBuilder_Exec(t *testing.T) { + ctx := context.Background() db := dbtest.Postgres(t).Load(testSchema) defer db.Close() - sess := &Session{DB: db.Open(), Ctx: context.Background()} + sess := &Session{DB: db.Open()} defer sess.DB.Close() tbl := sess.GetTable("people") @@ -20,11 +21,11 @@ func TestInsertBuilder_Exec(t *testing.T) { _, err := tbl.Insert(person{ Name: "bubba", HungerLevel: "120", - }).Exec() + }).Exec(ctx) if assert.NoError(t, err) { var found []person - err = sess.SelectRaw( + err = sess.SelectRaw(ctx, &found, "SELECT * FROM people WHERE name = ?", "bubba", @@ -39,7 +40,7 @@ func TestInsertBuilder_Exec(t *testing.T) { } // no rows - _, err = tbl.Insert().Exec() + _, err = tbl.Insert().Exec(ctx) if assert.Error(t, err) { assert.IsType(t, &NoRowsError{}, err) assert.EqualError(t, err, "no rows provided to insert") @@ -52,7 +53,7 @@ func TestInsertBuilder_Exec(t *testing.T) { }, person{ Name: "bubba3", HungerLevel: "120", - }).Exec() + }).Exec(ctx) if assert.NoError(t, err) { count, err2 := r.RowsAffected() @@ -69,7 +70,7 @@ func TestInsertBuilder_Exec(t *testing.T) { Name: "bubba2", HungerLevel: "120", NotAColumn: 3, - }).Exec() + }).Exec(ctx) assert.Error(t, err) } diff --git a/support/db/main.go b/support/db/main.go index d467bd4a5c..acd4e7d576 100644 --- a/support/db/main.go +++ b/support/db/main.go @@ -92,38 +92,42 @@ type UpdateBuilder struct { } // Session provides helper methods for making queries against `DB` and provides -// utilities such as automatic query logging and transaction management. NOTE: -// A Session is designed to be lightweight and temporarily lived (usually -// request scoped) which is one reason it is acceptable for it to store a -// context. It is not presently intended to cross goroutine boundaries and is -// not concurrency safe. +// utilities such as automatic query logging and transaction management. NOTE: +// Because transaction-handling is stateful, it is not presently intended to +// cross goroutine boundaries and is not concurrency safe. type Session struct { // DB is the database connection that queries should be executed against. DB *sqlx.DB - // Ctx is the context in which the repo is operating under. - Ctx context.Context - tx *sqlx.Tx txOptions *sql.TxOptions } type SessionInterface interface { - BeginTx(opts *sql.TxOptions) error - Begin() error - Rollback() error - TruncateTables(tables []string) error - Clone() *Session + BeginTx(ctx context.Context, opts *sql.TxOptions) error + Begin(ctx context.Context) error + Rollback(ctx context.Context) error + Commit(ctx context.Context) error + GetTx() *sqlx.Tx + GetTxOptions() *sql.TxOptions + TruncateTables(ctx context.Context, tables []string) error + Clone() SessionInterface Close() error - Get(dest interface{}, query squirrel.Sqlizer) error - GetRaw(dest interface{}, query string, args ...interface{}) error - Select(dest interface{}, query squirrel.Sqlizer) error - SelectRaw(dest interface{}, query string, args ...interface{}) error + Get(ctx context.Context, dest interface{}, query squirrel.Sqlizer) error + GetRaw(ctx context.Context, dest interface{}, query string, args ...interface{}) error + Select(ctx context.Context, dest interface{}, query squirrel.Sqlizer) error + SelectRaw(ctx context.Context, dest interface{}, query string, args ...interface{}) error GetTable(name string) *Table - Exec(query squirrel.Sqlizer) (sql.Result, error) - ExecRaw(query string, args ...interface{}) (sql.Result, error) + Exec(ctx context.Context, query squirrel.Sqlizer) (sql.Result, error) + ExecRaw(ctx context.Context, query string, args ...interface{}) (sql.Result, error) NoRows(err error) bool - Ping(timeout time.Duration) error + Ping(ctx context.Context, timeout time.Duration) error + DeleteRange( + ctx context.Context, + start, end int64, + table string, + idCol string, + ) error } // Table helps to build sql queries against a given table. It logically @@ -157,7 +161,7 @@ func Open(dialect, dsn string) (*Session, error) { return nil, errors.Wrap(err, "ping failed") } - return &Session{DB: db, Ctx: context.Background()}, nil + return &Session{DB: db}, nil } // Wrap wraps a bare *sql.DB (from the database/sql stdlib package) in a @@ -165,7 +169,7 @@ func Open(dialect, dsn string) (*Session, error) { // control the instantiation of the database connection, but would still like to // leverage the facilities provided in Session. func Wrap(base *sql.DB, dialect string) *Session { - return &Session{DB: sqlx.NewDb(base, dialect), Ctx: context.Background()} + return &Session{DB: sqlx.NewDb(base, dialect)} } // ensure various types conform to Conn interface diff --git a/support/db/main_test.go b/support/db/main_test.go index 237e01578c..8ca94f1e3b 100644 --- a/support/db/main_test.go +++ b/support/db/main_test.go @@ -1,7 +1,6 @@ package db import ( - "context" "testing" "github.com/stellar/go/support/db/dbtest" @@ -18,7 +17,7 @@ type person struct { func TestGetTable(t *testing.T) { db := dbtest.Postgres(t).Load(testSchema) defer db.Close() - sess := &Session{DB: db.Open(), Ctx: context.Background()} + sess := &Session{DB: db.Open()} defer sess.DB.Close() tbl := sess.GetTable("users") diff --git a/support/db/metrics.go b/support/db/metrics.go new file mode 100644 index 0000000000..1733d2d1d7 --- /dev/null +++ b/support/db/metrics.go @@ -0,0 +1,454 @@ +package db + +import ( + "context" + "database/sql" + "fmt" + "strings" + "time" + + "github.com/Masterminds/squirrel" + "github.com/prometheus/client_golang/prometheus" +) + +type CtxKey string + +var RouteContextKey = CtxKey("route") +var QueryTypeContextKey = CtxKey("query_type") + +type Subservice string + +var CoreSubservice = Subservice("core") +var HistorySubservice = Subservice("history") +var IngestSubservice = Subservice("ingest") + +type QueryType string + +var DeleteQueryType = QueryType("delete") +var InsertQueryType = QueryType("insert") +var SelectQueryType = QueryType("select") +var UndefinedQueryType = QueryType("undefined") +var UpdateQueryType = QueryType("update") +var UpsertQueryType = QueryType("upsert") + +// contextRoute returns a string representing the request endpoint, or "undefined" if it wasn't found +func contextRoute(ctx context.Context) string { + if endpoint, ok := ctx.Value(&RouteContextKey).(string); ok { + return endpoint + } + return "undefined" +} + +type SessionWithMetrics struct { + SessionInterface + registry *prometheus.Registry + queryCounter *prometheus.CounterVec + queryDurationSummary *prometheus.SummaryVec + maxOpenConnectionsGauge prometheus.GaugeFunc + openConnectionsGauge prometheus.GaugeFunc + inUseConnectionsGauge prometheus.GaugeFunc + idleConnectionsGauge prometheus.GaugeFunc + waitCountCounter prometheus.CounterFunc + waitDurationCounter prometheus.CounterFunc + maxIdleClosedCounter prometheus.CounterFunc + maxIdleTimeClosedCounter prometheus.CounterFunc + maxLifetimeClosedCounter prometheus.CounterFunc +} + +func RegisterMetrics(base *Session, namespace string, sub Subservice, registry *prometheus.Registry) SessionInterface { + s := &SessionWithMetrics{ + SessionInterface: base, + registry: registry, + } + + s.queryCounter = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: namespace, + Subsystem: "db", + Name: "query_total", + ConstLabels: prometheus.Labels{"subservice": string(sub)}, + }, + []string{"query_type", "error", "route"}, + ) + registry.MustRegister(s.queryCounter) + + s.queryDurationSummary = prometheus.NewSummaryVec( + prometheus.SummaryOpts{ + Namespace: namespace, Subsystem: "db", + Name: "query_duration_seconds", + ConstLabels: prometheus.Labels{"subservice": string(sub)}, + }, + []string{"query_type", "error", "route"}, + ) + registry.MustRegister(s.queryDurationSummary) + + // txnCounter: prometheus.NewCounter( + // prometheus.CounterOpts{Namespace: namespace, Subsystem: "db", Name: "transaction_total"}, + // ), + // registry.MustRegister(s.txnCounter) + // txnDuration: prometheus.NewHistogram( + // prometheus.HistogramOpts{ + // Namespace: namespace, Subsystem: "db", + // Name: "transaction_duration_seconds", + // Buckets: prometheus.ExponentialBuckets(0.1, 3, 5), + // }, + // ), + // registry.MustRegister(s.txnDuration) + + s.maxOpenConnectionsGauge = prometheus.NewGaugeFunc( + prometheus.GaugeOpts{ + Namespace: namespace, + Subsystem: "db", + Name: "max_open_connections", + ConstLabels: prometheus.Labels{"subservice": string(sub)}, + }, + func() float64 { + // Right now MaxOpenConnections in Horizon is static however it's possible that + // it will change one day. In such case, using GaugeFunc is very cheap and will + // prevent issues with this metric in the future. + return float64(base.DB.Stats().MaxOpenConnections) + }, + ) + registry.MustRegister(s.maxOpenConnectionsGauge) + + s.openConnectionsGauge = prometheus.NewGaugeFunc( + prometheus.GaugeOpts{ + Namespace: namespace, + Subsystem: "db", + Name: "open_connections", + ConstLabels: prometheus.Labels{"subservice": string(sub)}, + }, + func() float64 { + return float64(base.DB.Stats().OpenConnections) + }, + ) + registry.MustRegister(s.openConnectionsGauge) + + s.inUseConnectionsGauge = prometheus.NewGaugeFunc( + prometheus.GaugeOpts{ + Namespace: namespace, + Subsystem: "db", + Name: "in_use_connections", + ConstLabels: prometheus.Labels{"subservice": string(sub)}, + }, + func() float64 { + return float64(base.DB.Stats().InUse) + }, + ) + registry.MustRegister(s.inUseConnectionsGauge) + + s.idleConnectionsGauge = prometheus.NewGaugeFunc( + prometheus.GaugeOpts{ + Namespace: namespace, + Subsystem: "db", + Name: "idle_connections", + ConstLabels: prometheus.Labels{"subservice": string(sub)}, + }, + func() float64 { + return float64(base.DB.Stats().Idle) + }, + ) + registry.MustRegister(s.idleConnectionsGauge) + + s.waitCountCounter = prometheus.NewCounterFunc( + prometheus.CounterOpts{ + Namespace: namespace, + Subsystem: "db", + Name: "wait_count_total", + Help: "total number of number of connections waited for", + ConstLabels: prometheus.Labels{"subservice": string(sub)}, + }, + func() float64 { + return float64(base.DB.Stats().WaitCount) + }, + ) + registry.MustRegister(s.waitCountCounter) + + s.waitDurationCounter = prometheus.NewCounterFunc( + prometheus.CounterOpts{ + Namespace: namespace, + Subsystem: "db", + Name: "wait_duration_seconds_total", + Help: "total time blocked waiting for a new connection", + ConstLabels: prometheus.Labels{"subservice": string(sub)}, + }, + func() float64 { + return base.DB.Stats().WaitDuration.Seconds() + }, + ) + registry.MustRegister(s.waitDurationCounter) + + s.maxIdleClosedCounter = prometheus.NewCounterFunc( + prometheus.CounterOpts{ + Namespace: namespace, + Subsystem: "db", + Name: "max_idle_closed_total", + Help: "total number of number of connections closed due to SetMaxIdleConns", + ConstLabels: prometheus.Labels{"subservice": string(sub)}, + }, + func() float64 { + return float64(base.DB.Stats().MaxIdleClosed) + }, + ) + registry.MustRegister(s.maxIdleClosedCounter) + + s.maxIdleTimeClosedCounter = prometheus.NewCounterFunc( + prometheus.CounterOpts{ + Namespace: namespace, + Subsystem: "db", + Name: "max_idle_time_closed_total", + Help: "total number of number of connections closed due to SetConnMaxIdleTime", + ConstLabels: prometheus.Labels{"subservice": string(sub)}, + }, + func() float64 { + return float64(base.DB.Stats().MaxIdleTimeClosed) + }, + ) + registry.MustRegister(s.maxIdleTimeClosedCounter) + + s.maxLifetimeClosedCounter = prometheus.NewCounterFunc( + prometheus.CounterOpts{ + Namespace: namespace, + Subsystem: "db", + Name: "max_lifetime_closed_total", + Help: "total number of number of connections closed due to SetConnMaxLifetime", + ConstLabels: prometheus.Labels{"subservice": string(sub)}, + }, + func() float64 { + return float64(base.DB.Stats().MaxLifetimeClosed) + }, + ) + registry.MustRegister(s.maxLifetimeClosedCounter) + + return s +} + +func (s *SessionWithMetrics) Close() error { + s.registry.Unregister(s.queryCounter) + s.registry.Unregister(s.queryDurationSummary) + // s.registry.Unregister(s.txnCounter) + // s.registry.Unregister(s.txnDurationSummary) + s.registry.Unregister(s.maxOpenConnectionsGauge) + s.registry.Unregister(s.openConnectionsGauge) + s.registry.Unregister(s.inUseConnectionsGauge) + s.registry.Unregister(s.idleConnectionsGauge) + s.registry.Unregister(s.waitCountCounter) + s.registry.Unregister(s.waitDurationCounter) + s.registry.Unregister(s.maxIdleClosedCounter) + s.registry.Unregister(s.maxIdleTimeClosedCounter) + s.registry.Unregister(s.maxLifetimeClosedCounter) + return s.SessionInterface.Close() +} + +// TODO: Implement these +// func (s *SessionWithMetrics) BeginTx(ctx context.Context, opts *sql.TxOptions) error { +// func (s *SessionWithMetrics) Begin(ctx context.Context) error { +// func (s *SessionWithMetrics) Commit(ctx context.Context) error +// func (s *SessionWithMetrics) Rollback(ctx context.Context) error + +func (s *SessionWithMetrics) TruncateTables(ctx context.Context, tables []string) (err error) { + timer := prometheus.NewTimer(prometheus.ObserverFunc(func(v float64) { + s.queryDurationSummary.With(prometheus.Labels{ + "query_type": "truncate_tables", + "error": fmt.Sprint(err != nil), + "route": contextRoute(ctx), + }).Observe(v) + })) + defer func() { + timer.ObserveDuration() + s.queryCounter.With(prometheus.Labels{ + "query_type": "truncate_tables", + "error": fmt.Sprint(err != nil), + "route": contextRoute(ctx), + }).Inc() + }() + + err = s.SessionInterface.TruncateTables(ctx, tables) + return err +} + +func (s *SessionWithMetrics) Clone() SessionInterface { + return &SessionWithMetrics{ + SessionInterface: s.SessionInterface.Clone(), + registry: s.registry, + queryCounter: s.queryCounter, + queryDurationSummary: s.queryDurationSummary, + // txnCounter: s.txnCounter, + // txnDurationSummary: s.txnDurationSummary, + maxOpenConnectionsGauge: s.maxOpenConnectionsGauge, + openConnectionsGauge: s.openConnectionsGauge, + inUseConnectionsGauge: s.inUseConnectionsGauge, + idleConnectionsGauge: s.idleConnectionsGauge, + waitCountCounter: s.waitCountCounter, + waitDurationCounter: s.waitDurationCounter, + maxIdleClosedCounter: s.maxIdleClosedCounter, + maxIdleTimeClosedCounter: s.maxIdleTimeClosedCounter, + maxLifetimeClosedCounter: s.maxLifetimeClosedCounter, + } +} + +func getQueryType(ctx context.Context, query squirrel.Sqlizer) QueryType { + // Do we have an explicit query type set in the context? For raw execs, in + // lieu of better detection. e.g. "upsert" + if q, ok := ctx.Value(&QueryTypeContextKey).(QueryType); ok { + return q + } + + // is it a squirrel builder? + if _, ok := query.(squirrel.DeleteBuilder); ok { + return DeleteQueryType + } + if _, ok := query.(squirrel.InsertBuilder); ok { + return InsertQueryType + } + if _, ok := query.(squirrel.SelectBuilder); ok { + return SelectQueryType + } + if _, ok := query.(squirrel.UpdateBuilder); ok { + return UpdateQueryType + } + + // Try to guess based on the first word of the string. + // e.g. "SELECT * FROM table" + str, _, err := query.ToSql() + words := strings.Fields(strings.TrimSpace(strings.ToLower(str))) + if err == nil && len(words) > 0 { + // Make sure we don't only get known keywords here, incase it's a more + // complex query. + for _, word := range []string{"delete", "insert", "select", "update"} { + if word == words[0] { + return QueryType(word) + } + } + } + + // Fresh out of ideas. + return UndefinedQueryType +} + +func (s *SessionWithMetrics) Get(ctx context.Context, dest interface{}, query squirrel.Sqlizer) (err error) { + queryType := string(getQueryType(ctx, query)) + timer := prometheus.NewTimer(prometheus.ObserverFunc(func(v float64) { + s.queryDurationSummary.With(prometheus.Labels{ + "query_type": queryType, + "error": fmt.Sprint(err != nil), + "route": contextRoute(ctx), + }).Observe(v) + })) + defer func() { + timer.ObserveDuration() + s.queryCounter.With(prometheus.Labels{ + "query_type": queryType, + "error": fmt.Sprint(err != nil), + "route": contextRoute(ctx), + }).Inc() + }() + + err = s.SessionInterface.Get(ctx, dest, query) + return err +} + +func (s *SessionWithMetrics) GetRaw(ctx context.Context, dest interface{}, query string, args ...interface{}) (err error) { + return s.Get(ctx, dest, squirrel.Expr(query, args...)) +} + +func (s *SessionWithMetrics) Select(ctx context.Context, dest interface{}, query squirrel.Sqlizer) (err error) { + queryType := string(getQueryType(ctx, query)) + timer := prometheus.NewTimer(prometheus.ObserverFunc(func(v float64) { + s.queryDurationSummary.With(prometheus.Labels{ + "query_type": queryType, + "error": fmt.Sprint(err != nil), + "route": contextRoute(ctx), + }).Observe(v) + })) + defer func() { + timer.ObserveDuration() + s.queryCounter.With(prometheus.Labels{ + "query_type": queryType, + "error": fmt.Sprint(err != nil), + "route": contextRoute(ctx), + }).Inc() + }() + + err = s.SessionInterface.Select(ctx, dest, query) + return err +} + +func (s *SessionWithMetrics) SelectRaw(ctx context.Context, dest interface{}, query string, args ...interface{}) (err error) { + return s.Select(ctx, dest, squirrel.Expr(query, args...)) +} + +func (s *SessionWithMetrics) Exec(ctx context.Context, query squirrel.Sqlizer) (result sql.Result, err error) { + queryType := string(getQueryType(ctx, query)) + timer := prometheus.NewTimer(prometheus.ObserverFunc(func(v float64) { + s.queryDurationSummary.With(prometheus.Labels{ + "query_type": queryType, + "error": fmt.Sprint(err != nil), + "route": contextRoute(ctx), + }).Observe(v) + })) + defer func() { + timer.ObserveDuration() + s.queryCounter.With(prometheus.Labels{ + "query_type": queryType, + "error": fmt.Sprint(err != nil), + "route": contextRoute(ctx), + }).Inc() + }() + + result, err = s.SessionInterface.Exec(ctx, query) + return result, err +} + +func (s *SessionWithMetrics) ExecRaw(ctx context.Context, query string, args ...interface{}) (result sql.Result, err error) { + return s.Exec(ctx, squirrel.Expr(query, args...)) +} + +func (s *SessionWithMetrics) Ping(ctx context.Context, timeout time.Duration) (err error) { + queryType := "ping" + timer := prometheus.NewTimer(prometheus.ObserverFunc(func(v float64) { + s.queryDurationSummary.With(prometheus.Labels{ + "query_type": queryType, + "error": fmt.Sprint(err != nil), + "route": contextRoute(ctx), + }).Observe(v) + })) + defer func() { + timer.ObserveDuration() + s.queryCounter.With(prometheus.Labels{ + "query_type": queryType, + "error": fmt.Sprint(err != nil), + "route": contextRoute(ctx), + }).Inc() + }() + + err = s.SessionInterface.Ping(ctx, timeout) + return err +} + +func (s *SessionWithMetrics) DeleteRange( + ctx context.Context, + start, end int64, + table string, + idCol string, +) (err error) { + queryType := "delete" + timer := prometheus.NewTimer(prometheus.ObserverFunc(func(v float64) { + s.queryDurationSummary.With(prometheus.Labels{ + "query_type": queryType, + "error": fmt.Sprint(err != nil), + "route": contextRoute(ctx), + }).Observe(v) + })) + defer func() { + timer.ObserveDuration() + s.queryCounter.With(prometheus.Labels{ + "query_type": queryType, + "error": fmt.Sprint(err != nil), + "route": contextRoute(ctx), + }).Inc() + }() + + err = s.SessionInterface.DeleteRange(ctx, start, end, table, idCol) + return err +} diff --git a/support/db/mock_session.go b/support/db/mock_session.go index 90d66d0bcb..fb5971bb29 100644 --- a/support/db/mock_session.go +++ b/support/db/mock_session.go @@ -1,11 +1,13 @@ package db import ( + "context" "database/sql" "time" "github.com/Masterminds/squirrel" sq "github.com/Masterminds/squirrel" + "github.com/jmoiron/sqlx" "github.com/stretchr/testify/mock" ) @@ -15,29 +17,44 @@ type MockSession struct { mock.Mock } -func (m *MockSession) Begin() error { - args := m.Called() +func (m *MockSession) Begin(ctx context.Context) error { + args := m.Called(ctx) return args.Error(0) } -func (m *MockSession) BeginTx(opts *sql.TxOptions) error { - args := m.Called(opts) +func (m *MockSession) BeginTx(ctx context.Context, opts *sql.TxOptions) error { + args := m.Called(ctx, opts) return args.Error(0) } -func (m *MockSession) Rollback() error { - args := m.Called() +func (m *MockSession) Rollback(ctx context.Context) error { + args := m.Called(ctx) return args.Error(0) } -func (m *MockSession) TruncateTables(tables []string) error { - args := m.Called(tables) +func (m *MockSession) Commit(ctx context.Context) error { + args := m.Called(ctx) return args.Error(0) } -func (m *MockSession) Clone() *Session { +func (m *MockSession) GetTx() *sqlx.Tx { args := m.Called() - return args.Get(0).(*Session) + return args.Get(0).(*sqlx.Tx) +} + +func (m *MockSession) GetTxOptions() *sql.TxOptions { + args := m.Called() + return args.Get(0).(*sql.TxOptions) +} + +func (m *MockSession) TruncateTables(ctx context.Context, tables []string) error { + args := m.Called(ctx, tables) + return args.Error(0) +} + +func (m *MockSession) Clone() SessionInterface { + args := m.Called() + return args.Get(0).(SessionInterface) } func (m *MockSession) Close() error { @@ -45,27 +62,27 @@ func (m *MockSession) Close() error { return args.Error(0) } -func (m *MockSession) Get(dest interface{}, query sq.Sqlizer) error { - args := m.Called(dest, query) +func (m *MockSession) Get(ctx context.Context, dest interface{}, query sq.Sqlizer) error { + args := m.Called(ctx, dest, query) return args.Error(0) } -func (m *MockSession) GetRaw(dest interface{}, query string, args ...interface{}) error { - argss := m.Called(dest, query, args) +func (m *MockSession) GetRaw(ctx context.Context, dest interface{}, query string, args ...interface{}) error { + argss := m.Called(ctx, dest, query, args) return argss.Error(0) } -func (m *MockSession) Select(dest interface{}, query squirrel.Sqlizer) error { - argss := m.Called(dest, query) +func (m *MockSession) Select(ctx context.Context, dest interface{}, query squirrel.Sqlizer) error { + argss := m.Called(ctx, dest, query) return argss.Error(0) } -func (m *MockSession) SelectRaw( +func (m *MockSession) SelectRaw(ctx context.Context, dest interface{}, query string, args ...interface{}, ) error { - argss := m.Called(dest, query, args) + argss := m.Called(ctx, dest, query, args) return argss.Error(0) } @@ -74,13 +91,13 @@ func (m *MockSession) GetTable(name string) *Table { return args.Get(0).(*Table) } -func (m *MockSession) Exec(query squirrel.Sqlizer) (sql.Result, error) { - args := m.Called(query) +func (m *MockSession) Exec(ctx context.Context, query squirrel.Sqlizer) (sql.Result, error) { + args := m.Called(ctx, query) return args.Get(0).(sql.Result), args.Error(1) } -func (m *MockSession) ExecRaw(query string, args ...interface{}) (sql.Result, error) { - argss := m.Called(query, args) +func (m *MockSession) ExecRaw(ctx context.Context, query string, args ...interface{}) (sql.Result, error) { + argss := m.Called(ctx, query, args) return argss.Get(0).(sql.Result), argss.Error(1) } @@ -89,6 +106,15 @@ func (m *MockSession) NoRows(err error) bool { return args.Get(0).(bool) } -func (m *MockSession) Ping(timeout time.Duration) error { - return m.Called(timeout).Error(0) +func (m *MockSession) Ping(ctx context.Context, timeout time.Duration) error { + return m.Called(ctx, timeout).Error(0) +} + +func (m *MockSession) DeleteRange( + ctx context.Context, + start, end int64, + table string, + idCol string, +) (err error) { + return m.Called(ctx, start, end, table, idCol).Error(0) } diff --git a/support/db/schema/main.go b/support/db/schema/main.go index b541b949cb..8eff0ff8f4 100644 --- a/support/db/schema/main.go +++ b/support/db/schema/main.go @@ -1,6 +1,7 @@ package schema import ( + "context" "database/sql" "errors" @@ -21,8 +22,8 @@ const ( ) // Init installs the latest schema into db after clearing it first -func Init(db *db.Session, latest []byte) error { - return db.ExecAll(string(latest)) +func Init(ctx context.Context, db *db.Session, latest []byte) error { + return db.ExecAll(ctx, string(latest)) } // Migrate performs schema migration. Migrations can occur in one of three diff --git a/support/db/select_builder.go b/support/db/select_builder.go index 540d34b3c0..968c4b58c2 100644 --- a/support/db/select_builder.go +++ b/support/db/select_builder.go @@ -1,14 +1,15 @@ package db import ( + "context" "github.com/stellar/go/support/errors" ) // Exec executes the query represented by the builder, populating the // destination with the results returned by running the query against the // current database session. -func (sb *SelectBuilder) Exec() error { - err := sb.Table.Session.Select(sb.dest, sb.sql) +func (sb *SelectBuilder) Exec(ctx context.Context) error { + err := sb.Table.Session.Select(ctx, sb.dest, sb.sql) if err != nil { return errors.Wrap(err, "select failed") } diff --git a/support/db/select_builder_test.go b/support/db/select_builder_test.go index 121b9a8eb7..93cc888aeb 100644 --- a/support/db/select_builder_test.go +++ b/support/db/select_builder_test.go @@ -12,7 +12,7 @@ import ( func TestSelectBuilder_Exec(t *testing.T) { db := dbtest.Postgres(t).Load(testSchema) defer db.Close() - sess := &Session{DB: db.Open(), Ctx: context.Background()} + sess := &Session{DB: db.Open()} defer sess.DB.Close() var results []person @@ -30,7 +30,7 @@ func TestSelectBuilder_Exec(t *testing.T) { assert.Equal(t, "scott", args[0]) } - err = sb.Exec() + err = sb.Exec(context.Background()) if assert.NoError(t, err, "query error") { if assert.Len(t, results, 1) { diff --git a/support/db/session.go b/support/db/session.go index d55e883436..5a34dd0057 100644 --- a/support/db/session.go +++ b/support/db/session.go @@ -16,12 +16,12 @@ import ( ) // Begin binds this session to a new transaction. -func (s *Session) Begin() error { +func (s *Session) Begin(ctx context.Context) error { if s.tx != nil { return errors.New("already in transaction") } - tx, err := s.DB.BeginTxx(s.Ctx, nil) + tx, err := s.DB.BeginTxx(ctx, nil) if err != nil { if s.cancelled(err) { return ErrCancelled @@ -29,8 +29,7 @@ func (s *Session) Begin() error { return errors.Wrap(err, "beginx failed") } - s.logBegin() - + log.Ctx(ctx).Debug("sql: begin") s.tx = tx s.txOptions = nil return nil @@ -38,12 +37,12 @@ func (s *Session) Begin() error { // BeginTx binds this session to a new transaction which is configured with the // given transaction options -func (s *Session) BeginTx(opts *sql.TxOptions) error { +func (s *Session) BeginTx(ctx context.Context, opts *sql.TxOptions) error { if s.tx != nil { return errors.New("already in transaction") } - tx, err := s.DB.BeginTxx(s.Ctx, opts) + tx, err := s.DB.BeginTxx(ctx, opts) if err != nil { if s.cancelled(err) { return ErrCancelled @@ -51,7 +50,7 @@ func (s *Session) BeginTx(opts *sql.TxOptions) error { return errors.Wrap(err, "beginTx failed") } - s.logBegin() + log.Ctx(ctx).Debug("sql: begin") s.tx = tx s.txOptions = opts @@ -69,10 +68,9 @@ func (s *Session) GetTxOptions() *sql.TxOptions { // Clone clones the receiver, returning a new instance backed by the same // context and db. The result will not be bound to any transaction that the // source is currently within. -func (s *Session) Clone() *Session { +func (s *Session) Clone() SessionInterface { return &Session{ - DB: s.DB, - Ctx: s.Ctx, + DB: s.DB, } } @@ -84,13 +82,13 @@ func (s *Session) Close() error { } // Commit commits the current transaction -func (s *Session) Commit() error { +func (s *Session) Commit(ctx context.Context) error { if s.tx == nil { return errors.New("not in transaction") } err := s.tx.Commit() - s.logCommit() + log.Ctx(ctx).Debug("sql: commit") s.tx = nil s.txOptions = nil return err @@ -104,6 +102,7 @@ func (s *Session) Dialect() string { // DeleteRange deletes a range of rows from a sql table between `start` and // `end` (exclusive). func (s *Session) DeleteRange( + ctx context.Context, start, end int64, table string, idCol string, @@ -113,31 +112,31 @@ func (s *Session) DeleteRange( start, end, ) - _, err := s.Exec(del) + _, err := s.Exec(ctx, del) return err } // Get runs `query`, setting the first result found on `dest`, if // any. -func (s *Session) Get(dest interface{}, query sq.Sqlizer) error { +func (s *Session) Get(ctx context.Context, dest interface{}, query sq.Sqlizer) error { sql, args, err := s.build(query) if err != nil { return err } - return s.GetRaw(dest, sql, args...) + return s.GetRaw(ctx, dest, sql, args...) } // GetRaw runs `query` with `args`, setting the first result found on // `dest`, if any. -func (s *Session) GetRaw(dest interface{}, query string, args ...interface{}) error { +func (s *Session) GetRaw(ctx context.Context, dest interface{}, query string, args ...interface{}) error { query, err := s.ReplacePlaceholders(query) if err != nil { return errors.Wrap(err, "replace placeholders failed") } start := time.Now() - err = s.conn().GetContext(s.Ctx, dest, query, args...) - s.log("get", start, query, args) + err = s.conn().GetContext(ctx, dest, query, args...) + s.log(ctx, "get", start, query, args) if err == nil { return nil @@ -162,51 +161,51 @@ func (s *Session) GetTable(name string) *Table { } } -func (s *Session) TruncateTables(tables []string) error { +func (s *Session) TruncateTables(ctx context.Context, tables []string) error { truncateCmd := fmt.Sprintf("truncate %s restart identity cascade", strings.Join(tables[:], ",")) - _, err := s.ExecRaw(truncateCmd) + _, err := s.ExecRaw(ctx, truncateCmd) return err } // Exec runs `query` -func (s *Session) Exec(query sq.Sqlizer) (sql.Result, error) { +func (s *Session) Exec(ctx context.Context, query sq.Sqlizer) (sql.Result, error) { sql, args, err := s.build(query) if err != nil { return nil, err } - return s.ExecRaw(sql, args...) + return s.ExecRaw(ctx, sql, args...) } // ExecAll runs all sql commands in `script` against `r` within a single // transaction. -func (s *Session) ExecAll(script string) error { - err := s.Begin() +func (s *Session) ExecAll(ctx context.Context, script string) error { + err := s.Begin(ctx) if err != nil { return err } - defer s.Rollback() + defer s.Rollback(ctx) for _, cmd := range sqlutils.AllStatements(script) { - _, err = s.ExecRaw(cmd) + _, err = s.ExecRaw(ctx, cmd) if err != nil { return err } } - return s.Commit() + return s.Commit(ctx) } // ExecRaw runs `query` with `args` -func (s *Session) ExecRaw(query string, args ...interface{}) (sql.Result, error) { +func (s *Session) ExecRaw(ctx context.Context, query string, args ...interface{}) (sql.Result, error) { query, err := s.ReplacePlaceholders(query) if err != nil { return nil, errors.Wrap(err, "replace placeholders failed") } start := time.Now() - result, err := s.conn().ExecContext(s.Ctx, query, args...) - s.log("exec", start, query, args) + result, err := s.conn().ExecContext(ctx, query, args...) + s.log(ctx, "exec", start, query, args) if err == nil { return result, nil @@ -235,24 +234,24 @@ func (s *Session) cancelled(err error) bool { } // Query runs `query`, returns a *sqlx.Rows instance -func (s *Session) Query(query sq.Sqlizer) (*sqlx.Rows, error) { +func (s *Session) Query(ctx context.Context, query sq.Sqlizer) (*sqlx.Rows, error) { sql, args, err := s.build(query) if err != nil { return nil, err } - return s.QueryRaw(sql, args...) + return s.QueryRaw(ctx, sql, args...) } // QueryRaw runs `query` with `args` -func (s *Session) QueryRaw(query string, args ...interface{}) (*sqlx.Rows, error) { +func (s *Session) QueryRaw(ctx context.Context, query string, args ...interface{}) (*sqlx.Rows, error) { query, err := s.ReplacePlaceholders(query) if err != nil { return nil, errors.Wrap(err, "replace placeholders failed") } start := time.Now() - result, err := s.conn().QueryxContext(s.Ctx, query, args...) - s.log("query", start, query, args) + result, err := s.conn().QueryxContext(ctx, query, args...) + s.log(ctx, "query", start, query, args) if err == nil { return result, nil @@ -282,13 +281,13 @@ func (s *Session) ReplacePlaceholders(query string) (string, error) { } // Rollback rolls back the current transaction -func (s *Session) Rollback() error { +func (s *Session) Rollback(ctx context.Context) error { if s.tx == nil { return errors.New("not in transaction") } err := s.tx.Rollback() - s.logRollback() + log.Ctx(ctx).Debug("sql: rollback") s.tx = nil s.txOptions = nil return err @@ -296,23 +295,24 @@ func (s *Session) Rollback() error { // Ping verifies a connection to the database is still alive, // establishing a connection if necessary. -func (s *Session) Ping(timeout time.Duration) error { - ctx, cancel := context.WithTimeout(s.Ctx, timeout) +func (s *Session) Ping(ctx context.Context, timeout time.Duration) error { + ctx, cancel := context.WithTimeout(ctx, timeout) defer cancel() return s.DB.PingContext(ctx) } // Select runs `query`, setting the results found on `dest`. -func (s *Session) Select(dest interface{}, query sq.Sqlizer) error { +func (s *Session) Select(ctx context.Context, dest interface{}, query sq.Sqlizer) error { sql, args, err := s.build(query) if err != nil { return err } - return s.SelectRaw(dest, sql, args...) + return s.SelectRaw(ctx, dest, sql, args...) } // SelectRaw runs `query` with `args`, setting the results found on `dest`. func (s *Session) SelectRaw( + ctx context.Context, dest interface{}, query string, args ...interface{}, @@ -324,8 +324,8 @@ func (s *Session) SelectRaw( } start := time.Now() - err = s.conn().SelectContext(s.Ctx, dest, query, args...) - s.log("select", start, query, args) + err = s.conn().SelectContext(ctx, dest, query, args...) + s.log(ctx, "select", start, query, args) if err == nil { return nil @@ -382,31 +382,10 @@ func (s *Session) conn() Conn { return s.DB } -func (s *Session) log(typ string, start time.Time, query string, args []interface{}) { +func (s *Session) log(ctx context.Context, typ string, start time.Time, query string, args []interface{}) { log. - Ctx(s.logCtx()). WithField("args", args). WithField("sql", query). WithField("dur", time.Since(start).String()). Debugf("sql: %s", typ) } - -func (s *Session) logBegin() { - log.Ctx(s.logCtx()).Debug("sql: begin") -} - -func (s *Session) logCommit() { - log.Ctx(s.logCtx()).Debug("sql: commit") -} - -func (s *Session) logRollback() { - log.Ctx(s.logCtx()).Debug("sql: rollback") -} - -func (s *Session) logCtx() context.Context { - if s.Ctx != nil { - return s.Ctx - } - - return context.Background() -} diff --git a/support/db/session_test.go b/support/db/session_test.go index 0219e4806e..624e66a143 100644 --- a/support/db/session_test.go +++ b/support/db/session_test.go @@ -13,24 +13,25 @@ func TestSession(t *testing.T) { db := dbtest.Postgres(t).Load(testSchema) defer db.Close() + ctx := context.Background() assert := assert.New(t) require := require.New(t) - sess := &Session{DB: db.Open(), Ctx: context.Background()} + sess := &Session{DB: db.Open()} defer sess.DB.Close() assert.Equal("postgres", sess.Dialect()) var count int - err := sess.GetRaw(&count, "SELECT COUNT(*) FROM people") + err := sess.GetRaw(ctx, &count, "SELECT COUNT(*) FROM people") assert.NoError(err) assert.Equal(3, count) var names []string - err = sess.SelectRaw(&names, "SELECT name FROM people") + err = sess.SelectRaw(ctx, &names, "SELECT name FROM people") assert.NoError(err) assert.Len(names, 3) - ret, err := sess.ExecRaw("DELETE FROM people") + ret, err := sess.ExecRaw(ctx, "DELETE FROM people") assert.NoError(err) deleted, err := ret.RowsAffected() assert.NoError(err) @@ -40,7 +41,7 @@ func TestSession(t *testing.T) { // during execution) db.Load(testSchema) var name string - err = sess.GetRaw( + err = sess.GetRaw(ctx, &name, "SELECT name FROM people WHERE hunger_level = ? AND name != '??'", 1000000, @@ -49,7 +50,7 @@ func TestSession(t *testing.T) { assert.Equal("scott", name) // Test NoRows - err = sess.GetRaw( + err = sess.GetRaw(ctx, &name, "SELECT name FROM people WHERE hunger_level = ?", 1234, @@ -58,29 +59,29 @@ func TestSession(t *testing.T) { // Test transactions db.Load(testSchema) - require.NoError(sess.Begin(), "begin failed") - err = sess.GetRaw(&count, "SELECT COUNT(*) FROM people") + require.NoError(sess.Begin(ctx), "begin failed") + err = sess.GetRaw(ctx, &count, "SELECT COUNT(*) FROM people") assert.NoError(err) assert.Equal(3, count) - _, err = sess.ExecRaw("DELETE FROM people") + _, err = sess.ExecRaw(ctx, "DELETE FROM people") assert.NoError(err) - err = sess.GetRaw(&count, "SELECT COUNT(*) FROM people") + err = sess.GetRaw(ctx, &count, "SELECT COUNT(*) FROM people") assert.NoError(err) assert.Equal(0, count, "people did not appear deleted inside transaction") - assert.NoError(sess.Rollback(), "rollback failed") + assert.NoError(sess.Rollback(ctx), "rollback failed") // Ensure commit works - require.NoError(sess.Begin(), "begin failed") - sess.ExecRaw("DELETE FROM people") - assert.NoError(sess.Commit(), "commit failed") - err = sess.GetRaw(&count, "SELECT COUNT(*) FROM people") + require.NoError(sess.Begin(ctx), "begin failed") + sess.ExecRaw(ctx, "DELETE FROM people") + assert.NoError(sess.Commit(ctx), "commit failed") + err = sess.GetRaw(ctx, &count, "SELECT COUNT(*) FROM people") assert.NoError(err) assert.Equal(0, count) // ensure that selecting into a populated slice clears the slice first db.Load(testSchema) require.Len(names, 3, "ids slice was not preloaded with data") - err = sess.SelectRaw(&names, "SELECT name FROM people limit 2") + err = sess.SelectRaw(ctx, &names, "SELECT name FROM people limit 2") assert.NoError(err) assert.Len(names, 2) diff --git a/support/db/update_builder.go b/support/db/update_builder.go index 6f862b345a..cd6e3373d5 100644 --- a/support/db/update_builder.go +++ b/support/db/update_builder.go @@ -1,6 +1,7 @@ package db import ( + "context" "database/sql" "reflect" @@ -9,8 +10,8 @@ import ( // Exec executes the query that has been previously configured on the // UpdateBuilder. -func (ub *UpdateBuilder) Exec() (sql.Result, error) { - r, err := ub.Table.Session.Exec(ub.sql) +func (ub *UpdateBuilder) Exec(ctx context.Context) (sql.Result, error) { + r, err := ub.Table.Session.Exec(ctx, ub.sql) if err != nil { return nil, errors.Wrap(err, "select failed") } diff --git a/txnbuild/CHANGELOG.md b/txnbuild/CHANGELOG.md index dbea01d93d..548e3a69ae 100644 --- a/txnbuild/CHANGELOG.md +++ b/txnbuild/CHANGELOG.md @@ -5,6 +5,15 @@ file. This project adheres to [Semantic Versioning](http://semver.org/). ## Unreleased +### New features + +* Add `SequenceNumber` function to `Transaction`. +* Add `AddSignatureDecorated` function to `Transaction`. + +### Bug Fix + +* `BaseFee` in `TransactionParams` when calling `NewTransaction` is allowed to be zero because the fee can be paid by wrapping a `Transaction` in a `FeeBumpTransaction`. ([#3622](https://github.com/stellar/go/pull/3622)) + ## [v7.0.0](https://github.com/stellar/go/releases/tag/horizonclient-v7.0.0) - 2021-05-15 ### Breaking changes diff --git a/txnbuild/transaction.go b/txnbuild/transaction.go index 871a2a5089..fb0ce3a6a5 100644 --- a/txnbuild/transaction.go +++ b/txnbuild/transaction.go @@ -28,7 +28,7 @@ import ( "github.com/stellar/go/xdr" ) -// MinBaseFee is the minimum transaction fee for the Stellar network. +// MinBaseFee is the minimum transaction fee for the Stellar network of 100 stroops (0.00001 XLM). const MinBaseFee = 100 // Account represents the aspects of a Stellar account necessary to construct transactions. See @@ -76,6 +76,13 @@ func concatSignatures( return extended, nil } +func concatSignatureDecorated(e xdr.TransactionEnvelope, signatures []xdr.DecoratedSignature, newSignatures []xdr.DecoratedSignature) ([]xdr.DecoratedSignature, error) { + extended := make([]xdr.DecoratedSignature, len(signatures)+len(newSignatures)) + copy(extended, signatures) + copy(extended[len(signatures):], newSignatures) + return extended, nil +} + func concatSignatureBase64(e xdr.TransactionEnvelope, signatures []xdr.DecoratedSignature, networkStr, publicKey, signature string) ([]xdr.DecoratedSignature, error) { if signature == "" { return nil, errors.New("signature not presented") @@ -212,6 +219,11 @@ func (t *Transaction) SourceAccount() SimpleAccount { return t.sourceAccount } +// SequenceNumber returns the sequence number of the transaction. +func (t *Transaction) SequenceNumber() int64 { + return t.sourceAccount.Sequence +} + // Memo returns the memo configured for this transaction. func (t *Transaction) Memo() Memo { return t.memo @@ -300,6 +312,17 @@ func (t *Transaction) SignHashX(preimage []byte) (*Transaction, error) { return t.clone(extendedSignatures), nil } +// AddSignatureDecorated returns a new Transaction instance which extends the current instance +// with an additional decorated signature(s). +func (t *Transaction) AddSignatureDecorated(signature ...xdr.DecoratedSignature) (*Transaction, error) { + extendedSignatures, err := concatSignatureDecorated(t.envelope, t.Signatures(), signature) + if err != nil { + return nil, err + } + + return t.clone(extendedSignatures), nil +} + // AddSignatureBase64 returns a new Transaction instance which extends the current instance // with an additional signature derived from the given base64-encoded signature. func (t *Transaction) AddSignatureBase64(network, publicKey, signature string) (*Transaction, error) { @@ -678,10 +701,8 @@ func NewTransaction(params TransactionParams) (*Transaction, error) { sourceAccount = accountID.ToMuxedAccount() } - if tx.baseFee < MinBaseFee { - return nil, errors.Errorf( - "base fee cannot be lower than network minimum of %d", MinBaseFee, - ) + if tx.baseFee < 0 { + return nil, errors.Errorf("base fee cannot be negative") } if len(tx.operations) == 0 { diff --git a/txnbuild/transaction_fee_test.go b/txnbuild/transaction_fee_test.go index ae49462f0f..888f8a2483 100644 --- a/txnbuild/transaction_fee_test.go +++ b/txnbuild/transaction_fee_test.go @@ -4,23 +4,36 @@ import ( "math" "testing" + "github.com/stellar/go/keypair" "github.com/stretchr/testify/assert" ) -func TestMinBaseFee(t *testing.T) { - kp0 := newKeypair0() - sourceAccount := NewSimpleAccount(kp0.Address(), 1) +func TestBaseFeeCanBeZeroOrPositive(t *testing.T) { + validBaseFees := []int64{0, MinBaseFee} + for _, bf := range validBaseFees { + tx, err := NewTransaction( + TransactionParams{ + SourceAccount: &SimpleAccount{keypair.MustRandom().Address(), 1}, + Operations: []Operation{&Inflation{}}, + BaseFee: bf, + Timebounds: NewInfiniteTimeout(), + }, + ) + assert.NoError(t, err) + assert.Equal(t, bf, tx.baseFee) + } +} +func TestBaseFeeErrorWhenNegative(t *testing.T) { _, err := NewTransaction( TransactionParams{ - SourceAccount: &sourceAccount, + SourceAccount: &SimpleAccount{keypair.MustRandom().Address(), 1}, Operations: []Operation{&Inflation{}}, - BaseFee: MinBaseFee - 1, + BaseFee: -1, Timebounds: NewInfiniteTimeout(), }, ) - - assert.EqualError(t, err, "base fee cannot be lower than network minimum of 100") + assert.EqualError(t, err, "base fee cannot be negative") } func TestFeeBumpMinBaseFee(t *testing.T) { @@ -46,7 +59,6 @@ func TestFeeBumpMinBaseFee(t *testing.T) { }, ) assert.EqualError(t, err, "base fee cannot be lower than network minimum of 100") - } func TestFeeOverflow(t *testing.T) { diff --git a/txnbuild/transaction_test.go b/txnbuild/transaction_test.go index cb26411e55..2cca8d4b60 100644 --- a/txnbuild/transaction_test.go +++ b/txnbuild/transaction_test.go @@ -15,6 +15,37 @@ import ( "github.com/stretchr/testify/require" ) +func TestMissingTimebounds(t *testing.T) { + kp0 := newKeypair0() + + _, err := NewTransaction( + TransactionParams{ + SourceAccount: &SimpleAccount{AccountID: kp0.Address(), Sequence: 1}, + Operations: []Operation{&BumpSequence{BumpTo: 0}}, + BaseFee: MinBaseFee, + }, + ) + assert.EqualError(t, err, "invalid time bounds: timebounds must be constructed using NewTimebounds(), NewTimeout(), or NewInfiniteTimeout()") +} + +func TestTimebounds(t *testing.T) { + kp0 := newKeypair0() + + tb := NewTimeout(300) + tx, err := NewTransaction( + TransactionParams{ + SourceAccount: &SimpleAccount{AccountID: kp0.Address(), Sequence: 1}, + Operations: []Operation{&BumpSequence{BumpTo: 0}}, + BaseFee: MinBaseFee, + Timebounds: tb, + }, + ) + assert.NoError(t, err) + assert.Equal(t, tb, tx.timebounds) + assert.Equal(t, xdr.TimePoint(tb.MinTime), tx.envelope.V1.Tx.TimeBounds.MinTime) + assert.Equal(t, xdr.TimePoint(tb.MaxTime), tx.envelope.V1.Tx.TimeBounds.MaxTime) +} + func TestMissingSourceAccount(t *testing.T) { _, err := NewTransaction(TransactionParams{}) assert.EqualError(t, err, "transaction has no source account") @@ -1343,6 +1374,7 @@ func TestFromXDR(t *testing.T) { assert.Equal(t, int64(100), newTx.BaseFee(), "Base fee should match") sa := newTx.SourceAccount() assert.Equal(t, int64(6606179392290817), sa.Sequence, "Sequence number should match") + assert.Equal(t, int64(6606179392290817), newTx.SequenceNumber(), "Sequence number should match") assert.Equal(t, 1, len(newTx.Operations()), "Operations length should match") assert.IsType(t, newTx.Operations()[0], &Payment{}, "Operation types should match") paymentOp, ok1 := newTx.Operations()[0].(*Payment) @@ -1363,6 +1395,7 @@ func TestFromXDR(t *testing.T) { assert.Equal(t, "GBUKBCG5VLRKAVYAIREJRUJHOKLIADZJOICRW43WVJCLES52BDOTCQZU", newTx2.SourceAccount().AccountID, "source accounts should match") assert.Equal(t, int64(200), newTx2.BaseFee(), "Base fee should match") assert.Equal(t, int64(14800457302017), newTx2.SourceAccount().Sequence, "Sequence number should match") + assert.Equal(t, int64(14800457302017), newTx2.SequenceNumber(), "Sequence number should match") memo, ok := newTx2.Memo().(MemoText) assert.Equal(t, true, ok) @@ -1544,6 +1577,113 @@ func TestSignWithSecretKey(t *testing.T) { assert.Equal(t, expected, actual, "base64 xdr should match") } +func TestAddSignatureDecorated(t *testing.T) { + kp0 := newKeypair0() + kp1 := newKeypair1() + txSource := NewSimpleAccount(kp0.Address(), int64(9605939170639897)) + tx1Source := NewSimpleAccount(kp0.Address(), int64(9605939170639897)) + createAccount := CreateAccount{ + Destination: "GCCOBXW2XQNUSL467IEILE6MMCNRR66SSVL4YQADUNYYNUVREF3FIV2Z", + Amount: "10", + SourceAccount: kp1.Address(), + } + + expected, err := newSignedTransaction( + TransactionParams{ + SourceAccount: &txSource, + IncrementSequenceNum: true, + Operations: []Operation{&createAccount}, + BaseFee: MinBaseFee, + Timebounds: NewInfiniteTimeout(), + }, + network.TestNetworkPassphrase, + kp0, kp1, + ) + assert.NoError(t, err) + + tx1, err := NewTransaction( + TransactionParams{ + SourceAccount: &tx1Source, + IncrementSequenceNum: true, + Operations: []Operation{&createAccount}, + BaseFee: MinBaseFee, + Timebounds: NewInfiniteTimeout(), + }, + ) + assert.NoError(t, err) + + // Same if signatures added separately. + { + var tx1sigs1 *Transaction + tx1sigs1, err = tx1.AddSignatureDecorated( + xdr.DecoratedSignature{ + Hint: kp0.Hint(), + Signature: func() xdr.Signature { + var sigBytes []byte + sigBytes, err = base64.StdEncoding.DecodeString("TVogR6tbrWLnOc1BsP/j+Qrxpja2NWNgeRIwujECYscRdMG7AMtnb3dkCT7sqlbSM0TTzlRh7G+BcVocYBtqBw==") + if err != nil { + require.NoError(t, err) + } + return xdr.Signature(sigBytes) + }(), + }, + ) + assert.NoError(t, err) + tx1sigs1, err = tx1sigs1.AddSignatureDecorated( + xdr.DecoratedSignature{ + Hint: kp1.Hint(), + Signature: func() xdr.Signature { + var sigBytes []byte + sigBytes, err = base64.StdEncoding.DecodeString("Iy77JteoW/FbeiuViZpgTyvrHP4BnBOeyVOjrdb5O/MpEMwcSlYXAkCBqPt4tBDil4jIcDDLhm7TsN6aUBkIBg==") + if err != nil { + require.NoError(t, err) + } + return xdr.Signature(sigBytes) + }(), + }, + ) + assert.NoError(t, err) + var actual string + actual, err = tx1sigs1.Base64() + assert.NoError(t, err) + assert.Equal(t, expected, actual, "base64 xdr should match") + } + + // Same if signatures added together. + { + var tx1sigs2 *Transaction + tx1sigs2, err = tx1.AddSignatureDecorated( + xdr.DecoratedSignature{ + Hint: kp0.Hint(), + Signature: func() xdr.Signature { + var sigBytes []byte + sigBytes, err = base64.StdEncoding.DecodeString("TVogR6tbrWLnOc1BsP/j+Qrxpja2NWNgeRIwujECYscRdMG7AMtnb3dkCT7sqlbSM0TTzlRh7G+BcVocYBtqBw==") + if err != nil { + require.NoError(t, err) + } + return xdr.Signature(sigBytes) + }(), + }, + xdr.DecoratedSignature{ + Hint: kp1.Hint(), + Signature: func() xdr.Signature { + var sigBytes []byte + sigBytes, err = base64.StdEncoding.DecodeString("Iy77JteoW/FbeiuViZpgTyvrHP4BnBOeyVOjrdb5O/MpEMwcSlYXAkCBqPt4tBDil4jIcDDLhm7TsN6aUBkIBg==") + if err != nil { + require.NoError(t, err) + } + return xdr.Signature(sigBytes) + }(), + }, + ) + assert.NoError(t, err) + var actual string + actual, err = tx1sigs2.Base64() + assert.NoError(t, err) + assert.Equal(t, expected, actual, "base64 xdr should match") + } +} + func TestAddSignatureBase64(t *testing.T) { kp0 := newKeypair0() kp1 := newKeypair1() diff --git a/xdr/db.go b/xdr/db.go index 22d4fe72f3..224a88ac6d 100644 --- a/xdr/db.go +++ b/xdr/db.go @@ -5,8 +5,6 @@ import ( "encoding/hex" "errors" "fmt" - - "github.com/lib/pq" ) // This file contains implementations of the sql.Scanner interface for stellar xdr types @@ -76,24 +74,6 @@ func (t *Int64) Scan(src interface{}) error { return nil } -// Scan reads from a src into an xdr.Price -func (t *Price) Scan(src interface{}) error { - // assuming the price is represented as a two-element array [n,d] - arr := pq.Int64Array{} - err := arr.Scan(src) - - if err != nil { - return err - } - - if len(arr) != 2 { - return errors.New("price array should have exactly 2 elements") - } - - *t = Price{Int32(arr[0]), Int32(arr[1])} - return nil -} - // Scan reads from a src into an xdr.Hash func (t *Hash) Scan(src interface{}) error { decodedBytes, err := hex.DecodeString(string(src.([]uint8))) diff --git a/xdr/main.go b/xdr/main.go index de80952918..220eb29d5c 100644 --- a/xdr/main.go +++ b/xdr/main.go @@ -23,6 +23,8 @@ type Keyer interface { var _ = LedgerEntry{} var _ = LedgerKey{} +var OperationTypeToStringMap = operationTypeMap + func Uint32Ptr(val uint32) *Uint32 { pval := Uint32(val) return &pval